reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

commit a03b411eb0fce05c79e7369b1f0130f542eead85
parent 96cfb46ab25ddadb8d673ec58bc09fa46817f8f4
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Mon,  7 Mar 2016 02:38:29 -0500

cleanup signal/slot/callback mess

Diffstat:
Msrc/download.cpp | 7++++---
Msrc/download.hpp | 29++++++++++++++---------------
Msrc/import.cpp | 2+-
Msrc/listview.hpp | 11+++++------
Msrc/progress.cpp | 1-
Msrc/reapack.cpp | 2+-
Msrc/reapack.hpp | 4++--
Msrc/transaction.cpp | 2+-
Msrc/transaction.hpp | 12++++++------
9 files changed, 34 insertions(+), 36 deletions(-)

diff --git a/src/download.cpp b/src/download.cpp @@ -255,7 +255,7 @@ void Download::finishInMainThread() } m_onFinish(); - m_onDestroy(); + m_cleanupHandler(); } auto Download::state() -> State @@ -312,9 +312,10 @@ void DownloadQueue::push(Download *dl) start(); }); - dl->onDestroy([=] { - delete dl; + dl->setCleanupHandler([=] { + delete dl; + // call m_onDone() only after every onFinish slots ran if(idle()) m_onDone(); }); diff --git a/src/download.hpp b/src/download.hpp @@ -18,6 +18,7 @@ #ifndef REAPACK_DOWNLOAD_HPP #define REAPACK_DOWNLOAD_HPP +#include <functional> #include <queue> #include <string> #include <vector> @@ -30,8 +31,8 @@ class Download { public: typedef std::queue<Download *> Queue; - typedef boost::signals2::signal<void ()> Signal; - typedef Signal::slot_type Callback; + typedef boost::signals2::signal<void ()> VoidSignal; + typedef std::function<void ()> CleanupHandler; enum State { Idle, @@ -55,9 +56,9 @@ public: bool isAborted(); short progress(); - void onStart(const Callback &callback) { m_onStart.connect(callback); } - void onFinish(const Callback &callback) { m_onFinish.connect(callback); } - void onDestroy(const Callback &callback) { m_onDestroy.connect(callback); } + void onStart(const VoidSignal::slot_type &slot) { m_onStart.connect(slot); } + void onFinish(const VoidSignal::slot_type &slot) { m_onFinish.connect(slot); } + void setCleanupHandler(const CleanupHandler &cb) { m_cleanupHandler = cb; } void start(); void abort(); @@ -92,17 +93,15 @@ private: std::string m_contents; short m_progress; - Signal m_onStart; - Signal m_onFinish; - Signal m_onDestroy; + VoidSignal m_onStart; + VoidSignal m_onFinish; + CleanupHandler m_cleanupHandler; }; class DownloadQueue { public: - typedef boost::signals2::signal<void (Download *)> DlSignal; - typedef DlSignal::slot_type DlCallback; typedef boost::signals2::signal<void ()> VoidSignal; - typedef VoidSignal::slot_type VoidCallback; + typedef boost::signals2::signal<void (Download *)> DownloadSignal; DownloadQueue() {} DownloadQueue(const DownloadQueue &) = delete; @@ -114,9 +113,9 @@ public: bool idle() const { return m_queue.empty() && m_running.empty(); } - void onPush(const DlCallback &callback) { m_onPush.connect(callback); } - void onAbort(const VoidCallback &callback) { m_onAbort.connect(callback); } - void onDone(const VoidCallback &callback) { m_onDone.connect(callback); } + void onPush(const DownloadSignal::slot_type &slot) { m_onPush.connect(slot); } + void onAbort(const VoidSignal::slot_type &slot) { m_onAbort.connect(slot); } + void onDone(const VoidSignal::slot_type &slot) { m_onDone.connect(slot); } private: void clear(); @@ -124,7 +123,7 @@ private: Download::Queue m_queue; std::vector<Download *> m_running; - DlSignal m_onPush; + DownloadSignal m_onPush; VoidSignal m_onAbort; VoidSignal m_onDone; }; diff --git a/src/import.cpp b/src/import.cpp @@ -174,7 +174,7 @@ void Import::download(const string &url) SetFocus(m_url); }); - dl->onDestroy([=] { + dl->setCleanupHandler([=] { // if we are still alive if(dl->state() != Download::Aborted) m_download = nullptr; diff --git a/src/listview.hpp b/src/listview.hpp @@ -33,8 +33,7 @@ public: typedef std::vector<Column> Columns; typedef std::vector<auto_string> Row; - typedef boost::signals2::signal<void ()> Signal; - typedef Signal::slot_type Callback; + typedef boost::signals2::signal<void ()> VoidSignal; ListView(const Columns &, HWND handle); @@ -54,8 +53,8 @@ public: int itemUnderMouse() const; int rowCount() const { return (int)m_rows.size(); } - void onSelect(const Callback &callback) { m_onSelect.connect(callback); } - void onActivate(const Callback &callback) { m_onActivate.connect(callback); } + void onSelect(const VoidSignal::slot_type &slot) { m_onSelect.connect(slot); } + void onActivate(const VoidSignal::slot_type &slot) { m_onActivate.connect(slot); } protected: void onNotify(LPNMHDR, LPARAM) override; @@ -74,8 +73,8 @@ private: SortOrder m_sortOrder; std::vector<Row> m_rows; - Signal m_onSelect; - Signal m_onActivate; + VoidSignal m_onSelect; + VoidSignal m_onActivate; }; #endif diff --git a/src/progress.cpp b/src/progress.cpp @@ -19,7 +19,6 @@ #include "download.hpp" #include "resource.hpp" -#include "transaction.hpp" using namespace std; diff --git a/src/reapack.cpp b/src/reapack.cpp @@ -416,7 +416,7 @@ Transaction *ReaPack::createTransaction() Dialog::Show<Report>(m_instance, m_mainWindow, receipt); }); - m_transaction->onDestroy([=] { + m_transaction->setCleanupHandler([=] { delete m_transaction; m_transaction = nullptr; }); diff --git a/src/reapack.hpp b/src/reapack.hpp @@ -18,12 +18,12 @@ #ifndef REAPACK_REAPACK_HPP #define REAPACK_REAPACK_HPP +#include "path.hpp" + #include <functional> #include <map> #include <memory> -#include "path.hpp" - #include <reaper_plugin.h> class Config; diff --git a/src/transaction.cpp b/src/transaction.cpp @@ -278,7 +278,7 @@ void Transaction::finish() } m_onFinish(); - m_onDestroy(); + m_cleanupHandler(); } void Transaction::addError(const string &message, const string &title) diff --git a/src/transaction.hpp b/src/transaction.hpp @@ -46,14 +46,14 @@ struct HostTicket { bool add; Registry::Entry entry; std::string file; }; class Transaction { public: - typedef boost::signals2::signal<void ()> Signal; - typedef Signal::slot_type Callback; + typedef boost::signals2::signal<void ()> VoidSignal; + typedef std::function<void()> CleanupHandler; Transaction(); ~Transaction(); - void onFinish(const Callback &callback) { m_onFinish.connect(callback); } - void onDestroy(const Callback &callback) { m_onDestroy.connect(callback); } + void onFinish(const VoidSignal::slot_type &slot) { m_onFinish.connect(slot); } + void setCleanupHandler(const CleanupHandler &cb) { m_cleanupHandler = cb; } void synchronize(const Remote &, bool userAction = true); void uninstall(const Remote &); @@ -103,8 +103,8 @@ private: std::queue<InstallTicket> m_installQueue; std::queue<HostTicket> m_regQueue; - Signal m_onFinish; - Signal m_onDestroy; + VoidSignal m_onFinish; + CleanupHandler m_cleanupHandler; }; #endif