diff --git a/juci/CMakeLists.txt b/juci/CMakeLists.txt
index b8474db..b6f672f 100644
--- a/juci/CMakeLists.txt
+++ b/juci/CMakeLists.txt
@@ -101,8 +101,6 @@ add_executable(${project_name}
#list of every needed file to create the executable
juci.h
juci.cc
- keybindings.h
- keybindings.cc
menu.h
menu.cc
source.h
diff --git a/juci/api.cc b/juci/api.cc
index eefe937..14acce7 100644
--- a/juci/api.cc
+++ b/juci/api.cc
@@ -2,8 +2,8 @@
#include "logging.h"
#include "singletons.h"
-Menu::Controller* PluginApi::menu_;
-Notebook::Controller* PluginApi::notebook_;
+Menu* PluginApi::menu_=nullptr;
+Notebook::Controller* PluginApi::notebook_=nullptr;
/////////////////////////////
//// API ServiceProvider ////
/////////////////////////////
@@ -64,8 +64,7 @@ void PluginApi::AddMenuElement(std::string plugin_name) {
DEBUG("Adding menu element for "+plugin_name);
AddMenuXml(plugin_name, "PluginMenu");
std::string plugin_action_name = plugin_name+"Menu";
- Singleton::keybindings()->action_group_menu
- ->add(Gtk::Action::create(plugin_action_name, plugin_name));
+ Singleton::menu()->action_group->add(Gtk::Action::create(plugin_action_name, plugin_name));
}
void PluginApi::AddSubMenuElement(std::string parent_menu,
@@ -74,8 +73,7 @@ void PluginApi::AddSubMenuElement(std::string parent_menu,
std::string plugin_path,
std::string menu_keybinding) {
AddSubMenuXml(menu_func_name, parent_menu);
- Singleton::keybindings()->action_group_menu
- ->add(Gtk::Action::create(menu_func_name,
+ Singleton::menu()->action_group->add(Gtk::Action::create(menu_func_name,
menu_name),
Gtk::AccelKey(menu_keybinding),
[=]() {
@@ -84,9 +82,9 @@ void PluginApi::AddSubMenuElement(std::string parent_menu,
}
void PluginApi::AddMenuXml(std::string plugin_name, std::string parent_menu) {
- std::string temp_menu = Singleton::keybindings()->menu_ui_string;
+ std::string temp_menu = Singleton::menu()->ui;
std::size_t plugin_menu_pos = temp_menu.find(parent_menu);
- // +2 gets you outside of the tag:<'menu_name'> ref: keybindings.cc
+ // +2 gets you outside of the tag:<'menu_name'>
plugin_menu_pos+=parent_menu.size() +2;
std::string menu_prefix = temp_menu.substr(0, plugin_menu_pos);
std::string menu_suffix = temp_menu.substr(plugin_menu_pos);
@@ -94,23 +92,21 @@ void PluginApi::AddMenuXml(std::string plugin_name, std::string parent_menu) {
"
";
- Singleton::keybindings()->menu_ui_string =
- menu_prefix + menu_input + menu_suffix;
+ Singleton::menu()->ui = menu_prefix + menu_input + menu_suffix;
}
void PluginApi::AddSubMenuXml(std::string plugin_name,
std::string parent_menu) {
- std::string temp_menu = Singleton::keybindings()->menu_ui_string;
+ std::string temp_menu = Singleton::menu()->ui;
std::size_t parent_menu_pos = temp_menu.find(parent_menu);
- // +2 gets you outside of the tag:<'menu_name'> ref: keybindings.cc
+ // +2 gets you outside of the tag:<'menu_name'>
parent_menu_pos+=parent_menu.size() +2;
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 ="";
- Singleton::keybindings()->menu_ui_string =
- menu_prefix + menu_input + menu_suffix;
+ Singleton::menu()->ui = menu_prefix + menu_input + menu_suffix;
}
///////////////////////
diff --git a/juci/api.h b/juci/api.h
index 64e72c1..3f97710 100644
--- a/juci/api.h
+++ b/juci/api.h
@@ -13,7 +13,7 @@
class PluginApi {
public:
PluginApi();
- static Menu::Controller* menu_;
+ static Menu* menu_;
static Notebook::Controller* notebook_;
static void InitPlugins();
static std::string ProjectPath();
diff --git a/juci/config.cc b/juci/config.cc
index 6096a9e..4cd3b71 100644
--- a/juci/config.cc
+++ b/juci/config.cc
@@ -1,6 +1,8 @@
#include "singletons.h"
#include "config.h"
#include "logging.h"
+#include
+#include
MainConfig::MainConfig() {
INFO("Reading config file");
@@ -71,17 +73,17 @@ void MainConfig::GenerateTerminalCommands() {
}
void MainConfig::GenerateKeybindings() {
- auto keybindings_cfg=Singleton::Config::keybindings();
+ auto menu=Singleton::menu();
DEBUG("Fetching keybindings");
std::string line;
std::ifstream menu_xml("menu.xml");
if (menu_xml.is_open()) {
while (getline(menu_xml, line))
- keybindings_cfg->AppendXml(line);
+ menu->ui+=line;
}
boost::property_tree::ptree keys_json = cfg_.get_child("keybindings");
for (auto &i : keys_json)
- keybindings_cfg->key_map[i.first] = i.second.get_value();
+ menu->key_map[i.first] = i.second.get_value();
DEBUG("Keybindings fetched");
}
diff --git a/juci/config.h b/juci/config.h
index e08c17b..9729467 100644
--- a/juci/config.h
+++ b/juci/config.h
@@ -2,8 +2,6 @@
#define JUCI_CONFIG_H_
#include
#include
-#include
-#include
class MainConfig {
public:
diff --git a/juci/keybindings.cc b/juci/keybindings.cc
deleted file mode 100644
index afd2821..0000000
--- a/juci/keybindings.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-#include "keybindings.h"
-#include "singletons.h"
-
-Keybindings::Keybindings() {
- menu_ui_string=Singleton::Config::keybindings()->menu_xml;
- action_group_menu = Gtk::ActionGroup::create();
- ui_manager_menu = Gtk::UIManager::create();
- action_group_hidden = Gtk::ActionGroup::create();
- ui_manager_hidden = Gtk::UIManager::create();
-}
-
-void Keybindings::BuildMenu() {
- try {
- ui_manager_menu->add_ui_from_string(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::BuildHiddenMenu() {
- try {
- ui_manager_hidden->add_ui_from_string(hidden_ui_string);
- }
- catch (const Glib::Error &ex) {
- std::cerr << "building hidden menu failed" << ex.what();
- }
- ui_manager_hidden->insert_action_group(action_group_hidden);
-}
-
-void Keybindings::Config::AppendXml(std::string &child) {
- menu_xml += child;
-}
-
-void Keybindings::Config::SetMenu(std::string &menu_xml) {
- menu_xml = menu_xml;
-}
-
-void Keybindings::Config::SetKeyMap(std::unordered_map &key_map) {
- key_map = key_map;
-}
diff --git a/juci/keybindings.h b/juci/keybindings.h
deleted file mode 100644
index deba952..0000000
--- a/juci/keybindings.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//juCi++ class that holds every keybinding.
-#ifndef JUCI_KEYBINDINGS_H_
-#define JUCI_KEYBINDINGS_H_
-
-#include
-#include
-#include
-
-class Keybindings {
-public:
- class Config {
- public:
- void AppendXml(std::string &child);
- void SetMenu(std::string &menu_xml);
- void SetKeyMap(std::unordered_map &key_map);
- std::unordered_map key_map;
- std::string menu_xml;
- };//Config
-
- Keybindings();
- void BuildMenu();
- void BuildHiddenMenu();
-
- std::string menu_ui_string;
- std::string hidden_ui_string;
-
- Glib::RefPtr ui_manager_menu;
- Glib::RefPtr action_group_menu;
- Glib::RefPtr ui_manager_hidden;
- Glib::RefPtr action_group_hidden;
-};
-#endif // JUCI_KEYBINDINGS_H_
diff --git a/juci/menu.cc b/juci/menu.cc
index 774ba00..f5ccefa 100644
--- a/juci/menu.cc
+++ b/juci/menu.cc
@@ -1,76 +1,36 @@
#include "menu.h"
-#include "singletons.h"
+#include
-Menu::View::View(Gtk::Orientation orientation) :
- view_(orientation) {
- Gtk::MenuBar menutest;
- view_.pack_end(menutest);
-}
-Gtk::Box &Menu::View::view(
- Glib::RefPtr ui_manager) {
- view_.pack_start(*ui_manager->get_widget("/MenuBar"), Gtk::PACK_SHRINK);
- return view_;
-}
+Menu::Menu() : box(Gtk::ORIENTATION_VERTICAL) {
+ action_group = Gtk::ActionGroup::create();
+ ui_manager = Gtk::UIManager::create();
-Menu::Controller::Controller() : menu_view_(Gtk::ORIENTATION_VERTICAL) {
- auto keybindings=Singleton::keybindings();
- keybindings->action_group_menu->add(Gtk::Action::create("FileNew",
- "New File"));
- keybindings->action_group_menu->add(Gtk::Action::create("EditMenu",
- Gtk::Stock::EDIT));
- keybindings->action_group_menu->add(Gtk::Action::create("WindowMenu",
- "_Window"));
- keybindings->action_group_menu->add(Gtk::Action::create("WindowSplitWindow",
- "Split window"),
- Gtk::AccelKey(Singleton::Config::keybindings()
- ->key_map["split_window"]),//"S"),
- [this]() {
- OnWindowSplitWindow();
- });
- keybindings->action_group_menu->add(Gtk::Action::create("ProjectMenu",
- "P_roject"));
- keybindings->action_group_menu->add(Gtk::Action::create("PluginMenu",
- "_Plugins"));
- 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_hidden->add(Gtk::Action::create("Test"),
- Gtk::AccelKey("K"),
- [this]() {
- OnHelpAbout();
- });
- //keybindings->BuildMenu(); // moved to window.cc
- keybindings->BuildHiddenMenu();
- } // Controller
-Gtk::Box &Menu::Controller::view() {
- return menu_view_.view(Singleton::keybindings()->ui_manager_menu);
-}
-void Menu::Controller::OnPluginAddSnippet() {
- //TODO(Forgi add you snippet magic code)
- std::cout << "Add snippet" << std::endl;
- //juci_api::py::LoadPlugin("snippet");
-}
-void Menu::Controller::OnFileOpenFile() {
- std::cout << "Open file clicked" << std::endl;
- //TODO(Oyvang) Legg til funksjon
+ action_group->add(Gtk::Action::create("FileNew", "New File"));
+ action_group->add(Gtk::Action::create("EditMenu", Gtk::Stock::EDIT));
+ action_group->add(Gtk::Action::create("WindowMenu", "_Window"));
+ action_group->add(Gtk::Action::create("WindowSplitWindow", "Split window"), Gtk::AccelKey(key_map["split_window"]), [this]() {
+ });
+ action_group->add(Gtk::Action::create("ProjectMenu", "P_roject"));
+ action_group->add(Gtk::Action::create("PluginMenu", "_Plugins"));
+ action_group->add(Gtk::Action::create("HelpMenu", Gtk::Stock::HELP));
+ action_group->add(Gtk::Action::create("HelpAbout", Gtk::Stock::ABOUT), [this]() {
+ });
}
-void Menu::Controller::OnEditCut() {
- std::cout << "Clicked cut" << std::endl;
- //TODO(Oyvang) Legg til funksjon
-}
-void Menu::Controller::OnEditFind() {
- std::cout << "Clicked find" << std::endl;
- //TODO(Oyvang) Legg til funksjon
+
+Gtk::Widget& Menu::get_widget() {
+ return *ui_manager->get_widget("/MenuBar");
}
-void Menu::Controller::OnWindowSplitWindow() {
- std::cout << "Clicked split window" << std::endl;
- //TODO(Oyvang) Legg til funksjon
+
+Gtk::Menu& Menu::get_cpp() {
+ return *(Gtk::Menu*)ui_manager->get_widget("/MenuBar/CppMenu");
}
-void Menu::Controller::OnHelpAbout() {
- std::cout << "Clicked about" << std::endl;
- //TODO(Oyvang) Legg til funksjon
+
+void Menu::build() {
+ try {
+ ui_manager->add_ui_from_string(ui);
+ }
+ catch (const Glib::Error &ex) {
+ std::cerr << "building menu failed" << ex.what();
+ }
+ ui_manager->insert_action_group(action_group);
}
diff --git a/juci/menu.h b/juci/menu.h
index 0396e96..dc95ce4 100644
--- a/juci/menu.h
+++ b/juci/menu.h
@@ -1,34 +1,21 @@
#ifndef JUCI_MENU_H_
#define JUCI_MENU_H_
-#include
+#include
+#include
#include
-namespace Menu {
- class View {
- public:
- explicit View(Gtk::Orientation orient);
- Gtk::Box &view(Glib::RefPtr ui_manager);
- protected:
- Gtk::Box view_;
- }; // class View
- class Controller {
- public:
- Controller();
- Gtk::Box &view();
-
- View menu_view_;
- void OnFileNewEmptyfile();
- void OnFileNewCCFile();
- void OnFileNewHeaderFile();
- void OnFileOpenFile();
- void OnFileOpenFolder();
- void OnPluginAddSnippet();
- void OnWindowCloseTab();
- void OnEditCut();
- void OnEditFind();
- void OnWindowSplitWindow();
- void OnHelpAbout();
- }; // class Controller
-} // namespace Menu
+class Menu {
+public:
+ Menu();
+ Gtk::Widget& get_widget();
+ Gtk::Menu& get_cpp();
+ void build();
+
+ Gtk::Box box;
+ std::unordered_map key_map;
+ std::string ui;
+ Glib::RefPtr ui_manager;
+ Glib::RefPtr action_group;
+};
#endif // JUCI_MENU_H_
diff --git a/juci/menu.xml b/juci/menu.xml
index 18f82e3..9c6a63f 100644
--- a/juci/menu.xml
+++ b/juci/menu.xml
@@ -16,7 +16,7 @@
-
+