OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
BitmapTextRenderer Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/ExtraRenderers.hpp>

Inheritance diagram for BitmapTextRenderer:
Collaboration diagram for BitmapTextRenderer:

Public Member Functions

 BitmapTextRenderer (bool use_markup=false, wxDataViewCellMode mode=wxDATAVIEW_CELL_EDITABLE, int align=wxDVR_DEFAULT_ALIGNMENT)
 ~BitmapTextRenderer ()
void EnableMarkup (bool enable=true)
bool SetValue (const wxVariant &value) override
bool GetValue (wxVariant &value) const override
virtual bool Render (wxRect cell, wxDC *dc, int state) override
virtual wxSize GetSize () const override
bool HasEditorCtrl () const override
wxWindow * CreateEditorCtrl (wxWindow *parent, wxRect labelRect, const wxVariant &value) override
bool GetValueFromEditorCtrl (wxWindow *ctrl, wxVariant &value) override
bool WasCanceled () const
void set_can_create_editor_ctrl_function (std::function< bool()> can_create_fn)

Private Attributes

DataViewBitmapText m_value
bool m_was_unusable_symbol { false }
std::function< bool()> can_create_editor_ctrl { nullptr }

Detailed Description

Constructor & Destructor Documentation

◆ BitmapTextRenderer()

BitmapTextRenderer::BitmapTextRenderer ( bool use_markup = false,
wxDataViewCellMode mode = wxDATAVIEW_CELL_EDITABLE,
int align = wxDVR_DEFAULT_ALIGNMENT )
inline
96 :
97 wxDataViewCustomRenderer(wxT("DataViewBitmapText"), mode, align)
98 {
99 EnableMarkup(use_markup);
100 }
void EnableMarkup(bool enable=true)
Definition ExtraRenderers.cpp:73

References ENABLE_NONCUSTOM_DATA_VIEW_RENDERING.

◆ ~BitmapTextRenderer()

BitmapTextRenderer::~BitmapTextRenderer ( )

Member Function Documentation

◆ CreateEditorCtrl()

wxWindow * BitmapTextRenderer::CreateEditorCtrl ( wxWindow * parent,
wxRect labelRect,
const wxVariant & value )
override
202{
204 return nullptr;
205
206 DataViewBitmapText data;
207 data << value;
208
209 m_was_unusable_symbol = false;
210
211 wxPoint position = labelRect.GetPosition();
212 if (data.GetBitmap().IsOk()) {
213 const int bmp_width = data.GetBitmap().GetWidth();
214 position.x += bmp_width;
215 labelRect.SetWidth(labelRect.GetWidth() - bmp_width);
216 }
217
218#ifdef __WXMSW__
219 // Case when from some reason we try to create next EditorCtrl till old one was not deleted
220 if (auto children = parent->GetChildren(); children.GetCount() > 0)
221 for (auto child : children)
222 if (dynamic_cast<wxTextCtrl*>(child)) {
223 parent->RemoveChild(child);
224 child->Destroy();
225 break;
226 }
227#endif // __WXMSW__
228
229 wxTextCtrl* text_editor = new wxTextCtrl(parent, wxID_ANY, data.GetText(),
230 position, labelRect.GetSize(), wxTE_PROCESS_ENTER);
231 text_editor->SetInsertionPointEnd();
232 text_editor->SelectAll();
233 text_editor->SetBackgroundColour(parent->GetBackgroundColour());
234 text_editor->SetForegroundColour(parent->GetForegroundColour());
235
236 return text_editor;
237}
bool m_was_unusable_symbol
Definition ExtraRenderers.hpp:132
std::function< bool()> can_create_editor_ctrl
Definition ExtraRenderers.hpp:134
const wxBitmap & GetBitmap() const
Definition ExtraRenderers.hpp:52
wxString GetText() const
Definition ExtraRenderers.hpp:50

References can_create_editor_ctrl, DataViewBitmapText::GetBitmap(), DataViewBitmapText::GetText(), and m_was_unusable_symbol.

Here is the call graph for this function:

◆ EnableMarkup()

void BitmapTextRenderer::EnableMarkup ( bool enable = true)
74{
75#ifdef SUPPORTS_MARKUP
76#ifdef wxHAS_GENERIC_DATAVIEWCTRL
77 if (enable) {
78 if (!m_markupText)
79 m_markupText = new wxItemMarkupText(wxString());
80 }
81 else {
82 if (m_markupText) {
83 delete m_markupText;
84 m_markupText = nullptr;
85 }
86 }
87#else
88 is_markupText = enable;
89#endif //wxHAS_GENERIC_DATAVIEWCTRL
90#endif // SUPPORTS_MARKUP
91}

◆ GetSize()

wxSize BitmapTextRenderer::GetSize ( ) const
overridevirtual
169{
170 if (!m_value.GetText().empty())
171 {
172 wxSize size;
173#if defined(SUPPORTS_MARKUP) && defined(wxHAS_GENERIC_DATAVIEWCTRL)
174 if (m_markupText)
175 {
176 wxDataViewCtrl* const view = GetView();
177 wxClientDC dc(view);
178 if (GetAttr().HasFont())
179 dc.SetFont(GetAttr().GetEffectiveFont(view->GetFont()));
180
181 size = m_markupText->Measure(dc);
182
183 int lines = m_value.GetText().Freq('\n') + 1;
184 size.SetHeight(size.GetHeight() * lines);
185 }
186 else
187#endif // SUPPORTS_MARKUP && wxHAS_GENERIC_DATAVIEWCTRL
188 {
189 size = GetTextExtent(m_value.GetText());
190 size.x = size.x * 9 / 8;
191 }
192
193 if (m_value.GetBitmap().IsOk())
194 size.x += m_value.GetBitmap().GetWidth() + 4;
195 return size;
196 }
197 return wxSize(80, 20);
198}
DataViewBitmapText m_value
Definition ExtraRenderers.hpp:131

