mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	Initial work for a controller GUI
This commit is contained in:
		
							parent
							
								
									29d64107de
								
							
						
					
					
						commit
						c06ce3b58c
					
				
					 7 changed files with 276 additions and 6 deletions
				
			
		
							
								
								
									
										33
									
								
								lib/Slic3r/GUI/Controller/Frame.pm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								lib/Slic3r/GUI/Controller/Frame.pm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| package Slic3r::GUI::Controller::Frame; | ||||
| use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
| 
 | ||||
| use Wx qw(:frame :id :misc :sizer); | ||||
| use Wx::Event qw(EVT_CLOSE); | ||||
| use base 'Wx::Frame'; | ||||
| 
 | ||||
| sub new { | ||||
|     my ($class) = @_; | ||||
|     my $self = $class->SUPER::new(undef, -1, "Controller", wxDefaultPosition, [500,350], wxDEFAULT_FRAME_STYLE); | ||||
|      | ||||
|     $self->{sizer} = my $sizer = Wx::BoxSizer->new(wxVERTICAL); | ||||
|     $sizer->Add(Slic3r::GUI::Controller::PrinterPanel->new($self), 1, wxEXPAND); | ||||
|      | ||||
|     $self->SetSizer($sizer); | ||||
|     $self->SetMinSize($self->GetSize); | ||||
|     $sizer->SetSizeHints($self); | ||||
|     $self->Layout; | ||||
|      | ||||
|     EVT_CLOSE($self, sub { | ||||
|         my (undef, $event) = @_; | ||||
|          | ||||
|         # ... | ||||
|          | ||||
|         $event->Skip; | ||||
|     }); | ||||
|      | ||||
|     return $self; | ||||
| } | ||||
| 
 | ||||
| 1; | ||||
							
								
								
									
										142
									
								
								lib/Slic3r/GUI/Controller/PrinterPanel.pm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								lib/Slic3r/GUI/Controller/PrinterPanel.pm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,142 @@ | |||
| package Slic3r::GUI::Controller::PrinterPanel; | ||||
| use strict; | ||||
| use warnings; | ||||
| use utf8; | ||||
| 
 | ||||
| use Wx qw(:panel :id :misc :sizer :button :bitmap); | ||||
| use Wx::Event qw(EVT_BUTTON); | ||||
| use base qw(Wx::Panel Class::Accessor); | ||||
| 
 | ||||
| __PACKAGE__->mk_accessors(qw(sender)); | ||||
| 
 | ||||
