FIX:(mac) cannot use copy and paste in imgui input box

Change-Id: I4024bfbe178f86a5d456de47ddd82bc028d4788c
This commit is contained in:
liz.li 2023-02-09 18:22:12 +08:00 committed by Lane.Wei
parent 639f2a57ae
commit adb6583458
1 changed files with 89 additions and 10 deletions

View File

@ -2148,6 +2148,13 @@ void MainFrame::init_menubar_as_editor()
wxString hotkey_delete = "Del"; wxString hotkey_delete = "Del";
#endif #endif
auto handle_key_event = [](wxKeyEvent& evt) {
if (wxGetApp().imgui()->update_key_data(evt)) {
wxGetApp().plater()->get_current_canvas3D()->render();
return true;
}
return false;
};
#ifndef __APPLE__ #ifndef __APPLE__
// BBS undo // BBS undo
append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z", append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z",
@ -2189,39 +2196,96 @@ void MainFrame::init_menubar_as_editor()
#else #else
// BBS undo // BBS undo
append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z", append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z",
_L("Undo"), [this](wxCommandEvent&) { m_plater->undo(); }, _L("Undo"), [this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.SetControlDown(true);
e.m_keyCode = 'Z';
if (handle_key_event(e)) {
return;
}
m_plater->undo(); },
"", nullptr, [this](){return m_plater->can_undo(); }, this); "", nullptr, [this](){return m_plater->can_undo(); }, this);
// BBS redo // BBS redo
append_menu_item(editMenu, wxID_ANY, _L("Redo") + "\t" + ctrl + "Y", append_menu_item(editMenu, wxID_ANY, _L("Redo") + "\t" + ctrl + "Y",
_L("Redo"), [this](wxCommandEvent&) { m_plater->redo(); }, _L("Redo"), [this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.SetControlDown(true);
e.m_keyCode = 'Y';
if (handle_key_event(e)) {
return;
}
m_plater->redo(); },
"", nullptr, [this](){return m_plater->can_redo(); }, this); "", nullptr, [this](){return m_plater->can_redo(); }, this);
editMenu->AppendSeparator(); editMenu->AppendSeparator();
// BBS Cut TODO // BBS Cut TODO
append_menu_item(editMenu, wxID_ANY, _L("Cut") + "\t" + ctrl + "X", append_menu_item(editMenu, wxID_ANY, _L("Cut") + "\t" + ctrl + "X",
_L("Cut selection to clipboard"), [this](wxCommandEvent&) {m_plater->cut_selection_to_clipboard(); }, _L("Cut selection to clipboard"), [this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.SetControlDown(true);
e.m_keyCode = 'X';
if (handle_key_event(e)) {
return;
}
m_plater->cut_selection_to_clipboard(); },
"", nullptr, [this]() {return m_plater->can_copy_to_clipboard(); }, this); "", nullptr, [this]() {return m_plater->can_copy_to_clipboard(); }, this);
// BBS Copy // BBS Copy
append_menu_item(editMenu, wxID_ANY, _L("Copy") + "\t" + ctrl + "C", append_menu_item(editMenu, wxID_ANY, _L("Copy") + "\t" + ctrl + "C",
_L("Copy selection to clipboard"), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, _L("Copy selection to clipboard"), [this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.SetControlDown(true);
e.m_keyCode = 'C';
if (handle_key_event(e)) {
return;
}
m_plater->copy_selection_to_clipboard(); },
"", nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this); "", nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this);
// BBS Paste // BBS Paste
append_menu_item(editMenu, wxID_ANY, _L("Paste") + "\t" + ctrl + "V", append_menu_item(editMenu, wxID_ANY, _L("Paste") + "\t" + ctrl + "V",
_L("Paste clipboard"), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, _L("Paste clipboard"), [this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.SetControlDown(true);
e.m_keyCode = 'V';
if (handle_key_event(e)) {
return;
}
m_plater->paste_from_clipboard(); },
"", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this); "", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this);
#if 0 #if 0
// BBS Delete selected // BBS Delete selected
append_menu_item(editMenu, wxID_ANY, _L("Delete selected") + "\tBackSpace", append_menu_item(editMenu, wxID_ANY, _L("Delete selected") + "\tBackSpace",
_L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); }, _L("Deletes the current selection"),[this](wxCommandEvent&) {
m_plater->remove_selected();
},
"", nullptr, [this](){return can_delete(); }, this); "", nullptr, [this](){return can_delete(); }, this);
#endif #endif
//BBS: delete all //BBS: delete all
append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\t" + ctrl + "D", append_menu_item(editMenu, wxID_ANY, _L("Delete all") + "\t" + ctrl + "D",
_L("Deletes all objects"),[this](wxCommandEvent&) { m_plater->delete_all_objects_from_model(); }, _L("Deletes all objects"),[this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.SetControlDown(true);
e.m_keyCode = 'D';
if (handle_key_event(e)) {
return;
}
m_plater->delete_all_objects_from_model(); },
"", nullptr, [this](){return can_delete_all(); }, this); "", nullptr, [this](){return can_delete_all(); }, this);
editMenu->AppendSeparator(); editMenu->AppendSeparator();
// BBS Clone Selected // BBS Clone Selected
append_menu_item(editMenu, wxID_ANY, _L("Clone selected") + "\t" + ctrl + "M", append_menu_item(editMenu, wxID_ANY, _L("Clone selected") + "\t" + ctrl + "M",
_L("Clone copies of selections"),[this](wxCommandEvent&) { _L("Clone copies of selections"),[this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.SetControlDown(true);
e.m_keyCode = 'M';
if (handle_key_event(e)) {
return;
}
m_plater->clone_selection(); m_plater->clone_selection();
}, },
"", nullptr, [this](){return can_clone(); }, this); "", nullptr, [this](){return can_clone(); }, this);
@ -2230,11 +2294,26 @@ void MainFrame::init_menubar_as_editor()
// BBS Select All // BBS Select All
append_menu_item(editMenu, wxID_ANY, _L("Select all") + "\t" + ctrl + "A", append_menu_item(editMenu, wxID_ANY, _L("Select all") + "\t" + ctrl + "A",
_L("Selects all objects"), [this](wxCommandEvent&) { m_plater->select_all(); }, _L("Selects all objects"), [this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.SetControlDown(true);
e.m_keyCode = 'A';
if (handle_key_event(e)) {
return;
}
m_plater->select_all(); },
"", nullptr, [this](){return can_select(); }, this); "", nullptr, [this](){return can_select(); }, this);
// BBS Deslect All // BBS Deslect All
append_menu_item(editMenu, wxID_ANY, _L("Deselect all") + "\tEsc", append_menu_item(editMenu, wxID_ANY, _L("Deselect all") + "\tEsc",
_L("Deselects all objects"), [this](wxCommandEvent&) { m_plater->deselect_all(); }, _L("Deselects all objects"), [this, handle_key_event](wxCommandEvent&) {
wxKeyEvent e;
e.SetEventType(wxEVT_KEY_DOWN);
e.m_keyCode = WXK_ESCAPE;
if (handle_key_event(e)) {
return;
}
m_plater->deselect_all(); },
"", nullptr, [this](){return can_deselect(); }, this); "", nullptr, [this](){return can_deselect(); }, this);
//editMenu->AppendSeparator(); //editMenu->AppendSeparator();
//append_menu_check_item(editMenu, wxID_ANY, _L("Show Model Mesh(TODO)"), //append_menu_check_item(editMenu, wxID_ANY, _L("Show Model Mesh(TODO)"),