mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Implementation of C++ to Perl callbacks from Browse & Test buttons.
This commit is contained in:
		
							parent
							
								
									4d234e90ae
								
							
						
					
					
						commit
						4056978731
					
				
					 9 changed files with 140 additions and 45 deletions
				
			
		| 
						 | 
				
			
			@ -23,6 +23,10 @@ our $last_config;
 | 
			
		|||
our $VALUE_CHANGE_EVENT    = Wx::NewEventType;
 | 
			
		||||
# 2) To inform about a preset selection change or a "modified" status change.
 | 
			
		||||
our $PRESETS_CHANGED_EVENT = Wx::NewEventType;
 | 
			
		||||
# 3) To inform about a click on Browse button
 | 
			
		||||
our $BUTTON_BROWSE_EVENT   = Wx::NewEventType;
 | 
			
		||||
# 4) To inform about a click on Test button
 | 
			
		||||
our $BUTTON_TEST_EVENT     = Wx::NewEventType;
 | 
			
		||||
 | 
			
		||||
sub new {
 | 
			
		||||
    my ($class, %params) = @_;
 | 
			
		||||
| 
						 | 
				
			
			@ -113,7 +117,6 @@ sub _init_tabpanel {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
    $self->{options_tabs} = {};
 | 
			
		||||
    
 | 
			
		||||
    for my $tab_name (qw(print filament printer)) {
 | 
			
		||||
        my $tab;
 | 
			
		||||
        $tab = $self->{options_tabs}{$tab_name} = ("Slic3r::GUI::Tab::" . ucfirst $tab_name)->new(
 | 
			
		||||
| 
						 | 
				
			
			@ -203,7 +206,61 @@ sub _init_tabpanel {
 | 
			
		|||
            $self->{plater}->on_config_change($tab->get_config);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    Slic3r::GUI::create_preset_tabs(wxTheApp->{preset_bundle}, wxTheApp->{app_config}, $self->{no_controller}, $VALUE_CHANGE_EVENT, $PRESETS_CHANGED_EVENT);
 | 
			
		||||
    # The following event is emited by the C++ Tab implementation ,
 | 
			
		||||
    # when the Browse button was clicked
 | 
			
		||||
    EVT_COMMAND($self, -1, $BUTTON_BROWSE_EVENT, sub {
 | 
			
		||||
        my ($self, $event) = @_;
 | 
			
		||||
        my $msg = $event->GetString;
 | 
			
		||||
        print "BUTTON_BROWSE_EVENT: ", $msg, "\n";
 | 
			
		||||
 | 
			
		||||
        # look for devices
 | 
			
		||||
        my $entries;
 | 
			
		||||
        {
 | 
			
		||||
            my $res = Net::Bonjour->new('http');
 | 
			
		||||
            $res->discover;
 | 
			
		||||
            $entries = [ $res->entries ];
 | 
			
		||||
        }
 | 
			
		||||
        if (@{$entries}) {
 | 
			
		||||
            my $dlg = Slic3r::GUI::BonjourBrowser->new($self, $entries);
 | 
			
		||||
            my $tab = Slic3r::GUI::get_preset_tab("printer");
 | 
			
		||||
            $tab->load_key_value('octoprint_host', $dlg->GetValue . ":" . $dlg->GetPort)
 | 
			
		||||
                if $dlg->ShowModal == wxID_OK;
 | 
			
		||||
        } else {
 | 
			
		||||
            Wx::MessageDialog->new($self, 'No Bonjour device found', 'Device Browser', wxOK | wxICON_INFORMATION)->ShowModal;
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    # The following event is emited by the C++ Tab implementation ,
 | 
			
		||||
    # when the Test button was clicked
 | 
			
		||||
    EVT_COMMAND($self, -1, $BUTTON_TEST_EVENT, sub {
 | 
			
		||||
        my ($self, $event) = @_;
 | 
			
		||||
        my $msg = $event->GetString;
 | 
			
		||||
        print "BUTTON_TEST_EVENT: ", $msg, "\n";
 | 
			
		||||
 | 
			
		||||
        my $ua = LWP::UserAgent->new;
 | 
			
		||||
        $ua->timeout(10);
 | 
			
		||||
 | 
			
		||||
        my $config = Slic3r::GUI::get_preset_tab("printer")->get_config;
 | 
			
		||||
        my $res = $ua->get(
 | 
			
		||||
            "http://" . $config->octoprint_host . "/api/version",
 | 
			
		||||
            'X-Api-Key' => $config->octoprint_apikey,
 | 
			
		||||
        );
 | 
			
		||||
        if ($res->is_success) {
 | 
			
		||||
            Slic3r::GUI::show_info($self, "Connection to OctoPrint works correctly.", "Success!");
 | 
			
		||||
        } else {
 | 
			
		||||
            Slic3r::GUI::show_error($self,
 | 
			
		||||
                "I wasn't able to connect to OctoPrint (" . $res->status_line . "). "
 | 
			
		||||
                . "Check hostname and OctoPrint version (at least 1.1.0 is required).");
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    # A variable to inform C++ Tab implementation about disabling of Browse button
 | 
			
		||||
    $self->{is_disabled_button_browse} = (!eval "use Net::Bonjour; 1") ? 1 : 0 ;
 | 
			
		||||
    # A variable to inform C++ Tab implementation about user_agent
 | 
			
		||||
    $self->{is_user_agent} = (eval "use LWP::UserAgent; 1") ? 1 : 0 ;    
 | 
			
		||||
    Slic3r::GUI::create_preset_tabs(wxTheApp->{preset_bundle}, wxTheApp->{app_config}, 
 | 
			
		||||
                                    $self->{no_controller}, $self->{is_disabled_button_browse},
 | 
			
		||||
                                    $self->{is_user_agent},
 | 
			
		||||
                                    $VALUE_CHANGE_EVENT, $PRESETS_CHANGED_EVENT,
 | 
			
		||||
                                    $BUTTON_BROWSE_EVENT, $BUTTON_TEST_EVENT);
 | 
			
		||||
    $self->{options_tabs2}{print} = Slic3r::GUI::get_preset_tab("print");
 | 
			
		||||
    $self->{options_tabs2}{filament} = Slic3r::GUI::get_preset_tab("filament");
 | 
			
		||||
    $self->{options_tabs2}{printer} = Slic3r::GUI::get_preset_tab("printer");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -186,12 +186,15 @@ void add_debug_menu(wxMenuBar *menu)
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config, 
 | 
			
		||||
						bool no_controller, int event_value_change, int event_presets_changed)
 | 
			
		||||
void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config,
 | 
			
		||||
						bool no_controller, bool is_disabled_button_browse, bool is_user_agent,
 | 
			
		||||
						int event_value_change, int event_presets_changed,
 | 
			
		||||
						int event_button_browse, int event_button_test)
 | 
			
		||||
{	
 | 
			
		||||
	add_created_tab(new TabPrint   (g_wxTabPanel), preset_bundle, app_config, no_controller);
 | 
			
		||||
	add_created_tab(new TabFilament(g_wxTabPanel), preset_bundle, app_config, no_controller);
 | 
			
		||||
	add_created_tab(new TabPrinter (g_wxTabPanel), preset_bundle, app_config, no_controller);
 | 
			
		||||
	add_created_tab(new TabPrint	(g_wxTabPanel, no_controller), preset_bundle, app_config);
 | 
			
		||||
	add_created_tab(new TabFilament	(g_wxTabPanel, no_controller), preset_bundle, app_config);
 | 
			
		||||
	add_created_tab(new TabPrinter	(g_wxTabPanel, no_controller, is_disabled_button_browse, is_user_agent), 
 | 
			
		||||
					preset_bundle, app_config);
 | 
			
		||||
	g_wxTabPanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGED, ([](wxCommandEvent e){
 | 
			
		||||
		Tab* panel = (Tab*)g_wxTabPanel->GetCurrentPage();
 | 
			
		||||
		if (panel->GetName().compare("Print Settings")==0 ||
 | 
			
		||||
| 
						 | 
				
			
			@ -204,6 +207,11 @@ void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config,
 | 
			
		|||
			continue;
 | 
			
		||||
		tab->set_event_value_change(wxEventType(event_value_change));
 | 
			
		||||
		tab->set_event_presets_changed(wxEventType(event_presets_changed));
 | 
			
		||||
		if (tab->name() == "printer"){
 | 
			
		||||
			TabPrinter* tab_printer = static_cast<TabPrinter*>(tab);
 | 
			
		||||
			tab_printer->set_event_button_browse(wxEventType(event_button_browse));
 | 
			
		||||
			tab_printer->set_event_button_test(wxEventType(event_button_test));
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -298,9 +306,8 @@ void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, b
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void add_created_tab(Tab* panel, PresetBundle *preset_bundle, AppConfig *app_config, bool no_controller)
 | 
			
		||||
void add_created_tab(Tab* panel, PresetBundle *preset_bundle, AppConfig *app_config)
 | 
			
		||||
{
 | 
			
		||||
	panel->m_no_controller = no_controller;
 | 
			
		||||
	panel->m_show_btn_incompatible_presets = app_config->get("show_incompatible_presets").empty();
 | 
			
		||||
	panel->create_preset_tab(preset_bundle);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -315,7 +322,7 @@ void show_error(wxWindow* parent, std::string message){
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void show_info(wxWindow* parent, std::string message, std::string title){
 | 
			
		||||
	auto msg_wingow = new wxMessageDialog(parent, message, title.empty() ? "Notise" : title, wxOK | wxICON_INFORMATION);
 | 
			
		||||
	auto msg_wingow = new wxMessageDialog(parent, message, title.empty() ? "Notice" : title, wxOK | wxICON_INFORMATION);
 | 
			
		||||
	msg_wingow->ShowModal();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,11 +37,13 @@ void set_tab_panel(wxNotebook *tab_panel);
 | 
			
		|||
void add_debug_menu(wxMenuBar *menu);
 | 
			
		||||
// Create a new preset tab (print, filament and printer),
 | 
			
		||||
void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config, 
 | 
			
		||||
						bool no_controller, int event_value_change, int event_presets_changed);
 | 
			
		||||
						bool no_controller, bool is_disabled_button_browse,	bool is_user_agent,
 | 
			
		||||
						int event_value_change, int event_presets_changed,
 | 
			
		||||
						int event_button_browse, int event_button_test);
 | 
			
		||||
TabIface* get_preset_tab_iface(char *name);
 | 
			
		||||
 | 
			
		||||
// add it at the end of the tab panel.
 | 
			
		||||
void add_created_tab(Tab* panel, PresetBundle *preset_bundle, AppConfig *app_config, bool no_controller);
 | 
			
		||||
void add_created_tab(Tab* panel, PresetBundle *preset_bundle, AppConfig *app_config);
 | 
			
		||||
// Change option value in config
 | 
			
		||||
void change_opt_value(DynamicPrintConfig& config, t_config_option_key opt_key, boost::any value);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ void Tab::create_preset_tab(PresetBundle *preset_bundle)
 | 
			
		|||
	m_treectrl = new wxTreeCtrl(panel, wxID_ANY, wxDefaultPosition, wxSize(185, -1), 
 | 
			
		||||
		wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_SUNKEN | wxWANTS_CHARS);
 | 
			
		||||
	m_left_sizer->Add(m_treectrl, 1, wxEXPAND);
 | 
			
		||||
	m_icons = new wxImageList(16, 16, true, 1/*, 1*/);
 | 
			
		||||
	m_icons = new wxImageList(16, 16, true, 1);
 | 
			
		||||
	// Index of the last icon inserted into $self->{icons}.
 | 
			
		||||
	m_icon_count = -1;
 | 
			
		||||
	m_treectrl->AssignImageList(m_icons);
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,6 @@ void Tab::create_preset_tab(PresetBundle *preset_bundle)
 | 
			
		|||
	}));
 | 
			
		||||
 | 
			
		||||
	// Initialize the DynamicPrintConfig by default keys/values.
 | 
			
		||||
	// Possible %params keys: no_controller
 | 
			
		||||
	build();
 | 
			
		||||
	rebuild_page_tree();
 | 
			
		||||
	update();
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +111,7 @@ PageShp Tab::add_options_page(wxString title, std::string icon, bool is_extruder
 | 
			
		|||
		catch (std::out_of_range e) { icon_idx = -1; }
 | 
			
		||||
		if (icon_idx == -1) {
 | 
			
		||||
			// Add a new icon to the icon list.
 | 
			
		||||
			const auto img_icon = new wxIcon(wxString::FromUTF8(Slic3r::var(/*"" + */icon).c_str()), wxBITMAP_TYPE_PNG);
 | 
			
		||||
			const auto img_icon = new wxIcon(wxString::FromUTF8(Slic3r::var(icon).c_str()), wxBITMAP_TYPE_PNG);
 | 
			
		||||
			m_icons->Add(*img_icon);
 | 
			
		||||
			icon_idx = ++m_icon_count; //  $icon_idx = $self->{icon_count} + 1; $self->{icon_count} = $icon_idx;
 | 
			
		||||
			m_icon_index[icon] = icon_idx;
 | 
			
		||||
| 
						 | 
				
			
			@ -533,7 +532,7 @@ void TabPrint::update()
 | 
			
		|||
	Freeze();
 | 
			
		||||
 | 
			
		||||
	if ( m_config->opt_bool("spiral_vase") && 
 | 
			
		||||
		!(m_config->opt_int("perimeters") == 1 && m_config->opt_int("top_solid_layers") == 0 && /*m_config->opt_float("fill_density") == 0*/
 | 
			
		||||
		!(m_config->opt_int("perimeters") == 1 && m_config->opt_int("top_solid_layers") == 0 &&
 | 
			
		||||
			m_config->option<ConfigOptionPercent>("fill_density")->value == 0)) {
 | 
			
		||||
		std::string msg_text = "The Spiral Vase mode requires:\n"
 | 
			
		||||
			"- one perimeter\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -543,7 +542,7 @@ void TabPrint::update()
 | 
			
		|||
 			"- no ensure_vertical_shell_thickness\n"
 | 
			
		||||
  			"\nShall I adjust those settings in order to enable Spiral Vase?";
 | 
			
		||||
		auto dialog = new wxMessageDialog(parent(), msg_text, wxT("Spiral Vase"), wxICON_WARNING | wxYES | wxNO);
 | 
			
		||||
		DynamicPrintConfig new_conf = *m_config;//new DynamicPrintConfig;
 | 
			
		||||
		DynamicPrintConfig new_conf = *m_config;
 | 
			
		||||
 		if (dialog->ShowModal() == wxID_YES) {
 | 
			
		||||
			new_conf.set_key_value("perimeters", new ConfigOptionInt(1));
 | 
			
		||||
			new_conf.set_key_value("top_solid_layers", new ConfigOptionInt(0));
 | 
			
		||||
| 
						 | 
				
			
			@ -1028,26 +1027,30 @@ void TabPrinter::build()
 | 
			
		|||
			};
 | 
			
		||||
 | 
			
		||||
			line.append_option(serial_port);
 | 
			
		||||
			line.append_option(/*serial_speed*/optgroup->get_option("serial_speed"));
 | 
			
		||||
			line.append_option(optgroup->get_option("serial_speed"));
 | 
			
		||||
			line.append_widget(serial_test);
 | 
			
		||||
			optgroup->append_line(line);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		optgroup = page->new_optgroup("OctoPrint upload");
 | 
			
		||||
		// # append two buttons to the Host line
 | 
			
		||||
		auto octoprint_host_browse = [] (wxWindow* parent) {
 | 
			
		||||
		auto octoprint_host_browse = [this] (wxWindow* parent) {
 | 
			
		||||
			auto btn = new wxButton(parent, wxID_ANY, "Browse\u2026", wxDefaultPosition, wxDefaultSize, wxBU_LEFT);
 | 
			
		||||
//			btn->SetFont($Slic3r::GUI::small_font);
 | 
			
		||||
			btn->SetBitmap(wxBitmap(wxString::FromUTF8(Slic3r::var("zoom.png").c_str()), wxBITMAP_TYPE_PNG));
 | 
			
		||||
			auto sizer = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
			sizer->Add(btn);
 | 
			
		||||
 | 
			
		||||
// 			if (!eval "use Net::Bonjour; 1") {
 | 
			
		||||
// 				btn->Disable;
 | 
			
		||||
// 			}
 | 
			
		||||
			if (m_is_disabled_button_browse) 
 | 
			
		||||
				btn->Disable();
 | 
			
		||||
 | 
			
		||||
			btn->Bind(wxEVT_BUTTON, [parent](wxCommandEvent e){
 | 
			
		||||
				// # look for devices
 | 
			
		||||
			btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e){
 | 
			
		||||
				if (m_event_button_browse > 0){
 | 
			
		||||
					wxCommandEvent event(m_event_button_browse);
 | 
			
		||||
					event.SetString("Button BROWSE was clicked!");
 | 
			
		||||
					g_wxMainFrame->ProcessWindowEvent(event);
 | 
			
		||||
				}
 | 
			
		||||
// 				// # look for devices
 | 
			
		||||
// 				auto entries;
 | 
			
		||||
// 				{
 | 
			
		||||
// 					my $res = Net::Bonjour->new('http');
 | 
			
		||||
| 
						 | 
				
			
			@ -1060,23 +1063,28 @@ void TabPrinter::build()
 | 
			
		|||
// 						if $dlg->ShowModal == wxID_OK;
 | 
			
		||||
// 				}
 | 
			
		||||
// 				else {
 | 
			
		||||
					auto msg_window = new wxMessageDialog(parent, "No Bonjour device found", "Device Browser", wxOK | wxICON_INFORMATION);
 | 
			
		||||
					msg_window->ShowModal();
 | 
			
		||||
//				}
 | 
			
		||||
// 					auto msg_window = new wxMessageDialog(parent, "No Bonjour device found", "Device Browser", wxOK | wxICON_INFORMATION);
 | 
			
		||||
// 					msg_window->ShowModal();
 | 
			
		||||
// 				}
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
			return sizer;
 | 
			
		||||
		};
 | 
			
		||||
 | 
			
		||||
		auto octoprint_host_test = [this](wxWindow* parent) {
 | 
			
		||||
			auto btn = m_octoprint_host_test_btn = new wxButton(parent, wxID_ANY,
 | 
			
		||||
				"Test", wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT);
 | 
			
		||||
			auto btn = m_octoprint_host_test_btn = new wxButton(parent, wxID_ANY, "Test", 
 | 
			
		||||
				wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT);
 | 
			
		||||
//			btn->SetFont($Slic3r::GUI::small_font);
 | 
			
		||||
			btn->SetBitmap(wxBitmap(wxString::FromUTF8(Slic3r::var("wrench.png").c_str()), wxBITMAP_TYPE_PNG));
 | 
			
		||||
			auto sizer = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
			sizer->Add(btn);
 | 
			
		||||
 | 
			
		||||
			btn->Bind(wxEVT_BUTTON, [parent](wxCommandEvent e) {
 | 
			
		||||
			btn->Bind(wxEVT_BUTTON, [this, parent](wxCommandEvent e) {
 | 
			
		||||
				if (m_event_button_test > 0){
 | 
			
		||||
					wxCommandEvent event(m_event_button_test);
 | 
			
		||||
					event.SetString("Button TEST was clicked!");
 | 
			
		||||
					g_wxMainFrame->ProcessWindowEvent(event);
 | 
			
		||||
				}
 | 
			
		||||
// 				my $ua = LWP::UserAgent->new;
 | 
			
		||||
// 				$ua->timeout(10);
 | 
			
		||||
// 
 | 
			
		||||
| 
						 | 
				
			
			@ -1259,7 +1267,7 @@ void TabPrinter::update(){
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	en = !m_config->opt_string("octoprint_host").empty();
 | 
			
		||||
	if ( en/*&& eval "use LWP::UserAgent; 1"*/)
 | 
			
		||||
	if ( en && m_is_user_agent)
 | 
			
		||||
		m_octoprint_host_test_btn->Enable();
 | 
			
		||||
	else 
 | 
			
		||||
		m_octoprint_host_test_btn->Disable(); 
 | 
			
		||||
| 
						 | 
				
			
			@ -1384,7 +1392,7 @@ void Tab::rebuild_page_tree()
 | 
			
		|||
// If the current profile is modified, user is asked to save the changes.
 | 
			
		||||
void Tab::select_preset(std::string preset_name /*= ""*/)
 | 
			
		||||
{
 | 
			
		||||
	std::string name = preset_name/*.ToStdString()*/;
 | 
			
		||||
	std::string name = preset_name;
 | 
			
		||||
	auto force = false;
 | 
			
		||||
	auto presets = m_presets;
 | 
			
		||||
	// If no name is provided, select the "-- default --" preset.
 | 
			
		||||
| 
						 | 
				
			
			@ -1442,7 +1450,7 @@ void Tab::select_preset(std::string preset_name /*= ""*/)
 | 
			
		|||
		if (current_dirty || printer_tab)
 | 
			
		||||
			m_preset_bundle->update_compatible_with_printer(true);
 | 
			
		||||
		// Initialize the UI from the current preset.
 | 
			
		||||
		load_current_preset(/*\@reload_dependent_tabs*/);
 | 
			
		||||
		load_current_preset();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1527,7 +1535,6 @@ void Tab::save_preset(std::string name /*= ""*/)
 | 
			
		|||
	if (name.empty()) {
 | 
			
		||||
		auto preset = m_presets->get_selected_preset();
 | 
			
		||||
		auto default_name = preset.is_default ? "Untitled" : preset.name;
 | 
			
		||||
// 		$default_name = ~s / \.[iI][nN][iI]$//;
 | 
			
		||||
 		bool have_extention = boost::iends_with(default_name, ".ini");
 | 
			
		||||
		if (have_extention)
 | 
			
		||||
		{
 | 
			
		||||
| 
						 | 
				
			
			@ -1731,7 +1738,7 @@ ConfigOptionsGroupShp Page::new_optgroup(std::string title, int noncommon_label_
 | 
			
		|||
	optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value){
 | 
			
		||||
		//! This function will be called from OptionGroup.
 | 
			
		||||
		//! Using of CallAfter is redundant.
 | 
			
		||||
		//! And in some cases it causes undate() function to be recalled again
 | 
			
		||||
		//! And in some cases it causes update() function to be recalled again
 | 
			
		||||
//!        wxTheApp->CallAfter([this, opt_key, value]() {
 | 
			
		||||
			static_cast<Tab*>(GetParent())->update_dirty();
 | 
			
		||||
			static_cast<Tab*>(GetParent())->on_value_change(opt_key, value);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -96,6 +96,7 @@ protected:
 | 
			
		|||
	std::vector<PageShp>			m_pages;	// $self->{pages} = [];
 | 
			
		||||
	bool				m_disable_tree_sel_changed_event;
 | 
			
		||||
	bool				m_show_incompatible_presets;
 | 
			
		||||
	bool				m_no_controller;
 | 
			
		||||
 | 
			
		||||
	std::vector<std::string>	m_reload_dependent_tabs = {};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -105,15 +106,14 @@ protected:
 | 
			
		|||
 | 
			
		||||
public:
 | 
			
		||||
	PresetBundle*		m_preset_bundle;
 | 
			
		||||
	bool				m_no_controller;
 | 
			
		||||
	bool				m_show_btn_incompatible_presets;
 | 
			
		||||
	PresetCollection*	m_presets;
 | 
			
		||||
	DynamicPrintConfig*	m_config;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	Tab() {}
 | 
			
		||||
	Tab(wxNotebook* parent, const char *title, const char* name) : 
 | 
			
		||||
		m_parent(parent), m_title(title), m_name(name) {
 | 
			
		||||
	Tab(wxNotebook* parent, const char *title, const char* name, bool no_controller) : 
 | 
			
		||||
		m_parent(parent), m_title(title), m_name(name), m_no_controller(no_controller) {
 | 
			
		||||
		Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBK_LEFT | wxTAB_TRAVERSAL);
 | 
			
		||||
	}
 | 
			
		||||
	~Tab(){}
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +175,8 @@ class TabPrint : public Tab
 | 
			
		|||
{
 | 
			
		||||
public:
 | 
			
		||||
	TabPrint() {}
 | 
			
		||||
	TabPrint(wxNotebook* parent) : Tab(parent, "Print Settings", "print") {}
 | 
			
		||||
	TabPrint(wxNotebook* parent, bool no_controller) : 
 | 
			
		||||
		Tab(parent, "Print Settings", "print", no_controller) {}
 | 
			
		||||
	~TabPrint(){}
 | 
			
		||||
 | 
			
		||||
	ogStaticText*	m_recommended_thin_wall_thickness_description_line;
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +195,8 @@ class TabFilament : public Tab
 | 
			
		|||
	ogStaticText*	m_cooling_description_line;
 | 
			
		||||
public:
 | 
			
		||||
	TabFilament() {}
 | 
			
		||||
	TabFilament(wxNotebook* parent) : Tab(parent, "Filament Settings", "filament") {}
 | 
			
		||||
	TabFilament(wxNotebook* parent, bool no_controller) : 
 | 
			
		||||
		Tab(parent, "Filament Settings", "filament", no_controller) {}
 | 
			
		||||
	~TabFilament(){}
 | 
			
		||||
 | 
			
		||||
	void		build() override;
 | 
			
		||||
| 
						 | 
				
			
			@ -206,6 +208,11 @@ public:
 | 
			
		|||
//Slic3r::GUI::Tab::Printer;
 | 
			
		||||
class TabPrinter : public Tab
 | 
			
		||||
{
 | 
			
		||||
	bool		m_is_disabled_button_browse;
 | 
			
		||||
	bool		m_is_user_agent;
 | 
			
		||||
	// similar event by clicking Buttons "Browse" & "Test"
 | 
			
		||||
	wxEventType	m_event_button_browse = 0;
 | 
			
		||||
	wxEventType m_event_button_test = 0;
 | 
			
		||||
public:
 | 
			
		||||
	wxButton*	m_serial_test_btn;
 | 
			
		||||
	wxButton*	m_octoprint_host_test_btn;
 | 
			
		||||
| 
						 | 
				
			
			@ -213,9 +220,11 @@ public:
 | 
			
		|||
	size_t		m_extruders_count;
 | 
			
		||||
	std::vector<PageShp>	m_extruder_pages;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	TabPrinter() {}
 | 
			
		||||
	TabPrinter(wxNotebook* parent) : Tab(parent, "Printer Settings", "printer") {}
 | 
			
		||||
	TabPrinter(wxNotebook* parent, bool no_controller, bool is_disabled_btn_browse, bool is_user_agent) :
 | 
			
		||||
		Tab(parent, "Printer Settings", "printer", no_controller),
 | 
			
		||||
		m_is_disabled_button_browse(is_disabled_btn_browse), 
 | 
			
		||||
		m_is_user_agent(is_user_agent) {}
 | 
			
		||||
	~TabPrinter(){}
 | 
			
		||||
 | 
			
		||||
	void		build() override;
 | 
			
		||||
| 
						 | 
				
			
			@ -224,6 +233,10 @@ public:
 | 
			
		|||
	void		extruders_count_changed(size_t extruders_count);
 | 
			
		||||
	void		build_extruder_pages();
 | 
			
		||||
	void		on_preset_loaded() override;
 | 
			
		||||
 | 
			
		||||
	// Set the events to the callbacks posted to the main frame window (currently implemented in Perl).
 | 
			
		||||
	void		set_event_button_browse(wxEventType evt)	{ m_event_button_browse = evt; }
 | 
			
		||||
	void		set_event_button_test(wxEventType evt)		{ m_event_button_test = evt; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class SavePresetWindow :public wxDialog
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,8 +9,9 @@ void	TabIface::update_ui_from_settings()	{ m_tab->update_ui_from_settings();}
 | 
			
		|||
void	TabIface::select_preset(char* name)	{ m_tab->select_preset(name);}
 | 
			
		||||
char*	TabIface::title()					{ return (char*)m_tab->title().ToStdString().data();}
 | 
			
		||||
void	TabIface::load_config(DynamicPrintConfig* config)	{ m_tab->load_config(*config);}
 | 
			
		||||
void	TabIface::load_key_value(char* opt_key, char* value){ m_tab->load_key_value(opt_key, static_cast<std::string>(value)); }
 | 
			
		||||
bool	TabIface::current_preset_is_dirty()					{ return m_tab->current_preset_is_dirty();}
 | 
			
		||||
DynamicPrintConfig*			TabIface::get_config()			{ return m_tab->get_config();}
 | 
			
		||||
DynamicPrintConfig*			TabIface::get_config()			{ return m_tab->get_config(); }
 | 
			
		||||
PresetCollection*			TabIface::get_presets()			{ return m_tab->get_presets(); }
 | 
			
		||||
std::vector<std::string>	TabIface::get_dependent_tabs()	{ return m_tab->get_dependent_tabs(); }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,6 +20,7 @@ public:
 | 
			
		|||
	void		select_preset(char* name);
 | 
			
		||||
	char*		title();
 | 
			
		||||
	void		load_config(DynamicPrintConfig* config);
 | 
			
		||||
	void		load_key_value(char* opt_key, char* value);
 | 
			
		||||
	bool		current_preset_is_dirty();
 | 
			
		||||
	DynamicPrintConfig*		get_config();
 | 
			
		||||
	PresetCollection*			TabIface::get_presets();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,8 +35,14 @@ void set_tab_panel(SV *ui)
 | 
			
		|||
void add_debug_menu(SV *ui)
 | 
			
		||||
    %code%{ Slic3r::GUI::add_debug_menu((wxMenuBar*)wxPli_sv_2_object(aTHX_ ui, "Wx::MenuBar")); %};
 | 
			
		||||
 | 
			
		||||
void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config, bool no_controller, int event_value_change, int event_presets_changed)
 | 
			
		||||
    %code%{ Slic3r::GUI::create_preset_tabs(preset_bundle, app_config, no_controller, event_value_change, event_presets_changed); %};
 | 
			
		||||
void create_preset_tabs(PresetBundle *preset_bundle, AppConfig *app_config, 
 | 
			
		||||
                        bool no_controller, bool is_disabled_button_browse, bool is_user_agent,
 | 
			
		||||
                        int event_value_change, int event_presets_changed,
 | 
			
		||||
                        int event_button_browse, int event_button_test)
 | 
			
		||||
    %code%{ Slic3r::GUI::create_preset_tabs(preset_bundle, app_config, no_controller, 
 | 
			
		||||
                                            is_disabled_button_browse, is_user_agent,
 | 
			
		||||
                                            event_value_change, event_presets_changed, 
 | 
			
		||||
                                            event_button_browse, event_button_test); %};
 | 
			
		||||
 | 
			
		||||
Ref<TabIface> get_preset_tab(char *name)
 | 
			
		||||
    %code%{ RETVAL=Slic3r::GUI::get_preset_tab_iface(name); %};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@
 | 
			
		|||
    void		select_preset(char* name);
 | 
			
		||||
	void		load_config(DynamicPrintConfig* config);
 | 
			
		||||
	bool		current_preset_is_dirty();
 | 
			
		||||
	void		load_key_value(char* opt_key, char* value);
 | 
			
		||||
    char*		title();
 | 
			
		||||
	Ref<DynamicPrintConfig>		get_config();
 | 
			
		||||
	Ref<PresetCollection>		get_presets();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue