From 7619d6c3f73f2352535c9076dde3e13743c1b73b Mon Sep 17 00:00:00 2001 From: tedjk Date: Thu, 12 Mar 2015 13:40:52 +0100 Subject: [PATCH] cleaning up --- juci/api.cc | 182 +++++++++++++++++++++++-------------------------- juci/api.h | 28 ++++---- juci/window.cc | 12 ++-- 3 files changed, 107 insertions(+), 115 deletions(-) diff --git a/juci/api.cc b/juci/api.cc index 1f3b7cb..d8277c8 100644 --- a/juci/api.cc +++ b/juci/api.cc @@ -1,16 +1,13 @@ #include "api.h" -std::shared_ptr libjuci::ApiServiceProvider::menu_; -std::shared_ptr libjuci::ApiServiceProvider::notebook_; +std::shared_ptr PluginApi::menu_; +std::shared_ptr PluginApi::notebook_; ///////////////////////////// //// API ServiceProvider //// ///////////////////////////// -libjuci::ApiServiceProvider::ApiServiceProvider( ) { - std::cout << "Apiservice std.ctor" << std::endl; -} -void libjuci::ApiServiceProvider::ReplaceWord(std::string word) { +void PluginApi::ReplaceWord(std::string word) { Glib::RefPtr buffer = libjuci::BufferFromNotebook(); Gtk::TextIter word_start = libjuci::IterFromNotebook(); Gtk::TextIter word_end = libjuci::IterFromNotebook(); @@ -24,13 +21,13 @@ void libjuci::ApiServiceProvider::ReplaceWord(std::string word) { } } -void libjuci::ApiServiceProvider::ReplaceLine(std::string line) { - std::cout << "Unimplemented function: ApiServiceProvider::ReplaceLine(string)" - << std::endl; +void PluginApi::ReplaceLine(std::string line) { + std::cout << "unimplemented: " << __func__ << std::endl; } -std::string libjuci::ApiServiceProvider::GetWord() { - Glib::RefPtr buffer = libjuci::BufferFromNotebook(); +std::string PluginApi::GetWord() { + // TODO forgie: use notebook's functions + Glib::RefPtr buffer = libjuci::BufferFromNotebook(); Gtk::TextIter word_start = libjuci::IterFromNotebook(); Gtk::TextIter word_end = libjuci::IterFromNotebook(); @@ -44,49 +41,28 @@ std::string libjuci::ApiServiceProvider::GetWord() { return ""; } -void libjuci::ApiServiceProvider::AddKeybinding() { +//runs the pythonscript that initiates every plugin within plugins/ +void PluginApi::InitPlugins() { libjuci::LoadPlugin(g_project_root+"plugins.py"); - - // libjuci::AddMenuElement("Snippet"); - // libjuci::AddMenuElement("Bobby"); - - //TODO forgie: update views -} - -/////////////////////// -//// Api to python //// -/////////////////////// -void libjuci::ReplaceWord(const std::string word) { - libjuci::ApiServiceProvider::ReplaceWord(word); -} - -void libjuci::ReplaceLine(const std::string line) { - //TODO forgie: implement libjuci::ReplaceLine / change string to iter? - //some_namespace::controller::replaceLine(line_); - std::cout << "unimplemented function: 'libjuci::ReplaceLine()' called" - << std::endl; -} -std::string libjuci::GetWord() { - return libjuci::ApiServiceProvider::GetWord(); } -void libjuci::AddMenuElement(std::string plugin_name){ - libjuci::AddMenuXml(plugin_name, "PluginMenu"); +void PluginApi::AddMenuElement(std::string plugin_name){ + AddMenuXml(plugin_name, "PluginMenu"); std::string plugin_action_name = plugin_name+"Menu"; - libjuci::ApiServiceProvider::menu_->keybindings_.action_group_menu() + menu_->keybindings_.action_group_menu() ->add(Gtk::Action::create(plugin_action_name, plugin_name)); } -void libjuci::AddSubMenuElement(std::string parent_menu, - std::string menu_name, - std::string menu_func_name, - std::string plugin_path, - std::string menu_keybinding) { +void PluginApi::AddSubMenuElement(std::string parent_menu, + std::string menu_name, + std::string menu_func_name, + std::string plugin_path, + std::string menu_keybinding) { - libjuci::AddSubMenuXml(menu_func_name, parent_menu); + AddSubMenuXml(menu_func_name, parent_menu); - libjuci::ApiServiceProvider::menu_->keybindings_.action_group_menu() + menu_->keybindings_.action_group_menu() ->add(Gtk::Action::create(menu_func_name, menu_name), Gtk::AccelKey(menu_keybinding), @@ -95,10 +71,9 @@ void libjuci::AddSubMenuElement(std::string parent_menu, }); } -void libjuci::AddMenuXml(std::string plugin_name, std::string parent_menu) { +void PluginApi::AddMenuXml(std::string plugin_name, std::string parent_menu) { - std::string temp_menu = libjuci::ApiServiceProvider::menu_ - ->keybindings_.model_.menu_ui_string(); + std::string temp_menu = menu_->keybindings_.model_.menu_ui_string(); std::size_t plugin_menu_pos = temp_menu.find(parent_menu); // +2 gets you outside of the tag:<'menu_name'> ref: keybindings.cc @@ -108,16 +83,14 @@ void libjuci::AddMenuXml(std::string plugin_name, std::string parent_menu) { std::string menu_input = " " - // " " - " "; + " "; - libjuci::ApiServiceProvider::menu_->keybindings_.model_.menu_ui_string_ = + menu_->keybindings_.model_.menu_ui_string_ = menu_prefix + menu_input + menu_suffix; } -void libjuci::AddSubMenuXml(std::string plugin_name, std::string parent_menu){ - std::string temp_menu = libjuci::ApiServiceProvider::menu_ - ->keybindings_.model_.menu_ui_string(); +void PluginApi::AddSubMenuXml(std::string plugin_name, std::string parent_menu){ + std::string temp_menu = menu_->keybindings_.model_.menu_ui_string(); std::size_t parent_menu_pos = temp_menu.find(parent_menu); // +2 gets you outside of the tag:<'menu_name'> ref: keybindings.cc @@ -125,78 +98,95 @@ void libjuci::AddSubMenuXml(std::string plugin_name, std::string parent_menu){ std::string menu_prefix = temp_menu.substr(0, parent_menu_pos); std::string menu_suffix = temp_menu.substr(parent_menu_pos); - std::string menu_input = - " "; - - - libjuci::ApiServiceProvider::menu_->keybindings_.model_.menu_ui_string_ = + std::string menu_input =""; + + menu_->keybindings_.model_.menu_ui_string_ = menu_prefix + menu_input + menu_suffix; +} + +/////////////////////// +//// Api to python //// +/////////////////////// +void libjuci::ReplaceWord(const std::string word) { + PluginApi::ReplaceWord(word); +} - std::cout << libjuci::ApiServiceProvider::menu_ - ->keybindings_.model_.menu_ui_string_ << std::endl; +void libjuci::ReplaceLine(const std::string line) { + std::cout << "unimplemented function: 'libjuci::ReplaceLine()' called" + << std::endl; } +std::string libjuci::GetWord() { + return PluginApi::GetWord(); +} + +void libjuci::AddMenuElement(std::string plugin_name){ + PluginApi::AddMenuElement(plugin_name); +} + +void libjuci::AddSubMenuElement(std::string parent_menu, + std::string menu_name, + std::string menu_func_name, + std::string plugin_path, + std::string menu_keybinding) { + + PluginApi::AddSubMenuElement(parent_menu, + menu_name, + menu_func_name, + plugin_path, + menu_keybinding); +} + ////////////////////////////// //// Boost.Python methods //// ////////////////////////////// +namespace bp = boost::python; -boost::python::api::object libjuci::OpenPythonScript(const std::string path, - boost::python::api::object python_name_space) { - boost::python::str str_path(path); - return boost::python::exec_file(str_path, python_name_space);//, python_name_space); +bp::api::object libjuci::OpenPythonScript(const std::string path, + bp::api::object python_name_space) { + bp::str str_path(path); + return bp::exec_file(str_path, python_name_space); } void libjuci::LoadPlugin(const std::string& plugin_name) { std::cout << "libjuci::LoadPlugin " << plugin_name << std::endl; try{ Py_Initialize(); - boost::python::api::object main_module = boost::python::import("__main__"); - boost::python::api::object main_namespace = + bp::api::object main_module = bp::import("__main__"); + bp::api::object main_namespace = main_module.attr("__dict__"); - boost::python::api::object ignored2 = + bp::api::object ignored2 = OpenPythonScript(plugin_name, main_namespace); - }catch(boost::python::error_already_set const&) { + }catch(bp::error_already_set const&) { PyErr_Print(); } } void libjuci::LoadPluginFunction(const std::string &function_name, const std::string &plugin_path){ - try{ + try{ Py_Initialize(); - boost::python::api::object main_module = boost::python::import("__main__"); - boost::python::api::object main_namespace = main_module.attr("__dict__"); - boost::python::api::object ignored2 = OpenPythonScript(plugin_path, - main_namespace); - - boost::python::str func_name(function_name); - // for extracting return value from python: - boost::python::object returnValue = boost::python::eval(func_name, - main_namespace); - //std::string return_value = boost::python::extract(pySnippet); - //do something with return_value - }catch(boost::python::error_already_set const&) { + bp::api::object main_module = bp::import("__main__"); + bp::api::object main_namespace = main_module.attr("__dict__"); + bp::api::object ignored2 = OpenPythonScript(plugin_path, main_namespace); + bp::str func_name(function_name); + bp::api::object returnValue = bp::eval(func_name, main_namespace); + }catch(bp::error_already_set const&) { PyErr_Print(); } - - //std::cout << __func__ << " - " << function_name << std::endl; } void libjuci::InitPlugin(const std::string& plugin_path) { - std::cout << "libjuci::InitPlugin " << plugin_path << std::endl; + std::cout << "libjuci::InitPlugin " << plugin_path << std::endl; try{ Py_Initialize(); - boost::python::api::object main_module = boost::python::import("__main__"); - boost::python::api::object main_namespace = main_module.attr("__dict__"); - boost::python::api::object ignored2 = OpenPythonScript(plugin_path, - main_namespace); - - /* for extracting return value from python: */ - boost::python::object returnValue = boost::python::eval("initPlugin()", - main_namespace); - //std::string return_value = boost::python::extract(pySnippet); + bp::api::object main_module = bp::import("__main__"); + bp::api::object main_namespace = main_module.attr("__dict__"); + bp::api::object ignored2 = OpenPythonScript(plugin_path, main_namespace); + bp::object returnValue = bp::eval("initPlugin()", main_namespace); + //std::string return_value = bp::extract(pySnippet); //do something with return_value - }catch(boost::python::error_already_set const&) { + }catch(bp::error_already_set const&) { PyErr_Print(); } } @@ -223,11 +213,11 @@ void libjuci::IterToWordEnd(Gtk::TextIter &iter) { Glib::RefPtr libjuci::BufferFromNotebook() { //finding focused view int i = 0; - while(!libjuci::ApiServiceProvider::notebook_->source_vec_.at(i) + while(!PluginApi::notebook_->source_vec_.at(i) ->view().has_focus()) { i++; } - return Glib::RefPtr(libjuci::ApiServiceProvider::notebook_ + return Glib::RefPtr(PluginApi::notebook_ ->source_vec_.at(i) ->view().get_buffer()); } diff --git a/juci/api.h b/juci/api.h index 0bf08ae..6965817 100644 --- a/juci/api.h +++ b/juci/api.h @@ -9,31 +9,35 @@ const std::string g_project_root("/home/forgie/app/juci/"); -namespace libjuci { - - ///////////////////////////// - //// API ServiceProvider //// - ///////////////////////////// - class ApiServiceProvider { + //////////////////// + //// Plugin Api //// + //////////////////// + class PluginApi { public: static std::shared_ptr menu_; static std::shared_ptr notebook_; - static std::string text; - ApiServiceProvider(); - static void AddKeybinding(); - + static void InitPlugins(); + //for Python module: static std::string GetWord(); - static void ReplaceWord(const std::string word); - static void ReplaceLine(const std::string line); + //menu management static void AddMenuElement(const std::string plugin_name); static void AddSubMenuElement(const std::string parent_menu, const std::string menu_name, const std::string menu_func_name, const std::string plugin_path, const std::string menu_keybinding); + //text-buffer functions + static void ReplaceWord(const std::string word); + static void ReplaceLine(const std::string line); + + protected: + static void AddMenuXml(std::string plugin_name, std::string parent_menu); + static void AddSubMenuXml(std::string plugin_name, std::string parent_menu); }; + +namespace libjuci { /////////////////////// //// Glib wrappers //// diff --git a/juci/window.cc b/juci/window.cc index 4ee9fbf..9df4db5 100644 --- a/juci/window.cc +++ b/juci/window.cc @@ -17,13 +17,11 @@ Window::Window() : [this]() { OnOpenFile(); }); - libjuci::ApiServiceProvider::menu_ = - std::shared_ptr(&menu_); + PluginApi::menu_ = std::shared_ptr(&menu_); - libjuci::ApiServiceProvider::notebook_ = - std::shared_ptr(¬ebook_); + PluginApi::notebook_ = std::shared_ptr(¬ebook_); - libjuci::ApiServiceProvider::AddKeybinding(); + PluginApi::InitPlugins(); add_accel_group(keybindings_.ui_manager_menu()->get_accel_group()); add_accel_group(keybindings_.ui_manager_hidden()->get_accel_group()); @@ -40,9 +38,9 @@ Window::Window() : void Window::OnWindowHide(){ //TODO forgie: find out how to 'remove' the pointers //TODO forgie: Make shared_ptr - //libjuci::ApiServiceProvider::notebook_ = + //libjuci::PluginApi::notebook_ = // std::shared_ptr(nullptr); - // libjuci::ApiServiceProvider::menu_ = + // libjuci::PluginApi::menu_ = // std::shared_ptr(nullptr); hide(); }