Example #1
0
    def __init__(self, model):
        self.model = model

        self.completion_win = Window()
        self.completion_win.set_modal(True)
        self.completion_win.set_keep_above(True)

        self.completion_tree_view = BrowserTreeView(self.model)
        self.completion_tree_view.set_enable_search(False)

        self.completion_scrolled_win = ScrolledWindow(
            self.completion_tree_view)
        self.completion_win.add(self.completion_scrolled_win)

        self.column = Gtk.TreeViewColumn()
        self.completion_tree_view.append_column(self.column)

        self.renderer_text = Gtk.CellRendererText()
        self.column.pack_start(self.renderer_text, False)
        self.column.set_attributes(self.renderer_text, text=DATA_COL)

        # display an undecorated window with a grey border
        self.completion_scrolled_win.set_size_request(WIN_WIDTH, WIN_HEIGHT)
        self.completion_scrolled_win.set_policy(Gtk.PolicyType.NEVER,
                                                Gtk.PolicyType.AUTOMATIC)
        self.completion_win.set_decorated(False)
        self.completion_scrolled_win.set_border_width(2)
        # self.completion_scrolled_win.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(GREY))
        self.column.set_min_width(50)

        # hide column
        self.completion_tree_view.set_headers_visible(False)
Example #2
0
    def __init__(self, model, text_view):
        self.model = model

        self.completion_tree_view = BrowserTreeView(self.model)
        self.completion_tree_view.set_enable_search(False)
        # hide column
        self.completion_tree_view.set_headers_visible(False)

        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.completion_scrolled_win = ScrolledWindow(
            self.completion_tree_view)
        self.label = Gtk.Label('Tags')
        box.add(self.label)
        box.add(self.completion_scrolled_win)
        box.show_all()

        self.column = Gtk.TreeViewColumn()
        self.completion_tree_view.append_column(self.column)

        self.renderer_text = Gtk.CellRendererText()
        self.column.pack_start(self.renderer_text, False)
        self.column.set_attributes(self.renderer_text, text=DATA_COL)

        self.completion_scrolled_win.set_policy(Gtk.PolicyType.NEVER,
                                                Gtk.PolicyType.AUTOMATIC)
        self.completion_scrolled_win.set_propagate_natural_height(True)
        self.completion_scrolled_win.set_max_content_height(WIN_HEIGHT)
        self.completion_scrolled_win.set_size_request(WIN_WIDTH, -1)
        self.column.set_min_width(50)

        # window to display results
        self.popover = Gtk.Popover()
        self.popover.set_relative_to(text_view)
        self.popover.add(box)
Example #3
0
    def __init__(self, model):
        InsertedObjectWidget.__init__(self)
        self.textarea_width = 0
        self.model = model

        # used in pageview
        self._has_cursor = False  # Skip table object, if someone moves cursor around in textview

        # used here
        self._timer = None  # NONE or number of current GObject.timer, which is running
        self._keep_toolbar_open = False  # a cell is currently edited, toolbar should not be hidden
        self._cellinput_canceled = None  # cell changes should be skipped
        self._toolbar_enabled = True  # sets if toolbar should be shown beneath a selected table

        # Toolbar for table actions
        self.toolbar = self.create_toolbar()
        self.toolbar.show_all()
        self.toolbar.set_no_show_all(True)
        self.toolbar.hide()

        # Create treeview
        self._init_treeview(model)

        # package gui elements
        self.vbox = Gtk.VBox()
        self.add(self.vbox)
        self.vbox.pack_end(self.toolbar, True, True, 0)
        self.scroll_win = ScrolledWindow(self.treeview, Gtk.PolicyType.NEVER,
                                         Gtk.PolicyType.NEVER,
                                         Gtk.ShadowType.NONE)
        self.vbox.pack_start(self.scroll_win, True, True, 0)

        # signals
        model.connect('model-changed', self.on_model_changed)
Example #4
0
    def __init__(self, index, uistate, ui):  # XXX
        gtk.VPaned.__init__(self)
        self.index = index
        self.uistate = uistate

        self.uistate.setdefault('treeview', 'tagged', set(['tagged', 'tags']))
        self.uistate.setdefault('tagcloud_sorting', 'score',
                                set(['alpha', 'score']))
        self.uistate.setdefault('show_full_page_name', True)

        self.tagcloud = TagCloudWidget(
            self.index, sorting=self.uistate['tagcloud_sorting'])
        self.pack1(ScrolledWindow(self.tagcloud), shrink=False)

        self.treeview = TagsPageTreeView(ui)  # XXX
        self._treeview_mode = (None, None)
        self.pack2(ScrolledWindow(self.treeview), shrink=False)

        self.treeview.connect('populate-popup', self.on_populate_popup)
        self.tagcloud.connect('selection-changed',
                              self.on_cloud_selection_changed)
        self.tagcloud.connect('sorting-changed', self.on_cloud_sortin_changed)

        self.connectto_all(
            ui,
            (  # XXX
                'open-page',
                ('start-index-update', lambda o: self.disconnect_model()),
                ('end-index-update', lambda o: self.reload_model()),
            ))

        self.reload_model()
Example #5
0
	def __init__(self, parent, definition=None):
		'''
		Constructor, which intializes the dialog window
		:param parent:
		:param definition: tuple of C{(ids, headers, wraps, aligns)}
		:return:
		'''
		title = _('Insert Table') if definition is None else _('Edit Table')  # T: Dialog title
		Dialog.__init__(self, parent, title)

		# Prepare treeview in which all columns of the table are listed
		self.default_column_item = [-1, "", 0, "left", Gtk.STOCK_JUSTIFY_LEFT, _("Left")]
		# currently edited cell - tuple (editable, path, colid) save it on exit
		self.currently_edited = None

		# Set layout of Window
		self.add_help_text(_('Managing table columns'))  # T: Description of "Table-Insert" Dialog
		self.set_default_size(380, 400)

		liststore = self._prepare_liststore(definition)
		self.treeview = self._prepare_treeview_with_headcolumn_list(liststore)
		hbox = Gtk.HBox(spacing=5)
		hbox.set_size_request(300, 300)
		self.vbox.pack_start(hbox, False, True, 0)
		header_scrolled_area = ScrolledWindow(self.treeview)
		header_scrolled_area.set_size_request(200, -1)
		hbox.pack_start(header_scrolled_area, True, True, 0)
		hbox.pack_start(self._button_box(), False, False, 0)

		self.show_all()
		if definition is None: # preselect first entry
			path = self.treeview.get_model().get_path(self.treeview.get_model().get_iter_first())
			self.treeview.set_cursor_on_cell(path, self.treeview.get_column(0), None, True)
