diff --git a/Resources/UI/S7/s7app.cpp b/Resources/UI/S7/s7app.cpp index 4a7ba6b..15bbfb0 100644 --- a/Resources/UI/S7/s7app.cpp +++ b/Resources/UI/S7/s7app.cpp @@ -26,6 +26,7 @@ #include #include "s7app.h" #include +#include ////@begin XPM images @@ -40,6 +41,7 @@ IMPLEMENT_APP( S7App ) ////@end implement app +using namespace std; /* * S7App type definition @@ -122,15 +124,16 @@ bool S7App::OnInit() translations->AddCatalog(_APPNAME_); } + bool res = ParseCmdLine(); + if ( !res ) + return res; + + SetConfig(); XS7 * appWindow = new XS7(nullptr); SetTopWindow(appWindow); appWindow->Show ( false ); - bool res = appWindow->ParseCmdLine(); - if ( res ) - { - appWindow->Setup(); - appWindow->Show(); - } + appWindow->Setup(m_config.get()); + appWindow->Show(); return res; } @@ -147,3 +150,42 @@ int S7App::OnExit() ////@end S7App cleanup } +bool S7App::ParseCmdLine() +{ + wxCmdLineParser p; + p.SetCmdLine ( wxApp::GetInstance()->argc, wxApp::GetInstance()->argv ); + p.SetSwitchChars ( _T ( "-" ) ); + p.AddOption ( _T ( "c" ), wxEmptyString, _ ( "Config file tag." ) ); + p.AddSwitch ( _T ( "v" ), wxEmptyString, _ ( "Show version and quit." ) ); + p.AddSwitch ( _T ( "h" ), wxEmptyString, _ ( "Show help and quit." ) ); + p.Parse ( false ); + if ( p.Found ( _T ( "c" ) ) ) + { + p.Found ( _T ( "c" ), &m_configTag ); + return true; + } + if ( p.Found ( _T ( "h" ) ) ) + { + p.Usage(); + return false; //Exit code is 255, not clean. + } + if ( p.Found ( _T ( "v" ) ) ) + { + cout << ( _APPNAME_ + _ ( " - version " ) + to_string(_APPVERSION_) ) << endl; + return false; + } + return true; +} + +void S7App::SetConfig() +{ + const wxString configDir = wxFileConfig::GetLocalFile ( _APPNAME_, wxCONFIG_USE_SUBDIR ).GetPath(); + if ( !wxFileName::Exists ( configDir ) ) + wxFileName::Mkdir ( configDir ); + + const wxString configBaseName = m_configTag.IsEmpty() + ? _APPNAME_ + : _APPNAME_ + wxString("-") + m_configTag; + m_config = std::make_unique(_APPNAME_, _T("SET"), configBaseName, + wxEmptyString, wxCONFIG_USE_SUBDIR); +} diff --git a/Resources/UI/S7/s7app.h b/Resources/UI/S7/s7app.h index 1fa54ab..4baf3c5 100644 --- a/Resources/UI/S7/s7app.h +++ b/Resources/UI/S7/s7app.h @@ -21,6 +21,8 @@ #include "wx/image.h" ////@end includes +#include "wx/config.h" + /*! * Forward declarations */ @@ -66,6 +68,15 @@ public: ////@end S7App member variables private: wxLocale m_locale; + std::unique_ptr m_config = nullptr; + /* + * An optional tag for wxConfig files. This allows using different profiles + * by specifying the -c command line option. + */ + wxString m_configTag; + + bool ParseCmdLine(); + void SetConfig(); }; /*! diff --git a/XS7.cpp b/XS7.cpp index 8e18ed9..57d0eca 100644 --- a/XS7.cpp +++ b/XS7.cpp @@ -23,48 +23,13 @@ XS7::XS7(wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint : S7(parent, id, caption, pos, size, style) {} -bool XS7::ParseCmdLine() +void XS7::Setup(wxConfig * config) { - wxCmdLineParser p; - p.SetCmdLine ( wxApp::GetInstance()->argc, wxApp::GetInstance()->argv ); - p.SetSwitchChars ( _T ( "-" ) ); - p.AddOption ( _T ( "c" ), wxEmptyString, _ ( "Config file tag." ) ); - p.AddSwitch ( _T ( "v" ), wxEmptyString, _ ( "Show version and quit." ) ); - p.AddSwitch ( _T ( "h" ), wxEmptyString, _ ( "Show help and quit." ) ); - p.Parse ( false ); - if ( p.Found ( _T ( "c" ) ) ) - { - p.Found ( _T ( "c" ), &m_configTag ); - return true; - } - if ( p.Found ( _T ( "h" ) ) ) - { - p.Usage(); - return false; //Exit code is 255, not clean. - } - if ( p.Found ( _T ( "v" ) ) ) - { - cout << ( _APPNAME_ + _ ( " - version " ) + to_string(_APPVERSION_) ) << endl; - return false; - } - return true; -} - -void XS7::Setup() -{ - const wxString configDir = wxFileConfig::GetLocalFile ( _APPNAME_, wxCONFIG_USE_SUBDIR ).GetPath(); - if ( !wxFileName::Exists ( configDir ) ) - wxFileName::Mkdir ( configDir ); - - const wxString configBaseName = m_configTag.IsEmpty() - ? _APPNAME_ - : _APPNAME_ + wxString("-") + m_configTag; - m_config = std::make_unique(_APPNAME_, _T("SET"), configBaseName, - wxEmptyString, wxCONFIG_USE_SUBDIR); + m_config = config; TimeredStatusBar * sb = new TimeredStatusBar(this); SetStatusBar(sb); - m_insaneWidget = new XInsaneWidget(panMain, sb, m_config.get()); + m_insaneWidget = new XInsaneWidget(panMain, sb, m_config); m_insaneWidget->Setup(); szMain->Insert(2, m_insaneWidget, 1, wxGROW | wxALL); @@ -76,7 +41,7 @@ void XS7::Setup() txtBasename->SetValidator(*MiscTools::MakeFileNameValidator(false)); txtBasename->Bind(wxEVT_LEFT_UP, &XS7::OnAbout, this); - MiscTools::RestoreSizePos(m_config.get(), this, wxString("/" + wxString(_APPNAME_))); + MiscTools::RestoreSizePos(m_config, this, wxString("/" + wxString(_APPNAME_))); S7::SetTitle(wxString(_APPNAME_) + " - version " + to_string(_APPVERSION_)); @@ -89,7 +54,7 @@ void XS7::Setup() XS7::~XS7() { if (m_config) - MiscTools::SaveSizePos(m_config.get(), this, wxString("/") + _APPNAME_); + MiscTools::SaveSizePos(m_config, this, wxString("/") + _APPNAME_); } void XS7::OnDpkRepositoryChange ( wxFileDirPickerEvent& evt ) diff --git a/XS7.h b/XS7.h index a63c978..190871e 100644 --- a/XS7.h +++ b/XS7.h @@ -22,19 +22,13 @@ public: XS7(wxWindow* parent, wxWindowID id = SYMBOL_S7_IDNAME, const wxString& caption = SYMBOL_S7_TITLE, const wxPoint& pos = SYMBOL_S7_POSITION, const wxSize& size = SYMBOL_S7_SIZE, long style = SYMBOL_S7_STYLE ); virtual ~XS7(); - bool ParseCmdLine(); - void Setup(); + + void Setup(wxConfig * config); private: - std::unique_ptr m_config = nullptr; + wxConfig * m_config = nullptr; XInsaneWidget * m_insaneWidget = nullptr; - /* - * An optional tag for wxConfig files. This allows using different profiles - * by specifying the -c command line option. - */ - wxString m_configTag; - void OnDpkRepositoryChange ( wxFileDirPickerEvent& evt ); void OnDpkDoubleClick ( wxMouseEvent& evt ); void OnAppKeyPressed(wxKeyEvent& evt);