コード例 #1
0
ファイル: ui.py プロジェクト: ravithb/open-labels
 def on_btn_prnt_count_dlg_print_clicked(self,source):
     if(self.bmp_filepath == '' or os.path.exists(self.bmp_filepath)==False):
         self.statusbar.push(self.statusbar_context_id,"Label not found")
         return
     
     if(self.txt_print_count.get_text()==''):
         self.statusbar.push(self.statusbar_context_id,"Invalid number of labels to print")
         return
     
     validation = self.validate_inputs()
     if(validation ==0 ):
         self.get_input_values()            
         self.print_mgr = PrintManager()
         self.print_mgr.set_label_count(int(self.txt_print_count.get_text()))
         self.print_mgr.set_label_size(self.width,self.height)
         self.print_mgr.set_label_gaps(self.x_gap, self.y_gap)
         self.print_mgr.set_print_options(self.labels_per_row, self.paper_width,self.x_offset,self.y_offset)
         self.print_mgr.set_label_file(self.bmp_filepath)
         try:
             self.print_mgr.init()
             self.print_mgr.print_labels()
         except PrintException as e:
             self.statusbar.push(self.statusbar_context_id,"Print failed : "+e.value)
             self.warning_dialog.set_markup("Print failed. "+e.value)
             self.warning_dialog.show()
     else:
         self.statusbar.push(self.statusbar_context_id,"Invalid configuraiton")
     
     self.print_count_dialog.hide() 
コード例 #2
0
ファイル: ui.py プロジェクト: ravithb/open-labels
    def on_btn_prnt_count_dlg_print_clicked(self, source):
        if (self.bmp_filepath == ''
                or os.path.exists(self.bmp_filepath) == False):
            self.statusbar.push(self.statusbar_context_id, "Label not found")
            return

        if (self.txt_print_count.get_text() == ''):
            self.statusbar.push(self.statusbar_context_id,
                                "Invalid number of labels to print")
            return

        validation = self.validate_inputs()
        if (validation == 0):
            self.get_input_values()
            self.print_mgr = PrintManager()
            self.print_mgr.set_label_count(int(
                self.txt_print_count.get_text()))
            self.print_mgr.set_label_size(self.width, self.height)
            self.print_mgr.set_label_gaps(self.x_gap, self.y_gap)
            self.print_mgr.set_print_options(self.labels_per_row,
                                             self.paper_width, self.x_offset,
                                             self.y_offset)
            self.print_mgr.set_label_file(self.bmp_filepath)
            try:
                self.print_mgr.init()
                self.print_mgr.print_labels()
            except PrintException as e:
                self.statusbar.push(self.statusbar_context_id,
                                    "Print failed : " + e.value)
                self.warning_dialog.set_markup("Print failed. " + e.value)
                self.warning_dialog.show()
        else:
            self.statusbar.push(self.statusbar_context_id,
                                "Invalid configuraiton")

        self.print_count_dialog.hide()
コード例 #3
0
ファイル: print_server.py プロジェクト: ravithb/open-labels
class PrintServer(object):
    '''
    classdocs
    '''
    def __init__(self, port, webroot):
        self.port = port
        self.webroot = webroot

    def set_configuration(self, width, height, x_gap, y_gap, paper_width,
                          labels_per_row, x_offset, y_offset):
        self.print_mgr = PrintManager()
        self.print_mgr.set_label_gaps(x_gap, y_gap)
        self.print_mgr.set_print_options(labels_per_row, paper_width, x_offset,
                                         y_offset)

    def run_server(self):
        self.httpd.serve_forever(poll_interval=0.5)

    def start_server(self):
        os.chdir(os.path.join(self.webroot, "htdocs"))

        print_job_handler_class = get_print_job_hander(self.print_mgr)
        self.httpd = socketserver.TCPServer(("", self.port),
                                            print_job_handler_class)

        print("Daemon started on port : ", self.port)

        try:
            threading.Thread(target=self.run_server, args=()).start()
        except KeyboardInterrupt:
            print("Stopping....")
            self.httpd.server_close()
        finally:
            self.print_mgr.close_printer()

    def stop_server(self):
        self.print_mgr.close_printer()
        self.httpd.server_close()
        self.httpd.shutdown()
コード例 #4
0
ファイル: print_server.py プロジェクト: ravithb/open-labels
class PrintServer(object):
    """
    classdocs
    """

    def __init__(self, port, webroot):
        self.port = port
        self.webroot = webroot

    def set_configuration(self, width, height, x_gap, y_gap, paper_width, labels_per_row, x_offset, y_offset):
        self.print_mgr = PrintManager()
        self.print_mgr.set_label_gaps(x_gap, y_gap)
        self.print_mgr.set_print_options(labels_per_row, paper_width, x_offset, y_offset)

    def run_server(self):
        self.httpd.serve_forever(poll_interval=0.5)

    def start_server(self):
        os.chdir(os.path.join(self.webroot, "htdocs"))

        print_job_handler_class = get_print_job_hander(self.print_mgr)
        self.httpd = socketserver.TCPServer(("", self.port), print_job_handler_class)

        print("Daemon started on port : ", self.port)

        try:
            threading.Thread(target=self.run_server, args=()).start()
        except KeyboardInterrupt:
            print("Stopping....")
            self.httpd.server_close()
        finally:
            self.print_mgr.close_printer()

    def stop_server(self):
        self.print_mgr.close_printer()
        self.httpd.server_close()
        self.httpd.shutdown()