Example #6
0
    def __init__(self, window, index, uistate):

        Dialog.__init__(
            self,
            window,
            _('Tags Manager (IconTags plugin)'),  # T: dialog title
            buttons=gtk.BUTTONS_OK_CANCEL,
            defaultwindowsize=(450, 400))

        # Don't confuse with local variable 'self.uistate',
        # which is already determined for this class.
        self._window = window
        self.plugin_uistate = uistate
        self.show_pages_button = gtk.ToggleButton('Show Pages')
        self.show_pages_button.connect('toggled', self.toggle_show_pages)
        self.add_extra_button(self.show_pages_button)

        self.treeview_tags = TagsManagerTagsView(
            index, self.plugin_uistate['Icons for Tags'])
        self.treeview_pages = TagsManagerPagesView(index, window.ui)
        self.scrolled_widget = ScrolledWindow(self.treeview_tags)
        self.vbox.pack_start(self.scrolled_widget, True)

        self.treeview_tags.connect('row-activated', self.get_tag)

        # Enable left/right arrows to navigate between views.
        self.treeview_tags.connect('key-release-event', self.toggle_view)
        self.treeview_pages.connect('key-release-event', self.toggle_view)

        # Update if tags change.
        self.connectto_all(index, (('tag-inserted', lambda *a: self.update()),
                                   ('tag-removed', lambda *a: self.update())))

        self.show_all()
Example #7
0
    def __init__(self,
                 widget,
                 label,
                 generator,
                 image_file=None,
                 text='',
                 syntax=None):
        title = _(
            'Edit %s'
        ) % label  # T: dialog title, %s is the object name like "Equation"
        Dialog.__init__(self, widget, title, defaultwindowsize=(450, 300))
        self.generator = generator
        self.log_file = None
        self.image_file = image_file
        self.result = None, None

        self.vpane = VPaned()
        self.vpane.set_position(150)
        self.vbox.pack_start(self.vpane, True, True, 0)

        self.imageview = ImageView(bgcolor='#FFF')
        swin = ScrolledWindow(self.imageview)
        swin.set_size_request(200, 50)
        self.vpane.pack1(swin, resize=True)
        # TODO scrolled window and option to zoom in / real size

        window, textview = ScrolledSourceView(syntax=syntax)
        self.textview = textview
        self.textview.set_editable(True)
        self.vpane.pack2(window, resize=False)

        hbox = Gtk.HBox(spacing=5)
        self.vbox.pack_start(hbox, False, True, 0)

        self.previewbutton = Gtk.Button.new_with_mnemonic(_('_Preview'))
        # T: button in e.g. equation editor dialog
        self.previewbutton.set_sensitive(False)
        self.previewbutton.connect('clicked', lambda o: self.update_image())
        hbox.pack_start(self.previewbutton, False, True, 0)

        self.textview.get_buffer().connect(
            'modified-changed',
            lambda b: self.previewbutton.set_sensitive(b.get_modified()))

        self.logbutton = Gtk.Button.new_with_mnemonic(_('View _Log'))
        # T: button in e.g. equation editor dialog
        self.logbutton.set_sensitive(False)
        self.logbutton.connect('clicked', lambda o: self.show_log())
        hbox.pack_start(self.logbutton, False, True, 0)

        self.set_text(text)
        self.imageview.set_file(self.image_file)  # if None sets broken image
        self.textview.grab_focus()
Example #8
0
    def __init__(self, tasksview, opener, preferences, uistate):
        gtk.VBox.__init__(self)
        self.uistate = uistate
        self.uistate.setdefault('only_show_act', False)
        self.uistate.setdefault('show_flatlist', False)

        column_layout=TaskListTreeView.COMPACT_COLUMN_LAYOUT_WITH_DUE \
         if preferences['with_due'] else TaskListTreeView.COMPACT_COLUMN_LAYOUT
        self.task_list = TaskListTreeView(
            tasksview,
            opener,
            _parse_task_labels(preferences['labels']),
            nonactionable_tags=_parse_task_labels(
                preferences['nonactionable_tags']),
            filter_actionable=self.uistate['only_show_act'],
            tag_by_page=preferences['tag_by_page'],
            use_workweek=preferences['use_workweek'],
            column_layout=column_layout,
            flatlist=self.uistate['show_flatlist'],
        )
        self.task_list.connect('populate-popup', self.on_populate_popup)
        self.task_list.set_headers_visible(True)

        self.filter_entry = InputEntry(placeholder_text=_(
            'Filter'))  # T: label for filtering/searching tasks
        self.filter_entry.set_icon_to_clear()
        filter_cb = DelayedCallback(
            500,
            lambda o: self.task_list.set_filter(self.filter_entry.get_text()))
        self.filter_entry.connect('changed', filter_cb)

        self.pack_start(ScrolledWindow(self.task_list))
        self.pack_end(self.filter_entry, False)
Example #9
0
    def __init__(self, ui, plugin, pageview):
        Dialog.__init__(
            self,
            ui,
            _('Insert Symbol'),  # T: Dialog title
            button=(_('_Insert'), 'gtk-ok'),  # T: Button label
            defaultwindowsize=(350, 400))
        self.plugin = plugin
        self.pageview = pageview
        if not plugin.symbols:
            plugin.load_file()

        self.textentry = InputEntry()
        self.vbox.pack_start(self.textentry, False)

        # TODO make this iconview single-click
        model = gtk.ListStore(str, str)  # text, shortcut
        self.iconview = gtk.IconView(model)
        self.iconview.set_text_column(0)
        self.iconview.set_column_spacing(0)
        self.iconview.set_row_spacing(0)
        if gtk.gtk_version >= (2, 12, 0):
            self.iconview.set_property('has-tooltip', True)
            self.iconview.connect('query-tooltip', self.on_query_tooltip)
        self.iconview.connect('item-activated', self.on_activated)

        self.vbox.add(ScrolledWindow(self.iconview))

        button = gtk.Button(stock=gtk.STOCK_EDIT)
        button.connect('clicked', self.on_edit)
        self.action_area.add(button)
        self.action_area.reorder_child(button, 0)

        self.load_symbols()
Example #10
0
    def __init__(self, window, index, uistate):

        Dialog.__init__(self, window, _('Tags Manager (IconTags plugin)'), # T: dialog title
                        buttons=gtk.BUTTONS_OK_CANCEL,
                        defaultwindowsize=(450, 400) )

        # Don't confuse with local variable 'self.uistate',
        # which is already determined for this class.
        self._window = window
        self.plugin_uistate = uistate
        self.show_pages_button = gtk.ToggleButton('Show Pages')
        self.show_pages_button.connect('toggled', self.toggle_show_pages)
        self.add_extra_button(self.show_pages_button)

        self.treeview_tags = TagsManagerTagsView(index, self.plugin_uistate['Icons for Tags'])
        self.treeview_pages = TagsManagerPagesView(index, window.ui)
        self.scrolled_widget = ScrolledWindow(self.treeview_tags)
        self.vbox.pack_start(self.scrolled_widget, True)

        self.treeview_tags.connect('row-activated', self.get_tag)

        # Enable left/right arrows to navigate between views.
        self.treeview_tags.connect('key-release-event', self.toggle_view)
        self.treeview_pages.connect('key-release-event', self.toggle_view)

        # Update if tags change.
        self.connectto_all(index.update_iter.tags, (
            ('tag-row-inserted', lambda *a: self.update()),
            ('tag-row-deleted', lambda *a: self.update())
        ))

        self.show_all()
