Browse Source

added config to source, notebook, menu and keybindings.

master
tedjk 11 years ago
parent
commit
2362a4a01c
  1. 25
      juci/config.cc
  2. 11
      juci/config.h
  3. 9
      juci/config.json
  4. 64
      juci/keybindings.cc
  5. 29
      juci/keybindings.h
  6. 12
      juci/menu.cc
  7. 9
      juci/notebook.cc
  8. 5
      juci/notebook.h
  9. 5
      juci/window.cc
  10. 7
      juci/window.h

25
juci/config.cc

@ -1,16 +1,17 @@
#include "config.h" #include "config.h"
MainConfig::MainConfig() {
MainConfig::MainConfig() :
keybindings_cfg_(), source_cfg_() {
boost::property_tree::json_parser::read_json("config.json", cfg_); boost::property_tree::json_parser::read_json("config.json", cfg_);
GenerateSource(); GenerateSource();
GenerateKeybindings(); GenerateKeybindings();
// keybindings_cfg_ = cfg_.get_child("keybindings"); // keybindings_cfg_ = cfg_.get_child("keybindings");
// notebook_cfg_ = cfg_.get_child("notebook"); // notebook_cfg_ = cfg_.get_child("notebook");
// menu_cfg_ = cfg_.get_child("menu"); // menu_cfg_ = cfg_.get_child("menu");
} }
void MainConfig::GenerateSource(){ void MainConfig::GenerateSource() {
boost::property_tree::ptree source_json = cfg_.get_child("source"); boost::property_tree::ptree source_json = cfg_.get_child("source");
boost::property_tree::ptree syntax_json = source_json.get_child("syntax"); boost::property_tree::ptree syntax_json = source_json.get_child("syntax");
boost::property_tree::ptree colors_json = source_json.get_child("colors"); boost::property_tree::ptree colors_json = source_json.get_child("colors");
@ -21,5 +22,21 @@ void MainConfig::GenerateSource(){
source_cfg_.InsertType(i.first, i.second.get_value<std::string>()); source_cfg_.InsertType(i.first, i.second.get_value<std::string>());
} }
void MainConfig::GenerateKeybindings(){ void MainConfig::GenerateKeybindings() {
string line;
std::ifstream menu_xml("menu.xml");
if (menu_xml.is_open()) {
while (getline(menu_xml, line)) {
keybindings_cfg_.AppendXml(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<std::string>();
}
Keybindings::Config& MainConfig::keybindings_cfg() {
return keybindings_cfg_;
}
const Source::Config& MainConfig::source_cfg() {
return source_cfg_;
} }

11
juci/config.h

@ -1,13 +1,15 @@
#include <boost/property_tree/json_parser.hpp> #include <boost/property_tree/json_parser.hpp>
#include <boost/property_tree/xml_parser.hpp> #include <boost/property_tree/xml_parser.hpp>
#include <fstream> #include <fstream>
#include "source.h" #include <string>
#include "keybindings.h" #include "keybindings.h"
#include "source.h"
class MainConfig { class MainConfig {
public: public:
MainConfig(); MainConfig();
const Source::Config& source_cfg() {return source_cfg_; } const Source::Config& source_cfg();
const Keybindings::Config& keybindings_cfg() {return keybindings_cfg_; } Keybindings::Config& keybindings_cfg();
void PrintMenu(); void PrintMenu();
//boost::property_tree::ptree& source_cfg(); //boost::property_tree::ptree& source_cfg();
@ -17,7 +19,7 @@
boost::property_tree::ptree cfg_; boost::property_tree::ptree cfg_;
// boost::property_tree::ptree sourcecfg_; // boost::property_tree::ptree sourcecfg_;
// boost::property_tree::ptree keybindings_cfg_; boost::property_tree::ptree key_tree_;
// boost::property_tree::ptree notebook_cfg_; // boost::property_tree::ptree notebook_cfg_;
// boost::property_tree::ptree menu_cfg_; // boost::property_tree::ptree menu_cfg_;
@ -27,4 +29,3 @@
void GenerateSource(); void GenerateSource();
void GenerateKeybindings(); void GenerateKeybindings();
}; };

9
juci/config.json

@ -18,6 +18,12 @@
"705": "comment" "705": "comment"
} }
}, },
"keybindings": {
"split_window": "<control><alt>s",
"new_h_file": "<control><alt>h",
"new_cc_file": "<control><alt>c",
"close_tab": "<control>w"
},
"example": { "example": {
"key": "value", "key": "value",
"key2": [ "key2": [
@ -26,8 +32,5 @@
3 3
], ],
"key3": "value" "key3": "value"
},
"keybindings": {
"path" : "keybindings.xml"
} }
} }

