Add serialization for window size, recursive search for files and media volume.

This commit is contained in:
apoorv569 2021-11-10 03:19:37 +05:30
parent f40f514912
commit c9b79a6935
8 changed files with 304 additions and 85 deletions

View File

@ -72,7 +72,8 @@ Settings::Settings(wxWindow *window)
m_CollectionMainSizer = new wxBoxSizer(wxVERTICAL);
m_CollectionImportDirSizer = new wxBoxSizer(wxHORIZONTAL);
m_CollectionBottomSizer = new wxBoxSizer(wxVERTICAL);
m_CollectionImportOptionsSizer = new wxBoxSizer(wxHORIZONTAL);
m_CollectionShowExtensionSizer = new wxBoxSizer(wxVERTICAL);
wxString defaultDir = wxGetHomeDir();
@ -88,6 +89,10 @@ Settings::Settings(wxWindow *window)
"Follow symbolic links", wxDefaultPosition, wxDefaultSize, 0);
m_FollowSymLinksCheck->SetToolTip("Wheather to follow symbolic links");
m_FollowSymLinksCheck->Disable();
m_RecursiveImportCheck = new wxCheckBox(m_CollectionSettingPanel, SD_RecursiveImport,
"Recursive search", wxDefaultPosition, wxDefaultSize, 0);
m_RecursiveImportCheck->SetToolTip("Recursively search for samples in the directory");
m_RecursiveImportCheck->Disable();
m_ShowFileExtensionCheck = new wxCheckBox(m_CollectionSettingPanel, SD_ShowFileExtension,
"Show file extension", wxDefaultPosition, wxDefaultSize, 0);
m_ShowFileExtensionCheck->SetToolTip("Weather to show file extension");
@ -124,6 +129,7 @@ Settings::Settings(wxWindow *window)
// Bind events
Bind(wxEVT_CHECKBOX, &Settings::OnCheckAutoImport, this, SD_AutoImport);
Bind(wxEVT_CHECKBOX, &Settings::OnCheckFollowSymLinks, this, SD_FollowSymLinks);
Bind(wxEVT_CHECKBOX, &Settings::OnCheckRecursiveImport, this, SD_RecursiveImport);
Bind(wxEVT_CHECKBOX, &Settings::OnCheckShowFileExtension, this, SD_ShowFileExtension);
Bind(wxEVT_SPINCTRL, &Settings::OnChangeFontSize, this, SD_FontSize);
Bind(wxEVT_BUTTON, &Settings::OnSelectFont, this, SD_FontBrowseButton);
@ -157,11 +163,13 @@ Settings::Settings(wxWindow *window)
m_CollectionImportDirSizer->Add(m_ImportDirLocation, 1, wxALL | wxALIGN_CENTER_VERTICAL, 2);
m_CollectionImportDirSizer->Add(m_BrowseAutoImportDirButton, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2);
m_CollectionBottomSizer->Add(m_FollowSymLinksCheck, 0, wxALL, 2);
m_CollectionBottomSizer->Add(m_ShowFileExtensionCheck, 0, wxALL, 2);
m_CollectionImportOptionsSizer->Add(m_FollowSymLinksCheck, 0, wxALL, 2);
m_CollectionImportOptionsSizer->Add(m_RecursiveImportCheck, 0, wxALL, 2);
m_CollectionShowExtensionSizer->Add(m_ShowFileExtensionCheck, 0, wxALL, 2);
m_CollectionMainSizer->Add(m_CollectionImportDirSizer, 0, wxALL | wxEXPAND, 2);
m_CollectionMainSizer->Add(m_CollectionBottomSizer, 0, wxALL | wxEXPAND, 2);
m_CollectionMainSizer->Add(m_CollectionImportOptionsSizer, 0, wxALL | wxEXPAND, 2);
m_CollectionMainSizer->Add(m_CollectionShowExtensionSizer, 0, wxALL | wxEXPAND, 2);
m_ButtonSizer->Add(m_OkButton, 0, wxALL | wxALIGN_BOTTOM, 2);
m_ButtonSizer->Add(m_CancelButton, 0, wxALL | wxALIGN_BOTTOM, 2);
@ -250,8 +258,9 @@ void Settings::OnCheckAutoImport(wxCommandEvent& event)
m_ImportDirLocation->Disable();
m_BrowseAutoImportDirButton->Disable();
m_FollowSymLinksCheck->Disable();
m_RecursiveImportCheck->Disable();
serializer.SerializeAutoImportSettings(bAutoImport, m_ImportDirLocation->GetValue().ToStdString());
serializer.SerializeAutoImport(bAutoImport, m_ImportDirLocation->GetValue().ToStdString());
}
else
{
@ -259,8 +268,9 @@ void Settings::OnCheckAutoImport(wxCommandEvent& event)
m_ImportDirLocation->Enable();
m_BrowseAutoImportDirButton->Enable();
m_FollowSymLinksCheck->Enable();
m_RecursiveImportCheck->Enable();
serializer.SerializeAutoImportSettings(bAutoImport, m_ImportDirLocation->GetValue().ToStdString());
serializer.SerializeAutoImport(bAutoImport, m_ImportDirLocation->GetValue().ToStdString());
}
}
@ -271,11 +281,18 @@ void Settings::OnCheckFollowSymLinks(wxCommandEvent& event)
serializer.SerializeFollowSymLink(m_FollowSymLinksCheck->GetValue());
}
void Settings::OnCheckRecursiveImport(wxCommandEvent& event)
{
Serializer serializer;
serializer.SerializeRecursiveImport(m_RecursiveImportCheck->GetValue());
}
void Settings::OnCheckShowFileExtension(wxCommandEvent& event)
{
Serializer serializer;
serializer.SerializeShowFileExtensionSetting(m_ShowFileExtensionCheck->GetValue());
serializer.SerializeShowFileExtension(m_ShowFileExtensionCheck->GetValue());
}
void Settings::OnClickBrowseAutoImportDir(wxCommandEvent& event)
@ -297,7 +314,7 @@ void Settings::OnClickBrowseAutoImportDir(wxCommandEvent& event)
wxString path = dir_dialog.GetPath();
m_ImportDirLocation->SetValue(path);
serializer.SerializeAutoImportSettings(bAutoImport, m_ImportDirLocation->GetValue().ToStdString());
serializer.SerializeAutoImport(bAutoImport, m_ImportDirLocation->GetValue().ToStdString());
break;
}
default:
@ -348,7 +365,7 @@ void Settings::OnChangeFontSize(wxSpinEvent& event)
m_Font.SetPointSize(font_size);
serializer.SerializeDisplaySettings(m_Font);
serializer.SerializeFontSettings(m_Font);
m_Window->SetFont(m_Font);
this->SetFont(m_Font);
@ -365,8 +382,8 @@ void Settings::LoadDefaultConfig()
wxString system_font = sys_font.GetFaceName();
int system_font_size = sys_font.GetPointSize();
wxString font_face = serializer.DeserializeDisplaySettings().GetFaceName();
int font_size = serializer.DeserializeDisplaySettings().GetPointSize();
wxString font_face = serializer.DeserializeFontSettings().GetFaceName();
int font_size = serializer.DeserializeFontSettings().GetPointSize();
if (system_font != font_face)
{
@ -392,18 +409,20 @@ void Settings::LoadDefaultConfig()
m_FontSize->SetValue(font_size);
SetCustomFont();
bAutoImport = serializer.DeserializeAutoImportSettings().first;
wxString location = serializer.DeserializeAutoImportSettings().second;
bAutoImport = serializer.DeserializeAutoImport().first;
m_AutoImportCheck->SetValue(bAutoImport);
m_ImportDirLocation->SetValue(location);
m_ShowFileExtensionCheck->SetValue(serializer.DeserializeShowFileExtensionSetting());
m_ImportDirLocation->SetValue(serializer.DeserializeAutoImport().second);
m_ShowFileExtensionCheck->SetValue(serializer.DeserializeShowFileExtension());
m_FollowSymLinksCheck->SetValue(serializer.DeserializeFollowSymLink());
m_RecursiveImportCheck->SetValue(serializer.DeserializeRecursiveImport());
if (bAutoImport)
{
m_ImportDirLocation->Enable();
m_BrowseAutoImportDirButton->Enable();
m_FollowSymLinksCheck->Enable();
m_RecursiveImportCheck->Enable();
}
}
@ -412,7 +431,7 @@ void Settings::SetShowExtension(bool value)
Serializer serializer;
m_ShowFileExtensionCheck->SetValue(value);
serializer.SerializeShowFileExtensionSetting(value);
serializer.SerializeShowFileExtension(value);
}
void Settings::PrintFont()
@ -432,22 +451,22 @@ void Settings::SetCustomFont()
std::string system_font = sys_font.GetFaceName().ToStdString();
int system_font_size = sys_font.GetPointSize();
wxString font_face = serializer.DeserializeDisplaySettings().GetFaceName();
int font_size = serializer.DeserializeDisplaySettings().GetPointSize();
wxString font_face = serializer.DeserializeFontSettings().GetFaceName();
int font_size = serializer.DeserializeFontSettings().GetPointSize();
if (m_FontType->GetStringSelection() == "System default")
{
m_Window->SetFont(sys_font);
this->SetFont(sys_font);
serializer.SerializeDisplaySettings(sys_font);
serializer.SerializeFontSettings(sys_font);
}
else
{
m_Window->SetFont(m_Font);
this->SetFont(m_Font);
serializer.SerializeDisplaySettings(m_Font);
serializer.SerializeFontSettings(m_Font);
}
}

