class VerifyStatusUI(PeachyFrame):

    def initialize(self):
        self.grid()
        
        self._elapsed_time = StringVar()
        self._current_layer = IntVar()
        self._current_height = StringVar()
        self._current_model_height = StringVar()
        self._errors = IntVar()
        self._status = StringVar()
        self._stop_button_text = StringVar()
        self._stop_button_text.set("Abort Verification")
        self._current_status = {}

        self._print_api = PrintAPI(self.kwargs['config'],status_call_back = self.status_call_back)
        if 'filename' in self.kwargs:
            file_to_print = self.kwargs['filename']
            self._print_api.verify_gcode(file_to_print)
        else:
            self._print_api.verify_gcode(self.kwargs['layer_generator'])


        Label(self, text = "Verifying Model" ).grid(column=0,row=5)
        Label(self ).grid(column=0,row=8)

        Label(self, text = "Elapsed Time" ).grid(column=0,row=10)
        Label(self, textvariable = self._elapsed_time ).grid(column=1,row=10)

        Label(self, text = "Layer" ).grid(column=0,row=20)
        Label(self, textvariable = self._current_layer ).grid(column=1,row=20)

        Label(self, text = "Model Height (mm)" ).grid(column=0,row=35)
        Label(self, textvariable = self._current_model_height ).grid(column=1,row=35)

        Label(self, text = "Status").grid(column=0,row=60)
        Label(self, textvariable = self._status).grid(column=1,row=60)

        Label(self, text = "Errors" ).grid(column=0,row=70)
        Label(self, textvariable = self._errors ).grid(column=1,row=70)

        Label(self).grid(column=0,row=70)
        
        Button(self,textvariable=self._stop_button_text, command=self._stop_button_click).grid(column=2,row=80)
        Button(self,text="Show Errors", command=self._show_errors).grid(column=3,row=80)
        
        self.update()

    def _stop_button_click(self):
        self._print_api.stop()
        self.navigate(self.kwargs['calling_class'], printer = self.kwargs['printer'])

    def _show_errors(self):
        PopUp(self,'Errors', '\n'.join([ "SubLayer %s : %s" % (err['layer'], err['message']) for err in self._current_status['errors'] ]))

    def status_call_back(self,status):
        total_seconds = int(status['elapsed_time'].total_seconds())
        hours, remainder = divmod(total_seconds,60*60)
        minutes, seconds = divmod(remainder,60)

        self._elapsed_time.set("%02d:%02d:%02d" % (hours,minutes,seconds))
        self._current_layer.set(status['current_layer'])
        self._current_model_height.set("%.2f" % status['model_height'])
        self._errors.set(len(status['errors']))
        self._current_status = status
        self._status.set(status['status'])
        if (status['status'] == "Complete"):
            self._stop_button_text.set("Finished")

    def close(self):
        self._print_api.stop()
 def test_print_can_be_stopped_before_started(self):
     api = PrintAPI(self.default_config)
     api.stop()
