From e1e4bf74ba98e261616a1fa09466cf6a992e85c7 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 12 Dec 2018 13:18:38 +0100 Subject: [PATCH] ObjectList: first column editing --- src/slic3r/GUI/GUI_ObjectList.cpp | 17 ++++++--------- src/slic3r/GUI/wxExtensions.cpp | 36 +++++++++++++++++++++++++++++++ src/slic3r/GUI/wxExtensions.hpp | 10 +++++++-- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 22ebc093f..bf7e7255a 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -337,9 +337,7 @@ void ObjectList::selection_changed() void ObjectList::OnChar(wxKeyEvent& event) { -// printf("KeyDown event\n"); if (event.GetKeyCode() == WXK_BACK){ - printf("WXK_BACK\n"); remove(); } else if (wxGetKeyState(wxKeyCode('A')) && wxGetKeyState(WXK_SHIFT)) @@ -370,15 +368,14 @@ void ObjectList::OnContextMenu(wxDataViewEvent&) if (title == " ") show_context_menu(); - - else if (title == _("Name") && pt.x >15 && - m_objects_model->GetBitmap(item).GetRefData() == m_bmp_manifold_warning.GetRefData()) - { - if (is_windows10()) { - const auto obj_idx = m_objects_model->GetIdByItem(m_objects_model->GetTopParent(item)); - wxGetApp().plater()->fix_through_netfabb(obj_idx); - } + else if (title == _("Name") && pt.x >15 && + m_objects_model->GetBitmap(item).GetRefData() == m_bmp_manifold_warning.GetRefData()) + { + if (is_windows10()) { + const auto obj_idx = m_objects_model->GetIdByItem(m_objects_model->GetTopParent(item)); + wxGetApp().plater()->fix_through_netfabb(obj_idx); } + } #ifndef __WXMSW__ GetMainWindow()->SetToolTip(""); // hide tooltip #endif //__WXMSW__ diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index 57828ea9a..8d94c964f 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -1281,6 +1281,42 @@ wxSize PrusaBitmapTextRenderer::GetSize() const } +wxWindow* PrusaBitmapTextRenderer::CreateEditorCtrl(wxWindow* parent, wxRect labelRect, const wxVariant& value) +{ + wxDataViewCtrl* const dv_ctrl = GetOwner()->GetOwner(); + PrusaObjectDataViewModel* const model = dynamic_cast(dv_ctrl->GetModel()); + + if ( !(model->GetItemType(dv_ctrl->GetSelection()) & (itVolume | itObject)) ) + return nullptr; + + PrusaDataViewBitmapText data; + data << value; + m_bmp_from_editing_item = data.GetBitmap(); + + wxPoint position = labelRect.GetPosition(); + if (m_bmp_from_editing_item.IsOk()) { + const int bmp_width = m_bmp_from_editing_item.GetWidth(); + position.x += bmp_width; + labelRect.SetWidth(labelRect.GetWidth() - bmp_width); + } + + wxTextCtrl* text_editor = new wxTextCtrl(parent, wxID_ANY, data.GetText(), + position, labelRect.GetSize(), wxTE_PROCESS_ENTER); + text_editor->SetInsertionPointEnd(); + + return text_editor; +} + +bool PrusaBitmapTextRenderer::GetValueFromEditorCtrl(wxWindow* ctrl, wxVariant& value) +{ + wxTextCtrl* text_editor = wxDynamicCast(ctrl, wxTextCtrl); + if (!text_editor) + return false; + + value << PrusaDataViewBitmapText(text_editor->GetValue(), m_bmp_from_editing_item); + return true; +} + // ---------------------------------------------------------------------------- // PrusaDoubleSlider // ---------------------------------------------------------------------------- diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index 866317e25..97f753906 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -522,7 +522,7 @@ public: class PrusaBitmapTextRenderer : public wxDataViewCustomRenderer { public: - PrusaBitmapTextRenderer( wxDataViewCellMode mode = wxDATAVIEW_CELL_INERT, + PrusaBitmapTextRenderer( wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE, int align = wxDVR_DEFAULT_ALIGNMENT): wxDataViewCustomRenderer(wxT("PrusaDataViewBitmapText"), mode, align) {} @@ -532,10 +532,16 @@ public: virtual bool Render(wxRect cell, wxDC *dc, int state); virtual wxSize GetSize() const; - virtual bool HasEditorCtrl() const { return false; } + bool HasEditorCtrl() const override { return true; } + wxWindow* CreateEditorCtrl(wxWindow* parent, + wxRect labelRect, + const wxVariant& value) override; + bool GetValueFromEditorCtrl( wxWindow* ctrl, + wxVariant& value) override; private: PrusaDataViewBitmapText m_value; + wxBitmap m_bmp_from_editing_item; };