64
juci/keybindings.cc

@ -1,63 +1,29 @@
#include "keybindings.h" #include "keybindings.h"
Keybindings::Model::Model(const Keybindings::Config &config) : Keybindings::Model::Model(Keybindings::Config &config) :
menu_ui_string_(config.menu_xml()) { menu_ui_string_(config.menu_xml()) {
/* menu_ui_string_ = /* hidden_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> " "<ui> "
" <menubar name='MenuBar'> " " <menubar name='MenuBar'> "
" <menuitem action='Test'/> " " <menuitem action='Test'/> "
" </menubar> " " </menubar> "
"</ui> "; "</ui> ";*/
} }
Keybindings::Model::~Model() { Keybindings::Model::~Model() {
} }
Keybindings::Controller::Controller(const Keybindings::Config &config) : Keybindings::Controller::Controller(Keybindings::Config &config) :
config_(config), model_(config) { config_(config), model_(config) {
action_group_menu_ = Gtk::ActionGroup::create(); action_group_menu_ = Gtk::ActionGroup::create();
ui_manager_menu_ = Gtk::UIManager::create(); ui_manager_menu_ = Gtk::UIManager::create();
action_group_hidden_ = Gtk::ActionGroup::create(); action_group_hidden_ = Gtk::ActionGroup::create();
ui_manager_hidden_ = Gtk::UIManager::create(); ui_manager_hidden_ = Gtk::UIManager::create();
} }
Keybindings::Controller::~Controller() { Keybindings::Controller::~Controller() {
} }
void Keybindings::Controller::BuildMenu() { void Keybindings::Controller::BuildMenu() {
try { try {
ui_manager_menu_->add_ui_from_string(model_.menu_ui_string()); ui_manager_menu_->add_ui_from_string(model_.menu_ui_string());
@ -77,10 +43,24 @@ void Keybindings::Controller::BuildHiddenMenu() {
ui_manager_hidden_->insert_action_group(action_group_hidden_); ui_manager_hidden_->insert_action_group(action_group_hidden_);
} }
Keybindings::Config::Config(const Keybindings::Config &original) : Keybindings::Config::Config(Keybindings::Config &original) {
menu_xml_(original.menu_xml()) { SetMenu(original.menu_xml());
SetKeyMap(original.key_map());
}
Keybindings::Config::Config() {
menu_xml_ = "";
std::unordered_map<std::string, std::string> key_map();
}
void Keybindings::Config::AppendXml(std::string &child) {
menu_xml_ += child;
} }
void Keybindings::Config::SetMenu(std::string &menu_xml) { void Keybindings::Config::SetMenu(std::string &menu_xml) {
menu_xml_ = menu_xml; menu_xml_ = menu_xml;
} }
void Keybindings::Config::SetKeyMap(std::unordered_map<std::string, std::string> &key_map) {
key_map_ = key_map;
}

29
juci/keybindings.h

@ -2,29 +2,34 @@
#ifndef JUCI_KEYBINDINGS_H_ #ifndef JUCI_KEYBINDINGS_H_
#define JUCI_KEYBINDINGS_H_ #define JUCI_KEYBINDINGS_H_
#include "iostream" #include <iostream>
#include "gtkmm.h" #include "gtkmm.h"
#include <unordered_map>
//#include "config.h" //TODO :: remove?
namespace Keybindings { namespace Keybindings {
class Config{ class Config {
public: public:
Config(const Config &original); Config(Config &original);
Config(); Config();
const std::string& menu_xml() const {return menu_xml_;} std::string& menu_xml() { return menu_xml_; }
std::unordered_map<std::string, std::string>& key_map() { return key_map_; }
void AppendXml(std::string &child);
void SetMenu(std::string &menu_xml); void SetMenu(std::string &menu_xml);
void SetKeyMap(std::unordered_map<std::string, std::string> &key_map);
private: private:
std::unordered_map<std::string, std::string> key_map_;
std::string menu_xml_; std::string menu_xml_;
std::string hidden_ui_string_; std::string hidden_ui_string_;
};//Config };//Config
class Model { class Model {
public: public:
Model(const Keybindings::Config &config); Model(Keybindings::Config &config);
virtual ~Model(); virtual ~Model();
std::string menu_ui_string(){return menu_ui_string_;} std::string menu_ui_string() { return menu_ui_string_; }
std::string hidden_ui_string(){return hidden_ui_string_;} std::string hidden_ui_string() { return hidden_ui_string_; }
//private: //private:
std::string menu_ui_string_; std::string menu_ui_string_;
std::string hidden_ui_string_; std::string hidden_ui_string_;
@ -32,7 +37,7 @@ namespace Keybindings {
class Controller { class Controller {
public: public:
Controller(const Keybindings::Config &config); explicit Controller(Keybindings::Config &config);
virtual ~Controller(); virtual ~Controller();
Glib::RefPtr<Gtk::ActionGroup> action_group_menu() { Glib::RefPtr<Gtk::ActionGroup> action_group_menu() {
return action_group_menu_; return action_group_menu_;
@ -56,12 +61,6 @@ namespace Keybindings {
// private: // private:
Keybindings::Config config_; Keybindings::Config config_;
Keybindings::Model model_; Keybindings::Model model_;
};//Controller };//Controller
} }
#endif // JUCI_KEYBINDINGS_H_ #endif // JUCI_KEYBINDINGS_H_

12
juci/menu.cc

@ -28,21 +28,13 @@ Menu::Controller::Controller(Keybindings::Controller& keybindings) :
"_Window")); "_Window"));
keybindings_.action_group_menu()->add(Gtk::Action::create("WindowSplitWindow", keybindings_.action_group_menu()->add(Gtk::Action::create("WindowSplitWindow",
"Split window"), "Split window"),
Gtk::AccelKey("<control><alt>S"), Gtk::AccelKey(keybindings_.config_
.key_map()["split_window"]),//"<control><alt>S"),
[this]() { [this]() {
OnWindowSplitWindow(); OnWindowSplitWindow();
}); });
keybindings_.action_group_menu()->add(Gtk::Action::create("PluginMenu", keybindings_.action_group_menu()->add(Gtk::Action::create("PluginMenu",
"_Plugins")); "_Plugins"));
//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("<alt>space"),
[this]() {
OnPluginAddSnippet();
});*/
keybindings_.action_group_menu()->add(Gtk::Action::create("HelpMenu", keybindings_.action_group_menu()->add(Gtk::Action::create("HelpMenu",
Gtk::Stock::HELP)); Gtk::Stock::HELP));
keybindings_.action_group_menu()->add(Gtk::Action::create("HelpAbout", keybindings_.action_group_menu()->add(Gtk::Action::create("HelpAbout",

9
juci/notebook.cc

@ -36,21 +36,24 @@ Notebook::Controller::Controller(Keybindings::Controller& keybindings,
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewCC", keybindings.action_group_menu()->add(Gtk::Action::create("FileNewCC",
"New cc file"), "New cc file"),
Gtk::AccelKey("<control><alt>c"), Gtk::AccelKey(keybindings.config_
.key_map()["new_cc_file"]),
[this]() { [this]() {
is_new_file = true; is_new_file = true;
OnFileNewCCFile(); OnFileNewCCFile();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("FileNewH", keybindings.action_group_menu()->add(Gtk::Action::create("FileNewH",
"New h file"), "New h file"),
Gtk::AccelKey("<control><alt>h"), Gtk::AccelKey(keybindings.config_
.key_map()["new_h_file"]),
[this]() { [this]() {
is_new_file = true; is_new_file = true;
OnFileNewHeaderFile(); OnFileNewHeaderFile();
}); });
keybindings.action_group_menu()->add(Gtk::Action::create("WindowCloseTab", keybindings.action_group_menu()->add(Gtk::Action::create("WindowCloseTab",
"Close tab"), "Close tab"),
Gtk::AccelKey("<control>w"), Gtk::AccelKey(keybindings.config_
.key_map()["close_tab"]),
[this]() { [this]() {
OnCloseCurrentPage(); OnCloseCurrentPage();
}); });

5
juci/notebook.h

@ -25,7 +25,8 @@ namespace Notebook {
}; };
class Controller { class Controller {
public: public:
Controller(Keybindings::Controller& keybindings,const Source::Config& config); Controller(Keybindings::Controller& keybindings,
const Source::Config& config);
Gtk::Box& view(); Gtk::Box& view();
Gtk::Box& entry_view(); Gtk::Box& entry_view();
void OnNewPage(std::string name); void OnNewPage(std::string name);
@ -51,7 +52,7 @@ namespace Notebook {
void OnEditCut(); void OnEditCut();
void OnEditSearch(); void OnEditSearch();
void Search(bool forward); void Search(bool forward);
Source::Config& source_config() { return source_config_; } const Source::Config& source_config() { return source_config_; }
private: private:
Source::Config source_config_; Source::Config source_config_;
bool is_new_file; bool is_new_file;

5
juci/window.cc

@ -3,8 +3,9 @@
Window::Window() : Window::Window() :
window_box_(Gtk::ORIENTATION_VERTICAL), window_box_(Gtk::ORIENTATION_VERTICAL),
main_config_(), main_config_(),
notebook_(keybindings_(main_config().keybindings_cfg()), main_config().source_cfg()), keybindings_(main_config_.keybindings_cfg()),
menu_(keybindings_(main_config().keybindings_cfg())) { notebook_( keybindings(), main_config_.source_cfg()),
menu_( keybindings() ) {
set_title("juCi++"); set_title("juCi++");
set_default_size(600, 400); set_default_size(600, 400);
add(window_box_); add(window_box_);

7
juci/window.h

@ -1,8 +1,6 @@
#ifndef JUCI_WINDOW_H_ #ifndef JUCI_WINDOW_H_
#define JUCI_WINDOW_H_ #define JUCI_WINDOW_H_
#include <iostream>
#include "gtkmm.h"
#include "api.h" #include "api.h"
#include "config.h" #include "config.h"
#include <cstddef> #include <cstddef>
@ -11,7 +9,7 @@
class Window : public Gtk::Window { class Window : public Gtk::Window {
public: public:
Window(); Window();
MainConfig& main_config() {return main_config_;} MainConfig& main_config() { return main_config_; }
Gtk::Box window_box_; Gtk::Box window_box_;
//private: //private:
MainConfig main_config_; MainConfig main_config_;
@ -19,12 +17,11 @@ public:
Menu::Controller menu_; Menu::Controller menu_;
Notebook::Controller notebook_; Notebook::Controller notebook_;
Keybindings::Controller& keybindings() { return keybindings_; }
private: private:
//signal handlers //signal handlers
void OnWindowHide(); void OnWindowHide();
void OnOpenFile(); void OnOpenFile();
}; };
#endif // JUCI_WINDOW_H #endif // JUCI_WINDOW_H

Loading…
Cancel
Save