예제 #1
0
    def __init__(self, main_window, config):
        gobject.GObject.__init__(self)

        self.scanned_pages = 0

        self.__config = config

        widget_tree = load_uifile("multiscan.glade")

        self.lists = {
            'docs' : {
                'gui': widget_tree.get_object("treeviewScanList"),
                'model': widget_tree.get_object("liststoreScanList"),
                'columns' : {
                    'nb_pages' : \
                        widget_tree.get_object("treeviewcolumnNbPages"),
                },
                'include_current_doc': False,
            },
        }

        self.removeDocButton = widget_tree.get_object("buttonRemoveDoc")
        self.removeDocButton.set_sensitive(False)

        actions = {
            'add_doc' : (
                [widget_tree.get_object("buttonAddDoc")],
                ActionAddDoc(self, config),
            ),
            'select_doc' : (
                [widget_tree.get_object("treeviewScanList")],
                ActionSelectDoc(self),
            ),
            'start_edit_doc' : (
                [widget_tree.get_object("buttonEditDoc")],
                ActionStartEditDoc(self),
            ),
            'end_edit_doc' : (
                [widget_tree.get_object("cellrenderertextNbPages")],
                ActionEndEditDoc(self),
            ),
            'del_doc' : (
                [self.removeDocButton],
                ActionRemoveDoc(self),
            ),
            'cancel' : (
                [widget_tree.get_object("buttonCancel")],
                ActionCancel(self)
            ),
            'scan' : (
                [widget_tree.get_object("buttonOk")],
                ActionScan(self, config, main_window.docsearch, main_window.doc),
            ),
        }

        for action in ['add_doc', 'select_doc', 'start_edit_doc',
                       'end_edit_doc', 'del_doc',
                       'scan', 'cancel']:
            actions[action][1].connect(actions[action][0])

        self.to_disable_on_scan = [
            actions['add_doc'][0][0],
            actions['start_edit_doc'][0][0],
            actions['del_doc'][0][0],
            actions['scan'][0][0],
        ]

        self.lists['docs']['model'].clear()
        if len(main_window.doc.pages) > 0 and main_window.doc.can_edit:
            self.lists['docs']['model'].append([
                _("Current document (%s)") % (str(main_window.doc)),
                "0",  # nb_pages
                True,  # can_edit (nb_pages)
                0,  # scan_progress_int
                "",  # scan_progress_txt
                False,  # can_delete
            ])
            self.lists['docs']['include_current_doc'] = True
        else:
            # add a first document to the list (the user will need one anyway)
            actions['add_doc'][1].do()

        self.scan_queue = WorkerQueue("Mutiple scans")
        self.scan_queue.connect("queue-start", lambda queue: \
                gobject.idle_add(self.__on_global_scan_start_cb, queue))
        self.scan_queue.connect("queue-stop", lambda queue, exc: \
                gobject.idle_add(self.__on_global_scan_end_cb, queue, exc))
        self.scan_queue.connect("scan-start", lambda worker, page, total: \
                gobject.idle_add(self.__on_scan_start_cb, worker, page, total))
        self.scan_queue.connect("ocr-start", lambda worker, page, total: \
                gobject.idle_add(self.__on_ocr_start_cb, worker, page, total))
        self.scan_queue.connect("scan-done", lambda worker, page, total: \
                gobject.idle_add(self.__on_scan_done_cb, worker, page, total))

        self.dialog = widget_tree.get_object("dialogMultiscan")
        self.dialog.connect("destroy", self.__on_destroy)


        self.dialog.set_transient_for(main_window.window)
        self.dialog.set_visible(True)