/[svn]/gigedit/trunk/src/gigedit/Settings.cpp
ViewVC logotype

Diff of /gigedit/trunk/src/gigedit/Settings.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3151 by schoenebeck, Fri May 5 18:44:59 2017 UTC revision 3157 by schoenebeck, Mon May 8 17:30:10 2017 UTC
# Line 1  Line 1 
1  /*  /*
2      Copyright (c) 2014-2016 Christian Schoenebeck      Copyright (c) 2014-2017 Christian Schoenebeck
3            
4      This file is part of "gigedit" and released under the terms of the      This file is part of "gigedit" and released under the terms of the
5      GNU General Public License version 2.      GNU General Public License version 2.
# Line 12  Line 12 
12  #include <iostream>  #include <iostream>
13  #include <stdio.h>  #include <stdio.h>
14  #include <fstream>  #include <fstream>
15    #include <string.h>
16    
17  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 40) || GTKMM_MAJOR_VERSION < 2  #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION < 40) || GTKMM_MAJOR_VERSION < 2
18  # define HAS_GLIB_KEYFILE_SAVE_TO_FILE 0  # define HAS_GLIB_KEYFILE_SAVE_TO_FILE 0
# Line 45  static std::string groupName(Settings::G Line 46  static std::string groupName(Settings::G
46          case Settings::FILE_PROPS: return "FileProps";          case Settings::FILE_PROPS: return "FileProps";
47          case Settings::INSTR_PROPS: return "InstrProps";          case Settings::INSTR_PROPS: return "InstrProps";
48          case Settings::SAMPLE_REFS: return "SampleRefs";          case Settings::SAMPLE_REFS: return "SampleRefs";
49            case Settings::MACRO_EDITOR: return "MacroEditor";
50            case Settings::MACROS_SETUP: return "MacrosSetup";
51            case Settings::MACROS: return "Macros";
52      }      }
53      return "Global";      return "Global";
54  }  }
# Line 119  Settings::Settings() : Glib::ObjectBase( Line 123  Settings::Settings() : Glib::ObjectBase(
123      macroEditorWindowY(*this, MACRO_EDITOR, "y", -1),      macroEditorWindowY(*this, MACRO_EDITOR, "y", -1),
124      macroEditorWindowW(*this, MACRO_EDITOR, "w", -1),      macroEditorWindowW(*this, MACRO_EDITOR, "w", -1),
125      macroEditorWindowH(*this, MACRO_EDITOR, "h", -1),      macroEditorWindowH(*this, MACRO_EDITOR, "h", -1),
126        macrosSetupWindowX(*this, MACROS_SETUP, "x", -1),
127        macrosSetupWindowY(*this, MACROS_SETUP, "y", -1),
128        macrosSetupWindowW(*this, MACROS_SETUP, "w", -1),
129        macrosSetupWindowH(*this, MACROS_SETUP, "h", -1),
130      m_ignoreNotifies(false)      m_ignoreNotifies(false)
131  {  {
132      m_boolProps.push_back(&warnUserOnExtensions);      m_boolProps.push_back(&warnUserOnExtensions);
# Line 167  Settings::Settings() : Glib::ObjectBase( Line 175  Settings::Settings() : Glib::ObjectBase(
175      m_intProps.push_back(&macroEditorWindowY);      m_intProps.push_back(&macroEditorWindowY);
176      m_intProps.push_back(&macroEditorWindowW);      m_intProps.push_back(&macroEditorWindowW);
177      m_intProps.push_back(&macroEditorWindowH);      m_intProps.push_back(&macroEditorWindowH);
178        m_intProps.push_back(&macrosSetupWindowX);
179        m_intProps.push_back(&macrosSetupWindowY);
180        m_intProps.push_back(&macrosSetupWindowW);
181        m_intProps.push_back(&macrosSetupWindowH);
182  }  }
183    
184  void Settings::onPropertyChanged(Glib::PropertyBase* pProperty, RawValueType_t type, Group_t group) {  void Settings::onPropertyChanged(Glib::PropertyBase* pProperty, RawValueType_t type, Group_t group) {
# Line 235  void Settings::load() { Line 247  void Settings::load() {
247          Property<bool>* prop = static_cast<Property<bool>*>(m_boolProps[i]);          Property<bool>* prop = static_cast<Property<bool>*>(m_boolProps[i]);
248          try {          try {
249              const std::string group = groupName(prop->group());              const std::string group = groupName(prop->group());
250                if (!file.has_group(group)) continue;
251              if (!file.has_key(group, prop->get_name())) continue;              if (!file.has_key(group, prop->get_name())) continue;
252              const bool value = file.get_boolean(group, prop->get_name());              const bool value = file.get_boolean(group, prop->get_name());
253              prop->set_value(value);              prop->set_value(value);
# Line 247  void Settings::load() { Line 260  void Settings::load() {
260          Property<int>* prop = static_cast<Property<int>*>(m_intProps[i]);          Property<int>* prop = static_cast<Property<int>*>(m_intProps[i]);
261          try {          try {
262              const std::string group = groupName(prop->group());              const std::string group = groupName(prop->group());
263                if (!file.has_group(group)) continue;
264              if (!file.has_key(group, prop->get_name())) continue;              if (!file.has_key(group, prop->get_name())) continue;
265              const int value = file.get_integer(group, prop->get_name());              const int value = file.get_integer(group, prop->get_name());
266              prop->set_value(value);              prop->set_value(value);
# Line 258  void Settings::load() { Line 272  void Settings::load() {
272      m_ignoreNotifies = false;      m_ignoreNotifies = false;
273  }  }
274    
275    #define MACRO_LIST_NAME "srlzl"
276    
277    void Settings::loadMacros(std::vector<Serialization::Archive>& macros) {
278        const std::string group = groupName(MACROS);
279        macros.clear();
280        Glib::KeyFile file;
281        try {
282            bool ok = file.load_from_file(configFile());
283            if (!ok) return;
284        } catch (...) {
285            std::cerr << "Could not load gigedit config file '" << configFile() << "'\n" << std::flush;
286            return;
287        }
288        if (!file.has_group(group)) return;
289        if (!file.has_key(group, MACRO_LIST_NAME))
290            return;
291        std::vector<Glib::ustring> v = file.get_string_list(group, MACRO_LIST_NAME);
292        for (int i = 0; i < v.size(); ++i) {
293            Serialization::Archive macro;
294            macro.decode((const uint8_t*)v[i].c_str(), v[i].length());
295            macros.push_back(macro);
296        }
297    }
298    
299    void Settings::saveMacros(const std::vector<Serialization::Archive>& macros) {
300        const std::string group = groupName(MACROS);
301        Glib::KeyFile file;
302        try {
303            bool ok = file.load_from_file(configFile());
304            if (!ok) {
305                std::cerr << "Could not load '" << configFile() << "'\n" << std::flush;
306            }
307        } catch (...) {
308            std::cerr << "Could not load '" << configFile() << "'\n" << std::flush;
309            return;
310        }
311    
312        std::vector<Glib::ustring> v;
313        for (int i = 0; i < macros.size(); ++i) {
314            const Serialization::RawData& rawData = const_cast<Serialization::Archive&>(macros[i]).rawData();
315            std::string s((const char*)&rawData[0], rawData.size());
316            v.push_back(s);
317        }
318    
319        file.set_string_list(group, MACRO_LIST_NAME, v);
320    
321        try {
322    #if HAS_GLIB_KEYFILE_SAVE_TO_FILE
323            bool ok = file.save_to_file(configFile());
324    #else
325            bool ok = saveToFile(&file, configFile());
326    #endif
327            if (!ok) {
328                std::cerr << "Failed saving gigedit config to '" << configFile() << "'\n" << std::flush;
329            } else {
330                //std::cout <<"gigedit CONFIG SAVED\n";
331            }
332        } catch (...) {
333            std::cerr << "Failed saving gigedit config to '" << configFile() << "'\n" << std::flush;
334        }
335    
336    }

Legend:
Removed from v.3151  
changed lines
  Added in v.3157

  ViewVC Help
Powered by ViewVC