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 cf1099d..14acce7 100644
--- a/juci/api.cc
+++ b/juci/api.cc
@@ -1,16 +1,16 @@
#include "api.h"
#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 ////
/////////////////////////////
-PluginApi::PluginApi(Menu::Controller& menu_ctl_,
- Notebook::Controller& notebook_ctl_) {
+PluginApi::PluginApi() {
DEBUG("Adding pointers for the API");
- menu_ = &menu_ctl_;
- notebook_ = ¬ebook_ctl_;
+ notebook_ = Singleton::notebook();
+ menu_ = Singleton::menu();
DEBUG("Initiating plugins(from plugins.py)..");
#ifndef __APPLE__
InitPlugins(); //TODO: fix this
@@ -18,11 +18,6 @@ PluginApi::PluginApi(Menu::Controller& menu_ctl_,
DEBUG("Plugins initiated..");
}
-PluginApi::~PluginApi() {
- menu_ = NULL;
- notebook_ = NULL;
-}
-
std::string PluginApi::ProjectPath() {
int MAXPATHLEN = 50;
char temp[MAXPATHLEN];
@@ -69,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";
- menu_->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,
@@ -79,8 +73,7 @@ void PluginApi::AddSubMenuElement(std::string parent_menu,
std::string plugin_path,
std::string menu_keybinding) {
AddSubMenuXml(menu_func_name, parent_menu);
- menu_->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),
[=]() {
@@ -89,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 = menu_->keybindings_.model_.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);
@@ -99,23 +92,21 @@ void PluginApi::AddMenuXml(std::string plugin_name, std::string parent_menu) {
"
";
- menu_->keybindings_.model_.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 = menu_->keybindings_.model_.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 ="";
- menu_->keybindings_.model_.menu_ui_string_ =
- menu_prefix + menu_input + menu_suffix;
+ Singleton::menu()->ui = menu_prefix + menu_input + menu_suffix;
}
///////////////////////
@@ -221,7 +212,7 @@ void libjuci::IterToWordEnd(Gtk::TextIter &iter) {
Glib::RefPtr libjuci::BufferFromNotebook() {
return Glib::RefPtr(PluginApi::notebook_
- ->CurrentTextView().get_buffer());
+ ->CurrentSourceView()->get_buffer());
}
Gtk::TextIter libjuci::IterFromNotebook() {
diff --git a/juci/api.h b/juci/api.h
index 900d206..3f97710 100644
--- a/juci/api.h
+++ b/juci/api.h
@@ -12,9 +12,8 @@
////////////////////
class PluginApi {
public:
- PluginApi(Menu::Controller&, Notebook::Controller&);
- ~PluginApi();
- static Menu::Controller* menu_;
+ PluginApi();
+ 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 9fa2a69..7302984 100644
--- a/juci/config.cc
+++ b/juci/config.cc
@@ -1,8 +1,10 @@
+#include "singletons.h"
#include "config.h"
#include "logging.h"
+#include
+#include
-MainConfig::MainConfig() :
- keybindings_cfg() {
+MainConfig::MainConfig() {
INFO("Reading config file");
boost::property_tree::json_parser::read_json("config.json", cfg_);
INFO("Config file read");
@@ -13,7 +15,7 @@ MainConfig::MainConfig() :
}
void MainConfig::GenerateSource() {
- auto source_cfg=Singletons::Config::source();
+ auto source_cfg=Singleton::Config::source();
DEBUG("Fetching source cfg");
// boost::property_tree::ptree
auto source_json = cfg_.get_child("source");
@@ -58,39 +60,49 @@ void MainConfig::GenerateSource() {
}
void MainConfig::GenerateTerminalCommands() {
+ auto terminal_cfg=Singleton::Config::terminal();
boost::property_tree::ptree source_json = cfg_.get_child("project");
boost::property_tree::ptree compile_commands_json = source_json.get_child("compile_commands");
boost::property_tree::ptree run_commands_json = source_json.get_child("run_commands");
for (auto &i : compile_commands_json) {
- terminal_cfg.compile_commands.emplace_back(i.second.get_value());
+ terminal_cfg->compile_commands.emplace_back(i.second.get_value());
}
for (auto &i : run_commands_json) {
- terminal_cfg.run_command=(i.second.get_value()); //TODO: run_commands array->one run_command?
+ terminal_cfg->run_command=(i.second.get_value()); //TODO: run_commands array->one run_command?
}
}
void MainConfig::GenerateKeybindings() {
+ 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();
+ for (auto &i : keys_json) {
+ auto key=i.second.get_value();
+#ifdef __APPLE__
+ auto pos=key.find("");
+ if(pos!=std::string::npos)
+ key.replace(pos, 9, "");
+#endif
+ menu->key_map[i.first] = key;
+ }
DEBUG("Keybindings fetched");
}
void MainConfig::GenerateDirectoryFilter() {
+ auto dir_cfg=Singleton::Config::directories();
DEBUG("Fetching directory filter");
boost::property_tree::ptree dir_json = cfg_.get_child("directoryfilter");
boost::property_tree::ptree ignore_json = dir_json.get_child("ignore");
boost::property_tree::ptree except_json = dir_json.get_child("exceptions");
for ( auto &i : except_json )
- dir_cfg.AddException(i.second.get_value());
+ dir_cfg->AddException(i.second.get_value());
for ( auto &i : ignore_json )
- dir_cfg.AddIgnore(i.second.get_value());
+ dir_cfg->AddIgnore(i.second.get_value());
DEBUG("Directory filter fetched");
}
diff --git a/juci/config.h b/juci/config.h
index c6913fc..9729467 100644
--- a/juci/config.h
+++ b/juci/config.h
@@ -2,19 +2,9 @@
#define JUCI_CONFIG_H_
#include
#include
-#include
-#include
-#include "singletons.h"
-#include "keybindings.h"
-#include "source.h"
-#include "directories.h"
-#include "terminal.h"
class MainConfig {
public:
- Terminal::Config terminal_cfg;
- Keybindings::Config keybindings_cfg;
- Directories::Config dir_cfg;
MainConfig();
void PrintMenu();
void GenerateSource();
diff --git a/juci/config.json b/juci/config.json
index 42effbb..efc9003 100644
--- a/juci/config.json
+++ b/juci/config.json
@@ -58,6 +58,8 @@
"edit_undo": "z",
"edit_redo": "y",
"edit_find": "f",
+ "goto_declaration": "d",
+ "goto_method": "m",
"compile_and_run": "r",
"compile": "r"
},
diff --git a/juci/directories.cc b/juci/directories.cc
index 6e8ca9e..65a28dd 100644
--- a/juci/directories.cc
+++ b/juci/directories.cc
@@ -1,8 +1,8 @@
#include "directories.h"
#include "logging.h"
+#include "singletons.h"
-Directories::Controller::Controller(Directories::Config& cfg) :
- config_(cfg) {
+Directories::Controller::Controller() {
DEBUG("adding treeview to scrolledwindow");
m_ScrolledWindow.add(m_TreeView);
m_ScrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
@@ -29,10 +29,10 @@ open_folder(const boost::filesystem::path& dir_path) {
bool Directories::Controller::IsIgnored(std::string path) {
DEBUG("Checking if file-/directory is filtered");
std::transform(path.begin(), path.end(), path.begin(), ::tolower);
- if (config().IsException(path)) {
+ if (Singleton::Config::directories()->IsException(path)) {
return false;
}
- if (config().IsIgnored(path)) {
+ if (Singleton::Config::directories()->IsIgnored(path)) {
return true;
}
return false;
@@ -156,12 +156,6 @@ GetCmakeVarValue(const boost::filesystem::path& dir_path, std::string command_na
return "no project name";
}
-Directories::Config::Config() {
-}
-Directories::Config::Config(Directories::Config& cfg) :
- ignore_list_(cfg.ignore_list()), exception_list_(cfg.exception_list()) {
-}
-
void Directories::Config::AddIgnore(std::string filter) {
ignore_list_.push_back(filter);
}
diff --git a/juci/directories.h b/juci/directories.h
index ff7d195..c6363c5 100644
--- a/juci/directories.h
+++ b/juci/directories.h
@@ -14,8 +14,6 @@ namespace Directories {
class Config {
public:
- Config(Config &original);
- Config();
std::vector ignore_list() { return ignore_list_; }
std::vector exception_list() { return exception_list_; }
void AddIgnore(std::string filter);
@@ -43,10 +41,8 @@ namespace Directories {
class Controller {
public:
Controller();
- Controller(Directories::Config& cfg);
View& view() { return view_;}
Model& model() { return model_;}
- Directories::Config& config() { return config_;}
Gtk::ScrolledWindow& widget() {return m_ScrolledWindow;}
void open_folder(const boost::filesystem::path& dir_path);
void list_dirs(const boost::filesystem::path& dir_path,
@@ -64,7 +60,6 @@ namespace Directories {
private:
View view_;
Model model_;
- Directories::Config config_;
protected:
void on_treeview_row_activated(const Gtk::TreeModel::Path& path,
diff --git a/juci/juci.cc b/juci/juci.cc
index f19e7da..4ca0558 100644
--- a/juci/juci.cc
+++ b/juci/juci.cc
@@ -1,4 +1,5 @@
#include "juci.h"
+#include "singletons.h"
void init_logging() {
add_common_attributes();
@@ -36,11 +37,11 @@ void Juci::on_activate() {
window->show();
if(directory!="") {
//TODO: use the following instead, window->notebook.open_directory(directory);
- window->notebook.project_path=directory;
- window->notebook.directories.open_folder(directory);
+ Singleton::notebook()->project_path=directory;
+ Singleton::notebook()->directories.open_folder(directory);
}
for(auto &f: files)
- window->notebook.OnOpenFile(f);
+ Singleton::notebook()->open_file(f);
}
int main(int argc, char *argv[]) {
diff --git a/juci/keybindings.cc b/juci/keybindings.cc
deleted file mode 100644
index 2408155..0000000
--- a/juci/keybindings.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-#include "keybindings.h"
-
-Keybindings::Model::Model(Keybindings::Config &config) :
- menu_ui_string_(config.menu_xml()) {
- /* hidden_ui_string_ =
- " "
- " "
- " "
- " "
- " ";*/
-}
-
-Keybindings::Model::~Model() {
-}
-
-Keybindings::Controller::Controller(Keybindings::Config &config) :
- config_(config), model_(config) {
- 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() {
-}
-
-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::BuildHiddenMenu() {
- try {
- ui_manager_hidden_->add_ui_from_string(model_.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_);
-}
-
-Keybindings::Config::Config(Keybindings::Config &original) {
- SetMenu(original.menu_xml());
- SetKeyMap(original.key_map());
-}
-
-Keybindings::Config::Config() {
- menu_xml_ = "";
- }
-
-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 eafccd5..0000000
--- a/juci/keybindings.h
+++ /dev/null
@@ -1,66 +0,0 @@
-//juCi++ class that holds every keybinding.
-#ifndef JUCI_KEYBINDINGS_H_
-#define JUCI_KEYBINDINGS_H_
-
-#include
-#include "gtkmm.h"
-#include
-//#include "config.h" //TODO :: remove?
-
-namespace Keybindings {
-
- class Config {
- public:
- Config(Config &original);
- Config();
- std::string& menu_xml() { return menu_xml_; }
- std::unordered_map& key_map() { return key_map_; }
- void AppendXml(std::string &child);
- void SetMenu(std::string &menu_xml);
- void SetKeyMap(std::unordered_map &key_map);
- private:
- std::unordered_map key_map_;
- std::string menu_xml_;
- std::string hidden_ui_string_;
- };//Config
-
- class Model {
- public:
- Model(Keybindings::Config &config);
- 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_;
- }; // Model
-
- class Controller {
- public:
- explicit Controller(Keybindings::Config &config);
- virtual ~Controller();
- 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_hidden() {
- return ui_manager_hidden_;
- };
- void BuildMenu();
- void BuildHiddenMenu();
- // protected:
- Glib::RefPtr ui_manager_menu_;
- Glib::RefPtr action_group_menu_;
- Glib::RefPtr ui_manager_hidden_;
- Glib::RefPtr action_group_hidden_;
- // private:
- Keybindings::Config config_;
- Keybindings::Model model_;
- };//Controller
-}
-#endif // JUCI_KEYBINDINGS_H_
diff --git a/juci/menu.cc b/juci/menu.cc
index 0f09906..a613492 100644
--- a/juci/menu.cc
+++ b/juci/menu.cc
@@ -1,76 +1,37 @@
#include "menu.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(Keybindings::Controller& keybindings) :
- menu_view_(Gtk::ORIENTATION_VERTICAL),
- keybindings_(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(keybindings_.config_
- .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(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("SourceMenu", "_Source"));
+ 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_source_menu() {
+ return *(Gtk::Menu*)ui_manager->get_widget("/MenuBar/SourceMenu");
}
-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 f743999..40e3cb3 100644
--- a/juci/menu.h
+++ b/juci/menu.h
@@ -1,36 +1,21 @@
#ifndef JUCI_MENU_H_
#define JUCI_MENU_H_
-#include
-#include "gtkmm.h"
-#include "keybindings.h"
+#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:
- explicit Controller(Keybindings::Controller& keybindings);
- Gtk::Box &view();
-
- Keybindings::Controller &keybindings_;
- 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_source_menu();
+ 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..d9937d8 100644
--- a/juci/menu.xml
+++ b/juci/menu.xml
@@ -16,8 +16,12 @@
-
-
+
+
+