| sub new { | ||||
|     my ($class, $parent) = @_; | ||||
|     my $self = $class->SUPER::new($parent, -1, wxDefaultPosition, wxDefaultSize); | ||||
|      | ||||
|     $self->{sizer} = my $sizer = Wx::StaticBoxSizer->new(Wx::StaticBox->new($self, -1, "Printer"), wxVERTICAL); | ||||
|      | ||||
|     # connection info | ||||
|     { | ||||
|         my $conn_sizer = Wx::BoxSizer->new(wxHORIZONTAL); | ||||
|         $sizer->Add($conn_sizer, 0, wxEXPAND); | ||||
|         { | ||||
|             my $text = Wx::StaticText->new($self, -1, "Port:", wxDefaultPosition, wxDefaultSize); | ||||
|             $conn_sizer->Add($text, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); | ||||
|         } | ||||
|         { | ||||
|             $self->{serial_port_combobox} = Wx::ComboBox->new($self, -1, "", wxDefaultPosition, wxDefaultSize, []); | ||||
|             $self->scan_serial_ports; | ||||
|             $conn_sizer->Add($self->{serial_port_combobox}, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 1); | ||||
|         } | ||||
|         { | ||||
|             $self->{btn_rescan_serial} = my $btn = Wx::BitmapButton->new($self, -1, Wx::Bitmap->new("$Slic3r::var/arrow_rotate_clockwise.png", wxBITMAP_TYPE_PNG), | ||||
|                 wxDefaultPosition, wxDefaultSize, &Wx::wxBORDER_NONE); | ||||
|             $conn_sizer->Add($btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); | ||||
|             EVT_BUTTON($self, $btn, sub { $self->scan_serial_ports }); | ||||
|         } | ||||
|         { | ||||
|             my $text = Wx::StaticText->new($self, -1, "Speed:", wxDefaultPosition, wxDefaultSize); | ||||
|             $conn_sizer->Add($text, 0, wxLEFT | wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); | ||||
|         } | ||||
|         { | ||||
|             $self->{serial_speed_combobox} = Wx::ComboBox->new($self, -1, "250000", wxDefaultPosition, wxDefaultSize, | ||||
|                 ["115200", "250000"]); | ||||
|             $conn_sizer->Add($self->{serial_speed_combobox}, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 5); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     # buttons | ||||
|     { | ||||
|         my $buttons_sizer = Wx::BoxSizer->new(wxHORIZONTAL); | ||||
|         $sizer->Add($buttons_sizer, 0, wxEXPAND); | ||||
|         { | ||||
|             $self->{btn_connect} = my $btn = Wx::Button->new($self, -1, "Connect", wxDefaultPosition, wxDefaultSize); | ||||
|             $buttons_sizer->Add($btn, 0, wxRIGHT, 5); | ||||
|             EVT_BUTTON($self, $btn, \&connect); | ||||
|         } | ||||
|         { | ||||
|             $self->{btn_disconnect} = my $btn = Wx::Button->new($self, -1, "Disconnect", wxDefaultPosition, wxDefaultSize); | ||||
|             $buttons_sizer->Add($btn, 0, wxRIGHT, 5); | ||||
|             EVT_BUTTON($self, $btn, \&disconnect); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     # status | ||||
|     $self->{status_text} = Wx::StaticText->new($self, -1, "Not connected", wxDefaultPosition, wxDefaultSize); | ||||
|     $sizer->Add($self->{status_text}, 0, wxEXPAND); | ||||
|      | ||||
|     $self->SetSizer($sizer); | ||||
|     $self->SetMinSize($self->GetSize); | ||||
|     $sizer->SetSizeHints($self); | ||||
|      | ||||
|     $self->_update_connection_controls; | ||||
|      | ||||
|     return $self; | ||||
| } | ||||
| 
 | ||||
| sub _update_connection_controls { | ||||
|     my ($self) = @_; | ||||
|      | ||||
|     if ($self->sender && $self->sender->is_connected) { | ||||
|         $self->{btn_connect}->Hide; | ||||
|         $self->{btn_disconnect}->Show; | ||||
|         $self->{serial_port_combobox}->Disable; | ||||
|         $self->{serial_speed_combobox}->Disable; | ||||
|         $self->{btn_rescan_serial}->Disable; | ||||
|     } else { | ||||
|         $self->{btn_connect}->Show; | ||||
|         $self->{btn_disconnect}->Hide; | ||||
|         $self->{serial_port_combobox}->Enable; | ||||
|         $self->{serial_speed_combobox}->Enable; | ||||
|         $self->{btn_rescan_serial}->Enable; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| sub set_status { | ||||
|     my ($self, $status) = @_; | ||||
|     $self->{status_text}->SetLabel($status); | ||||
|     $self->{status_text}->Refresh; | ||||
| } | ||||
| 
 | ||||
| sub connect { | ||||
|     my ($self) = @_; | ||||
|      | ||||
|     return if $self->sender && $self->sender->is_connected; | ||||
|      | ||||
|     $self->set_status("Connecting..."); | ||||
|     $self->sender(Slic3r::GCode::Sender->new); | ||||
|     my $res = $self->sender->connect( | ||||
|         $self->{serial_port_combobox}->GetValue, | ||||
|         $self->{serial_speed_combobox}->GetValue, | ||||
|     ); | ||||
|     if (!$res) { | ||||
|         $self->set_status("Connection failed"); | ||||
|     } | ||||
|     1 until $self->sender->is_connected; | ||||
|     $self->set_status("Connected"); | ||||
|     $self->_update_connection_controls; | ||||
| } | ||||
| 
 | ||||
| sub disconnect { | ||||
|     my ($self) = @_; | ||||
|      | ||||
|     return if !$self->sender || !$self->sender->is_connected; | ||||
|      | ||||
|     $self->sender->disconnect; | ||||
|     $self->set_status("Not connected"); | ||||
|     $self->_update_connection_controls; | ||||
| } | ||||
| 
 | ||||
| sub scan_serial_ports { | ||||
|     my ($self) = @_; | ||||
|      | ||||
|     $self->{serial_port_combobox}->Clear; | ||||
|      | ||||
|     # TODO: Windows ports | ||||
|      | ||||
|     # UNIX and OS X | ||||
|     $self->{serial_port_combobox}->Append($_) | ||||
|         for glob '/dev/{ttyUSB,ttyACM,tty.,cu.,rfcomm}*'; | ||||
| } | ||||
| 
 | ||||
| 1; | ||||
|  | @ -228,6 +228,10 @@ sub _init_menubar { | |||
|         $self->_append_menu_item($windowMenu, "Select Print&er Settings Tab\tCtrl+4", 'Show the printer settings', sub { | ||||
|             $self->select_tab($tab_count-1); | ||||
|         }); | ||||
|         $windowMenu->AppendSeparator(); | ||||
|         $self->_append_menu_item($windowMenu, "Printer Controller", 'Show the printer controller', sub { | ||||
|             wxTheApp->show_printer_controller; | ||||
|         }); | ||||
|     } | ||||
|      | ||||
|     # Help menu | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alessandro Ranellucci
						Alessandro Ranellucci