Fix tag editor not changing tags and can now select multiple items at once.

This commit is contained in:
apoorv569 2021-04-08 00:21:00 +05:30
parent 5c11792df1
commit e38fef36de
4 changed files with 171 additions and 31 deletions

View File

@ -29,6 +29,7 @@
#include "Tags.hpp" #include "Tags.hpp"
// #include "TreeItemDialog.hpp" // #include "TreeItemDialog.hpp"
#include "Serialize.hpp" #include "Serialize.hpp"
#include "wx/dataview.h"
#include <wx/fswatcher.h> #include <wx/fswatcher.h>
@ -153,7 +154,7 @@ Browser::Browser(wxWindow* window)
// Initializing wxDataViewListCtrl on bottom panel. // Initializing wxDataViewListCtrl on bottom panel.
m_SampleListView = new wxDataViewListCtrl(m_BottomRightPanel, BC_SampleListView, wxDefaultPosition, wxDefaultSize, m_SampleListView = new wxDataViewListCtrl(m_BottomRightPanel, BC_SampleListView, wxDefaultPosition, wxDefaultSize,
wxDV_SINGLE | wxDV_HORIZ_RULES | wxDV_VERT_RULES); wxDV_MULTIPLE | wxDV_HORIZ_RULES | wxDV_VERT_RULES);
// Adding columns to wxDataViewListCtrl. // Adding columns to wxDataViewListCtrl.
m_SampleListView->AppendToggleColumn("", wxDATAVIEW_CELL_ACTIVATABLE, 30, wxALIGN_CENTER, wxDATAVIEW_COL_RESIZABLE); m_SampleListView->AppendToggleColumn("", wxDATAVIEW_CELL_ACTIVATABLE, 30, wxALIGN_CENTER, wxDATAVIEW_COL_RESIZABLE);
@ -708,6 +709,8 @@ void Browser::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
wxString sample = selection.Contains(wxString::Format(".%s", extension)) ? wxString sample = selection.Contains(wxString::Format(".%s", extension)) ?
sample_with_extension : sample_without_extension; sample_with_extension : sample_without_extension;
std::string filename = sample.AfterLast('/').BeforeLast('.').ToStdString();
wxMenu menu; wxMenu menu;
if (m_SampleListView->GetToggleValue(selected_row, 0)) if (m_SampleListView->GetToggleValue(selected_row, 0))
@ -717,11 +720,17 @@ void Browser::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
menu.Append(MN_DeleteSample, "Delete"); menu.Append(MN_DeleteSample, "Delete");
menu.Append(MN_TrashSample, "Trash"); menu.Append(MN_TrashSample, "Trash");
menu.Append(MN_EditTagSample, "Edit tags");
if (m_SampleListView->GetSelectedItemsCount() <= 1)
menu.Append(MN_EditTagSample, "Edit tags")->Enable(true);
else
menu.Append(MN_EditTagSample, "Edit tags")->Enable(false);
switch (m_SampleListView->GetPopupMenuSelectionFromUser(menu, event.GetPosition())) switch (m_SampleListView->GetPopupMenuSelectionFromUser(menu, event.GetPosition()))
{ {
case MN_FavoriteSample: case MN_FavoriteSample:
if (m_SampleListView->GetSelectedItemsCount() <= 1)
{
if (m_SampleListView->GetToggleValue(selected_row, 0)) if (m_SampleListView->GetToggleValue(selected_row, 0))
{ {
m_SampleListView->SetToggleValue(false, selected_row, 0); m_SampleListView->SetToggleValue(false, selected_row, 0);
@ -732,10 +741,35 @@ void Browser::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
m_SampleListView->SetToggleValue(true, selected_row, 0); m_SampleListView->SetToggleValue(true, selected_row, 0);
msg = wxString::Format("Toggle: true"); msg = wxString::Format("Toggle: true");
} }
}
else
{
wxDataViewItemArray items;
int rows = m_SampleListView->GetSelections(items);
for (int i = 0; i < rows; i++)
{
int row = m_SampleListView->ItemToRow(items[i]);
if (m_SampleListView->GetToggleValue(row, 0))
{
m_SampleListView->SetToggleValue(false, row, 0);
msg = wxString::Format("Toggle: false");
}
else
{
m_SampleListView->SetToggleValue(true, row, 0);
msg = wxString::Format("Toggle: true");
}
}
}
break; break;
case MN_DeleteSample: case MN_DeleteSample:
{ {
wxMessageDialog msgDialog(this, wxString::Format( wxDataViewItemArray items;
int rows = m_SampleListView->GetSelections(items);
wxMessageDialog singleMsgDialog(this, wxString::Format(
"Are you sure you want to delete " "Are you sure you want to delete "
"%s from database? " "%s from database? "
"Warning this change is " "Warning this change is "
@ -745,12 +779,28 @@ void Browser::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
wxYES_NO | wxNO_DEFAULT | wxYES_NO | wxNO_DEFAULT |
wxICON_QUESTION | wxSTAY_ON_TOP | wxICON_QUESTION | wxSTAY_ON_TOP |
wxCENTER); wxCENTER);
switch (msgDialog.ShowModal())
wxMessageDialog multipleMsgDialog(this, wxString::Format(
"Are you sure you want to delete "
"%d selected samples from database? "
"Warning this change is "
"permanent, and cannot be "
"undone.", rows),
wxMessageBoxCaptionStr,
wxYES_NO | wxNO_DEFAULT |
wxICON_QUESTION | wxSTAY_ON_TOP |
wxCENTER);
if (m_SampleListView->GetSelectedItemsCount() <= 1)
{
switch (singleMsgDialog.ShowModal())
{ {
case wxID_YES: case wxID_YES:
{
msg = wxString::Format("Selected row: %d :: Sample: %s", selected_row, selection); msg = wxString::Format("Selected row: %d :: Sample: %s", selected_row, selection);
db.RemoveSampleFromDatabase(selection.ToStdString()); db.RemoveSampleFromDatabase(selection.ToStdString());
m_SampleListView->DeleteItem(selected_row); m_SampleListView->DeleteItem(selected_row);
}
break; break;
case wxID_NO: case wxID_NO:
msg = "Cancel delete"; msg = "Cancel delete";
@ -759,12 +809,37 @@ void Browser::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
msg = "Unexpected wxMessageDialog return code!"; msg = "Unexpected wxMessageDialog return code!";
} }
} }
else
{
switch (multipleMsgDialog.ShowModal())
{
case wxID_YES:
{
for (int i = 0; i < rows; i++)
{
int row = m_SampleListView->ItemToRow(items[i]);
wxString sel = m_SampleListView->GetTextValue(row, 1);
db.RemoveSampleFromDatabase(sel.ToStdString());
m_SampleListView->DeleteItem(row);
}
}
break;
case wxID_NO:
msg = "Cancel delete";
break;
default:
msg = "Unexpected wxMessageDialog return code!";
}
}
}
break; break;
case MN_TrashSample: case MN_TrashSample:
{ {
if (db.IsTrashed(selection.BeforeLast('.').ToStdString())) if (db.IsTrashed(selection.BeforeLast('.').ToStdString()))
msg = "Already trashed.."; msg = "Already trashed..";
else else
{
if (m_SampleListView->GetSelectedItemsCount() <= 1)
{ {
msg = "Trashing.."; msg = "Trashing..";
if (m_SampleListView->GetToggleValue(selected_row, 0)) if (m_SampleListView->GetToggleValue(selected_row, 0))
@ -776,11 +851,33 @@ void Browser::OnShowSampleListViewContextMenu(wxDataViewEvent& event)
m_TrashedItems->AppendItem(trash_root_node, selection); m_TrashedItems->AppendItem(trash_root_node, selection);
m_SampleListView->DeleteItem(selected_row); m_SampleListView->DeleteItem(selected_row);
} }
else
{
wxDataViewItemArray items;
int rows = m_SampleListView->GetSelections(items);
for (int i = 0; i < rows; i++)
{
int row = m_SampleListView->ItemToRow(items[i]);
wxString sel = m_SampleListView->GetTextValue(row, 1);
if (m_SampleListView->GetToggleValue(row, 0))
{
m_SampleListView->SetToggleValue(false, row, 0);
db.UpdateFavoriteColumn(sel.BeforeLast('.').ToStdString(), 0);
}
db.UpdateTrashColumn(sel.BeforeLast('.').ToStdString(), 1);
m_TrashedItems->AppendItem(trash_root_node, sel);
m_SampleListView->DeleteItem(row);
}
}
}
} }
break; break;
case MN_EditTagSample: case MN_EditTagSample:
{ {
tagEditor = new TagEditor(this, (std::string&)sample, *m_InfoBar); tagEditor = new TagEditor(this, filename, *m_InfoBar);
switch (tagEditor->ShowModal()) switch (tagEditor->ShowModal())
{ {

View File

@ -229,6 +229,45 @@ void Database::UpdateFavoriteColumn(std::string filename, int value)
} }
} }
void Database::UpdateSamplePack(std::string filename, std::string samplePack)
{
try
{
rc = sqlite3_open("sample.hive", &m_Database);
std::string update = "UPDATE SAMPLES SET SAMPLEPACK = ? WHERE FILENAME = ?;";
rc = sqlite3_prepare_v2(m_Database, update.c_str(), update.size(), &m_Stmt, NULL);
rc = sqlite3_bind_text(m_Stmt, 1, samplePack.c_str(), samplePack.size(), SQLITE_STATIC);
rc = sqlite3_bind_text(m_Stmt, 2, filename.c_str(), filename.size(), SQLITE_STATIC);
if (sqlite3_step(m_Stmt) == SQLITE_ROW)
{
wxLogDebug("Record found, updating..");
}
rc = sqlite3_finalize(m_Stmt);
if (rc != SQLITE_OK)
{
wxMessageDialog msgDialog(NULL, "Error! Cannot update record.", "Error", wxOK | wxICON_ERROR);
msgDialog.ShowModal();
sqlite3_free(m_ErrMsg);
}
else
{
wxLogDebug("Updated record successfully.");
}
sqlite3_close(m_Database);
}
catch (const std::exception &exception)
{
wxLogDebug(exception.what());
}
}
void Database::UpdateSampleType(std::string filename, std::string type) void Database::UpdateSampleType(std::string filename, std::string type)
{ {
try try

View File

@ -41,6 +41,7 @@ class Database
void UpdateFavoriteFolderDatabase(std::string filename, void UpdateFavoriteFolderDatabase(std::string filename,
std::string folderName); std::string folderName);
void UpdateTrashColumn(std::string filename, int value); void UpdateTrashColumn(std::string filename, int value);
void UpdateSamplePack(std::string filename, std::string samplePack);
void UpdateSampleType(std::string filename, std::string type); void UpdateSampleType(std::string filename, std::string type);
// ------------------------------------------------------------------- // -------------------------------------------------------------------

View File

@ -214,9 +214,8 @@ void TagEditor::OnClickApply(wxCommandEvent& event)
wxString genre = m_GenreText->GetValue(); wxString genre = m_GenreText->GetValue();
wxString comment = m_CommentText->GetValue(); wxString comment = m_CommentText->GetValue();
wxString type = m_SampleTypeChoice->GetStringSelection(); wxString type = m_SampleTypeChoice->GetStringSelection();
wxString filename = wxString(m_Filename).AfterLast('/').BeforeLast('.');
std::string sampleType = db.GetSampleType(filename.ToStdString()); std::string sampleType = db.GetSampleType(m_Filename);
wxString warning_msg = "Are you sure you want save these changes?"; wxString warning_msg = "Are you sure you want save these changes?";
wxMessageDialog* msgDialog = new wxMessageDialog(this, warning_msg, wxMessageDialog* msgDialog = new wxMessageDialog(this, warning_msg,
@ -244,6 +243,10 @@ void TagEditor::OnClickApply(wxCommandEvent& event)
wxLogDebug("Changing artist tag.."); wxLogDebug("Changing artist tag..");
tags.SetArtist(artist.ToStdString()); tags.SetArtist(artist.ToStdString());
db.UpdateSamplePack(m_Filename, artist.ToStdString());
wxLogDebug("SAMPLE FILENAME HERE: %s", m_Filename);
info_msg = wxString::Format("Successfully changed artist tag to %s", artist); info_msg = wxString::Format("Successfully changed artist tag to %s", artist);
} }
@ -274,7 +277,7 @@ void TagEditor::OnClickApply(wxCommandEvent& event)
if (m_SampleTypeCheck->GetValue() && m_SampleTypeChoice->GetStringSelection() != sampleType) if (m_SampleTypeCheck->GetValue() && m_SampleTypeChoice->GetStringSelection() != sampleType)
{ {
wxLogDebug("Changing type tag.."); wxLogDebug("Changing type tag..");
db.UpdateSampleType(filename.ToStdString(), type.ToStdString()); db.UpdateSampleType(m_Filename, type.ToStdString());
info_msg = wxString::Format("Successfully changed type tag to %s", type); info_msg = wxString::Format("Successfully changed type tag to %s", type);
} }
@ -282,7 +285,7 @@ void TagEditor::OnClickApply(wxCommandEvent& event)
case wxID_NO: case wxID_NO:
break; break;
default: default:
return; info_msg = "Error, cannot change tag!";
} }
m_InfoBar.ShowMessage(info_msg, wxICON_INFORMATION); m_InfoBar.ShowMessage(info_msg, wxICON_INFORMATION);