def __init__(self, filename=None, dirname=None, toplevel=None): """ Class Constructor: Returns a new instance of the Glade class :type filename: string :param filename: The name of the glade file to be used. Defaults to None :type dirname: string :param dirname: The directory to search for the glade file. Defaults to None which will cause a search for the file in the default directory followed by the directory of the calling module. :type toplevel: toplevel :param toplevel: The toplevel object to search for in the glade file. Defaults to None, which will cause a search for a toplevel matching the file name. :rtype: object reference :returns: reference to the newly-created Glade instance """ Gtk.Builder.__init__(self) self.set_translation_domain(glocale.get_localedomain()) filename_given = filename is not None dirname_given = dirname is not None # if filename not given, use module name to derive it if not filename_given: filename = sys._getframe(1).f_code.co_filename filename = os.path.basename(filename) filename = filename.rpartition('.')[0] + '.glade' filename = filename.lstrip('_').lower() # if dirname not given, use current directory if not dirname_given: dirname = sys._getframe(1).f_code.co_filename dirname = os.path.dirname(dirname) # try to find the glade file if filename_given and dirname_given: # both given -- use them path = os.path.join(dirname, filename) elif filename_given: # try default directory first path = os.path.join(GLADE_DIR, filename) if not os.path.exists(path): # then module directory path = os.path.join(dirname, filename) elif dirname_given: # dirname given -- use it path = os.path.join(dirname, filename) # neither filename nor dirname given. Try: # 1. derived filename in default directory # 2. derived filename in module directory else: path = os.path.join(GLADE_DIR, filename) if not os.path.exists(path): path = os.path.join(dirname, filename) # try to build Gtk objects from glade file. Let exceptions happen self.add_from_file(path) self.__dirname, self.__filename = os.path.split(path) # try to find the toplevel widget if toplevel: # toplevel is given self.__toplevel = self.get_object(toplevel) else: # toplevel not given # first, use filename as possible toplevel widget name self.__toplevel = self.get_object(filename.rpartition('.')[0]) # next try lowercase filename as possible widget name if not self.__toplevel: self.__toplevel = self.get_object( filename.rpartition('.')[0].lower()) if not self.__toplevel: # if no match found, search for first toplevel widget for obj in self.get_objects(): if hasattr(obj, 'get_toplevel'): self.__toplevel = obj.get_toplevel() break else: self.__toplevel = None
def create_toolbar(self, uimanager, window): """ Create a formatting toolbar. :returns: toolbar containing text formatting toolitems. :rtype: Gtk.Toolbar """ self.uimanager = uimanager # build the toolbar builder = Gtk.Builder() builder.set_translation_domain(glocale.get_localedomain()) builder.add_from_string(FORMAT_TOOLBAR) # define the actions... _actions = [ ('ITALIC', self._on_toggle_action_activate, '<PRIMARY>i', False), ('BOLD', self._on_toggle_action_activate, '<PRIMARY>b', False), ('UNDERLINE', self._on_toggle_action_activate, '<PRIMARY>u', False), ('FONTCOLOR', self._on_action_activate), ('HIGHLIGHT', self._on_action_activate), ('LINK', self._on_link_activate), ('CLEAR', self._format_clear_cb), ('STUndo', self.undo, '<primary>z'), ('STRedo', self.redo, '<primary><shift>z'), ] # the following are done manually rather than using actions fonts = SystemFonts() fontface = builder.get_object('Fontface') fontface.init(fonts.get_system_fonts(), shortlist=True, validator=None) fontface.set_entry_editable(False) fontface.connect('changed', make_cb( self._on_valueaction_changed, StyledTextTagType.FONTFACE)) # set initial value default = StyledTextTagType.STYLE_DEFAULT[StyledTextTagType.FONTFACE] self.fontface = fontface.get_child() self.fontface.set_text(str(default)) fontface.show() items = FONT_SIZES fontsize = builder.get_object('Fontsize') fontsize.init(items, shortlist=False, validator=is_valid_fontsize) fontsize.set_entry_editable(True) fontsize.connect('changed', make_cb( self._on_valueaction_changed, StyledTextTagType.FONTSIZE)) # set initial value default = StyledTextTagType.STYLE_DEFAULT[StyledTextTagType.FONTSIZE] self.fontsize = fontsize.get_child() self.fontsize.set_text(str(default)) fontsize.show() # create the action group and insert all the actions self.action_group = ActionGroup('Format', _actions, 'ste') act_grp = SimpleActionGroup() window.insert_action_group('ste', act_grp) window.set_application(uimanager.app) uimanager.insert_action_group(self.action_group, act_grp) self.undo_action = uimanager.get_action(self.action_group, "STUndo") self.redo_action = uimanager.get_action(self.action_group, "STRedo") # allow undo/redo to see actions if editable. self.textbuffer.connect('changed', self._on_buffer_changed) # undo/redo are initially greyed out, until something is changed self.undo_action.set_enabled(False) self.redo_action.set_enabled(False) # get the toolbar and set it's style toolbar = builder.get_object('ToolBar') return toolbar, self.action_group
def __init__(self, state, uistate, track, categories, msg, label=None, button_label=None, tool_tip=None, content=_REPORTS): """ Display the dialog box, and build up the list of available reports. This is used to build the selection tree on the left hand side of the dialog box. """ self.active = uistate.get_active('Person') self.imap = {} self.msg = msg self.content = content self._pmgr = GuiPluginManager.get_instance() ManagedWindow.__init__(self, uistate, track, self.__class__) self.state = state self.uistate = uistate self.dialog = Gtk.Builder() self.dialog.set_translation_domain(glocale.get_localedomain()) self.dialog.add_from_file(PLUGINS_GLADE) self.dialog.connect_signals({ "on_report_apply_clicked": self.on_apply_clicked, "destroy_passed_object": self.close, "on_delete_event": self.close, }) self.tree = self.dialog.get_object("tree") window = self.dialog.get_object("report") self.title = self.dialog.get_object("title") self.set_window(window, self.title, msg) if content == _REPORTS: self.setup_configs('interface.reportplugindialog', 600, 400) elif content == _TOOLS: self.setup_configs('interface.toolplugindialog', 600, 400) else: raise ValueError("PluginDialog selection must be a report or tool") self.store = Gtk.TreeStore(str) self.selection = self.tree.get_selection() self.selection.connect('changed', self.on_node_selected) col = Gtk.TreeViewColumn('', Gtk.CellRendererText(), text=0) self.tree.append_column(col) self.tree.set_model(self.store) self.description = self.dialog.get_object("description") if label: self.description.set_text(label) self.status = self.dialog.get_object("report_status") self.author_name = self.dialog.get_object("author_name") self.author_email = self.dialog.get_object("author_email") self.apply_button = self.dialog.get_object("apply") if button_label: self.apply_button.set_label(button_label) else: self.apply_button.set_label(_("_Apply")) self.apply_button.set_use_underline(True) if tool_tip: self.apply_button.set_tooltip_text(tool_tip) self.item = None if content == _REPORTS: reg_list = self._pmgr.get_reg_reports() elif content == _TOOLS: reg_list = self._pmgr.get_reg_tools() else: reg_list = [] self.build_plugin_tree(reg_list, categories) self.show()
def __init__(self, filename=None, dirname=None, toplevel=None): """ Class Constructor: Returns a new instance of the Glade class :type filename: string :param filename: The name of the glade file to be used. Defaults to None :type dirname: string :param dirname: The directory to search for the glade file. Defaults to None which will cause a search for the file in the default directory followed by the directory of the calling module. :type toplevel: toplevel :param toplevel: The toplevel object to search for in the glade file. Defaults to None, which will cause a search for a toplevel matching the file name. :rtype: object reference :returns: reference to the newly-created Glade instance """ GObject.GObject.__init__(self) self.set_translation_domain(glocale.get_localedomain()) filename_given = filename is not None dirname_given = dirname is not None # if filename not given, use module name to derive it if not filename_given: filename = sys._getframe(1).f_code.co_filename filename = os.path.basename(filename) filename = filename.rpartition('.')[0] + '.glade' filename = filename.lstrip('_').lower() # if dirname not given, use current directory if not dirname_given: dirname = sys._getframe(1).f_code.co_filename dirname = os.path.dirname(dirname) # try to find the glade file if filename_given and dirname_given: # both given -- use them path = os.path.join(dirname, filename) elif filename_given: # try default directory first path = os.path.join(GLADE_DIR, filename) if not os.path.exists(path): # then module directory path = os.path.join(dirname, filename) elif dirname_given: # dirname given -- use it path = os.path.join(dirname, filename) # neither filename nor dirname given. Try: # 1. derived filename in default directory # 2. derived filename in module directory else: path = os.path.join(GLADE_DIR, filename) if not os.path.exists(path): path = os.path.join(dirname, filename) # try to build Gtk objects from glade file. Let exceptions happen self.add_from_file(uni_to_gui(path)) self.__dirname, self.__filename = os.path.split(path) # try to find the toplevel widget if toplevel: # toplevel is given self.__toplevel = self.get_object(toplevel) else: # toplevel not given # first, use filename as possible toplevel widget name self.__toplevel = self.get_object(filename.rpartition('.')[0]) # next try lowercase filename as possible widget name if not self.__toplevel: self.__toplevel = self.get_object( filename.rpartition('.')[0].lower()) if not self.__toplevel: # if no match found, search for first toplevel widget for obj in self.get_objects(): if hasattr(obj, 'get_toplevel'): self.__toplevel = obj.get_toplevel() break else: self.__toplevel = None
def __init__(self, state, uistate, track, categories, msg, label=None, button_label=None, tool_tip=None, content=_REPORTS): """ Display the dialog box, and build up the list of available reports. This is used to build the selection tree on the left hand side of the dialog box. """ self.active = uistate.get_active('Person') self.imap = {} self.msg = msg self.content = content self._pmgr = GuiPluginManager.get_instance() ManagedWindow.__init__(self, uistate, track, self.__class__) self.state = state self.uistate = uistate self.dialog = Gtk.Builder() self.dialog.set_translation_domain(glocale.get_localedomain()) self.dialog.add_from_file(PLUGINS_GLADE) self.dialog.connect_signals({ "on_report_apply_clicked" : self.on_apply_clicked, "destroy_passed_object" : self.close, "on_delete_event": self.close, }) self.tree = self.dialog.get_object("tree") window = self.dialog.get_object("report") self.title = self.dialog.get_object("title") self.set_window(window, self.title, msg) self.store = Gtk.TreeStore(str) self.selection = self.tree.get_selection() self.selection.connect('changed', self.on_node_selected) col = Gtk.TreeViewColumn('', Gtk.CellRendererText(), text=0) self.tree.append_column(col) self.tree.set_model(self.store) self.description = self.dialog.get_object("description") if label: self.description.set_text(label) self.status = self.dialog.get_object("report_status") self.author_name = self.dialog.get_object("author_name") self.author_email = self.dialog.get_object("author_email") self.apply_button = self.dialog.get_object("apply") if button_label: self.apply_button.set_label(button_label) else: self.apply_button.set_label(_("_Apply")) self.apply_button.set_use_underline(True) if tool_tip: self.apply_button.set_tooltip_text(tool_tip) self.item = None if content == _REPORTS: reg_list = self._pmgr.get_reg_reports() elif content == _TOOLS: reg_list = self._pmgr.get_reg_tools() else: reg_list = [] self.build_plugin_tree(reg_list, categories) self.show()
def __init__(self, filename=None, dirname=None, toplevel=None, also_load=[]): """ Class Constructor: Returns a new instance of the Glade class :type filename: string or None :param filename: The name of the glade file to be used. Defaults to None :type dirname: string or None :param dirname: The directory to search for the glade file. Defaults to None which will cause a search for the file in the default directory followed by the directory of the calling module. :type toplevel: string or None :param toplevel: The toplevel object to search for in the glade file. Defaults to None, which will cause a search for a toplevel matching the supplied name. :type also_load: list of strings :param also_load: Additional toplevel objects to load from the glade file. These are typically liststore or other objects needed to operate the toplevel object. Defaults to [] (empty list), which will not load additional objects. :rtype: object reference :returns: reference to the newly-created Glade instance This operates in two modes; when no toplevel parameter is supplied, the entire Glade file is loaded. It is the responsibility of the user to make sure ALL toplevel objects are destroyed. When a toplevel parameter is supplied, only that object and any additional objects requested in the also_load parameter are loaded. The user only has to destroy the requested toplevel objects. """ Gtk.Builder.__init__(self) self.set_translation_domain(glocale.get_localedomain()) filename_given = filename is not None dirname_given = dirname is not None # if filename not given, use module name to derive it if not filename_given: filename = sys._getframe(1).f_code.co_filename filename = os.path.basename(filename) filename = filename.rpartition('.')[0] + '.glade' filename = filename.lstrip('_').lower() # if dirname not given, use current directory if not dirname_given: dirname = sys._getframe(1).f_code.co_filename dirname = os.path.dirname(dirname) # try to find the glade file if filename_given and dirname_given: # both given -- use them path = os.path.join(dirname, filename) elif filename_given: # try default directory first path = os.path.join(GLADE_DIR, filename) if not os.path.exists(path): # then module directory path = os.path.join(dirname, filename) elif dirname_given: # dirname given -- use it path = os.path.join(dirname, filename) # neither filename nor dirname given. Try: # 1. derived filename in default directory # 2. derived filename in module directory else: path = os.path.join(GLADE_DIR, filename) if not os.path.exists(path): path = os.path.join(dirname, filename) # try to build Gtk objects from glade file. Let exceptions happen self.__dirname, self.__filename = os.path.split(path) # try to find the toplevel widget # toplevel is given if toplevel: loadlist = [toplevel] + also_load with open(path, 'r', encoding='utf-8') as builder_file: data = builder_file.read().replace('\n', '') if is_quartz(): data = data.replace('GDK_CONTROL_MASK', 'GDK_META_MASK') self.add_objects_from_string(data, loadlist) self.__toplevel = self.get_object(toplevel) # toplevel not given else: with open(path, 'r', encoding='utf-8') as builder_file: data = builder_file.read().replace('\n', '') if is_quartz(): data = data.replace('GDK_CONTROL_MASK', 'GDK_META_MASK') self.add_from_string(data) # first, use filename as possible toplevel widget name self.__toplevel = self.get_object(filename.rpartition('.')[0]) # next try lowercase filename as possible widget name if not self.__toplevel: self.__toplevel = self.get_object( filename.rpartition('.')[0].lower()) if not self.__toplevel: # if no match found, search for first toplevel widget for obj in self.get_objects(): if hasattr(obj, 'get_toplevel'): self.__toplevel = obj.get_toplevel() break else: self.__toplevel = None
def __init__(self, filename=None, dirname=None, toplevel=None, also_load=[]): """ Class Constructor: Returns a new instance of the Glade class :type filename: string or None :param filename: The name of the glade file to be used. Defaults to None :type dirname: string or None :param dirname: The directory to search for the glade file. Defaults to None which will cause a search for the file in the default directory followed by the directory of the calling module. :type toplevel: string or None :param toplevel: The toplevel object to search for in the glade file. Defaults to None, which will cause a search for a toplevel matching the supplied name. :type also_load: list of strings :param also_load: Additional toplevel objects to load from the glade file. These are typically liststore or other objects needed to operate the toplevel object. Defaults to [] (empty list), which will not load additional objects. :rtype: object reference :returns: reference to the newly-created Glade instance This operates in two modes; when no toplevel parameter is supplied, the entire Glade file is loaded. It is the responsibility of the user to make sure ALL toplevel objects are destroyed. When a toplevel parameter is supplied, only that object and any additional objects requested in the also_load parameter are loaded. The user only has to destroy the requested toplevel objects. """ Gtk.Builder.__init__(self) self.set_translation_domain(glocale.get_localedomain()) filename_given = filename is not None dirname_given = dirname is not None # if filename not given, use module name to derive it if not filename_given: filename = sys._getframe(1).f_code.co_filename filename = os.path.basename(filename) filename = filename.rpartition('.')[0] + '.glade' filename = filename.lstrip('_').lower() # if dirname not given, use current directory if not dirname_given: dirname = sys._getframe(1).f_code.co_filename dirname = os.path.dirname(dirname) # try to find the glade file if filename_given and dirname_given: # both given -- use them path = os.path.join(dirname, filename) elif filename_given: # try default directory first path = os.path.join(GLADE_DIR, filename) if not os.path.exists(path): # then module directory path = os.path.join(dirname, filename) elif dirname_given: # dirname given -- use it path = os.path.join(dirname, filename) # neither filename nor dirname given. Try: # 1. derived filename in default directory # 2. derived filename in module directory else: path = os.path.join(GLADE_DIR, filename) if not os.path.exists(path): path = os.path.join(dirname, filename) # try to build Gtk objects from glade file. Let exceptions happen self.__dirname, self.__filename = os.path.split(path) # try to find the toplevel widget # toplevel is given if toplevel: loadlist = [toplevel] + also_load self.add_objects_from_file(path, loadlist) self.__toplevel = self.get_object(toplevel) # toplevel not given else: self.add_from_file(path) # first, use filename as possible toplevel widget name self.__toplevel = self.get_object(filename.rpartition('.')[0]) # next try lowercase filename as possible widget name if not self.__toplevel: self.__toplevel = self.get_object( filename.rpartition('.')[0].lower()) if not self.__toplevel: # if no match found, search for first toplevel widget for obj in self.get_objects(): if hasattr(obj, 'get_toplevel'): self.__toplevel = obj.get_toplevel() break else: self.__toplevel = None