Add option to disable splash on startup and some cleanup.

This commit is contained in:
apoorv569 2022-02-10 20:43:31 +05:30
parent dde610a78f
commit 1ccb616b93
9 changed files with 132 additions and 40 deletions

View File

@ -27,7 +27,8 @@
#include <wx/filefn.h>
#include <wx/fswatcher.h>
#include <wx/gdicmn.h>
#include <wx/splash.h>
#include <wx/image.h>
#include <wx/imagpng.h>
wxIMPLEMENT_APP(cApp);
@ -47,25 +48,34 @@ bool cApp::OnInit()
if (!wxApp::OnInit())
return false;
SampleHive::cSerializer serializer;
wxLog::AddTraceMask("EventSource");
wxLog::AddTraceMask(wxTRACE_FSWATCHER);
m_Frame = new cMainFrame();
// Add image handler for PNG
wxImage::AddHandler(new wxPNGHandler);
m_pFrame = new cMainFrame();
wxBitmap bitmap;
wxSplashScreen* splash;
if (bitmap.LoadFile(SPLASH_LOGO, wxBITMAP_TYPE_PNG))
{
splash = new wxSplashScreen(bitmap,
wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT,
2000, NULL, -1, wxDefaultPosition, wxDefaultSize,
wxBORDER_SIMPLE | wxSTAY_ON_TOP);
m_pSplash = new wxSplashScreen(bitmap,
wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT,
10000, NULL, -1, wxDefaultPosition, wxDefaultSize,
wxBORDER_SIMPLE | wxSTAY_ON_TOP);
}
if (!serializer.DeserializeShowSplash())
m_pSplash->Hide();
else
m_pSplash->Show();
wxYield();
m_Frame->Show(true);
m_pFrame->Show(true);
return true;
}
@ -97,31 +107,31 @@ bool cApp::OnCmdLineParsed(wxCmdLineParser& parser)
if (ans == 'y' || ans == 'Y')
{
if (!wxFileExists(CONFIG_FILEPATH))
if (!wxFileExists(static_cast<std::string>(CONFIG_FILEPATH)))
{
SH_LOG_ERROR("Error! File {} doesn't exist.", CONFIG_FILEPATH);
SH_LOG_ERROR("Error! File {} doesn't exist.", static_cast<std::string>(CONFIG_FILEPATH));
return false;
}
bool config_is_deleted = wxRemoveFile(CONFIG_FILEPATH);
bool config_is_deleted = wxRemoveFile(static_cast<std::string>(CONFIG_FILEPATH));
if (config_is_deleted)
SH_LOG_INFO("Deleted {}", CONFIG_FILEPATH);
SH_LOG_INFO("Deleted {}", static_cast<std::string>(CONFIG_FILEPATH));
else
SH_LOG_ERROR("Could not delete {}", CONFIG_FILEPATH);
SH_LOG_ERROR("Could not delete {}", static_cast<std::string>(CONFIG_FILEPATH));
if (!wxFileExists(DATABASE_FILEPATH))
if (!wxFileExists(static_cast<std::string>(DATABASE_FILEPATH)))
{
SH_LOG_ERROR("Error! File {} doesn't exist.", DATABASE_FILEPATH);
SH_LOG_ERROR("Error! File {} doesn't exist.", static_cast<std::string>(DATABASE_FILEPATH));
return false;
}
bool db_is_deleted = wxRemoveFile(DATABASE_FILEPATH);
bool db_is_deleted = wxRemoveFile(static_cast<std::string>(DATABASE_FILEPATH));
if (db_is_deleted)
SH_LOG_INFO("Deleted {}", DATABASE_FILEPATH);
SH_LOG_INFO("Deleted {}", static_cast<std::string>(DATABASE_FILEPATH));
else
SH_LOG_ERROR("Could not delete {}", DATABASE_FILEPATH);
SH_LOG_ERROR("Could not delete {}", static_cast<std::string>(DATABASE_FILEPATH));
if (config_is_deleted && db_is_deleted)
SH_LOG_INFO("Successfully cleared app data");
@ -144,6 +154,6 @@ bool cApp::OnCmdLineParsed(wxCmdLineParser& parser)
void cApp::OnEventLoopEnter(wxEventLoopBase* event)
{
if (m_Frame->CreateWatcherIfNecessary())
if (m_pFrame->CreateWatcherIfNecessary())
SH_LOG_INFO("Filesystem watcher created sucessfully");
}

View File

@ -24,6 +24,7 @@
#include <wx/app.h>
#include <wx/cmdline.h>
#include <wx/splash.h>
class cApp : public wxApp
{
@ -38,5 +39,6 @@ class cApp : public wxApp
virtual bool OnCmdLineParsed(wxCmdLineParser& parser);
private:
cMainFrame* m_Frame = nullptr;
wxSplashScreen* m_pSplash = nullptr;
cMainFrame* m_pFrame = nullptr;
};

View File

@ -65,6 +65,9 @@ cSettings::cSettings(wxWindow *window)
serializer.DeserializeWaveformColour(),
wxDefaultPosition, wxDefaultSize,
wxCLRP_DEFAULT_STYLE);
m_pShowSplashCheck = new wxCheckBox(m_pDisplaySettingPanel, SampleHive::ID::SD_ShowSplash, "Show splash on startup",
wxDefaultPosition, wxDefaultSize, 0);
m_pShowSplashCheck->SetValue(serializer.DeserializeShowSplash());
m_pCollectionSettingPanel = new wxPanel(m_pNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize);
@ -104,13 +107,13 @@ cSettings::cSettings(wxWindow *window)
m_pConfigLabel = new wxStaticText(m_pConfigurationSettingPanel, wxID_ANY,
"Default configuration file location", wxDefaultPosition, wxDefaultSize);
m_pConfigText = new wxTextCtrl(m_pConfigurationSettingPanel, wxID_ANY, CONFIG_FILEPATH,
m_pConfigText = new wxTextCtrl(m_pConfigurationSettingPanel, wxID_ANY, static_cast<std::string>(CONFIG_FILEPATH),
wxDefaultPosition, wxDefaultSize);
m_pConfigBrowse = new wxButton(m_pConfigurationSettingPanel, SampleHive::ID::SD_BrowseConfigDir, "Browse",
wxDefaultPosition, wxDefaultSize, 0);
m_pDatabaseLabel = new wxStaticText(m_pConfigurationSettingPanel, wxID_ANY, "Default database location",
wxDefaultPosition, wxDefaultSize);
m_pDatabaseText = new wxTextCtrl(m_pConfigurationSettingPanel, wxID_ANY, DATABASE_FILEPATH,
m_pDatabaseText = new wxTextCtrl(m_pConfigurationSettingPanel, wxID_ANY, static_cast<std::string>(DATABASE_FILEPATH),
wxDefaultPosition, wxDefaultSize);
m_pDatabaseBrowse = new wxButton(m_pConfigurationSettingPanel, SampleHive::ID::SD_BrowseDatabaseDir, "Browse",
wxDefaultPosition, wxDefaultSize, 0);
@ -135,6 +138,7 @@ cSettings::cSettings(wxWindow *window)
Bind(wxEVT_BUTTON, &cSettings::OnClickConfigBrowse, this, SampleHive::ID::SD_BrowseConfigDir);
Bind(wxEVT_BUTTON, &cSettings::OnClickDatabaseBrowse, this, SampleHive::ID::SD_BrowseDatabaseDir);
Bind(wxEVT_COLOURPICKER_CHANGED, &cSettings::OnChangeWaveformColour, this, SampleHive::ID::SD_WaveformColourPickerCtrl);
Bind(wxEVT_CHECKBOX, &cSettings::OnCheckShowSplash, this, SampleHive::ID::SD_ShowSplash);
// Adding controls to sizers
m_pNotebookSizer->Add(m_pNotebook, 1, wxALL | wxEXPAND, 2);
@ -156,6 +160,7 @@ cSettings::cSettings(wxWindow *window)
m_pDisplayTopSizer->Add(m_pDisplayFontSizer, 0, wxALL | wxEXPAND, 2);
m_pDisplayTopSizer->Add(m_pWaveformColourSizer, 0, wxALL | wxEXPAND, 2);
m_pDisplayTopSizer->Add(m_pShowSplashCheck, 0, wxALL | wxEXPAND, 2);
m_pCollectionImportDirSizer->Add(m_pAutoImportCheck, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
m_pCollectionImportDirSizer->Add(m_pImportDirLocation, 1, wxALL | wxALIGN_CENTER_VERTICAL, 2);
@ -501,6 +506,13 @@ void cSettings::OnChangeWaveformColour(wxColourPickerEvent& event)
}
}
void cSettings::OnCheckShowSplash(wxCommandEvent& event)
{
SampleHive::cSerializer serializer;
serializer.SerializeShowSplash(m_pShowSplashCheck->GetValue());
}
cSettings::~cSettings()
{

View File

@ -58,6 +58,7 @@ class cSettings : public wxDialog
void OnChangeFontSize(wxSpinEvent& event);
void OnSelectFont(wxCommandEvent& event);
void OnChangeWaveformColour(wxColourPickerEvent& event);
void OnCheckShowSplash(wxCommandEvent& event);
// -------------------------------------------------------------------
void SetCustomFont();
@ -117,6 +118,7 @@ class cSettings : public wxDialog
wxBoxSizer* m_pWaveformColourSizer = nullptr;
wxStaticText* m_pWaveformColourLabel = nullptr;
wxColourPickerCtrl* m_pWaveformColourPickerCtrl = nullptr;
wxCheckBox* m_pShowSplashCheck = nullptr;
// -------------------------------------------------------------------
// Collection page

View File

@ -50,7 +50,7 @@ cMainFrame::cMainFrame()
int status_width[4] = { 300, -6, -1, -2 };
m_pStatusBar->SetStatusWidths(4, status_width);
m_pHiveBitmap = new wxStaticBitmap(m_pStatusBar, wxID_ANY, wxBitmap(ICON_HIVE_24px));
m_pHiveBitmap = new wxStaticBitmap(m_pStatusBar, wxID_ANY, wxBitmap(ICON_HIVE_24px, wxBITMAP_TYPE_PNG));
// Initialize menubar and menus
m_pMenuBar = new wxMenuBar();
@ -252,8 +252,6 @@ void cMainFrame::UpdateElapsedTime(wxTimerEvent& event)
m_pTransportControls->SetSamplePositionText(wxString::Format(wxT("%s/%s"), position.c_str(), duration.c_str()));
this->Refresh();
m_pTransportControls->Refresh();
m_pWaveformViewer->Refresh();
if (m_bLoopPointsSet && m_pTransportControls->IsLoopABOn())
@ -648,7 +646,8 @@ void cMainFrame::OnSelectResetAppData(wxCommandEvent& event)
wxMessageDialog clearDataDialog(this, wxString::Format(_("Warning! This will delete configuration file "
"\"%s\" and database file \"%s\" permanently, "
"are you sure you want to delete these files?"),
CONFIG_FILEPATH, DATABASE_FILEPATH),
static_cast<std::string>(CONFIG_FILEPATH),
static_cast<std::string>(DATABASE_FILEPATH)),
_("Clear app data?"), wxYES_NO | wxNO_DEFAULT | wxCENTRE, wxDefaultPosition);
bool remove = false;
@ -660,31 +659,31 @@ void cMainFrame::OnSelectResetAppData(wxCommandEvent& event)
if (remove)
{
if (!wxFileExists(CONFIG_FILEPATH))
if (!wxFileExists(static_cast<std::string>(CONFIG_FILEPATH)))
{
SH_LOG_ERROR("Error! File {} doesn't exist.", CONFIG_FILEPATH);
SH_LOG_ERROR("Error! File {} doesn't exist.", static_cast<std::string>(CONFIG_FILEPATH));
return;
}
bool config_is_deleted = wxRemoveFile(CONFIG_FILEPATH);
bool config_is_deleted = wxRemoveFile(static_cast<std::string>(CONFIG_FILEPATH));
if (config_is_deleted)
SH_LOG_INFO("Deleted {}", CONFIG_FILEPATH);
SH_LOG_INFO("Deleted {}", static_cast<std::string>(CONFIG_FILEPATH));
else
SH_LOG_ERROR("Could not delete {}", CONFIG_FILEPATH);
SH_LOG_ERROR("Could not delete {}", static_cast<std::string>(CONFIG_FILEPATH));
if (!wxFileExists(DATABASE_FILEPATH))
if (!wxFileExists(static_cast<std::string>(DATABASE_FILEPATH)))
{
SH_LOG_ERROR("Error! File {} doesn't exist.", DATABASE_FILEPATH);
SH_LOG_ERROR("Error! File {} doesn't exist.", static_cast<std::string>(DATABASE_FILEPATH));
return;
}
bool db_is_deleted = wxRemoveFile(DATABASE_FILEPATH);
bool db_is_deleted = wxRemoveFile(static_cast<std::string>(DATABASE_FILEPATH));
if (db_is_deleted)
SH_LOG_INFO("Deleted {}", DATABASE_FILEPATH);
SH_LOG_INFO("Deleted {}", static_cast<std::string>(DATABASE_FILEPATH));
else
SH_LOG_ERROR("Could not delete {}", DATABASE_FILEPATH);
SH_LOG_ERROR("Could not delete {}", static_cast<std::string>(DATABASE_FILEPATH));
if (config_is_deleted && db_is_deleted)
{
@ -707,7 +706,7 @@ void cMainFrame::OnSelectAbout(wxCommandEvent& event)
wxAboutDialogInfo aboutInfo;
aboutInfo.SetName(PROJECT_NAME);
aboutInfo.SetIcon(wxIcon(ICON_HIVE_64px));
aboutInfo.SetIcon(wxIcon(ICON_HIVE_64px, wxBITMAP_TYPE_PNG));
aboutInfo.AddArtist(PROJECT_AUTHOR);
aboutInfo.SetVersion(PROJECT_VERSION, _("Version 0.9.0_alpha.1"));
aboutInfo.SetDescription(_(PROJECT_DESCRIPTION));

View File

@ -175,7 +175,7 @@ void cWaveformViewer::UpdateWaveformBitmap()
wxString path = selection.Contains(wxString::Format(".%s", extension)) ?
filepath_with_extension : filepath_without_extension;
SndfileHandle snd_file(path);
SndfileHandle snd_file(path.ToStdString().c_str());
int channels = snd_file.channels();
double sample_rate = snd_file.samplerate();

View File

@ -65,6 +65,7 @@ namespace SampleHive { namespace ID {
SD_FontSize,
SD_FontBrowseButton,
SD_WaveformColourPickerCtrl,
SD_ShowSplash,
// -------------------------------------------------------------------
// App Menu items

View File

@ -87,6 +87,10 @@ namespace SampleHive {
m_Emitter << YAML::BeginMap;
m_Emitter << YAML::Key << "Colour" << YAML::Value << colour.GetAsString().ToStdString();
m_Emitter << YAML::EndMap;
m_Emitter << YAML::Key << "Splash";
m_Emitter << YAML::BeginMap;
m_Emitter << YAML::Key << "ShowSplashOnStartup" << YAML::Value << true;
m_Emitter << YAML::EndMap;
m_Emitter << YAML::EndMap << YAML::Newline;
m_Emitter << YAML::Newline << YAML::Key << "Collection";
@ -100,10 +104,10 @@ namespace SampleHive {
m_Emitter << YAML::EndMap;
std::ofstream ofstrm(CONFIG_FILEPATH);
std::ofstream ofstrm(static_cast<std::string>(CONFIG_FILEPATH));
ofstrm << m_Emitter.c_str();
SH_LOG_INFO("Generated {} successfully!", CONFIG_FILEPATH);
SH_LOG_INFO("Generated {} successfully!", static_cast<std::string>(CONFIG_FILEPATH));
}
}
@ -529,6 +533,63 @@ namespace SampleHive {
return static_cast<wxString>(colour);
}
void cSerializer::SerializeShowSplash(bool value)
{
YAML::Emitter out;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
auto display = config["Display"];
if (auto splash = display["Splash"])
{
splash["ShowSplashOnStartup"] = value;
out << config;
std::ofstream ofstrm(static_cast<std::string>(CONFIG_FILEPATH));
ofstrm << out.c_str();
}
else
{
SH_LOG_ERROR("Error! Cannot store show splash value.");
}
}
catch (const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
}
bool cSerializer::DeserializeShowSplash() const
{
bool show = false;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
auto display = config["Display"];
if (auto splash = display["Splash"])
{
show = splash["ShowSplashOnStartup"].as<bool>();
}
else
{
SH_LOG_ERROR("Error! Cannot fetch show splash value.");
}
}
catch (const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
return show;
}
void cSerializer::SerializeAutoImport(bool autoImport, const std::string& importDir)
{
YAML::Emitter out;

View File

@ -84,6 +84,11 @@ namespace SampleHive {
void SerializeWaveformColour(wxColour& colour);
wxColour DeserializeWaveformColour() const;
// -------------------------------------------------------------------
// Splash screen
void SerializeShowSplash(bool value);
bool DeserializeShowSplash() const;
// -------------------------------------------------------------------
// Auto import settings
void SerializeAutoImport(bool autoImport, const std::string& importDir);