diff --git a/aegisub/src/hotkey_data_view_model.cpp b/aegisub/src/hotkey_data_view_model.cpp index 4b6393988..3aa7428f8 100644 --- a/aegisub/src/hotkey_data_view_model.cpp +++ b/aegisub/src/hotkey_data_view_model.cpp @@ -145,10 +145,11 @@ public: { } - void AddChild(Combo const& combo) { + wxDataViewItem AddChild(Combo const& combo) { children.push_back(HotkeyModelCombo(this, combo)); visible_items.push_back(wxDataViewItem(&children.back())); model->ItemAdded(wxDataViewItem(this), wxDataViewItem(&children.back())); + return wxDataViewItem(&children.back()); } void Delete(wxDataViewItem const& item) { @@ -307,8 +308,8 @@ bool HotkeyDataViewModel::SetValue(wxVariant const& variant, wxDataViewItem cons return get(item)->SetValue(variant, col); } -void HotkeyDataViewModel::New(wxDataViewItem item) { - if (!item.IsOk()) return; +wxDataViewItem HotkeyDataViewModel::New(wxDataViewItem item) { + if (!item.IsOk()) return wxDataViewItem(); if (!IsContainer(item)) item = GetParent(item); @@ -316,7 +317,7 @@ void HotkeyDataViewModel::New(wxDataViewItem item) { HotkeyModelCategory *ctx = static_cast(item.GetID()); wxVariant name; ctx->GetValue(name, 0); - ctx->AddChild(Combo(STD_STR(name.GetString()), "", std::vector())); + return ctx->AddChild(Combo(STD_STR(name.GetString()), "", std::vector())); } void HotkeyDataViewModel::Delete(wxDataViewItem const& item) { diff --git a/aegisub/src/hotkey_data_view_model.h b/aegisub/src/hotkey_data_view_model.h index 62dcfba62..50b9a8f7a 100644 --- a/aegisub/src/hotkey_data_view_model.h +++ b/aegisub/src/hotkey_data_view_model.h @@ -46,7 +46,9 @@ public: HotkeyDataViewModel(Preferences *parent); /// Create a new hotkey in the current context - void New(wxDataViewItem item); + /// @param item A context or hotkey entry + /// @return The new hotkey + wxDataViewItem New(wxDataViewItem item); /// Delete the currently selected hotkey void Delete(wxDataViewItem const& item); /// Update the hotkeys with changes made to the model diff --git a/aegisub/src/preferences.cpp b/aegisub/src/preferences.cpp index 9e0d623da..8b82a74ce 100644 --- a/aegisub/src/preferences.cpp +++ b/aegisub/src/preferences.cpp @@ -417,16 +417,29 @@ Interface_Hotkeys::Interface_Hotkeys(wxTreebook *book, Preferences *parent) SetSizerAndFit(sizer); } +static void edit_item(wxDataViewCtrl *dvc, wxDataViewItem item) { +#if wxCHECK_VERSION(2, 9, 4) + dvc->EditItem(item, dvc->GetColumn(0)); +#else + dvc->StartEditor(item, 0); +#endif +} + void Interface_Hotkeys::OnNewButton(wxCommandEvent&) { - model->New(dvc->GetSelection()); + wxDataViewItem sel = dvc->GetSelection(); + dvc->ExpandAncestors(sel); + dvc->Expand(sel); + + wxDataViewItem new_item = model->New(sel); + if (new_item.IsOk()) { + dvc->Select(new_item); + dvc->EnsureVisible(new_item); + edit_item(dvc, new_item); + } } void Interface_Hotkeys::OnEditButton(wxCommandEvent&) { -#if wxCHECK_VERSION(2, 9, 4) - dvc->EditItem(dvc->GetSelection(), dvc->GetColumn(0)); -#else - dvc->StartEditor(dvc->GetSelection(), 0); -#endif + edit_item(dvc, dvc->GetSelection()); } void Interface_Hotkeys::OnDeleteButton(wxCommandEvent&) {