From 2b4c24e20e221814f4938d9812f015aed39c022d Mon Sep 17 00:00:00 2001 From: tedjk Date: Tue, 10 Mar 2015 15:58:22 +0100 Subject: [PATCH] BAB-35 #comment started out with generalizing plugin load #time 4h --- juci/api.cc | 37 +++++++++++++++++++++++++++++++++++ juci/api.h | 3 +++ juci/api_ext.cc | 6 ++++++ juci/keybindings.cc | 6 +++--- juci/keybindings.h | 6 +++--- juci/menu.cc | 7 ++++--- juci/plugins/plugins.py | 13 ++++++++++++ juci/{ => plugins}/snippet.py | 0 8 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 juci/plugins/plugins.py rename juci/{ => plugins}/snippet.py (100%) diff --git a/juci/api.cc b/juci/api.cc index 834ffee..a6c2931 100644 --- a/juci/api.cc +++ b/juci/api.cc @@ -46,6 +46,9 @@ std::string libjuci::ApiServiceProvider::GetWord() { void libjuci::ApiServiceProvider::AddKeybinding() { + libjuci::ApiServiceProvider::menu_->keybindings_.action_group_menu() + ->add(Gtk::Action::create("PluginSnippet", "Snippet")); + libjuci::ApiServiceProvider::menu_->keybindings_.action_group_menu() ->add(Gtk::Action::create("PluginAddSnippet", "Add snippet"), @@ -53,6 +56,8 @@ void libjuci::ApiServiceProvider::AddKeybinding() { []() { libjuci::LoadPlugin("snippet"); }); + + //TODO forgie: update views } /////////////////////// @@ -73,6 +78,38 @@ std::string libjuci::GetWord() { return libjuci::ApiServiceProvider::GetWord(); // return converted; } + +void libjuci::AddMenuElement(std::string plugin_name){ + libjuci::EditUiString(plugin_name); + + libjuci::ApiServiceProvider::menu_->keybindings_.action_group_menu() + ->add(Gtk::Action::create("Plugin"+plugin_name, plugin_name)); + /* + libjuci::ApiServiceProvider::menu_->keybindings_.action_group_menu() + ->add(Gtk::Action::create("PluginAdd"+plugin_name, + "Add snippet"), + Gtk::AccelKey("space"), + []() { + libjuci::LoadPlugin("snippet"); + });*/ +} + +void libjuci::EditUiString(std::string plugin_name){ + std::string temp_menu = libjuci::ApiServiceProvider::menu_ + ->keybindings_.model_.menu_ui_string(); + + std::size_t plugin_menu_pos = temp_menu.find("PluginMenu"); + std::string menu_prefix = temp_menu.substr(0, plugin_menu_pos); + std::string menu_suffix = temp_menu.substr(plugin_menu_pos); + std::string menu_input = + " " + // " " + " "; + + libjuci::ApiServiceProvider::menu_->keybindings_.model_.menu_ui_string_ = + menu_prefix + menu_input + menu_suffix; + +} ////////////////////////////// //// Boost.Python methods //// ////////////////////////////// diff --git a/juci/api.h b/juci/api.h index f087b22..84e9677 100644 --- a/juci/api.h +++ b/juci/api.h @@ -44,6 +44,9 @@ namespace libjuci { void ReplaceWord(const std::string word); void ReplaceLine(const std::string line); std::string GetWord(); + + void AddMenuElement(const std::string plugin_name); + void EditUiString(const std::string plugin_name); //TODO forgie: Make more functions targeting the python module ////////////////////////////// diff --git a/juci/api_ext.cc b/juci/api_ext.cc index 2887831..09da044 100644 --- a/juci/api_ext.cc +++ b/juci/api_ext.cc @@ -2,9 +2,15 @@ BOOST_PYTHON_MODULE(juci_to_python_api) { using namespace boost::python; + // plugin inclusion + def("addMenuElement", &libjuci::AddMenuElement); + def("loadPlugin", &libjuci::LoadPlugin); + // text editing def("replaceLine", &libjuci::ReplaceLine); def("replaceWord", &libjuci::ReplaceWord); def("getWord", &libjuci::GetWord); + + //something more }// module::juci_to_python_api diff --git a/juci/keybindings.cc b/juci/keybindings.cc index d24bf47..234d9d9 100644 --- a/juci/keybindings.cc +++ b/juci/keybindings.cc @@ -27,9 +27,9 @@ Keybindings::Model::Model() { " " " " " " - " " - " " - " " + // " " + // " " + // " " " " " " " " diff --git a/juci/keybindings.h b/juci/keybindings.h index f117028..adf3283 100644 --- a/juci/keybindings.h +++ b/juci/keybindings.h @@ -12,7 +12,7 @@ namespace Keybindings { virtual ~Model(); std::string menu_ui_string(){return menu_ui_string_;} std::string hidden_ui_string(){return hidden_ui_string_;} - private: + //private: std::string menu_ui_string_; std::string hidden_ui_string_; }; // Model @@ -34,12 +34,12 @@ namespace Keybindings { }; void BuildMenu(); void BuildHiddenMenu(); - protected: + // protected: Glib::RefPtr ui_manager_menu_; Glib::RefPtr action_group_menu_; Glib::RefPtr ui_manager_hidden_; Glib::RefPtr action_group_hidden_; - private: + // private: Keybindings::Model model_; };//Controller } diff --git a/juci/menu.cc b/juci/menu.cc index 1121674..870f570 100644 --- a/juci/menu.cc +++ b/juci/menu.cc @@ -34,9 +34,10 @@ Menu::Controller::Controller(Keybindings::Controller& keybindings) : }); keybindings_.action_group_menu()->add(Gtk::Action::create("PluginMenu", "_Plugins")); - keybindings_.action_group_menu()->add(Gtk::Action::create("PluginSnippet", - "Snippet")); - /*keybindings_.action_group_menu()->add(Gtk::Action::create("PluginAddSnippet", + //Moved to ApiServiceProvider + /*keybindings_.action_group_menu() + ->add(Gtk::Action::create("PluginSnippet", "Snippet")); + keybindings_.action_group_menu()->add(Gtk::Action::create("PluginAddSnippet", "Add snippet"), Gtk::AccelKey("space"), [this]() { diff --git a/juci/plugins/plugins.py b/juci/plugins/plugins.py new file mode 100644 index 0000000..b5b4f1f --- /dev/null +++ b/juci/plugins/plugins.py @@ -0,0 +1,13 @@ +#!/usr/bin/python +#snippet plugin +import juci_to_python_api +import os, glob + +cwd = os.getcwd() + +plugins = glob.glob(cwd+"/*.py") +for current_file in plugins: + (filepath, filename) = os.path.split(current_file) + if filename != "plugins.py": + juci_to_python_api.loadPlugin(filename) + juci_to_python_api.addMenuElement(filename) diff --git a/juci/snippet.py b/juci/plugins/snippet.py similarity index 100% rename from juci/snippet.py rename to juci/plugins/snippet.py