commit 9a54925dfb0cd3cce2318ff646f9260d3ac25fa3
parent 84306929aa2af31ad58b8e84c032f41729088367
Author: cfillion <cfillion@users.noreply.github.com>
Date: Tue, 4 Sep 2018 04:13:29 -0400
move api/action setup away from main.cpp
Diffstat:
3 files changed, 52 insertions(+), 64 deletions(-)
diff --git a/src/main.cpp b/src/main.cpp
@@ -24,10 +24,8 @@
#define REAPERAPI_IMPLEMENT
#include <reaper_plugin_functions.h>
-using namespace std;
-
-#define REQUIRED_API(name) {(void **)&name, #name, true}
-#define OPTIONAL_API(name) {(void **)&name, #name, false}
+#define REQUIRED_API(name) {reinterpret_cast<void **>(&name), #name, true}
+#define OPTIONAL_API(name) {reinterpret_cast<void **>(&name), #name, false}
static bool loadAPI(void *(*getFunc)(const char *))
{
@@ -38,7 +36,6 @@ static bool loadAPI(void *(*getFunc)(const char *))
REQUIRED_API(AddExtensionsMainMenu),
REQUIRED_API(GetAppVersion),
- REQUIRED_API(GetMainHwnd),
REQUIRED_API(GetResourcePath),
REQUIRED_API(NamedCommandLookup), // v3.1415
REQUIRED_API(plugin_register),
@@ -58,7 +55,7 @@ static bool loadAPI(void *(*getFunc)(const char *))
ReaPack::VERSION, func.name);
Win32::messageBox(Splash_GetWnd ? Splash_GetWnd() : nullptr,
- msg, "ReaPack: Fatal Error", MB_OK);
+ msg, "ReaPack: Missing REAPER feature", MB_OK);
return false;
}
@@ -72,7 +69,7 @@ static bool commandHook(const int id, const int flag)
return g_reapack->actions()->run(id);
}
-static void menuHook(const char *name, HMENU handle, int f)
+static void menuHook(const char *name, HMENU handle, const int f)
{
if(strcmp(name, "Main extensions") || f != 0)
return;
@@ -132,69 +129,25 @@ static bool checkLocation(REAPER_PLUGIN_HINSTANCE module)
return false;
}
-static void setupActions()
-{
- ActionList *actions = g_reapack->actions();
-
- actions->add("REAPACK_SYNC", "ReaPack: Synchronize packages",
- bind(&ReaPack::synchronizeAll, g_reapack));
-
- actions->add("REAPACK_BROWSE", "ReaPack: Browse packages...",
- bind(&ReaPack::browsePackages, g_reapack));
-
- actions->add("REAPACK_IMPORT", "ReaPack: Import repositories...",
- bind(&ReaPack::importRemote, g_reapack));
-
- actions->add("REAPACK_MANAGE", "ReaPack: Manage repositories...",
- bind(&ReaPack::manageRemotes, g_reapack));
-
- actions->add("REAPACK_ABOUT", "ReaPack: About...",
- bind(&ReaPack::aboutSelf, g_reapack));
-}
-
-static void setupAPI()
-{
- g_reapack->addAPI(&API::AboutInstalledPackage);
- g_reapack->addAPI(&API::AboutRepository);
- g_reapack->addAPI(&API::AddSetRepository);
- g_reapack->addAPI(&API::BrowsePackages);
- g_reapack->addAPI(&API::CompareVersions);
- g_reapack->addAPI(&API::EnumOwnedFiles);
- g_reapack->addAPI(&API::FreeEntry);
- g_reapack->addAPI(&API::GetEntryInfo);
- g_reapack->addAPI(&API::GetOwner);
- g_reapack->addAPI(&API::GetRepositoryInfo);
- g_reapack->addAPI(&API::ProcessQueue);
-}
-
extern "C" REAPER_PLUGIN_DLL_EXPORT int REAPER_PLUGIN_ENTRYPOINT(
REAPER_PLUGIN_HINSTANCE instance, reaper_plugin_info_t *rec)
{
if(!rec) {
- plugin_register("-hookcommand", (void *)commandHook);
- plugin_register("-hookcustommenu", (void *)menuHook);
+ plugin_register("-hookcommand", reinterpret_cast<void *>(commandHook));
+ plugin_register("-hookcustommenu", reinterpret_cast<void *>(menuHook));
delete g_reapack;
return 0;
}
-
- if(rec->caller_version != REAPER_PLUGIN_VERSION || !rec->GetFunc)
+ else if(rec->caller_version != REAPER_PLUGIN_VERSION
+ || !loadAPI(rec->GetFunc) || !checkLocation(instance))
return 0;
- if(!loadAPI(rec->GetFunc))
- return 0;
-
- if(!checkLocation(instance))
- return 0;
-
- new ReaPack(instance);
-
- setupActions();
- setupAPI();
+ new ReaPack(instance, rec->hwnd_main);
- plugin_register("hookcommand", (void *)commandHook);
- plugin_register("hookcustommenu", (void *)menuHook);
+ plugin_register("hookcommand", reinterpret_cast<void *>(commandHook));
+ plugin_register("hookcustommenu", reinterpret_cast<void *>(menuHook));
AddExtensionsMainMenu();
diff --git a/src/reapack.cpp b/src/reapack.cpp
@@ -78,8 +78,8 @@ Path ReaPack::resourcePath()
return {GetResourcePath()};
}
-ReaPack::ReaPack(REAPER_PLUGIN_HINSTANCE instance)
- : m_instance(instance), m_mainWindow(GetMainHwnd()),
+ReaPack::ReaPack(REAPER_PLUGIN_HINSTANCE instance, HWND mainWindow)
+ : m_instance(instance), m_mainWindow(mainWindow),
m_useRootPath(resourcePath()), m_config(Path::CONFIG.prependRoot()),
m_tx{}, m_about{}, m_browser{}, m_manager{}, m_progress{}
{
@@ -90,12 +90,13 @@ ReaPack::ReaPack(REAPER_PLUGIN_HINSTANCE instance)
RichEdit::Init();
createDirectories();
+ registerSelf();
+ setupActions();
+ setupAPI();
if(m_config.isFirstRun())
manageRemotes();
- registerSelf();
-
#ifdef _WIN32
CleanupTempFiles();
#endif
@@ -109,6 +110,39 @@ ReaPack::~ReaPack()
s_instance = nullptr;
}
+void ReaPack::setupActions()
+{
+ m_actions.add("REAPACK_SYNC", "ReaPack: Synchronize packages",
+ std::bind(&ReaPack::synchronizeAll, this));
+
+ m_actions.add("REAPACK_BROWSE", "ReaPack: Browse packages...",
+ std::bind(&ReaPack::browsePackages, this));
+
+ m_actions.add("REAPACK_IMPORT", "ReaPack: Import repositories...",
+ std::bind(&ReaPack::importRemote, this));
+
+ m_actions.add("REAPACK_MANAGE", "ReaPack: Manage repositories...",
+ std::bind(&ReaPack::manageRemotes, this));
+
+ m_actions.add("REAPACK_ABOUT", "ReaPack: About...",
+ std::bind(&ReaPack::aboutSelf, this));
+}
+
+void ReaPack::setupAPI()
+{
+ m_api.emplace_back(&API::AboutInstalledPackage);
+ m_api.emplace_back(&API::AboutRepository);
+ m_api.emplace_back(&API::AddSetRepository);
+ m_api.emplace_back(&API::BrowsePackages);
+ m_api.emplace_back(&API::CompareVersions);
+ m_api.emplace_back(&API::EnumOwnedFiles);
+ m_api.emplace_back(&API::FreeEntry);
+ m_api.emplace_back(&API::GetEntryInfo);
+ m_api.emplace_back(&API::GetOwner);
+ m_api.emplace_back(&API::GetRepositoryInfo);
+ m_api.emplace_back(&API::ProcessQueue);
+}
+
void ReaPack::synchronizeAll()
{
const vector<Remote> &remotes = m_config.remotes.getEnabled();
diff --git a/src/reapack.hpp b/src/reapack.hpp
@@ -44,11 +44,10 @@ public:
static ReaPack *instance() { return s_instance; }
static Path resourcePath();
- ReaPack(REAPER_PLUGIN_HINSTANCE);
+ ReaPack(REAPER_PLUGIN_HINSTANCE, HWND mainWindow);
~ReaPack();
ActionList *actions() { return &m_actions; }
- void addAPI(const APIFunc *func) { m_api.emplace_back(func); }
void synchronizeAll();
void uninstall(const Remote &);
@@ -74,6 +73,8 @@ private:
void createDirectories();
void registerSelf();
+ void setupActions();
+ void setupAPI();
void teardownTransaction();
REAPER_PLUGIN_HINSTANCE m_instance;