You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
3.2 KiB

#include "config.h"
#include "logging.h"
MainConfig::MainConfig() :
keybindings_cfg_(), source_cfg() {
11 years ago
INFO("Reading config file");
boost::property_tree::json_parser::read_json("config.json", cfg_);
11 years ago
INFO("Config file read");
GenerateSource();
GenerateKeybindings();
GenerateDirectoryFilter();
GenerateTerminalCommands();
}
void MainConfig::GenerateSource() {
DEBUG("Fetching source cfg");
// boost::property_tree::ptree
auto source_json = cfg_.get_child("source");
auto syntax_json = source_json.get_child("syntax");
auto colors_json = source_json.get_child("colors");
auto extensions_json = source_json.get_child("extensions");
auto visual_json = source_json.get_child("visual");
for (auto &i : visual_json) {
if (i.first == "background") {
source_cfg.background = i.second.get_value<std::string>();
}
if (i.first == "show_line_numbers") {
source_cfg.show_line_numbers = i.second.get_value<std::string>() == "1" ? true : false;
}
11 years ago
if (i.first == "highlight_current_line") {
source_cfg.highlight_current_line = i.second.get_value<std::string>() == "1" ? true : false;
}
if (i.first == "font") {
source_cfg.font = i.second.get_value<std::string>();
}
}
source_cfg.tab_size = source_json.get<unsigned>("tab_size");
for (unsigned c = 0; c < source_cfg.tab_size; c++) {
source_cfg.tab+=" ";
}
for (auto &i : colors_json) {
source_cfg.tags[i.first]=i.second.get_value<std::string>();
}
for (auto &i : syntax_json) {
source_cfg.types[i.first]=i.second.get_value<std::string>();
}
for (auto &i : extensions_json) {
source_cfg.extensions.emplace_back(i.second.get_value<std::string>());
}
DEBUG("Source cfg fetched");
}
void MainConfig::GenerateTerminalCommands() {
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_.InsertCompileCommand(i.second.get_value<std::string>());
}
for (auto &i : run_commands_json) {
terminal_cfg_.SetRunCommand(i.second.get_value<std::string>());
}
}
void MainConfig::GenerateKeybindings() {
DEBUG("Fetching keybindings");
std::string line;
std::ifstream menu_xml("menu.xml");
if (menu_xml.is_open()) {
11 years ago
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>();
DEBUG("Keybindings fetched");
}
void MainConfig::GenerateDirectoryFilter() {
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<std::string>());
for ( auto &i : ignore_json )
dir_cfg_.AddIgnore(i.second.get_value<std::string>());
DEBUG("Directory filter fetched");
}