Add collection tab child item popup menu, find file in library or open system file manager.
This commit is contained in:
parent
f4c46a6b5f
commit
a6275f5e6c
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue