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)
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)
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)
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()
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)
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()
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()
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)
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()
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 __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)
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())
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()
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><Backspace></tt>.' ) # T: help text in preferences dialog for modifying keybindings self.add(ScrolledWindow(KeyBindingTreeView())) self.pack_end(help_text_factory(help), False, True, 12)
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)
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)
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)
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)
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())
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()
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)
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)
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())
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)
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)
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)
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
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