Example #11
0
    def __init__(self, tasksview, opener, properties, uistate):
        GObject.GObject.__init__(self)
        self.uistate = uistate
        self.uistate.setdefault('only_show_act', False)
        self.uistate.setdefault('show_flatlist', False)

        self.task_list = TaskListTreeView(
            tasksview,
            opener,
            _parse_task_labels(properties['labels']),
            nonactionable_tags=_parse_task_labels(
                properties['nonactionable_tags']),
            filter_actionable=self.uistate['only_show_act'],
            tag_by_page=properties['tag_by_page'],
            use_workweek=properties['use_workweek'],
            compact=True,
            flatlist=self.uistate['show_flatlist'],
        )
        self.task_list.connect('populate-popup', self.on_populate_popup)
        self.task_list.set_headers_visible(True)

        self.connectto(properties, 'changed', self.on_properties_changed)

        self.filter_entry = InputEntry(placeholder_text=_(
            'Filter'))  # T: label for filtering/searching tasks
        self.filter_entry.set_icon_to_clear()
        filter_cb = DelayedCallback(
            500,
            lambda o: self.task_list.set_filter(self.filter_entry.get_text()))
        self.filter_entry.connect('changed', filter_cb)

        self.pack_start(ScrolledWindow(self.task_list), True, True, 0)
        self.pack_end(self.filter_entry, False, True, 0)
Example #12
0
	def __init__(self, extension, opener, preferences):
		gtk.HBox.__init__(self)
		self.extension = extension # XXX
		self.opener = opener
		self.uistate = extension.uistate
		self.preferences = preferences

		use_thumbs = self.preferences.setdefault('use_thumbnails', True) # Hidden setting
		self.iconview = FileBrowserIconView(opener, self.icon_size, use_thumbs)
		self.add(ScrolledWindow(self.iconview, shadow=gtk.SHADOW_NONE))

		self.buttonbox = gtk.VBox()
		self.pack_end(self.buttonbox, False)

		open_folder_button = IconButton(gtk.STOCK_OPEN, relief=False)
		open_folder_button.connect('clicked', self.on_open_folder)
		self.buttonbox.pack_start(open_folder_button, False)

		refresh_button = IconButton(gtk.STOCK_REFRESH, relief=False)
		refresh_button.connect('clicked', lambda o: self.on_refresh_button())
		self.buttonbox.pack_start(refresh_button, False)

		zoomin = IconButton(gtk.STOCK_ZOOM_IN, relief=False)
		zoomout = IconButton(gtk.STOCK_ZOOM_OUT, relief=False)
		zoomin.connect('clicked', lambda o: self.on_zoom_in())
		zoomout.connect('clicked', lambda o: self.on_zoom_out())
		self.buttonbox.pack_end(zoomout, False)
		self.buttonbox.pack_end(zoomin, False)
		self.zoomin_button = zoomin
		self.zoomout_button = zoomout

		self.set_icon_size(self.icon_size)

		self.iconview.connect('folder-changed', lambda o: self.extension._refresh_statusbar())
Example #13
0
    def __init__(self, parent, plugin, pageview):
        Dialog.__init__(
            self,
            parent,
            _('Insert Symbol'),  # T: Dialog title
            button=_('_Insert'),  # T: Button label
            defaultwindowsize=(350, 400))
        self.plugin = plugin
        self.pageview = pageview
        if not plugin.symbols:
            plugin.load_file()

        self.textentry = InputEntry()
        self.vbox.pack_start(self.textentry, False, True, 0)

        model = Gtk.ListStore(str, str)  # text, shortcut
        self.iconview = Gtk.IconView(model)
        self.iconview.set_text_column(0)
        self.iconview.set_column_spacing(0)
        self.iconview.set_row_spacing(0)
        self.iconview.set_property('has-tooltip', True)
        self.iconview.set_property('activate-on-single-click', True)
        self.iconview.connect('query-tooltip', self.on_query_tooltip)
        self.iconview.connect('item-activated', self.on_activated)

        swindow = ScrolledWindow(self.iconview)
        self.vbox.pack_start(swindow, True, True, 0)

        button = Gtk.Button.new_with_mnemonic(_('_Edit'))  # T: Button label
        button.connect('clicked', self.on_edit)
        self.action_area.add(button)
        self.action_area.reorder_child(button, 0)

        self.load_symbols()
Example #14
0
    def __init__(self, parent, notebook):
        Dialog.__init__(
            self,
            parent,
            _('Pages By Number Of Links'),  # T: dialog title
            buttons=gtk.BUTTONS_CLOSE)
        self.notebook = notebook

        self.direction_input = gtk.combo_box_new_text()
        for dir in sorted(self.LABELS):
            self.direction_input.append_text(self.LABELS[dir])

        self.uistate.setdefault('link_direction', LINK_DIR_BACKWARD,
                                self.LABELS.keys())
        gtk_combobox_set_active_text(
            self.direction_input, self.LABELS[self.uistate['link_direction']])
        self.direction_input.connect('changed',
                                     self.on_direction_input_changed)

        hbox = gtk.HBox()
        hbox.pack_start(gtk.Label(_('Trace Links') + ':'), False)
        hbox.add(self.direction_input)
        self.vbox.pack_start(hbox, False)

        self.listview = SingleClickTreeView(gtk.ListStore(int, str))
        self.listview.set_reorderable(True)
        for i, label in enumerate((_('#'), _('Page'))):
            column = gtk.TreeViewColumn(label, gtk.CellRendererText(), text=i)
            column.set_sort_column_id(i)
            self.listview.append_column(column)
        # TODO: self.listview.connect('row-activated', self.on_row_activated())

        self.vbox.add(ScrolledWindow(self.listview))
        self.populate_listview()
    def __init__(self, ui):
        Dialog.__init__(self,
                        ui,
                        _('Templates'),
                        help='Help:Templates',
                        buttons=gtk.BUTTONS_CLOSE,
                        defaultwindowsize=(400, 450))
        # T: Dialog title

        label = gtk.Label()
        label.set_markup('<b>' + _('Templates') + '</b>')
        # T: Section in dialog
        label.set_alignment(0.0, 0.5)
        self.vbox.pack_start(label, False)

        hbox = gtk.HBox()
        self.vbox.add(hbox)

        self.view = TemplateListView()
        self.view.connect('row-activated', self.on_selection_changed)
        hbox.add(ScrolledWindow(self.view))

        vbbox = gtk.VButtonBox()
        vbbox.set_layout(gtk.BUTTONBOX_START)
        hbox.pack_start(vbbox, False)

        view_button = Button(stock='gtk-file',
                             label=_('_View'))  # T: button label
        view_button.connect('clicked', self.on_view)

        copy_button = Button(stock='gtk-copy')
        copy_button.connect('clicked', self.on_copy)

        edit_button = Button(stock='gtk-edit')
        edit_button.connect('clicked', self.on_edit)

        delete_button = gtk.Button(stock='gtk-remove')
        delete_button.connect('clicked', self.on_delete)

        for b in (view_button, copy_button, edit_button, delete_button):
            b.set_alignment(0.0, 0.5)
            vbbox.add(b)

        browse_button = Button(_('Browse'))  # T: button label
        browse_button.connect('clicked', self.on_browse)
        self.add_extra_button(browse_button)

        self._buttonbox = vbbox
        self._delete_button = delete_button
        self.on_selection_changed()

        ## Same button appears in export dialog
        if gtk.gtk_version >= (2, 10) \
        and gtk.pygtk_version >= (2, 10):
            url_button = gtk.LinkButton(
                'http://zim-wiki.org/more_templates.html',
                _('Get more templates online')  # T: label for button with URL
            )
            self.vbox.pack_start(url_button, False)
	def __init__(self, dialog):
		GObject.GObject.__init__(self)
		help = _(
			'Key bindings can be changed by selecting the action in the list and pressing the new key binding.\n'
			'To disable a keybinding, select it in the list and use <tt>&lt;Backspace&gt;</tt>.'
		) # T: help text in preferences dialog for modifying keybindings
		self.add(ScrolledWindow(KeyBindingTreeView()))
		self.pack_end(help_text_factory(help), False, True, 12)
