Choice field: Use wxComboBox instead of wxBitmapComboBox for non-OSX platforms
This commit is contained in:
parent
74d6aea4d4
commit
f1a74367ed
2 changed files with 26 additions and 14 deletions
|
@ -798,15 +798,21 @@ void SpinCtrl::msw_rescale(bool rescale_sidetext/* = false*/)
|
||||||
field->SetMinSize(wxSize(def_width() * m_em_unit, int(1.9f*field->GetFont().GetPixelSize().y)));
|
field->SetMinSize(wxSize(def_width() * m_em_unit, int(1.9f*field->GetFont().GetPixelSize().y)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __WXOSX__
|
||||||
|
using choice_ctrl = wxBitmapComboBox;
|
||||||
|
#else
|
||||||
|
using choice_ctrl = wxComboBox;
|
||||||
|
#endif // __WXOSX__
|
||||||
|
|
||||||
void Choice::BUILD() {
|
void Choice::BUILD() {
|
||||||
wxSize size(def_width_wider() * m_em_unit, wxDefaultCoord);
|
wxSize size(def_width_wider() * m_em_unit, wxDefaultCoord);
|
||||||
if (m_opt.height >= 0) size.SetHeight(m_opt.height*m_em_unit);
|
if (m_opt.height >= 0) size.SetHeight(m_opt.height*m_em_unit);
|
||||||
if (m_opt.width >= 0) size.SetWidth(m_opt.width*m_em_unit);
|
if (m_opt.width >= 0) size.SetWidth(m_opt.width*m_em_unit);
|
||||||
|
|
||||||
wxBitmapComboBox* temp;
|
choice_ctrl* temp;
|
||||||
if (!m_opt.gui_type.empty() && m_opt.gui_type.compare("select_open") != 0) {
|
if (!m_opt.gui_type.empty() && m_opt.gui_type.compare("select_open") != 0) {
|
||||||
m_is_editable = true;
|
m_is_editable = true;
|
||||||
temp = new wxBitmapComboBox(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size);
|
temp = new choice_ctrl(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef __WXOSX__
|
#ifdef __WXOSX__
|
||||||
|
@ -814,11 +820,11 @@ void Choice::BUILD() {
|
||||||
* so ToolTip doesn't shown.
|
* so ToolTip doesn't shown.
|
||||||
* Next workaround helps to solve this problem
|
* Next workaround helps to solve this problem
|
||||||
*/
|
*/
|
||||||
temp = new wxBitmapComboBox();
|
temp = new choice_ctrl();
|
||||||
temp->SetTextCtrlStyle(wxTE_READONLY);
|
temp->SetTextCtrlStyle(wxTE_READONLY);
|
||||||
temp->Create(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr);
|
temp->Create(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr);
|
||||||
#else
|
#else
|
||||||
temp = new wxBitmapComboBox(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY);
|
temp = new choice_ctrl(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY);
|
||||||
#endif //__WXOSX__
|
#endif //__WXOSX__
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -841,7 +847,8 @@ void Choice::BUILD() {
|
||||||
set_selection();
|
set_selection();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef __WXGTK__
|
#ifdef __WXOSX__
|
||||||
|
//#ifndef __WXGTK__
|
||||||
/* Workaround for a correct rendering of the control without Bitmap (under MSW and OSX):
|
/* Workaround for a correct rendering of the control without Bitmap (under MSW and OSX):
|
||||||
*
|
*
|
||||||
* 1. We should create small Bitmap to fill Bitmaps RefData,
|
* 1. We should create small Bitmap to fill Bitmaps RefData,
|
||||||
|
@ -868,7 +875,7 @@ void Choice::BUILD() {
|
||||||
}
|
}
|
||||||
|
|
||||||
double old_val = !m_value.empty() ? boost::any_cast<double>(m_value) : -99999;
|
double old_val = !m_value.empty() ? boost::any_cast<double>(m_value) : -99999;
|
||||||
if (is_defined_input_value<wxBitmapComboBox>(window, m_opt.type)) {
|
if (is_defined_input_value<choice_ctrl>(window, m_opt.type)) {
|
||||||
if (fabs(old_val - boost::any_cast<double>(get_value())) <= 0.0001)
|
if (fabs(old_val - boost::any_cast<double>(get_value())) <= 0.0001)
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
|
@ -891,7 +898,7 @@ void Choice::set_selection()
|
||||||
|
|
||||||
wxString text_value = wxString("");
|
wxString text_value = wxString("");
|
||||||
|
|
||||||
wxBitmapComboBox* field = dynamic_cast<wxBitmapComboBox*>(window);
|
choice_ctrl* field = dynamic_cast<choice_ctrl*>(window);
|
||||||
switch (m_opt.type) {
|
switch (m_opt.type) {
|
||||||
case coFloat:
|
case coFloat:
|
||||||
case coPercent: {
|
case coPercent: {
|
||||||
|
@ -961,7 +968,7 @@ void Choice::set_value(const std::string& value, bool change_event) //! Redunda
|
||||||
++idx;
|
++idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxBitmapComboBox* field = dynamic_cast<wxBitmapComboBox*>(window);
|
choice_ctrl* field = dynamic_cast<choice_ctrl*>(window);
|
||||||
idx == m_opt.enum_values.size() ?
|
idx == m_opt.enum_values.size() ?
|
||||||
field->SetValue(value) :
|
field->SetValue(value) :
|
||||||
field->SetSelection(idx);
|
field->SetSelection(idx);
|
||||||
|
@ -973,7 +980,7 @@ void Choice::set_value(const boost::any& value, bool change_event)
|
||||||
{
|
{
|
||||||
m_disable_change_event = !change_event;
|
m_disable_change_event = !change_event;
|
||||||
|
|
||||||
wxBitmapComboBox* field = dynamic_cast<wxBitmapComboBox*>(window);
|
choice_ctrl* field = dynamic_cast<choice_ctrl*>(window);
|
||||||
|
|
||||||
switch (m_opt.type) {
|
switch (m_opt.type) {
|
||||||
case coInt:
|
case coInt:
|
||||||
|
@ -1049,7 +1056,7 @@ void Choice::set_values(const std::vector<std::string>& values)
|
||||||
|
|
||||||
// # it looks that Clear() also clears the text field in recent wxWidgets versions,
|
// # it looks that Clear() also clears the text field in recent wxWidgets versions,
|
||||||
// # but we want to preserve it
|
// # but we want to preserve it
|
||||||
auto ww = dynamic_cast<wxBitmapComboBox*>(window);
|
auto ww = dynamic_cast<choice_ctrl*>(window);
|
||||||
auto value = ww->GetValue();
|
auto value = ww->GetValue();
|
||||||
ww->Clear();
|
ww->Clear();
|
||||||
ww->Append("");
|
ww->Append("");
|
||||||
|
@ -1082,7 +1089,7 @@ void Choice::set_values(const wxArrayString &values)
|
||||||
|
|
||||||
boost::any& Choice::get_value()
|
boost::any& Choice::get_value()
|
||||||
{
|
{
|
||||||
wxBitmapComboBox* field = dynamic_cast<wxBitmapComboBox*>(window);
|
choice_ctrl* field = dynamic_cast<choice_ctrl*>(window);
|
||||||
|
|
||||||
wxString ret_str = field->GetValue();
|
wxString ret_str = field->GetValue();
|
||||||
|
|
||||||
|
@ -1142,11 +1149,14 @@ boost::any& Choice::get_value()
|
||||||
return m_value;
|
return m_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Choice::enable() { dynamic_cast<choice_ctrl*>(window)->Enable(); };
|
||||||
|
void Choice::disable() { dynamic_cast<choice_ctrl*>(window)->Disable(); };
|
||||||
|
|
||||||
void Choice::msw_rescale(bool rescale_sidetext/* = false*/)
|
void Choice::msw_rescale(bool rescale_sidetext/* = false*/)
|
||||||
{
|
{
|
||||||
Field::msw_rescale();
|
Field::msw_rescale();
|
||||||
|
|
||||||
wxBitmapComboBox* field = dynamic_cast<wxBitmapComboBox*>(window);
|
choice_ctrl* field = dynamic_cast<choice_ctrl*>(window);
|
||||||
const wxString selection = field->GetValue();// field->GetString(index);
|
const wxString selection = field->GetValue();// field->GetString(index);
|
||||||
|
|
||||||
/* To correct scaling (set new controll size) of a wxBitmapCombobox
|
/* To correct scaling (set new controll size) of a wxBitmapCombobox
|
||||||
|
@ -1177,9 +1187,11 @@ void Choice::msw_rescale(bool rescale_sidetext/* = false*/)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __WXOSX__
|
||||||
wxBitmap empty_bmp(1, field->GetFont().GetPixelSize().y + 2);
|
wxBitmap empty_bmp(1, field->GetFont().GetPixelSize().y + 2);
|
||||||
empty_bmp.SetWidth(0);
|
empty_bmp.SetWidth(0);
|
||||||
field->SetItemBitmap(0, empty_bmp);
|
field->SetItemBitmap(0, empty_bmp);
|
||||||
|
#endif
|
||||||
|
|
||||||
idx == m_opt.enum_values.size() ?
|
idx == m_opt.enum_values.size() ?
|
||||||
field->SetValue(selection) :
|
field->SetValue(selection) :
|
||||||
|
|
|
@ -416,8 +416,8 @@ public:
|
||||||
|
|
||||||
void msw_rescale(bool rescale_sidetext = false) override;
|
void msw_rescale(bool rescale_sidetext = false) override;
|
||||||
|
|
||||||
void enable() override { dynamic_cast<wxBitmapComboBox*>(window)->Enable(); };
|
void enable() override ;//{ dynamic_cast<wxBitmapComboBox*>(window)->Enable(); };
|
||||||
void disable() override{ dynamic_cast<wxBitmapComboBox*>(window)->Disable(); };
|
void disable() override;//{ dynamic_cast<wxBitmapComboBox*>(window)->Disable(); };
|
||||||
wxWindow* getWindow() override { return window; }
|
wxWindow* getWindow() override { return window; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue