Browse Source

BAB-11 #time 3h #comment moved ui_string from menu to keybinding

master
oyvang 11 years ago
parent
commit
38d2fef54a
  1. 76
      juci/keybindings.cc
  2. 40
      juci/keybindings.h
  3. 89
      juci/menu.cc
  4. 10
      juci/window.cc

76
juci/keybindings.cc

@ -1,24 +1,86 @@
#include "keybindings.h" #include "keybindings.h"
Keybindings::Model::Model() {
std::cout<<"Keybindings: Model constructor run"<<std::endl;
menu_ui_string_ =
"<ui> "
" <menubar name='MenuBar'> "
" <menu action='FileMenu'> "
" <menu action='FileNew'> "
" <menuitem action='FileNewStandard'/> "
" <menuitem action='FileNewCC'/> "
" <menuitem action='FileNewH'/> "
" </menu> "
" <menuitem action='FileOpenFile'/> "
" <menuitem action='FileOpenFolder'/> "
" <separator/> "
" <menuitem action='FileQuit'/> "
" </menu> "
" <menu action='EditMenu'> "
" <menuitem action='EditCopy'/> "
" <menuitem action='EditCut'/> "
" <menuitem action='EditPaste'/> "
" <separator/> "
" <menuitem action='EditFind'/> "
" </menu> "
" <menu action='WindowMenu'> "
" <menuitem action='WindowCloseTab'/> "
" <menuitem action='WindowSplitWindow'/> "
" </menu> "
" <menu action='PluginMenu'> "
" <menu action='PluginSnippet'> "
" <menuitem action='PluginAddSnippet'/> "
" </menu> "
" </menu> "
" <menu action='HelpMenu'> "
" <menuitem action='HelpAbout'/> "
" </menu> "
" </menubar> "
"</ui> ";
hidden_ui_string_ =
"<ui> "
" <menubar name='MenuBar'> "
" <menuitem action='Test'/> "
" </menubar> "
"</ui> ";
};
Keybindings::Model::~Model() {
}
Keybindings::Controller::Controller() { Keybindings::Controller::Controller() {
action_group_ = Gtk::ActionGroup::create(); std::cout<<"Keybindings: Controller constructor run"<<std::endl;
ui_manager_ = Gtk::UIManager::create(); action_group_menu_ = Gtk::ActionGroup::create();
ui_manager_menu_ = Gtk::UIManager::create();
action_group_hidden_ = Gtk::ActionGroup::create();
ui_manager_hidden_ = Gtk::UIManager::create();
} }
Keybindings::Controller::~Controller(){ Keybindings::Controller::~Controller(){
} }
void Keybindings::Controller::set_ui_manager_action_group(Glib::RefPtr<Gtk::ActionGroup> 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 { 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) { 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_);
} }

40
juci/keybindings.h

@ -2,27 +2,51 @@
#include "gtkmm.h" #include "gtkmm.h"
namespace Keybindings { 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 { class Controller {
public: public:
Controller(); Controller();
virtual ~Controller(); virtual ~Controller();
Glib::RefPtr<Gtk::ActionGroup> action_group() { Glib::RefPtr<Gtk::ActionGroup> action_group_menu() {
return action_group_; return action_group_menu_;
};
Glib::RefPtr<Gtk::UIManager> ui_manager_menu() {
return ui_manager_menu_;
};
Glib::RefPtr<Gtk::ActionGroup> action_group_hidden() {
return action_group_hidden_;
}; };
Glib::RefPtr<Gtk::UIManager> ui_manager() { Glib::RefPtr<Gtk::UIManager> ui_manager_hidden() {
return ui_manager_; 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<Gtk::ActionGroup> action_group);
protected: protected:
Glib::RefPtr<Gtk::UIManager> ui_manager_; Glib::RefPtr<Gtk::UIManager> ui_manager_menu_;
Glib::RefPtr<Gtk::ActionGroup> action_group_; Glib::RefPtr<Gtk::ActionGroup> action_group_menu_;
Glib::RefPtr<Gtk::UIManager> ui_manager_hidden_;
Glib::RefPtr<Gtk::ActionGroup> action_group_hidden_;
private:
Keybindings::Model model_;
}; };
} }

89
juci/menu.cc