Example #17
0
    def __init__(self, parent, callback=None):
        Dialog.__init__(self, parent, _('Open Notebook'))  # T: dialog title
        # TODO set button to "OPEN" instead of "OK"
        self.callback = callback
        self.set_default_size(500, 400)
        self.set_help(':Help:Notebooks')

        # show some art work in an otherwise boring dialog
        path = data_file('globe_banner_small.png').path
        image = Gtk.Image()
        image.set_from_file(path)  # new_from_file not in 2.6
        align = Gtk.Alignment.new(0, 0.5, 0, 0)
        align.add(image)
        self.vbox.pack_start(align, False, True, 0)

        # split between treeview and vbuttonbox
        hbox = Gtk.HBox(spacing=12)
        self.vbox.pack_start(hbox, True, True, 0)

        # add notebook list - open notebook on clicking a row
        self.treeview = NotebookTreeView()
        self.treeview.connect('row-activated',
                              lambda *a: self.response(Gtk.ResponseType.OK))

        hbox.add(ScrolledWindow(self.treeview))

        # add buttons for modifying the treeview
        vbbox = Gtk.VButtonBox()
        vbbox.set_layout(Gtk.ButtonBoxStyle.START)
        hbox.pack_start(vbbox, False, True, 0)
        add_button = Gtk.Button.new_with_mnemonic(_('_Add'))  # T: Button label
        add_button.connect('clicked', self.do_add_notebook)
        #~ edit_button = Gtk.Button.new_with_mnemonic(_('_Edit')) # T: Button label
        #~ edit_button.connect('clicked', self.do_edit_notebook)
        rm_button = Gtk.Button.new_with_mnemonic(
            _('_Remove'))  # T: Button label
        rm_button.connect('clicked', self.do_remove_notebook)
        #~ for b in (add_button, edit_button, rm_button):
        for b in (add_button, rm_button):
            b.set_alignment(0.0, 0.5)
            vbbox.add(b)
        # FIXME buttons for "up" and "down" ?

        # add dropdown to select default
        self.combobox = DefaultNotebookComboBox(self.treeview.get_model())

        # clear button de-selects any item in the combobox
        clear_button = IconButton('gtk-clear')
        clear_button.connect('clicked', lambda o: self.combobox.set_active(-1))

        hbox = Gtk.HBox(spacing=5)
        hbox.pack_start(Gtk.Label(_('Default notebook') + ': '), False, True,
                        0)
        # T: Input label in 'open notebook' dialog
        hbox.pack_start(self.combobox, False, True, 0)
        hbox.pack_start(clear_button, False, True, 0)
        self.vbox.pack_start(hbox, False, True, 0)
Example #18
0
    def __init__(self, window):
        Dialog.__init__(
            self,
            window,
            _('Search'),  # T: Dialog title
            buttons=gtk.BUTTONS_CLOSE,
            help='Help:Searching',
            defaultwindowsize=(400, 300))
        self.app_window = window

        hbox = gtk.HBox(spacing=5)
        self.vbox.pack_start(hbox, False)
        hbox.pack_start(gtk.Label(_('Search') + ': '), False)  # T: input label
        self.query_entry = InputEntry()
        hbox.add(self.query_entry)
        self.search_button = gtk.Button(stock=gtk.STOCK_FIND)
        hbox.pack_start(self.search_button, False)

        if gtk.gtk_version >= (2, 20) \
        and gtk.pygtk_version >= (2, 22): # update in pygtk was later
            self.spinner = gtk.Spinner()
            hbox.pack_start(self.spinner, False)
        else:
            self.spinner = None

        self.cancel_button = gtk.Button(stock=gtk.STOCK_STOP)
        hbox.pack_start(self.cancel_button, False)
        self._set_state(self.READY)

        help_text = _('For advanced search you can use operators like\n'
                      'AND, OR and NOT. See the help page for more details.'
                      )  # T: help text for the search dialog
        if gtk.gtk_version >= (2, 12) \
        and gtk.pygtk_version >= (2, 12):
            self.query_entry.set_tooltip_text(help_text)
        else:
            tooltips = gtk.Tooltips()
            tooltips.set_tip(self.query_entry, help_text)

        self.namespacecheckbox = gtk.CheckButton(
            _('Limit search to the current page and sub-pages'))
        # T: checkbox option in search dialog
        self.vbox.pack_start(self.namespacecheckbox, False)

        # TODO advanced query editor
        # TODO checkbox _('Match c_ase')
        # TODO checkbox _('Whole _word')

        self.results_treeview = SearchResultsTreeView(self.app_window)
        self.vbox.add(ScrolledWindow(self.results_treeview))

        self.search_button.connect_object('clicked', self.__class__._search,
                                          self)
        self.cancel_button.connect_object('clicked', self.__class__._cancel,
                                          self)
        self.query_entry.connect_object('activate', self.__class__._search,
                                        self)