References m_value.

◆ GetValue()

bool BitmapTextRenderer::GetValue ( wxVariant & value) const
override
118{
119 return false;
120}

◆ GetValueFromEditorCtrl()

bool BitmapTextRenderer::GetValueFromEditorCtrl ( wxWindow * ctrl,
wxVariant & value )
override
240{
241 wxTextCtrl* text_editor = wxDynamicCast(ctrl, wxTextCtrl);
242 auto item = GetView()->GetModel()->GetParent(m_item);
243 if (!text_editor || (item.IsOk() && text_editor->GetValue().IsEmpty()))
244 return false;
245
248 return false;
249
250 // The icon can't be edited so get its old value and reuse it.
251 wxVariant valueOld;
252 GetView()->GetModel()->GetValue(valueOld, m_item, Slic3r::GUI::ColumnNumber::colName);
253
254 DataViewBitmapText bmpText;
255 bmpText << valueOld;
256
257 // But replace the text with the value entered by user.
258 bmpText.SetText(text_editor->GetValue());
259
260 value << bmpText;
261 return true;
262}
void SetText(const wxString &text)
Definition ExtraRenderers.hpp:49
static bool has_illegal_filename_characters(const wxString &name)
Definition Plater.cpp:416
@ colName
Definition ObjectDataViewModel.hpp:49

References Slic3r::GUI::colName, Slic3r::GUI::Plater::has_illegal_filename_characters(), m_was_unusable_symbol, and DataViewBitmapText::SetText().

Here is the call graph for this function:

◆ HasEditorCtrl()

bool BitmapTextRenderer::HasEditorCtrl ( ) const
inlineoverride
117 {
118//#ifdef __WXOSX__
119// return false;
120//#else
121 return true;
122//#endif
123 }

◆ Render()

bool BitmapTextRenderer::Render ( wxRect cell,
wxDC * dc,
int state )
overridevirtual
135{
136 int xoffset = 0;
137
138 const wxBitmap& icon = m_value.GetBitmap();
139 if (icon.IsOk())
140 {
141#ifdef __APPLE__
142 wxSize icon_sz = icon.GetScaledSize();
143#else
144 wxSize icon_sz = icon.GetSize();
145#endif
146 dc->DrawBitmap(icon, rect.x, rect.y + (rect.height - icon_sz.y) / 2);
147 xoffset = icon_sz.x + 4;
148 }
149
150#if defined(SUPPORTS_MARKUP) && defined(wxHAS_GENERIC_DATAVIEWCTRL)
151 if (m_markupText)
152 {
153 rect.x += xoffset;
154 m_markupText->Render(GetView(), *dc, rect, 0, GetEllipsizeMode());
155 }
156 else
157#endif // SUPPORTS_MARKUP && wxHAS_GENERIC_DATAVIEWCTRL
158#ifdef _WIN32
159 // workaround for Windows DarkMode : Don't respect to the state & wxDATAVIEW_CELL_SELECTED to avoid update of the text color
160 RenderText(m_value.GetText(), xoffset, rect, dc, state & wxDATAVIEW_CELL_SELECTED ? 0 :state);
161#else
162 RenderText(m_value.GetText(), xoffset, rect, dc, state);
163#endif
164
165 return true;
166}

References m_value.

◆ set_can_create_editor_ctrl_function()

void BitmapTextRenderer::set_can_create_editor_ctrl_function ( std::function< bool()> can_create_fn)
inline
128{ can_create_editor_ctrl = can_create_fn; }

References can_create_editor_ctrl.

Referenced by Slic3r::GUI::ObjectList::create_objects_ctrl().

Here is the caller graph for this function:

◆ SetValue()

bool BitmapTextRenderer::SetValue ( const wxVariant & value)
override
94{
95 m_value << value;
96
97#ifdef SUPPORTS_MARKUP
98#ifdef wxHAS_GENERIC_DATAVIEWCTRL
99 if (m_markupText)
100 m_markupText->SetMarkup(m_value.GetText());
101 /*
102#else
103#if defined(__WXGTK__)
104 GValue gvalue = G_VALUE_INIT;
105 g_value_init(&gvalue, G_TYPE_STRING);
106 g_value_set_string(&gvalue, wxGTK_CONV_FONT(str.GetText(), GetOwner()->GetOwner()->GetFont()));
107 g_object_set_property(G_OBJECT(m_renderer/ *.GetText()* /), is_markupText ? "markup" : "text", &gvalue);
108 g_value_unset(&gvalue);
109#endif // __WXGTK__
110 */
111#endif // wxHAS_GENERIC_DATAVIEWCTRL
112#endif // SUPPORTS_MARKUP
113
114 return true;
115}

References m_value.

◆ WasCanceled()

bool BitmapTextRenderer::WasCanceled ( ) const
inline
126{ return m_was_unusable_symbol; }

References m_was_unusable_symbol.

Member Data Documentation

◆ can_create_editor_ctrl

std::function<bool()> BitmapTextRenderer::can_create_editor_ctrl { nullptr }
private
134{ nullptr };

Referenced by CreateEditorCtrl(), and set_can_create_editor_ctrl_function().

◆ m_value

DataViewBitmapText BitmapTextRenderer::m_value
private

Referenced by GetSize(), Render(), and SetValue().

◆ m_was_unusable_symbol

bool BitmapTextRenderer::m_was_unusable_symbol { false }
private
132{ false };

Referenced by CreateEditorCtrl(), GetValueFromEditorCtrl(), and WasCanceled().


The documentation for this class was generated from the following files: