Refactor Config classes
This commit is contained in:
parent
285350a585
commit
8f05ce1059
14
Makefile
14
Makefile
@ -1,10 +1,10 @@
|
|||||||
SOURCES = $(wildcard include/**/*.cpp include/*.cpp src/network/*.cpp src/settings/*.cpp)
|
SOURCES = $(wildcard include/**/*.cpp include/*.cpp src/base/**/*.cpp)
|
||||||
OBJECTS = $(patsubst %.cpp,%.o, $(SOURCES))
|
OBJECTS = $(patsubst %.cpp,%.o, $(SOURCES))
|
||||||
TYRO_LIB = build/Tyro.a
|
TYRO_LIB = build/Tyro.a
|
||||||
|
|
||||||
JSON_FILES = $(patsubst config/%.json,%.json, $(wildcard config/*.json))
|
JSON_FILES = $(patsubst config/%.json,%.json, $(wildcard config/*.json))
|
||||||
|
|
||||||
PROGRAM_SRC = $(wildcard src/*.cpp src/widgets/*.cpp)
|
PROGRAM_SRC = $(wildcard src/*.cpp src/widgets/*.cpp src/settings/*.cpp)
|
||||||
PROGRAM = build/Tyro
|
PROGRAM = build/Tyro
|
||||||
PROGRAM_OBJECTS = $(patsubst %.cpp,%.o, $(PROGRAM_SRC))
|
PROGRAM_OBJECTS = $(patsubst %.cpp,%.o, $(PROGRAM_SRC))
|
||||||
|
|
||||||
@ -29,11 +29,7 @@ else
|
|||||||
WX_LDLIBS = $(shell wx-config --libs base core aui stc adv)
|
WX_LDLIBS = $(shell wx-config --libs base core aui stc adv)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(OS),Darwin)
|
LDLIBS += -lssh2
|
||||||
LDLIBS += /usr/local/lib/libssh2.a
|
|
||||||
else
|
|
||||||
LDLIBS += -lssh2
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Platform compiler flags
|
# Platform compiler flags
|
||||||
ifeq ($(OS),Darwin)
|
ifeq ($(OS),Darwin)
|
||||||
@ -52,7 +48,7 @@ CXX += -I include -I.
|
|||||||
|
|
||||||
all: build json_wrapper $(TYRO_LIB) $(PROGRAM)
|
all: build json_wrapper $(TYRO_LIB) $(PROGRAM)
|
||||||
|
|
||||||
dev: CXXFLAGS= $(DEV_CXXFLAGS)
|
dev: CXXFLAGS = $(DEV_CXXFLAGS)
|
||||||
dev: all
|
dev: all
|
||||||
|
|
||||||
json_wrapper: json_wrapper_build
|
json_wrapper: json_wrapper_build
|
||||||
@ -121,7 +117,7 @@ Tyro.app: all
|
|||||||
cp resources/platform/osx/tyro.icns build/Tyro.app/Contents/Resources/
|
cp resources/platform/osx/tyro.icns build/Tyro.app/Contents/Resources/
|
||||||
|
|
||||||
$(TESTS): $(TYRO_LIB)
|
$(TESTS): $(TYRO_LIB)
|
||||||
$(foreach var, $(TEST_SRC), $(CXX) $(CXXFLAGS) $(var) $(TYRO_LIB) $(LDLIBS) -o $(patsubst %.cpp,%, $(var));)
|
$(foreach var, $(TEST_SRC), $(CXX) $(CXXFLAGS) $(var) $(TYRO_LIB) $(WX_LDLIBS) $(LDLIBS) -o $(patsubst %.cpp,%, $(var));)
|
||||||
|
|
||||||
.PHONY: tests
|
.PHONY: tests
|
||||||
tests: $(TESTS)
|
tests: $(TESTS)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#ifndef SFTP_H
|
#ifndef SFTP_H
|
||||||
#define SFTP_H
|
#define SFTP_H
|
||||||
|
|
||||||
#include "../common.h"
|
#include "../../common.h"
|
||||||
|
|
||||||
// Socket includes
|
// Socket includes
|
||||||
#include <cstring>
|
#include <cstring>
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef TYRO_CONFIG_H
|
#ifndef TYRO_CONFIG_H
|
||||||
#define TYRO_CONFIG_H
|
#define TYRO_CONFIG_H
|
||||||
|
|
||||||
#include "../common.h"
|
#include "../../common.h"
|
||||||
|
|
||||||
class TyroConfig {
|
class TyroConfig {
|
||||||
public:
|
public:
|
102
src/settings/LangConfig.cpp
Normal file
102
src/settings/LangConfig.cpp
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/**
|
||||||
|
* Lexer configuration object
|
||||||
|
*
|
||||||
|
* @extends TyroConfig
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "LangConfig.h"
|
||||||
|
#include <config/languages_json.h>
|
||||||
|
|
||||||
|
LangConfig::LangConfig()
|
||||||
|
{
|
||||||
|
this->LoadJson(languages_json);
|
||||||
|
this->lang = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
LangConfig::~LangConfig() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine the format of the current file by
|
||||||
|
* matching its extension against the patterns
|
||||||
|
* in the configuration files
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
string LangConfig::GetLangByFile(wxFileName &fileName)
|
||||||
|
{
|
||||||
|
JsonValue langList = this->GetRoot();
|
||||||
|
JsonValue::iterator it;
|
||||||
|
|
||||||
|
wxString curr_file = fileName.GetFullName();
|
||||||
|
|
||||||
|
// Loop through each language to find a matching file pattern
|
||||||
|
for (it = langList.begin(); it != langList.end(); ++it)
|
||||||
|
{
|
||||||
|
string lang = it.key().asString();
|
||||||
|
|
||||||
|
// Parse the file pattern
|
||||||
|
wxString file_pattern((*it)["file_pattern"].asString());
|
||||||
|
|
||||||
|
file_pattern.Lower();
|
||||||
|
|
||||||
|
while ( ! file_pattern.empty())
|
||||||
|
{
|
||||||
|
wxString cur = file_pattern.BeforeFirst(';');
|
||||||
|
if (
|
||||||
|
(cur == curr_file) ||
|
||||||
|
(cur == (curr_file.BeforeLast('.') + ".*")) ||
|
||||||
|
(cur == ("*." + curr_file.AfterLast('.')))
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this->SetLang(lang);
|
||||||
|
return this->lang;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Go to the next pattern for this language
|
||||||
|
file_pattern = file_pattern.AfterFirst(';');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->SetLang(lang);
|
||||||
|
return this->lang;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the list of keywords for the selected language
|
||||||
|
*
|
||||||
|
* @param string lang
|
||||||
|
* @return JsonValue
|
||||||
|
*/
|
||||||
|
JsonValue LangConfig::GetKeywordList(string lang)
|
||||||
|
{
|
||||||
|
if (lang == "none") lang = this->lang;
|
||||||
|
|
||||||
|
return this->GetRoot()
|
||||||
|
.get(lang, JsonValue())
|
||||||
|
.get("keywords", JsonValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the lexer theme map for the current language
|
||||||
|
*
|
||||||
|
* @param string lang
|
||||||
|
* @return JsonValue
|
||||||
|
*/
|
||||||
|
JsonValue LangConfig::GetLexerMap(string lang)
|
||||||
|
{
|
||||||
|
if (lang == "none") lang = this->lang;
|
||||||
|
|
||||||
|
return this->GetRoot()
|
||||||
|
.get(lang, JsonValue())
|
||||||
|
.get("lexer_map", JsonValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
void LangConfig::SetLang(string lang)
|
||||||
|
{
|
||||||
|
this->lang = lang;
|
||||||
|
}
|
||||||
|
|
||||||
|
string LangConfig::GetLang()
|
||||||
|
{
|
||||||
|
return this->lang;
|
||||||
|
}
|
20
src/settings/LangConfig.h
Normal file
20
src/settings/LangConfig.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef TYRO_LANG_CONFIG_H
|
||||||
|
#define TYRO_LANG_CONFIG_H
|
||||||
|
|
||||||
|
#include "../wx_common.h"
|
||||||
|
#include "../base/settings/Config.h"
|
||||||
|
|
||||||
|
class LangConfig : TyroConfig {
|
||||||
|
public:
|
||||||
|
LangConfig();
|
||||||
|
~LangConfig();
|
||||||
|
void SetLang(string lang);
|
||||||
|
string GetLang();
|
||||||
|
string GetLangByFile(wxFileName &fileName);
|
||||||
|
JsonValue GetKeywordList(string lang="none");
|
||||||
|
JsonValue GetLexerMap(string lang="none");
|
||||||
|
private:
|
||||||
|
string lang;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -4,9 +4,7 @@ EditPane::EditPane(
|
|||||||
wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size
|
wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size
|
||||||
) : wxStyledTextCtrl (parent, id, pos, size, wxBORDER_NONE)
|
) : wxStyledTextCtrl (parent, id, pos, size, wxBORDER_NONE)
|
||||||
{
|
{
|
||||||
#include <config/languages_json.h>
|
lang_config = new LangConfig();
|
||||||
lang_config = new TyroConfig();
|
|
||||||
lang_config->LoadJson(languages_json);
|
|
||||||
|
|
||||||
#include <config/themes_json.h>
|
#include <config/themes_json.h>
|
||||||
theme_config = new TyroConfig();
|
theme_config = new TyroConfig();
|
||||||
@ -59,7 +57,7 @@ void EditPane::Highlight(wxString filePath)
|
|||||||
this->fileName.Assign(filePath);
|
this->fileName.Assign(filePath);
|
||||||
|
|
||||||
// Get the configuration name for the selected language
|
// Get the configuration name for the selected language
|
||||||
string lang = this->GetLangByFile();
|
string lang = lang_config->GetLangByFile(this->fileName);
|
||||||
|
|
||||||
this->StyleClearAll();
|
this->StyleClearAll();
|
||||||
|
|
||||||
@ -124,11 +122,10 @@ void EditPane::ApplyTheme(string lang, string theme)
|
|||||||
{
|
{
|
||||||
this->SetTheme(theme);
|
this->SetTheme(theme);
|
||||||
|
|
||||||
JsonValue lang_list = lang_config->GetRoot();
|
// Get the keywords and mapping for the selected language
|
||||||
JsonValue lexer_map = lang_list.get(lang, JsonValue()).get("lexer_map", JsonValue());
|
JsonValue lexer_map = lang_config->GetLexerMap(lang);
|
||||||
|
JsonValue keywords_array = lang_config->GetKeywordList(lang);
|
||||||
|
|
||||||
// Get the list of keywords for the current language
|
|
||||||
JsonValue keywords_array = this->GetKeywordList(lang);
|
|
||||||
if (keywords_array.isArray())
|
if (keywords_array.isArray())
|
||||||
{
|
{
|
||||||
for(unsigned int i = 0; i < keywords_array.size(); i++)
|
for(unsigned int i = 0; i < keywords_array.size(); i++)
|
||||||
@ -148,10 +145,8 @@ void EditPane::ApplyTheme(string lang, string theme)
|
|||||||
wxLogDebug(output.str().c_str());
|
wxLogDebug(output.str().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
int offset_count = 0;
|
|
||||||
|
|
||||||
// Do the appropriate mappings to load the selected theme
|
// Do the appropriate mappings to load the selected theme
|
||||||
this->_ApplyTheme(lexer_map, offset_count);
|
this->_ApplyTheme(lexer_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -177,50 +172,6 @@ bool EditPane::Load(wxString filePath)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine the format of the current file by
|
|
||||||
* matching its extension against the patterns
|
|
||||||
* in the configuration files
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
string EditPane::GetLangByFile()
|
|
||||||
{
|
|
||||||
JsonValue langList = lang_config->GetRoot();
|
|
||||||
JsonValue::iterator it;
|
|
||||||
|
|
||||||
wxString curr_file = this->fileName.GetFullName();
|
|
||||||
|
|
||||||
// Loop through each language to find a matching file pattern
|
|
||||||
for (it = langList.begin(); it != langList.end(); ++it)
|
|
||||||
{
|
|
||||||
string lang = it.key().asString();
|
|
||||||
|
|
||||||
// Parse the file pattern
|
|
||||||
wxString file_pattern((*it)["file_pattern"].asString());
|
|
||||||
|
|
||||||
file_pattern.Lower();
|
|
||||||
|
|
||||||
while ( ! file_pattern.empty())
|
|
||||||
{
|
|
||||||
wxString cur = file_pattern.BeforeFirst(';');
|
|
||||||
if (
|
|
||||||
(cur == curr_file) ||
|
|
||||||
(cur == (curr_file.BeforeLast('.') + ".*")) ||
|
|
||||||
(cur == ("*." + curr_file.AfterLast('.')))
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return lang;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Go to the next pattern for this language
|
|
||||||
file_pattern = file_pattern.AfterFirst(';');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
bool EditPane::SaveFile()
|
bool EditPane::SaveFile()
|
||||||
{
|
{
|
||||||
wxString fname;
|
wxString fname;
|
||||||
@ -364,19 +315,6 @@ void EditPane::OnCharAdded(wxStyledTextEvent& event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the list of keywords for the selected language
|
|
||||||
*
|
|
||||||
* @param string lang
|
|
||||||
* @return JsonValue
|
|
||||||
*/
|
|
||||||
JsonValue EditPane::GetKeywordList(string lang)
|
|
||||||
{
|
|
||||||
return lang_config->GetRoot()
|
|
||||||
.get(lang, JsonValue())
|
|
||||||
.get("keywords", JsonValue());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve a setting from the current theme
|
* Retrieve a setting from the current theme
|
||||||
*
|
*
|
||||||
@ -424,7 +362,7 @@ wxColor EditPane::GetThemeColor(string type, string key)
|
|||||||
* @param int addtoi - Offset for some languages
|
* @param int addtoi - Offset for some languages
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
void EditPane::_ApplyTheme(JsonValue lexer_map, int addtoi)
|
void EditPane::_ApplyTheme(JsonValue &lexer_map)
|
||||||
{
|
{
|
||||||
// Font setup
|
// Font setup
|
||||||
#ifdef __WXMAC__
|
#ifdef __WXMAC__
|
||||||
@ -467,13 +405,11 @@ void EditPane::_ApplyTheme(JsonValue lexer_map, int addtoi)
|
|||||||
this->StyleSetBackground (wxSTC_STYLE_LINENUMBER, line_number_background);
|
this->StyleSetBackground (wxSTC_STYLE_LINENUMBER, line_number_background);
|
||||||
this->SetMarginType (MARGIN_LINE_NUMBERS, wxSTC_MARGIN_NUMBER);
|
this->SetMarginType (MARGIN_LINE_NUMBERS, wxSTC_MARGIN_NUMBER);
|
||||||
|
|
||||||
int min = 0 + addtoi;
|
int max = lexer_map.size();
|
||||||
int max = lexer_map.size() + addtoi;
|
|
||||||
|
|
||||||
for (int i = min; i < max; i++)
|
for (int i = 0; i < max; i++)
|
||||||
{
|
{
|
||||||
int n = i - addtoi;
|
string key = lexer_map[i].asString();
|
||||||
string key = lexer_map[n].asString();
|
|
||||||
|
|
||||||
//wxLogDebug("Token type: %s", key);
|
//wxLogDebug("Token type: %s", key);
|
||||||
//wxLogDebug("Lexer constant: %i", i);
|
//wxLogDebug("Lexer constant: %i", i);
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
#define TYROEDIT_PANE_H
|
#define TYROEDIT_PANE_H
|
||||||
|
|
||||||
#include "../wx_common.h"
|
#include "../wx_common.h"
|
||||||
#include "../settings/Config.h"
|
#include "../base/settings/Config.h"
|
||||||
|
#include "../settings/LangConfig.h"
|
||||||
|
|
||||||
#include <wx/stc/stc.h>
|
#include <wx/stc/stc.h>
|
||||||
|
|
||||||
@ -17,7 +18,6 @@ public:
|
|||||||
);
|
);
|
||||||
~EditPane();
|
~EditPane();
|
||||||
wxFileName fileName;
|
wxFileName fileName;
|
||||||
string GetLangByFile();
|
|
||||||
bool Load(wxString filePath);
|
bool Load(wxString filePath);
|
||||||
void Highlight(wxString filePath);
|
void Highlight(wxString filePath);
|
||||||
bool SaveFile();
|
bool SaveFile();
|
||||||
@ -26,10 +26,10 @@ public:
|
|||||||
private:
|
private:
|
||||||
StringConstMap lexerMap;
|
StringConstMap lexerMap;
|
||||||
StringConstMap::iterator lexerMapIt;
|
StringConstMap::iterator lexerMapIt;
|
||||||
TyroConfig *lang_config;
|
LangConfig *lang_config;
|
||||||
TyroConfig *theme_config;
|
TyroConfig *theme_config;
|
||||||
JsonValue current_theme;
|
JsonValue current_theme;
|
||||||
enum
|
enum myMargins
|
||||||
{
|
{
|
||||||
MARGIN_FOLD,
|
MARGIN_FOLD,
|
||||||
MARGIN_SYMBOL,
|
MARGIN_SYMBOL,
|
||||||
@ -43,8 +43,7 @@ private:
|
|||||||
void SetTheme(string theme_name);
|
void SetTheme(string theme_name);
|
||||||
JsonValue GetThemeValue(string type, string key);
|
JsonValue GetThemeValue(string type, string key);
|
||||||
wxColor GetThemeColor(string type, string key);
|
wxColor GetThemeColor(string type, string key);
|
||||||
JsonValue GetKeywordList(string lang);
|
void _ApplyTheme(JsonValue &lexer_map);
|
||||||
void _ApplyTheme(JsonValue lexer_map, int addtoi=0);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TYRODOC_FRAME_H
|
#endif // TYRODOC_FRAME_H
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define CATCH_CONFIG_MAIN
|
#define CATCH_CONFIG_MAIN
|
||||||
#include "catch.hpp"
|
#include "catch.hpp"
|
||||||
#include "../src/network/SFTP.h"
|
#include "../src/base/network/SFTP.h"
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE("ssh connections work", "[SFTP]") {
|
TEST_CASE("ssh connections work", "[SFTP]") {
|
||||||
|
Loading…
Reference in New Issue
Block a user