class PrintStatusUI(PeachyFrame):

    def initialize(self):
        self.grid()
        self._print_api = None
        self._elapsed_time = StringVar()
        self._current_layer = IntVar()
        self._current_height = StringVar()
        self._current_model_height = StringVar()
        self._current_drips = IntVar()
        self._waiting_for_drips = StringVar()
        self._skipped_layers = IntVar()
        self._status = StringVar()
        self._stop_button_text = StringVar()
        self._stop_button_text.set("Abort Print")
        self._drips_per_second_setting = DoubleVar()

        Label(self, text = "Elapsed Time" ).grid(column=0,row=10)
        Label(self, textvariable = self._elapsed_time ).grid(column=1,row=10)

        Label(self, text = "Layer" ).grid(column=0,row=20)
        Label(self, textvariable = self._current_layer ).grid(column=1,row=20)

        Label(self, text = "Actual Height (mm)" ).grid(column=0,row=30)
        Label(self, textvariable = self._current_height ).grid(column=1,row=30)

        Label(self, text = "Model Height (mm)" ).grid(column=0,row=35)
        Label(self, textvariable = self._current_model_height ).grid(column=1,row=35)

        Label(self, text = "Drips" ).grid(column=0,row=40)
        Label(self, textvariable = self._current_drips ).grid(column=1,row=40)

        Label(self, text = "Waiting for drips" ).grid(column=0,row=50)
        Label(self, textvariable = self._waiting_for_drips ).grid(column=1,row=50)

        Label(self, text = "Skipped Layers" ).grid(column=0,row=55)
        Label(self, textvariable = self._skipped_layers ).grid(column=1,row=55)

        Label(self, text = "Status").grid(column=0,row=60)
        Label(self, textvariable = self._status).grid(column=1,row=60)

        self.options_frame = LabelFrame(self, text="In Print Options", padx=5, pady=5)
        self.options_frame.grid(column=12,row=10,rowspan = 60,sticky=N+S+E+W)
        self.options_frame.grid_remove()

        Label(self.options_frame, text = 'Drips Per Second').grid(column=0,row=10)
        RylanSpinbox(self.options_frame, from_=0.0, to=100.0, increment= 0.1, command = self._dps_changed, textvariable = self._drips_per_second_setting).grid(column=1,row=10)

        Label(self).grid(column=0,row=70)
        
        Button(self,textvariable=self._stop_button_text, command=self._stop_button_click).grid(column=2,row=80)

        self._print_api = PrintAPI(self.kwargs['config'],status_call_back = self.status_call_back)
        if 'filename' in self.kwargs:
            file_to_print = self.kwargs['filename']
            self._print_api.print_gcode(file_to_print)
        else:
            self._print_api.print_layers(self.kwargs['layer_generator'])
        if self._print_api.can_set_drips_per_second():
            self.options_frame.grid()
            self._drips_per_second_setting.set(self._print_api.get_drips_per_second())
        
        self.update()

    def _stop_button_click(self):
        self._print_api.stop()
        self.navigate(self.kwargs['calling_class'], printer = self.kwargs['printer'])

    def status_call_back(self,status):
        total_seconds = int(status['elapsed_time'].total_seconds())
        hours, remainder = divmod(total_seconds,60*60)
        minutes, seconds = divmod(remainder,60)

        self._elapsed_time.set("%02d:%02d:%02d" % (hours,minutes,seconds))
        self._current_layer.set(status['current_layer'])
        self._current_height.set("%.2f" % status['height'])
        self._current_model_height.set("%.2f" % status['model_height'])
        self._current_drips.set(status['drips'])
        self._waiting_for_drips.set("Yes" if status['waiting_for_drips'] else "No")
        self._skipped_layers.set(status['skipped_layers'])
        self._status.set(status['status'])
        if (status['status'] == "Complete"):
            self._stop_button_text.set("Finished")

    def _dps_changed(self):
        self._print_api.set_drips_per_second(self._drips_per_second_setting.get())

    def close(self):
        if self._print_api:
            self._print_api.stop()
예제 #4
0
class PrintStatusUI(PeachyFrame):

    def initialize(self):
        self.grid()
        
        self._elapsed_time = StringVar()
        self._current_layer = IntVar()
        self._current_height = StringVar()
        self._current_model_height = StringVar()
        self._current_drips = IntVar()
        self._waiting_for_drips = StringVar()
        self._skipped_layers = IntVar()
        self._status = StringVar()
        self._stop_button_text = StringVar()
        self._stop_button_text.set("Abort Print")

        self._print_api = PrintAPI(self.kwargs['config'],status_call_back = self.status_call_back)
        if 'filename' in self.kwargs:
            file_to_print = self.kwargs['filename']
            self._print_api.print_gcode(file_to_print)
        else:
            self._print_api.print_layers(self.kwargs['layer_generator'])


        Label(self, text = "Elapsed Time" ).grid(column=0,row=10)
        Label(self, textvariable = self._elapsed_time ).grid(column=1,row=10)

        Label(self, text = "Layer" ).grid(column=0,row=20)
        Label(self, textvariable = self._current_layer ).grid(column=1,row=20)

        Label(self, text = "Actual Height (mm)" ).grid(column=0,row=30)
        Label(self, textvariable = self._current_height ).grid(column=1,row=30)

        Label(self, text = "Model Height (mm)" ).grid(column=0,row=35)
        Label(self, textvariable = self._current_model_height ).grid(column=1,row=35)

        Label(self, text = "Drips" ).grid(column=0,row=40)
        Label(self, textvariable = self._current_drips ).grid(column=1,row=40)

        Label(self, text = "Waiting for drips" ).grid(column=0,row=50)
        Label(self, textvariable = self._waiting_for_drips ).grid(column=1,row=50)

        Label(self, text = "Skipped Layers" ).grid(column=0,row=55)
        Label(self, textvariable = self._skipped_layers ).grid(column=1,row=55)

        Label(self, text = "Status").grid(column=0,row=60)
        Label(self, textvariable = self._status).grid(column=1,row=60)

        Label(self).grid(column=0,row=70)
        
        Button(self,textvariable=self._stop_button_text, command=self._stop_button_click).grid(column=2,row=80)
        
        self.update()

    def _stop_button_click(self):
        self._print_api.stop()
        self.navigate(self.kwargs['calling_class'], printer = self.kwargs['printer'])

    def status_call_back(self,status):
        total_seconds = int(status['elapsed_time'].total_seconds())
        hours, remainder = divmod(total_seconds,60*60)
        minutes, seconds = divmod(remainder,60)

        self._elapsed_time.set("%02d:%02d:%02d" % (hours,minutes,seconds))
        self._current_layer.set(status['current_layer'])
        self._current_height.set("%.2f" % status['height'])
        self._current_model_height.set("%.2f" % status['model_height'])
        self._current_drips.set(status['drips'])
        self._waiting_for_drips.set("Yes" if status['waiting_for_drips'] else "No")
        self._skipped_layers.set(status['skipped_layers'])
        self._status.set(status['status'])
        if (status['status'] == "Complete"):
            self._stop_button_text.set("Finished")

    def close(self):
        self._print_api.stop()
 def test_print_can_be_stopped_before_started(self):
     api = PrintAPI(self.DEFAULT_CONFIG)
     api.stop()