Example #19
0
    def _init_view(self):
        self.buffer.object_attrib.connect('changed', self.on_attrib_changed)

        self.view = GtkSource.View()
        self.view.set_buffer(self.buffer)
        self.view.modify_font(Pango.FontDescription('monospace'))
        self.view.set_auto_indent(True)
        self.view.set_smart_home_end(True)
        self.view.set_highlight_current_line(True)
        self.view.set_right_margin_position(80)
        self.view.set_show_right_margin(True)
        self.view.set_tab_width(4)
        self.view.set_show_line_numbers(
            self.buffer.object_attrib['linenumbers'])
        self.view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR)

        self.WRAP_MODE = {
            WRAP_NONE: Gtk.WrapMode.NONE,
            WRAP_WORD_CHAR: Gtk.WrapMode.WORD_CHAR,
            WRAP_CHAR: Gtk.WrapMode.CHAR,
            WRAP_WORD: Gtk.WrapMode.WORD,
        }

        # simple toolbar
        #~ bar = Gtk.HBox() # FIXME: use Gtk.Toolbar stuff
        #~ lang_selector = Gtk.ComboBoxText()
        #~ lang_selector.append_text('(None)')
        #~ for l in lang_names: lang_selector.append_text(l)
        #~ try:
        #~ lang_selector.set_active(lang_ids.index(self._attrib['lang'])+1)
        #~ self.set_language(self._attrib['lang'] or None, False)
        #~ except (ValueError, KeyError):
        #~ lang_selector.set_active(0)
        #~ self.set_language(None, False)
        #~ lang_selector.connect('changed', self.on_lang_changed)
        #~ bar.pack_start(lang_selector, False, False)

        #~ line_numbers = Gtk.ToggleButton('Line numbers')
        #~ try:
        #~ line_numbers.set_active(self._attrib['linenumbers']=='true')
        #~ self.show_line_numbers(self._attrib['linenumbers'], False)
        #~ except (ValueError, KeyError):
        #~ line_numbers.set_active(True)
        #~ self.show_line_numbers(True, False)
        #~ line_numbers.connect('toggled', self.on_line_numbers_toggled)
        #~ bar.pack_start(line_numbers, False, False)
        #~ self.add_header(bar)

        # TODO: other toolbar options
        # TODO: autohide toolbar if textbuffer is not active

        win = ScrolledWindow(self.view, Gtk.PolicyType.AUTOMATIC,
                             Gtk.PolicyType.NEVER, Gtk.ShadowType.NONE)
        self.add(win)

        self.view.connect('populate-popup', self.on_populate_popup)
Example #20
0
    def __init__(self):
        gtk.EventBox.__init__(self)
        self.set_border_width(5)
        self._has_cursor = False
        self._resize = True

        # Add vbox and wrap it to have a shadow around it
        self.vbox = gtk.VBox()  #: C{gtk.VBox} to contain widget contents
        win = ScrolledWindow(self.vbox, gtk.POLICY_NEVER, gtk.POLICY_NEVER,
                             gtk.SHADOW_IN)
        self.add(win)
    def __init__(self, widget, notebook, page, navigation):
        Dialog.__init__(
            self,
            widget,
            _('Search'),  # T: Dialog title
            buttons=Gtk.ButtonsType.CLOSE,
            help='Help:Searching',
            defaultwindowsize=(400, 300))
        self.page = page

        hbox = Gtk.HBox(spacing=5)
        self.vbox.pack_start(hbox, False, True, 0)
        search_label = Gtk.Label.new_with_mnemonic(_('_Search') + ': ')
        hbox.pack_start(search_label, False, True, 0)  # T: input label
        self.query_entry = InputEntry()
        hbox.add(self.query_entry)
        search_label.set_mnemonic_widget(self.query_entry)
        self.search_button = Gtk.Button.new_with_mnemonic(
            _('_Find'))  # T: Button label
        hbox.pack_start(self.search_button, False, True, 0)

        self.spinner = Gtk.Spinner()
        hbox.pack_start(self.spinner, False, True, 0)

        self.cancel_button = Gtk.Button.new_with_mnemonic(
            _('_Cancel'))  # T: Button label
        hbox.pack_start(self.cancel_button, False, True, 0)
        self._set_state(self.READY)

        help_text = _('For advanced search you can use operators like\n'
                      'AND, OR and NOT. See the help page for more details.'
                      )  # T: help text for the search dialog
        self.query_entry.set_tooltip_text(help_text)

        self.namespacecheckbox = Gtk.CheckButton.new_with_mnemonic(
            _('_Limit search to the current page and sub-pages'))
        # T: checkbox option in search dialog
        if page is not None:
            self.vbox.pack_start(self.namespacecheckbox, False, True, 0)

        # TODO advanced query editor
        # TODO checkbox _('Match c_ase')
        # TODO checkbox _('Whole _word')

        self.results_treeview = SearchResultsTreeView(notebook, navigation)
        self.vbox.pack_start(ScrolledWindow(self.results_treeview), True, True,
                             0)

        self.search_button.connect_object('clicked', self.__class__._search,
                                          self)
        self.cancel_button.connect_object('clicked', self.__class__._cancel,
                                          self)
        self.query_entry.connect_object('activate', self.__class__._search,
                                        self)
Example #22
0
	def __init__(self, ui):
		Dialog.__init__(self, ui, _('Recent Changes'), # T: Dialog title
			buttons=gtk.BUTTONS_CLOSE,
			defaultwindowsize=(400, 300)
		)

		self.treeview = RecentChangesTreeView(ui)
		self.vbox.add(ScrolledWindow(self.treeview))

		self.update()
		self.ui.notebook.connect_after('stored-page', lambda *a: self.update())
Example #23
0
	def __init__(self, notebook, navigation, uistate):
		GObject.GObject.__init__(self)
		self.notebook = notebook
		self.index = notebook.index
		self.uistate = uistate

		self.uistate.setdefault('treeview', 'tags', {'tagged', 'tags'})
		self.uistate.setdefault('tagcloud_sorting', 'score', {'alpha', 'score'})
		self.uistate.setdefault('show_full_page_name', True)

		self.tagcloud = TagCloudWidget(self.index, sorting=self.uistate['tagcloud_sorting'])
		self.pack1(ScrolledWindow(self.tagcloud), shrink=False)

		self.treeview = TagsPageTreeView(notebook, navigation)
		self.pack2(ScrolledWindow(self.treeview), shrink=False)

		self.treeview.connect('populate-popup', self.on_populate_popup)
		self.tagcloud.connect('selection-changed', self.on_cloud_selection_changed)
		self.tagcloud.connect('sorting-changed', self.on_cloud_sortin_changed)

		self.reload_model()
