Use the wxDataViewIconTextRenderer instead of the DataViewBitmapTextRenderer under GTK

This commit is contained in:
YuSanka 2020-08-10 09:45:32 +02:00
parent c4569c93f2
commit 8b74ae4568
2 changed files with 43 additions and 4 deletions

View file

@ -42,14 +42,14 @@ static std::string orange = "#ed6b21";
static void color_string(wxString& str, const std::string& color)
{
#if defined(SUPPORTS_MARKUP) && defined(wxHAS_GENERIC_DATAVIEWCTRL)
#if defined(SUPPORTS_MARKUP) && /*!defined(__APPLE__)*/defined(wxHAS_GENERIC_DATAVIEWCTRL)
str = from_u8((boost::format("<span color=\"%1%\">%2%</span>") % color % into_u8(str)).str());
#endif
}
static void make_string_bold(wxString& str)
{
#if defined(SUPPORTS_MARKUP) && defined(wxHAS_GENERIC_DATAVIEWCTRL)
#if defined(SUPPORTS_MARKUP) && !defined(__APPLE__)//defined(wxHAS_GENERIC_DATAVIEWCTRL)
str = from_u8((boost::format("<b>%1%</b>") % into_u8(str)).str());
#endif
}
@ -60,7 +60,11 @@ ModelNode::ModelNode(Preset::Type preset_type, const wxString& text) :
m_preset_type(preset_type),
m_text(text)
{
#ifdef __linux__
m_icon.CopyFromBitmap(create_scaled_bitmap(type_icon_names.at(preset_type)));
#else
m_icon = create_scaled_bitmap(type_icon_names.at(preset_type));
#endif //__linux__
}
// group node
@ -68,7 +72,11 @@ ModelNode::ModelNode(ModelNode* parent, const wxString& text, const std::string&
m_parent(parent),
m_text(text)
{
#ifdef __linux__
m_icon.CopyFromBitmap(create_scaled_bitmap(icon_name));
#else
m_icon = create_scaled_bitmap(icon_name);
#endif //__linux__
}
// category node
@ -300,7 +308,11 @@ void UnsavedChangesModel::GetValue(wxVariant& variant, const wxDataViewItem& ite
variant = node->m_toggle;
break;
case colIconText:
#ifdef __linux__
variant << wxDataViewIconText(node->m_text, node->m_icon);
#else
variant << DataViewBitmapText(node->m_text, node->m_icon);
#endif //__linux__
break;
case colOldValue:
variant << DataViewBitmapText(node->m_old_value, node->m_old_color_bmp);
@ -322,10 +334,18 @@ bool UnsavedChangesModel::SetValue(const wxVariant& variant, const wxDataViewIte
switch (col)
{
case colIconText: {
#ifdef __linux__
wxDataViewIconText data;
#else
DataViewBitmapText data;
#endif //__linux__
data << variant;
node->m_icon = data.GetBitmap();
node->m_text = data.GetText();
#ifdef __linux__
node->m_icon = data.GetIcon();
#else
node->m_icon = data.GetBitmap();
#endif //__linux__
return true; }
case colToggle:
node->m_toggle = variant.GetBool();
@ -439,7 +459,16 @@ UnsavedChangesDialog::UnsavedChangesDialog(Preset::Type type)
m_tree_model->SetAssociatedControl(m_tree);
m_tree->AppendToggleColumn(L"\u2714", UnsavedChangesModel::colToggle, wxDATAVIEW_CELL_ACTIVATABLE/*, 6 * em*/);//2610,11,12 //2714
wxDataViewColumn* icon_text_clmn = new wxDataViewColumn("", new BitmapTextRenderer(true), UnsavedChangesModel::colIconText, 30 * em, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE);
#ifdef __linux__
wxDataViewIconTextRenderer* rd = new wxDataViewIconTextRenderer();
#ifdef SUPPORTS_MARKUP
rd->EnableMarkup(true);
#endif
wxDataViewColumn* icon_text_clmn = new wxDataViewColumn("", rd, UnsavedChangesModel::colIconText, 30 * em, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE | wxDATAVIEW_CELL_INERT);
#else
wxDataViewColumn* icon_text_clmn = new wxDataViewColumn("", new BitmapTextRenderer(true), UnsavedChangesModel::colIconText, 30 * em, wxALIGN_TOP, wxDATAVIEW_COL_RESIZABLE);
#endif //__linux__
m_tree->AppendColumn(icon_text_clmn);
m_tree->AppendColumn(new wxDataViewColumn("Old value", new BitmapTextRenderer(true), UnsavedChangesModel::colOldValue, 20 * em, wxALIGN_TOP));
m_tree->AppendColumn(new wxDataViewColumn("New value", new BitmapTextRenderer(true), UnsavedChangesModel::colNewValue, 20 * em, wxALIGN_TOP));

View file

@ -18,6 +18,12 @@ namespace GUI{
class ModelNode;
WX_DEFINE_ARRAY_PTR(ModelNode*, ModelNodePtrArray);
// On all of 3 different platforms Bitmap+Text icon column looks different
// because of Markup text is missed or not implemented.
// As a temporary workaround, we will use:
// MSW - DataViewBitmapText (our custom renderer wxBitmap + wxString, supported Markup text)
// OSX - -//-, but Markup text is not implemented right now
// GTK - wxDataViewIconText (wxWidgets for GTK renderer wxIcon + wxString, supported Markup text)
class ModelNode
{
wxWindow* m_parent_win{ nullptr };
@ -47,7 +53,11 @@ class ModelNode
public:
bool m_toggle {true};
#ifdef __linux__
wxIcon m_icon;
#else
wxBitmap m_icon;
#endif //__linux__
wxBitmap m_old_color_bmp;
wxBitmap m_new_color_bmp;
wxString m_text;