diff options
author | YuSanka <yusanka@gmail.com> | 2018-01-26 03:44:34 +0300 |
---|---|---|
committer | YuSanka <yusanka@gmail.com> | 2018-01-26 03:44:34 +0300 |
commit | 40569787319264acb5799479618866111db98aa3 (patch) | |
tree | 6812b03ef515a6933d68c154890f14b86d4cc1c0 /lib | |
parent | 4d234e90aef7e5036893079bb1ba87c20ab4292c (diff) |
Implementation of C++ to Perl callbacks from Browse & Test buttons.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Slic3r/GUI/MainFrame.pm | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/lib/Slic3r/GUI/MainFrame.pm b/lib/Slic3r/GUI/MainFrame.pm index 642ab2627..1d1cf1479 100644 --- a/lib/Slic3r/GUI/MainFrame.pm +++ b/lib/Slic3r/GUI/MainFrame.pm @@ -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"); |