Example #24
0
    def __init__(self, dialog, plugins):
        gtk.VBox.__init__(self, spacing=5)
        self.dialog = dialog
        self.plugins = plugins

        self.hbox = gtk.HBox(self, spacing=12)
        self.hbox.set_border_width(5)
        self.add(self.hbox)

        #~ logger.debug('Plugins that are loaded: %s' % list(plugins))

        self.treeview = PluginsTreeView(self.plugins)
        self.treeview.connect('row-activated', self.do_row_activated)
        swindow = ScrolledWindow(self.treeview, hpolicy=gtk.POLICY_NEVER)
        self.hbox.pack_start(swindow, False)

        vbox = gtk.VBox()
        self.hbox.add(vbox)

        # Textview with scrollbars to show plugins info. Required by small screen devices
        swindow, textview = ScrolledTextView()
        textview.set_cursor_visible(False)
        self.textbuffer = textview.get_buffer()
        self.textbuffer.create_tag('bold', weight=pango.WEIGHT_BOLD)
        self.textbuffer.create_tag('red', foreground='#FF0000')
        vbox.pack_start(swindow, True)

        hbox = gtk.HBox(spacing=5)
        vbox.pack_end(hbox, False)

        self.plugin_help_button = \
         Button(stock=gtk.STOCK_HELP, label=_('_More')) # T: Button in plugin tab
        self.plugin_help_button.connect('clicked', self.on_help_button_clicked)
        hbox.pack_start(self.plugin_help_button, False)

        self.configure_button = \
         Button(stock=gtk.STOCK_PREFERENCES, label=_('C_onfigure')) # T: Button in plugin tab
        self.configure_button.connect('clicked',
                                      self.on_configure_button_clicked)
        hbox.pack_start(self.configure_button, False)

        try:
            self.do_row_activated(self.treeview, (0, ), 0)
        except:
            pass  # maybe loading plugins failed

        if gtk.gtk_version >= (2, 10) \
        and gtk.pygtk_version >= (2, 10):
            url_button = gtk.LinkButton(
                'https://github.com/jaap-karssenberg/zim-wiki/wiki/Plugins',
                _('Get more plugins online')  # T: label for button with URL
            )
            self.pack_start(url_button, False)
	def __init__(self, parent):
		Dialog.__init__(self, parent,
			_('Templates'), help='Help:Templates', buttons=Gtk.ButtonsType.CLOSE,
			defaultwindowsize=(400, 450))
			# T: Dialog title

		label = Gtk.Label()
		label.set_markup('<b>' + _('Templates') + '</b>')
			# T: Section in dialog
		label.set_alignment(0.0, 0.5)
		self.vbox.pack_start(label, False, True, 0)

		hbox = Gtk.HBox()
		self.vbox.pack_start(hbox, True, True, 0)

		self.view = TemplateListView()
		self.view.connect('row-activated', self.on_selection_changed)
		hbox.pack_start(ScrolledWindow(self.view), True, True, 0)

		vbbox = Gtk.VButtonBox()
		vbbox.set_layout(Gtk.ButtonBoxStyle.START)
		hbox.pack_start(vbbox, False, True, 0)

		view_button = Gtk.Button.new_with_mnemonic(_('_View')) # T: button label
		view_button.connect('clicked', self.on_view)

		copy_button = Gtk.Button.new_with_mnemonic(_('_Copy')) # T: Button label
		copy_button.connect('clicked', self.on_copy)

		edit_button = Gtk.Button.new_with_mnemonic(_('_Edit')) # T: Button label
		edit_button.connect('clicked', self.on_edit)

		delete_button = Gtk.Button.new_with_mnemonic(_('_Remove')) # T: Button label
		delete_button.connect('clicked', self.on_delete)

		for b in (view_button, copy_button, edit_button, delete_button):
			b.set_alignment(0.0, 0.5)
			vbbox.add(b)

		browse_button = Gtk.Button.new_with_mnemonic(_('Browse')) # T: button label
		browse_button.connect('clicked', self.on_browse)
		self.add_extra_button(browse_button)

		self._buttonbox = vbbox
		self._delete_button = delete_button
		self.on_selection_changed()

		## Same button appears in export dialog
		url_button = Gtk.LinkButton(
			'http://zim-wiki.org/more_templates.html',
			_('Get more templates online') # T: label for button with URL
		)
		self.vbox.pack_start(url_button, False, True, 0)
Example #26
0
    def __init__(self, obj, buffer):
        CustomObjectWidget.__init__(self)
        self.set_has_cursor(True)
        self.buffer = buffer
        self.obj = obj

        self.view = gtksourceview2.View(self.buffer)
        self.view.modify_font(pango.FontDescription('monospace'))
        self.view.set_auto_indent(True)
        self.view.set_smart_home_end(True)
        self.view.set_highlight_current_line(True)
        self.view.set_right_margin_position(80)
        self.view.set_show_right_margin(True)
        self.view.set_tab_width(4)

        # simple toolbar
        #~ bar = gtk.HBox() # FIXME: use gtk.Toolbar stuff
        #~ lang_selector = gtk.combo_box_new_text()
        #~ lang_selector.append_text('(None)')
        #~ for l in lang_names: lang_selector.append_text(l)
        #~ try:
        #~ lang_selector.set_active(lang_ids.index(self._attrib['lang'])+1)
        #~ self.set_language(self._attrib['lang'] or None, False)
        #~ except (ValueError, KeyError):
        #~ lang_selector.set_active(0)
        #~ self.set_language(None, False)
        #~ lang_selector.connect('changed', self.on_lang_changed)
        #~ bar.pack_start(lang_selector, False, False)

        #~ line_numbers = gtk.ToggleButton('Line numbers')
        #~ try:
        #~ line_numbers.set_active(self._attrib['linenumbers']=='true')
        #~ self.show_line_numbers(self._attrib['linenumbers'], False)
        #~ except (ValueError, KeyError):
        #~ line_numbers.set_active(True)
        #~ self.show_line_numbers(True, False)
        #~ line_numbers.connect('toggled', self.on_line_numbers_toggled)
        #~ bar.pack_start(line_numbers, False, False)

        # TODO: other toolbar options
        # TODO: autohide toolbar if textbuffer is not active

        # Pack everything
        #~ self.vbox.pack_start(bar, False, False)
        win = ScrolledWindow(self.view, gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER,
                             gtk.SHADOW_NONE)
        # only horizontal scroll
        self.vbox.pack_start(win)

        # Hook up signals
        self.view.connect('populate-popup', self.on_populate_popup)
        self.view.connect('move-cursor', self.on_move_cursor)