예제 #6
0
class VerifyStatusUI(PeachyFrame):
    def initialize(self):
        self.grid()

        self._elapsed_time = StringVar()
        self._current_layer = IntVar()
        self._current_height = StringVar()
        self._current_model_height = StringVar()
        self._errors = IntVar()
        self._status = StringVar()
        self._stop_button_text = StringVar()
        self._stop_button_text.set("Abort Verification")
        self._current_status = {}

        self._print_api = PrintAPI(self.kwargs['config'],
                                   status_call_back=self.status_call_back)
        if 'filename' in self.kwargs:
            file_to_print = self.kwargs['filename']
            self._print_api.verify_gcode(file_to_print)
        else:
            self._print_api.verify_gcode(self.kwargs['layer_generator'])

        Label(self, text="Verifying Model").grid(column=0, row=5)
        Label(self).grid(column=0, row=8)

        Label(self, text="Elapsed Time").grid(column=0, row=10)
        Label(self, textvariable=self._elapsed_time).grid(column=1, row=10)

        Label(self, text="Layer").grid(column=0, row=20)
        Label(self, textvariable=self._current_layer).grid(column=1, row=20)

        Label(self, text="Model Height (mm)").grid(column=0, row=35)
        Label(self, textvariable=self._current_model_height).grid(column=1,
                                                                  row=35)

        Label(self, text="Status").grid(column=0, row=60)
        Label(self, textvariable=self._status).grid(column=1, row=60)

        Label(self, text="Errors").grid(column=0, row=70)
        Label(self, textvariable=self._errors).grid(column=1, row=70)

        Label(self).grid(column=0, row=70)

        Button(self,
               textvariable=self._stop_button_text,
               command=self._stop_button_click).grid(column=2, row=80)
        Button(self, text="Show Errors",
               command=self._show_errors).grid(column=3, row=80)

        self.update()

    def _stop_button_click(self):
        self._print_api.stop()
        self.navigate(self.kwargs['calling_class'],
                      printer=self.kwargs['printer'])

    def _show_errors(self):
        PopUp(
            self, 'Errors', '\n'.join([
                "SubLayer %s : %s" % (err['layer'], err['message'])
                for err in self._current_status['errors']
            ]))

    def status_call_back(self, status):
        total_seconds = int(status['elapsed_time'].total_seconds())
        hours, remainder = divmod(total_seconds, 60 * 60)
        minutes, seconds = divmod(remainder, 60)

        self._elapsed_time.set("%02d:%02d:%02d" % (hours, minutes, seconds))
        self._current_layer.set(status['current_layer'])
        self._current_model_height.set("%.2f" % status['model_height'])
        self._errors.set(len(status['errors']))
        self._current_status = status
        self._status.set(status['status'])
        if (status['status'] == "Complete"):
            self._stop_button_text.set("Finished")

    def close(self):
        self._print_api.stop()
