Add collection tab child item popup menu, find file in library or open system file manager.

This commit is contained in:
apoorv569 2021-06-17 10:38:24 +05:30
parent f4c46a6b5f
commit a6275f5e6c
2 changed files with 189 additions and 24 deletions

View File

@ -46,6 +46,7 @@ enum ControlIDs
MN_DeleteSample, MN_DeleteSample,
MN_TrashSample, MN_TrashSample,
MN_EditTagSample, MN_EditTagSample,
MN_OpenFile,
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// CollectionView Menu items // CollectionView Menu items
@ -53,6 +54,7 @@ enum ControlIDs
MN_RemoveFolder, MN_RemoveFolder,
MN_RemoveSample, MN_RemoveSample,
MN_FilterSampleView, MN_FilterSampleView,
MN_ShowInLibrary,
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Edit tags dialog controls // Edit tags dialog controls

View File

@ -881,12 +881,12 @@ void MainFrame::OnClickSampleView(wxDataViewEvent& event)
if (column->GetTitle() != "Favorite") if (column->GetTitle() != "Favorite")
{ {
wxLogDebug("Playing sample..");
m_MediaCtrl->Load(sample_path); m_MediaCtrl->Load(sample_path);
if (bAutoplay) if (bAutoplay)
{ {
wxLogDebug("Playing %s", filename);
m_MediaCtrl->Play(); m_MediaCtrl->Play();
m_Timer->Start(100, wxTIMER_CONTINUOUS); m_Timer->Start(100, wxTIMER_CONTINUOUS);
} }
@ -959,44 +959,127 @@ void MainFrame::OnShowCollectionViewContextMenu(wxDataViewEvent& event)
Settings settings(this, m_ConfigFilepath, m_DatabaseFilepath); Settings settings(this, m_ConfigFilepath, m_DatabaseFilepath);
Database db(*m_InfoBar); Database db(*m_InfoBar);
wxDataViewItem item = event.GetItem(); wxDataViewItem selected_item = event.GetItem();
wxString selection = m_CollectionView->GetItemText(item); wxString item_name = m_CollectionView->GetItemText(selected_item);
wxMenu menu; wxMenu menu;
menu.Append(MN_CreateFolder, "Create new folder"); if (m_CollectionView->IsContainer(selected_item))
{
// Container menu items
// container_menu.Append(MN_CreateFolder, "Create new folder");
menu.Append(MN_RemoveFolder, "Remove folder"); menu.Append(MN_RemoveFolder, "Remove folder");
menu.Append(MN_RemoveFolder, "Remove sample");
if (!bFiltered) if (!bFiltered)
menu.Append(MN_FilterSampleView, "Filter sample view"); menu.Append(MN_FilterSampleView, "Filter sample view");
else else
menu.Append(MN_FilterSampleView, "Clear filter"); menu.Append(MN_FilterSampleView, "Clear filter");
}
if (item.IsOk() && m_CollectionView->IsContainer(item)) else
{ {
// Child menu items
menu.Append(MN_RemoveSample, "Remove sample");
menu.Append(MN_ShowInLibrary, "Show sample in library");
}
if (selected_item.IsOk() && m_CollectionView->IsContainer(selected_item))
{
wxLogDebug("Container menu");
switch (m_CollectionView->GetPopupMenuSelectionFromUser(menu, event.GetPosition())) switch (m_CollectionView->GetPopupMenuSelectionFromUser(menu, event.GetPosition()))
{ {
case MN_CreateFolder: // case MN_CreateFolder:
break; // break;
case MN_RemoveFolder: case MN_RemoveFolder:
{
// wxDataViewItem selected = m_CollectionView->GetSelection();
// wxString folder_name = m_CollectionView->GetItemText(selected);
wxString msg;
wxMessageDialog deleteEmptyFolderDialog(this, wxString::Format(
"Are you sure you want to delete "
"%s from collections?",
item_name),
wxMessageBoxCaptionStr,
wxYES_NO | wxNO_DEFAULT |
wxICON_QUESTION | wxSTAY_ON_TOP);
wxMessageDialog deleteFilledFolderDialog(this, wxString::Format(
"Are you sure you want to delete "
"%s and all sample inside %s from collections?",
item_name, item_name),
wxMessageBoxCaptionStr,
wxYES_NO | wxNO_DEFAULT |
wxICON_QUESTION | wxSTAY_ON_TOP);
if(m_CollectionView->GetChildCount(selected_item) <= 0)
{
switch (deleteEmptyFolderDialog.ShowModal())
{
case wxID_YES:
if (selected_item.IsOk() && m_CollectionView->IsContainer(selected_item) && item_name != "Favourites")
{
m_CollectionView->DeleteItem(selected_item);
db.RemoveFolderFromCollections(item_name.ToStdString());
msg = wxString::Format("%s deleted from collections successfully.", item_name);
}
else
if(item_name == "Favourites")
msg = wxString::Format("Error! Default folder %s cannot be deleted.", item_name);
else
msg = wxString::Format("Error! %s is not a folder, cannot delete from collections.", item_name);
break; break;
case MN_RemoveSample: case wxID_NO:
break;
default:
return;
}
}
else
{
switch (deleteFilledFolderDialog.ShowModal())
{
case wxID_YES:
if (selected_item.IsOk() && m_CollectionView->IsContainer(selected_item) && item_name != "Favourites")
{
m_CollectionView->DeleteChildren(selected_item);
m_CollectionView->DeleteItem(selected_item);
db.RemoveFolderFromCollections(item_name.ToStdString());
msg = wxString::Format("%s and all samples inside %s have been deleted from collections successfully.",
item_name, item_name);
}
else
if(item_name == "Favourites")
msg = wxString::Format("Error! Default folder %s cannot be deleted.", item_name);
else
msg = wxString::Format("Error! %s is not a folder, cannot delete from collections.", item_name);
break;
case wxID_NO:
break;
default:
return;
}
}
m_InfoBar->ShowMessage(msg, wxICON_INFORMATION);
}
break; break;
case MN_FilterSampleView: case MN_FilterSampleView:
{ {
if (!bFiltered) if (!bFiltered)
{ {
wxDataViewItem selected = event.GetItem(); // wxDataViewItem selected_item = event.GetItem();
// wxString folder_name = m_CollectionView->GetItemText(selected_item);
wxString folder_name = m_CollectionView->GetItemText(selected);
try try
{ {
wxVector<wxVector<wxVariant>> dataset; wxVector<wxVector<wxVariant>> dataset;
if (db.FilterDatabaseByFolderName(dataset, folder_name.ToStdString()).empty()) if (db.FilterDatabaseByFolderName(dataset, item_name.ToStdString()).empty())
{ {
wxLogDebug("Error! Database is empty."); wxLogDebug("Error! Database is empty.");
} }
@ -1004,7 +1087,7 @@ void MainFrame::OnShowCollectionViewContextMenu(wxDataViewEvent& event)
{ {
m_SampleListView->DeleteAllItems(); m_SampleListView->DeleteAllItems();
std::cout << folder_name << std::endl; std::cout << item_name << std::endl;
for (auto data : dataset) for (auto data : dataset)
{ {
@ -1021,7 +1104,29 @@ void MainFrame::OnShowCollectionViewContextMenu(wxDataViewEvent& event)
} }
else else
{ {
// TODO: clear the filter try
{
wxVector<wxVector<wxVariant>> dataset;
if (db.FilterDatabaseBySampleName(dataset, "").empty())
{
wxLogDebug("Error! Database is empty.");
}
else
{
m_SampleListView->DeleteAllItems();
for (auto data : dataset)
{
m_SampleListView->AppendItem(data);
}
}
}
catch (...)
{
std::cerr << "Error loading data." << std::endl;
}
bFiltered = false; bFiltered = false;
} }
} }
@ -1030,6 +1135,55 @@ void MainFrame::OnShowCollectionViewContextMenu(wxDataViewEvent& event)
return; return;
} }
} }
else if (selected_item.IsOk() && !m_CollectionView->IsContainer(selected_item))
{
wxLogDebug("Child menu");
switch (m_CollectionView->GetPopupMenuSelectionFromUser(menu, event.GetPosition()))
{
case MN_RemoveSample:
for(int i = 0; i < m_SampleListView->GetItemCount(); i++)
{
wxString matched_sample = settings.IsShowFileExtension() ?
m_SampleListView->GetTextValue(i, 1).BeforeLast('.') : m_SampleListView->GetTextValue(i, 1);
if(item_name == matched_sample)
{
wxLogDebug("Found match");
m_SampleListView->SetValue(wxVariant(wxDataViewIconText(wxEmptyString, wxIcon(ICON_GREYSCALE))), i, 0);
db.UpdateFavoriteColumn(matched_sample.ToStdString(), 0);
db.UpdateFavoriteFolder(matched_sample.ToStdString(), "");
wxLogDebug("Item name: %s", matched_sample);
m_CollectionView->DeleteItem(selected_item);
}
}
break;
case MN_ShowInLibrary:
for(int i = 0; i < m_SampleListView->GetItemCount(); i++)
{
wxString matched_sample = settings.IsShowFileExtension() ?
m_SampleListView->GetTextValue(i, 1).BeforeLast('.') : m_SampleListView->GetTextValue(i, 1);
if(item_name == matched_sample)
{
wxLogDebug("Found match");
wxDataViewItem matched_item = m_SampleListView->RowToItem(i);
m_SampleListView->UnselectAll();
m_SampleListView->SelectRow(i);
m_SampleListView->EnsureVisible(matched_item);
}
}
break;
default:
return;
}
}
} }
void MainFrame::OnShowSampleListViewContextMenu(wxDataViewEvent& event) void MainFrame::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
@ -1076,9 +1230,15 @@ void MainFrame::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
menu.Append(MN_TrashSample, "Trash"); menu.Append(MN_TrashSample, "Trash");
if (m_SampleListView->GetSelectedItemsCount() <= 1) if (m_SampleListView->GetSelectedItemsCount() <= 1)
{
menu.Append(MN_EditTagSample, "Edit tags")->Enable(true); menu.Append(MN_EditTagSample, "Edit tags")->Enable(true);
menu.Append(MN_OpenFile, "Open file in file manager")->Enable(true);
}
else else
{
menu.Append(MN_EditTagSample, "Edit tags")->Enable(false); menu.Append(MN_EditTagSample, "Edit tags")->Enable(false);
menu.Append(MN_OpenFile, "Open file in file manager")->Enable(false);
}
switch (m_SampleListView->GetPopupMenuSelectionFromUser(menu, event.GetPosition())) switch (m_SampleListView->GetPopupMenuSelectionFromUser(menu, event.GetPosition()))
{ {
@ -1404,6 +1564,9 @@ void MainFrame::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
} }
} }
break; break;
case MN_OpenFile:
wxExecute(wxString::Format("xdg-open '%s'", sample_path.BeforeLast('/')));
break;
case wxID_NONE: case wxID_NONE:
return; return;
default: default: