コード例 #1
0
    def instant_search(self):

        # init
        self.cached_titles = []
        self.last_query = ""  # previous user input
        self.query_o = None
        self.caret = SimpleNamespace(pos=0, text="",
                                     stick=False)  # cursor position
        self.original_page = self.window.page.name  # we return here after escape
        self.original_history = list(self.window.history.uistate["list"])
        self.selection = None
        if not self.plugin.preferences['is_cached']:
            # reset last search results
            State.reset()
        self.menu_page = None
        self.is_closed = False
        self.last_page = None

        # building quick title cache
        def build(start=""):
            o = self.window.notebook.pages
            for s in o.list_pages(Path(start or ":")):
                start2 = (start + ":" if start else "") + s.basename
                self.cached_titles.append((start2, start2.lower()))
                build(start2)

        build()

        # Gtk
        self.gui = Dialog(self.window,
                          _('Search'),
                          buttons=None,
                          defaultwindowsize=(300, -1))
        self.gui.resize(300, 100)  # reset size
        self.input_entry = InputEntry()
        self.input_entry.connect('key_press_event', self.move)
        self.input_entry.connect(
            'changed',
            self.change)  # self.change is needed by GObject or something
        self.gui.vbox.pack_start(self.input_entry,
                                 expand=False,
                                 fill=True,
                                 padding=0)
        # noinspection PyArgumentList
        self.label_object = Gtk.Label(label='')
        self.label_object.set_size_request(300, -1)
        self.gui.vbox.pack_start(self.label_object,
                                 expand=False,
                                 fill=True,
                                 padding=0)

        # preview pane
        self.label_preview = Gtk.Label(label='...loading...')
        # not sure if this has effect, longer lines without spaces still make window inflate
        self.label_preview.set_line_wrap(True)
        self.label_preview.set_xalign(0)  # align to the left
        self.preview_pane = Gtk.VBox()
        self.preview_pane.pack_start(self.label_preview, False, False, 5)
        self.window.pageview.pack_start(self.preview_pane, False, False, 5)

        # gui geometry
        self.geometry(init=True)

        self.gui.show_all()
コード例 #2
0
    def instantsearch(self):

        # init
        self.cached_titles = []
        # self.menu = defaultdict(_MenuItem)
        self.lastQuery = ""  # previous user input
        self.queryO = None
        self.caret = {'pos': 0, 'altPos': 0, 'text': ""}  # cursor position
        self.originalPage = self.window.page.name  # we return here after escape
        self.selection = None
        if not self.plugin.preferences['isCached']:
            # reset last search results
            State.reset()
        self.menuPage = None
        self.isClosed = False
        self.lastPage = None

        # preferences
        self.title_match_char = self.plugin.preferences['title_match_char']
        self.start_search_length = self.plugin.preferences[
            'start_search_length']
        self.keystroke_delay = self.plugin.preferences['keystroke_delay']
        self.open_when_unique = self.plugin.preferences['open_when_unique']

        # building quick title cache
        def build(start=""):
            if hasattr(self.window.notebook, 'pages'):
                o = self.window.notebook.pages
            else:  # for Zim 0.66-
                o = self.window.notebook.index
            for s in o.list_pages(Path(start or ":")):
                start2 = (start + ":" if start else "") + s.basename
                self.cached_titles.append((start2, start2.lower()))
                build(start2)

        build()

        # Gtk
        self.gui = Dialog(self.window,
                          _('Search'),
                          buttons=None,
                          defaultwindowsize=(300, -1))
        self.gui.resize(300, 100)  # reset size
        self.inputEntry = InputEntry()
        self.inputEntry.connect('key_press_event', self.move)
        self.inputEntry.connect(
            'changed',
            self.change)  # self.change is needed by GObject or something
        self.gui.vbox.pack_start(self.inputEntry,
                                 expand=False,
                                 fill=True,
                                 padding=0)
        self.labelObject = Gtk.Label(label=(''))
        self.labelObject.set_size_request(300, -1)
        self.gui.vbox.pack_start(self.labelObject,
                                 expand=False,
                                 fill=True,
                                 padding=0)

        # gui geometry
        px, py = self.window.get_position()
        pw, ph = self.window.get_size()
        x, y = self.gui.get_position()

        if self.plugin.preferences[
                'position'] == InstantsearchPlugin.POSITION_RIGHT:
            self.gui.move((pw - 300), 0)
        elif self.plugin.preferences[
                'position'] == InstantsearchPlugin.POSITION_CENTER:
            self.gui.resize(300, 100)
            self.gui.move(px + (pw / 2) - 150, py + (ph / 2) - 250)
        else:
            raise AttributeError("Instant search: Wrong position preference.")

        self.gui.show_all()

        self.labelVar = ""
        self.timeout = ""
        self.timeoutOpenPage = None