mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-12 17:27:52 -06:00
Added Regular view mode to the menu.
Right column objects send fron Perl to C++
This commit is contained in:
parent
146a02a300
commit
d310668462
4 changed files with 225 additions and 139 deletions
|
@ -409,8 +409,10 @@ sub new {
|
|||
}
|
||||
}
|
||||
|
||||
my $frequently_changed_parameters_sizer = Wx::BoxSizer->new(wxVERTICAL);#(wxHORIZONTAL);
|
||||
my $frequently_changed_parameters_sizer = Wx::BoxSizer->new(wxVERTICAL);
|
||||
Slic3r::GUI::add_frequently_changed_parameters($self, $frequently_changed_parameters_sizer, $presets);
|
||||
my $expert_mode_part_sizer = Wx::BoxSizer->new(wxVERTICAL);
|
||||
Slic3r::GUI::add_expert_mode_part($self, $expert_mode_part_sizer);
|
||||
|
||||
my $object_info_sizer;
|
||||
{
|
||||
|
@ -495,9 +497,10 @@ sub new {
|
|||
$scrolled_window_sizer->Add($print_info_sizer, 0, wxEXPAND, 0);
|
||||
|
||||
my $right_sizer = Wx::BoxSizer->new(wxVERTICAL);
|
||||
$right_sizer->SetMinSize([-1, 600]);
|
||||
$right_sizer->SetMinSize([320, 600]);
|
||||
$right_sizer->Add($presets, 0, wxEXPAND | wxTOP, 10) if defined $presets;
|
||||
$right_sizer->Add($frequently_changed_parameters_sizer, 0, wxEXPAND | wxTOP, 0) if defined $frequently_changed_parameters_sizer;
|
||||
$right_sizer->Add($expert_mode_part_sizer, 0, wxEXPAND | wxTOP, 0) if defined $expert_mode_part_sizer;
|
||||
$right_sizer->Add($buttons_sizer, 0, wxEXPAND | wxBOTTOM, 5);
|
||||
$right_sizer->Add($scrolled_window_panel, 1, wxEXPAND | wxALL, 1);
|
||||
# Callback for showing / hiding the print info box.
|
||||
|
@ -525,6 +528,16 @@ sub new {
|
|||
|
||||
$sizer->SetSizeHints($self);
|
||||
$self->SetSizer($sizer);
|
||||
|
||||
# Send sizers/buttons to C++
|
||||
Slic3r::GUI::set_objects_from_perl( $frequently_changed_parameters_sizer,
|
||||
$expert_mode_part_sizer,
|
||||
$scrolled_window_sizer,
|
||||
$self->{btn_export_stl},
|
||||
$self->{btn_reslice},
|
||||
$self->{btn_print},
|
||||
$self->{btn_send_gcode},
|
||||
$self->{btn_export_gcode});
|
||||
}
|
||||
|
||||
# Last correct selected item for each preset
|
||||
|
|
|
@ -201,6 +201,16 @@ std::shared_ptr<ConfigOptionsGroup> m_optgroup;
|
|||
double m_brim_width = 0.0;
|
||||
wxButton* g_wiping_dialog_button = nullptr;
|
||||
|
||||
//showed/hided controls according to the view mode
|
||||
wxBoxSizer *g_frequently_changed_parameters_sizer = nullptr;
|
||||
wxBoxSizer *g_expert_mode_part_sizer = nullptr;
|
||||
wxBoxSizer *g_scrolled_window_sizer = nullptr;
|
||||
wxButton *g_btn_export_stl = nullptr;
|
||||
wxButton *g_btn_reslice = nullptr;
|
||||
wxButton *g_btn_print = nullptr;
|
||||
wxButton *g_btn_send_gcode = nullptr;
|
||||
wxButton *g_btn_export_gcode = nullptr;
|
||||
|
||||
static void init_label_colours()
|
||||
{
|
||||
auto luma = get_colour_approx_luma(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
||||
|
@ -260,6 +270,21 @@ void set_preset_updater(PresetUpdater *updater)
|
|||
g_PresetUpdater = updater;
|
||||
}
|
||||
|
||||
void set_objects_from_perl( wxBoxSizer *frequently_changed_parameters_sizer,
|
||||
wxBoxSizer *expert_mode_part_sizer, wxBoxSizer *scrolled_window_sizer,
|
||||
wxButton *btn_export_stl, wxButton *btn_reslice, wxButton *btn_print,
|
||||
wxButton *btn_send_gcode, wxButton *btn_export_gcode)
|
||||
{
|
||||
g_frequently_changed_parameters_sizer = frequently_changed_parameters_sizer;
|
||||
g_expert_mode_part_sizer = expert_mode_part_sizer;
|
||||
g_scrolled_window_sizer = scrolled_window_sizer;
|
||||
g_btn_export_stl = btn_export_stl;
|
||||
g_btn_reslice = btn_reslice;
|
||||
g_btn_print = btn_print;
|
||||
g_btn_send_gcode = btn_send_gcode;
|
||||
g_btn_export_gcode = btn_export_gcode;
|
||||
}
|
||||
|
||||
std::vector<Tab *>& get_tabs_list()
|
||||
{
|
||||
return g_tabs_list;
|
||||
|
@ -378,12 +403,6 @@ void get_installed_languages(wxArrayString & names,
|
|||
}
|
||||
}
|
||||
|
||||
std::string get_view_mode()
|
||||
{
|
||||
return g_AppConfig->has("view_mode") ?
|
||||
g_AppConfig->get("view_mode") : "simple";
|
||||
}
|
||||
|
||||
enum ConfigMenuIDs {
|
||||
ConfigMenuWizard,
|
||||
ConfigMenuSnapshots,
|
||||
|
@ -391,11 +410,25 @@ enum ConfigMenuIDs {
|
|||
ConfigMenuUpdate,
|
||||
ConfigMenuPreferences,
|
||||
ConfigMenuModeSimple,
|
||||
ConfigMenuModeRegular,
|
||||
ConfigMenuModeExpert,
|
||||
ConfigMenuLanguage,
|
||||
ConfigMenuCnt,
|
||||
};
|
||||
|
||||
ConfigMenuIDs get_view_mode()
|
||||
{
|
||||
if (!g_AppConfig->has("view_mode"))
|
||||
return ConfigMenuModeSimple;
|
||||
|
||||
const auto mode = g_AppConfig->get("view_mode");
|
||||
return mode == "expert" ?
|
||||
ConfigMenuModeExpert :
|
||||
mode == "regular" ?
|
||||
ConfigMenuModeRegular :
|
||||
ConfigMenuModeSimple;
|
||||
}
|
||||
|
||||
void add_config_menu(wxMenuBar *menu, int event_preferences_changed, int event_language_change)
|
||||
{
|
||||
auto local_menu = new wxMenu();
|
||||
|
@ -412,9 +445,9 @@ void add_config_menu(wxMenuBar *menu, int event_preferences_changed, int event_l
|
|||
local_menu->AppendSeparator();
|
||||
auto mode_menu = new wxMenu();
|
||||
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _(L("&Simple")), _(L("Simple View Mode")));
|
||||
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeRegular, _(L("&Regular")), _(L("Regular View Mode")));
|
||||
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeExpert, _(L("&Expert")), _(L("Expert View Mode")));
|
||||
if (get_view_mode() == "expert")
|
||||
mode_menu->Check(config_id_base + ConfigMenuModeExpert, true);
|
||||
mode_menu->Check(config_id_base + get_view_mode(), true);
|
||||
local_menu->AppendSubMenu(mode_menu, _(L("&Mode")), _(L("Slic3r View Mode")));
|
||||
local_menu->AppendSeparator();
|
||||
local_menu->Append(config_id_base + ConfigMenuLanguage, _(L("Change Application Language")));
|
||||
|
@ -481,12 +514,16 @@ void add_config_menu(wxMenuBar *menu, int event_preferences_changed, int event_l
|
|||
case ConfigMenuModeExpert:
|
||||
mode = "expert";
|
||||
break;
|
||||
case ConfigMenuModeRegular:
|
||||
mode = "regular";
|
||||
break;
|
||||
case ConfigMenuModeSimple:
|
||||
mode = "simple";
|
||||
break;
|
||||
}
|
||||
g_AppConfig->set("view_mode", mode);
|
||||
g_AppConfig->save();
|
||||
update_mode();
|
||||
});
|
||||
menu->Append(local_menu, _(L("&Configuration")));
|
||||
}
|
||||
|
@ -835,9 +872,9 @@ wxString from_u8(const std::string &str)
|
|||
}
|
||||
|
||||
|
||||
void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFlexGridSizer* preset_sizer)
|
||||
void add_expert_mode_part(wxWindow* parent, wxBoxSizer* sizer)
|
||||
{
|
||||
sizer->SetMinSize(-1, 300);
|
||||
sizer->SetMinSize(-1, 150);
|
||||
auto main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
auto main_page = new wxScrolledWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
|
||||
main_page->SetSizer(main_sizer);
|
||||
|
@ -845,16 +882,92 @@ void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFl
|
|||
sizer->Add(main_page, 1, wxEXPAND | wxALL, 1);
|
||||
|
||||
// Experiments with new UI
|
||||
// wxSizer *paneSz = new wxBoxSizer(wxVERTICAL);
|
||||
// paneSz->Add(m_optgroup->sizer, 1, wxGROW | wxEXPAND | wxLEFT | wxRIGHT, 5);
|
||||
// win->SetSizer(paneSz);
|
||||
// paneSz->SetSizeHints(win);
|
||||
|
||||
// *** Frequently Changing Parameters ***
|
||||
auto* collpane = new PrusaCollapsiblePane(main_page, wxID_ANY, "Frequently Changing Parameters:");
|
||||
// *** Objects List ***
|
||||
auto *collpane_objects = new PrusaCollapsiblePane(main_page, wxID_ANY, "Objects List:");
|
||||
// add the pane with a zero proportion value to the sizer which contains it
|
||||
main_sizer->Add(collpane, 0, wxGROW | wxALL, 0);
|
||||
main_sizer->Add(collpane_objects, 0, wxGROW | wxALL, 0);
|
||||
|
||||
wxWindow *win = collpane->GetPane();
|
||||
wxWindow *win_objects = collpane_objects->GetPane();
|
||||
|
||||
// **********************************************************************************************
|
||||
auto objects_ctrl = new wxDataViewCtrl(win_objects, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||
wxSizer *objects_sz = new wxBoxSizer(wxVERTICAL);
|
||||
objects_ctrl->SetBestFittingSize(wxSize(-1, 200));
|
||||
// TODO - Set correct height according to the opened/closed objects
|
||||
// objects_ctrl->SetMinSize(wxSize(-1, 200));
|
||||
objects_sz->Add(objects_ctrl, 1, wxGROW | wxALL, 5);
|
||||
|
||||
auto objects_model = new MyObjectTreeModel;
|
||||
objects_ctrl->AssociateModel(objects_model);
|
||||
#if wxUSE_DRAG_AND_DROP && wxUSE_UNICODE
|
||||
objects_ctrl->EnableDragSource(wxDF_UNICODETEXT);
|
||||
objects_ctrl->EnableDropTarget(wxDF_UNICODETEXT);
|
||||
#endif // wxUSE_DRAG_AND_DROP && wxUSE_UNICODE
|
||||
|
||||
// column 0 of the view control:
|
||||
|
||||
wxDataViewTextRenderer *tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT);
|
||||
wxDataViewColumn *column00 = new wxDataViewColumn("Name", tr, 0, 140, wxALIGN_LEFT,
|
||||
wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE);
|
||||
objects_ctrl->AppendColumn(column00);
|
||||
|
||||
// column 1 of the view control:
|
||||
|
||||
tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT);
|
||||
wxDataViewColumn *column01 = new wxDataViewColumn("Copy", tr, 1, 75, wxALIGN_CENTER_HORIZONTAL,
|
||||
wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE);
|
||||
objects_ctrl->AppendColumn(column01);
|
||||
|
||||
// column 2 of the view control:
|
||||
|
||||
tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT);
|
||||
wxDataViewColumn *column02 = new wxDataViewColumn("Scale", tr, 2, 80, wxALIGN_CENTER_HORIZONTAL,
|
||||
wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE);
|
||||
objects_ctrl->AppendColumn(column02);
|
||||
|
||||
// common_sizer->Add(objects_sz, 0, wxEXPAND | wxALL, 1);
|
||||
|
||||
wxSizer *paneSz_objects = new wxBoxSizer(wxVERTICAL);
|
||||
paneSz_objects->Add(objects_sz, 1, wxGROW | wxEXPAND | wxBOTTOM, 2);
|
||||
win_objects->SetSizer(paneSz_objects);
|
||||
paneSz_objects->SetSizeHints(win_objects);
|
||||
|
||||
|
||||
|
||||
// auto common_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
// common_sizer->Add(m_optgroup->sizer);
|
||||
|
||||
// auto listctrl = new wxDataViewListCtrl(win, wxID_ANY, wxDefaultPosition, wxSize(-1, 100));
|
||||
// listctrl->AppendToggleColumn("Toggle");
|
||||
// listctrl->AppendTextColumn("Text");
|
||||
// wxVector<wxVariant> data;
|
||||
// data.push_back(wxVariant(true));
|
||||
// data.push_back(wxVariant("row 1"));
|
||||
// listctrl->AppendItem(data);
|
||||
// data.clear();
|
||||
// data.push_back(wxVariant(false));
|
||||
// data.push_back(wxVariant("row 3"));
|
||||
// listctrl->AppendItem(data);
|
||||
// data.clear();
|
||||
// data.push_back(wxVariant(false));
|
||||
// data.push_back(wxVariant("row 2"));
|
||||
// listctrl->AppendItem(data);
|
||||
// common_sizer->Add(listctrl, 0, wxEXPAND | wxALL, 1);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFlexGridSizer* preset_sizer)
|
||||
{
|
||||
DynamicPrintConfig* config = &g_PresetBundle->prints.get_edited_preset().config;
|
||||
m_optgroup = std::make_shared<ConfigOptionsGroup>(win, "", config);
|
||||
m_optgroup = std::make_shared<ConfigOptionsGroup>(parent, "", config);
|
||||
// const wxArrayInt& ar = preset_sizer->GetColWidths();
|
||||
// m_optgroup->label_width = ar.IsEmpty() ? 100 : ar.front(); // doesn't work
|
||||
m_optgroup->m_on_change = [config](t_config_option_key opt_key, boost::any value){
|
||||
TabPrint* tab_print = nullptr;
|
||||
for (size_t i = 0; i < g_wxTabPanel->GetPageCount(); ++i) {
|
||||
|
@ -966,85 +1079,11 @@ void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFl
|
|||
};
|
||||
m_optgroup->append_line(line);
|
||||
|
||||
wxSizer *paneSz = new wxBoxSizer(wxVERTICAL);
|
||||
paneSz->Add(m_optgroup->sizer, 1, wxGROW | wxEXPAND | wxLEFT | wxRIGHT, 5);
|
||||
win->SetSizer(paneSz);
|
||||
paneSz->SetSizeHints(win);
|
||||
|
||||
|
||||
|
||||
// *** Objects List ***
|
||||
auto *collpane_objects = new PrusaCollapsiblePane(main_page, wxID_ANY, "Objects List:");
|
||||
// add the pane with a zero proportion value to the sizer which contains it
|
||||
main_sizer->Add(collpane_objects, 0, wxGROW | wxALL, 0);
|
||||
|
||||
wxWindow *win_objects = collpane_objects->GetPane();
|
||||
|
||||
// **********************************************************************************************
|
||||
auto objects_ctrl = new wxDataViewCtrl(win_objects, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||
wxSizer *objects_sz = new wxBoxSizer(wxVERTICAL);
|
||||
objects_ctrl->SetBestFittingSize(wxSize(-1, 200));
|
||||
// TODO - Set correct height according to the opened/closed objects
|
||||
// objects_ctrl->SetMinSize(wxSize(-1, 200));
|
||||
objects_sz->Add(objects_ctrl, 1, wxGROW | wxALL, 5);
|
||||
|
||||
auto objects_model = new MyObjectTreeModel;
|
||||
objects_ctrl->AssociateModel(objects_model);
|
||||
#if wxUSE_DRAG_AND_DROP && wxUSE_UNICODE
|
||||
objects_ctrl->EnableDragSource(wxDF_UNICODETEXT);
|
||||
objects_ctrl->EnableDropTarget(wxDF_UNICODETEXT);
|
||||
#endif // wxUSE_DRAG_AND_DROP && wxUSE_UNICODE
|
||||
|
||||
// column 0 of the view control:
|
||||
|
||||
wxDataViewTextRenderer *tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT);
|
||||
wxDataViewColumn *column00 = new wxDataViewColumn("Name", tr, 0, 140, wxALIGN_LEFT,
|
||||
wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE);
|
||||
objects_ctrl->AppendColumn(column00);
|
||||
|
||||
// column 1 of the view control:
|
||||
|
||||
tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT);
|
||||
wxDataViewColumn *column01 = new wxDataViewColumn("Copy", tr, 1, 75, wxALIGN_CENTER_HORIZONTAL,
|
||||
wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE);
|
||||
objects_ctrl->AppendColumn(column01);
|
||||
|
||||
// column 2 of the view control:
|
||||
|
||||
tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT);
|
||||
wxDataViewColumn *column02 = new wxDataViewColumn("Scale", tr, 2, 80, wxALIGN_CENTER_HORIZONTAL,
|
||||
wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE);
|
||||
objects_ctrl->AppendColumn(column02);
|
||||
|
||||
// common_sizer->Add(objects_sz, 0, wxEXPAND | wxALL, 1);
|
||||
|
||||
wxSizer *paneSz_objects = new wxBoxSizer(wxVERTICAL);
|
||||
paneSz_objects->Add(objects_sz, 1, wxGROW | wxEXPAND | wxBOTTOM, 2);
|
||||
win_objects->SetSizer(paneSz_objects);
|
||||
paneSz_objects->SetSizeHints(win_objects);
|
||||
|
||||
|
||||
|
||||
// auto common_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
// common_sizer->Add(m_optgroup->sizer);
|
||||
|
||||
// auto listctrl = new wxDataViewListCtrl(win, wxID_ANY, wxDefaultPosition, wxSize(-1, 100));
|
||||
// listctrl->AppendToggleColumn("Toggle");
|
||||
// listctrl->AppendTextColumn("Text");
|
||||
// wxVector<wxVariant> data;
|
||||
// data.push_back(wxVariant(true));
|
||||
// data.push_back(wxVariant("row 1"));
|
||||
// listctrl->AppendItem(data);
|
||||
// data.clear();
|
||||
// data.push_back(wxVariant(false));
|
||||
// data.push_back(wxVariant("row 3"));
|
||||
// listctrl->AppendItem(data);
|
||||
// data.clear();
|
||||
// data.push_back(wxVariant(false));
|
||||
// data.push_back(wxVariant("row 2"));
|
||||
// listctrl->AppendItem(data);
|
||||
// common_sizer->Add(listctrl, 0, wxEXPAND | wxALL, 1);
|
||||
sizer->Add(m_optgroup->sizer, 1, wxEXPAND | wxBOTTOM, 2);
|
||||
}
|
||||
|
||||
void update_mode()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -79,6 +79,14 @@ void set_tab_panel(wxNotebook *tab_panel);
|
|||
void set_app_config(AppConfig *app_config);
|
||||
void set_preset_bundle(PresetBundle *preset_bundle);
|
||||
void set_preset_updater(PresetUpdater *updater);
|
||||
void set_objects_from_perl( wxBoxSizer *frequently_changed_parameters_sizer,
|
||||
wxBoxSizer *expert_mode_part_sizer,
|
||||
wxBoxSizer *scrolled_window_sizer,
|
||||
wxButton *btn_export_stl,
|
||||
wxButton *btn_reslice,
|
||||
wxButton *btn_print,
|
||||
wxButton *btn_send_gcode,
|
||||
wxButton *btn_export_gcode);
|
||||
|
||||
AppConfig* get_app_config();
|
||||
wxApp* get_app();
|
||||
|
@ -150,7 +158,10 @@ wxString L_str(const std::string &str);
|
|||
wxString from_u8(const std::string &str);
|
||||
|
||||
|
||||
void add_expert_mode_part(wxWindow* parent, wxBoxSizer* sizer);
|
||||
void add_frequently_changed_parameters(wxWindow* parent, wxBoxSizer* sizer, wxFlexGridSizer* preset_sizer);
|
||||
// Update view mode according to selected menu
|
||||
void update_mode();
|
||||
|
||||
ConfigOptionsGroup* get_optgroup();
|
||||
wxButton* get_wiping_dialog_button();
|
||||
|
|
|
@ -86,6 +86,29 @@ void add_frequently_changed_parameters(SV *ui_parent, SV *ui_sizer, SV *ui_p_siz
|
|||
(wxBoxSizer*)wxPli_sv_2_object(aTHX_ ui_sizer, "Wx::BoxSizer"),
|
||||
(wxFlexGridSizer*)wxPli_sv_2_object(aTHX_ ui_p_sizer, "Wx::FlexGridSizer")); %};
|
||||
|
||||
void add_expert_mode_part(SV *ui_parent, SV *ui_sizer)
|
||||
%code%{ Slic3r::GUI::add_expert_mode_part((wxWindow*)wxPli_sv_2_object(aTHX_ ui_parent, "Wx::Window"),
|
||||
(wxBoxSizer*)wxPli_sv_2_object(aTHX_ ui_sizer, "Wx::BoxSizer")); %};
|
||||
|
||||
void set_objects_from_perl( SV *frequently_changed_parameters_sizer,
|
||||
SV *expert_mode_part_sizer,
|
||||
SV *scrolled_window_sizer,
|
||||
SV *btn_export_stl,
|
||||
SV *btn_reslice,
|
||||
SV *btn_print,
|
||||
SV *btn_send_gcode,
|
||||
SV *btn_export_gcode)
|
||||
%code%{ Slic3r::GUI::set_objects_from_perl(
|
||||
(wxBoxSizer *)wxPli_sv_2_object(aTHX_ frequently_changed_parameters_sizer, "Wx::BoxSizer"),
|
||||
(wxBoxSizer *)wxPli_sv_2_object(aTHX_ expert_mode_part_sizer, "Wx::BoxSizer"),
|
||||
(wxBoxSizer *)wxPli_sv_2_object(aTHX_ scrolled_window_sizer, "Wx::BoxSizer"),
|
||||
(wxButton *)wxPli_sv_2_object(aTHX_ btn_export_stl, "Wx::Button"),
|
||||
(wxButton *)wxPli_sv_2_object(aTHX_ btn_reslice, "Wx::Button"),
|
||||
(wxButton *)wxPli_sv_2_object(aTHX_ btn_print, "Wx::Button"),
|
||||
(wxButton *)wxPli_sv_2_object(aTHX_ btn_send_gcode, "Wx::Button"),
|
||||
(wxButton *)wxPli_sv_2_object(aTHX_ btn_export_gcode, "Wx::Button")); %};
|
||||
|
||||
|
||||
std::string fold_utf8_to_ascii(const char *src)
|
||||
%code%{ RETVAL = Slic3r::fold_utf8_to_ascii(src); %};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue