Move mru,opt objects out of the main singleton and into a global config:: namespace. With exception of the log object these are initialised during startup to ensure they are initalised after the log object.

Originally committed to SVN as r4538.
This commit is contained in:
Amar Takhar 2010-06-18 02:23:27 +00:00
parent 75bd20a6dd
commit 8ee9737b6f
10 changed files with 67 additions and 67 deletions

View File

@ -729,7 +729,7 @@ AssStyle *AssFile::GetStyle(wxString name) {
} }
void AssFile::AddToRecent(wxString file) { void AssFile::AddToRecent(wxString file) {
AegisubApp::Get()->mru->Add("Subtitle", STD_STR(file)); config::mru->Add("Subtitle", STD_STR(file));
} }
wxString AssFile::GetWildcardList(int mode) { wxString AssFile::GetWildcardList(int mode) {

View File

@ -912,7 +912,7 @@ void AudioDisplay::SetFile(wxString file) {
// Add to recent // Add to recent
if (!is_dummy) { if (!is_dummy) {
AegisubApp::Get()->mru->Add("Audio", STD_STR(file)); config::mru->Add("Audio", STD_STR(file));
wxFileName fn(file); wxFileName fn(file);
StandardPaths::SetPathValue(_T("?audio"),fn.GetPath()); StandardPaths::SetPathValue(_T("?audio"),fn.GetPath());
} }

View File

@ -4,7 +4,7 @@
wxArrayString lagi_MRU_wxAS(const wxString &list) { wxArrayString lagi_MRU_wxAS(const wxString &list) {
wxArrayString work; wxArrayString work;
const agi::MRUManager::MRUListMap *map_list = AegisubApp::Get()->mru->Get(STD_STR(list)); const agi::MRUManager::MRUListMap *map_list = config::mru->Get(STD_STR(list));
for (agi::MRUManager::MRUListMap::const_iterator i_lst = map_list->begin(); i_lst != map_list->end(); ++i_lst) { for (agi::MRUManager::MRUListMap::const_iterator i_lst = map_list->begin(); i_lst != map_list->end(); ++i_lst) {
work.Add(wxString(i_lst->second.c_str(), wxConvUTF8)); work.Add(wxString(i_lst->second.c_str(), wxConvUTF8));

View File

@ -234,7 +234,7 @@ void DialogSearchReplace::FindReplace(int mode) {
if (hasReplace) { if (hasReplace) {
wxString ReplaceWith = ReplaceEdit->GetValue(); wxString ReplaceWith = ReplaceEdit->GetValue();
Search.ReplaceWith = ReplaceWith; Search.ReplaceWith = ReplaceWith;
AegisubApp::Get()->mru->Add("Replace", STD_STR(ReplaceWith)); config::mru->Add("Replace", STD_STR(ReplaceWith));
} }
} }
@ -244,11 +244,11 @@ void DialogSearchReplace::FindReplace(int mode) {
Search.ReplaceWith = ReplaceWith; Search.ReplaceWith = ReplaceWith;
if (mode == 1) Search.ReplaceNext(); if (mode == 1) Search.ReplaceNext();
else Search.ReplaceAll(); else Search.ReplaceAll();
AegisubApp::Get()->mru->Add("Replace", STD_STR(ReplaceWith)); config::mru->Add("Replace", STD_STR(ReplaceWith));
} }
// Add to history // Add to history
AegisubApp::Get()->mru->Add("Find", STD_STR(LookFor)); config::mru->Add("Find", STD_STR(LookFor));
UpdateDropDowns(); UpdateDropDowns();
} }

View File

@ -520,28 +520,28 @@ int FrameMain::AddMacroMenuItems(wxMenu *menu, const std::vector<Automation4::Fe
/// @param event /// @param event
void FrameMain::OnOpenRecentSubs(wxCommandEvent &event) { void FrameMain::OnOpenRecentSubs(wxCommandEvent &event) {
int number = event.GetId()-Menu_File_Recent; int number = event.GetId()-Menu_File_Recent;
LoadSubtitles(lagi_wxString(AegisubApp::Get()->mru->GetEntry("Subtitle", number))); LoadSubtitles(lagi_wxString(config::mru->GetEntry("Subtitle", number)));
} }
/// @brief Open recent video menu entry /// @brief Open recent video menu entry
/// @param event /// @param event
void FrameMain::OnOpenRecentVideo(wxCommandEvent &event) { void FrameMain::OnOpenRecentVideo(wxCommandEvent &event) {
int number = event.GetId()-Menu_Video_Recent; int number = event.GetId()-Menu_Video_Recent;
LoadVideo(lagi_wxString(AegisubApp::Get()->mru->GetEntry("Video", number))); LoadVideo(lagi_wxString(config::mru->GetEntry("Video", number)));
} }
/// @brief Open recent timecodes entry /// @brief Open recent timecodes entry
/// @param event /// @param event
void FrameMain::OnOpenRecentTimecodes(wxCommandEvent &event) { void FrameMain::OnOpenRecentTimecodes(wxCommandEvent &event) {
int number = event.GetId()-Menu_Timecodes_Recent; int number = event.GetId()-Menu_Timecodes_Recent;
LoadVFR(lagi_wxString(AegisubApp::Get()->mru->GetEntry("Timecodes", number))); LoadVFR(lagi_wxString(config::mru->GetEntry("Timecodes", number)));
} }
/// @brief Open recent Keyframes entry /// @brief Open recent Keyframes entry
/// @param event /// @param event
void FrameMain::OnOpenRecentKeyframes(wxCommandEvent &event) { void FrameMain::OnOpenRecentKeyframes(wxCommandEvent &event) {
int number = event.GetId()-Menu_Keyframes_Recent; int number = event.GetId()-Menu_Keyframes_Recent;
KeyFrameFile::Load(lagi_wxString(AegisubApp::Get()->mru->GetEntry("Keyframes", number))); KeyFrameFile::Load(lagi_wxString(config::mru->GetEntry("Keyframes", number)));
videoBox->videoSlider->Refresh(); videoBox->videoSlider->Refresh();
audioBox->audioDisplay->Update(); audioBox->audioDisplay->Update();
Refresh(); Refresh();
@ -551,7 +551,7 @@ void FrameMain::OnOpenRecentKeyframes(wxCommandEvent &event) {
/// @param event /// @param event
void FrameMain::OnOpenRecentAudio(wxCommandEvent &event) { void FrameMain::OnOpenRecentAudio(wxCommandEvent &event) {
int number = event.GetId()-Menu_Audio_Recent; int number = event.GetId()-Menu_Audio_Recent;
LoadAudio(lagi_wxString(AegisubApp::Get()->mru->GetEntry("Audio", number))); LoadAudio(lagi_wxString(config::mru->GetEntry("Audio", number)));
} }
/// @brief Open new Window /// @brief Open new Window

View File

@ -76,7 +76,7 @@ void KeyFrameFile::Load(wxString filename) {
VideoContext::Get()->SetKeyFramesName(filename); VideoContext::Get()->SetKeyFramesName(filename);
// Add to recent // Add to recent
AegisubApp::Get()->mru->Add("Keyframes", STD_STR(filename)); config::mru->Add("Keyframes", STD_STR(filename));
} }
// Fail // Fail
catch (const wchar_t *error) { catch (const wchar_t *error) {
@ -108,7 +108,7 @@ void KeyFrameFile::Save(wxString filename) {
} }
// Add to recent // Add to recent
AegisubApp::Get()->mru->Add("Keyframes", STD_STR(filename)); config::mru->Add("Keyframes", STD_STR(filename));
} }

View File

@ -77,6 +77,12 @@
#include <libaegisub/access.h> #include <libaegisub/access.h>
#include <libaegisub/log.h> #include <libaegisub/log.h>
namespace config {
agi::Options *opt;
agi::MRUManager *mru;
}
/////////////////// ///////////////////
// wxWidgets macro // wxWidgets macro
IMPLEMENT_APP(AegisubApp) IMPLEMENT_APP(AegisubApp)
@ -137,8 +143,42 @@ void SetThreadName(DWORD dwThreadID, LPCSTR szThreadName) {
/// @return /// @return
/// ///
bool AegisubApp::OnInit() { bool AegisubApp::OnInit() {
#ifdef _DEBUG
agi::log::EmitSTDOUT *emit_stdout = new agi::log::EmitSTDOUT(); agi::log::EmitSTDOUT *emit_stdout = new agi::log::EmitSTDOUT();
emit_stdout->Enable(); emit_stdout->Enable();
#endif
const std::string conf_mru(StandardPaths::DecodePath(_T("?user/mru.json")));
config::mru = new agi::MRUManager(conf_mru, GET_DEFAULT_CONFIG(default_mru));
// Set config file
StartupLog(_T("Load configuration"));
try {
const std::string conf_user(StandardPaths::DecodePath(_T("?user/config.json")));
config::opt = new agi::Options(conf_user, GET_DEFAULT_CONFIG(default_config));
} catch (agi::Exception& e) {
wxPrintf("Caught agi::Exception: %s -> %s\n", e.GetName(), e.GetMessage());
}
#ifdef __WXMSW__
// Try loading configuration from the install dir if one exists there
try {
const std::string conf_local(StandardPaths::DecodePath(_T("?data/config.json")));
std::ifstream* localConfig = agi::io::Open(conf_local);
opt->ConfigNext(*localConfig);
delete localConfig;
if (OPT_GET("App/Local Config")->GetBool()) {
// Local config, make ?user mean ?data so all user settings are placed in install dir
StandardPaths::SetPathValue(_T("?user"), StandardPaths::DecodePath(_T("?data")));
}
} catch (agi::acs::AcsError const&) {
// File doesn't exist or we can't read it
// Might be worth displaying an error in the second case
}
#endif
config::opt->ConfigUser();
#ifdef __VISUALC__ #ifdef __VISUALC__
SetThreadName((DWORD) -1,"AegiMain"); SetThreadName((DWORD) -1,"AegiMain");
@ -154,49 +194,6 @@ emit_stdout->Enable();
SetAppName(_T("aegisub")); SetAppName(_T("aegisub"));
#endif #endif
const std::string conf_mru(StandardPaths::DecodePath(_T("?user/mru.json")));
mru = new agi::MRUManager(conf_mru, GET_DEFAULT_CONFIG(default_mru));
// Set config file
StartupLog(_T("Load configuration"));
try {
const std::string conf_user(StandardPaths::DecodePath(_T("?user/config.json")));
opt = new agi::Options(conf_user, GET_DEFAULT_CONFIG(default_config));
#ifdef __WXMSW__
// Try loading configuration from the install dir if one exists there
try {
const std::string conf_local(StandardPaths::DecodePath(_T("?data/config.json")));
std::ifstream* localConfig = agi::io::Open(conf_local);
opt->ConfigNext(*localConfig);
delete localConfig;
if (OPT_GET("App/Local Config")->GetBool()) {
// Local config, make ?user mean ?data so all user settings are placed in install dir
StandardPaths::SetPathValue(_T("?user"), StandardPaths::DecodePath(_T("?data")));
}
}
catch (agi::acs::AcsError const&) {
// File doesn't exist or we can't read it
// Might be worth displaying an error in the second case
}
#endif
opt->ConfigUser();
/*
#ifdef _DEBUG
const std::string conf_default("default_config.json");
std::istream *stream = agi::io::Open(conf_default);
opt->ConfigDefault(*stream);
delete stream;
#else
opt->ConfigDefault(GET_DEFAULT_CONFIG(default_config));
#endif
*/
// opt->ConfigDefault(GET_DEFAULT_CONFIG(default_config));
} catch (agi::Exception& e) {
wxPrintf("Caught agi::Exception: %s -> %s\n", e.GetName(), e.GetMessage());
}
// Initialize randomizer // Initialize randomizer
StartupLog(_T("Initialize random generator")); StartupLog(_T("Initialize random generator"));
@ -286,8 +283,8 @@ int AegisubApp::OnExit() {
SubtitleFormat::DestroyFormats(); SubtitleFormat::DestroyFormats();
VideoContext::Clear(); VideoContext::Clear();
delete plugins; delete plugins;
delete opt; delete config::opt;
delete mru; delete config::mru;
#ifdef WITH_AUTOMATION #ifdef WITH_AUTOMATION
delete global_scripts; delete global_scripts;
#endif #endif

View File

@ -52,14 +52,20 @@
class FrameMain; class FrameMain;
class PluginManager; class PluginManager;
/// For holding all configuration-related objects and values.
namespace config {
extern agi::Options *opt; ///< Options
extern agi::MRUManager *mru; ///< Most Recently Used
}
/// DOCME /// DOCME
namespace Automation4 { class AutoloadScriptManager; } namespace Automation4 { class AutoloadScriptManager; }
/// Macro to get OptionValue object. /// Macro to get OptionValue object.
#define OPT_GET(x) AegisubApp::Get()->opt->Get(x) #define OPT_GET(x) config::opt->Get(x)
/// Macro to set OptionValue object. /// Macro to set OptionValue object.
#define OPT_SET(x) AegisubApp::Get()->opt->Get(x) #define OPT_SET(x) config::opt->Get(x)
/// DOCME /// DOCME
/// @class AegisubApp /// @class AegisubApp
@ -80,9 +86,6 @@ public:
/// DOCME /// DOCME
AegisubLocale locale; AegisubLocale locale;
agi::MRUManager *mru;
agi::Options *opt;
/// DOCME /// DOCME
FrameMain *frame; FrameMain *frame;
#ifdef WITH_AUTOMATION #ifdef WITH_AUTOMATION

View File

@ -238,7 +238,7 @@ void FrameRate::Load(wxString filename) {
FrameRateType = VFR; FrameRateType = VFR;
// Add to recent // Add to recent
AegisubApp::Get()->mru->Add("Timecodes", STD_STR(filename)); config::mru->Add("Timecodes", STD_STR(filename));
} }

View File

@ -272,7 +272,7 @@ void VideoContext::SetVideo(const wxString &filename) {
// Set filename // Set filename
videoName = filename; videoName = filename;
AegisubApp::Get()->mru->Add("Video", STD_STR(filename)); config::mru->Add("Video", STD_STR(filename));
wxFileName fn(filename); wxFileName fn(filename);
StandardPaths::SetPathValue(_T("?video"),fn.GetPath()); StandardPaths::SetPathValue(_T("?video"),fn.GetPath());