Example #27
0
    def __init__(self, ui):
        Dialog.__init__(self,
                        ui,
                        _('Templates'),
                        help='Help:Templates',
                        buttons=gtk.BUTTONS_CLOSE,
                        defaultwindowsize=(400, 450))
        # T: Dialog title

        label = gtk.Label()
        label.set_markup('<b>' + _('Templates') + '</b>')
        # T: Section in dialog
        label.set_alignment(0.0, 0.5)
        self.vbox.pack_start(label, False)

        hbox = gtk.HBox()
        self.vbox.add(hbox)

        self.view = TemplateListView()
        self.view.connect('row-activated', self.on_selection_changed)
        hbox.add(ScrolledWindow(self.view))

        vbbox = gtk.VButtonBox()
        vbbox.set_layout(gtk.BUTTONBOX_START)
        hbox.pack_start(vbbox, False)

        view_button = Button(stock='gtk-file',
                             label=_('_View'))  # T: button label
        view_button.connect('clicked', self.on_view)

        copy_button = Button(stock='gtk-copy')
        copy_button.connect('clicked', self.on_copy)

        edit_button = Button(stock='gtk-edit')
        edit_button.connect('clicked', self.on_edit)

        delete_button = gtk.Button(stock='gtk-remove')
        delete_button.connect('clicked', self.on_delete)

        for b in (view_button, copy_button, edit_button, delete_button):
            b.set_alignment(0.0, 0.5)
            vbbox.add(b)

        browse_button = Button(_('Browse'))  # T: button label
        browse_button.connect('clicked', self.on_browse)
        self.add_extra_button(browse_button)

        self._buttonbox = vbbox
        self._delete_button = delete_button
        self.on_selection_changed()
	def __init__(self, widget, notebook, navigation):
		Dialog.__init__(self, widget, _('Recent Changes'), # T: Dialog title
			buttons=Gtk.ButtonsType.CLOSE,
			defaultwindowsize=(400, 300)
		)
		self.notebook = notebook
		self.navigation = navigation

		self.treeview = RecentChangesTreeView()
		self.vbox.pack_start(ScrolledWindow(self.treeview), True, True, 0)
		self.treeview.connect('row-activated', self.on_row_activated)

		self.update()
		self.notebook.connect_after('stored-page', lambda *a: self.update())
Example #29
0
    def __init__(self, obj, liststore, headers, attrs):
        '''
		This is a group of GTK Gui elements which are directly displayed within the wiki textarea
		On initilizing also some signals are registered and a toolbar is initialized
		:param obj: a Table-View-Object
		:param liststore: a gtk.ListStore object
		:param headers: list of titles
		:param attrs: table settings, like alignment and wrapping
		:return:
		'''
        CustomObjectWidget.__init__(self)
        self.textarea_width = 0

        # used in pageview
        self._has_cursor = False  # Skip table object, if someone moves cursor around in textview

        # used here
        self.obj = obj
        self._timer = None  # NONE or number of current gobject.timer, which is running
        self._keep_toolbar_open = False  # a cell is currently edited, toolbar should not be hidden
        self._cellinput_canceled = None  # cell changes should be skipped
        self._toolbar_enabled = True  # sets if toolbar should be shown beneath a selected table

        # Toolbar for table actions
        self.toolbar = self.create_toolbar()
        self.toolbar.show_all()
        self.toolbar.set_no_show_all(True)
        self.toolbar.hide()

        # Create treeview
        self._init_treeview(liststore, headers, attrs)

        # package gui elements
        self.vbox.pack_end(self.toolbar)
        self.scroll_win = ScrolledWindow(self.treeview, gtk.POLICY_NEVER,
                                         gtk.POLICY_NEVER, gtk.SHADOW_NONE)
        self.vbox.pack_start(self.scroll_win)
Example #30
0
	def __init__(self, plugin, notebook, navigation):
		GObject.GObject.__init__(self)
		self.plugin = plugin
		self.notebook = notebook
		self.navigation = navigation
		self.model = CalendarWidgetModel(plugin, notebook)

		self.label_box = Gtk.HBox()
		self.pack_start(self.label_box, False, True, 0)

		self.label = Gtk.Label()
		button = Gtk.Button()
		button.add(self.label)
		button.set_relief(Gtk.ReliefStyle.NONE)
		button.connect('clicked', lambda b: self.go_today())
		self.label_box.add(button)

		self._close_button = None

		self._refresh_label()
		self._timer_id = \
			GObject.timeout_add(300000, self._refresh_label)
			# 5 minute = 300_000 ms
			# Ideally we only need 1 timer per day at 00:00, but not
			# callback for that
		self.connect('destroy',
			lambda o: GObject.source_remove(o._timer_id))
			# Clear reference, else we get a new timer for every dialog

		self.calendar = Calendar()
		self.calendar.set_display_options(
			Gtk.CalendarDisplayOptions.SHOW_HEADING |
			Gtk.CalendarDisplayOptions.SHOW_DAY_NAMES |
			Gtk.CalendarDisplayOptions.SHOW_WEEK_NUMBERS
		)
		self.calendar.connect('activate', self.on_calendar_activate)
		self.calendar.connect('month-changed', self.on_month_changed)
		self.on_month_changed(self.calendar)
		self.pack_start(self.calendar, False, True, 0)

		self.treeview = PageTreeView(notebook, navigation)
		self.pack_start(ScrolledWindow(self.treeview), True, True, 0)
Example #31
0
    def __init__(self, dialog, plugins):
        gtk.HBox.__init__(self, spacing=12)
        self.set_border_width(5)
        self.dialog = dialog
        self.plugins = plugins

        #~ logger.debug('Plugins that are loaded: %s' % list(plugins))

        self.treeview = PluginsTreeView(self.plugins)
        self.treeview.connect('row-activated', self.do_row_activated)
        swindow = ScrolledWindow(self.treeview, hpolicy=gtk.POLICY_NEVER)
        self.pack_start(swindow, False)

        vbox = gtk.VBox()
        self.add(vbox)

        # Textview with scrollbars to show plugins info. Required by small screen devices
        swindow, textview = ScrolledTextView()
        textview.set_cursor_visible(False)
        self.textbuffer = textview.get_buffer()
        self.textbuffer.create_tag('bold', weight=pango.WEIGHT_BOLD)
        self.textbuffer.create_tag('red', foreground='#FF0000')
        vbox.pack_start(swindow, True)

        hbox = gtk.HBox(spacing=5)
        vbox.pack_end(hbox, False)

        self.plugin_help_button = \
         Button(stock=gtk.STOCK_HELP, label=_('_More')) # T: Button in plugin tab
        self.plugin_help_button.connect('clicked', self.on_help_button_clicked)
        hbox.pack_start(self.plugin_help_button, False)

        self.configure_button = \
         Button(stock=gtk.STOCK_PREFERENCES, label=_('C_onfigure')) # T: Button in plugin tab
        self.configure_button.connect('clicked',
                                      self.on_configure_button_clicked)
        hbox.pack_start(self.configure_button, False)

        self.do_row_activated(self.treeview, (0, ), 0)
