def __init__(self, plugin): Dialog.__init__(self, plugin.ui, _('Calendar'), buttons=None) # T: dialog title self.set_resizable(False) self.plugin = plugin self.calendar_widget = CalendarPluginWidget(plugin) self.vbox.add(self.calendar_widget) hbox = gtk.HBox() self.vbox.add(hbox) button = Button(_('_Today'), gtk.STOCK_JUMP_TO) # T: button label button.connect('clicked', lambda o: self.calendar_widget.select_date(dateclass.today())) hbox.pack_end(button, False)
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, plugin): Dialog.__init__(self, plugin.ui, _('Calendar'), buttons=gtk.BUTTONS_CLOSE) # T: dialog title self.set_resizable(False) self.plugin = plugin self.calendar_widget = CalendarPluginWidget(plugin) self.calendar_widget.set_select_date_callback(self.on_select_date) self.vbox.add(self.calendar_widget) button = Button(_('_Today'), gtk.STOCK_JUMP_TO) # T: button label button.connect('clicked', self.do_today ) self.action_area.add(button) self.action_area.reorder_child(button, 0) self.dateshown = datetime.date.today() self.connectto(self.plugin.ui, 'open-page')
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( 'https://github.com/jaap-karssenberg/zim-wiki/wiki/Templates', _('Get more templates online') # T: label for button with URL ) self.vbox.pack_start(url_button, False)
def __init__(self, plugin, window): Dialog.__init__(self, window, _('Calendar'), buttons=gtk.BUTTONS_CLOSE) # T: dialog title self.set_resizable(False) self.plugin = plugin self.opener = window.get_resource_opener() notebook = window.ui.notebook # XXX model = CalendarWidgetModel(self.plugin, notebook) self.calendar_widget = CalendarWidget(model) self.vbox.add(self.calendar_widget) button = Button(_('_Today'), gtk.STOCK_JUMP_TO) # T: button label button.connect('clicked', self.do_today ) self.action_area.add(button) self.action_area.reorder_child(button, 0) self.dateshown = datetime.date.today() self.connectto(self.calendar_widget, 'date-activated') self.connectto(window.ui, 'open-page') # XXX
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, 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()
class PluginsTab(gtk.VBox): 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.treeselection = self.treeview.get_selection() self.treeselection.connect('changed', self.do_selection_changed) 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.treeselection.select_path(0) except: pass # maybe loading plugins failed ## Add buttons to get and install new plugins hbox = gtk.HButtonBox() hbox.set_border_width(5) hbox.set_layout(gtk.BUTTONBOX_START) self.pack_start(hbox, False) assert hasattr(self.dialog, 'ui') open_button = gtk.Button(label=_('Open plugins folder')) open_button.connect('clicked', lambda o: self.dialog.ui.open_dir(PLUGIN_FOLDER)) hbox.pack_start(open_button, False) if gtk.gtk_version >= (2, 10) \ and gtk.pygtk_version >= (2, 10): url_button = gtk.LinkButton( 'http://zim-wiki.org/more_plugins.html', _('Get more plugins online') # T: label for button with URL ) hbox.pack_start(url_button, False) def do_selection_changed(self, selection): treeview = selection.get_tree_view() selected = selection.get_selected() path = selected[0].get_path(selected[1]) key, active, activatable, name, klass = treeview.get_model()[path] self._current_plugin = key logger.debug('Loading description for plugin: %s', key) # Insert plugin info into textview with proper formatting # TODO use our own widget with formatted text here... buffer = self.textbuffer def insert(text, style=None): if style: buffer.insert_with_tags_by_name(buffer.get_end_iter(), text, style) else: buffer.insert_at_cursor(text) buffer.delete(*buffer.get_bounds()) # clear insert(_('Name') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['name'].strip() + '\n\n') insert(_('Description') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['description'].strip() + '\n\n') insert(_('Dependencies') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog check, dependencies = klass.check_dependencies() if not (dependencies): insert(_('No dependencies') + '\n') # T: label in plugin info in preferences dialog else: # Construct dependency list, missing dependencies are marked red for dependency in dependencies: text, ok, required = dependency if ok: insert(u'\u2022 %s - %s\n' % (text, _('OK'))) # T: dependency is OK elif required: insert(u'\u2022 %s - %s\n' % (text, _('Failed')), 'red') # T: dependency failed else: insert(u'\u2022 %s - %s (%s)\n' % ( text, _('Failed'), # T: dependency failed _('Optional') # T: optional dependency )) insert('\n') insert(_('Author') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['author'].strip()) self.configure_button.set_sensitive(active and bool(klass.plugin_preferences)) self.plugin_help_button.set_sensitive('help' in klass.plugin_info) def on_help_button_clicked(self, button): klass = self.plugins.get_plugin_class(self._current_plugin) self.dialog.ui.show_help(klass.plugin_info['help']) # XXX def on_configure_button_clicked(self, button): plugin = self.plugins[self._current_plugin] PluginConfigureDialog(self.dialog, plugin).run() def select_plugin(self, name): model = self.treeview.get_model() def find(model, path, iter): if model[iter][2] == name: self.treeview.scroll_to_cell(path) self.treeview.set_cursor(path) self.do_selection_changed(self.treeselection, 0) return True return False # keep the foreach going model.foreach(find)
class PluginsTab(gtk.HBox): # TODO defined checks for plugin dependencies and grey them out here if # the check fails - or give an error popup with the result of the check def __init__(self, dialog): gtk.HBox.__init__(self, spacing=12) self.set_border_width(5) self.dialog = dialog treeview = PluginsTreeView(self.dialog.ui) treeview.connect('row-activated', self.do_row_activated) swindow = gtk.ScrolledWindow() swindow.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) swindow.set_shadow_type(gtk.SHADOW_IN) self.pack_start(swindow, False) swindow.add(treeview) vbox = gtk.VBox() self.add(vbox) def heading(text): label = gtk.Label() label.set_markup('<b>%s</b>' % text) label.set_alignment(0.0, 0.5) return label vbox.pack_start(heading(_('Name')), False) # T: Heading in plugins tab of preferences dialog self.name_label = gtk.Label() self.name_label.set_alignment(0.0, 0.5) vbox.pack_start(self.name_label, False) vbox.pack_start(heading('\n'+_('Description')), False) # T: Heading in plugins tab of preferences dialog self.description_label = gtk.Label() self.description_label.set_alignment(0.0, 0.5) vbox.pack_start(self.description_label, False) # FIXME run through plain format to make links vbox.pack_start(heading('\n'+_('Author')), False) # T: Heading in plugins tab of preferences dialog self.author_label= gtk.Label() self.author_label.set_alignment(0.0, 0.5) vbox.pack_start(self.author_label, False) # FIXME idem 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(treeview, (0,), 0) def do_row_activated(self, treeview, path, col): active = treeview.get_model()[path][0] klass = treeview.get_model()[path][2] self._klass = klass self.name_label.set_text(klass.plugin_info['name'].strip()) self.description_label.set_text(klass.plugin_info['description'].strip()) self.author_label.set_text(klass.plugin_info['author'].strip() + '\n') self.configure_button.set_sensitive(active and bool(klass.plugin_preferences)) self.plugin_help_button.set_sensitive('help' in klass.plugin_info) def on_help_button_clicked(self, button): self.dialog.ui.show_help(self._klass.plugin_info['help']) def on_configure_button_clicked(self, button): PluginConfigureDialog(self.dialog, self._klass).run()
class PluginsTab(gtk.VBox): 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 do_row_activated(self, treeview, path, col): key, active, activatable, name, klass = treeview.get_model()[path] self._current_plugin = key logger.debug('Loading description for plugin: %s', key) # Insert plugin info into textview with proper formatting # TODO use our own widget with formatted text here... buffer = self.textbuffer def insert(text, style=None): if style: buffer.insert_with_tags_by_name( buffer.get_end_iter(), text, style) else: buffer.insert_at_cursor(text) buffer.delete(*buffer.get_bounds()) # clear insert(_('Name') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['name'].strip() + '\n\n') insert(_('Description') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['description'].strip() + '\n\n') insert(_('Dependencies') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog check, dependencies = klass.check_dependencies() if not(dependencies): insert(_('No dependencies') + '\n') # T: label in plugin info in preferences dialog else: # Construct dependency list, missing dependencies are marked red for dependency in dependencies: text, ok, required = dependency if ok: insert(u'\u2022 %s - %s\n' % (text, _('OK'))) # T: dependency is OK elif required: insert(u'\u2022 %s - %s\n' % (text, _('Failed')), 'red') # T: dependency failed else: insert(u'\u2022 %s - %s (%s)\n' % (text, _('Failed'), # T: dependency failed _('Optional') # T: optional dependency ) ) insert('\n') insert(_('Author') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['author'].strip()) self.configure_button.set_sensitive(active and bool(klass.plugin_preferences)) self.plugin_help_button.set_sensitive('help' in klass.plugin_info) def on_help_button_clicked(self, button): klass = self.plugins.get_plugin_class(self._current_plugin) self.dialog.ui.show_help(klass.plugin_info['help']) # XXX def on_configure_button_clicked(self, button): plugin = self.plugins[self._current_plugin] PluginConfigureDialog(self.dialog, plugin).run() def select_plugin(self, name): model = self.treeview.get_model() def find(model, path, iter): if model[iter][2] == name: self.treeview.scroll_to_cell(path) self.treeview.set_cursor(path) self.do_row_activated(self.treeview, path, 0) return True; return False # keep the foreach going model.foreach(find)
class PluginsTab(gtk.HBox): def __init__(self, dialog): gtk.HBox.__init__(self, spacing=12) self.set_border_width(5) self.dialog = dialog treeview = PluginsTreeView(self.dialog.ui) treeview.connect('row-activated', self.do_row_activated) swindow = ScrolledWindow(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(treeview, (0,), 0) def do_row_activated(self, treeview, path, col): active = treeview.get_model()[path][0] name = treeview.get_model()[path][2] klass = treeview.get_model()[path][3] self._klass = klass logger.debug('Loading description for "%s"', name) # Insert plugin info into textview with proper formatting self.textbuffer.delete(*self.textbuffer.get_bounds()) # clear self.textbuffer.insert_with_tags_by_name( self.textbuffer.get_end_iter(), _('Name') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog self.textbuffer.insert( self.textbuffer.get_end_iter(), klass.plugin_info['name'].strip() + '\n\n') self.textbuffer.insert_with_tags_by_name( self.textbuffer.get_end_iter(), _('Description') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog self.textbuffer.insert( self.textbuffer.get_end_iter(), klass.plugin_info['description'].strip() + '\n\n') self.textbuffer.insert_with_tags_by_name( self.textbuffer.get_end_iter(), _('Dependencies') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog # Construct dependency list, missing dependencies are marked red check, dependencies = klass.check_dependencies() if not(dependencies): self.textbuffer.insert( self.textbuffer.get_end_iter(), _('No dependencies') + '\n') # T: label in plugin info in preferences dialog else: for dependency in dependencies: text, ok, required = dependency if ok: self.textbuffer.insert( self.textbuffer.get_end_iter(), u'\u2022 ' + text + ' - ' + _('OK') + '\n') # T: dependency is OK elif required: self.textbuffer.insert_with_tags_by_name( self.textbuffer.get_end_iter(), u'\u2022 ' + text +' - ' + _('Failed') + '\n', 'red') # T: dependency failed else: self.textbuffer.insert( self.textbuffer.get_end_iter(), u'\u2022 ' + text +' - ' + _('Failed') # T: dependency failed + ' ' + _('Optional') + '\n') # T: optional dependency self.textbuffer.insert_with_tags_by_name( self.textbuffer.get_end_iter(), '\n' + _('Author') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog self.textbuffer.insert( self.textbuffer.get_end_iter(), klass.plugin_info['author'].strip()) self.configure_button.set_sensitive(active and bool(klass.plugin_preferences)) self.plugin_help_button.set_sensitive('help' in klass.plugin_info) def on_help_button_clicked(self, button): self.dialog.ui.show_help(self._klass.plugin_info['help']) def on_configure_button_clicked(self, button): PluginConfigureDialog(self.dialog, self._klass).run()
class PluginsTab(gtk.HBox): 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 do_row_activated(self, treeview, path, col): key, active, activatable, name, klass = treeview.get_model()[path] self._current_plugin = key logger.debug('Loading description for plugin: %s', key) # Insert plugin info into textview with proper formatting # TODO use our own widget with formatted text here... buffer = self.textbuffer def insert(text, style=None): if style: buffer.insert_with_tags_by_name(buffer.get_end_iter(), text, style) else: buffer.insert_at_cursor(text) buffer.delete(*buffer.get_bounds()) # clear insert(_('Name') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['name'].strip() + '\n\n') insert(_('Description') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['description'].strip() + '\n\n') insert(_('Dependencies') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog check, dependencies = klass.check_dependencies() if not (dependencies): insert(_('No dependencies') + '\n') # T: label in plugin info in preferences dialog else: # Construct dependency list, missing dependencies are marked red for dependency in dependencies: text, ok, required = dependency if ok: insert(u'\u2022 %s - %s\n' % (text, _('OK'))) # T: dependency is OK elif required: insert(u'\u2022 %s - %s\n' % (text, _('Failed')), 'red') # T: dependency failed else: insert(u'\u2022 %s - %s (%s)' % ( text, _('Failed'), # T: dependency failed _('Optional') # T: optional dependency )) insert('\n') insert(_('Author') + '\n', 'bold') # T: Heading in plugins tab of preferences dialog insert(klass.plugin_info['author'].strip()) self.configure_button.set_sensitive(active and bool(klass.plugin_preferences)) self.plugin_help_button.set_sensitive('help' in klass.plugin_info) def on_help_button_clicked(self, button): klass = zim.plugins.get_plugin_class(self._current_plugin) self.dialog.ui.show_help(klass.plugin_info['help']) # XXX def on_configure_button_clicked(self, button): plugin = self.plugins[self._current_plugin] PluginConfigureDialog(self.dialog, plugin).run() def select_plugin(self, name): model = self.treeview.get_model() def find(model, path, iter): if model[iter][2] == name: self.treeview.scroll_to_cell(path) self.treeview.set_cursor(path) self.do_row_activated(self.treeview, path, 0) return True return False # keep the foreach going model.foreach(find)