@ -6,42 +6,7 @@
Menu::Model::Model() { Menu::Model::Model() {
ui_string_ =
"<ui> "
" <menubar name='MenuBar'> "
" <menu action='FileMenu'> "
" <menu action='FileNew'> "
" <menuitem action='FileNewStandard'/> "
" <menuitem action='FileNewCC'/> "
" <menuitem action='FileNewH'/> "
" </menu> "
" <menuitem action='FileOpenFile'/> "
" <menuitem action='FileOpenFolder'/> "
" <separator/> "
" <menuitem action='FileQuit'/> "
" </menu> "
" <menu action='EditMenu'> "
" <menuitem action='EditCopy'/> "
" <menuitem action='EditCut'/> "
" <menuitem action='EditPaste'/> "
" <separator/> "
" <menuitem action='EditFind'/> "
" </menu> "
" <menu action='WindowMenu'> "
" <menuitem action='WindowCloseTab'/> "
" <menuitem action='WindowSplitWindow'/> "
" </menu> "
" <menu action='PluginMenu'> "
" <menu action='PluginSnippet'> "
" <menuitem action='PluginAddSnippet'/> "
" </menu> "
" </menu> "
" <menu action='HelpMenu'> "
" <menuitem action='HelpAbout'/> "
" <menuitem action='HelpHide'/> "
" </menu> "
" </menubar> "
"</ui> ";
} }
@ -74,71 +39,71 @@ Menu::Controller::Controller(Keybindings::Controller keybindings) :
keybindings_(keybindings) { keybindings_(keybindings) {
/* Add action to menues */ /* Add action to menues */
/* START file menu */ /* 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 */ /* File->New files */
keybindings_.action_group()->add(Gtk::Action::create("FileNew", "New")); keybindings_.action_group_menu()->add(Gtk::Action::create("FileNew", "New"));
keybindings_.action_group()->add(Gtk::Action::create("FileNewStandard", keybindings_.action_group_menu()->add(Gtk::Action::create("FileNewStandard",
Gtk::Stock::NEW, "New empty file", "Create a new file"), Gtk::Stock::NEW, "New empty file", "Create a new file"),
[this]() { [this]() {
OnFileNewEmptyfile(); 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("<control><alt>c"), Gtk::AccelKey("<control><alt>c"),
[this]() { [this]() {
OnFileNewCCFile(); 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("<control><alt>h"), Gtk::AccelKey("<control><alt>h"),
[this]() { [this]() {
OnFileNewHeaderFile(); OnFileNewHeaderFile();
}); });
/* File-> New files end */ /* 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]() { [this]() {
OnFileOpenFile(); OnFileOpenFile();
}); });
keybindings_.action_group()->add(Gtk::Action::create("FileOpenFolder", "Open folder"), keybindings_.action_group_menu()->add(Gtk::Action::create("FileOpenFolder", "Open folder"),
[this]() { [this]() {
OnFileOpenFolder(); OnFileOpenFolder();
}); });
/* END file menu */ /* END file menu */
/* START edit menu */ /* START edit menu */
keybindings_.action_group()->add(Gtk::Action::create("EditMenu", Gtk::Stock::EDIT)); keybindings_.action_group_menu()->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("EditCopy", Gtk::Stock::COPY),
[this]() { [this]() {
OnEditCopy(); 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]() { [this]() {
OnEditCut(); 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]() { [this]() {
OnEditPaste(); 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]() { [this]() {
OnEditFind(); OnEditFind();
}); });
/* END edit menu */ /* END edit menu */
/* START window menu */ /* START window menu */
keybindings_.action_group()->add(Gtk::Action::create("WindowMenu", "_Window")); keybindings_.action_group_menu()->add(Gtk::Action::create("WindowMenu", "_Window"));
keybindings_.action_group()->add(Gtk::Action::create("WindowCloseTab", "Close tab"), keybindings_.action_group_menu()->add(Gtk::Action::create("WindowCloseTab", "Close tab"),
Gtk::AccelKey("<control>w"), Gtk::AccelKey("<control>w"),
[this]() { [this]() {
OnWindowCloseTab(); OnWindowCloseTab();
}); });
keybindings_.action_group()->add(Gtk::Action::create("WindowSplitWindow", "Split window"), keybindings_.action_group_menu()->add(Gtk::Action::create("WindowSplitWindow", "Split window"),
Gtk::AccelKey("<control><alt>S"), Gtk::AccelKey("<control><alt>S"),
[this]() { [this]() {
OnWindowSplitWindow(); OnWindowSplitWindow();
}); });
/* END window menu */ /* END window menu */
/* START Plugin 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*/ /*Plugin->snippet*/
keybindings_.action_group()->add(Gtk::Action::create("PluginSnippet", "Snippet")); keybindings_.action_group_menu()->add(Gtk::Action::create("PluginSnippet", "Snippet"));
keybindings_.action_group()->add(Gtk::Action::create("PluginAddSnippet", "Add snippet"), keybindings_.action_group_menu()->add(Gtk::Action::create("PluginAddSnippet", "Add snippet"),
Gtk::AccelKey("<alt>space"), Gtk::AccelKey("<alt>space"),
[this]() { [this]() {
OnPluginAddSnippet(); OnPluginAddSnippet();
@ -146,24 +111,26 @@ Menu::Controller::Controller(Keybindings::Controller keybindings) :
/* End snippet */ /* End snippet */
/* END plugin menu */ /* END plugin menu */
/* START help menu */ /* START help menu */
keybindings_.action_group()->add(Gtk::Action::create("HelpMenu", Gtk::Stock::HELP)); keybindings_.action_group_menu()->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("HelpAbout", Gtk::Stock::ABOUT),
[this]() { [this]() {
OnHelpAbout(); OnHelpAbout();
}); });
keybindings_.action_group()->add(Gtk::Action::create("HelpHide"),
// Hidden actions
keybindings_.action_group_hidden()->add(Gtk::Action::create("Test"),
Gtk::AccelKey("<control><alt>K"), Gtk::AccelKey("<control><alt>K"),
[this]() { [this]() {
OnHelpAbout(); 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() { Gtk::Box &Menu::Controller::view() {
return menu_view_.view(keybindings_.ui_manager()); return menu_view_.view(keybindings_.ui_manager_menu());
} }
void Menu::Controller::OnFileNewEmptyfile() { void Menu::Controller::OnFileNewEmptyfile() {

10
juci/window.cc

@ -6,19 +6,19 @@ Window::Window() :
set_title("juCi++"); set_title("juCi++");
set_default_size(600, 600); set_default_size(600, 600);
add(window_box_); add(window_box_);
keybindings_.action_group()->add(Gtk::Action::create("FileQuit", keybindings_.action_group_menu()->add(Gtk::Action::create("FileQuit",
Gtk::Stock::QUIT), Gtk::Stock::QUIT),
[this]() { [this]() {
OnSystemQuit(); 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(menu_.view(), Gtk::PACK_SHRINK);
window_box_.pack_start(source().view()); window_box_.pack_start(source().view());
show_all_children(); 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() { Source::Controller& Window::source() {

Loading…
Cancel
Save