Example #32
0
	def __init__(self, attrib, data, ui=None):
		if data.endswith('\n'):
			data = data[:-1]
			# If we have trailing \n it looks like an extra empty line
			# in the buffer, so we default remove one
		CustomObjectClass.__init__(self, attrib, data, ui)
		if self.ui and self.ui.__class__.__name__ == 'GtkInterface': # XXX seperate widget and object
			from zim.gui.widgets import ScrolledWindow

			# SourceView scrolled window
			self.buffer = gtksourceview2.Buffer()
			self.buffer.set_text(self._data)
			self.buffer.connect('modified-changed', self.on_modified_changed)
			self.buffer.set_highlight_matching_brackets(True)
			self.buffer.set_modified(False)
			self._data = None
			self.view = gtksourceview2.View(self.buffer)
			self.view.modify_font(pango.FontDescription('monospace'))
			self.view.set_auto_indent(True)
			self.view.set_smart_home_end(True)
			self.view.set_highlight_current_line(True)
			self.view.set_right_margin_position(80)
			self.view.set_show_right_margin(True)
			self.view.set_tab_width(4)

			win = ScrolledWindow(self.view, gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
				# only horizontal scroll
			win.set_border_width(5)

			self._attrib.setdefault('lang', None)
			self._attrib.setdefault('linenumbers', 'true') # FIXME make boolean
			self.set_language(self._attrib['lang'], save=False)
			self.show_line_numbers(self._attrib['linenumbers'], save=False)

			self.view.connect('populate-popup', self.on_populate_popup)

			# simple toolbar
			#~ bar = gtk.HBox() # FIXME: use gtk.Toolbar stuff
			#~ lang_selector = gtk.combo_box_new_text()
			#~ lang_selector.append_text('(None)')
			#~ for l in lang_names: lang_selector.append_text(l)
			#~ try:
				#~ lang_selector.set_active(lang_ids.index(self._attrib['lang'])+1)
				#~ self.set_language(self._attrib['lang'] or None, False)
			#~ except (ValueError, KeyError):
				#~ lang_selector.set_active(0)
				#~ self.set_language(None, False)
			#~ lang_selector.connect('changed', self.on_lang_changed)
			#~ bar.pack_start(lang_selector, False, False)
		#~
			#~ line_numbers = gtk.ToggleButton('Line numbers')
			#~ try:
				#~ line_numbers.set_active(self._attrib['linenumbers']=='true')
				#~ self.show_line_numbers(self._attrib['linenumbers'], False)
			#~ except (ValueError, KeyError):
				#~ line_numbers.set_active(True)
				#~ self.show_line_numbers(True, False)
			#~ line_numbers.connect('toggled', self.on_line_numbers_toggled)
			#~ bar.pack_start(line_numbers, False, False)

			# TODO: other toolbar options
			# TODO: autohide toolbar if textbuffer is not active

			# Pack everything
			box = gtk.VBox()
			#~ box.pack_start(bar, False, False)
			box.pack_start(win)
			self._widget = CustomObjectBin()
			self._widget.set_has_cursor(True)
			self._widget.add(box)

			# Hook up integration with pageview cursor movement
			def on_grab_cursor(bin, position):
				begin, end = self.buffer.get_bounds()
				if position == POSITION_BEGIN:
					self.buffer.place_cursor(begin)
				else:
					self.buffer.place_cursor(end)
				self.view.grab_focus()

			def on_move_cursor(view, step_size, count, extend_selection):
				buffer = view.get_buffer()
				iter = buffer.get_iter_at_mark(buffer.get_insert())
				if (iter.is_start() or iter.is_end()) \
				and not extend_selection:
					if iter.is_start() and count < 0:
						self._widget.release_cursor(POSITION_BEGIN)
						return None
					elif iter.is_end() and count > 0:
						self._widget.release_cursor(POSITION_END)
						return None

				return gtksourceview2.View.do_move_cursor(view, step_size, count, extend_selection)

			self._widget.connect('grab-cursor', on_grab_cursor)
			self.view.connect('move-cursor', on_move_cursor)

			# Resize widget if parent TextView has been resized -- XXX
			self.ui.mainwindow.pageview.view.connect_after('size-allocate',
												self.on_parent_view_resized)
		else:
			self.view = None
Example #33
0
class TagsManagerDialog(Dialog):
    '''
    Tags Manager dialog to do some basic operations with
    tags and to set icons for tags.
    '''
    def __init__(self, window, index, uistate):

        Dialog.__init__(self, window, _('Tags Manager (IconTags plugin)'), # T: dialog title
                        buttons=gtk.BUTTONS_OK_CANCEL,
                        defaultwindowsize=(450, 400) )

        # Don't confuse with local variable 'self.uistate',
        # which is already determined for this class.
        self._window = window
        self.plugin_uistate = uistate
        self.show_pages_button = gtk.ToggleButton('Show Pages')
        self.show_pages_button.connect('toggled', self.toggle_show_pages)
        self.add_extra_button(self.show_pages_button)

        self.treeview_tags = TagsManagerTagsView(index, self.plugin_uistate['Icons for Tags'])
        self.treeview_pages = TagsManagerPagesView(index, window.ui)
        self.scrolled_widget = ScrolledWindow(self.treeview_tags)
        self.vbox.pack_start(self.scrolled_widget, True)

        self.treeview_tags.connect('row-activated', self.get_tag)

        # Enable left/right arrows to navigate between views.
        self.treeview_tags.connect('key-release-event', self.toggle_view)
        self.treeview_pages.connect('key-release-event', self.toggle_view)

        # Update if tags change.
        self.connectto_all(index.update_iter.tags, (
            ('tag-row-inserted', lambda *a: self.update()),
            ('tag-row-deleted', lambda *a: self.update())
        ))

        self.show_all()

    def toggle_view(self, treeview, event):
        '''Change view by pressing Left/Right arrows on keyboard.'''
        key = gtk.gdk.keyval_name(event.keyval)
        if key == 'Right' and treeview == self.treeview_tags:
            self.show_pages_button.set_active(True)
        elif key == 'Left' and treeview == self.treeview_pages:
            self.show_pages_button.set_active(False)

    def get_tag(self, treeview, path, column):
        '''Place the tag to the cursor position.'''
        model = treeview.get_model()
        tag = '@' + model.get_value(model.get_iter(path), treeview.TAG_COL)
        self._window.pageview.view.get_buffer().insert_tag_at_cursor(tag)

    def update(self):
        '''Update both tags and pages trees.'''
        self.treeview_tags.refill_model()
        self.treeview_pages.refill_model(self.treeview_pages.current_tag)

    def toggle_show_pages(self, button):
        ''' 'Show Pages' button is clicked.'''
        for widget in self.scrolled_widget.get_children():
            self.scrolled_widget.remove(widget)

        model, iter = self.treeview_tags.get_selection().get_selected()
        if button.get_active():
            self.scrolled_widget.add(self.treeview_pages)
            # Set values for 'self.treeview_pages'.
            if iter:
                selected_tag = model.get_value(iter, self.treeview_tags.TAG_COL)
                self.treeview_pages.refill_model(selected_tag)
        else:
            self.scrolled_widget.add(self.treeview_tags)
            # Scroll to tag in 'self.treeview_tags'.
            if iter:
                path = model.get_path(iter)
                self.treeview_tags.scroll_to_cell(path)
        self.show_all()

    def do_response_ok(self, *a):
        ''' OK button is pressed.'''
        self.plugin_uistate['Icons for Tags'] = self.treeview_tags.icons_for_tags
        self.result = True
        return True