Skip to content

Commit

Permalink
#5399: Adjust Mission Info dialog to handle the tree view edit events…
Browse files Browse the repository at this point in the history
… correctly
  • Loading branch information
codereader committed Nov 14, 2020
1 parent 2fbca0f commit ef72964
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
33 changes: 23 additions & 10 deletions plugins/dm.editing/MissionInfoEditDialog.cpp
Expand Up @@ -100,24 +100,24 @@ void MissionInfoEditDialog::populateWindow()
// Replace the list control with our own TreeView
wxWindow* existing = findNamedObject<wxWindow>(this, "MissionInfoEditDialogMissionTitleList");

wxutil::TreeView* treeview = wxutil::TreeView::CreateWithModel(existing->GetParent(), _missionTitleStore, wxDV_SINGLE);
_missionTitleView = wxutil::TreeView::CreateWithModel(existing->GetParent(), _missionTitleStore, wxDV_SINGLE);

treeview->SetName("MissionInfoEditDialogMissionTitleList");
treeview->SetMinSize(wxSize(-1, 150));
_missionTitleView->SetName("MissionInfoEditDialogMissionTitleList");
_missionTitleView->SetMinSize(wxSize(-1, 150));

// Display name column with icon
treeview->AppendTextColumn(_("#"), _missionTitleColumns.number.getColumnIndex(),
_missionTitleView->AppendTextColumn(_("#"), _missionTitleColumns.number.getColumnIndex(),
wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT);

treeview->AppendTextColumn(_("Title"), _missionTitleColumns.title.getColumnIndex(),
_missionTitleView->AppendTextColumn(_("Title"), _missionTitleColumns.title.getColumnIndex(),
wxDATAVIEW_CELL_EDITABLE, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT);

treeview->Connect(wxEVT_DATAVIEW_ITEM_EDITING_DONE,
_missionTitleView->Connect(wxEVT_DATAVIEW_ITEM_EDITING_DONE,
wxDataViewEventHandler(MissionInfoEditDialog::onTitleEdited), nullptr, this);
treeview->Connect(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU,
_missionTitleView->Connect(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU,
wxDataViewEventHandler(MissionInfoEditDialog::onTitleContextMenu), nullptr, this);

existing->GetContainingSizer()->Replace(existing, treeview);
existing->GetContainingSizer()->Replace(existing, _missionTitleView);
existing->Destroy();

// Add the preview widget
Expand Down Expand Up @@ -216,6 +216,11 @@ void MissionInfoEditDialog::onEditReadme(wxCommandEvent& ev)

void MissionInfoEditDialog::onTitleEdited(wxDataViewEvent& ev)
{
if (ev.IsEditCancelled())
{
return;
}

wxutil::TreeModel::Row row(ev.GetItem(), *_missionTitleStore);

int titleNum = row[_missionTitleColumns.number].getInteger();
Expand All @@ -224,9 +229,17 @@ void MissionInfoEditDialog::onTitleEdited(wxDataViewEvent& ev)

assert(titleNum >= 0 && titleNum < static_cast<int>(list.size()));

if (ev.GetColumn() == _missionTitleColumns.title.getColumnIndex())
// The ev.GetColumn() method returns -1 for wx3.0, but GetDataViewColumn is populated
if (ev.GetDataViewColumn() == _missionTitleView->GetColumn(_missionTitleColumns.title.getColumnIndex()))
{
list[titleNum] = static_cast<std::string>(ev.GetValue());
#if wxCHECK_VERSION(3, 1, 0)
// wx 3.1+ delivers the new value through the event
std::string title = ev.GetValue().GetString().ToStdString();
#else
// wx 3.0.x already has the value set in the model
std::string title = row[_missionTitleColumns.title];
#endif
list[titleNum] = title;
_darkmodTxt->setMissionTitles(list);
}
}
Expand Down
2 changes: 2 additions & 0 deletions plugins/dm.editing/MissionInfoEditDialog.h
Expand Up @@ -5,6 +5,7 @@
#include "wxutil/dialog/DialogBase.h"
#include "wxutil/XmlResourceBasedWidget.h"
#include "wxutil/TreeModel.h"
#include "wxutil/TreeView.h"
#include "wxutil/menu/PopupMenu.h"

#include "DarkmodTxt.h"
Expand Down Expand Up @@ -38,6 +39,7 @@ class MissionInfoEditDialog :

MissionTitleColumns _missionTitleColumns;
wxutil::TreeModel::Ptr _missionTitleStore;
wxutil::TreeView* _missionTitleView;

// Context menu
wxutil::PopupMenuPtr _missionTitlesContextMenu;
Expand Down

0 comments on commit ef72964

Please sign in to comment.