コード例 #5
0
ファイル: main.py プロジェクト: ravithb/open-labels
                        help="Number of lables to print",
                        type=int)
    parser.add_argument("-p",
                        "--printer_port",
                        help="Printer device path [eg: /dev/usb/lp0]")
    parser.add_argument("-d",
                        "--run_as_daemon",
                        help="Printer device path [eg: /dev/usb/lp0]")
    parser.add_argument("-l",
                        "--listen",
                        help="Daemon listen port. Default 31173",
                        type=int)

    args = parser.parse_args()

    print_mgr = PrintManager()
    print_mgr.set_label_gaps(args.horizontal_gap_mm, args.vertical_gap_mm)
    print_mgr.set_print_options(args.labels_per_row, args.paper_width_mm,
                                args.label_x_offset_mm, args.label_y_offset_mm)
    print_mgr.set_label_count(args.label_count)

    if (args.printer_port):
        print_mgr.set_printer_port(args.printer_port)

    print(print_mgr.get_config())

    if (args.run_as_daemon):
        #         daemon = PrintDaemon()
        print("****** Open Labels Daemon ******")
        print("Starting....")
コード例 #6
0
ファイル: ui.py プロジェクト: ravithb/open-labels
class OpenLabelsUi:
    def resource_path(self):
        """ Get absolute path to resource, works for dev and for PyInstaller """
        try:
            # PyInstaller creates a temp folder and stores path in _MEIPASS
            base_path = sys._MEIPASS
        except Exception:
            base_path = os.path.dirname(os.path.realpath(__file__))

        print(base_path)
        return base_path

    def on_main_window_destroy(self, object, data=None):
        print("quit with cancel")
        Gtk.main_quit()

    def on_quit_activate(self, menuitem, data=None):
        print("quit from menu")
        self.stop_server()
        Gtk.main_quit()

    def on_about_activate(self, menuitem, data=None):
        self.about_dialog.show()

    def on_about_dlg_close(self, object):
        self.about_dialog.hide()

    def on_click_server_start_stop(self, object):
        if (self.server_running):
            self.stop_server()
        else:
            validation = self.validate_inputs()
            if (validation == 0):
                port = 31173
                self.get_input_values()
                self.statusbar.push(self.statusbar_context_id,
                                    "Starting server...")
                self.start_server(port)

            else:
                self.statusbar.push(self.statusbar_context_id,
                                    "Invalid configuraiton")

    def start_server(self, port):
        self.print_server = PrintServer(port,\
                    os.path.dirname(os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../"))))
        self.print_server.set_configuration(self.width, self.height, self.x_gap, \
            self.y_gap, self.paper_width, self.labels_per_row, self.x_offset, self.y_offset)
        try:
            self.print_server.start_server()
        except OSError as e:
            self.statusbar.push(self.statusbar_context_id,
                                "Server start failed. " + e.strerror)
            self.server_running = False
            return
        self.statusbar.push(self.statusbar_context_id,
                            "Server started on port " + str(port))
        self.server_running = True
        self.btn_start_server.set_label("Stop Server")

    def stop_server(self):
        if (self.print_server != None):
            self.print_server.stop_server()
            self.server_running = False
            self.btn_start_server.set_label("Start Server")
            self.statusbar.push(self.statusbar_context_id, "Server stopped.")

    def on_warning_dialog_close(self, object, object2):
        self.warning_dialog.hide()

    def on_click_print_label(self, object):
        if (self.bmp_filepath == ''
                or os.path.exists(self.bmp_filepath) == False):
            self.warning_dialog.set_markup("Please select a label image")
            self.warning_dialog.show()
            self.statusbar.push(self.statusbar_context_id,
                                "Label image not found")
            return
        validation = self.validate_inputs()
        if (validation == 0):
            self.print_count_dialog.show()
        else:
            self.warning_dialog.set_markup("Invalid configuration.")
            self.warning_dialog.show()
            self.statusbar.push(self.statusbar_context_id,
                                "Invalid configuraiton")

    def on_click_browse(self, object):
        self.filechooser_dialog.show()

    def on_save_name_dialog_close(self, object):
        self.save_name_dialog.hide()

    def on_save_dialog_cancel_btn_clicked(self, object):
        self.save_name_dialog.hide()

    def on_save_dialog_ok_button_clicked(self, object):
        if (self.txt_save_name.get_text() == ""):
            self.warning_dialog.set_markup("Please enter a name")
            self.warning_dialog.show()
            return
        self.save_name_dialog.hide()
        ui_data = self.get_preset_from_ui(self.txt_save_name.get_text())
        self.save_preset(ui_data)

    def on_btn_save_preset_clicked(self, source):
        (model, iter) = self.preset_listbox.get_selection().get_selected()
        selected_row = model.get_value(iter, 0)
        if (selected_row != ''):
            self.txt_save_name.set_text(selected_row)
        else:
            self.txt_save_name.set_text("")
        self.save_name_dialog.show()

    def on_btn_del_preset_clicked(self, source):
        (model, iter) = self.preset_listbox.get_selection().get_selected()
        selected_row = model.get_value(iter, 0)
        if (selected_row != ''):
            self.delete_preset_dialog.set_markup(
                "Are you sure you need to delete " + selected_row + " ?")
            self.delete_preset_dialog.target_row_id = selected_row
            self.delete_preset_dialog.show()

    def btn_del_preset_dlg_cancel_clicked(self, source):
        self.delete_preset_dialog.hide()

    def btn_del_preset_dlg_del_clicked(self, source):
        self.delete_preset(self.delete_preset_dialog.target_row_id)
        self.delete_preset_dialog.hide()

    def on_preset_select(self, source, index, col_object):
        (model, iter) = source.get_selection().get_selected()
        selected_row = model.get_value(iter, 0)
        data = self.preset.get_preset(selected_row)
        self.set_preset_to_ui(data)

    def on_btn_filechooser_dlg_cancel_clicked(self, source):
        self.filechooser_dialog.hide()

    def on_btn_filechooser_dlg_select_clicked(self, source):
        self.bmp_filepath = self.filechooser_dialog.get_filename()
        self.preview_img.set_from_file(self.bmp_filepath)
        self.filechooser_dialog.hide()

    def on_btn_prnt_count_dlg_cancel_clicked(self, source):
        self.print_count_dialog.hide()

    def on_btn_prnt_count_dlg_print_clicked(self, source):
        if (self.bmp_filepath == ''
                or os.path.exists(self.bmp_filepath) == False):
            self.statusbar.push(self.statusbar_context_id, "Label not found")
            return

        if (self.txt_print_count.get_text() == ''):
            self.statusbar.push(self.statusbar_context_id,
                                "Invalid number of labels to print")
            return

        validation = self.validate_inputs()
        if (validation == 0):
            self.get_input_values()
            self.print_mgr = PrintManager()
            self.print_mgr.set_label_count(int(
                self.txt_print_count.get_text()))
            self.print_mgr.set_label_size(self.width, self.height)
            self.print_mgr.set_label_gaps(self.x_gap, self.y_gap)
            self.print_mgr.set_print_options(self.labels_per_row,
                                             self.paper_width, self.x_offset,
                                             self.y_offset)
            self.print_mgr.set_label_file(self.bmp_filepath)
            try:
                self.print_mgr.init()
                self.print_mgr.print_labels()
            except PrintException as e:
                self.statusbar.push(self.statusbar_context_id,
                                    "Print failed : " + e.value)
                self.warning_dialog.set_markup("Print failed. " + e.value)
                self.warning_dialog.show()
        else:
            self.statusbar.push(self.statusbar_context_id,
                                "Invalid configuraiton")

        self.print_count_dialog.hide()

    def set_preset_to_ui(self, data):
        if ('width' in data):
            self.txt_width.set_text(str(data['width']))
        if ('height' in data):
            self.txt_height.set_text(str(data['height']))
        if ('x_gap' in data):
            self.txt_x_gap.set_text(str(data['x_gap']))
        if ('y_gap' in data):
            self.txt_y_gap.set_text(str(data['y_gap']))
        if ('paper_width' in data):
            self.txt_paper_width.set_text(str(data['paper_width']))
        if ('labels_per_row' in data):
            self.txt_labels_per_row.set_text(str(data['labels_per_row']))
        if ('x_offset' in data):
            self.txt_x_offset.set_text(str(data['x_offset']))
        if ('y_offset' in data):
            self.txt_y_offset.set_text(str(data['y_offset']))

    def get_preset_from_ui(self, name):
        data = {name: {"width":self.txt_width.get_text(),\
                       "height":self.txt_height.get_text(),\
                       "x_gap":self.txt_x_gap.get_text(),\
                       "y_gap":self.txt_y_gap.get_text(),\
                       "paper_width":self.txt_paper_width.get_text(),\
                       "labels_per_row":self.txt_labels_per_row.get_text(),\
                       "y_offset":self.txt_y_offset.get_text(),\
                       "x_offset":self.txt_x_offset.get_text()}}
        return data

    def get_input_values(self):
        self.width = int(self.txt_width.get_text())
        self.height = int(self.txt_height.get_text())
        self.paper_width = int(self.txt_paper_width.get_text())
        self.labels_per_row = int(self.txt_labels_per_row.get_text())

        if (self.txt_x_gap.get_text() != ''):
            self.x_gap = int(self.txt_x_gap.get_text())
        else:
            self.x_gap = 0

        if (self.txt_y_gap.get_text() != ''):
            self.y_gap = int(self.txt_y_gap.get_text())
        else:
            self.y_gap = 0

        if (self.txt_x_offset.get_text() != ''):
            self.x_offset = int(self.txt_x_offset.get_text())
        else:
            self.x_offset = 0

        if (self.txt_y_offset.get_text() != ''):
            self.y_offset = int(self.txt_y_offset.get_text())
        else:
            self.y_offset = 0

    def validate_inputs(self):
        error_count = 0
        if (len(self.txt_width.get_text().strip()) == 0
                or int(self.txt_width.get_text()) <= 0):
            self.warning_dialog.set_markup("Invalid width.")
            error_count += 1
        if (len(self.txt_height.get_text().strip()) == 0
                or int(self.txt_height.get_text()) <= 0):
            self.warning_dialog.set_markup("Invalid height")
            error_count += 1
        if (len(self.txt_paper_width.get_text().strip()) == 0
                or int(self.txt_paper_width.get_text()) <= 0):
            self.warning_dialog.set_markup("Invalid paper width")
            error_count += 1
        if (len(self.txt_labels_per_row.get_text().strip()) == 0
                or int(self.txt_labels_per_row.get_text()) <= 1):
            self.warning_dialog.set_markup(
                "Labels per row must be greater than or equal to 1")
            error_count += 1
        if (len(self.txt_x_gap.get_text().strip()) == 0
                or int(self.txt_x_gap.get_text()) < 0):
            self.warning_dialog.set_markup("Invalid x gap")
            error_count += 1
        if (len(self.txt_y_gap.get_text().strip()) == 0
                or int(self.txt_y_gap.get_text()) < 0):
            self.warning_dialog.set_markup("Invalid y gap")
            error_count += 1
        if (len(self.txt_x_offset.get_text().strip()) == 0
                or int(self.txt_x_offset.get_text()) < 0):
            self.warning_dialog.set_markup("Invalid x offset")
            error_count += 1
        if (len(self.txt_y_offset.get_text().strip()) == 0
                or int(self.txt_y_offset.get_text()) < 0):
            self.warning_dialog.set_markup("Invalid y offset")
            error_count += 1
        if (error_count > 0):
            self.warning_dialog.show()
            return 1
        return 0

    def save_preset(self, ps):
        result = self.validate_inputs()
        if (result == 0):
            self.preset.save_preset(ps)
            self.update_preset_list()

    def delete_preset(self, ps):
        self.preset.delete_preset(ps)
        self.update_preset_list()

    def update_preset_list(self):
        self.preset_liststore.clear()
        if (self.preset.preset_data != None):
            for name, pdata in self.preset.preset_data.items():
                plist = list([name, \
                             int(pdata["width"]), \
                             int(pdata["height"])])
                self.preset_liststore.append(plist)

        self.preset_listbox.set_model(self.preset_liststore)

    def __init__(self):
        self.print_server = None
        self.bmp_filepath = ''
        self.gladefile = os.path.abspath(
            os.path.join(self.resource_path(), "ui.glade"))
        self.builder = Gtk.Builder()
        self.builder.add_from_file(self.gladefile)

        self.builder.connect_signals(self)

        self.window = self.builder.get_object("main_window")
        self.filechooser_dialog = self.builder.get_object("filechooser_dialog")
        self.warning_dialog = self.builder.get_object("warning_dialog")
        self.save_name_dialog = self.builder.get_object("save_name_dialog")
        self.delete_preset_dialog = self.builder.get_object(
            "delete_preset_dialog")
        self.print_count_dialog = self.builder.get_object("print_count_dialog")
        self.about_dialog = self.builder.get_object("about_dialog")
        self.statusbar = self.builder.get_object("statusbar")
        self.btn_start_server = self.builder.get_object("btn_server")
        self.preset_listbox = self.builder.get_object("preset_listbox")
        self.btn_save_preset = self.builder.get_object("btn_save_preset")
        self.btn_del_preset = self.builder.get_object("btn_del_preset")
        self.preset_liststore = self.builder.get_object("preset_liststore")
        self.preview_img = self.builder.get_object("preview_img")

        self.txt_width = self.builder.get_object("txt_width")
        self.txt_height = self.builder.get_object("txt_height")
        self.txt_x_gap = self.builder.get_object("txt_x_gap")
        self.txt_y_gap = self.builder.get_object("txt_y_gap")
        self.txt_paper_width = self.builder.get_object("txt_pap_width")
        self.txt_labels_per_row = self.builder.get_object("txt_labels_per_row")
        self.txt_x_offset = self.builder.get_object("txt_x_offset")
        self.txt_y_offset = self.builder.get_object("txt_y_offset")

        self.filechooser_dialog.set_transient_for(self.window)
        self.warning_dialog.set_transient_for(self.window)
        self.save_name_dialog.set_transient_for(self.window)
        self.delete_preset_dialog.set_transient_for(self.window)
        self.print_count_dialog.set_transient_for(self.window)
        self.about_dialog.set_transient_for(self.window)
        self.txt_width = self.builder.get_object("txt_width")
        self.txt_height = self.builder.get_object("txt_height")
        self.txt_x_gap = self.builder.get_object("txt_x_gap")
        self.txt_y_gap = self.builder.get_object("txt_y_gap")
        self.txt_paper_width = self.builder.get_object("txt_pap_width")
        self.txt_x_offset = self.builder.get_object("txt_x_offset")
        self.txt_y_offset = self.builder.get_object("txt_y_offset")
        self.txt_labels_per_row = self.builder.get_object("txt_labels_per_row")
        self.txt_print_count = self.builder.get_object("txt_print_count")

        self.txt_save_name = self.builder.get_object("txt_save_name")

        self.statusbar_context_id = self.statusbar.get_context_id("statusbar")

        file_filter = Gtk.FileFilter()
        file_filter.set_name("BMP Files")
        file_filter.add_pattern("*.bmp")
        file_filter.add_pattern("*.BMP")
        self.filechooser_dialog.add_filter(file_filter)

        self.preset = Preset()

        self.preset.read_presets()

        self.update_preset_list()

        columns = ["Name", "Width", "Height"]
        for i in range(len(columns)):
            cell = Gtk.CellRendererText()
            col = Gtk.TreeViewColumn(columns[i], cell, text=i)
            self.preset_listbox.append_column(col)

        self.window.show()

        self.server_running = False

    @staticmethod
    def run_ui():
        main = OpenLabelsUi()
        Gtk.main()
コード例 #7
0
ファイル: ui.py プロジェクト: ravithb/open-labels
class OpenLabelsUi:

    def resource_path(self):
        """ Get absolute path to resource, works for dev and for PyInstaller """
        try:
            # PyInstaller creates a temp folder and stores path in _MEIPASS
            base_path = sys._MEIPASS
        except Exception:
            base_path = os.path.dirname(os.path.realpath(__file__))
    
        print(base_path)
        return base_path

    def on_main_window_destroy(self, object, data=None):
        print("quit with cancel")
        Gtk.main_quit()

    def on_quit_activate(self, menuitem, data=None):
        print("quit from menu")
        self.stop_server()
        Gtk.main_quit()
    
    def on_about_activate(self, menuitem, data=None):
        self.about_dialog.show()  
        
    def on_about_dlg_close(self,object):
        self.about_dialog.hide() 

    def on_click_server_start_stop(self,object):
        if(self.server_running):            
            self.stop_server()
        else:
            validation = self.validate_inputs()
            if(validation ==0 ) :
                port = 31173
                self.get_input_values()
                self.statusbar.push(self.statusbar_context_id,"Starting server...")
                self.start_server(port)
            
            else:
                self.statusbar.push(self.statusbar_context_id,"Invalid configuraiton")
                
    def start_server(self,port):
        self.print_server = PrintServer(port,\
                    os.path.dirname(os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../"))))
        self.print_server.set_configuration(self.width, self.height, self.x_gap, \
            self.y_gap, self.paper_width, self.labels_per_row, self.x_offset, self.y_offset)
        try:
            self.print_server.start_server()
        except OSError as e:
            self.statusbar.push(self.statusbar_context_id,"Server start failed. "+e.strerror)
            self.server_running = False
            return
        self.statusbar.push(self.statusbar_context_id,"Server started on port "+str(port))
        self.server_running = True
        self.btn_start_server.set_label("Stop Server")

    def stop_server(self):
        if(self.print_server != None):
            self.print_server.stop_server()
            self.server_running = False
            self.btn_start_server.set_label("Start Server")
            self.statusbar.push(self.statusbar_context_id, "Server stopped.")

    def on_warning_dialog_close(self,object, object2):
        self.warning_dialog.hide()
    
    def on_click_print_label(self,object):        
        if(self.bmp_filepath == '' or os.path.exists(self.bmp_filepath)==False):
            self.warning_dialog.set_markup("Please select a label image")
            self.warning_dialog.show()
            self.statusbar.push(self.statusbar_context_id,"Label image not found")
            return
        validation = self.validate_inputs()
        if(validation ==0 ):
            self.print_count_dialog.show()            
        else:
            self.warning_dialog.set_markup("Invalid configuration.")
            self.warning_dialog.show()
            self.statusbar.push(self.statusbar_context_id,"Invalid configuraiton")
        
    
    def on_click_browse(self,object):
        self.filechooser_dialog.show()
        
    def on_save_name_dialog_close(self,object):
        self.save_name_dialog.hide()
    
    def on_save_dialog_cancel_btn_clicked(self,object):
        self.save_name_dialog.hide()

    def on_save_dialog_ok_button_clicked(self,object):
        if(self.txt_save_name.get_text()==""):
            self.warning_dialog.set_markup("Please enter a name")
            self.warning_dialog.show()
            return
        self.save_name_dialog.hide()
        ui_data = self.get_preset_from_ui(self.txt_save_name.get_text())
        self.save_preset(ui_data)
    
    def on_btn_save_preset_clicked(self, source):
        (model, iter) = self.preset_listbox.get_selection().get_selected()
        selected_row = model.get_value(iter, 0)
        if(selected_row!=''):
            self.txt_save_name.set_text(selected_row)
        else:
            self.txt_save_name.set_text("")
        self.save_name_dialog.show()
        
    def on_btn_del_preset_clicked(self,source):
        (model, iter) = self.preset_listbox.get_selection().get_selected()
        selected_row = model.get_value(iter, 0)
        if(selected_row!=''):
            self.delete_preset_dialog.set_markup("Are you sure you need to delete "+selected_row+" ?")
            self.delete_preset_dialog.target_row_id=selected_row
            self.delete_preset_dialog.show()
        
    def btn_del_preset_dlg_cancel_clicked(self,source):
        self.delete_preset_dialog.hide();
    
    def btn_del_preset_dlg_del_clicked(self,source):
        self.delete_preset(self.delete_preset_dialog.target_row_id)
        self.delete_preset_dialog.hide();
    
    def on_preset_select(self,source,index,col_object):
        (model, iter) = source.get_selection().get_selected()
        selected_row = model.get_value(iter, 0)
        data = self.preset.get_preset(selected_row) 
        self.set_preset_to_ui(data)
        
    def on_btn_filechooser_dlg_cancel_clicked(self,source):
        self.filechooser_dialog.hide()
        
    def on_btn_filechooser_dlg_select_clicked(self,source):
        self.bmp_filepath = self.filechooser_dialog.get_filename()
        self.preview_img.set_from_file(self.bmp_filepath)
        self.filechooser_dialog.hide()
        
    def on_btn_prnt_count_dlg_cancel_clicked(self,source):
        self.print_count_dialog.hide()
        
    def on_btn_prnt_count_dlg_print_clicked(self,source):
        if(self.bmp_filepath == '' or os.path.exists(self.bmp_filepath)==False):
            self.statusbar.push(self.statusbar_context_id,"Label not found")
            return
        
        if(self.txt_print_count.get_text()==''):
            self.statusbar.push(self.statusbar_context_id,"Invalid number of labels to print")
            return
        
        validation = self.validate_inputs()
        if(validation ==0 ):
            self.get_input_values()            
            self.print_mgr = PrintManager()
            self.print_mgr.set_label_count(int(self.txt_print_count.get_text()))
            self.print_mgr.set_label_size(self.width,self.height)
            self.print_mgr.set_label_gaps(self.x_gap, self.y_gap)
            self.print_mgr.set_print_options(self.labels_per_row, self.paper_width,self.x_offset,self.y_offset)
            self.print_mgr.set_label_file(self.bmp_filepath)
            try:
                self.print_mgr.init()
                self.print_mgr.print_labels()
            except PrintException as e:
                self.statusbar.push(self.statusbar_context_id,"Print failed : "+e.value)
                self.warning_dialog.set_markup("Print failed. "+e.value)
                self.warning_dialog.show()
        else:
            self.statusbar.push(self.statusbar_context_id,"Invalid configuraiton")
        
        self.print_count_dialog.hide() 
        
    def set_preset_to_ui(self,data):
        if('width' in data):
            self.txt_width.set_text(str(data['width']))
        if('height' in data):
            self.txt_height.set_text(str(data['height']))
        if('x_gap' in data):
            self.txt_x_gap.set_text(str(data['x_gap']))
        if('y_gap' in data):
            self.txt_y_gap.set_text(str(data['y_gap']))
        if('paper_width' in data):
            self.txt_paper_width.set_text(str(data['paper_width']))
        if('labels_per_row' in data):
            self.txt_labels_per_row.set_text(str(data['labels_per_row']))
        if('x_offset' in data):
            self.txt_x_offset.set_text(str(data['x_offset']))
        if('y_offset' in data):
            self.txt_y_offset.set_text(str(data['y_offset']))
        
    def get_preset_from_ui(self,name):
        data = {name: {"width":self.txt_width.get_text(),\
                       "height":self.txt_height.get_text(),\
                       "x_gap":self.txt_x_gap.get_text(),\
                       "y_gap":self.txt_y_gap.get_text(),\
                       "paper_width":self.txt_paper_width.get_text(),\
                       "labels_per_row":self.txt_labels_per_row.get_text(),\
                       "y_offset":self.txt_y_offset.get_text(),\
                       "x_offset":self.txt_x_offset.get_text()}}
        return data
        

    def get_input_values(self):
        self.width = int(self.txt_width.get_text())
        self.height = int(self.txt_height.get_text())        
        self.paper_width = int(self.txt_paper_width.get_text())
        self.labels_per_row = int(self.txt_labels_per_row.get_text())
        
        if(self.txt_x_gap.get_text()!=''):
            self.x_gap = int(self.txt_x_gap.get_text())
        else:
            self.x_gap = 0
            
        if(self.txt_y_gap.get_text()!=''):
            self.y_gap = int(self.txt_y_gap.get_text())
        else:
            self.y_gap = 0
            
        if(self.txt_x_offset.get_text()!=''):
            self.x_offset = int(self.txt_x_offset.get_text())
        else:
            self.x_offset = 0
            
        if(self.txt_y_offset.get_text()!=''):
            self.y_offset = int(self.txt_y_offset.get_text())
        else:
            self.y_offset = 0
        
    def validate_inputs(self):
        error_count = 0;
        if(len(self.txt_width.get_text().strip())==0 or int(self.txt_width.get_text()) <= 0):
            self.warning_dialog.set_markup("Invalid width.")
            error_count += 1
        if(len(self.txt_height.get_text().strip())==0 or int(self.txt_height.get_text()) <=0):
            self.warning_dialog.set_markup("Invalid height")
            error_count += 1
        if(len(self.txt_paper_width.get_text().strip())==0 or int(self.txt_paper_width.get_text())<=0):
            self.warning_dialog.set_markup("Invalid paper width")
            error_count += 1
        if(len(self.txt_labels_per_row.get_text().strip())==0 or int(self.txt_labels_per_row.get_text())<=1):
            self.warning_dialog.set_markup("Labels per row must be greater than or equal to 1")
            error_count += 1
        if(len(self.txt_x_gap.get_text().strip())==0 or int(self.txt_x_gap.get_text())<0):
            self.warning_dialog.set_markup("Invalid x gap")
            error_count += 1
        if(len(self.txt_y_gap.get_text().strip())==0 or int(self.txt_y_gap.get_text())<0):
            self.warning_dialog.set_markup("Invalid y gap")
            error_count += 1
        if(len(self.txt_x_offset.get_text().strip())==0 or int(self.txt_x_offset.get_text())<0):
            self.warning_dialog.set_markup("Invalid x offset")
            error_count += 1
        if(len(self.txt_y_offset.get_text().strip())==0 or int(self.txt_y_offset.get_text())<0):
            self.warning_dialog.set_markup("Invalid y offset")
            error_count += 1
        if(error_count>0):
            self.warning_dialog.show()
            return 1;
        return 0
    
    def save_preset(self,ps):
        result = self.validate_inputs()
        if(result == 0):
            self.preset.save_preset(ps)
            self.update_preset_list()
        
    def delete_preset(self,ps):
        self.preset.delete_preset(ps)
        self.update_preset_list()
        
    def update_preset_list(self):
        self.preset_liststore.clear()
        if(self.preset.preset_data != None):
            for name,pdata in self.preset.preset_data.items():
                plist = list([name, \
                             int(pdata["width"]), \
                             int(pdata["height"])])
                self.preset_liststore.append(plist)     
        
        self.preset_listbox.set_model(self.preset_liststore)
        
    def __init__(self):
        self.print_server = None
        self.bmp_filepath = ''
        self.gladefile = os.path.abspath(os.path.join(self.resource_path(), "ui.glade" ))
        self.builder = Gtk.Builder() 
        self.builder.add_from_file(self.gladefile)

        self.builder.connect_signals(self)

        self.window = self.builder.get_object("main_window")
        self.filechooser_dialog = self.builder.get_object("filechooser_dialog")
        self.warning_dialog = self.builder.get_object("warning_dialog")
        self.save_name_dialog = self.builder.get_object("save_name_dialog")
        self.delete_preset_dialog = self.builder.get_object("delete_preset_dialog")
        self.print_count_dialog = self.builder.get_object("print_count_dialog")
        self.about_dialog = self.builder.get_object("about_dialog")
        self.statusbar = self.builder.get_object("statusbar")
        self.btn_start_server = self.builder.get_object("btn_server")
        self.preset_listbox = self.builder.get_object("preset_listbox")
        self.btn_save_preset = self.builder.get_object("btn_save_preset")
        self.btn_del_preset = self.builder.get_object("btn_del_preset")
        self.preset_liststore = self.builder.get_object("preset_liststore")  
        self.preview_img = self.builder.get_object("preview_img")   
        
        self.txt_width = self.builder.get_object("txt_width")
        self.txt_height = self.builder.get_object("txt_height")
        self.txt_x_gap = self.builder.get_object("txt_x_gap")
        self.txt_y_gap = self.builder.get_object("txt_y_gap")
        self.txt_paper_width = self.builder.get_object("txt_pap_width")
        self.txt_labels_per_row = self.builder.get_object("txt_labels_per_row")
        self.txt_x_offset = self.builder.get_object("txt_x_offset")
        self.txt_y_offset = self.builder.get_object("txt_y_offset")   
        
        self.filechooser_dialog.set_transient_for(self.window)
        self.warning_dialog.set_transient_for(self.window)
        self.save_name_dialog.set_transient_for(self.window)
        self.delete_preset_dialog.set_transient_for(self.window)
        self.print_count_dialog.set_transient_for(self.window)
        self.about_dialog.set_transient_for(self.window)
        self.txt_width = self.builder.get_object("txt_width")
        self.txt_height = self.builder.get_object("txt_height")
        self.txt_x_gap = self.builder.get_object("txt_x_gap")
        self.txt_y_gap = self.builder.get_object("txt_y_gap")
        self.txt_paper_width = self.builder.get_object("txt_pap_width")
        self.txt_x_offset = self.builder.get_object("txt_x_offset")
        self.txt_y_offset = self.builder.get_object("txt_y_offset")
        self.txt_labels_per_row = self.builder.get_object("txt_labels_per_row")
        self.txt_print_count = self.builder.get_object("txt_print_count")
        
        self.txt_save_name = self.builder.get_object("txt_save_name")
        
        self.statusbar_context_id = self.statusbar.get_context_id("statusbar")
        
        file_filter = Gtk.FileFilter()
        file_filter.set_name("BMP Files")
        file_filter.add_pattern("*.bmp")
        file_filter.add_pattern("*.BMP")
        self.filechooser_dialog.add_filter(file_filter)
        
        self.preset = Preset()
        
        self.preset.read_presets()
        
        self.update_preset_list()
        
        columns = ["Name","Width","Height"]
        for i in range(len(columns)):
            cell = Gtk.CellRendererText()
            col = Gtk.TreeViewColumn(columns[i], cell, text=i)
            self.preset_listbox.append_column(col)

        
        
        self.window.show()

        self.server_running = False
        
    @staticmethod
    def run_ui():
        main = OpenLabelsUi()
        Gtk.main()
コード例 #8
0
ファイル: print_server.py プロジェクト: ravithb/open-labels
 def set_configuration(self, width, height, x_gap, y_gap, paper_width,
                       labels_per_row, x_offset, y_offset):
     self.print_mgr = PrintManager()
     self.print_mgr.set_label_gaps(x_gap, y_gap)
     self.print_mgr.set_print_options(labels_per_row, paper_width, x_offset,
                                      y_offset)
コード例 #9
0
ファイル: main.py プロジェクト: ravithb/open-labels
    parser.add_argument("width_mm",help="Width of the label in mm",type=float)
    parser.add_argument("height_mm",help="Height of the label in mm",type=float)
    parser.add_argument("horizontal_gap_mm",help="Horizontal gap between two adjacent labels in mm",type=float)
    parser.add_argument("vertical_gap_mm",help="Vertical gap between two adjacent labels in mm",type=float)
    parser.add_argument("labels_per_row",help="Number of labels per row on the paper.",type=int)
    parser.add_argument("paper_width_mm",help="Width of the label paper in mm",type=float)
    parser.add_argument("label_x_offset_mm",help="Horizontal offset in mm",type=float)
    parser.add_argument("label_y_offset_mm",help="Vertical offset in mm",type=float)
    parser.add_argument("label_count",help="Number of lables to print",type=int)
    parser.add_argument("-p","--printer_port",help="Printer device path [eg: /dev/usb/lp0]")
    parser.add_argument("-d","--run_as_daemon",help="Printer device path [eg: /dev/usb/lp0]")
    parser.add_argument("-l","--listen",help="Daemon listen port. Default 31173",type=int)
    
    args = parser.parse_args()
        
    print_mgr = PrintManager()
    print_mgr.set_label_gaps(args.horizontal_gap_mm, args.vertical_gap_mm)
    print_mgr.set_print_options(args.labels_per_row, args.paper_width_mm,args.label_x_offset_mm,args.label_y_offset_mm)
    print_mgr.set_label_count(args.label_count)
    
    if(args.printer_port):
        print_mgr.set_printer_port(args.printer_port)
        
    print(print_mgr.get_config())

    if(args.run_as_daemon):
#         daemon = PrintDaemon()        
        print("****** Open Labels Daemon ******")        
        print("Starting....")
        
        os.chdir(os.path.join(os.path.dirname(os.path.realpath('__file__')), "htdocs"))
コード例 #10
0
ファイル: print_server.py プロジェクト: ravithb/open-labels
 def set_configuration(self, width, height, x_gap, y_gap, paper_width, labels_per_row, x_offset, y_offset):
     self.print_mgr = PrintManager()
     self.print_mgr.set_label_gaps(x_gap, y_gap)
     self.print_mgr.set_print_options(labels_per_row, paper_width, x_offset, y_offset)