mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-16 18:12:10 +00:00
ENH: new printer layout
Change-Id: I8acc59b2446a13c8f7fe3a6bdf090f39d4896b1f Jira: STUDIO-8859 (cherry picked from commit d723fa714f34d572052b5cae0847472529f2c62f)
This commit is contained in:
@@ -203,6 +203,7 @@ wxDEFINE_EVENT(EVT_MODIFY_FILAMENT, SimpleEvent);
|
||||
wxDEFINE_EVENT(EVT_ADD_FILAMENT, SimpleEvent);
|
||||
wxDEFINE_EVENT(EVT_DEL_FILAMENT, SimpleEvent);
|
||||
wxDEFINE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent);
|
||||
|
||||
bool Plater::has_illegal_filename_characters(const wxString& wxs_name)
|
||||
{
|
||||
std::string name = into_u8(wxs_name);
|
||||
@@ -324,29 +325,63 @@ int SidebarProps::ContentMargin() { return 12; } // Use as side margins content
|
||||
int SidebarProps::IconSpacing() { return 10; } // Use on main elements
|
||||
int SidebarProps::ElementSpacing() { return 5; } // Use if elements has relation between them like edit button for combo box etc.
|
||||
|
||||
struct ExtruderGroup : StaticGroup
|
||||
{
|
||||
ExtruderGroup(wxWindow * parent, int index, wxString const &title);
|
||||
wxStaticBoxSizer *sizer = nullptr;
|
||||
ScalableButton * btn_edit = nullptr;
|
||||
ComboBox * combo_nozzle = nullptr;
|
||||
AMSPreview * ams[4] = {nullptr};
|
||||
void Rescale()
|
||||
{
|
||||
if (btn_edit)
|
||||
btn_edit->msw_rescale();
|
||||
combo_nozzle->Rescale();
|
||||
}
|
||||
};
|
||||
|
||||
struct Sidebar::priv
|
||||
{
|
||||
Plater *plater;
|
||||
|
||||
wxPanel *scrolled;
|
||||
PlaterPresetComboBox *combo_print;
|
||||
wxPanel *scrolled = nullptr;
|
||||
PlaterPresetComboBox *combo_sla_print = nullptr;
|
||||
PlaterPresetComboBox *combo_sla_material = nullptr;
|
||||
|
||||
// Printer
|
||||
wxSizer * vsizer_printer = nullptr;
|
||||
// Printer - preset
|
||||
StaticBox * panel_printer_preset = nullptr;
|
||||
wxStaticBitmap * image_printer = nullptr;
|
||||
PlaterPresetComboBox *combo_printer = nullptr;
|
||||
ScalableButton * btn_edit_printer = nullptr;
|
||||
ScalableButton * btn_connect_printer = nullptr;
|
||||
// Printer - bed
|
||||
StaticBox * panel_printer_bed = nullptr;
|
||||
wxStaticBitmap *image_printer_bed = nullptr;
|
||||
ComboBox * combo_printer_bed = nullptr;
|
||||
// Printer - sync
|
||||
Button *btn_sync_printer;
|
||||
// Printer - ams
|
||||
ExtruderGroup *left_extruder = nullptr;
|
||||
ExtruderGroup *right_extruder = nullptr;
|
||||
ExtruderGroup *single_extruder = nullptr;
|
||||
|
||||
int FromDIP(int n) { return plater->FromDIP(n); }
|
||||
void layout_printer(bool isBBL, bool isDual);
|
||||
|
||||
PlaterPresetComboBox *combo_print = nullptr;
|
||||
std::vector<PlaterPresetComboBox*> combos_filament;
|
||||
int editing_filament = -1;
|
||||
wxBoxSizer *sizer_filaments;
|
||||
PlaterPresetComboBox *combo_sla_print;
|
||||
PlaterPresetComboBox *combo_sla_material;
|
||||
PlaterPresetComboBox* combo_printer = nullptr;
|
||||
wxBoxSizer *sizer_params;
|
||||
wxBoxSizer *sizer_filaments = nullptr;
|
||||
|
||||
//BBS Sidebar widgets
|
||||
wxPanel* m_panel_print_title;
|
||||
wxStaticText* m_staticText_print_title;
|
||||
wxPanel* m_panel_print_content;
|
||||
wxBoxSizer *sizer_params;
|
||||
|
||||
//wxComboBox * m_comboBox_print_preset;
|
||||
ComboBox * m_bed_type_list = nullptr;
|
||||
wxStaticText * m_left_ams_count = nullptr;
|
||||
wxStaticText * m_right_ams_count = nullptr;
|
||||
wxSizer * m_dual_extruder_sizer = nullptr;
|
||||
wxStaticLine * m_staticline1;
|
||||
StaticBox* m_panel_filament_title;
|
||||
wxStaticText* m_staticText_filament_settings;
|
||||
@@ -369,7 +404,6 @@ struct Sidebar::priv
|
||||
StaticBox* m_panel_printer_title = nullptr;
|
||||
ScalableButton* m_printer_icon = nullptr;
|
||||
ScalableButton* m_printer_setting = nullptr;
|
||||
Button *m_extruder_sync = nullptr;
|
||||
wxStaticText * m_text_printer_settings = nullptr;
|
||||
wxPanel* m_panel_printer_content = nullptr;
|
||||
|
||||
@@ -402,6 +436,66 @@ struct Sidebar::priv
|
||||
#endif
|
||||
};
|
||||
|
||||
void Sidebar::priv::layout_printer(bool isBBL, bool isDual)
|
||||
{
|
||||
// Printer - preset
|
||||
if (auto sizer = static_cast<wxBoxSizer *>(panel_printer_preset->GetSizer());
|
||||
sizer == nullptr || isDual != (sizer->GetOrientation() == wxVERTICAL)) {
|
||||
wxBoxSizer *hsizer_printer_btn = new wxBoxSizer(wxHORIZONTAL);
|
||||
hsizer_printer_btn->AddStretchSpacer(1);
|
||||
hsizer_printer_btn->Add(btn_edit_printer, 0, wxALIGN_CENTER | wxLEFT, FromDIP(4));
|
||||
hsizer_printer_btn->Add(btn_connect_printer, 0, wxALIGN_CENTER | wxLEFT, FromDIP(4));
|
||||
combo_printer->SetWindowStyle(combo_printer->GetWindowStyle() & ~wxALIGN_MASK | (isDual ? wxALIGN_CENTER_HORIZONTAL : wxALIGN_RIGHT));
|
||||
if (isDual) {
|
||||
wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL);
|
||||
vsizer->AddStretchSpacer(1);
|
||||
wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
hsizer->AddStretchSpacer(1);
|
||||
hsizer->Add(image_printer, 0);
|
||||
hsizer->Add(hsizer_printer_btn, 1, wxRIGHT, FromDIP(12));
|
||||
vsizer->Add(hsizer, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, FromDIP(4));
|
||||
vsizer->Add(combo_printer, 0, wxEXPAND | wxALL, FromDIP(4));
|
||||
vsizer->AddStretchSpacer(1);
|
||||
panel_printer_preset->SetSizer(vsizer);
|
||||
} else {
|
||||
wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_CENTER, FromDIP(4));
|
||||
wxBoxSizer *vsizer = new wxBoxSizer(wxVERTICAL);
|
||||
vsizer->AddSpacer(FromDIP(4));
|
||||
vsizer->Add(hsizer_printer_btn, 1, wxEXPAND | wxRIGHT, FromDIP(16));
|
||||
vsizer->Add(combo_printer, 0, wxEXPAND | wxLEFT, FromDIP(4));
|
||||
vsizer->AddStretchSpacer(1);
|
||||
vsizer->AddSpacer(FromDIP(4));
|
||||
hsizer->Add(vsizer, 1, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(4));
|
||||
panel_printer_preset->SetSizer(hsizer);
|
||||
}
|
||||
}
|
||||
|
||||
if (vsizer_printer->GetItemCount() == 0) {
|
||||
wxBoxSizer *hsizer_printer = new wxBoxSizer(wxHORIZONTAL);
|
||||
hsizer_printer->Add(panel_printer_preset, 1, wxEXPAND);
|
||||
hsizer_printer->Add(panel_printer_bed, 0, wxLEFT | wxEXPAND, FromDIP(4));
|
||||
hsizer_printer->Add(btn_sync_printer, 0, wxLEFT | wxEXPAND, FromDIP(4));
|
||||
|
||||
// Printer - extruder
|
||||
auto hsizer_extruder = new wxBoxSizer(wxHORIZONTAL);
|
||||
hsizer_extruder->Add(left_extruder->sizer, 1, wxEXPAND);
|
||||
hsizer_extruder->Add(right_extruder->sizer, 1, wxLEFT | wxEXPAND, FromDIP(4));
|
||||
|
||||
vsizer_printer->Add(hsizer_printer, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, FromDIP(4));
|
||||
vsizer_printer->Add(hsizer_extruder, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, FromDIP(4));
|
||||
vsizer_printer->Add(single_extruder->sizer, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, FromDIP(4));
|
||||
vsizer_printer->AddSpacer(FromDIP(4));
|
||||
}
|
||||
|
||||
btn_connect_printer->Show(!isBBL);
|
||||
btn_sync_printer->Show(isDual);
|
||||
panel_printer_bed->Show(isBBL);
|
||||
vsizer_printer->GetItem(1)->GetSizer()->GetItem(1)->Show(isDual);
|
||||
vsizer_printer->GetItem(1)->Show(isBBL && isDual);
|
||||
vsizer_printer->GetItem(2)->Show(isBBL && !isDual);
|
||||
}
|
||||
|
||||
Sidebar::priv::~priv()
|
||||
{
|
||||
// BBS
|
||||
@@ -657,8 +751,8 @@ static DynamicFilamentList1Based dynamic_filament_list_1_based;
|
||||
class AMSCountPopupWindow : public PopupWindow
|
||||
{
|
||||
public:
|
||||
AMSCountPopupWindow(wxWindow * parent, wxStaticText *text, int index)
|
||||
: PopupWindow(parent, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS)
|
||||
AMSCountPopupWindow(ExtruderGroup *extruder, int index)
|
||||
: PopupWindow(extruder, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS)
|
||||
{
|
||||
auto msg = new wxStaticText(this, wxID_ANY, _L("Please set the number of ams installed on the this extrusion head."));
|
||||
msg->SetFont(Label::Body_14);
|
||||
@@ -676,9 +770,9 @@ public:
|
||||
GetAMSCount(index, ams4, ams1);
|
||||
auto val4 = new SpinInput(this, {}, {}, wxDefaultPosition, {FromDIP(60), -1}, 0, 0, 4, ams4);
|
||||
auto val1 = new SpinInput(this, {}, {}, wxDefaultPosition, {FromDIP(60), -1}, 0, 0, 8, ams1);
|
||||
auto event_handler = [index, val4, val1, text](auto &evt) {
|
||||
auto event_handler = [index, val4, val1, extruder](auto &evt) {
|
||||
SetAMSCount(index, val4->GetValue(), val1->GetValue());
|
||||
UpdateAMSCount(index, text);
|
||||
UpdateAMSCount(index, extruder);
|
||||
};
|
||||
val4->Bind(wxEVT_SPINCTRL, event_handler);
|
||||
val1->Bind(wxEVT_SPINCTRL, event_handler);
|
||||
@@ -740,7 +834,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
static void UpdateAMSCount(int index, wxStaticText *text)
|
||||
static void UpdateAMSCount(int index, ExtruderGroup *extruder)
|
||||
{
|
||||
std::vector<std::map<int, int>> &ams_counts = wxGetApp().preset_bundle->extruder_ams_counts;
|
||||
ams_counts.resize(2);
|
||||
@@ -752,10 +846,75 @@ public:
|
||||
ams_map[1] = 0;
|
||||
}
|
||||
std::string ams_info = std::to_string(ams_map[4]) + "/" + std::to_string(ams_map[1]);
|
||||
text->SetLabel(from_u8(ams_info));
|
||||
//*extruder = from_u8(ams_info);
|
||||
}
|
||||
};
|
||||
|
||||
ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title)
|
||||
: StaticGroup(parent, wxID_ANY, title)
|
||||
{
|
||||
SetFont(Label::Body_10);
|
||||
SetForegroundColour("#909090");
|
||||
ShowBadge(true);
|
||||
|
||||
// Nozzle
|
||||
wxStaticText *label_nozzle = new wxStaticText(this, wxID_ANY, _L("Nozzle"));
|
||||
label_nozzle->SetFont(Label::Body_14);
|
||||
label_nozzle->SetForegroundColour("#262E30");
|
||||
auto combo_nozzle = new ComboBox(this, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY);
|
||||
combo_nozzle->GetDropDown().SetUseContentWidth(true);
|
||||
combo_nozzle->Bind(wxEVT_COMBOBOX, [this, index, combo_nozzle](wxCommandEvent &evt) {
|
||||
auto printer_tab = dynamic_cast<TabPrinter *>(wxGetApp().get_tab(Preset::TYPE_PRINTER));
|
||||
printer_tab->set_extruder_volume_type(index, NozzleVolumeType(intptr_t(combo_nozzle->GetClientData(evt.GetInt()))));
|
||||
});
|
||||
this->combo_nozzle = combo_nozzle;
|
||||
|
||||
// AMS
|
||||
wxStaticText *label_ams = new wxStaticText(this, wxID_ANY, _L("AMS"));
|
||||
label_ams->SetFont(Label::Body_14);
|
||||
label_ams->SetForegroundColour("#262E30");
|
||||
if (index >= 0) {
|
||||
btn_edit = new ScalableButton(this, wxID_ANY, "dot");
|
||||
btn_edit->SetBackgroundColour(*wxWHITE);
|
||||
btn_edit->Hide();
|
||||
btn_edit->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index](auto &evt) {
|
||||
PopupWindow *window = new AMSCountPopupWindow(this, index);
|
||||
auto size = GetSize();
|
||||
auto pos = ClientToScreen({0, size.y + 12});
|
||||
size.SetWidth(size.GetWidth() + FromDIP(10));
|
||||
window->Position(pos, {0, 0});
|
||||
window->Popup();
|
||||
});
|
||||
|
||||
auto hovered = std::make_shared<wxWindow *>();
|
||||
for (wxWindow *w : std::initializer_list<wxWindow *>{this, label_nozzle, combo_nozzle, btn_edit, label_ams}) {
|
||||
w->Bind(wxEVT_ENTER_WINDOW, [w, hovered, this](wxMouseEvent &evt) { *hovered = w; btn_edit->SetBitmap_("edit"); });
|
||||
w->Bind(wxEVT_LEAVE_WINDOW, [w, hovered, this](wxMouseEvent &evt) { if (*hovered == w) { btn_edit->SetBitmap_("dot"); *hovered = nullptr; } });
|
||||
}
|
||||
}
|
||||
|
||||
wxBoxSizer * hsizer_ams = new wxBoxSizer(wxHORIZONTAL);
|
||||
hsizer_ams->Add(label_ams, 1, wxALIGN_CENTER);
|
||||
if (btn_edit)
|
||||
hsizer_ams->Add(btn_edit, 0, 0);
|
||||
hsizer_ams->AddStretchSpacer(2);
|
||||
wxBoxSizer * hsizer_nozzle = new wxBoxSizer(wxHORIZONTAL);
|
||||
hsizer_nozzle->Add(label_nozzle, 2, wxALIGN_CENTER);
|
||||
hsizer_nozzle->Add(combo_nozzle, 3, wxEXPAND);
|
||||
if (index < 0) {
|
||||
wxStaticBoxSizer *hsizer = new wxStaticBoxSizer(this, wxHORIZONTAL);
|
||||
hsizer->Add(hsizer_ams, 1, wxLEFT | wxTOP | wxBOTTOM | wxALIGN_CENTER, FromDIP(4));
|
||||
hsizer->Add(hsizer_nozzle, 1, wxALL | wxALIGN_CENTER, FromDIP(4));
|
||||
hsizer->AddSpacer(FromDIP(4));
|
||||
this->sizer = hsizer;
|
||||
} else {
|
||||
wxStaticBoxSizer *vsizer = new wxStaticBoxSizer(this, wxVERTICAL);
|
||||
vsizer->Add(hsizer_ams, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, FromDIP(4));
|
||||
vsizer->Add(hsizer_nozzle, 0, wxEXPAND | wxALL, FromDIP(4));
|
||||
this->sizer = vsizer;
|
||||
}
|
||||
}
|
||||
|
||||
void Sidebar::priv::sync_extruder_list()
|
||||
{
|
||||
auto printer_tab = dynamic_cast<TabPrinter *>(wxGetApp().get_tab(Preset::TYPE_PRINTER));
|
||||
@@ -804,10 +963,14 @@ void Sidebar::priv::sync_extruder_list()
|
||||
int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0;
|
||||
AMSCountPopupWindow::SetAMSCount(deputy_index, deputy_4, deputy_1);
|
||||
AMSCountPopupWindow::SetAMSCount(main_index, main_4, main_1);
|
||||
AMSCountPopupWindow::UpdateAMSCount(0, m_left_ams_count);
|
||||
AMSCountPopupWindow::UpdateAMSCount(1, m_right_ams_count);
|
||||
AMSCountPopupWindow::UpdateAMSCount(0, left_extruder);
|
||||
AMSCountPopupWindow::UpdateAMSCount(1, right_extruder);
|
||||
}
|
||||
|
||||
#define PRINTER_THUMBNAIL_SIZE (wxSize(FromDIP(48), FromDIP(48)))
|
||||
#define PRINTER_PANEL_SIZE_SMALL (wxSize(FromDIP(98), FromDIP(68)))
|
||||
#define PRINTER_PANEL_SIZE (wxSize(FromDIP(98), FromDIP(98)))
|
||||
|
||||
Sidebar::Sidebar(Plater *parent)
|
||||
: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(42 * wxGetApp().em_unit(), -1)), p(new priv(parent))
|
||||
{
|
||||
@@ -882,8 +1045,6 @@ Sidebar::Sidebar(Plater *parent)
|
||||
h_sizer_title->AddSpacer(FromDIP(SidebarProps::ElementSpacing()));
|
||||
h_sizer_title->Add(p->m_text_printer_settings, 0, wxALIGN_CENTER);
|
||||
h_sizer_title->AddStretchSpacer();
|
||||
h_sizer_title->Add(p->m_extruder_sync, 0, wxALIGN_CENTER);
|
||||
h_sizer_title->AddSpacer(FromDIP(SidebarProps::TitlebarMargin()));
|
||||
h_sizer_title->Add(p->m_printer_setting, 0, wxALIGN_CENTER);
|
||||
h_sizer_title->AddSpacer(FromDIP(SidebarProps::TitlebarMargin()));
|
||||
h_sizer_title->SetMinSize(-1, 3 * em);
|
||||
@@ -917,70 +1078,92 @@ Sidebar::Sidebar(Plater *parent)
|
||||
p->m_panel_printer_content = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||
p->m_panel_printer_content->SetBackgroundColour(wxColour(255, 255, 255));
|
||||
|
||||
PlaterPresetComboBox* combo_printer = new PlaterPresetComboBox(p->m_panel_printer_content, Preset::TYPE_PRINTER);
|
||||
combo_printer->SetBorderWidth(0);
|
||||
combo_printer->ShowBadge(true);
|
||||
ScalableButton* edit_btn = new ScalableButton(p->m_panel_printer_content, wxID_ANY, "edit");
|
||||
p->panel_printer_preset = new StaticBox(p->m_panel_printer_content);
|
||||
p->panel_printer_preset->SetCornerRadius(8);
|
||||
p->panel_printer_preset->SetBorderColor(wxColour("#CECECE"));
|
||||
p->panel_printer_preset->SetMinSize(PRINTER_PANEL_SIZE_SMALL);
|
||||
p->panel_printer_preset->ShowBadge(true);
|
||||
|
||||
ScalableButton *edit_btn = new ScalableButton(p->panel_printer_preset, wxID_ANY, "dot");
|
||||
edit_btn->SetToolTip(_L("Click to edit preset"));
|
||||
edit_btn->Bind(wxEVT_BUTTON, [this, combo_printer](wxCommandEvent)
|
||||
edit_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent)
|
||||
{
|
||||
p->editing_filament = -1;
|
||||
if (combo_printer->switch_to_tab())
|
||||
if (p->combo_printer->switch_to_tab())
|
||||
p->editing_filament = 0;
|
||||
});
|
||||
p->btn_edit_printer = edit_btn;
|
||||
|
||||
ScalableBitmap bitmap_printer(p->panel_printer_preset, "printer_placeholder", 48);
|
||||
p->image_printer = new wxStaticBitmap(p->panel_printer_preset, wxID_ANY, bitmap_printer.bmp(), wxDefaultPosition, PRINTER_THUMBNAIL_SIZE, 0);
|
||||
PlaterPresetComboBox *combo_printer = new PlaterPresetComboBox(p->panel_printer_preset, Preset::TYPE_PRINTER);
|
||||
combo_printer->SetBorderWidth(0);
|
||||
combo_printer->edit_btn = edit_btn;
|
||||
p->combo_printer = combo_printer;
|
||||
|
||||
connection_btn = new ScalableButton(p->m_panel_printer_content, wxID_ANY, "monitor_signal_strong");
|
||||
connection_btn->SetBackgroundColour(wxColour(255, 255, 255));
|
||||
connection_btn->SetToolTip(_L("Connection"));
|
||||
connection_btn->Bind(wxEVT_BUTTON, [this, combo_printer](wxCommandEvent)
|
||||
p->btn_connect_printer = new ScalableButton(p->panel_printer_preset, wxID_ANY, "monitor_signal_strong");
|
||||
p->btn_connect_printer->SetBackgroundColour(wxColour(255, 255, 255));
|
||||
p->btn_connect_printer->SetToolTip(_L("Connection"));
|
||||
p->btn_connect_printer->Bind(wxEVT_BUTTON, [this, combo_printer](wxCommandEvent)
|
||||
{
|
||||
PhysicalPrinterDialog dlg(this->GetParent());
|
||||
dlg.ShowModal();
|
||||
});
|
||||
|
||||
wxBoxSizer* vsizer_printer = new wxBoxSizer(wxVERTICAL);
|
||||
wxBoxSizer* hsizer_printer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
vsizer_printer->AddSpacer(FromDIP(16));
|
||||
hsizer_printer->Add(combo_printer, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::ContentMargin()));
|
||||
hsizer_printer->Add(edit_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::ElementSpacing()));
|
||||
hsizer_printer->Add(connection_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::IconSpacing()));
|
||||
hsizer_printer->AddSpacer(FromDIP(SidebarProps::ContentMargin()));
|
||||
vsizer_printer->Add(hsizer_printer, 0, wxEXPAND, 0);
|
||||
{
|
||||
auto hovered = std::make_shared<wxWindow *>();
|
||||
for (wxWindow *w : std::initializer_list<wxWindow *>{p->panel_printer_preset, edit_btn, p->image_printer, combo_printer}) {
|
||||
w->Bind(wxEVT_ENTER_WINDOW, [w, hovered, edit_btn](wxMouseEvent &evt) { *hovered = w; edit_btn->SetBitmap_("edit"); });
|
||||
w->Bind(wxEVT_LEAVE_WINDOW, [w, hovered, edit_btn](wxMouseEvent &evt) { if (*hovered == w) { edit_btn->SetBitmap_("dot"); *hovered = nullptr; } });
|
||||
}
|
||||
}
|
||||
|
||||
// Bed type selection
|
||||
wxBoxSizer* bed_type_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxStaticText* bed_type_title = new wxStaticText(p->m_panel_printer_content, wxID_ANY, _L("Bed type"));
|
||||
//bed_type_title->SetBackgroundColour();
|
||||
bed_type_title->Wrap(-1);
|
||||
bed_type_title->SetFont(Label::Body_14);
|
||||
p->m_bed_type_list = new ComboBox(p->m_panel_printer_content, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY);
|
||||
const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type");
|
||||
p->panel_printer_bed = new StaticBox(p->m_panel_printer_content);
|
||||
p->panel_printer_bed->SetCornerRadius(8);
|
||||
p->panel_printer_bed->SetBorderColor(wxColour("#CECECE"));
|
||||
p->panel_printer_bed->SetMinSize(PRINTER_PANEL_SIZE_SMALL);
|
||||
p->panel_printer_bed->ShowBadge(true);
|
||||
|
||||
ScalableButton *wiki_bed = new ScalableButton(p->panel_printer_bed, wxID_ANY, "dot");
|
||||
wiki_bed->Bind(wxEVT_BUTTON, [](wxCommandEvent) {
|
||||
wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/x1/manual/compatibility-and-parameter-settings-of-filaments");
|
||||
});
|
||||
|
||||
ScalableBitmap bitmap_bed(p->panel_printer_bed, "printer_placeholder", 48);
|
||||
p->image_printer_bed = new wxStaticBitmap(p->panel_printer_bed, wxID_ANY, bitmap_bed.bmp(), wxDefaultPosition, PRINTER_THUMBNAIL_SIZE, 0);
|
||||
|
||||
p->combo_printer_bed = new ComboBox(p->panel_printer_bed, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY | wxALIGN_CENTER_HORIZONTAL);
|
||||
p->combo_printer_bed->SetBorderWidth(0);
|
||||
p->combo_printer_bed->GetDropDown().SetUseContentWidth(true);
|
||||
const ConfigOptionDef *bed_type_def = print_config_def.get("curr_bed_type");
|
||||
if (bed_type_def && bed_type_def->enum_keys_map) {
|
||||
for (auto item : bed_type_def->enum_labels) {
|
||||
p->m_bed_type_list->AppendString(_L(item));
|
||||
p->combo_printer_bed->AppendString(_L(item));
|
||||
}
|
||||
}
|
||||
|
||||
bed_type_title->Bind(wxEVT_ENTER_WINDOW, [bed_type_title, this](wxMouseEvent &e) {
|
||||
e.Skip();
|
||||
auto font = bed_type_title->GetFont();
|
||||
font.SetUnderlined(true);
|
||||
bed_type_title->SetFont(font);
|
||||
SetCursor(wxCURSOR_HAND);
|
||||
});
|
||||
bed_type_title->Bind(wxEVT_LEAVE_WINDOW, [bed_type_title, this](wxMouseEvent &e) {
|
||||
e.Skip();
|
||||
auto font = bed_type_title->GetFont();
|
||||
font.SetUnderlined(false);
|
||||
bed_type_title->SetFont(font);
|
||||
SetCursor(wxCURSOR_ARROW);
|
||||
});
|
||||
bed_type_title->Bind(wxEVT_LEFT_UP, [bed_type_title, this](wxMouseEvent &e) {
|
||||
wxLaunchDefaultBrowser("https://github.com/SoftFever/OrcaSlicer/wiki/bed-types");
|
||||
});
|
||||
{
|
||||
auto hovered = std::make_shared<wxWindow *>();
|
||||
for (wxWindow *w : std::initializer_list<wxWindow *>{p->panel_printer_bed, wiki_bed, p->image_printer_bed, p->combo_printer_bed}) {
|
||||
w->Bind(wxEVT_ENTER_WINDOW, [w, hovered, wiki_bed](wxMouseEvent &evt) { *hovered = w; wiki_bed->SetBitmap_("help"); });
|
||||
w->Bind(wxEVT_LEAVE_WINDOW, [w, hovered, wiki_bed](wxMouseEvent &evt) { if (*hovered == w) { wiki_bed->SetBitmap_("dot"); *hovered = nullptr; } });
|
||||
}
|
||||
}
|
||||
|
||||
wxBoxSizer *bed_type_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
bed_type_sizer->AddStretchSpacer(1);
|
||||
wxBoxSizer *bed_type_hsizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxBoxSizer *bed_type_hsizer2 = new wxBoxSizer(wxHORIZONTAL);
|
||||
bed_type_hsizer2->AddStretchSpacer(1);
|
||||
bed_type_hsizer2->Add(wiki_bed, 0, wxLEFT, FromDIP(4));
|
||||
bed_type_hsizer->Add(bed_type_hsizer2, 1);
|
||||
bed_type_hsizer->Add(p->image_printer_bed, 0);
|
||||
bed_type_hsizer->AddStretchSpacer(1);
|
||||
bed_type_sizer->Add(bed_type_hsizer, 0, wxALIGN_CENTER | wxLEFT | wxTOP | wxRIGHT, FromDIP(4));
|
||||
bed_type_sizer->Add(p->combo_printer_bed, 0, wxEXPAND | wxALL, FromDIP(4));
|
||||
bed_type_sizer->AddStretchSpacer(1);
|
||||
p->panel_printer_bed->SetSizer(bed_type_sizer);
|
||||
|
||||
AppConfig *app_config = wxGetApp().app_config;
|
||||
std::string str_bed_type = app_config->get("curr_bed_type");
|
||||
@@ -992,11 +1175,7 @@ Sidebar::Sidebar(Plater *parent)
|
||||
}
|
||||
|
||||
int bed_type_idx = bed_type_value - 1;
|
||||
p->m_bed_type_list->Select(bed_type_idx);
|
||||
bed_type_sizer->Add(bed_type_title, 1, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::ContentMargin()));
|
||||
bed_type_sizer->Add(p->m_bed_type_list, 4, wxLEFT | wxEXPAND, FromDIP(SidebarProps::ElementSpacing()));
|
||||
bed_type_sizer->AddSpacer(FromDIP(SidebarProps::ContentMargin()));
|
||||
vsizer_printer->Add(bed_type_sizer, 0, wxEXPAND | wxTOP, FromDIP(5));
|
||||
p->combo_printer_bed->Select(bed_type_idx);
|
||||
|
||||
auto& project_config = wxGetApp().preset_bundle->project_config;
|
||||
/*const t_config_enum_values* keys_map = print_config_def.get("curr_bed_type")->enum_keys_map;
|
||||
@@ -1008,76 +1187,35 @@ Sidebar::Sidebar(Plater *parent)
|
||||
BedType bed_type = (BedType)bed_type_value;
|
||||
project_config.set_key_value("curr_bed_type", new ConfigOptionEnum<BedType>(bed_type));
|
||||
|
||||
// Dual Extruder Types (Begin)
|
||||
p->m_dual_extruder_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
// Sync printer information
|
||||
auto btn_sync = new Button(p->m_panel_printer_content, _L("Sync printer information"), "ams_nozzle_sync");
|
||||
//btn_sync->SetFont(Label::Body_8);
|
||||
btn_sync->SetToolTip(_L("Synchronize nozzle information and the number of AMS"));
|
||||
btn_sync->SetCornerRadius(8);
|
||||
StateColor btn_sync_bg_col(
|
||||
std::pair<wxColour, int>(wxColour(0xCECECE), StateColor::Pressed),
|
||||
std::pair<wxColour, int>(wxColour(0xF8F8F8), StateColor::Hovered),
|
||||
std::pair<wxColour, int>(wxColour(0xF8F8F8), StateColor::Normal));
|
||||
StateColor btn_sync_bd_col(
|
||||
std::pair<wxColour, int>(wxColour(0x00AE42), StateColor::Pressed),
|
||||
std::pair<wxColour, int>(wxColour(0x00AE42), StateColor::Hovered),
|
||||
std::pair<wxColour, int>(wxColour(0xEEEEEE), StateColor::Normal));
|
||||
btn_sync->SetBackgroundColor(btn_sync_bg_col);
|
||||
btn_sync->SetBorderColor(btn_sync_bd_col);
|
||||
btn_sync->SetPaddingSize({FromDIP(6), FromDIP(12)});
|
||||
btn_sync->SetMinSize(PRINTER_PANEL_SIZE);
|
||||
btn_sync->SetMaxSize(PRINTER_PANEL_SIZE);
|
||||
btn_sync->SetVertical();
|
||||
btn_sync->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { p->sync_extruder_list(); });
|
||||
p->btn_sync_printer = btn_sync;
|
||||
|
||||
auto add_extruder = [this](int index, wxString const & title) {
|
||||
StaticGroup *static_box = new StaticGroup(p->m_panel_printer_content, wxID_ANY, title);
|
||||
static_box->SetFont(Label::Body_10);
|
||||
static_box->SetForegroundColour("#909090");
|
||||
static_box->ShowBadge(true);
|
||||
wxStaticBoxSizer *static_box_sizer = new wxStaticBoxSizer(static_box, wxVERTICAL);
|
||||
// AMS count
|
||||
wxBoxSizer * ams_count_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxStaticText *ams_count_title = new wxStaticText(static_box, wxID_ANY, _L("AMS"));
|
||||
ams_count_title->SetFont(Label::Body_14);
|
||||
ams_count_title->SetForegroundColour("#262E30");
|
||||
auto ams_count_text = new wxStaticText(static_box, wxID_ANY, wxString("1/1"));
|
||||
ams_count_text->SetFont(Label::Body_14);
|
||||
ams_count_text->SetForegroundColour("#262E30");
|
||||
AMSCountPopupWindow::UpdateAMSCount(index, ams_count_text);
|
||||
auto ams_count_edit = new ScalableButton(static_box, wxID_ANY, "edit");
|
||||
ams_count_edit->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index, ams_count_text](auto &evt) {
|
||||
PopupWindow *window = new AMSCountPopupWindow(ams_count_text, ams_count_text, index);
|
||||
auto pos = ams_count_text->ClientToScreen({0, 0});
|
||||
auto size = ams_count_text->GetSize();
|
||||
size.SetWidth(size.GetWidth() + FromDIP(10));
|
||||
window->Position(pos, size);
|
||||
window->Popup();
|
||||
});
|
||||
ams_count_edit->SetBackgroundColour(*wxWHITE);
|
||||
ams_count_sizer->Add(ams_count_title, 2, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(8));
|
||||
ams_count_sizer->Add(ams_count_text, 1, wxLEFT | wxEXPAND);
|
||||
ams_count_sizer->Add(ams_count_edit, 2, wxLEFT | wxEXPAND);
|
||||
static_box_sizer->Add(ams_count_sizer, 0, wxTOP | wxEXPAND, FromDIP(8));
|
||||
p->m_dual_extruder_sizer->Add(static_box_sizer, 1, wxEXPAND);
|
||||
return ams_count_text;
|
||||
};
|
||||
p->m_dual_extruder_sizer->Add(FromDIP(10), 0);
|
||||
auto left_extruder = add_extruder(0, _L("Left Extruder"));
|
||||
p->m_left_ams_count = left_extruder;
|
||||
p->m_dual_extruder_sizer->Add(FromDIP(2), 0);
|
||||
auto right_extruder = add_extruder(1, _L("Right Extruder"));
|
||||
p->m_right_ams_count = right_extruder;
|
||||
p->m_dual_extruder_sizer->Add(FromDIP(2), 0);
|
||||
p->left_extruder = new ExtruderGroup(p->m_panel_printer_content, 0, _L("Left"));
|
||||
p->right_extruder = new ExtruderGroup(p->m_panel_printer_content, 1, _L("Right"));
|
||||
p->single_extruder = new ExtruderGroup(p->m_panel_printer_content, -1, "");
|
||||
|
||||
auto extruder_btn = new Button(p->m_panel_printer_content, _L("Sync AMS Nozzle information"), "ams_nozzle_sync");
|
||||
extruder_btn->SetFont(Label::Body_8);
|
||||
extruder_btn->SetToolTip(_L("Synchronize nozzle information and the number of AMS"));
|
||||
extruder_btn->SetCornerRadius(0);
|
||||
StateColor extruder_btn_bg_col(std::pair<wxColour, int>(wxColour(0xCECECE), StateColor::Pressed),
|
||||
std::pair<wxColour, int>(wxColour(0xF8F8F8), StateColor::Hovered),
|
||||
std::pair<wxColour, int>(wxColour(0xF8F8F8), StateColor::Normal));
|
||||
StateColor extruder_btn_bd_col(std::pair<wxColour, int>(wxColour(0x00AE42), StateColor::Pressed),
|
||||
std::pair<wxColour, int>(wxColour(0x00AE42), StateColor::Hovered),
|
||||
std::pair<wxColour, int>(wxColour(0xEEEEEE), StateColor::Normal));
|
||||
extruder_btn->SetBackgroundColor(extruder_btn_bg_col);
|
||||
extruder_btn->SetBorderColor(extruder_btn_bd_col);
|
||||
extruder_btn->SetPaddingSize({FromDIP(6), FromDIP(12)});
|
||||
extruder_btn->SetMinSize({FromDIP(48), FromDIP(68)});
|
||||
extruder_btn->SetMaxSize({FromDIP(48), FromDIP(68)});
|
||||
extruder_btn->SetVertical();
|
||||
extruder_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { p->sync_extruder_list(); });
|
||||
p->m_extruder_sync = extruder_btn;
|
||||
p->m_dual_extruder_sizer->Add(FromDIP(2), 0);
|
||||
p->m_dual_extruder_sizer->Add(extruder_btn, 0, wxTOP | wxEXPAND, FromDIP(6));
|
||||
p->m_dual_extruder_sizer->Add(FromDIP(10), 0);
|
||||
|
||||
vsizer_printer->Add(p->m_dual_extruder_sizer, 0, wxEXPAND | wxTOP, FromDIP(5));
|
||||
// Dual Extruder Types (End)
|
||||
|
||||
vsizer_printer->AddSpacer(FromDIP(16));
|
||||
p->m_panel_printer_content->SetSizer(vsizer_printer);
|
||||
p->vsizer_printer = new wxBoxSizer(wxVERTICAL);
|
||||
p->layout_printer(true, true);
|
||||
p->m_panel_printer_content->SetSizer(p->vsizer_printer);
|
||||
p->m_panel_printer_content->Layout();
|
||||
scrolled_sizer->Add(p->m_panel_printer_content, 0, wxEXPAND, 0);
|
||||
}
|
||||
@@ -1194,7 +1332,7 @@ Sidebar::Sidebar(Plater *parent)
|
||||
//bSizer39->Hide(p->m_bpButton_del_filament); // ORCA: Hide delete filament button if there is only one filament
|
||||
}
|
||||
|
||||
ams_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition,
|
||||
auto ams_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition,
|
||||
wxBU_EXACTFIT | wxNO_BORDER, false, 16); // ORCA match icon size with other icons as 16x16
|
||||
ams_btn->SetToolTip(_L("Synchronize filament list from AMS"));
|
||||
ams_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) {
|
||||
@@ -1457,14 +1595,14 @@ void Sidebar::update_all_preset_comboboxes()
|
||||
|
||||
if (preset_bundle.use_bbl_network()) {
|
||||
//only show connection button for not-BBL printer
|
||||
connection_btn->Hide();
|
||||
p->btn_connect_printer->Hide();
|
||||
//only show sync-ams button for BBL printer
|
||||
ams_btn->Show();
|
||||
p->m_bpButton_ams_filament->Show();
|
||||
//update print button default value for bbl or third-party printer
|
||||
p_mainframe->set_print_button_to_default(MainFrame::PrintSelectType::ePrintPlate);
|
||||
} else {
|
||||
connection_btn->Show();
|
||||
ams_btn->Hide();
|
||||
p->btn_connect_printer->Show();
|
||||
p->m_bpButton_ams_filament->Hide();
|
||||
auto print_btn_type = MainFrame::PrintSelectType::eExportGcode;
|
||||
wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") : cfg.opt_string("print_host_webui");
|
||||
wxString apikey;
|
||||
@@ -1499,7 +1637,7 @@ void Sidebar::update_all_preset_comboboxes()
|
||||
//p->m_staticText_filament_settings->Update();
|
||||
|
||||
if (is_bbl_vendor || cfg.opt_bool("support_multi_bed_types")) {
|
||||
p->m_bed_type_list->Enable();
|
||||
p->combo_printer_bed->Enable();
|
||||
// Orca: don't update bed type if loading project
|
||||
if (!p->plater->is_loading_project()) {
|
||||
auto str_bed_type = wxGetApp().app_config->get_printer_setting(wxGetApp().preset_bundle->printers.get_selected_preset_name(),
|
||||
@@ -1510,17 +1648,17 @@ void Sidebar::update_all_preset_comboboxes()
|
||||
bed_type_value = preset_bundle.printers.get_edited_preset().get_default_bed_type(&preset_bundle);
|
||||
}
|
||||
|
||||
p->m_bed_type_list->SelectAndNotify(bed_type_value - 1);
|
||||
p->combo_printer_bed->SelectAndNotify(bed_type_value - 1);
|
||||
} else {
|
||||
BedType bed_type = preset_bundle.printers.get_edited_preset().get_default_bed_type(&preset_bundle);
|
||||
p->m_bed_type_list->SelectAndNotify((int) bed_type - 1);
|
||||
p->combo_printer_bed->SelectAndNotify((int) bed_type - 1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// m_bed_type_list->SelectAndNotify(btPEI - 1);
|
||||
BedType bed_type = preset_bundle.printers.get_edited_preset().get_default_bed_type(&preset_bundle);
|
||||
p->m_bed_type_list->SelectAndNotify((int) bed_type - 1);
|
||||
p->m_bed_type_list->Disable();
|
||||
p->combo_printer_bed->SelectAndNotify((int) bed_type - 1);
|
||||
p->combo_printer_bed->Disable();
|
||||
}
|
||||
|
||||
// Update the print choosers to only contain the compatible presets, update the dirty flags.
|
||||
@@ -1610,6 +1748,9 @@ void Sidebar::update_presets(Preset::Type preset_type)
|
||||
}
|
||||
|
||||
Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset();
|
||||
|
||||
bool isBBL = preset_bundle.is_bbl_vendor();
|
||||
|
||||
if (auto printer_structure_opt = printer_preset.config.option<ConfigOptionEnum<PrinterStructure>>("printer_structure")) {
|
||||
wxGetApp().plater()->get_current_canvas3D()->get_arrange_settings().align_to_y_axis = (printer_structure_opt->value == PrinterStructure::psI3);
|
||||
}
|
||||
@@ -1618,7 +1759,11 @@ void Sidebar::update_presets(Preset::Type preset_type)
|
||||
|
||||
// Update dual extrudes
|
||||
auto* nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(printer_preset.config.option("nozzle_diameter"));
|
||||
p->m_dual_extruder_sizer->Show(preset_bundle.is_bbl_vendor() && nozzle_diameter->size() == 2);
|
||||
|
||||
bool is_dual_extruder = nozzle_diameter->size() == 2;
|
||||
p->layout_printer(isBBL, is_dual_extruder);
|
||||
|
||||
Layout();
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -1689,13 +1834,16 @@ void Sidebar::msw_rescale()
|
||||
p->m_bpButton_set_filament->msw_rescale();
|
||||
p->m_flushing_volume_btn->Rescale();
|
||||
//BBS
|
||||
p->m_bed_type_list->Rescale();
|
||||
p->m_bed_type_list->SetMinSize({-1, 3 * wxGetApp().em_unit()});
|
||||
p->combo_printer_bed->Rescale();
|
||||
p->combo_printer_bed->SetMinSize({-1, 3 * wxGetApp().em_unit()});
|
||||
p->left_extruder->Rescale();
|
||||
p->right_extruder->Rescale();
|
||||
p->single_extruder->Rescale();
|
||||
|
||||
p->m_extruder_sync->SetPaddingSize({FromDIP(6), FromDIP(12)});
|
||||
p->m_extruder_sync->SetMinSize({FromDIP(48), FromDIP(68)});
|
||||
p->m_extruder_sync->SetMaxSize({FromDIP(48), FromDIP(68)});
|
||||
p->m_extruder_sync->Rescale();
|
||||
p->btn_sync_printer->SetPaddingSize({FromDIP(6), FromDIP(12)});
|
||||
p->btn_sync_printer->SetMinSize(PRINTER_PANEL_SIZE);
|
||||
p->btn_sync_printer->SetMaxSize(PRINTER_PANEL_SIZE);
|
||||
p->btn_sync_printer->Rescale();
|
||||
#if 0
|
||||
if (p->mode_sizer)
|
||||
p->mode_sizer->msw_rescale();
|
||||
@@ -2000,7 +2148,7 @@ void Sidebar::on_bed_type_change(BedType bed_type)
|
||||
{
|
||||
// btDefault option is not included in global bed type setting
|
||||
int sel_idx = (int)bed_type - 1;
|
||||
if (p->m_bed_type_list != nullptr) p->m_bed_type_list->SetSelection(sel_idx);
|
||||
if (p->combo_printer_bed != nullptr) p->combo_printer_bed->SetSelection(sel_idx);
|
||||
}
|
||||
|
||||
std::map<int, DynamicPrintConfig> Sidebar::build_filament_ams_list(MachineObject* obj)
|
||||
|
||||
@@ -215,8 +215,6 @@ private:
|
||||
std::unique_ptr<priv> p;
|
||||
|
||||
wxBoxSizer* m_scrolled_sizer = nullptr;
|
||||
ScalableButton* connection_btn = nullptr;
|
||||
ScalableButton* ams_btn = nullptr;
|
||||
};
|
||||
|
||||
class Plater: public wxPanel
|
||||
|
||||
@@ -72,7 +72,7 @@ namespace GUI {
|
||||
**/
|
||||
|
||||
PresetComboBox::PresetComboBox(wxWindow* parent, Preset::Type preset_type, const wxSize& size, PresetBundle* preset_bundle/* = nullptr*/) :
|
||||
::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, size, 0, nullptr, wxCB_READONLY),
|
||||
::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, size, 0, nullptr, preset_type == Preset::TYPE_PRINTER ? (wxCB_READONLY | wxALIGN_CENTER_HORIZONTAL) : wxCB_READONLY),
|
||||
m_type(preset_type),
|
||||
m_last_selected(wxNOT_FOUND),
|
||||
m_em_unit(em_unit(this)),
|
||||
|
||||
@@ -42,7 +42,7 @@ ComboBox::ComboBox(wxWindow *parent,
|
||||
: drop(items)
|
||||
{
|
||||
if ((style & wxALIGN_MASK) == 0 && (style & wxCB_READONLY))
|
||||
style |= wxALIGN_CENTER_HORIZONTAL;
|
||||
style |= wxALIGN_RIGHT;
|
||||
text_off = style & CB_NO_TEXT;
|
||||
TextInput::Create(parent, "", value, (style & CB_NO_DROP_ICON) ? "" : "drop_down", pos, size,
|
||||
style | wxTE_PROCESS_ENTER);
|
||||
|
||||
Reference in New Issue
Block a user