From 38d2fef54a6d3e1fad0318099b10459500d4dcd9 Mon Sep 17 00:00:00 2001 From: oyvang Date: Thu, 12 Feb 2015 10:23:04 +0100 Subject: [PATCH] BAB-11 #time 3h #comment moved ui_string from menu to keybinding --- juci/keybindings.cc | 76 ++++++++++++++++++++++++++++++++++---- juci/keybindings.h | 40 ++++++++++++++++---- juci/menu.cc | 89 ++++++++++++++------------------------------- juci/window.cc | 10 ++--- 4 files changed, 134 insertions(+), 81 deletions(-) diff --git a/juci/keybindings.cc b/juci/keybindings.cc index 438da61..040f1bd 100644 --- a/juci/keybindings.cc +++ b/juci/keybindings.cc @@ -1,24 +1,86 @@ #include "keybindings.h" +Keybindings::Model::Model() { + std::cout<<"Keybindings: Model constructor run"< " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " "; + + hidden_ui_string_ = + " " + " " + " " + " " + " "; +}; + +Keybindings::Model::~Model() { +} Keybindings::Controller::Controller() { - action_group_ = Gtk::ActionGroup::create(); - ui_manager_ = Gtk::UIManager::create(); + std::cout<<"Keybindings: Controller constructor run"< action_group) { - ui_manager_->insert_action_group(action_group); +void Keybindings::Controller::BuildMenu() { + try { + ui_manager_menu_->add_ui_from_string(model_.menu_ui_string()); + } + catch (const Glib::Error &ex) { + std::cerr << "building menu failed" << ex.what(); + } + ui_manager_menu_->insert_action_group(action_group_menu_); } -void Keybindings::Controller::set_ui_manger_string(std::string ui_string) { + + +void Keybindings::Controller::BuildHiddenMenu() { try { - ui_manager_->add_ui_from_string(ui_string); + ui_manager_hidden_->add_ui_from_string(model_.hidden_ui_string()); } catch (const Glib::Error &ex) { - std::cerr << "building menus failed: " << ex.what(); + std::cerr << "building hidden menu failed" << ex.what(); } + ui_manager_hidden_->insert_action_group(action_group_hidden_); } + diff --git a/juci/keybindings.h b/juci/keybindings.h index c15a50c..02099f2 100644 --- a/juci/keybindings.h +++ b/juci/keybindings.h @@ -2,27 +2,51 @@ #include "gtkmm.h" namespace Keybindings { + + class Model { + public: + Model(); + virtual ~Model(); + std::string menu_ui_string(){return menu_ui_string_;} + std::string hidden_ui_string(){return hidden_ui_string_;} + private: + std::string menu_ui_string_; + std::string hidden_ui_string_; + }; + class Controller { public: Controller(); virtual ~Controller(); - Glib::RefPtr action_group() { - return action_group_; + Glib::RefPtr action_group_menu() { + return action_group_menu_; + }; + + Glib::RefPtr ui_manager_menu() { + return ui_manager_menu_; + }; + + Glib::RefPtr action_group_hidden() { + return action_group_hidden_; }; - Glib::RefPtr ui_manager() { - return ui_manager_; + Glib::RefPtr ui_manager_hidden() { + return ui_manager_hidden_; }; - void set_ui_manger_string(std::string ui_string); + void BuildMenu(); + void BuildHiddenMenu(); - void set_ui_manager_action_group(Glib::RefPtr action_group); protected: - Glib::RefPtr ui_manager_; - Glib::RefPtr action_group_; + Glib::RefPtr ui_manager_menu_; + Glib::RefPtr action_group_menu_; + Glib::RefPtr ui_manager_hidden_; + Glib::RefPtr action_group_hidden_; + private: + Keybindings::Model model_; }; } \ No newline at end of file diff --git a/juci/menu.cc b/juci/menu.cc index ba22027..c8fb794 100644 --- a/juci/menu.cc +++ b/juci/menu.cc @@ -6,42 +6,7 @@ Menu::Model::Model() { - ui_string_ = - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " "; + } @@ -74,71 +39,71 @@ Menu::Controller::Controller(Keybindings::Controller keybindings) : keybindings_(keybindings) { /* Add action to menues */ /* START file menu */ - keybindings_.action_group()->add(Gtk::Action::create("FileMenu", Gtk::Stock::FILE)); + keybindings_.action_group_menu()->add(Gtk::Action::create("FileMenu", Gtk::Stock::FILE)); /* File->New files */ - keybindings_.action_group()->add(Gtk::Action::create("FileNew", "New")); - keybindings_.action_group()->add(Gtk::Action::create("FileNewStandard", + keybindings_.action_group_menu()->add(Gtk::Action::create("FileNew", "New")); + keybindings_.action_group_menu()->add(Gtk::Action::create("FileNewStandard", Gtk::Stock::NEW, "New empty file", "Create a new file"), [this]() { OnFileNewEmptyfile(); }); - keybindings_.action_group()->add(Gtk::Action::create("FileNewCC", "New cc file"), + keybindings_.action_group_menu()->add(Gtk::Action::create("FileNewCC", "New cc file"), Gtk::AccelKey("c"), [this]() { OnFileNewCCFile(); }); - keybindings_.action_group()->add(Gtk::Action::create("FileNewH","New h file" ), + keybindings_.action_group_menu()->add(Gtk::Action::create("FileNewH","New h file" ), Gtk::AccelKey("h"), [this]() { OnFileNewHeaderFile(); }); /* File-> New files end */ - keybindings_.action_group()->add(Gtk::Action::create("FileOpenFile", Gtk::Stock::OPEN), + keybindings_.action_group_menu()->add(Gtk::Action::create("FileOpenFile", Gtk::Stock::OPEN), [this]() { OnFileOpenFile(); }); - keybindings_.action_group()->add(Gtk::Action::create("FileOpenFolder", "Open folder"), + keybindings_.action_group_menu()->add(Gtk::Action::create("FileOpenFolder", "Open folder"), [this]() { OnFileOpenFolder(); }); /* END file menu */ /* START edit menu */ - keybindings_.action_group()->add(Gtk::Action::create("EditMenu", Gtk::Stock::EDIT)); - keybindings_.action_group()->add(Gtk::Action::create("EditCopy", Gtk::Stock::COPY), + keybindings_.action_group_menu()->add(Gtk::Action::create("EditMenu", Gtk::Stock::EDIT)); + keybindings_.action_group_menu()->add(Gtk::Action::create("EditCopy", Gtk::Stock::COPY), [this]() { OnEditCopy(); }); - keybindings_.action_group()->add(Gtk::Action::create("EditCut", Gtk::Stock::CUT), + keybindings_.action_group_menu()->add(Gtk::Action::create("EditCut", Gtk::Stock::CUT), [this]() { OnEditCut(); }); - keybindings_.action_group()->add(Gtk::Action::create("EditPaste", Gtk::Stock::PASTE), + keybindings_.action_group_menu()->add(Gtk::Action::create("EditPaste", Gtk::Stock::PASTE), [this]() { OnEditPaste(); }); - keybindings_.action_group()->add(Gtk::Action::create("EditFind", Gtk::Stock::FIND), + keybindings_.action_group_menu()->add(Gtk::Action::create("EditFind", Gtk::Stock::FIND), [this]() { OnEditFind(); }); /* END edit menu */ /* START window menu */ - keybindings_.action_group()->add(Gtk::Action::create("WindowMenu", "_Window")); - keybindings_.action_group()->add(Gtk::Action::create("WindowCloseTab", "Close tab"), + keybindings_.action_group_menu()->add(Gtk::Action::create("WindowMenu", "_Window")); + keybindings_.action_group_menu()->add(Gtk::Action::create("WindowCloseTab", "Close tab"), Gtk::AccelKey("w"), [this]() { OnWindowCloseTab(); }); - keybindings_.action_group()->add(Gtk::Action::create("WindowSplitWindow", "Split window"), + keybindings_.action_group_menu()->add(Gtk::Action::create("WindowSplitWindow", "Split window"), Gtk::AccelKey("S"), [this]() { OnWindowSplitWindow(); }); /* END window menu */ /* START Plugin menu */ - keybindings_.action_group()->add(Gtk::Action::create("PluginMenu", "_Plugins")); + keybindings_.action_group_menu()->add(Gtk::Action::create("PluginMenu", "_Plugins")); /*Plugin->snippet*/ - keybindings_.action_group()->add(Gtk::Action::create("PluginSnippet", "Snippet")); - keybindings_.action_group()->add(Gtk::Action::create("PluginAddSnippet", "Add snippet"), + 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]() { OnPluginAddSnippet(); @@ -146,24 +111,26 @@ Menu::Controller::Controller(Keybindings::Controller keybindings) : /* End snippet */ /* END plugin menu */ /* START help menu */ - keybindings_.action_group()->add(Gtk::Action::create("HelpMenu", Gtk::Stock::HELP)); - keybindings_.action_group()->add(Gtk::Action::create("HelpAbout", Gtk::Stock::ABOUT), + keybindings_.action_group_menu()->add(Gtk::Action::create("HelpMenu", Gtk::Stock::HELP)); + keybindings_.action_group_menu()->add(Gtk::Action::create("HelpAbout", Gtk::Stock::ABOUT), [this]() { OnHelpAbout(); }); - keybindings_.action_group()->add(Gtk::Action::create("HelpHide"), + +// Hidden actions + keybindings_.action_group_hidden()->add(Gtk::Action::create("Test"), Gtk::AccelKey("K"), [this]() { OnHelpAbout(); }); + keybindings_.BuildMenu(); + keybindings_.BuildHiddenMenu(); -/* END help menu */ +/* END help menu */ - keybindings_.ui_manager()->add_ui_from_string(menu_model_.ui_string()); - keybindings_.ui_manager()->insert_action_group(keybindings_.action_group()); } @@ -172,7 +139,7 @@ Menu::Controller::~Controller() { } Gtk::Box &Menu::Controller::view() { - return menu_view_.view(keybindings_.ui_manager()); + return menu_view_.view(keybindings_.ui_manager_menu()); } void Menu::Controller::OnFileNewEmptyfile() { diff --git a/juci/window.cc b/juci/window.cc index d602a74..f1b5d3c 100644 --- a/juci/window.cc +++ b/juci/window.cc @@ -6,19 +6,19 @@ Window::Window() : set_title("juCi++"); set_default_size(600, 600); add(window_box_); - keybindings_.action_group()->add(Gtk::Action::create("FileQuit", + keybindings_.action_group_menu()->add(Gtk::Action::create("FileQuit", Gtk::Stock::QUIT), [this]() { OnSystemQuit(); }); - add_accel_group(keybindings_.ui_manager()->get_accel_group()); + add_accel_group(keybindings_.ui_manager_menu()->get_accel_group()); + add_accel_group(keybindings_.ui_manager_hidden()->get_accel_group()); + window_box_.pack_start(menu_.view(), Gtk::PACK_SHRINK); window_box_.pack_start(source().view()); show_all_children(); - //TODO(Oyvang, Forgi, Zalox) Find a better solution to hide menu items and still have the keybinding - keybindings_.action_group()->get_action("HelpHide")->set_visible(false); - show(); + } Source::Controller& Window::source() {