예제 #7
0
class PrintStatusUI(PeachyFrame):
    def initialize(self):
        self.grid()
        self._print_api = None
        self._elapsed_time = StringVar()
        self._current_layer = IntVar()
        self._current_height = StringVar()
        self._current_model_height = StringVar()
        self._current_drips = IntVar()
        self._waiting_for_drips = StringVar()
        self._skipped_layers = IntVar()
        self._status = StringVar()
        self._stop_button_text = StringVar()
        self._stop_button_text.set("Abort Print")
        self._drips_per_second_setting = DoubleVar()

        Label(self, text="Elapsed Time").grid(column=0, row=10)
        Label(self, textvariable=self._elapsed_time).grid(column=1, row=10)

        Label(self, text="Layer").grid(column=0, row=20)
        Label(self, textvariable=self._current_layer).grid(column=1, row=20)

        Label(self, text="Actual Height (mm)").grid(column=0, row=30)
        Label(self, textvariable=self._current_height).grid(column=1, row=30)

        Label(self, text="Model Height (mm)").grid(column=0, row=35)
        Label(self, textvariable=self._current_model_height).grid(column=1,
                                                                  row=35)

        Label(self, text="Drips").grid(column=0, row=40)
        Label(self, textvariable=self._current_drips).grid(column=1, row=40)

        Label(self, text="Waiting for drips").grid(column=0, row=50)
        Label(self, textvariable=self._waiting_for_drips).grid(column=1,
                                                               row=50)

        Label(self, text="Skipped Layers").grid(column=0, row=55)
        Label(self, textvariable=self._skipped_layers).grid(column=1, row=55)

        Label(self, text="Status").grid(column=0, row=60)
        Label(self, textvariable=self._status).grid(column=1, row=60)

        self.options_frame = LabelFrame(self,
                                        text="In Print Options",
                                        padx=5,
                                        pady=5)
        self.options_frame.grid(column=12,
                                row=10,
                                rowspan=60,
                                sticky=N + S + E + W)
        self.options_frame.grid_remove()

        Label(self.options_frame, text='Drips Per Second').grid(column=0,
                                                                row=10)
        RylanSpinbox(self.options_frame,
                     from_=0.0,
                     to=100.0,
                     increment=0.1,
                     command=self._dps_changed,
                     textvariable=self._drips_per_second_setting).grid(
                         column=1, row=10)

        Label(self).grid(column=0, row=70)

        Button(self,
               textvariable=self._stop_button_text,
               command=self._stop_button_click).grid(column=2, row=80)

        self._print_api = PrintAPI(self.kwargs['config'],
                                   status_call_back=self.status_call_back)
        if 'filename' in self.kwargs:
            file_to_print = self.kwargs['filename']
            self._print_api.print_gcode(file_to_print)
        else:
            self._print_api.print_layers(self.kwargs['layer_generator'])
        if self._print_api.can_set_drips_per_second():
            self.options_frame.grid()
            self._drips_per_second_setting.set(
                self._print_api.get_drips_per_second())

        self.update()

    def _stop_button_click(self):
        self._print_api.stop()
        self.navigate(self.kwargs['calling_class'],
                      printer=self.kwargs['printer'])

    def status_call_back(self, status):
        total_seconds = int(status['elapsed_time'].total_seconds())
        hours, remainder = divmod(total_seconds, 60 * 60)
        minutes, seconds = divmod(remainder, 60)

        self._elapsed_time.set("%02d:%02d:%02d" % (hours, minutes, seconds))
        self._current_layer.set(status['current_layer'])
        self._current_height.set("%.2f" % status['height'])
        self._current_model_height.set("%.2f" % status['model_height'])
        self._current_drips.set(status['drips'])
        self._waiting_for_drips.set(
            "Yes" if status['waiting_for_drips'] else "No")
        self._skipped_layers.set(status['skipped_layers'])
        self._status.set(status['status'])
        if (status['status'] == "Complete"):
            self._stop_button_text.set("Finished")

    def _dps_changed(self):
        self._print_api.set_drips_per_second(
            self._drips_per_second_setting.get())

    def close(self):
        if self._print_api:
            self._print_api.stop()
 def test_print_can_be_stopped_before_started(self):
     api = PrintAPI(self.default_config)
     api.stop()