reapack

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

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:
Msrc/main.cpp | 69+++++++++++----------------------------------------------------------
Msrc/reapack.cpp | 42++++++++++++++++++++++++++++++++++++++----
Msrc/reapack.hpp | 5+++--
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;