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:
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