View File

@ -89,9 +89,11 @@ class Settings : public wxDialog
// Collection page
wxBoxSizer* m_CollectionMainSizer;
wxBoxSizer* m_CollectionImportDirSizer;
wxBoxSizer* m_CollectionBottomSizer;
wxBoxSizer* m_CollectionImportOptionsSizer;
wxBoxSizer* m_CollectionShowExtensionSizer;
wxCheckBox* m_AutoImportCheck;
wxCheckBox* m_FollowSymLinksCheck;
wxCheckBox* m_RecursiveImportCheck;
wxCheckBox* m_ShowFileExtensionCheck;
wxTextCtrl* m_ImportDirLocation;
wxButton* m_BrowseAutoImportDirButton;
@ -128,6 +130,7 @@ class Settings : public wxDialog
void OnClickDatabaseBrowse(wxCommandEvent& event);
void OnCheckAutoImport(wxCommandEvent& event);
void OnCheckFollowSymLinks(wxCommandEvent& event);
void OnCheckRecursiveImport(wxCommandEvent& event);
void OnCheckShowFileExtension(wxCommandEvent& event);
void OnClickBrowseAutoImportDir(wxCommandEvent& event);
void OnChangeFontSize(wxSpinEvent& event);

View File

@ -131,9 +131,6 @@ MainFrame::MainFrame()
// Set the menu bar to use
SetMenuBar(m_MenuBar);
// Load default yaml config file.
LoadConfigFile();
// Initializing Sizers
m_MainSizer = new wxBoxSizer(wxVERTICAL);
@ -419,6 +416,7 @@ MainFrame::MainFrame()
Bind(wxEVT_MENU, &MainFrame::OnSelectResetAppData, this, wxID_REFRESH);
Bind(wxEVT_MENU, &MainFrame::OnSelectAbout, this, wxID_ABOUT);
this->Connect(wxEVT_SIZE, wxSizeEventHandler(MainFrame::OnResizeFrame), NULL, this);
m_StatusBar->Connect(wxEVT_SIZE, wxSizeEventHandler(MainFrame::OnResizeStatusBar), NULL, this);
Bind(wxEVT_DIRCTRL_FILEACTIVATED, &MainFrame::OnClickDirCtrl, this, BC_DirCtrl);
@ -556,6 +554,9 @@ MainFrame::MainFrame()
m_BottomRightPanelMainSizer->SetSizeHints(m_BottomRightPanel);
m_BottomRightPanelMainSizer->Layout();
// Load default yaml config file.
LoadConfigFile();
// Restore the data previously added to Library
LoadDatabase();
@ -639,7 +640,7 @@ void MainFrame::AddSamples(wxArrayString& files)
filename_without_extension = files[i].AfterLast('/').BeforeLast('.').ToStdString();
extension = files[i].AfterLast('.').ToStdString();
filename = serializer.DeserializeShowFileExtensionSetting() ?
filename = serializer.DeserializeShowFileExtension() ?
filename_with_extension : filename_without_extension;
Sample sample;
@ -790,7 +791,7 @@ void MainFrame::OnDragAndDropToHives(wxDropFilesEvent& event)
files = file_data.GetFilenames();
wxString file_name = serializer.DeserializeShowFileExtensionSetting() ?
wxString file_name = serializer.DeserializeShowFileExtension() ?
files[i].BeforeLast('.') : files[i];
SH_LOG_DEBUG("Dropping {} file(s) {} on {}", rows - i, files[i], m_Hives->GetItemText(drop_target));
@ -945,7 +946,11 @@ void MainFrame::OnClickPlay(wxCommandEvent& event)
void MainFrame::OnClickLoop(wxCommandEvent& event)
{
Serializer serializer;
bLoop = m_LoopButton->GetValue();
serializer.SerializeMediaOptions("loop", bLoop);
}
void MainFrame::OnClickStop(wxCommandEvent& event)
@ -964,15 +969,21 @@ void MainFrame::OnClickStop(wxCommandEvent& event)
void MainFrame::OnClickMute(wxCommandEvent& event)
{
Serializer serializer;
if (m_MuteButton->GetValue())
{
m_MediaCtrl->SetVolume(0.0);
bMuted = true;
serializer.SerializeMediaOptions("muted", bMuted);
}
else
{
m_MediaCtrl->SetVolume(1.0);
m_MediaCtrl->SetVolume(double(m_VolumeSlider->GetValue()) / 100);
bMuted = false;
serializer.SerializeMediaOptions("muted", bMuted);
}
}
@ -1032,25 +1043,35 @@ void MainFrame::UpdateElapsedTime(wxTimerEvent& event)
void MainFrame::OnCheckAutoplay(wxCommandEvent& event)
{
Serializer serializer;
if (m_AutoPlayCheck->GetValue())
{
bAutoplay = true;
serializer.SerializeMediaOptions("autoplay", bAutoplay);
}
else
{
bAutoplay = false;
serializer.SerializeMediaOptions("autoplay", bAutoplay);
}
}
void MainFrame::OnSlideVolume(wxScrollEvent& event)
{
m_MediaCtrl->SetVolume(float(m_VolumeSlider->GetValue()) / 100);
m_MediaCtrl->SetVolume(double(m_VolumeSlider->GetValue()) / 100);
PushStatusText(wxString::Format(_("Volume: %d"), m_VolumeSlider->GetValue()), 1);
}
void MainFrame::OnReleaseVolumeSlider(wxScrollEvent& event)
{
Serializer serializer;
serializer.SerializeMediaVolume(m_VolumeSlider->GetValue());
int selected_row = m_Library->GetSelectedRow();
if (selected_row < 0)
@ -1298,7 +1319,7 @@ void MainFrame::OnShowHivesContextMenu(wxDataViewEvent& event)
{
wxDataViewItem sample_item = m_Hives->GetNthChild(selected_hive, i);
wxString sample_name = serializer.DeserializeShowFileExtensionSetting() ?
wxString sample_name = serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(sample_item).BeforeLast('.') :
m_Hives->GetItemText(sample_item);
@ -1398,7 +1419,7 @@ void MainFrame::OnShowHivesContextMenu(wxDataViewEvent& event)
for (int i = 0; i < m_Library->GetItemCount(); i++)
{
wxString matched_sample =
serializer.DeserializeShowFileExtensionSetting() ?
serializer.DeserializeShowFileExtension() ?
m_Library->GetTextValue(i, 1).BeforeLast('.') :
m_Library->GetTextValue(i, 1);
@ -1407,7 +1428,7 @@ void MainFrame::OnShowHivesContextMenu(wxDataViewEvent& event)
child_item = m_Hives->GetNthChild(selected_hive, j);
wxString child_name =
serializer.DeserializeShowFileExtensionSetting() ?
serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(child_item).BeforeLast('.') :
m_Hives->GetItemText(child_item);
@ -1457,7 +1478,7 @@ void MainFrame::OnShowHivesContextMenu(wxDataViewEvent& event)
try
{
const auto dataset = m_Database->FilterDatabaseByHiveName(hive_name.ToStdString(),
serializer.DeserializeShowFileExtensionSetting(),
serializer.DeserializeShowFileExtension(),
ICON_STAR_FILLED_16px,
ICON_STAR_EMPTY_16px);
@ -1489,7 +1510,7 @@ void MainFrame::OnShowHivesContextMenu(wxDataViewEvent& event)
{
try
{
const auto dataset = m_Database->FilterDatabaseBySampleName("", serializer.DeserializeShowFileExtensionSetting(),
const auto dataset = m_Database->FilterDatabaseBySampleName("", serializer.DeserializeShowFileExtension(),
ICON_STAR_FILLED_16px, ICON_STAR_EMPTY_16px);
if (dataset.empty())
@ -1528,11 +1549,11 @@ void MainFrame::OnShowHivesContextMenu(wxDataViewEvent& event)
case MN_RemoveSample:
for(int i = 0; i < m_Library->GetItemCount(); i++)
{
wxString matched_sample = serializer.DeserializeShowFileExtensionSetting() ?
wxString matched_sample = serializer.DeserializeShowFileExtension() ?
m_Library->GetTextValue(i, 1).BeforeLast('.') :
m_Library->GetTextValue(i, 1);
wxString selected_sample_name = serializer.DeserializeShowFileExtensionSetting() ?
wxString selected_sample_name = serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(event.GetItem()).BeforeLast('.') :
m_Hives->GetItemText(event.GetItem());
@ -1560,11 +1581,11 @@ void MainFrame::OnShowHivesContextMenu(wxDataViewEvent& event)
case MN_ShowInLibrary:
for(int i = 0; i < m_Library->GetItemCount(); i++)
{
wxString matched_sample = serializer.DeserializeShowFileExtensionSetting() ?
wxString matched_sample = serializer.DeserializeShowFileExtension() ?
m_Library->GetTextValue(i, 1).BeforeLast('.') :
m_Library->GetTextValue(i, 1);
wxString selected_sample_name = serializer.DeserializeShowFileExtensionSetting() ?
wxString selected_sample_name = serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(event.GetItem()).BeforeLast('.') :
m_Hives->GetItemText(event.GetItem());
@ -1669,7 +1690,7 @@ void MainFrame::OnShowLibraryContextMenu(wxDataViewEvent& event)
wxString name = m_Library->GetTextValue(selected_row, 1);
filename = serializer.DeserializeShowFileExtensionSetting() ?
filename = serializer.DeserializeShowFileExtension() ?
name.BeforeLast('.').ToStdString() : name.ToStdString();
db_status = m_Database->GetFavoriteColumnValueByFilename(filename);
@ -1779,7 +1800,7 @@ void MainFrame::OnShowLibraryContextMenu(wxDataViewEvent& event)
{
child = m_Hives->GetNthChild(container, k);
wxString child_text = serializer.DeserializeShowFileExtensionSetting() ?
wxString child_text = serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(child).BeforeLast('.') :
m_Hives->GetItemText(child);
@ -1815,7 +1836,7 @@ void MainFrame::OnShowLibraryContextMenu(wxDataViewEvent& event)
wxString text_value = m_Library->GetTextValue(row, 1);
std::string multi_selection = serializer.DeserializeShowFileExtensionSetting() ?
std::string multi_selection = serializer.DeserializeShowFileExtension() ?
text_value.BeforeLast('.').ToStdString() : text_value.ToStdString() ;
m_Database->RemoveSampleFromDatabase(multi_selection);
@ -1829,7 +1850,7 @@ void MainFrame::OnShowLibraryContextMenu(wxDataViewEvent& event)
{
child = m_Hives->GetNthChild(container, k);
wxString child_text = serializer.DeserializeShowFileExtensionSetting() ?
wxString child_text = serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(child).BeforeLast('.') :
m_Hives->GetItemText(child);
@ -1877,7 +1898,7 @@ void MainFrame::OnShowLibraryContextMenu(wxDataViewEvent& event)
wxString text_value = m_Library->GetTextValue(item_row, 1);
std::string multi_selection = serializer.DeserializeShowFileExtensionSetting() ?
std::string multi_selection = serializer.DeserializeShowFileExtension() ?
m_Library->GetTextValue(item_row, 1).BeforeLast('.').ToStdString() :
m_Library->GetTextValue(item_row, 1).ToStdString() ;
@ -1899,7 +1920,7 @@ void MainFrame::OnShowLibraryContextMenu(wxDataViewEvent& event)
{
child = m_Hives->GetNthChild(container, k);
wxString child_text = serializer.DeserializeShowFileExtensionSetting() ?
wxString child_text = serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(child).BeforeLast('.') :
m_Hives->GetItemText(child);
@ -2035,7 +2056,7 @@ void MainFrame::LoadDatabase()
{
const auto dataset = m_Database->LoadSamplesDatabase(*m_Hives, favorites_hive,
*m_Trash, trash_root,
serializer.DeserializeShowFileExtensionSetting(),
serializer.DeserializeShowFileExtension(),
ICON_STAR_FILLED_16px, ICON_STAR_EMPTY_16px);
if (dataset.empty())
@ -2071,7 +2092,7 @@ void MainFrame::OnShowTrashContextMenu(wxTreeEvent& event)
{
case MN_DeleteTrash:
{
wxString trashed_item_name = serializer.DeserializeShowFileExtensionSetting() ?
wxString trashed_item_name = serializer.DeserializeShowFileExtension() ?
m_Trash->GetItemText(selected_trashed_item).BeforeLast('.') :
m_Trash->GetItemText(selected_trashed_item);
@ -2111,7 +2132,7 @@ void MainFrame::OnShowTrashContextMenu(wxTreeEvent& event)
if (m_Database->RestoreFromTrashByFilename(files[i].ToStdString(),
dataset,
serializer.DeserializeShowFileExtensionSetting(),
serializer.DeserializeShowFileExtension(),
ICON_STAR_FILLED_16px,
ICON_STAR_EMPTY_16px).empty())
{
@ -2165,7 +2186,7 @@ void MainFrame::OnDragAndDropToTrash(wxDropFilesEvent& event)
wxString text_value = m_Library->GetTextValue(item_row, 1);
std::string multi_selection = serializer.DeserializeShowFileExtensionSetting() ?
std::string multi_selection = serializer.DeserializeShowFileExtension() ?
m_Library->GetTextValue(item_row, 1).BeforeLast('.').ToStdString() :
m_Library->GetTextValue(item_row, 1).ToStdString() ;
@ -2187,7 +2208,7 @@ void MainFrame::OnDragAndDropToTrash(wxDropFilesEvent& event)
{
child = m_Hives->GetNthChild(container, k);
wxString child_text = serializer.DeserializeShowFileExtensionSetting() ?
wxString child_text = serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(child).BeforeLast('.') :
m_Hives->GetItemText(child);
@ -2363,7 +2384,7 @@ void MainFrame::OnClickRemoveHive(wxCommandEvent& event)
for (int i = 0; i < m_Library->GetItemCount(); i++)
{
wxString matched_sample = serializer.DeserializeShowFileExtensionSetting() ?
wxString matched_sample = serializer.DeserializeShowFileExtension() ?
m_Library->GetTextValue(i, 1).BeforeLast('.') :
m_Library->GetTextValue(i, 1);
@ -2371,7 +2392,7 @@ void MainFrame::OnClickRemoveHive(wxCommandEvent& event)
{
child_item = m_Hives->GetNthChild(selected_item, j);
wxString child_name = serializer.DeserializeShowFileExtensionSetting() ?
wxString child_name = serializer.DeserializeShowFileExtension() ?
m_Hives->GetItemText(child_item).BeforeLast('.') :
m_Hives->GetItemText(child_item);
@ -2456,7 +2477,7 @@ void MainFrame::OnClickRestoreTrashItem(wxCommandEvent& event)
wxVector<wxVector<wxVariant>> dataset;
if (m_Database->RestoreFromTrashByFilename(files[i].ToStdString(), dataset,
serializer.DeserializeShowFileExtensionSetting(),
serializer.DeserializeShowFileExtension(),
ICON_STAR_FILLED_16px, ICON_STAR_EMPTY_16px).empty())
{
SH_LOG_INFO("Error! Database is empty.");
@ -2487,7 +2508,7 @@ void MainFrame::OnDoSearch(wxCommandEvent& event)
try
{
const auto dataset = m_Database->FilterDatabaseBySampleName(search,
serializer.DeserializeShowFileExtensionSetting(),
serializer.DeserializeShowFileExtension(),
ICON_STAR_FILLED_16px,
ICON_STAR_EMPTY_16px);
@ -2558,13 +2579,26 @@ void MainFrame::LoadConfigFile()
int height = 600, width = 800;
bAutoplay = serializer.DeserializeBrowserControls("autoplay");
bLoop = serializer.DeserializeBrowserControls("loop");
bMuted = serializer.DeserializeBrowserControls("muted");
bAutoplay = serializer.DeserializeMediaOptions("autoplay");
bLoop = serializer.DeserializeMediaOptions("loop");
bMuted = serializer.DeserializeMediaOptions("muted");
m_AutoPlayCheck->SetValue(bAutoplay);
m_LoopButton->SetValue(bLoop);
m_MuteButton->SetValue(bMuted);
m_VolumeSlider->SetValue(serializer.DeserializeMediaVolume());
if (!bMuted)
m_MediaCtrl->SetVolume(double(m_VolumeSlider->GetValue()) / 100);
else
m_MediaCtrl->SetVolume(0.0);
width = serializer.DeserializeWinSize().first;
height = serializer.DeserializeWinSize().second;
int min_width = 960, min_height = 540;
bShowMenuBar = serializer.DeserializeShowMenuAndStatusBar("menubar");
bShowStatusBar = serializer.DeserializeShowMenuAndStatusBar("statusbar");
@ -2573,11 +2607,11 @@ void MainFrame::LoadConfigFile()
m_ToggleStatusBar->Check(bShowStatusBar);
m_StatusBar->Show(bShowStatusBar);
m_ToggleExtension->Check(serializer.DeserializeShowFileExtensionSetting());
m_ToggleExtension->Check(serializer.DeserializeShowFileExtension());
this->SetFont(serializer.DeserializeDisplaySettings());
this->SetFont(serializer.DeserializeFontSettings());
this->SetSize(width, height);
this->SetMinSize(wxSize(width, height));
this->SetMinSize(wxSize(min_width, min_height));
this->CenterOnScreen(wxBOTH);
this->SetIcon(wxIcon(ICON_HIVE_256px, wxICON_DEFAULT_TYPE, -1, -1));
this->SetTitle(PROJECT_NAME);
@ -2620,12 +2654,16 @@ void MainFrame::CreateWatcher()
m_FsWatcher = new wxFileSystemWatcher();
m_FsWatcher->SetOwner(this);
wxString path = serializer.DeserializeAutoImportSettings().second;
wxString path = serializer.DeserializeAutoImport().second;
if (serializer.DeserializeAutoImportSettings().first)
if (serializer.DeserializeAutoImport().first)
{
SH_LOG_INFO("Adding watch entry: {}", path);
AddWatchEntry(wxFSWPath_Tree, path.ToStdString());
if (serializer.DeserializeRecursiveImport())
AddWatchEntry(wxFSWPath_Tree, path.ToStdString());
else
AddWatchEntry(wxFSWPath_Dir, path.ToStdString());
}
}
@ -2663,6 +2701,7 @@ void MainFrame::AddWatchEntry(wxFSWPathType type, std::string path)
switch (type)
{
case wxFSWPath_Dir:
ok = m_FsWatcher->Add(filename);
break;
case wxFSWPath_Tree:
ok = m_FsWatcher->AddTree(filename);
@ -2735,7 +2774,7 @@ FileInfo MainFrame::GetFilenamePathAndExtension(const wxString& selected,
if (checkExtension)
{
extension = serializer.DeserializeShowFileExtensionSetting() ?
extension = serializer.DeserializeShowFileExtension() ?
m_Database->GetSampleFileExtension(selected.ToStdString()) :
m_Database->GetSampleFileExtension(selected.BeforeLast('.').ToStdString());
}
@ -2803,13 +2842,13 @@ void MainFrame::OnSelectToggleExtension(wxCommandEvent& event)
if (m_ToggleExtension->IsChecked())
{
serializer.SerializeShowFileExtensionSetting(true);
serializer.SerializeShowFileExtension(true);
m_InfoBar->ShowMessage(_("Extension showing, restart the application to view changes "
"or press CTRL+E to toggle show/hide."), wxICON_INFORMATION);
}
else
{
serializer.SerializeShowFileExtensionSetting(false);
serializer.SerializeShowFileExtension(false);
m_InfoBar->ShowMessage(_("Extension hidden, restart the application to view changes "
"or press CTRL+E to toggle show/hide."), wxICON_INFORMATION);
}
@ -2997,6 +3036,17 @@ void MainFrame::OnResizeStatusBar(wxSizeEvent& event)
event.Skip();
}
void MainFrame::OnResizeFrame(wxSizeEvent& event)
{
Serializer serializer;
SH_LOG_DEBUG("Frame resized to {}, {}", GetSize().GetWidth(), GetSize().GetHeight());
serializer.SerializeWinSize(GetSize().GetWidth(), GetSize().GetHeight());
event.Skip();
}
void MainFrame::SetAfterFrameCreate()
{
m_TopSplitter->SetSashPosition(200);

View File

@ -178,7 +178,7 @@ class MainFrame : public wxFrame
// -------------------------------------------------------------------
// FileSystemWatcher
wxFileSystemWatcher* m_FsWatcher;
wxFileSystemWatcher* m_FsWatcher = nullptr;
// -------------------------------------------------------------------
wxLongLong m_LoopA, m_LoopB;
@ -258,6 +258,10 @@ class MainFrame : public wxFrame
// Statusbar event handler
void OnResizeStatusBar(wxSizeEvent& event);
// -------------------------------------------------------------------
// Frame resize event handler
void OnResizeFrame(wxSizeEvent& event);
// -------------------------------------------------------------------
// Timer update event handler
void UpdateElapsedTime(wxTimerEvent& event);

View File

@ -160,7 +160,7 @@ void WaveformViewer::UpdateWaveformBitmap()
m_Database.GetSamplePathByFilename(selection.BeforeLast('.').ToStdString());
wxString filepath_without_extension = m_Database.GetSamplePathByFilename(selection.ToStdString());
std::string extension = serializer.DeserializeShowFileExtensionSetting() ?
std::string extension = serializer.DeserializeShowFileExtension() ?
m_Database.GetSampleFileExtension(selection.ToStdString()) :
m_Database.GetSampleFileExtension(selection.BeforeLast('.').ToStdString());

View File

@ -56,6 +56,7 @@ enum ControlIDs
SD_BrowseDatabaseDir,
SD_AutoImport,
SD_FollowSymLinks,
SD_RecursiveImport,
SD_ShowFileExtension,
SD_BrowseAutoImportDir,
SD_FontType,

View File

@ -69,6 +69,7 @@ Serializer::Serializer()
m_Emitter << YAML::Key << "Autoplay" << YAML::Value << false;
m_Emitter << YAML::Key << "Loop" << YAML::Value << false;
m_Emitter << YAML::Key << "Muted" << YAML::Value << false;
m_Emitter << YAML::Key << "Volume" << YAML::Value << 100;
m_Emitter << YAML::EndMap << YAML::Newline;
m_Emitter << YAML::Newline << YAML::Key << "Display";
@ -89,6 +90,7 @@ Serializer::Serializer()
m_Emitter << YAML::Key << "AutoImport" << YAML::Value << false;
m_Emitter << YAML::Key << "Directory" << YAML::Value << dir;
m_Emitter << YAML::Key << "FollowSymLink" << YAML::Value << false;
m_Emitter << YAML::Key << "RecursiveImport" << YAML::Value << false;
m_Emitter << YAML::Key << "ShowFileExtension" << YAML::Value << true;
m_Emitter << YAML::EndMap << YAML::Newline;
@ -106,6 +108,35 @@ Serializer::~Serializer()
}
void Serializer::SerializeWinSize(int w, int h)
{
YAML::Emitter out;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
if (auto win = config["Window"])
{
win["Width"] = w;
win["Height"] = h;
out << config;
std::ofstream ofstrm(static_cast<std::string>(CONFIG_FILEPATH));
ofstrm << out.c_str();
}
else
{
SH_LOG_ERROR("Error! Cannot store window size values.");
}
}
catch(const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
}
WindowSize Serializer::DeserializeWinSize() const
{
int width = 800, height = 600;
@ -194,7 +225,7 @@ bool Serializer::DeserializeShowMenuAndStatusBar(std::string key) const
return show;
}
void Serializer::SerializeBrowserControls(std::string key, bool value)
void Serializer::SerializeMediaOptions(std::string key, bool value)
{
YAML::Emitter out;
@ -227,7 +258,7 @@ void Serializer::SerializeBrowserControls(std::string key, bool value)
}
}
bool Serializer::DeserializeBrowserControls(std::string key) const
bool Serializer::DeserializeMediaOptions(std::string key) const
{
bool control = false;
@ -247,7 +278,7 @@ bool Serializer::DeserializeBrowserControls(std::string key) const
control = media["Muted"].as<bool>();
}
else
SH_LOG_ERROR("Error! Cannot fetch values.");
SH_LOG_ERROR("Error! Cannot fetch media values.");
}
catch(const YAML::ParserException& ex)
{
@ -259,7 +290,56 @@ bool Serializer::DeserializeBrowserControls(std::string key) const
return control;
}
void Serializer::SerializeDisplaySettings(wxFont& font)
void Serializer::SerializeMediaVolume(int volume)
{
YAML::Emitter out;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
if (auto media = config["Media"])
{
media["Volume"] = volume;
out << config;
std::ofstream ofstrm(static_cast<std::string>(CONFIG_FILEPATH));
ofstrm << out.c_str();
}
else
SH_LOG_ERROR("Error! Cannot store volume values.");
}
catch(const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
}
int Serializer::DeserializeMediaVolume() const
{
int volume = 0;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
if (auto media = config["Media"])
volume = media["Volume"].as<int>();
else
SH_LOG_ERROR("Error! Cannot fetch volume values.");
}
catch(const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
SH_LOG_INFO("Volume: {}", volume);
return volume;
}
void Serializer::SerializeFontSettings(wxFont& font)
{
YAML::Emitter out;
@ -293,7 +373,7 @@ void Serializer::SerializeDisplaySettings(wxFont& font)
}
}
wxFont Serializer::DeserializeDisplaySettings() const
wxFont Serializer::DeserializeFontSettings() const
{
wxFont font;
@ -386,7 +466,7 @@ wxColour Serializer::DeserializeWaveformColour() const
return static_cast<wxString>(colour);
}
void Serializer::SerializeAutoImportSettings(bool autoImport, const std::string& importDir)
void Serializer::SerializeAutoImport(bool autoImport, const std::string& importDir)
{
YAML::Emitter out;
@ -415,7 +495,7 @@ void Serializer::SerializeAutoImportSettings(bool autoImport, const std::string&
}
}
ImportDirInfo Serializer::DeserializeAutoImportSettings() const
ImportDirInfo Serializer::DeserializeAutoImport() const
{
wxString dir;
bool auto_import = false;
@ -452,7 +532,7 @@ void Serializer::SerializeFollowSymLink(bool followSymLinks)
if (auto followSymLinks = config["Collection"])
{
followSymLinks["FollowSymLinks"] = followSymLinks;
followSymLinks["FollowSymLink"] = followSymLinks;
out << config;
@ -480,7 +560,7 @@ bool Serializer::DeserializeFollowSymLink() const
if (auto followSymLinks = config["Collection"])
{
follow_sym_links = followSymLinks["FollowSymLinks"].as<bool>();
follow_sym_links = followSymLinks["FollowSymLink"].as<bool>();
}
else
{
@ -495,7 +575,60 @@ bool Serializer::DeserializeFollowSymLink() const
return follow_sym_links;
}
void Serializer::SerializeShowFileExtensionSetting(bool showExtension)
void Serializer::SerializeRecursiveImport(bool recursiveImport)
{
YAML::Emitter out;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
if (auto recursive = config["Collection"])
{
recursive["RecursiveImport"] = recursiveImport;
out << config;
std::ofstream ofstrm(static_cast<std::string>(CONFIG_FILEPATH));
ofstrm << out.c_str();
}
else
{
SH_LOG_ERROR("Error! Cannot store recursive import value.");
}
}
catch(const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
}
bool Serializer::DeserializeRecursiveImport() const
{
bool recursive_import = false;
try
{
YAML::Node config = YAML::LoadFile(static_cast<std::string>(CONFIG_FILEPATH));
if (auto recursive = config["Collection"])
{
recursive_import = recursive["RecursiveImport"].as<bool>();
}
else
{
SH_LOG_ERROR("Error! Cannot fetch recursive import value.");
}
}
catch(const YAML::ParserException& ex)
{
SH_LOG_ERROR(ex.what());
}
return recursive_import;
}
void Serializer::SerializeShowFileExtension(bool showExtension)
{
YAML::Emitter out;
@ -523,7 +656,7 @@ void Serializer::SerializeShowFileExtensionSetting(bool showExtension)
}
}
bool Serializer::DeserializeShowFileExtensionSetting() const
bool Serializer::DeserializeShowFileExtension() const
{
bool show_extension = false;

View File

@ -55,6 +55,7 @@ class Serializer
public:
// -------------------------------------------------------------------
// Window size
void SerializeWinSize(int w, int h);
WindowSize DeserializeWinSize() const;
// -------------------------------------------------------------------
@ -64,13 +65,16 @@ class Serializer
// -------------------------------------------------------------------
// Browser controls
void SerializeBrowserControls(std::string key, bool value);
bool DeserializeBrowserControls(std::string key) const;
void SerializeMediaOptions(std::string key, bool value);
bool DeserializeMediaOptions(std::string key) const;
void SerializeMediaVolume(int volume);
int DeserializeMediaVolume() const;
// -------------------------------------------------------------------
// Display settings
void SerializeDisplaySettings(wxFont& font);
wxFont DeserializeDisplaySettings() const;
void SerializeFontSettings(wxFont& font);
wxFont DeserializeFontSettings() const;
// -------------------------------------------------------------------
// Waveform colour
@ -79,16 +83,21 @@ class Serializer
// -------------------------------------------------------------------
// Auto import settings
void SerializeAutoImportSettings(bool autoImport, const std::string& importDir);
ImportDirInfo DeserializeAutoImportSettings() const;
void SerializeAutoImport(bool autoImport, const std::string& importDir);
ImportDirInfo DeserializeAutoImport() const;
// -------------------------------------------------------------------
// Follow symbolic links
void SerializeFollowSymLink(bool followSymLink);
bool DeserializeFollowSymLink() const;
// -------------------------------------------------------------------
// Recursive import
void SerializeRecursiveImport(bool recursiveImport);
bool DeserializeRecursiveImport() const;
// -------------------------------------------------------------------
// Show file extension
void SerializeShowFileExtensionSetting(bool showExtension);
bool DeserializeShowFileExtensionSetting() const;
void SerializeShowFileExtension(bool showExtension);
bool DeserializeShowFileExtension() const;
};