From 61c95431eb01fa30d09c4c5fe70adee47a2b43f0 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Mon, 8 Aug 2022 15:10:55 +0800 Subject: [PATCH] Fix the crash issue when select filament in per-object editting Change-Id: I02be1b93f3b6df22843ac33ae565167711ffaf4a --- src/slic3r/GUI/GUI_ObjectTable.cpp | 23 +++++++++++++++++++++-- src/slic3r/GUI/GUI_ObjectTable.hpp | 10 ++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 3d6406443..b92a346c5 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -236,6 +236,25 @@ void GridCellFilamentsEditor::BeginEdit(int row, int col, wxGrid* grid) } } +bool GridCellFilamentsEditor::EndEdit(int WXUNUSED(row), + int WXUNUSED(col), + const wxGrid* WXUNUSED(grid), + const wxString& WXUNUSED(oldval), + wxString *newval) +{ + const wxString value = Combo()->GetValue(); + if ( value == m_value ) + return false; + + m_value = value; + + if ( newval ) + *newval = value; + + return true; +} + + wxGridActivationResult GridCellFilamentsEditor::TryActivate(int row, int col, wxGrid* grid, const wxGridActivationSource& actSource) { ObjectGridTable *table = dynamic_cast(grid->GetTable()); @@ -2365,7 +2384,7 @@ ObjectTablePanel::ObjectTablePanel( wxWindow* parent, wxWindowID id, const wxPoi SetSize(wxSize(-1, FromDIP(450))); SetMinSize(wxSize(-1, FromDIP(450))); SetMaxSize(wxSize(-1, FromDIP(450))); - + //m_search_line = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); init_bitmap(); @@ -2401,7 +2420,7 @@ ObjectTablePanel::ObjectTablePanel( wxWindow* parent, wxWindowID id, const wxPoi m_page_top_sizer->Add(m_page_text, 0, wxEXPAND, 5);*/ - + //TODO, adjust later /* diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index 382b751cd..ca2395d23 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -40,7 +40,7 @@ public: const wxRect& rect, int row, int col, bool isSelected) wxOVERRIDE; - + virtual wxSize GetBestSize(wxGrid& WXUNUSED(grid), wxGridCellAttr& attr, wxDC& dc, @@ -71,6 +71,8 @@ public: virtual wxGridCellEditor *Clone() const wxOVERRIDE; virtual void BeginEdit(int row, int col, wxGrid* grid) wxOVERRIDE; + virtual bool EndEdit(int row, int col, const wxGrid* grid, + const wxString& oldval, wxString *newval) wxOVERRIDE; virtual wxGridActivationResult TryActivate(int row, int col, wxGrid* grid, const wxGridActivationSource& actSource) wxOVERRIDE; virtual void DoActivate(int row, int col, wxGrid* grid) wxOVERRIDE; @@ -151,7 +153,7 @@ public: //ObjectGrid for the param setting table class ObjectGrid : public wxGrid { -public: +public: ObjectGrid(wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, @@ -377,7 +379,7 @@ public: virtual int GetNumberRows() wxOVERRIDE; virtual int GetNumberCols() wxOVERRIDE; virtual bool IsEmptyCell( int row, int col ) wxOVERRIDE; - + //virtual wxString GetColLabelValue( int col ) wxOVERRIDE; @@ -537,7 +539,7 @@ private: wxFloatingPointValidator m_float_validator; wxBitmap m_undo_bitmap; - std::vector m_color_bitmaps; + std::vector m_color_bitmaps; ScalableBitmap m_bmp_reset; ScalableBitmap m_bmp_reset_disable; private: