diff --git a/README b/README index 3faf474bf..487f0cdee 100644 --- a/README +++ b/README @@ -5,8 +5,9 @@ If building from source, also read the INSTALL file (at least through the Requirements -------------------------------- The following packages *MUST* be installed in order for Gramps to work: - Python 2.6 or greater - PyGTK2 2.16 or greater + Python 2.7 or greater + GTK 3.0 or greater + pygobject 3.3.2 or greater librsvg2 (svg icon view) xdg-utils diff --git a/src/ImgManip.py b/src/ImgManip.py index 0852bc184..1867aeefa 100644 --- a/src/ImgManip.py +++ b/src/ImgManip.py @@ -67,9 +67,9 @@ def resize_to_jpeg(source, destination, width, height, crop=None): :param crop: cropping coordinates :type crop: array of integers ([start_x, start_y, end_x, end_y]) """ - import gtk + from gi.repository import GdkPixbuf - img = gtk.gdk.pixbuf_new_from_file(source) + img = GdkPixbuf.Pixbuf.new_from_file(source) if crop: # Gramps cropping coorinates are [0, 100], so we need to convert to pixels @@ -84,7 +84,7 @@ def resize_to_jpeg(source, destination, width, height, crop=None): # if the dimensions aren't close in size (width, height) = image_actual_size(width, height, img.get_width(), img.get_height()) - scaled = img.scale_simple(int(width), int(height), gtk.gdk.INTERP_BILINEAR) + scaled = img.scale_simple(int(width), int(height), GdkPixbuf.InterpType.BILINEAR) scaled.save(destination, 'jpeg') #------------------------------------------------------------------------- @@ -137,13 +137,13 @@ def image_size(source): :rtype: tuple(int, int) :returns: a tuple consisting of the width and height """ - import gtk - import gobject + from gi.repository import GdkPixbuf + from gi.repository import GObject try: - img = gtk.gdk.pixbuf_new_from_file(source) + img = GdkPixbuf.Pixbuf.new_from_file(source) width = img.get_width() height = img.get_height() - except gobject.GError: + except GObject.GError: width = 0 height = 0 return (width, height) @@ -199,8 +199,8 @@ def resize_to_buffer(source, size, crop=None): :rtype: buffer of data :returns: raw data """ - import gtk - img = gtk.gdk.pixbuf_new_from_file(source) + from gi.repository import GdkPixbuf + img = GdkPixbuf.Pixbuf.new_from_file(source) if crop: # Gramps cropping coorinates are [0, 100], so we need to convert to pixels @@ -215,7 +215,7 @@ def resize_to_buffer(source, size, crop=None): # if the dimensions aren't close in size (size[0], size[1]) = image_actual_size(size[0], size[1], img.get_width(), img.get_height()) - scaled = img.scale_simple(int(size[0]), int(size[1]), gtk.gdk.INTERP_BILINEAR) + scaled = img.scale_simple(int(size[0]), int(size[1]), GdkPixbuf.InterpType.BILINEAR) return scaled @@ -238,9 +238,9 @@ def resize_to_jpeg_buffer(source, size, crop=None): :rtype: buffer of data :returns: jpeg image as raw data """ - import gtk + from gi.repository import GdkPixbuf filed, dest = tempfile.mkstemp() - img = gtk.gdk.pixbuf_new_from_file(source) + img = GdkPixbuf.Pixbuf.new_from_file(source) if crop: # Gramps cropping coorinates are [0, 100], so we need to convert to pixels @@ -255,7 +255,7 @@ def resize_to_jpeg_buffer(source, size, crop=None): # if the dimensions aren't close in size (size[0], size[1]) = image_actual_size(size[0], size[1], img.get_width(), img.get_height()) - scaled = img.scale_simple(int(size[0]), int(size[1]), gtk.gdk.INTERP_BILINEAR) + scaled = img.scale_simple(int(size[0]), int(size[1]), GdkPixbuf.InterpType.BILINEAR) os.close(filed) dest = Utils.get_unicode_path_from_env_var(dest) scaled.save(dest, 'jpeg') diff --git a/src/TransUtils.py b/src/TransUtils.py index 3c9455c49..b9e9c598d 100644 --- a/src/TransUtils.py +++ b/src/TransUtils.py @@ -100,7 +100,7 @@ def setup_gettext(): try: locale.bindtextdomain(LOCALEDOMAIN, LOCALEDIR) except ValueError: - print 'Failed to bind text domain, gtk.Builder() has no translation' + print 'Failed to bind text domain, Gtk.Builder() has no translation' #following installs _ as a python function, we avoid this as TransUtils is #used sometimes: @@ -143,7 +143,7 @@ def init_windows_gettext(intl_path): def setup_windows_gettext(): """ Windows specific function for migrating from LibGlade to GtkBuilder - Glade had a gtk.glade.bindtextdomain() function to define the directory + Glade had a Gtk.glade.bindtextdomain() function to define the directory where to look for translations (.mo-files). It is now replaced with call to locale.bindtextdomain() which exposes the C librarys gettext interface on systems that provide this interface. diff --git a/src/gen/constfunc.py b/src/gen/constfunc.py index 80232e063..f0a278c83 100644 --- a/src/gen/constfunc.py +++ b/src/gen/constfunc.py @@ -24,7 +24,7 @@ """ Some independent constants/functions that can be safely imported without any translation happening yet. Do _not_ add imports that will -perform a translation on import, eg gtk. +perform a translation on import, eg Gtk. """ #------------------------------------------------------------------------ @@ -90,27 +90,31 @@ def is_quartz(): """ if mac(): try: - import gtk + from gi.repository import Gtk + from gi.repository import Gdk except: return False - return gtk.gdk.WINDOWING == "quartz" + return Gdk.WINDOWING == "quartz" return False def has_display(): """ Tests to see if Python is currently running with gtk """ - # FIXME: currently, gtk.init_check() requires all strings + # FIXME: currently, Gtk.init_check() requires all strings # in argv, and we might have unicode. temp, sys.argv = sys.argv, sys.argv[:1] try: - import gtk + from gi.repository import Gtk except: return False try: - gtk.init_check() + test = Gtk.init_check(temp) sys.argv = temp - return True + if test: + return True + else: + return False except: sys.argv = temp return False diff --git a/src/gen/db/write.py b/src/gen/db/write.py index b40fcc34c..64561a0f7 100644 --- a/src/gen/db/write.py +++ b/src/gen/db/write.py @@ -1841,7 +1841,7 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback): if not transaction.batch: # It can occur that the listview is already updated because of # the "model-treeview automatic update" combined with a - # "while gtk.events_pending(): gtk.main_iteration() loop" + # "while Gtk.events_pending(): Gtk.main_iteration() loop" # (typically used in a progress bar), so emit rebuild signals # to correct that. object_types = set([x[0] for x in transaction.keys()]) diff --git a/src/gen/mime/_gnomemime.py b/src/gen/mime/_gnomemime.py index 346504440..23b07eead 100644 --- a/src/gen/mime/_gnomemime.py +++ b/src/gen/mime/_gnomemime.py @@ -20,7 +20,7 @@ # $Id$ -import gtk +from gi.repository import Gtk try: from gnomevfs import mime_get_short_list_applications, \ diff --git a/src/gen/plug/_gramplet.py b/src/gen/plug/_gramplet.py index 95d4fe577..edadeb670 100644 --- a/src/gen/plug/_gramplet.py +++ b/src/gen/plug/_gramplet.py @@ -230,16 +230,16 @@ class Gramplet(object): Set the textview to wrap or not. """ textview = self.gui.textview - import gtk - # gtk.WRAP_NONE, gtk.WRAP_CHAR, gtk.WRAP_WORD or gtk.WRAP_WORD_CHAR. + from gi.repository import Gtk + # Gtk.WrapMode.NONE, Gtk.WrapMode.CHAR, Gtk.WrapMode.WORD or Gtk.WrapMode.WORD_CHAR. if value in [True, 1]: - textview.set_wrap_mode(gtk.WRAP_WORD) + textview.set_wrap_mode(Gtk.WrapMode.WORD) elif value in [False, 0, None]: - textview.set_wrap_mode(gtk.WRAP_NONE) + textview.set_wrap_mode(Gtk.WrapMode.NONE) elif value in ["char"]: - textview.set_wrap_mode(gtk.WRAP_CHAR) + textview.set_wrap_mode(Gtk.WrapMode.CHAR) elif value in ["word char"]: - textview.set_wrap_mode(gtk.WRAP_WORD_CHAR) + textview.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) else: raise ValueError( "Unknown wrap mode: '%s': use 0,1,'char' or 'word char')" @@ -275,7 +275,7 @@ class Gramplet(object): """ The main interface for running the main method. """ - import gobject + from gi.repository import GObject if ((not self.active or self.gui.gstate in ["closed", "minimized"] or not self.dbstate.open) and @@ -294,8 +294,8 @@ class Gramplet(object): self.interrupt() self._generator = self.main() self._pause = False - self._idle_id = gobject.idle_add(self._updater, - priority=gobject.PRIORITY_LOW - 10) + self._idle_id = GObject.idle_add(self._updater, + priority=GObject.PRIORITY_LOW - 10) def _updater(self): """ @@ -345,10 +345,10 @@ class Gramplet(object): """ Resume the main method that has previously paused. """ - import gobject + from gi.repository import GObject self._pause = False - self._idle_id = gobject.idle_add(self._updater, - priority=gobject.PRIORITY_LOW - 10) + self._idle_id = GObject.idle_add(self._updater, + priority=GObject.PRIORITY_LOW - 10) def update_all(self, *args): """ @@ -363,10 +363,10 @@ class Gramplet(object): """ Force the generator to stop running. """ - import gobject + from gi.repository import GObject self._pause = True if self._idle_id == 0: - gobject.source_remove(self._idle_id) + GObject.source_remove(self._idle_id) self._idle_id = 0 def _db_changed(self, db): diff --git a/src/gen/plug/_manager.py b/src/gen/plug/_manager.py index 5138ae4c3..824e234b7 100644 --- a/src/gen/plug/_manager.py +++ b/src/gen/plug/_manager.py @@ -549,7 +549,7 @@ class BasePluginManager(object): @param option: the option class @type option: class that inherits from gen.plug.menu.Option @param guioption: the gui-option class - @type guioption: class that inherits from gtk.Widget. + @type guioption: class that inherits from Gtk.Widget. """ self.__external_opt_dict[option] = guioption; diff --git a/src/gramps.py b/src/gramps.py index 42c68992e..071880d67 100644 --- a/src/gramps.py +++ b/src/gramps.py @@ -94,7 +94,7 @@ elif operating_system == 'FreeBSD': try: gettext.bindtextdomain(TransUtils.LOCALEDOMAIN, TransUtils.LOCALEDIR) except locale.Error: - print 'No translation in some gtk.Builder strings, ' + print 'No translation in some Gtk.Builder strings, ' elif operating_system == 'OpenBSD': pass else: # normal case @@ -102,7 +102,7 @@ else: # normal case locale.bindtextdomain(TransUtils.LOCALEDOMAIN, TransUtils.LOCALEDIR) #locale.textdomain(TransUtils.LOCALEDOMAIN) except locale.Error: - print 'No translation in some gtk.Builder strings, ' + print 'No translation in some Gtk.Builder strings, ' #------------------------------------------------------------------------- # @@ -110,7 +110,7 @@ else: # normal case # #------------------------------------------------------------------------- -MIN_PYTHON_VERSION = (2, 6, 0, '', 0) +MIN_PYTHON_VERSION = (2, 7, 0, '', 0) if not sys.version_info >= MIN_PYTHON_VERSION : print (_("Your Python version does not meet the " "requirements. At least python %(v1)d.%(v2)d.%(v3)d is needed to" @@ -193,28 +193,23 @@ def show_settings(): """ py_str = '%d.%d.%d' % sys.version_info[:3] try: - import gtk + from gi.repository import Gtk try: - gtkver_str = '%d.%d.%d' % gtk.gtk_version + gtkver_str = '%d.%d.%d' % (Gtk.get_major_version(), + Gtk.get_minor_version(), Gtk.get_micro_version()) except : # any failure to 'get' the version gtkver_str = 'unknown version' - try: - pygtkver_str = '%d.%d.%d' % gtk.pygtk_version - except :# any failure to 'get' the version - pygtkver_str = 'unknown version' except ImportError: gtkver_str = 'not found' - pygtkver_str = 'not found' # no DISPLAY is a RuntimeError in an older pygtk (e.g. 2.17 in Fedora 14) except RuntimeError: gtkver_str = 'DISPLAY not set' - pygtkver_str = 'DISPLAY not set' #exept TypeError: To handle back formatting on version split try: - import gobject + from gi.repository import GObject try: - gobjectver_str = '%d.%d.%d' % gobject.pygobject_version + gobjectver_str = '%d.%d.%d' % GObject.pygobject_version except :# any failure to 'get' the version gobjectver_str = 'unknown version' @@ -306,7 +301,6 @@ def show_settings(): print ' python : %s' % py_str print ' gramps : %s' % gramps_str print ' gtk++ : %s' % gtkver_str - print ' pygtk : %s' % pygtkver_str print ' gobject : %s' % gobjectver_str if usebsddb3: print ' Using bsddb3' diff --git a/src/gui/aboutdialog.py b/src/gui/aboutdialog.py index 0cdc0caff..c88a7ab72 100644 --- a/src/gui/aboutdialog.py +++ b/src/gui/aboutdialog.py @@ -44,7 +44,8 @@ except ImportError: # Gtk modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk +from gi.repository import GdkPixbuf #------------------------------------------------------------------------- # @@ -73,11 +74,11 @@ CONTRIB_HEADER = _('\n==== Contributors ====\n') # GrampsAboutDialog # #------------------------------------------------------------------------- -class GrampsAboutDialog(gtk.AboutDialog): +class GrampsAboutDialog(Gtk.AboutDialog): """Create an About dialog with all fields set.""" def __init__(self, parent): """Setup all the fields shown in the About dialog.""" - gtk.AboutDialog.__init__(self) + GObject.GObject.__init__(self) self.set_transient_for(parent) self.set_modal(True) @@ -111,7 +112,7 @@ class GrampsAboutDialog(gtk.AboutDialog): self.set_translator_credits(trans_credits) self.set_documenters(const.DOCUMENTERS) - self.set_logo(gtk.gdk.pixbuf_new_from_file(const.SPLASH)) + self.set_logo(GdkPixbuf.Pixbuf.new_from_file(const.SPLASH)) def get_versions(self): """ @@ -243,5 +244,6 @@ def _show_url(dialog, link, prefix): link = prefix + link display_url(link) -gtk.about_dialog_set_url_hook(_show_url, None) -gtk.about_dialog_set_email_hook(_show_url, 'mailto:') +#TODO GTK3: is there an alternative for these: +#Gtk.about_dialog_set_url_hook(_show_url, None) +#Gtk.about_dialog_set_email_hook(_show_url, 'mailto:') diff --git a/src/gui/autocomp.py b/src/gui/autocomp.py index c7fbabd6b..cfc47fc0c 100644 --- a/src/gui/autocomp.py +++ b/src/gui/autocomp.py @@ -36,14 +36,14 @@ import locale # GNOME modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject def fill_combo(combo, data_list): """ Fill a combo box with completion data """ - store = gtk.ListStore(gobject.TYPE_STRING) + store = Gtk.ListStore(GObject.TYPE_STRING) for data in data_list: if data: @@ -51,24 +51,24 @@ def fill_combo(combo, data_list): combo.set_model(store) combo.set_text_column(0) - completion = gtk.EntryCompletion() + completion = Gtk.EntryCompletion() completion.set_model(store) completion.set_minimum_key_length(1) completion.set_text_column(0) - combo.child.set_completion(completion) + combo.get_child().set_completion(completion) def fill_entry(entry, data_list): """ Fill a entry with completion data """ - store = gtk.ListStore(gobject.TYPE_STRING) + store = Gtk.ListStore(GObject.TYPE_STRING) for data in data_list: if data: store.append(row=[data]) - completion = gtk.EntryCompletion() + completion = Gtk.EntryCompletion() completion.set_model(store) completion.set_minimum_key_length(1) completion.set_text_column(0) @@ -115,7 +115,7 @@ class StandardCustomSelector(object): Constructor for the StandardCustomSelector class. :param cbe: Existing ComboBoxEntry widget to use. - :type cbe: gtk.ComboBoxEntry + :type cbe: Gtk.ComboBoxEntry :param mapping: The mapping between integer and string constants. :type mapping: dict :param custom_key: The key corresponding to the custom string entry @@ -132,7 +132,7 @@ class StandardCustomSelector(object): self.additional = additional # make model - self.store = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_INT, GObject.TYPE_STRING) # fill it up using mapping self.fill() @@ -141,18 +141,24 @@ class StandardCustomSelector(object): if cbe: self.selector = cbe self.selector.set_model(self.store) - self.selector.set_text_column(1) + renderer = Gtk.CellRendererText() + self.selector.pack_start(renderer, True) + self.selector.add_attribute(renderer, 'text', 1) else: - self.selector = gtk.ComboBoxEntry(self.store, 1) + self.selector = Gtk.ComboBox(has_entry=True) + self.selector.set_model(self.store) + renderer = Gtk.CellRendererText() + self.selector.pack_start(renderer, True) + self.selector.add_attribute(renderer, 'text', 1) if self.active_key is not None: self.selector.set_active(self.active_index) # make autocompletion work - completion = gtk.EntryCompletion() + completion = Gtk.EntryCompletion() completion.set_model(self.store) completion.set_minimum_key_length(1) completion.set_text_column(1) - self.selector.child.set_completion(completion) + self.selector.get_child().set_completion(completion) def fill(self): """ @@ -201,10 +207,10 @@ class StandardCustomSelector(object): int_val = self.store.get_value(active_iter, 0) str_val = self.store.get_value(active_iter, 1) if str_val != self.mapping[int_val]: - str_val = self.selector.child.get_text().strip() + str_val = self.selector.get_child().get_text().strip() else: int_val = self.custom_key - str_val = self.selector.child.get_text().strip() + str_val = self.selector.get_child().get_text().strip() if str_val in self.mapping.itervalues(): for key in self.mapping: if str_val == self.mapping[key]: @@ -225,7 +231,7 @@ class StandardCustomSelector(object): if key in self.mapping and key != self.custom_key: self.store.foreach(self.set_int_value, key) elif self.custom_key is not None: - self.selector.child.set_text(text) + self.selector.get_child().set_text(text) else: print "StandardCustomSelector.set(): Option not available:", val diff --git a/src/gui/clipboard.py b/src/gui/clipboard.py index 6e3683584..fd4fa0325 100644 --- a/src/gui/clipboard.py +++ b/src/gui/clipboard.py @@ -36,8 +36,9 @@ from time import strftime as strftime # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -from gtk.gdk import ACTION_COPY, BUTTON1_MASK, ACTION_MOVE +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GdkPixbuf #------------------------------------------------------------------------- # @@ -73,7 +74,7 @@ WIKI_HELP_SEC = _('manual|Using_the_Clipboard') #------------------------------------------------------------------------- _stock_image = os.path.join(const.IMAGE_DIR,'stock_link.png') -LINK_PIC = gtk.gdk.pixbuf_new_from_file(_stock_image) +LINK_PIC = GdkPixbuf.Pixbuf.new_from_file(_stock_image) ICONS = {} for (name, file) in ( ("media", "gramps-media.png"), @@ -94,7 +95,7 @@ for (name, file) in ( ('url', 'gramps-geo.png'), ): _image = os.path.join(const.IMAGE_DIR, '16x16', file) - ICONS[name] = gtk.gdk.pixbuf_new_from_file(_image) + ICONS[name] = GdkPixbuf.Pixbuf.new_from_file(_image) #------------------------------------------------------------------------- # @@ -171,7 +172,7 @@ def model_contains(model, data): # #------------------------------------------------------------------------- class ClipWrapper(object): - UNAVAILABLE_ICON = gtk.STOCK_DIALOG_ERROR + UNAVAILABLE_ICON = Gtk.STOCK_DIALOG_ERROR def __init__(self, dbstate, obj): dbstate.connect('database-changed', self.database_changed) @@ -870,10 +871,10 @@ class ClipDropHandleList(ClipDropList): # ClipboardListModel class # #------------------------------------------------------------------------- -class ClipboardListModel(gtk.ListStore): +class ClipboardListModel(Gtk.ListStore): def __init__(self): - gtk.ListStore.__init__(self, + GObject.GObject.__init__(self, str, # 0: object type object, # 1: object object, # 2: tooltip callback @@ -891,7 +892,7 @@ class ClipboardListModel(gtk.ListStore): #------------------------------------------------------------------------- class ClipboardListView(object): - LOCAL_DRAG_TARGET = ('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_WIDGET, 0) + LOCAL_DRAG_TARGET = ('MY_TREE_MODEL_ROW', Gtk.TargetFlags.SAME_WIDGET, 0) LOCAL_DRAG_TYPE = 'MY_TREE_MODEL_ROW' def __init__(self, dbstate, widget): @@ -905,16 +906,16 @@ class ClipboardListView(object): self._previous_drop_time = 0 # Create the tree columns - self._col1 = gtk.TreeViewColumn(_("Type")) + self._col1 = Gtk.TreeViewColumn(_("Type")) self._col1.set_property("resizable", True) self._col1.set_sort_column_id(0) - self._col2 = gtk.TreeViewColumn(_("Title")) + self._col2 = Gtk.TreeViewColumn(_("Title")) self._col2.set_property("resizable", True) self._col2.set_sort_column_id(3) - self._col3 = gtk.TreeViewColumn(_("Value")) + self._col3 = Gtk.TreeViewColumn(_("Value")) self._col3.set_property("resizable", True) self._col3.set_sort_column_id(4) - self._col4 = gtk.TreeViewColumn(_("Family Tree")) + self._col4 = Gtk.TreeViewColumn(_("Family Tree")) self._col4.set_property("resizable", True) self._col4.set_sort_column_id(6) @@ -925,14 +926,14 @@ class ClipboardListView(object): self._widget.append_column(self._col4) # Create cell renders - self._col1_cellpb = gtk.CellRendererPixbuf() - self._col1_cell = gtk.CellRendererText() - self._col2_cell = gtk.CellRendererText() - self._col3_cell = gtk.CellRendererText() - self._col4_cell = gtk.CellRendererText() + self._col1_cellpb = Gtk.CellRendererPixbuf() + self._col1_cell = Gtk.CellRendererText() + self._col2_cell = Gtk.CellRendererText() + self._col3_cell = Gtk.CellRendererText() + self._col4_cell = Gtk.CellRendererText() # Add cells to view - self._col1.pack_start(self._col1_cellpb, False) + self._col1.pack_start(self._col1_cellpb, False, True, 0) self._col1.pack_start(self._col1_cell, True) self._col2.pack_start(self._col2_cell, True) self._col3.pack_start(self._col3_cell, True) @@ -949,10 +950,10 @@ class ClipboardListView(object): self._widget.set_enable_search(True) #self._widget.set_search_column(3) - self._widget.drag_dest_set(gtk.DEST_DEFAULT_ALL, + self._widget.drag_dest_set(Gtk.DestDefaults.ALL, (ClipboardListView.LOCAL_DRAG_TARGET,) + \ DdTargets.all_targets(), - ACTION_COPY) + Gdk.DragAction.COPY) self._widget.connect('drag_data_get', self.object_drag_data_get) self._widget.connect('drag_begin', self.object_drag_begin) @@ -1116,7 +1117,7 @@ class ClipboardListView(object): tree_selection = self._widget.get_selection() model, paths = tree_selection.get_selected_rows() if len(paths) > 1: - targets = [(DdTargets.RAW_LIST.drag_type, gtk.TARGET_SAME_WIDGET, 0), + targets = [(DdTargets.RAW_LIST.drag_type, Gtk.TargetFlags.SAME_WIDGET, 0), ClipboardListView.LOCAL_DRAG_TARGET] else: targets = [ClipboardListView.LOCAL_DRAG_TARGET] @@ -1126,8 +1127,8 @@ class ClipboardListView(object): o = model.get_value(node,1) targets += [target.target() for target in o.__class__.DROP_TARGETS] - self._widget.enable_model_drag_source(BUTTON1_MASK, targets, - ACTION_COPY | ACTION_MOVE) + self._widget.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, targets, + Gdk.DragAction.COPY | Gdk.DragAction.MOVE) def object_drag_begin(self, context, a): """ Handle the beginning of a drag operation. """ @@ -1222,14 +1223,14 @@ class ClipboardListView(object): data = [o.__class__.DRAG_TARGET.drag_type, o, None, o._type, o._value, o._dbid, o._dbname] contains = model_contains(model, data) - if context.action != ACTION_MOVE and contains: + if context.action != Gdk.DragAction.MOVE and contains: continue drop_info = widget.get_dest_row_at_pos(x, y) if drop_info: path, position = drop_info node = model.get_iter(path) - if (position == gtk.TREE_VIEW_DROP_BEFORE - or position == gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): + if (position == Gtk.TreeViewDropPosition.BEFORE + or position == Gtk.TreeViewDropPosition.INTO_OR_BEFORE): model.insert_before(node, data) else: model.insert_after(node, data) @@ -1239,7 +1240,7 @@ class ClipboardListView(object): # FIXME: there is one bug here: if you multi-select and drop # on self, then it moves the first, and copies the rest. - if context.action == ACTION_MOVE: + if context.action == Gdk.DragAction.MOVE: context.finish(True, True, time) # remember time for double drop workaround. @@ -1251,7 +1252,7 @@ class ClipboardListView(object): def set_model(self,model=None): self._widget.set_model(model) self._widget.get_selection().connect('changed',self.on_object_select_row) - self._widget.get_selection().set_mode(gtk.SELECTION_MULTIPLE) + self._widget.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) def get_model(self): return self._widget.get_model() @@ -1318,7 +1319,7 @@ class ClipboardWindow(ManagedWindow): self.object_list = ClipboardListView(self.dbstate, mtv) self.object_list.get_selection().connect('changed', self.set_clear_btn_sensitivity) - self.object_list.get_selection().set_mode(gtk.SELECTION_MULTIPLE) + self.object_list.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) self.set_clear_btn_sensitivity(sel=self.object_list.get_selection()) if not ClipboardWindow.otree: @@ -1343,7 +1344,7 @@ class ClipboardWindow(ManagedWindow): "on_help_clicked": self.on_help_clicked, }) - self.clear_all_btn.connect_object('clicked', gtk.ListStore.clear, + self.clear_all_btn.connect_object('clicked', Gtk.ListStore.clear, ClipboardWindow.otree) self.db.connect('database-changed', lambda x: ClipboardWindow.otree.clear()) @@ -1387,7 +1388,7 @@ class ClipboardWindow(ManagedWindow): # MultiTreeView class # #------------------------------------------------------------------------- -class MultiTreeView(gtk.TreeView): +class MultiTreeView(Gtk.TreeView): ''' TreeView that captures mouse events to make drag and drop work properly ''' @@ -1402,8 +1403,8 @@ class MultiTreeView(gtk.TreeView): self.defer_select = False def key_press_event(self, widget, event): - if event.type == gtk.gdk.KEY_PRESS: - if event.keyval == gtk.keysyms.Delete: + if event.type == Gdk.KEY_PRESS: + if event.keyval == Gdk.KEY_Delete: model, paths = self.get_selection().get_selected_rows() # reverse, to delete from the end paths.sort(key=lambda x:-x[0]) @@ -1428,7 +1429,7 @@ class MultiTreeView(gtk.TreeView): o = None if node: o = store.get_value(node, 1) - popup = gtk.Menu() + popup = Gtk.Menu() # --------------------------- if o: objclass, handle = o._objclass, o._handle @@ -1436,13 +1437,13 @@ class MultiTreeView(gtk.TreeView): objclass, handle = None, None if objclass in ['Person', 'Event', 'Media', 'Source', 'Repository', 'Family', 'Note', 'Place']: - menu_item = gtk.MenuItem(_("the object|See %s details") % trans_objclass(objclass)) + menu_item = Gtk.MenuItem(_("the object|See %s details") % trans_objclass(objclass)) menu_item.connect("activate", lambda widget: self.edit_obj(objclass, handle)) popup.append(menu_item) menu_item.show() # --------------------------- - menu_item = gtk.MenuItem(_("the object|Make %s active") % trans_objclass(objclass)) + menu_item = Gtk.MenuItem(_("the object|Make %s active") % trans_objclass(objclass)) menu_item.connect("activate", lambda widget: self.uistate.set_active(handle, objclass)) popup.append(menu_item) @@ -1458,7 +1459,7 @@ class MultiTreeView(gtk.TreeView): obj = self.dbstate.db.get_table_metadata(objclass)["handle_func"](my_handle) if obj: gids.add(obj.gramps_id) - menu_item = gtk.MenuItem(_("the object|Create Filter from %s selected...") % trans_objclass(objclass)) + menu_item = Gtk.MenuItem(_("the object|Create Filter from %s selected...") % trans_objclass(objclass)) menu_item.connect("activate", lambda widget: make_filter(self.dbstate, self.uistate, objclass, gids, title=self.title)) @@ -1467,7 +1468,7 @@ class MultiTreeView(gtk.TreeView): # Show the popup menu: popup.popup(None, None, None, 3, event.time) return True - elif event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + elif event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: model, paths = self.get_selection().get_selected_rows() for path in paths: node = model.get_iter(path) @@ -1479,8 +1480,8 @@ class MultiTreeView(gtk.TreeView): return True # otherwise: if (target - and event.type == gtk.gdk.BUTTON_PRESS - and not (event.state & (gtk.gdk.CONTROL_MASK|gtk.gdk.SHIFT_MASK)) + and event.type == Gdk.EventType.BUTTON_PRESS + and not (event.get_state() & (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK)) and self.get_selection().path_is_selected(target[0])): # disable selection self.get_selection().set_select_function(lambda *ignore: False) diff --git a/src/gui/columnorder.py b/src/gui/columnorder.py index 93cb513a0..4e0791289 100644 --- a/src/gui/columnorder.py +++ b/src/gui/columnorder.py @@ -40,8 +40,8 @@ import logging # GTK modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -60,7 +60,7 @@ from gui.glade import Glade #------------------------------------------------------------------------- __LOG = logging.getLogger(".ColumnOrder") -class ColumnOrder(gtk.VBox): +class ColumnOrder(Gtk.VBox): """ Column ordering selection widget """ @@ -76,62 +76,62 @@ class ColumnOrder(gtk.VBox): tree: are the columns for a treeview, if so, the first columns is not changable """ - gtk.VBox.__init__(self) + GObject.GObject.__init__(self) self.treeview = tree self.colnames = column_names self.config = config self.on_apply = on_apply - self.pack_start(gtk.Label(' '), expand=False, fill=False) + self.pack_start(Gtk.Label(' ', True, True, 0), expand=False, fill=False) self.startrow = 0 if self.treeview: - label = gtk.Label( + label = Gtk.Label(label= _('Tree View: first column "%s" cannot be changed') % column_names[0]) self.startrow = 1 self.pack_start(label, expand=False, fill=False) - self.pack_start(gtk.Label(' '), expand=False, fill=False) + self.pack_start(Gtk.Label(' ', True, True, 0), expand=False, fill=False) - self.pack_start(gtk.Label(_('Drag and drop the columns to change' - ' the order')), expand=False, fill=False) - self.pack_start(gtk.Label(' '), expand=False, fill=False) - hbox = gtk.HBox() + self.pack_start(Gtk.Label(_('Drag and drop the columns to change' + ' the order', True, True, 0)), expand=False, fill=False) + self.pack_start(Gtk.Label(' ', True, True, 0), expand=False, fill=False) + hbox = Gtk.HBox() hbox.set_spacing(10) - hbox.pack_start(gtk.Label(' ')) - scroll = gtk.ScrolledWindow() + hbox.pack_start(Gtk.Label(' ', True, True, 0)) + scroll = Gtk.ScrolledWindow() scroll.set_size_request(300,300) - hbox.pack_start(scroll) - self.tree = gtk.TreeView() + hbox.pack_start(scroll, True, True, 0) + self.tree = Gtk.TreeView() self.tree.set_reorderable(True) scroll.add(self.tree) - self.apply_button = gtk.Button(stock='gtk-apply') - btns = gtk.HButtonBox() - btns.set_layout(gtk.BUTTONBOX_END) - btns.pack_start(self.apply_button) - hbox.pack_start(btns, expand=False) - self.pack_start(hbox) + self.apply_button = Gtk.Button(stock='gtk-apply') + btns = Gtk.HButtonBox() + btns.set_layout(Gtk.ButtonBoxStyle.END) + btns.pack_start(self.apply_button, True, True, 0) + hbox.pack_start(btns, False, True, 0) + self.pack_start(hbox, True, True, 0) #Model holds: # bool: column visible or not # str : name of the column # int : order of the column # int : size (width) of the column - self.model = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, - gobject.TYPE_INT, gobject.TYPE_INT) + self.model = Gtk.ListStore(GObject.TYPE_BOOLEAN, GObject.TYPE_STRING, + GObject.TYPE_INT, GObject.TYPE_INT) self.tree.set_model(self.model) - checkbox = gtk.CellRendererToggle() + checkbox = Gtk.CellRendererToggle() checkbox.connect('toggled', toggled, self.model) - renderer = gtk.CellRendererText() + renderer = Gtk.CellRendererText() - column_n = gtk.TreeViewColumn(_('Display'), checkbox, active=0) + column_n = Gtk.TreeViewColumn(_('Display'), checkbox, active=0) column_n.set_min_width(50) self.tree.append_column(column_n) - column_n = gtk.TreeViewColumn(_('Column Name'), renderer, text=1) + column_n = Gtk.TreeViewColumn(_('Column Name'), renderer, text=1) column_n.set_min_width(225) self.tree.append_column(column_n) diff --git a/src/gui/configure.py b/src/gui/configure.py index ac37fc4ab..ed1e283a3 100644 --- a/src/gui/configure.py +++ b/src/gui/configure.py @@ -38,8 +38,8 @@ from xml.sax.saxutils import escape # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -92,12 +92,11 @@ class DisplayNameEditor(ManagedWindow): self.dialog = dialog self.dbstate = dbstate self.set_window( - gtk.Dialog(_('Display Name Editor'), - flags=gtk.DIALOG_NO_SEPARATOR, - buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)), + Gtk.Dialog(_('Display Name Editor'), + buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)), None, _('Display Name Editor'), None) table = self.dialog._build_custom_name_ui() - label = gtk.Label(_("""The following keywords are replaced with the appropriate name parts: + label = Gtk.Label(label=_("""The following keywords are replaced with the appropriate name parts: Given - given name (first name) Surname - surnames (with prefix and connectors) Title - title (Dr., Mrs.) Suffix - suffix (Jr., Sr.) @@ -118,8 +117,8 @@ UPPERCASE keyword forces uppercase. Extra parentheses, commas are removed. Other Underhills family nick name, Jose callname. """)) label.set_use_markup(True) - self.window.vbox.pack_start(label, expand=False) - self.window.vbox.pack_start(table) + self.window.vbox.pack_start(label, False, True, 0) + self.window.vbox.pack_start(table, True, True, 0) self.window.set_default_size(600, 550) self.window.connect('response', self.close) self.show() @@ -152,7 +151,7 @@ class ConfigureDialog(ManagedWindow): :param uistate: a DisplayState instance :param dbstate: a DbState instance :param configure_page_funcs: a list of function that return a tuple - (str, gtk.Widget). The string is used as label for the + (str, Gtk.Widget). The string is used as label for the configuration page, and the widget as the content of the configuration page :param configobj: the unique object that is configured, it must be @@ -169,10 +168,10 @@ class ConfigureDialog(ManagedWindow): self.__config = configmanager ManagedWindow.__init__(self, uistate, [], configobj) self.set_window( - gtk.Dialog(dialogtitle, flags=gtk.DIALOG_NO_SEPARATOR, - buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)), + Gtk.Dialog(dialogtitle, flags=Gtk.DialogFlags.NO_SEPARATOR, + buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)), None, dialogtitle, None) - self.panel = gtk.Notebook() + self.panel = Gtk.Notebook() self.panel.set_scrollable(True) self.window.vbox.add(self.panel) self.__on_close = on_close @@ -261,7 +260,7 @@ class ConfigureDialog(ManagedWindow): config=None, extra_callback=None): if not config: config = self.__config - checkbox = gtk.CheckButton(label) + checkbox = Gtk.CheckButton(label) checkbox.set_active(config.get(constant)) checkbox.connect('toggled', self.update_checkbox, constant, config) if extra_callback: @@ -272,7 +271,7 @@ class ConfigureDialog(ManagedWindow): config=None): if not config: config = self.__config - radiobox = gtk.RadioButton(group,label) + radiobox = Gtk.RadioButton(group,label) if config.get(constant) == True: radiobox.set_active(True) radiobox.connect('toggled', self.update_radiobox, constant) @@ -282,7 +281,7 @@ class ConfigureDialog(ManagedWindow): def add_text(self, table, label, index, config=None): if not config: config = self.__config - text = gtk.Label() + text = Gtk.Label() text.set_line_wrap(True) text.set_alignment(0.,0.) text.set_text(label) @@ -298,20 +297,20 @@ class ConfigureDialog(ManagedWindow): if not config: config = self.__config lwidget = BasicLabel("%s: " %label) - hbox = gtk.HBox() + hbox = Gtk.HBox() if path: entry.set_text(path) entry.connect('changed', callback_label) - btn = gtk.Button() + btn = Gtk.Button() btn.connect('clicked', callback_sel) - image = gtk.Image() - image.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON) image.show() btn.add(image) hbox.pack_start(entry, expand=True, fill=True) hbox.pack_start(btn, expand=False, fill=False) table.attach(lwidget, 1, 2, index, index+1, yoptions=0, - xoptions=gtk.FILL) + xoptions=Gtk.AttachOptions.FILL) table.attach(hbox, 2, 3, index, index+1, yoptions=0) def add_entry(self, table, label, index, constant, callback=None, @@ -321,11 +320,11 @@ class ConfigureDialog(ManagedWindow): if not callback: callback = self.update_entry lwidget = BasicLabel("%s: " % label) - entry = gtk.Entry() + entry = Gtk.Entry() entry.set_text(config.get(constant)) entry.connect('changed', callback, constant) table.attach(lwidget, 0, 1, index, index+1, yoptions=0, - xoptions=gtk.FILL) + xoptions=Gtk.AttachOptions.FILL) table.attach(entry, 1, 2, index, index+1, yoptions=0) def add_pos_int_entry(self, table, label, index, constant, callback=None, @@ -335,12 +334,12 @@ class ConfigureDialog(ManagedWindow): if not config: config = self.__config lwidget = BasicLabel("%s: " % label) - entry = gtk.Entry() + entry = Gtk.Entry() entry.set_text(str(config.get(constant))) if callback: entry.connect('changed', callback, constant) table.attach(lwidget, col_attach, col_attach+1, index, index+1, - yoptions=0, xoptions=gtk.FILL) + yoptions=0, xoptions=Gtk.AttachOptions.FILL) table.attach(entry, col_attach+1, col_attach+2, index, index+1, yoptions=0) @@ -349,12 +348,12 @@ class ConfigureDialog(ManagedWindow): config = self.__config lwidget = BasicLabel("%s: " % label) hexval = config.get(constant) - color = gtk.gdk.color_parse(hexval) - entry = gtk.ColorButton(color=color) + color = Gdk.color_parse(hexval) + entry = Gtk.ColorButton(color=color) color_hex_label = BasicLabel(hexval) entry.connect('color-set', self.update_color, constant, color_hex_label) table.attach(lwidget, 0, 1, index, index+1, yoptions=0, - xoptions=gtk.FILL) + xoptions=Gtk.AttachOptions.FILL) table.attach(entry, 1, 2, index, index+1, yoptions=0, xoptions=0) table.attach(color_hex_label, 2, 3, index, index+1, yoptions=0) return entry @@ -371,17 +370,17 @@ class ConfigureDialog(ManagedWindow): if not callback: callback = self.update_combo lwidget = BasicLabel("%s: " % label) - store = gtk.ListStore(int, str) + store = Gtk.ListStore(int, str) for item in opts: store.append(item) - combo = gtk.ComboBox(store) - cell = gtk.CellRendererText() + combo = Gtk.ComboBox(store) + cell = Gtk.CellRendererText() combo.pack_start(cell, True) combo.add_attribute(cell, 'text', 1) combo.set_active(config.get(constant)) combo.connect('changed', callback, constant) table.attach(lwidget, 1, 2, index, index+1, yoptions=0, - xoptions=gtk.FILL) + xoptions=Gtk.AttachOptions.FILL) table.attach(combo, 2, 3, index, index+1, yoptions=0) return combo @@ -396,14 +395,14 @@ class ConfigureDialog(ManagedWindow): if not callback: callback = self.update_slider lwidget = BasicLabel("%s: " % label) - adj = gtk.Adjustment(config.get(constant), range[0], range[1], 1, 0, 0) - slider = gtk.HScale(adj) - slider.set_update_policy(gtk.UPDATE_DISCONTINUOUS) + adj = Gtk.Adjustment(config.get(constant), range[0], range[1], 1, 0, 0) + slider = Gtk.HScale(adj) + slider.set_update_policy(Gtk.UPDATE_DISCONTINUOUS) slider.set_digits(0) - slider.set_value_pos(gtk.POS_BOTTOM) + slider.set_value_pos(Gtk.PositionType.BOTTOM) slider.connect('value-changed', callback, constant) table.attach(lwidget, 1, 2, index, index+1, yoptions=0, - xoptions=gtk.FILL) + xoptions=Gtk.AttachOptions.FILL) table.attach(slider, 2, 3, index, index+1, yoptions=0) return slider @@ -418,11 +417,11 @@ class ConfigureDialog(ManagedWindow): if not callback: callback = self.update_spinner lwidget = BasicLabel("%s: " % label) - adj = gtk.Adjustment(config.get(constant), range[0], range[1], 1, 0, 0) - spinner = gtk.SpinButton(adj) + adj = Gtk.Adjustment(config.get(constant), range[0], range[1], 1, 0, 0) + spinner = Gtk.SpinButton(adj) spinner.connect('value-changed', callback, constant) table.attach(lwidget, 1, 2, index, index+1, yoptions=0, - xoptions=gtk.FILL) + xoptions=Gtk.AttachOptions.FILL) table.attach(spinner, 2, 3, index, index+1, yoptions=0) return spinner @@ -449,7 +448,7 @@ class GrampsPreferences(ConfigureDialog): on_close=update_constants) def add_researcher_panel(self, configdialog): - table = gtk.Table(3, 8) + table = Gtk.Table(3, 8) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -468,7 +467,7 @@ class GrampsPreferences(ConfigureDialog): """ Add the ID prefix tab to the preferences. """ - table = gtk.Table(3, 8) + table = Gtk.Table(3, 8) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -493,7 +492,7 @@ class GrampsPreferences(ConfigureDialog): return _('ID Formats'), table def add_advanced_panel(self, configdialog): - table = gtk.Table(4, 8) + table = Gtk.Table(4, 8) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -520,10 +519,10 @@ class GrampsPreferences(ConfigureDialog): """ Create a common model for ComboBox and TreeView """ - name_format_model = gtk.ListStore(gobject.TYPE_INT, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING) + name_format_model = Gtk.ListStore(GObject.TYPE_INT, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING) index = 0 the_index = 0 for num, name, fmt_str, act in _nd.get_name_format(): @@ -711,15 +710,15 @@ class GrampsPreferences(ConfigureDialog): UI to manage the custom name formats """ - table = gtk.Table(2, 3) + table = Gtk.Table(2, 3) table.set_border_width(6) table.set_col_spacings(6) table.set_row_spacings(6) # make a treeview for listing all the name formats - format_tree = gtk.TreeView(self.fmt_model) - name_renderer = gtk.CellRendererText() - name_column = gtk.TreeViewColumn(_('Format'), + format_tree = Gtk.TreeView(self.fmt_model) + name_renderer = Gtk.CellRendererText() + name_column = Gtk.TreeViewColumn(_('Format'), name_renderer, text=COL_NAME) name_renderer.set_property('editable', False) @@ -728,8 +727,8 @@ class GrampsPreferences(ConfigureDialog): name_renderer.connect('editing-canceled', self.__cancel_change) self.name_renderer = name_renderer format_tree.append_column(name_column) - example_renderer = gtk.CellRendererText() - example_column = gtk.TreeViewColumn(_('Example'), + example_renderer = Gtk.CellRendererText() + example_column = Gtk.TreeViewColumn(_('Example'), example_renderer, text=COL_EXPL) format_tree.append_column(example_column) @@ -738,24 +737,24 @@ class GrampsPreferences(ConfigureDialog): format_tree.set_rules_hint(True) # ... and put it into a scrolled win - format_sw = gtk.ScrolledWindow() - format_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + format_sw = Gtk.ScrolledWindow() + format_sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) format_sw.add(format_tree) - format_sw.set_shadow_type(gtk.SHADOW_IN) - table.attach(format_sw, 0, 3, 0, 1, yoptions=gtk.FILL|gtk.EXPAND) + format_sw.set_shadow_type(Gtk.ShadowType.IN) + table.attach(format_sw, 0, 3, 0, 1, yoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.EXPAND) # to hold the values of the selected row of the tree and the iter self.selected_fmt = () self.iter = None - self.insert_button = gtk.Button(stock=gtk.STOCK_ADD) + self.insert_button = Gtk.Button(stock=Gtk.STOCK_ADD) self.insert_button.connect('clicked', self.__new_name) - self.edit_button = gtk.Button(stock=gtk.STOCK_EDIT) + self.edit_button = Gtk.Button(stock=Gtk.STOCK_EDIT) self.edit_button.connect('clicked', self.__edit_name) self.edit_button.set_sensitive(False) - self.remove_button = gtk.Button(stock=gtk.STOCK_REMOVE) + self.remove_button = Gtk.Button(stock=Gtk.STOCK_REMOVE) self.remove_button.connect('clicked', self.cb_del_fmt_str) self.remove_button.set_sensitive(False) @@ -830,7 +829,7 @@ class GrampsPreferences(ConfigureDialog): def add_formats_panel(self, configdialog): row = 0 - table = gtk.Table(4, 4) + table = Gtk.Table(4, 4) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -861,8 +860,8 @@ class GrampsPreferences(ConfigureDialog): active = _nd.get_default_format() self.fmt_model, active = self._build_name_format_model(active) # set up the combo to choose the preset format - self.fmt_obox = gtk.ComboBox() - cell = gtk.CellRendererText() + self.fmt_obox = Gtk.ComboBox() + cell = Gtk.CellRendererText() self.fmt_obox.pack_start(cell, True) self.fmt_obox.add_attribute(cell, 'text', 1) self.fmt_obox.set_model(self.fmt_model) @@ -873,8 +872,8 @@ class GrampsPreferences(ConfigureDialog): lwidget = BasicLabel("%s: " % _('Name format')) lwidget.set_use_underline(True) lwidget.set_mnemonic_widget(self.fmt_obox) - hbox = gtk.HBox() - btn = gtk.Button("%s..." % _('Edit') ) + hbox = Gtk.HBox() + btn = Gtk.Button("%s..." % _('Edit') ) btn.connect('clicked', self.cb_name_dialog) hbox.pack_start(self.fmt_obox, expand=True, fill=True) hbox.pack_start(btn, expand=False, fill=False) @@ -890,7 +889,7 @@ class GrampsPreferences(ConfigureDialog): row += 1 # Date format: - obox = gtk.combo_box_new_text() + obox = Gtk.ComboBoxText() formats = gen.datehandler.get_date_formats() map(obox.append_text, formats) active = config.get('preferences.date-format') @@ -905,7 +904,7 @@ class GrampsPreferences(ConfigureDialog): # Age precision: # precision=1 for "year", 2: "year, month" or 3: "year, month, days" - obox = gtk.combo_box_new_text() + obox = Gtk.ComboBoxText() age_precision = [_("Years"), _("Years, Months"), _("Years, Months, Days")] @@ -926,7 +925,7 @@ class GrampsPreferences(ConfigureDialog): row += 1 # Calendar format on report: - obox = gtk.combo_box_new_text() + obox = Gtk.ComboBoxText() map(obox.append_text, gen.lib.Date.ui_calendar_names) active = config.get('preferences.calendar-format-report') if active >= len(formats): @@ -939,7 +938,7 @@ class GrampsPreferences(ConfigureDialog): row += 1 # Surname guessing: - obox = gtk.combo_box_new_text() + obox = Gtk.ComboBoxText() formats = _surname_styles map(obox.append_text, formats) obox.set_active(config.get('behavior.surname-guessing')) @@ -952,7 +951,7 @@ class GrampsPreferences(ConfigureDialog): row += 1 # Default Family Relationship - obox = gtk.combo_box_new_text() + obox = Gtk.ComboBoxText() formats = gen.lib.FamilyRelType().get_standard_names() map(obox.append_text, formats) obox.set_active(config.get('preferences.family-relation-type')) @@ -972,7 +971,7 @@ class GrampsPreferences(ConfigureDialog): row += 1 # Status bar: - obox = gtk.combo_box_new_text() + obox = Gtk.ComboBoxText() formats = [_("Active person's name and ID"), _("Relationship to home person")] map(obox.append_text, formats) @@ -997,7 +996,7 @@ class GrampsPreferences(ConfigureDialog): def add_text_panel(self, configdialog): row = 0 - table = gtk.Table(6, 8) + table = Gtk.Table(6, 8) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -1055,7 +1054,7 @@ class GrampsPreferences(ConfigureDialog): config.set('preferences.calendar-format-report', obj.get_active()) def add_date_panel(self, configdialog): - table = gtk.Table(2, 7) + table = Gtk.Table(2, 7) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -1088,7 +1087,7 @@ class GrampsPreferences(ConfigureDialog): return _('Dates'), table def add_behavior_panel(self, configdialog): - table = gtk.Table(3, 6) + table = Gtk.Table(3, 6) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -1108,14 +1107,14 @@ class GrampsPreferences(ConfigureDialog): self.add_spinner(table, _('Max generations for relationships'), 4, 'behavior.generation-depth', (5, 50), self.update_gendepth) - self.path_entry = gtk.Entry() + self.path_entry = Gtk.Entry() self.add_path_box(table, _('Base path for relative media paths'), 5, self.path_entry, self.dbstate.db.get_mediapath(), self.set_mediapath, self.select_mediapath) # Check for updates: - obox = gtk.combo_box_new_text() + obox = Gtk.ComboBoxText() formats = [_("Never"), _("Once a month"), _("Once a week"), @@ -1129,7 +1128,7 @@ class GrampsPreferences(ConfigureDialog): table.attach(lwidget, 1, 2, 6, 7, yoptions=0) table.attach(obox, 2, 3, 6, 7, yoptions=0) - self.whattype_box = gtk.combo_box_new_text() + self.whattype_box = Gtk.ComboBoxText() formats = [_("Updated addons only"), _("New addons only"), _("New and updated addons"),] @@ -1146,13 +1145,13 @@ class GrampsPreferences(ConfigureDialog): table.attach(lwidget, 1, 2, 7, 8, yoptions=0) table.attach(self.whattype_box, 2, 3, 7, 8, yoptions=0) - checkbutton = gtk.CheckButton( + checkbutton = Gtk.CheckButton( _("Do not ask about previously notified addons")) checkbutton.set_active(config.get('behavior.do-not-show-previously-seen-updates')) checkbutton.connect("toggled", self.toggle_hide_previous_addons) table.attach(checkbutton, 0, 3, 8, 9, yoptions=0) - button = gtk.Button(_("Check now")) + button = Gtk.Button(_("Check now")) button.connect("clicked", lambda obj: \ self.uistate.viewmanager.check_for_updates(force=True)) table.attach(button, 3, 4, 8, 9, yoptions=0) @@ -1160,7 +1159,7 @@ class GrampsPreferences(ConfigureDialog): return _('General'), table def add_famtree_panel(self, configdialog): - table = gtk.Table(2, 2) + table = Gtk.Table(2, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -1181,20 +1180,20 @@ class GrampsPreferences(ConfigureDialog): self.dbstate.db.set_mediapath(None) def select_mediapath(self, *obj): - f = gtk.FileChooserDialog( + f = Gtk.FileChooserDialog( _("Select media directory"), - action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, - buttons=(gtk.STOCK_CANCEL, - gtk.RESPONSE_CANCEL, - gtk.STOCK_APPLY, - gtk.RESPONSE_OK)) + action=Gtk.FileChooserAction.SELECT_FOLDER, + buttons=(Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_APPLY, + Gtk.ResponseType.OK)) mpath = self.dbstate.db.get_mediapath() if not mpath: mpath = const.HOME_DIR f.set_current_folder(os.path.dirname(mpath)) status = f.run() - if status == gtk.RESPONSE_OK: + if status == Gtk.ResponseType.OK: val = Utils.get_unicode_path_from_file_chooser(f.get_filename()) if val: self.path_entry.set_text(val) @@ -1244,9 +1243,9 @@ class GrampsPreferences(ConfigureDialog): # FIXME: is this needed? def _set_button(self, stock): - button = gtk.Button() - image = gtk.Image() - image.set_from_stock(stock, gtk.ICON_SIZE_BUTTON) + button = Gtk.Button() + image = Gtk.Image() + image.set_from_stock(stock, Gtk.IconSize.BUTTON) image.show() button.add(image) button.show() diff --git a/src/gui/dbloader.py b/src/gui/dbloader.py index b2bb77883..87e661f92 100644 --- a/src/gui/dbloader.py +++ b/src/gui/dbloader.py @@ -46,8 +46,8 @@ _LOG = logging.getLogger(".") # GTK+ modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -128,11 +128,11 @@ class DbLoader(CLIDbLoader): pmgr = GuiPluginManager.get_instance() - import_dialog = gtk.FileChooserDialog(_('Gramps: Import database'), + import_dialog = Gtk.FileChooserDialog(_('Gramps: Import database'), self.uistate.window, - gtk.FILE_CHOOSER_ACTION_OPEN, - (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, - 'gramps-import', gtk.RESPONSE_OK)) + Gtk.FileChooserAction.OPEN, + (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + 'gramps-import', Gtk.ResponseType.OK)) import_dialog.set_local_only(False) # Always add automatic (match all files) filter @@ -140,7 +140,7 @@ class DbLoader(CLIDbLoader): # Add more file type selections for available importers for plugin in pmgr.get_import_plugins(): - file_filter = gtk.FileFilter() + file_filter = Gtk.FileFilter() name = "%s (.%s)" % (plugin.get_name(), plugin.get_extension()) file_filter.set_name(name) file_filter.add_pattern("*.%s" % plugin.get_extension()) @@ -159,9 +159,9 @@ class DbLoader(CLIDbLoader): import_dialog.set_current_folder(default_dir) while True: response = import_dialog.run() - if response == gtk.RESPONSE_CANCEL: + if response == Gtk.ResponseType.CANCEL: break - elif response == gtk.RESPONSE_OK: + elif response == Gtk.ResponseType.OK: filename = Utils.get_unicode_path_from_file_chooser(import_dialog.get_filename()) if self.check_errors(filename): # displays errors if any @@ -362,7 +362,7 @@ def add_all_files_filter(chooser): """ Add an all-permitting filter to the file chooser dialog. """ - mime_filter = gtk.FileFilter() + mime_filter = Gtk.FileFilter() mime_filter.set_name(_('All files')) mime_filter.add_pattern('*') chooser.add_filter(mime_filter) @@ -372,15 +372,15 @@ def add_all_files_filter(chooser): # Format selectors: explictly set the format of the file # #------------------------------------------------------------------------- -class GrampsFormatWidget(gtk.ComboBox): +class GrampsFormatWidget(Gtk.ComboBox): def __init__(self): - gtk.ComboBox.__init__(self, model=None) + GObject.GObject.__init__(self, model=None) def set(self, format_list): - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell, True) self.add_attribute(cell, 'text', 0) self.format_list = format_list @@ -412,8 +412,8 @@ def format_maker(): type_selector = GrampsFormatWidget() type_selector.set(format_list) - box = gtk.HBox() - label = gtk.Label(_('Select file _type:')) + box = Gtk.HBox() + label = Gtk.Label(label=_('Select file _type:')) label.set_use_underline(True) label.set_mnemonic_widget(type_selector) box.pack_start(label, expand=False, fill=False, padding=6) diff --git a/src/gui/dbman.py b/src/gui/dbman.py index ac7d05708..5311c0394 100644 --- a/src/gui/dbman.py +++ b/src/gui/dbman.py @@ -37,8 +37,7 @@ import time import copy import subprocess import urlparse -from gen.ggettext import gettext as _ -from gui.user import User + #------------------------------------------------------------------------- # # set up logging @@ -61,15 +60,17 @@ else: # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -from gtk.gdk import ACTION_COPY -import pango +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # # gramps modules # #------------------------------------------------------------------------- +from gen.ggettext import gettext as _ +from gui.user import User from gui.dialog import ErrorDialog, QuestionDialog, QuestionDialog2 from gen.db import DbBsddb from gui.pluginmanager import GuiPluginManager @@ -82,8 +83,8 @@ from gen.db.exceptions import DbException from Utils import get_unicode_path_from_env_var -_RETURN = gtk.gdk.keyval_from_name("Return") -_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter") +_RETURN = Gdk.keyval_from_name("Return") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") #------------------------------------------------------------------------- @@ -112,9 +113,9 @@ class DbManager(CLIDbManager): """ ICON_MAP = { CLIDbManager.ICON_NONE : '', - CLIDbManager.ICON_RECOVERY : gtk.STOCK_DIALOG_ERROR, + CLIDbManager.ICON_RECOVERY : Gtk.STOCK_DIALOG_ERROR, CLIDbManager.ICON_LOCK : 'gramps-lock', - CLIDbManager.ICON_OPEN : gtk.STOCK_OPEN, + CLIDbManager.ICON_OPEN : Gtk.STOCK_OPEN, } ERROR = ErrorDialog @@ -152,7 +153,8 @@ class DbManager(CLIDbManager): Connects the signals to the buttons on the interface. """ ddtargets = [ DdTargets.URI_LIST.target() ] - self.top.drag_dest_set(gtk.DEST_DEFAULT_ALL, ddtargets, ACTION_COPY) + self.top.drag_dest_set(Gtk.DestDefaults.ALL, ddtargets, + Gdk.DragAction.COPY) self.remove.connect('clicked', self.__remove_db) self.new.connect('clicked', self.__new_db) @@ -174,9 +176,9 @@ class DbManager(CLIDbManager): treat a double click as if it was OK button press. However, we have to make sure that an item was selected first. """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: if self.connect.get_property('sensitive'): - self.top.response(gtk.RESPONSE_OK) + self.top.response(Gtk.ResponseType.OK) return True return False @@ -187,7 +189,7 @@ class DbManager(CLIDbManager): """ if event.keyval in (_RETURN, _KP_ENTER): if self.connect.get_property('sensitive'): - self.top.response(gtk.RESPONSE_OK) + self.top.response(Gtk.ResponseType.OK) return True return False @@ -222,10 +224,10 @@ class DbManager(CLIDbManager): if path is None: return - is_rev = len(path) > 1 + is_rev = len(path.get_indices()) > 1 self.rcs.set_label(RCS_BUTTON[is_rev]) - if store.get_value(node, STOCK_COL) == gtk.STOCK_OPEN: + if store.get_value(node, STOCK_COL) == Gtk.STOCK_OPEN: self.connect.set_sensitive(False) if _RCS_FOUND: self.rcs.set_sensitive(True) @@ -236,7 +238,7 @@ class DbManager(CLIDbManager): else: self.rcs.set_sensitive(False) - if store.get_value(node, STOCK_COL) == gtk.STOCK_DIALOG_ERROR: + if store.get_value(node, STOCK_COL) == Gtk.STOCK_DIALOG_ERROR: path = get_unicode_path_from_env_var(store.get_value(node, PATH_COL)) backup = os.path.join(path, "person.gbkp") self.repair.set_sensitive(os.path.isfile(backup)) @@ -264,12 +266,12 @@ class DbManager(CLIDbManager): """ # build the database name column - render = gtk.CellRendererText() - render.set_property('ellipsize', pango.ELLIPSIZE_END) + render = Gtk.CellRendererText() + render.set_property('ellipsize', Pango.EllipsizeMode.END) render.connect('edited', self.__change_name) render.connect('editing-canceled', self.__stop_edit) render.connect('editing-started', self.__start_edit) - self.column = gtk.TreeViewColumn(_('Family tree name'), render, + self.column = Gtk.TreeViewColumn(_('Family tree name'), render, text=NAME_COL) self.column.set_sort_column_id(NAME_COL) self.column.set_resizable(True) @@ -278,14 +280,14 @@ class DbManager(CLIDbManager): self.name_renderer = render # build the icon column - render = gtk.CellRendererPixbuf() - icon_column = gtk.TreeViewColumn(_('Status'), render, + render = Gtk.CellRendererPixbuf() + icon_column = Gtk.TreeViewColumn(_('Status'), render, stock_id=STOCK_COL) self.dblist.append_column(icon_column) # build the last accessed column - render = gtk.CellRendererText() - column = gtk.TreeViewColumn(_('Last accessed'), render, text=DATE_COL) + render = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(_('Last accessed'), render, text=DATE_COL) column.set_sort_column_id(DSORT_COL) self.dblist.append_column(column) @@ -303,7 +305,7 @@ class DbManager(CLIDbManager): """ Builds the display model. """ - self.model = gtk.TreeStore(str, str, str, str, int, bool, str) + self.model = Gtk.TreeStore(str, str, str, str, int, bool, str) #use current names to set up the model for items in self.current_names: @@ -322,12 +324,12 @@ class DbManager(CLIDbManager): iter = self.model.get_iter_first() while (iter): path = self.model.get_path(iter) + iter = self.model.iter_next(iter) if path == skippath: continue itername = self.model.get_value(iter, NAME_COL) if itername.strip() == name.strip(): return True - iter = self.model.iter_next(iter) return False def run(self): @@ -337,14 +339,14 @@ class DbManager(CLIDbManager): """ while True: value = self.top.run() - if value == gtk.RESPONSE_OK: + if value == Gtk.ResponseType.OK: store, node = self.selection.get_selected() # don't open a locked file if store.get_value(node, STOCK_COL) == 'gramps-lock': self.__ask_to_break_lock(store, node) continue # don't open a version - if len(store.get_path(node)) > 1: + if len(store.get_path(node).get_indices()) > 1: continue if node: self.top.destroy() @@ -415,12 +417,13 @@ class DbManager(CLIDbManager): If the new string is empty, do nothing. Otherwise, renaming the database is simply changing the contents of the name file. """ + #path is a string, convert to TreePath first + path = Gtk.TreePath(path=path) if len(new_text) > 0: node = self.model.get_iter(path) old_text = self.model.get_value(node, NAME_COL) if not old_text.strip() == new_text.strip(): - #If there is a ":" in path, then it as revision - if ":" in path : + if len(path.get_indices()) > 1 : self.__rename_revision(path, new_text) else: self.__rename_database(path, new_text) @@ -482,7 +485,7 @@ class DbManager(CLIDbManager): """ store, node = self.selection.get_selected() tree_path = store.get_path(node) - if len(tree_path) > 1: + if len(tree_path.get_indices()) > 1: parent_node = store.get_iter((tree_path[0],)) parent_name = store.get_value(parent_node, NAME_COL) name = store.get_value(node, NAME_COL) @@ -524,7 +527,7 @@ class DbManager(CLIDbManager): path = store.get_path(node) self.data_to_delete = store[path] - if len(path) == 1: + if len(path.get_indices()) == 1: QuestionDialog( _("Remove the '%s' family tree?") % self.data_to_delete[0], _("Removing this family tree will permanently destroy the data."), @@ -687,9 +690,9 @@ class DbManager(CLIDbManager): message """ self.msg.set_label(msg) - self.top.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) - while (gtk.events_pending()): - gtk.main_iteration() + self.top.window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) + while (Gtk.events_pending()): + Gtk.main_iteration() def __end_cursor(self): """ @@ -750,7 +753,7 @@ def drag_motion(wid, context, xpos, ypos, time_stamp): """ DND callback that is called on a DND drag motion begin """ - context.drag_status(gtk.gdk.ACTION_COPY, time_stamp) + context.drag_status(Gdk.DragAction.COPY, time_stamp) return True def drop_cb(wid, context, xpos, ypos, time_stamp): diff --git a/src/gui/ddtargets.py b/src/gui/ddtargets.py index 5916c323c..6004ed099 100644 --- a/src/gui/ddtargets.py +++ b/src/gui/ddtargets.py @@ -41,9 +41,9 @@ from gui.ddtargets import DdTargets - drag_dest_set(gtk.DEST_DEFAULT_ALL, + drag_dest_set(Gtk.DestDefaults.ALL, DdTargets.all_targets(), - ACTION_COPY) + Gdk.DragAction.COPY) """ @@ -55,6 +55,7 @@ import logging log = logging.getLogger(".DdTargets") +from gi.repository import Gtk class _DdType: """Represents the fields needed by a drag and drop target.""" @@ -85,11 +86,9 @@ class _DdType: """ Return the full target information in the format required by the Gtk functions. - """ - return (self.drag_type, self.target_flags, self.app_id) - - + return Gtk.TargetEntry.new(self.drag_type, self.target_flags, + self.app_id) class _DdTargets(object): """A single class that manages all the drag and drop targets.""" diff --git a/src/gui/dialog.py b/src/gui/dialog.py index b9fe26916..9dc15f9d2 100644 --- a/src/gui/dialog.py +++ b/src/gui/dialog.py @@ -32,8 +32,9 @@ import sys # GNOME/GTK+ modules # #------------------------------------------------------------------------- -import gtk -from gtk.gdk import pixbuf_new_from_file +from gi.repository import GObject +from gi.repository import Gtk +from gi.repository import GdkPixbuf #------------------------------------------------------------------------- # @@ -46,7 +47,7 @@ from gui.glade import Glade from gen.ggettext import gettext as _ try: - ICON = pixbuf_new_from_file(const.ICON) + ICON = GdkPixbuf.Pixbuf.new_from_file(const.ICON) except: ICON = None @@ -73,9 +74,9 @@ class SaveDialog(object): self.top.set_transient_for(parent) self.top.show() response = self.top.run() - if response == gtk.RESPONSE_NO: + if response == Gtk.ResponseType.NO: self.task1() - elif response == gtk.RESPONSE_YES: + elif response == Gtk.ResponseType.YES: self.task2() config.set('interface.dont-ask', self.dontask.get_active()) @@ -104,7 +105,7 @@ class QuestionDialog(object): self.top.show() response = self.top.run() self.top.destroy() - if response == gtk.RESPONSE_ACCEPT: + if response == Gtk.ResponseType.ACCEPT: task() class QuestionDialog2(object): @@ -135,7 +136,7 @@ class QuestionDialog2(object): def run(self): response = self.top.run() self.top.destroy() - return (response == gtk.RESPONSE_ACCEPT) + return (response == Gtk.ResponseType.ACCEPT) class OptionDialog(object): def __init__(self, msg1, msg2, btnmsg1, task1, btnmsg2, task2, parent=None): @@ -159,7 +160,7 @@ class OptionDialog(object): self.top.set_transient_for(parent) self.top.show() self.response = self.top.run() - if self.response == gtk.RESPONSE_NO: + if self.response == Gtk.ResponseType.NO: if task1: task1() else: @@ -170,13 +171,13 @@ class OptionDialog(object): def get_response(self): return self.response -class ErrorDialog(gtk.MessageDialog): +class ErrorDialog(Gtk.MessageDialog): def __init__(self, msg1, msg2="", parent=None): - gtk.MessageDialog.__init__(self, parent, - flags=gtk.DIALOG_MODAL, - type=gtk.MESSAGE_ERROR, - buttons=gtk.BUTTONS_CLOSE) + Gtk.MessageDialog.__init__(self, parent, + flags=Gtk.DialogFlags.MODAL, + type=Gtk.MessageType.ERROR, + buttons=Gtk.ButtonsType.CLOSE) self.set_markup('%s' % msg1) self.format_secondary_text(msg2) self.set_icon(ICON) @@ -208,13 +209,13 @@ class DBErrorDialog(ErrorDialog): "the Family Tree Manager. Select the database and " 'click on the Repair button') + '\n\n' + msg, parent) -class WarningDialog(gtk.MessageDialog): +class WarningDialog(Gtk.MessageDialog): def __init__(self, msg1, msg2="", parent=None): - gtk.MessageDialog.__init__(self, parent, - flags=gtk.DIALOG_MODAL, - type=gtk.MESSAGE_WARNING, - buttons=gtk.BUTTONS_CLOSE) + Gtk.MessageDialog.__init__(self, parent, + flags=Gtk.DialogFlags.MODAL, + type=Gtk.MessageType.WARNING, + buttons=Gtk.ButtonsType.CLOSE) self.set_markup('%s' % msg1) self.format_secondary_markup(msg2) self.set_icon(ICON) @@ -223,13 +224,13 @@ class WarningDialog(gtk.MessageDialog): self.run() self.destroy() -class OkDialog(gtk.MessageDialog): +class OkDialog(Gtk.MessageDialog): def __init__(self, msg1, msg2="", parent=None): - gtk.MessageDialog.__init__(self, parent, - flags=gtk.DIALOG_MODAL, - type=gtk.MESSAGE_INFO, - buttons=gtk.BUTTONS_CLOSE) + Gtk.MessageDialog.__init__(self, parent, + flags=Gtk.DialogFlags.MODAL, + type=Gtk.MessageType.INFO, + buttons=Gtk.ButtonsType.CLOSE) self.set_markup('%s' % msg1) self.format_secondary_text(msg2) self.set_icon(ICON) @@ -254,7 +255,7 @@ class InfoDialog(object): label.set_use_markup(True) infoview = self.xml.get_object('infoview') - infobuffer = gtk.TextBuffer() + infobuffer = Gtk.TextBuffer() infobuffer.set_text(infotext) if monospaced: startiter, enditer = infobuffer.get_bounds() @@ -297,12 +298,12 @@ class MissingMediaDialog(object): self.top.set_transient_for(parent) self.top.show() self.top.connect('delete_event', self.warn) - response = gtk.RESPONSE_DELETE_EVENT + response = Gtk.ResponseType.DELETE_EVENT # Need some magic here, because an attempt to close the dialog # with the X button not only emits the 'delete_event' signal # but also exits with the RESPONSE_DELETE_EVENT - while response == gtk.RESPONSE_DELETE_EVENT: + while response == Gtk.ResponseType.DELETE_EVENT: response = self.top.run() if response == 1: diff --git a/src/gui/displaystate.py b/src/gui/displaystate.py index 5d7da1e4d..86306714d 100644 --- a/src/gui/displaystate.py +++ b/src/gui/displaystate.py @@ -45,8 +45,9 @@ _LOG = logging.getLogger(".DisplayState") # GNOME python modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -241,7 +242,7 @@ import os class RecentDocsMenu(object): def __init__(self, uistate, state, fileopen): - self.action_group = gtk.ActionGroup('RecentFiles') + self.action_group = Gtk.ActionGroup('RecentFiles') self.active = DISABLED self.uistate = uistate self.uimanager = uistate.uimanager @@ -262,14 +263,14 @@ class RecentDocsMenu(object): if self.active != DISABLED: self.uimanager.remove_ui(self.active) self.uimanager.remove_action_group(self.action_group) - self.action_group = gtk.ActionGroup('RecentFiles') + self.action_group = Gtk.ActionGroup('RecentFiles') self.active = DISABLED actions = [] rfiles = gramps_rf.gramps_recent_files rfiles.sort(by_time) - new_menu = gtk.Menu() + new_menu = Gtk.Menu() for item in rfiles: try: @@ -279,7 +280,7 @@ class RecentDocsMenu(object): buf.write('' % action_id) actions.append((action_id, None, title, None, None, make_callback(item, self.load))) - mitem = gtk.MenuItem(title) + mitem = Gtk.MenuItem(label=title) mitem.connect('activate', make_callback(item, self.load)) mitem.show() new_menu.append(mitem) @@ -320,7 +321,7 @@ class WarnHandler(RotateHandler): def emit(self, record): if self.timer is None: #check every 3 minutes if warn button can disappear - self.timer = gobject.timeout_add(3*60*1000, self._check_clear) + self.timer = GObject.timeout_add(3*60*1000, self._check_clear) RotateHandler.emit(self, record) self.button.show() @@ -517,9 +518,10 @@ class DisplayState(gen.utils.Callback): else: self.busy = value if value: - self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.window.get_root_window().set_cursor(Gdk.Cursor.new( + Gdk.CursorType.WATCH)) else: - self.window.window.set_cursor(None) + self.window.get_root_window().set_cursor(None) process_pending_events() def set_open_widget(self, widget): @@ -530,7 +532,7 @@ class DisplayState(gen.utils.Callback): def push_message(self, dbstate, text): self.status_text(text) - gobject.timeout_add(5000, self.modify_statusbar, dbstate) + GObject.timeout_add(5000, self.modify_statusbar, dbstate) def show_filter_results(self, dbstate, matched, total): #nav_type = self.viewmanager.active_page.navigation_type() diff --git a/src/gui/editors/addmedia.py b/src/gui/editors/addmedia.py index 30612f0ba..769ad952c 100644 --- a/src/gui/editors/addmedia.py +++ b/src/gui/editors/addmedia.py @@ -43,7 +43,7 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GdkPixbuf #------------------------------------------------------------------------- # @@ -224,14 +224,14 @@ def scale_image(path, size): 'This may be caused by a corrupt file.') try: - image1 = gtk.gdk.pixbuf_new_from_file(path) + image1 = GdkPixbuf.Pixbuf.new_from_file(path) width = image1.get_width() height = image1.get_height() scale = size / float(max(width, height)) return image1.scale_simple(int(scale*width), int(scale*height), - gtk.gdk.INTERP_BILINEAR) + GdkPixbuf.InterpType.BILINEAR) except: WarningDialog(title_msg, detail_msg) - return gtk.gdk.pixbuf_new_from_file(const.ICON) + return GdkPixbuf.Pixbuf.new_from_file(const.ICON) diff --git a/src/gui/editors/displaytabs/addrembedlist.py b/src/gui/editors/displaytabs/addrembedlist.py index 3127425b0..ae833450b 100644 --- a/src/gui/editors/displaytabs/addrembedlist.py +++ b/src/gui/editors/displaytabs/addrembedlist.py @@ -30,7 +30,7 @@ Address List display tab. # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -122,7 +122,7 @@ class AddrEmbedList(EmbeddedList): data = self.get_data() data.append(name) self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data) - 1) + GObject.idle_add(self.tree.scroll_to_cell, len(data) - 1) def edit_button_clicked(self, obj): """ diff --git a/src/gui/editors/displaytabs/addressmodel.py b/src/gui/editors/displaytabs/addressmodel.py index f4716f982..293fda5be 100644 --- a/src/gui/editors/displaytabs/addressmodel.py +++ b/src/gui/editors/displaytabs/addressmodel.py @@ -29,7 +29,7 @@ The TreeModel for the Address list in the Address Tab. # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -43,7 +43,7 @@ import gen.datehandler # AddressModel # #------------------------------------------------------------------------- -class AddressModel(gtk.ListStore): +class AddressModel(Gtk.ListStore): """ AddressModel derives from the ListStore, defining te items in the list """ @@ -52,7 +52,7 @@ class AddressModel(gtk.ListStore): """ AddressModel derives from the ListStore, defining te items in the list """ - gtk.ListStore.__init__(self, str, str, str, str, str, str, object) + GObject.GObject.__init__(self, str, str, str, str, str, str, object) self.db = dbase for obj in obj_list: self.append(row=[ diff --git a/src/gui/editors/displaytabs/attrembedlist.py b/src/gui/editors/displaytabs/attrembedlist.py index a0c2193f9..c4ae5e716 100644 --- a/src/gui/editors/displaytabs/attrembedlist.py +++ b/src/gui/editors/displaytabs/attrembedlist.py @@ -26,7 +26,7 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -100,7 +100,7 @@ class AttrEmbedList(EmbeddedList): data.append(name) self.changed = True self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data)-1) + GObject.idle_add(self.tree.scroll_to_cell, len(data)-1) def edit_button_clicked(self, obj): attr = self.get_selected() diff --git a/src/gui/editors/displaytabs/attrmodel.py b/src/gui/editors/displaytabs/attrmodel.py index 452aea300..152909bff 100644 --- a/src/gui/editors/displaytabs/attrmodel.py +++ b/src/gui/editors/displaytabs/attrmodel.py @@ -25,7 +25,7 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -39,10 +39,10 @@ import gtk # AttrModel # #------------------------------------------------------------------------- -class AttrModel(gtk.ListStore): +class AttrModel(Gtk.ListStore): def __init__(self, attr_list, db): - gtk.ListStore.__init__(self, str, str, object) + GObject.GObject.__init__(self, str, str, object) self.db = db for attr in attr_list: self.append(row=[ diff --git a/src/gui/editors/displaytabs/backreflist.py b/src/gui/editors/displaytabs/backreflist.py index 479d2b36c..322d807a3 100644 --- a/src/gui/editors/displaytabs/backreflist.py +++ b/src/gui/editors/displaytabs/backreflist.py @@ -34,7 +34,7 @@ from gen.ggettext import gettext as _ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -96,14 +96,14 @@ class BackRefList(EmbeddedList): This button box is then appended hbox (self). Method has signature of, and overrides create_buttons from _ButtonTab.py """ - self.edit_btn = SimpleButton(gtk.STOCK_EDIT, self.edit_button_clicked) + self.edit_btn = SimpleButton(Gtk.STOCK_EDIT, self.edit_button_clicked) self.edit_btn.set_tooltip_text(_('Edit reference')) - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.set_spacing(6) - hbox.pack_start(self.edit_btn, False) + hbox.pack_start(self.edit_btn, False, True, 0) hbox.show_all() - self.pack_start(hbox, False) + self.pack_start(hbox, False, True, 0) self.add_btn = None self.del_btn = None diff --git a/src/gui/editors/displaytabs/backrefmodel.py b/src/gui/editors/displaytabs/backrefmodel.py index 8adc510d7..00a0ea5f7 100644 --- a/src/gui/editors/displaytabs/backrefmodel.py +++ b/src/gui/editors/displaytabs/backrefmodel.py @@ -26,8 +26,8 @@ # GTK libraries # #------------------------------------------------------------------------- -import gobject -import gtk +from gi.repository import GObject +from gi.repository import Gtk from gen.ggettext import gettext as _ @@ -44,25 +44,25 @@ import Utils # BackRefModel # #------------------------------------------------------------------------- -class BackRefModel(gtk.ListStore): +class BackRefModel(Gtk.ListStore): dispstr = _('%(part1)s - %(part2)s') def __init__(self, sref_list, db): - gtk.ListStore.__init__(self, str, str, str, str, str) + GObject.GObject.__init__(self, str, str, str, str, str) self.db = db self.sref_list = sref_list self.count = 0 - self.idle = gobject.idle_add(self.load_model().next) + self.idle = GObject.idle_add(self.load_model().next) def destroy(self): - gobject.source_remove(self.idle) + GObject.source_remove(self.idle) def load_model(self): """ Objects can have very large backreferences. To avoid blocking the interface up to the moment that the model is created, this method is - called via gobject.idle_add. + called via GObject.idle_add. WARNING: a consequence of above is that loading can still be happening while the GUI using this model is no longer used. Disconnect any methods before closing the GUI. diff --git a/src/gui/editors/displaytabs/buttontab.py b/src/gui/editors/displaytabs/buttontab.py index 89c9e70da..53ebe3b73 100644 --- a/src/gui/editors/displaytabs/buttontab.py +++ b/src/gui/editors/displaytabs/buttontab.py @@ -33,7 +33,8 @@ from gen.ggettext import gettext as _ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk +from gi.repository import Gdk #------------------------------------------------------------------------- # @@ -44,13 +45,13 @@ from gui.widgets import SimpleButton from grampstab import GrampsTab from gen.errors import WindowActiveError -_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter") -_RETURN = gtk.gdk.keyval_from_name("Return") -_DEL = gtk.gdk.keyval_from_name("Delete") -_ADD = gtk.gdk.keyval_from_name("Insert") -_OPEN = gtk.gdk.keyval_from_name("o") -_LEFT = gtk.gdk.keyval_from_name("Left") -_RIGHT = gtk.gdk.keyval_from_name("Right") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") +_RETURN = Gdk.keyval_from_name("Return") +_DEL = Gdk.keyval_from_name("Delete") +_ADD = Gdk.keyval_from_name("Insert") +_OPEN = Gdk.keyval_from_name("o") +_LEFT = Gdk.keyval_from_name("Left") +_RIGHT = Gdk.keyval_from_name("Right") #------------------------------------------------------------------------- # @@ -118,13 +119,13 @@ class ButtonTab(GrampsTab): Note: some ButtonTab subclasses override this method. """ if top_label: - self.top_label = gtk.Label(top_label) + self.top_label = Gtk.Label(label=top_label) self.top_label.set_use_markup(True) self.track_ref_for_deletion("top_label") - self.add_btn = SimpleButton(gtk.STOCK_ADD, self.add_button_clicked) - self.edit_btn = SimpleButton(gtk.STOCK_EDIT, self.edit_button_clicked) - self.del_btn = SimpleButton(gtk.STOCK_REMOVE, self.del_button_clicked) + self.add_btn = SimpleButton(Gtk.STOCK_ADD, self.add_button_clicked) + self.edit_btn = SimpleButton(Gtk.STOCK_EDIT, self.edit_button_clicked) + self.del_btn = SimpleButton(Gtk.STOCK_REMOVE, self.del_button_clicked) self.track_ref_for_deletion("add_btn") self.track_ref_for_deletion("edit_btn") self.track_ref_for_deletion("del_btn") @@ -134,16 +135,16 @@ class ButtonTab(GrampsTab): self.del_btn.set_tooltip_text(self._MSG['del']) if share_button: - self.share_btn = SimpleButton(gtk.STOCK_INDEX, self.share_button_clicked) + self.share_btn = SimpleButton(Gtk.STOCK_INDEX, self.share_button_clicked) self.share_btn.set_tooltip_text(self._MSG['share']) self.track_ref_for_deletion("share_btn") else: self.share_btn = None if move_buttons: - self.up_btn = SimpleButton(gtk.STOCK_GO_UP, self.up_button_clicked) + self.up_btn = SimpleButton(Gtk.STOCK_GO_UP, self.up_button_clicked) self.up_btn.set_tooltip_text(self._MSG['up']) - self.down_btn = SimpleButton(gtk.STOCK_GO_DOWN, + self.down_btn = SimpleButton(Gtk.STOCK_GO_DOWN, self.down_button_clicked) self.down_btn.set_tooltip_text(self._MSG['down']) self.track_ref_for_deletion("up_btn") @@ -153,29 +154,29 @@ class ButtonTab(GrampsTab): self.down_btn = None if jump_button: - self.jump_btn = SimpleButton(gtk.STOCK_JUMP_TO, self.jump_button_clicked) + self.jump_btn = SimpleButton(Gtk.STOCK_JUMP_TO, self.jump_button_clicked) self.track_ref_for_deletion("jump_btn") self.jump_btn.set_tooltip_text(self._MSG['jump']) else: self.jump_btn = None - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.set_spacing(6) if top_label: - hbox.pack_start(self.top_label, False) - hbox.pack_start(self.add_btn, False) + hbox.pack_start(self.top_label, False, True, 0) + hbox.pack_start(self.add_btn, False, True, 0) if share_button: - hbox.pack_start(self.share_btn, False) - hbox.pack_start(self.edit_btn, False) - hbox.pack_start(self.del_btn, False) + hbox.pack_start(self.share_btn, False, True, 0) + hbox.pack_start(self.edit_btn, False, True, 0) + hbox.pack_start(self.del_btn, False, True, 0) if move_buttons: - hbox.pack_start(self.up_btn, False) - hbox.pack_start(self.down_btn, False) + hbox.pack_start(self.up_btn, False, True, 0) + hbox.pack_start(self.down_btn, False, True, 0) if self.jump_btn: - hbox.pack_start(self.jump_btn, False) + hbox.pack_start(self.jump_btn, False, True, 0) hbox.show_all() - self.pack_start(hbox, False) + self.pack_start(hbox, False, True, 0) if self.dbstate.db.readonly: self.add_btn.set_sensitive(False) @@ -193,7 +194,7 @@ class ButtonTab(GrampsTab): Handles the double click on list. If the double click occurs, the Edit button handler is called """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: try: self.edit_button_clicked(obj) except WindowActiveError: @@ -204,8 +205,8 @@ class ButtonTab(GrampsTab): Handles the return key being pressed on list. If the key is pressed, the Edit button handler is called """ - if event.type == gtk.gdk.KEY_PRESS: - #print 'key pressed', event.keyval, event.state, _ADD + if event.type == Gdk.KEY_PRESS: + #print 'key pressed', event.keyval, event.get_state(), _ADD if event.keyval in (_RETURN, _KP_ENTER): try: self.edit_button_clicked(obj) @@ -220,13 +221,13 @@ class ButtonTab(GrampsTab): return self.add_button_clicked(obj) elif event.keyval in (_OPEN,) and self.share_btn and \ - (event.state & gtk.gdk.CONTROL_MASK): + (event.get_state() & Gdk.ModifierType.CONTROL_MASK): self.share_button_clicked(obj) elif event.keyval in (_LEFT,) and \ - (event.state & gtk.gdk.MOD1_MASK): + (event.get_state() & Gdk.ModifierType.MOD1_MASK): self.prev_page() elif event.keyval in (_RIGHT,) and \ - (event.state & gtk.gdk.MOD1_MASK): + (event.get_state() & Gdk.ModifierType.MOD1_MASK): self.next_page() else: return diff --git a/src/gui/editors/displaytabs/childmodel.py b/src/gui/editors/displaytabs/childmodel.py index 2f1602094..fc10c852a 100644 --- a/src/gui/editors/displaytabs/childmodel.py +++ b/src/gui/editors/displaytabs/childmodel.py @@ -25,7 +25,7 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk import cgi #------------------------------------------------------------------------- @@ -44,10 +44,10 @@ from gen.utils import get_birth_or_fallback, get_death_or_fallback # ChildModel # #------------------------------------------------------------------------- -class ChildModel(gtk.ListStore): +class ChildModel(Gtk.ListStore): def __init__(self, child_ref_list, db): - gtk.ListStore.__init__(self, int, str, str, str, str, str, + GObject.GObject.__init__(self, int, str, str, str, str, str, str, str, str, str, str, str, str, object) self.db = db for index, child_ref in enumerate(child_ref_list): diff --git a/src/gui/editors/displaytabs/citationembedlist.py b/src/gui/editors/displaytabs/citationembedlist.py index 565e5b0e5..29a8c40fe 100644 --- a/src/gui/editors/displaytabs/citationembedlist.py +++ b/src/gui/editors/displaytabs/citationembedlist.py @@ -35,7 +35,7 @@ LOG = logging.getLogger(".citation") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -150,7 +150,7 @@ class CitationEmbedList(EmbeddedList, DbGUIElement): self.callman.register_handles({'citation': [value]}) self.changed = True self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data) - 1) + GObject.idle_add(self.tree.scroll_to_cell, len(data) - 1) def share_button_clicked(self, obj): SelectCitation = SelectorFactory('Citation') diff --git a/src/gui/editors/displaytabs/citationrefmodel.py b/src/gui/editors/displaytabs/citationrefmodel.py index d7fa1b941..e9fb4d2e8 100644 --- a/src/gui/editors/displaytabs/citationrefmodel.py +++ b/src/gui/editors/displaytabs/citationrefmodel.py @@ -26,17 +26,17 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # # CitationModel # #------------------------------------------------------------------------- -class CitationRefModel(gtk.ListStore): +class CitationRefModel(Gtk.ListStore): def __init__(self, citation_list, db): - gtk.ListStore.__init__(self, str, str, str, str, object) + GObject.GObject.__init__(self, str, str, str, str, object) self.db = db for handle in citation_list: citation = self.db.get_citation_from_handle(handle) diff --git a/src/gui/editors/displaytabs/datamodel.py b/src/gui/editors/displaytabs/datamodel.py index 76bee57e8..30f355894 100644 --- a/src/gui/editors/displaytabs/datamodel.py +++ b/src/gui/editors/displaytabs/datamodel.py @@ -25,7 +25,7 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -39,10 +39,10 @@ import gtk # DataModel # #------------------------------------------------------------------------- -class DataModel(gtk.ListStore): +class DataModel(Gtk.ListStore): def __init__(self, attr_list, db): - gtk.ListStore.__init__(self, str, str) + GObject.GObject.__init__(self, str, str) self.db = db for key,value in attr_list.items(): diff --git a/src/gui/editors/displaytabs/embeddedlist.py b/src/gui/editors/displaytabs/embeddedlist.py index 1bf4c5017..1769f0971 100644 --- a/src/gui/editors/displaytabs/embeddedlist.py +++ b/src/gui/editors/displaytabs/embeddedlist.py @@ -34,9 +34,9 @@ import cPickle as pickle # GTK libraries # #------------------------------------------------------------------------- -import gobject -import gtk -import pango +from gi.repository import GObject +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -55,7 +55,7 @@ class EmbeddedList(ButtonTab): """ This class provides the base class for all the list tabs. - It maintains a gtk.TreeView, including the selection and button sensitivity. + It maintains a Gtk.TreeView, including the selection and button sensitivity. """ _HANDLE_COL = -1 @@ -102,7 +102,7 @@ class EmbeddedList(ButtonTab): ref = self.get_selected() if ref: self.right_click(obj, event) - elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 2: + elif event.type == Gdk.EventType.BUTTON_PRESS and event.button == 2: fun = self.get_middle_click() if fun: fun() @@ -120,16 +120,16 @@ class EmbeddedList(ButtonTab): """ if self.share_btn: itemlist = [ - (True, True, gtk.STOCK_ADD, self.add_button_clicked), + (True, True, Gtk.STOCK_ADD, self.add_button_clicked), (True, False, _('Share'), self.share_button_clicked), - (False,True, gtk.STOCK_EDIT, self.edit_button_clicked), - (True, True, gtk.STOCK_REMOVE, self.del_button_clicked), + (False,True, Gtk.STOCK_EDIT, self.edit_button_clicked), + (True, True, Gtk.STOCK_REMOVE, self.del_button_clicked), ] else: itemlist = [ - (True, True, gtk.STOCK_ADD, self.add_button_clicked), - (False,True, gtk.STOCK_EDIT, self.edit_button_clicked), - (True, True, gtk.STOCK_REMOVE, self.del_button_clicked), + (True, True, Gtk.STOCK_ADD, self.add_button_clicked), + (False,True, Gtk.STOCK_EDIT, self.edit_button_clicked), + (True, True, Gtk.STOCK_REMOVE, self.del_button_clicked), ] return itemlist @@ -141,19 +141,19 @@ class EmbeddedList(ButtonTab): On right click show a popup menu. This is populated with get_popup_menu_items """ - menu = gtk.Menu() + menu = Gtk.Menu() for (needs_write_access, image, title, func) in self.get_popup_menu_items(): if image: if isinstance(title, tuple): img_stock, txt = title - item = gtk.ImageMenuItem(txt) - img = gtk.Image() - img.set_from_stock(img_stock, gtk.ICON_SIZE_MENU) + item = Gtk.ImageMenuItem(txt) + img = Gtk.Image() + img.set_from_stock(img_stock, Gtk.IconSize.MENU) item.set_image(img) else: - item = gtk.ImageMenuItem(stock_id=title) + item = Gtk.ImageMenuItem(stock_id=title) else: - item = gtk.MenuItem(title) + item = Gtk.MenuItem(title) item.connect('activate', func) if needs_write_access and self.dbstate.db.readonly: item.set_sensitive(False) @@ -180,10 +180,10 @@ class EmbeddedList(ButtonTab): dnd_types = [ self._DND_TYPE.target() ] self.tree.enable_model_drag_dest(dnd_types, - gtk.gdk.ACTION_COPY) - self.tree.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, + Gdk.DragAction.COPY) + self.tree.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [self._DND_TYPE.target()], - gtk.gdk.ACTION_COPY) + Gdk.DragAction.COPY) self.tree.connect('drag_data_get', self.drag_data_get) if not self.dbstate.db.readonly: self.tree.connect('drag_data_received', self.drag_data_received) @@ -258,8 +258,8 @@ class EmbeddedList(ButtonTab): if row is None: return len(self.get_data()) else: - if row[1] in (gtk.TREE_VIEW_DROP_BEFORE, - gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): + if row[1] in (Gtk.TreeViewDropPosition.BEFORE, + Gtk.TreeViewDropPosition.INTO_OR_BEFORE): return row[0][0] else: return row[0][0]+1 @@ -294,9 +294,9 @@ class EmbeddedList(ButtonTab): #select the row path = '%d' % (row_from-1) self.tree.get_selection().select_path(path) - # The height/location of gtk.treecells is calculated in an idle handler + # The height/location of Gtk.treecells is calculated in an idle handler # so use idle_add to scroll cell into view. - gobject.idle_add(self.tree.scroll_to_cell, path) + GObject.idle_add(self.tree.scroll_to_cell, path) def _move_down(self, row_from, obj, selmethod=None): """ @@ -314,7 +314,7 @@ class EmbeddedList(ButtonTab): #select the row path = '%d' % (row_from+1) self.tree.get_selection().select_path(path) - gobject.idle_add(self.tree.scroll_to_cell, path) + GObject.idle_add(self.tree.scroll_to_cell, path) def get_icon_name(self): """ @@ -323,7 +323,7 @@ class EmbeddedList(ButtonTab): STOCK_JUSTIFY_FILL icon, which in the default GTK style looks kind of like a list. """ - return gtk.STOCK_JUSTIFY_FILL + return Gtk.STOCK_JUSTIFY_FILL def del_button_clicked(self, obj): ref = self.get_selected() @@ -349,14 +349,14 @@ class EmbeddedList(ButtonTab): def build_interface(self): """ - Builds the interface, instantiating a gtk.TreeView in a - gtk.ScrolledWindow. + Builds the interface, instantiating a Gtk.TreeView in a + Gtk.ScrolledWindow. """ # create the tree, turn on rule hinting and connect the # button press to the double click function. - self.tree = gtk.TreeView() + self.tree = Gtk.TreeView() self.tree.set_reorderable(True) self.tree.set_rules_hint(True) self.tree.connect('button_press_event', self.double_click) @@ -364,9 +364,9 @@ class EmbeddedList(ButtonTab): self.track_ref_for_deletion("tree") # create the scrolled window, and attach the treeview - scroll = gtk.ScrolledWindow() - scroll.set_shadow_type(gtk.SHADOW_IN) - scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scroll = Gtk.ScrolledWindow() + scroll.set_shadow_type(Gtk.ShadowType.IN) + scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scroll.add(self.tree) self.pack_end(scroll, True) @@ -434,12 +434,12 @@ class EmbeddedList(ButtonTab): # assign it to the column name. The text value is extracted # from the model column specified in pair[1] name = self._column_names[pair[1]][0] - renderer = gtk.CellRendererText() - renderer.set_property('ellipsize', pango.ELLIPSIZE_END) + renderer = Gtk.CellRendererText() + renderer.set_property('ellipsize', Pango.EllipsizeMode.END) if self._column_names[pair[1]][3] == 0: - column = gtk.TreeViewColumn(name, renderer, text=pair[1]) + column = Gtk.TreeViewColumn(name, renderer, text=pair[1]) else: - column = gtk.TreeViewColumn(name, renderer, markup=pair[1]) + column = Gtk.TreeViewColumn(name, renderer, markup=pair[1]) if not self._column_names[pair[1]][4] == -1: #apply weight attribute column.add_attribute(renderer, "weight", @@ -448,7 +448,7 @@ class EmbeddedList(ButtonTab): # insert the colum into the tree column.set_resizable(True) column.set_clickable(True) - column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) #column.set_min_width(self._column_names[pair[1]][2]) column.set_fixed_width(self._column_names[pair[1]][2]) @@ -496,8 +496,8 @@ class EmbeddedList(ButtonTab): #model and tree are reset, allow _selection_changed again, and force it self.dirty_selection = False self._selection_changed() - if self.tree.flags() & gtk.REALIZED: - gobject.idle_add(self.tree.scroll_to_point, offset.x, offset.y) + if self.tree.get_realized(): + GObject.idle_add(self.tree.scroll_to_point, offset.x, offset.y) self.post_rebuild(selectedpath) def post_rebuild(self, prebuildpath): diff --git a/src/gui/editors/displaytabs/eventembedlist.py b/src/gui/editors/displaytabs/eventembedlist.py index 9df08387f..906286133 100644 --- a/src/gui/editors/displaytabs/eventembedlist.py +++ b/src/gui/editors/displaytabs/eventembedlist.py @@ -27,8 +27,8 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -284,7 +284,7 @@ class EventEmbedList(DbGUIElement, GroupEmbeddedList): self.callman.register_handles({'event': [primary.handle]}) self.changed = True self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, + GObject.idle_add(self.tree.scroll_to_cell, (self._WORKGROUP, len(data) - 1)) def object_edited(self, ref, event): @@ -302,8 +302,8 @@ class EventEmbedList(DbGUIElement, GroupEmbeddedList): return GroupEmbeddedList.get_popup_menu_items(self) else: return [ - (True, True, gtk.STOCK_ADD, self.add_button_clicked), - (False,True, gtk.STOCK_EDIT, self.edit_button_clicked), + (True, True, Gtk.STOCK_ADD, self.add_button_clicked), + (False,True, Gtk.STOCK_EDIT, self.edit_button_clicked), ] def _non_native_change(self): diff --git a/src/gui/editors/displaytabs/eventrefmodel.py b/src/gui/editors/displaytabs/eventrefmodel.py index 932b92b8f..c2c3dbb27 100644 --- a/src/gui/editors/displaytabs/eventrefmodel.py +++ b/src/gui/editors/displaytabs/eventrefmodel.py @@ -33,8 +33,11 @@ from gen.ggettext import gettext as _ # GTK libraries # #------------------------------------------------------------------------- -import gtk -from pango import WEIGHT_NORMAL, WEIGHT_BOLD +from gi.repository import Gtk +from gi.repository import Pango +WEIGHT_NORMAL = Pango.Weight.NORMAL +WEIGHT_BOLD = Pango.Weight.BOLD + import cgi #------------------------------------------------------------------------- @@ -42,6 +45,7 @@ import cgi # GRAMPS classes # #------------------------------------------------------------------------- +from gui.widgets.undoablebuffer import UndoableBuffer import gen.datehandler from gen.config import config @@ -58,7 +62,7 @@ age_precision = config.get('preferences.age-display-precision') # EventRefModel # #------------------------------------------------------------------------- -class EventRefModel(gtk.TreeStore): +class EventRefModel(Gtk.TreeStore): #index of the working group _ROOTINDEX = 0 _GROUPSTRING = _('%(groupname)s - %(groupnumber)d') @@ -90,7 +94,7 @@ class EventRefModel(gtk.TreeStore): """ self.start_date = kwargs.get("start_date", None) typeobjs = (x[1] for x in self.COLS) - gtk.TreeStore.__init__(self, *typeobjs) + GObject.GObject.__init__(self, *typeobjs) self.db = db self.groups = groups for index, group in enumerate(event_list): diff --git a/src/gui/editors/displaytabs/gallerytab.py b/src/gui/editors/displaytabs/gallerytab.py index f32958ff9..8f3554600 100644 --- a/src/gui/editors/displaytabs/gallerytab.py +++ b/src/gui/editors/displaytabs/gallerytab.py @@ -35,12 +35,12 @@ import urlparse # GTK libraries # #------------------------------------------------------------------------- -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango import os import sys import urllib -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -79,7 +79,7 @@ class GalleryTab(ButtonTab, DbGUIElement): _DND_EXTRA = DdTargets.URI_LIST def __init__(self, dbstate, uistate, track, media_list, update=None): - self.iconlist = gtk.IconView() + self.iconlist = Gtk.IconView() ButtonTab.__init__(self, dbstate, uistate, track, _('_Gallery'), True) DbGUIElement.__init__(self, dbstate.db) self.track_ref_for_deletion("iconlist") @@ -109,7 +109,7 @@ class GalleryTab(ButtonTab, DbGUIElement): Handle the button press event: double click or right click on iconlist. If the double click occurs, the Edit button handler is called. """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: self.edit_button_clicked(obj) return True elif gui.utils.is_right_click(event): @@ -122,38 +122,38 @@ class GalleryTab(ButtonTab, DbGUIElement): def right_click(self, obj, event): itemlist = [ - (True, True, gtk.STOCK_ADD, self.add_button_clicked), + (True, True, Gtk.STOCK_ADD, self.add_button_clicked), (True, False, _('Share'), self.share_button_clicked), - (False,True, gtk.STOCK_EDIT, self.edit_button_clicked), - (True, True, gtk.STOCK_REMOVE, self.del_button_clicked), + (False,True, Gtk.STOCK_EDIT, self.edit_button_clicked), + (True, True, Gtk.STOCK_REMOVE, self.del_button_clicked), ] - menu = gtk.Menu() + menu = Gtk.Menu() ref_obj = self.dbstate.db.get_object_from_handle(obj.ref) media_path = Utils.media_path_full(self.dbstate.db, ref_obj.get_path()) if media_path: - item = gtk.ImageMenuItem(_('View')) - img = gtk.Image() - img.set_from_stock("gramps-viewmedia", gtk.ICON_SIZE_MENU) + item = Gtk.ImageMenuItem(_('View')) + img = Gtk.Image() + img.set_from_stock("gramps-viewmedia", Gtk.IconSize.MENU) item.set_image(img) item.connect('activate', make_launcher(media_path)) item.show() menu.append(item) mfolder, mfile = os.path.split(media_path) - item = gtk.MenuItem(_('Open Containing _Folder')) + item = Gtk.MenuItem(_('Open Containing _Folder')) item.connect('activate', make_launcher(mfolder)) item.show() menu.append(item) - item = gtk.SeparatorMenuItem() + item = Gtk.SeparatorMenuItem() item.show() menu.append(item) for (needs_write_access, image, title, func) in itemlist: if image: - item = gtk.ImageMenuItem(stock_id=title) + item = Gtk.ImageMenuItem(stock_id=title) else: - item = gtk.MenuItem(title) + item = Gtk.MenuItem(title) item.connect('activate', func) if needs_write_access and self.dbstate.db.readonly: item.set_sensitive(False) @@ -168,7 +168,7 @@ class GalleryTab(ButtonTab, DbGUIElement): return len(self.media_list)==0 def _build_icon_model(self): - self.iconmodel = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING, + self.iconmodel = Gtk.ListStore(GdkPixbuf.Pixbuf, GObject.TYPE_STRING, object) self.track_ref_for_deletion("iconmodel") @@ -193,10 +193,10 @@ class GalleryTab(ButtonTab, DbGUIElement): self.iconlist.set_pixbuf_column(0) self.iconlist.set_item_width(int(const.THUMBSCALE) + padding * 2) # set custom text cell renderer for better control - text_renderer = gtk.CellRendererText() - text_renderer.set_property('wrap-mode', pango.WRAP_WORD_CHAR) + text_renderer = Gtk.CellRendererText() + text_renderer.set_property('wrap-mode', Pango.WrapMode.WORD_CHAR) text_renderer.set_property('wrap-width', const.THUMBSCALE) - text_renderer.set_property('alignment', pango.ALIGN_CENTER) + text_renderer.set_property('alignment', Pango.Alignment.CENTER) self.iconlist.pack_end(text_renderer) self.iconlist.set_attributes(text_renderer, text=1) @@ -204,7 +204,7 @@ class GalleryTab(ButtonTab, DbGUIElement): self.iconlist.set_margin(padding) self.iconlist.set_column_spacing(padding) self.iconlist.set_reorderable(True) - self.iconlist.set_selection_mode(gtk.SELECTION_SINGLE) + self.iconlist.set_selection_mode(Gtk.SelectionMode.SINGLE) # connect the signals self.iconlist.connect('selection-changed', self._selection_changed) @@ -213,8 +213,8 @@ class GalleryTab(ButtonTab, DbGUIElement): self._connect_icon_model() # create the scrolled window - scroll = gtk.ScrolledWindow() - scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scroll = Gtk.ScrolledWindow() + scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) # put everything together scroll.add(self.iconlist) @@ -289,7 +289,7 @@ class GalleryTab(ButtonTab, DbGUIElement): itr_last = model.iter_nth_child(None, len(data) - 1) if itr_last: path = model.get_path(itr_last) - gobject.idle_add(self.iconlist.scroll_to_path, path, False, + GObject.idle_add(self.iconlist.scroll_to_path, path, False, 0.0, 0.0) def __blocked_text(self): @@ -398,10 +398,10 @@ class GalleryTab(ButtonTab, DbGUIElement): DdTargets.MEDIAOBJ.target()] self.iconlist.enable_model_drag_dest(dnd_types, - gtk.gdk.ACTION_MOVE|gtk.gdk.ACTION_COPY) - self.iconlist.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, + Gdk.DragAction.MOVE|Gdk.DragAction.COPY) + self.iconlist.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [self._DND_TYPE.target()], - gtk.gdk.ACTION_COPY) + Gdk.DragAction.COPY) self.iconlist.connect('drag_data_get', self.drag_data_get) if not self.dbstate.db.readonly: self.iconlist.connect('drag_data_received', self.drag_data_received) @@ -460,11 +460,11 @@ class GalleryTab(ButtonTab, DbGUIElement): (path, pos) = data row = path[0] - if pos == gtk.ICON_VIEW_DROP_LEFT: + if pos == Gtk.ICON_VIEW_DROP_LEFT: row = max(row, 0) - elif pos == gtk.ICON_VIEW_DROP_RIGHT: + elif pos == Gtk.ICON_VIEW_DROP_RIGHT: row = min(row, len(self.get_data())) - elif pos == gtk.ICON_VIEW_DROP_INTO: + elif pos == Gtk.ICON_VIEW_DROP_INTO: row = min(row+1, len(self.get_data())) else: row = len(self.get_data()) diff --git a/src/gui/editors/displaytabs/grampstab.py b/src/gui/editors/displaytabs/grampstab.py index a4e2e5268..485f8cc94 100644 --- a/src/gui/editors/displaytabs/grampstab.py +++ b/src/gui/editors/displaytabs/grampstab.py @@ -26,10 +26,12 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gdk +from gi.repository import Gtk -_LEFT = gtk.gdk.keyval_from_name("Left") -_RIGHT = gtk.gdk.keyval_from_name("Right") +_LEFT = Gdk.keyval_from_name("Left") +_RIGHT = Gdk.keyval_from_name("Right") #------------------------------------------------------------------------- # @@ -37,13 +39,13 @@ _RIGHT = gtk.gdk.keyval_from_name("Right") # #------------------------------------------------------------------------- -class GrampsTab(gtk.VBox): +class GrampsTab(Gtk.VBox): """ This class provides the base level class for 'tabs', which are used to fill in notebook tabs for GRAMPS edit dialogs. Each tab returns a gtk container widget which can be inserted into a - gtk.Notebook by the instantiating object. + Gtk.Notebook by the instantiating object. All tab classes should inherit from GrampsTab """ @@ -64,7 +66,7 @@ class GrampsTab(gtk.VBox): @param name: Notebook label name @type name: str/unicode """ - gtk.VBox.__init__(self) + GObject.GObject.__init__(self) # store information to pass to child windows self.dbstate = dbstate @@ -102,26 +104,26 @@ class GrampsTab(gtk.VBox): by the derived class. Creates an container that has the label and the icon in it. @returns: widget to be used for the notebook label. - @rtype: gtk.HBox + @rtype: Gtk.HBox """ - hbox = gtk.HBox() + hbox = Gtk.HBox() icon = self.get_icon_name() if isinstance(icon, tuple): if icon[0] == 0: - func = gtk.image_new_from_icon_name + func = Gtk.Image.new_from_icon_name else: - func = gtk.image_new_from_stock + func = Gtk.Image.new_from_stock name = icon[1] else: - func = gtk.image_new_from_stock + func = Gtk.Image.new_from_stock name = icon - self.tab_image = func(name, gtk.ICON_SIZE_MENU) + self.tab_image = func(name, Gtk.IconSize.MENU) self.track_ref_for_deletion("tab_image") - self.label = gtk.Label(self.tab_name) + self.label = Gtk.Label(label=self.tab_name) self.track_ref_for_deletion("label") - hbox.pack_start(self.tab_image) + hbox.pack_start(self.tab_image, True, True, 0) hbox.set_spacing(6) hbox.add(self.label) hbox.show_all() @@ -135,7 +137,7 @@ class GrampsTab(gtk.VBox): @returns: stock icon name @rtype: str """ - return gtk.STOCK_NEW + return Gtk.STOCK_NEW def get_tab_widget(self): """ @@ -143,7 +145,7 @@ class GrampsTab(gtk.VBox): container class is provided, and the object may manipulate the child widgets contained in the container. @returns: gtk widget - @rtype: gtk.HBox + @rtype: Gtk.HBox """ return self.label_container @@ -153,12 +155,12 @@ class GrampsTab(gtk.VBox): The inheriting object must contain a widget that connects at mimimum to this method, eg an eventbox, tree, ... """ - if event.type == gtk.gdk.KEY_PRESS: + if event.type == Gdk.KEY_PRESS: if event.keyval in (_LEFT,) and \ - (event.state & gtk.gdk.MOD1_MASK): + (event.get_state() & Gdk.ModifierType.MOD1_MASK): self.prev_page() elif event.keyval in (_RIGHT,) and \ - (event.state & gtk.gdk.MOD1_MASK): + (event.get_state() & Gdk.ModifierType.MOD1_MASK): self.next_page() else: return @@ -187,7 +189,7 @@ class GrampsTab(gtk.VBox): """ Builds the interface for the derived class. This function should be overridden in the derived class. Since the classes are derived from - gtk.HBox, the self.pack_start, self.pack_end, and self.add functions + Gtk.HBox, the self.pack_start, self.pack_end, and self.add functions can be used to add widgets to the interface. """ pass diff --git a/src/gui/editors/displaytabs/groupembeddedlist.py b/src/gui/editors/displaytabs/groupembeddedlist.py index 8e044b0ac..8d8099b40 100644 --- a/src/gui/editors/displaytabs/groupembeddedlist.py +++ b/src/gui/editors/displaytabs/groupembeddedlist.py @@ -33,9 +33,9 @@ import cPickle as pickle # GTK libraries # #------------------------------------------------------------------------- -import gtk -import pango -import gobject +from gi.repository import Gtk +from gi.repository import Pango +from gi.repository import GObject #------------------------------------------------------------------------- # # GRAMPS classes @@ -54,7 +54,7 @@ class GroupEmbeddedList(EmbeddedList): This class provides the base class for all the list tabs that show grouped data. - It maintains a gtk.TreeView, including the selection and button sensitivity. + It maintains a Gtk.TreeView, including the selection and button sensitivity. """ _WORKGROUP = 0 @@ -92,7 +92,7 @@ class GroupEmbeddedList(EmbeddedList): """ The group column is clicked, sort it as it was """ - self.columns[0].set_sort_order(gtk.SORT_ASCENDING) + self.columns[0].set_sort_order(Gtk.SortType.ASCENDING) self.rebuild() self.dbsort = True @@ -108,7 +108,7 @@ class GroupEmbeddedList(EmbeddedList): if obj and obj[1]: self._tmpgroup = obj[0] self.right_click(obj[1], event) - elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 2: + elif event.type == Gdk.EventType.BUTTON_PRESS and event.button == 2: fun = self.get_middle_click() if fun: fun() @@ -216,7 +216,7 @@ class GroupEmbeddedList(EmbeddedList): wgroup = dest[0][0] if len(dest[0]) == 1: # On a heading - if dest[1] == gtk.TREE_VIEW_DROP_BEFORE: + if dest[1] == Gtk.TreeViewDropPosition.BEFORE: if wgroup != 0: # If before then put at end of previous group return (wgroup-1, len(self.get_data()[wgroup-1])) @@ -226,8 +226,8 @@ class GroupEmbeddedList(EmbeddedList): else: return (wgroup, 0) else: - if dest[1] in (gtk.TREE_VIEW_DROP_BEFORE, - gtk.TREE_VIEW_DROP_INTO_OR_BEFORE): + if dest[1] in (Gtk.TreeViewDropPosition.BEFORE, + Gtk.TreeViewDropPosition.INTO_OR_BEFORE): return (wgroup, dest[0][1]) else: return (wgroup, dest[0][1]+1) @@ -297,7 +297,7 @@ class GroupEmbeddedList(EmbeddedList): #select the row path = (self._WORKGROUP, row_from[1]-1) self.tree.get_selection().select_path(path) - gobject.idle_add(self.tree.scroll_to_cell, path) + GObject.idle_add(self.tree.scroll_to_cell, path) else: self._move_up_notwork(row_from, obj, selmethod) @@ -330,7 +330,7 @@ class GroupEmbeddedList(EmbeddedList): #select the row path = (self._WORKGROUP, row_from[1]+1) self.tree.get_selection().select_path(path) - gobject.idle_add(self.tree.scroll_to_cell, path) + GObject.idle_add(self.tree.scroll_to_cell, path) else: self._move_down_notwork(row_from, obj, selmethod) @@ -353,7 +353,7 @@ class GroupEmbeddedList(EmbeddedList): STOCK_JUSTIFY_FILL icon, which in the default GTK style looks kind of like a list. """ - return gtk.STOCK_JUSTIFY_FILL + return Gtk.STOCK_JUSTIFY_FILL def del_button_clicked(self, obj): ref = self.get_selected() diff --git a/src/gui/editors/displaytabs/ldsembedlist.py b/src/gui/editors/displaytabs/ldsembedlist.py index 34d648495..8e798b5ae 100644 --- a/src/gui/editors/displaytabs/ldsembedlist.py +++ b/src/gui/editors/displaytabs/ldsembedlist.py @@ -26,7 +26,7 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -95,7 +95,7 @@ class LdsEmbedList(EmbeddedList): data = self.get_data() data.append(name) self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data) - 1) + GObject.idle_add(self.tree.scroll_to_cell, len(data) - 1) def edit_button_clicked(self, obj): lds = self.get_selected() diff --git a/src/gui/editors/displaytabs/ldsmodel.py b/src/gui/editors/displaytabs/ldsmodel.py index d8d31abf4..c9ea2441e 100644 --- a/src/gui/editors/displaytabs/ldsmodel.py +++ b/src/gui/editors/displaytabs/ldsmodel.py @@ -31,7 +31,7 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -46,12 +46,12 @@ import LdsUtils # LdsModel # #------------------------------------------------------------------------- -class LdsModel(gtk.ListStore): +class LdsModel(Gtk.ListStore): _HANDLE_COL = 5 def __init__(self, lds_list, db): - gtk.ListStore.__init__(self, str, str, str, str, str, object) + GObject.GObject.__init__(self, str, str, str, str, str, object) self.db = db for lds_ord in lds_list: diff --git a/src/gui/editors/displaytabs/locationembedlist.py b/src/gui/editors/displaytabs/locationembedlist.py index 77e18fc73..fbbbdc5b5 100644 --- a/src/gui/editors/displaytabs/locationembedlist.py +++ b/src/gui/editors/displaytabs/locationembedlist.py @@ -26,7 +26,7 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -85,7 +85,7 @@ class LocationEmbedList(EmbeddedList): data = self.get_data() data.append(name) self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data) - 1) + GObject.idle_add(self.tree.scroll_to_cell, len(data) - 1) def edit_button_clicked(self, obj): loc = self.get_selected() diff --git a/src/gui/editors/displaytabs/locationmodel.py b/src/gui/editors/displaytabs/locationmodel.py index f64e447bd..99a411e8b 100644 --- a/src/gui/editors/displaytabs/locationmodel.py +++ b/src/gui/editors/displaytabs/locationmodel.py @@ -25,7 +25,7 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -39,10 +39,10 @@ import gtk # LocationModel # #------------------------------------------------------------------------- -class LocationModel(gtk.ListStore): +class LocationModel(Gtk.ListStore): def __init__(self, obj_list, db): - gtk.ListStore.__init__(self, str, str, str, str, str, str, object) + GObject.GObject.__init__(self, str, str, str, str, str, str, object) self.db = db for obj in obj_list: self.append(row=[obj.street, obj.locality, obj.city, obj.county, diff --git a/src/gui/editors/displaytabs/nameembedlist.py b/src/gui/editors/displaytabs/nameembedlist.py index 1aef75a31..1507ffdce 100644 --- a/src/gui/editors/displaytabs/nameembedlist.py +++ b/src/gui/editors/displaytabs/nameembedlist.py @@ -26,8 +26,8 @@ # Python classes # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -117,15 +117,15 @@ class NameEmbedList(GroupEmbeddedList): def get_popup_menu_items(self): if self._tmpgroup == self._WORKGROUP: return [ - (True, True, gtk.STOCK_ADD, self.add_button_clicked), - (False,True, gtk.STOCK_EDIT, self.edit_button_clicked), - (True, True, gtk.STOCK_REMOVE, self.del_button_clicked), + (True, True, Gtk.STOCK_ADD, self.add_button_clicked), + (False,True, Gtk.STOCK_EDIT, self.edit_button_clicked), + (True, True, Gtk.STOCK_REMOVE, self.del_button_clicked), (True, False, _('Set as default name'), self.name_button_clicked), ] else: return [ - (True, True, gtk.STOCK_ADD, self.add_button_clicked), - (False,True, gtk.STOCK_EDIT, self.edit_button_clicked), + (True, True, Gtk.STOCK_ADD, self.add_button_clicked), + (False,True, Gtk.STOCK_EDIT, self.edit_button_clicked), ] def name_button_clicked(self, obj): @@ -167,7 +167,7 @@ class NameEmbedList(GroupEmbeddedList): data = self.get_data()[self._WORKGROUP] data.append(name) self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, + GObject.idle_add(self.tree.scroll_to_cell, (self._WORKGROUP, len(data) - 1)) def edit_button_clicked(self, obj): diff --git a/src/gui/editors/displaytabs/namemodel.py b/src/gui/editors/displaytabs/namemodel.py index f5fd11f24..26947dd6b 100644 --- a/src/gui/editors/displaytabs/namemodel.py +++ b/src/gui/editors/displaytabs/namemodel.py @@ -34,14 +34,17 @@ from gen.ggettext import gettext as _ # GTK libraries # #------------------------------------------------------------------------- -import gtk -from pango import WEIGHT_NORMAL, WEIGHT_BOLD +from gi.repository import Gtk +from gi.repository import Pango +WEIGHT_NORMAL = Pango.Weight.NORMAL +WEIGHT_BOLD = Pango.Weight.BOLD #------------------------------------------------------------------------- # # GRAMPS classes # #------------------------------------------------------------------------- +from gui.widgets.undoablebuffer import UndoableBuffer from gen.display.name import displayer as name_displayer #------------------------------------------------------------------------- @@ -53,7 +56,7 @@ from gen.display.name import displayer as name_displayer YES = _('Yes') NO = _('No') -class NameModel(gtk.TreeStore): +class NameModel(Gtk.TreeStore): #tree groups defined DEFINDEX = 0 DEFNAME = _('Preferred name') @@ -83,7 +86,7 @@ class NameModel(gtk.TreeStore): that might be used. name is the name for the group. """ typeobjs = (x[1] for x in self.COLS) - gtk.TreeStore.__init__(self, *typeobjs) + GObject.GObject.__init__(self, *typeobjs) self.db = db self.groups = groups for index, group in enumerate(obj_list): diff --git a/src/gui/editors/displaytabs/notemodel.py b/src/gui/editors/displaytabs/notemodel.py index c30b14eba..374395f60 100644 --- a/src/gui/editors/displaytabs/notemodel.py +++ b/src/gui/editors/displaytabs/notemodel.py @@ -25,17 +25,17 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # # NoteModel # #------------------------------------------------------------------------- -class NoteModel(gtk.ListStore): +class NoteModel(Gtk.ListStore): def __init__(self, note_list, db): - gtk.ListStore.__init__(self, str, str, object) + GObject.GObject.__init__(self, str, str, object) self.db = db for handle in note_list: note = self.db.get_note_from_handle(handle) diff --git a/src/gui/editors/displaytabs/notetab.py b/src/gui/editors/displaytabs/notetab.py index 7b8386e5a..b9c2475a9 100644 --- a/src/gui/editors/displaytabs/notetab.py +++ b/src/gui/editors/displaytabs/notetab.py @@ -32,7 +32,7 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -147,7 +147,7 @@ class NoteTab(EmbeddedList, DbGUIElement): self.callman.register_handles({'note': [name]}) self.changed = True self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data) - 1) + GObject.idle_add(self.tree.scroll_to_cell, len(data) - 1) def edit_button_clicked(self, obj): """ diff --git a/src/gui/editors/displaytabs/personeventembedlist.py b/src/gui/editors/displaytabs/personeventembedlist.py index 00a29d72b..19ee65879 100644 --- a/src/gui/editors/displaytabs/personeventembedlist.py +++ b/src/gui/editors/displaytabs/personeventembedlist.py @@ -27,7 +27,7 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -155,7 +155,7 @@ class PersonEventEmbedList(EventEmbedList): # New index is index-1 but for path, add another 1 for person events. path = (index,) self.tree.get_selection().select_path(path) - gobject.idle_add(self.tree.scroll_to_cell, path) + GObject.idle_add(self.tree.scroll_to_cell, path) def _move_down_group(self, groupindex): """ @@ -183,4 +183,4 @@ class PersonEventEmbedList(EventEmbedList): # New index is index+1 but for path, add another 1 for person events. path = (index + 2,) self.tree.get_selection().select_path(path) - gobject.idle_add(self.tree.scroll_to_cell, path) + GObject.idle_add(self.tree.scroll_to_cell, path) diff --git a/src/gui/editors/displaytabs/personrefembedlist.py b/src/gui/editors/displaytabs/personrefembedlist.py index 649d4e751..4372036a3 100644 --- a/src/gui/editors/displaytabs/personrefembedlist.py +++ b/src/gui/editors/displaytabs/personrefembedlist.py @@ -26,7 +26,7 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -96,7 +96,7 @@ class PersonRefEmbedList(EmbeddedList): data = self.get_data() data.append(obj) self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data) - 1) + GObject.idle_add(self.tree.scroll_to_cell, len(data) - 1) def edit_button_clicked(self, obj): from gui.editors import EditPersonRef diff --git a/src/gui/editors/displaytabs/personrefmodel.py b/src/gui/editors/displaytabs/personrefmodel.py index c4a5e3932..ce475dbeb 100644 --- a/src/gui/editors/displaytabs/personrefmodel.py +++ b/src/gui/editors/displaytabs/personrefmodel.py @@ -25,7 +25,7 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -39,10 +39,10 @@ from gen.display.name import displayer as name_displayer # PersonRefModel # #------------------------------------------------------------------------- -class PersonRefModel(gtk.ListStore): +class PersonRefModel(Gtk.ListStore): def __init__(self, obj_list, db): - gtk.ListStore.__init__(self, str, str, str, object) + GObject.GObject.__init__(self, str, str, str, object) self.db = db for obj in obj_list: p = self.db.get_person_from_handle(obj.ref) diff --git a/src/gui/editors/displaytabs/repoembedlist.py b/src/gui/editors/displaytabs/repoembedlist.py index e32d13f5b..98da68b00 100644 --- a/src/gui/editors/displaytabs/repoembedlist.py +++ b/src/gui/editors/displaytabs/repoembedlist.py @@ -26,7 +26,7 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gobject +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -151,7 +151,7 @@ class RepoEmbedList(EmbeddedList, DbGUIElement): self.callman.register_handles({'repository': [value[1].handle]}) self.changed = True self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data) - 1) + GObject.idle_add(self.tree.scroll_to_cell, len(data) - 1) def edit_button_clicked(self, obj): ref = self.get_selected() diff --git a/src/gui/editors/displaytabs/reporefmodel.py b/src/gui/editors/displaytabs/reporefmodel.py index af6de43aa..9ee55873f 100644 --- a/src/gui/editors/displaytabs/reporefmodel.py +++ b/src/gui/editors/displaytabs/reporefmodel.py @@ -25,7 +25,7 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -39,10 +39,10 @@ import gtk # RepoRefModel # #------------------------------------------------------------------------- -class RepoRefModel(gtk.ListStore): +class RepoRefModel(Gtk.ListStore): def __init__(self, ref_list, db): - gtk.ListStore.__init__(self, str, str, str, str, object) + GObject.GObject.__init__(self, str, str, str, str, object) self.db = db for ref in ref_list: repo = self.db.get_repository_from_handle(ref.ref) diff --git a/src/gui/editors/displaytabs/surnamemodel.py b/src/gui/editors/displaytabs/surnamemodel.py index 1067b040d..b54ad9b98 100644 --- a/src/gui/editors/displaytabs/surnamemodel.py +++ b/src/gui/editors/displaytabs/surnamemodel.py @@ -26,8 +26,8 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -41,11 +41,11 @@ import gobject # SurnamModel # #------------------------------------------------------------------------- -class SurnameModel(gtk.ListStore): +class SurnameModel(Gtk.ListStore): def __init__(self, surn_list, db): #setup model for the treeview - gtk.ListStore.__init__(self, str, str, str, str, + GObject.GObject.__init__(self, str, str, str, str, bool, object) for surn in surn_list: # fill the liststore diff --git a/src/gui/editors/displaytabs/surnametab.py b/src/gui/editors/displaytabs/surnametab.py index 1afc471fb..18bdf9c21 100644 --- a/src/gui/editors/displaytabs/surnametab.py +++ b/src/gui/editors/displaytabs/surnametab.py @@ -34,11 +34,12 @@ import locale # GTK classes # #------------------------------------------------------------------------- -import gtk -import gobject -import pango -_TAB = gtk.gdk.keyval_from_name("Tab") -_ENTER = gtk.gdk.keyval_from_name("Enter") +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GObject +from gi.repository import Pango +_TAB = Gdk.keyval_from_name("Tab") +_ENTER = Gdk.keyval_from_name("Enter") #------------------------------------------------------------------------- # @@ -106,11 +107,11 @@ class SurnameTab(EmbeddedList): # combobox for type colno = len(self.columns) name = self._column_combo[0] - renderer = gtk.CellRendererCombo() - renderer.set_property('ellipsize', pango.ELLIPSIZE_END) + renderer = Gtk.CellRendererCombo() + renderer.set_property('ellipsize', Pango.EllipsizeMode.END) # set up the comboentry editable no = NameOriginType() - self.cmborig = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING) + self.cmborig = Gtk.ListStore(GObject.TYPE_INT, GObject.TYPE_STRING) self.cmborigmap = no.get_map().copy() keys = sorted(self.cmborigmap, self.by_value) for key in keys: @@ -128,7 +129,7 @@ class SurnameTab(EmbeddedList): renderer.connect('editing_started', self.on_edit_start_cmb, colno) renderer.connect('edited', self.on_orig_edited, self._column_combo[3]) # add to treeview - column = gtk.TreeViewColumn(name, renderer, text=self._column_combo[3]) + column = Gtk.TreeViewColumn(name, renderer, text=self._column_combo[3]) column.set_resizable(True) column.set_sort_column_id(self._column_combo[1]) column.set_min_width(self._column_combo[2]) @@ -138,14 +139,14 @@ class SurnameTab(EmbeddedList): # toggle box for primary colno += 1 name = self._column_toggle[0] - renderer = gtk.CellRendererToggle() + renderer = Gtk.CellRendererToggle() renderer.set_property('activatable', True) renderer.set_property('radio', True) renderer.connect( 'toggled', self.on_prim_toggled, self._column_toggle[3]) # add to treeview - column = gtk.TreeViewColumn(name, renderer, active=self._column_toggle[3]) + column = Gtk.TreeViewColumn(name, renderer, active=self._column_toggle[3]) column.set_resizable(False) - column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) column.set_alignment(0.5) column.set_sort_column_id(self._column_toggle[1]) column.set_min_width(self._column_toggle[2]) @@ -238,11 +239,11 @@ class SurnameTab(EmbeddedList): """ self.on_edit_start(cellr, celle, path, colnr) #set up autocomplete - completion = gtk.EntryCompletion() + completion = Gtk.EntryCompletion() completion.set_model(self.cmborig) completion.set_minimum_key_length(1) completion.set_text_column(1) - celle.child.set_completion(completion) + celle.get_child().set_completion(completion) # celle.connect('changed', self.on_origcmb_change, path, colnr) @@ -321,12 +322,12 @@ class SurnameTab(EmbeddedList): Here we make sure tab moves to next or previous value in row on TAB """ if not EmbeddedList.key_pressed(self, obj, event): - if event.type == gtk.gdk.KEY_PRESS and event.keyval in (_TAB,): - if not (event.state & (gtk.gdk.SHIFT_MASK | - gtk.gdk.CONTROL_MASK)): + if event.type == Gdk.KEY_PRESS and event.keyval in (_TAB,): + if not (event.get_state() & (Gdk.ModifierType.SHIFT_MASK | + Gdk.ModifierType.CONTROL_MASK)): return self.next_cell() - elif (event.state & (gtk.gdk.SHIFT_MASK | - gtk.gdk.CONTROL_MASK)): + elif (event.get_state() & (Gdk.ModifierType.SHIFT_MASK | + Gdk.ModifierType.CONTROL_MASK)): return self.prev_cell() else: return diff --git a/src/gui/editors/displaytabs/webembedlist.py b/src/gui/editors/displaytabs/webembedlist.py index 998a1457d..d51f65fd0 100644 --- a/src/gui/editors/displaytabs/webembedlist.py +++ b/src/gui/editors/displaytabs/webembedlist.py @@ -26,8 +26,8 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -94,7 +94,7 @@ class WebEmbedList(EmbeddedList): data = self.get_data() data.append(url) self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, len(data) - 1) + GObject.idle_add(self.tree.scroll_to_cell, len(data) - 1) def edit_button_clicked(self, obj): from gui.editors import EditUrl @@ -111,10 +111,10 @@ class WebEmbedList(EmbeddedList): def get_popup_menu_items(self): return [ - (True, True, gtk.STOCK_ADD, self.add_button_clicked), - (False, True, gtk.STOCK_EDIT, self.edit_button_clicked), - (True, True, gtk.STOCK_REMOVE, self.del_button_clicked), - (True, True, gtk.STOCK_JUMP_TO, self.jump_button_clicked), + (True, True, Gtk.STOCK_ADD, self.add_button_clicked), + (False, True, Gtk.STOCK_EDIT, self.edit_button_clicked), + (True, True, Gtk.STOCK_REMOVE, self.del_button_clicked), + (True, True, Gtk.STOCK_JUMP_TO, self.jump_button_clicked), ] def jump_button_clicked(self, obj): diff --git a/src/gui/editors/displaytabs/webmodel.py b/src/gui/editors/displaytabs/webmodel.py index 4229f9f48..7f80d1c1e 100644 --- a/src/gui/editors/displaytabs/webmodel.py +++ b/src/gui/editors/displaytabs/webmodel.py @@ -29,20 +29,20 @@ The TreeModel for the URL list in the Url Tab. # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # # WebModel # #------------------------------------------------------------------------- -class WebModel(gtk.ListStore): +class WebModel(Gtk.ListStore): """ WebModel derives from the ListStore, defining te items in the list """ def __init__(self, obj_list, dbase): - gtk.ListStore.__init__(self, str, str, str, object) + GObject.GObject.__init__(self, str, str, str, object) self.db = dbase for obj in obj_list: self.append(row=[str(obj.type), obj.path, obj.desc, obj]) diff --git a/src/gui/editors/editaddress.py b/src/gui/editors/editaddress.py index 6b38d0334..39af6cc7e 100644 --- a/src/gui/editors/editaddress.py +++ b/src/gui/editors/editaddress.py @@ -40,7 +40,7 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -133,7 +133,7 @@ class EditAddress(EditSecondary): window. """ - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.srcref_list = CitationEmbedList(self.dbstate, self.uistate, diff --git a/src/gui/editors/editattribute.py b/src/gui/editors/editattribute.py index b7ebb8374..fa70e296f 100644 --- a/src/gui/editors/editattribute.py +++ b/src/gui/editors/editattribute.py @@ -39,7 +39,7 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -107,7 +107,7 @@ class EditAttribute(EditSecondary): ) def _create_tabbed_pages(self): - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.srcref_list = CitationEmbedList(self.dbstate, self.uistate, self.track, diff --git a/src/gui/editors/editchildref.py b/src/gui/editors/editchildref.py index 29c10746d..fd59043f5 100644 --- a/src/gui/editors/editchildref.py +++ b/src/gui/editors/editchildref.py @@ -39,7 +39,8 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gdk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -60,8 +61,8 @@ from gen.display.name import displayer as name_displayer # #------------------------------------------------------------------------- -_RETURN = gtk.gdk.keyval_from_name("Return") -_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter") +_RETURN = Gdk.keyval_from_name("Return") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") _LEFT_BUTTON = 1 _RIGHT_BUTTON = 3 @@ -143,7 +144,7 @@ class EditChildRef(EditSecondary): Create the notebook tabs and inserts them into the main window. """ - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.srcref_list = CitationEmbedList(self.dbstate, self.uistate, @@ -205,9 +206,9 @@ class EditChildRef(EditSecondary): self.close() def button_activated(event, mouse_button): - if (event.type == gtk.gdk.BUTTON_PRESS and + if (event.type == Gdk.EventType.BUTTON_PRESS and event.button == mouse_button) or \ - (event.type == gtk.gdk.KEY_PRESS and + (event.type == Gdk.KEY_PRESS and event.keyval in (_RETURN, _KP_ENTER)): return True else: diff --git a/src/gui/editors/editdate.py b/src/gui/editors/editdate.py index 682bbd122..6e5c08d05 100644 --- a/src/gui/editors/editdate.py +++ b/src/gui/editors/editdate.py @@ -54,7 +54,7 @@ __LOG = logging.getLogger(".EditDate") # GNOME modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -205,13 +205,13 @@ class EditDate(ManagedWindow): while True: response = self.window.run() - if response == gtk.RESPONSE_HELP: + if response == Gtk.ResponseType.HELP: display_help(webpage=WIKI_HELP_PAGE, section=WIKI_HELP_SEC) - elif response == gtk.RESPONSE_DELETE_EVENT: + elif response == Gtk.ResponseType.DELETE_EVENT: break else: - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: (the_quality, the_modifier, the_calendar, the_value, the_text, the_newyear) = self.build_date_from_ui() self.return_date = Date(self.date) diff --git a/src/gui/editors/editevent.py b/src/gui/editors/editevent.py index 7522e98a3..5104f6930 100644 --- a/src/gui/editors/editevent.py +++ b/src/gui/editors/editevent.py @@ -34,7 +34,7 @@ from gen.ggettext import sgettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -171,7 +171,7 @@ class EditEvent(EditPrimary): Create the notebook tabs and inserts them into the main window. """ - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.citation_list = CitationEmbedList(self.dbstate, self.uistate, diff --git a/src/gui/editors/editfamily.py b/src/gui/editors/editfamily.py index ac9cdd279..355427993 100644 --- a/src/gui/editors/editfamily.py +++ b/src/gui/editors/editfamily.py @@ -50,10 +50,10 @@ log = logging.getLogger(".") #------------------------------------------------------------------------- from gen.ggettext import gettext as _ from gui.ddtargets import DdTargets -import gtk -from gtk import gdk -import pango -import gobject +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import Pango +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -87,8 +87,8 @@ from Utils import preset_name SelectPerson = SelectorFactory('Person') -_RETURN = gdk.keyval_from_name("Return") -_KP_ENTER = gdk.keyval_from_name("KP_Enter") +_RETURN = Gdk.keyval_from_name("Return") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") _LEFT_BUTTON = 1 _RIGHT_BUTTON = 3 @@ -135,14 +135,14 @@ class ChildEmbedList(EmbeddedList): def get_popup_menu_items(self): return [ - (False, True, (gtk.STOCK_EDIT, _('Edit child')), + (False, True, (Gtk.STOCK_EDIT, _('Edit child')), self.edit_child_button_clicked), - (True, True, gtk.STOCK_ADD, self.add_button_clicked), + (True, True, Gtk.STOCK_ADD, self.add_button_clicked), (True, False, _('Add an existing child'), self.share_button_clicked), - (False, True, (gtk.STOCK_EDIT, _('Edit relationship')), + (False, True, (Gtk.STOCK_EDIT, _('Edit relationship')), self.edit_button_clicked), - (True, True, gtk.STOCK_REMOVE, self.del_button_clicked), + (True, True, Gtk.STOCK_REMOVE, self.del_button_clicked), ] def get_middle_click(self): @@ -194,7 +194,7 @@ class ChildEmbedList(EmbeddedList): ref.ref = person.get_handle() self.family.add_child_ref(ref) self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, + GObject.idle_add(self.tree.scroll_to_cell, len(self.family.get_child_ref_list()) - 1) self.call_edit_childref(ref) @@ -216,7 +216,7 @@ class ChildEmbedList(EmbeddedList): ref.ref = person.get_handle() self.family.add_child_ref(ref) self.rebuild() - gobject.idle_add(self.tree.scroll_to_cell, + GObject.idle_add(self.tree.scroll_to_cell, len(self.family.get_child_ref_list()) - 1) self.call_edit_childref(ref) @@ -616,7 +616,7 @@ class EditFamily(EditPrimary): def _create_tabbed_pages(self): - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.child_list = ChildEmbedList(self.dbstate, self.uistate, @@ -1093,9 +1093,9 @@ class EditFamily(EditPrimary): return name def button_activated(event, mouse_button): - if (event.type == gtk.gdk.BUTTON_PRESS and + if (event.type == Gdk.EventType.BUTTON_PRESS and event.button == mouse_button) or \ - (event.type == gtk.gdk.KEY_PRESS and + (event.type == Gdk.KEY_PRESS and event.keyval in (_RETURN, _KP_ENTER)): return True else: diff --git a/src/gui/editors/editldsord.py b/src/gui/editors/editldsord.py index d1a325cb3..6dfd31571 100644 --- a/src/gui/editors/editldsord.py +++ b/src/gui/editors/editldsord.py @@ -38,7 +38,7 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -239,7 +239,7 @@ class EditLdsOrd(EditSecondary): self.status_menu.change_menu(new_data) def _create_tabbed_pages(self): - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.citation_list = CitationEmbedList(self.dbstate, self.uistate, self.track, self.obj.get_citation_list()) @@ -405,7 +405,7 @@ class EditFamilyLdsOrd(EditSecondary): self.track_ref_for_deletion('status_menu') def _create_tabbed_pages(self): - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.srcref_list = CitationEmbedList(self.dbstate,self.uistate, self.track, self.obj.get_citation_list()) diff --git a/src/gui/editors/editlink.py b/src/gui/editors/editlink.py index 152b87238..6eac23434 100644 --- a/src/gui/editors/editlink.py +++ b/src/gui/editors/editlink.py @@ -25,7 +25,7 @@ # python modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk import re #------------------------------------------------------------------------- @@ -76,7 +76,7 @@ class EditLink(ManagedWindow): self.top.get_object("title"), _('Link Editor')) self.table = self.top.get_object('table27') - self.uri_list = gtk.combo_box_new_text() + self.uri_list = Gtk.ComboBoxText() for text in [_("Internet Address"), # 0 this order range above _("Event"), # 1 _("Family"), # 2 diff --git a/src/gui/editors/editmedia.py b/src/gui/editors/editmedia.py index 77f76109d..ca3118a35 100644 --- a/src/gui/editors/editmedia.py +++ b/src/gui/editors/editmedia.py @@ -35,7 +35,7 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -190,7 +190,7 @@ class EditMedia(EditPrimary): self.select.connect('clicked', self.select_file) def _create_tabbed_pages(self): - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.citation_tab = CitationEmbedList(self.dbstate, self.uistate, @@ -231,7 +231,7 @@ class EditMedia(EditPrimary): return (_('Edit Media Object'), self.get_menu_title()) def button_press_event(self, obj, event): - if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: + if event.button == 1 and event.type == Gdk.EventType._2BUTTON_PRESS: self.view_media(obj) def view_media(self, obj): diff --git a/src/gui/editors/editmediaref.py b/src/gui/editors/editmediaref.py index c4d69b6da..ced3f5f62 100644 --- a/src/gui/editors/editmediaref.py +++ b/src/gui/editors/editmediaref.py @@ -36,7 +36,7 @@ from gen.ggettext import sgettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GdkPixbuf #------------------------------------------------------------------------- # @@ -162,8 +162,8 @@ class EditMediaRef(EditReference): ebox_ref.connect('button-release-event', self.button_release_event_ref) ebox_ref.connect('motion-notify-event', self.motion_notify_event_ref) - ebox_ref.add_events(gtk.gdk.BUTTON_PRESS_MASK) - ebox_ref.add_events(gtk.gdk.BUTTON_RELEASE_MASK) + ebox_ref.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) + ebox_ref.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK) self.pixmap = self.top.get_object("pixmap") self.mimetext = self.top.get_object("type") @@ -395,7 +395,7 @@ class EditMediaRef(EditReference): else: try: fullpath = Utils.media_path_full(self.db, path) - pixbuf = gtk.gdk.pixbuf_new_from_file(fullpath) + pixbuf = GdkPixbuf.Pixbuf.new_from_file(fullpath) width = pixbuf.get_width() height = pixbuf.get_height() upper_x = min(self.rectangle[0], self.rectangle[2])/100. @@ -414,7 +414,7 @@ class EditMediaRef(EditReference): scale = const.THUMBSCALE / ratio x = int(scale * width) y = int(scale * height) - pixbuf = pixbuf.scale_simple(x, y, gtk.gdk.INTERP_BILINEAR) + pixbuf = pixbuf.scale_simple(x, y, GdkPixbuf.InterpType.BILINEAR) self.subpixmap.set_from_pixbuf(pixbuf) self.subpixmap.show() except: @@ -432,7 +432,7 @@ class EditMediaRef(EditReference): return (_('Media Reference Editor'),submenu_label) def button_press_event(self, obj, event): - if event.button==1 and event.type == gtk.gdk._2BUTTON_PRESS: + if event.button==1 and event.type == Gdk.EventType._2BUTTON_PRESS: photo_path = Utils.media_path_full(self.db, self.source.get_path()) open_file_with_default_application(photo_path) @@ -447,10 +447,10 @@ class EditMediaRef(EditReference): # prepare drawing of a feedback rectangle self.rect_pixbuf = self.subpixmap.get_pixbuf() w,h = self.rect_pixbuf.get_width(), self.rect_pixbuf.get_height() - self.rect_pixbuf_render = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, w, h) - cm = gtk.gdk.colormap_get_system() - color = cm.alloc_color(gtk.gdk.Color("blue")) - self.rect_pixmap = gtk.gdk.Pixmap(None, w, h, cm.get_visual().depth) + self.rect_pixbuf_render = GdkPixbuf.Pixbuf(GdkPixbuf.Colorspace.RGB, False, 8, w, h) + cm = Gdk.colormap_get_system() + color = cm.alloc_color(Gdk.Color("blue")) + self.rect_pixmap = Gdk.Pixmap(None, w, h, cm.get_visual().depth) self.rect_pixmap.set_colormap(cm) self.rect_gc = self.rect_pixmap.new_gc() self.rect_gc.set_foreground(color) @@ -479,7 +479,7 @@ class EditMediaRef(EditReference): x1, y1, width, height) self.rect_pixbuf_render.get_from_drawable(self.rect_pixmap, - gtk.gdk.colormap_get_system(), + Gdk.colormap_get_system(), 0,0,0,0, w, h) self.subpixmap.set_from_pixbuf(self.rect_pixbuf_render) @@ -490,8 +490,8 @@ class EditMediaRef(EditReference): """ # reset the crop on double-click or click+CTRL - if (event.button==1 and event.type == gtk.gdk._2BUTTON_PRESS) or \ - (event.button==1 and (event.state & gtk.gdk.CONTROL_MASK) ): + if (event.button==1 and event.type == Gdk.EventType._2BUTTON_PRESS) or \ + (event.button==1 and (event.get_state() & Gdk.ModifierType.CONTROL_MASK) ): self.corner1_x_spinbutton.set_value(0) self.corner1_y_spinbutton.set_value(0) self.corner2_x_spinbutton.set_value(100) diff --git a/src/gui/editors/editname.py b/src/gui/editors/editname.py index f43cbc46c..3ac7959ff 100644 --- a/src/gui/editors/editname.py +++ b/src/gui/editors/editname.py @@ -29,7 +29,7 @@ # Standard python modules # #------------------------------------------------------------------------- -import gobject +from gi.repository import GObject from gen.ggettext import gettext as _ from copy import copy @@ -38,7 +38,7 @@ from copy import copy # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -85,9 +85,9 @@ class GeneralNameTab(GrampsTab): @type widge: gtk widget """ GrampsTab.__init__(self, dbstate, uistate, track, name) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() eventbox.add(widget) - self.pack_start(eventbox) + self.pack_start(eventbox, True, True, 0) self._set_label(show_image=False) widget.connect('key_press_event', self.key_pressed) self.show_all() diff --git a/src/gui/editors/editnote.py b/src/gui/editors/editnote.py index 16aa334a3..22c3173e0 100644 --- a/src/gui/editors/editnote.py +++ b/src/gui/editors/editnote.py @@ -38,9 +38,9 @@ _LOG = logging.getLogger(".gui.editors.EditNote") # GTK libraries # #------------------------------------------------------------------------- -import gtk -import gobject -import pango +from gi.repository import Gtk +from gi.repository import GObject +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -88,9 +88,9 @@ class NoteTab(GrampsTab): @type widget: gtk widget """ GrampsTab.__init__(self, dbstate, uistate, track, name) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() eventbox.add(widget) - self.pack_start(eventbox) + self.pack_start(eventbox, True, True, 0) self._set_label(show_image=False) eventbox.connect('key_press_event', self.key_pressed) self.show_all() @@ -259,12 +259,12 @@ class EditNote(EditPrimary): def build_interface(self): self.texteditor = self.top.get_object('texteditor') self.texteditor.set_editable(not self.dbstate.db.readonly) - self.texteditor.set_wrap_mode(gtk.WRAP_WORD) + self.texteditor.set_wrap_mode(Gtk.WrapMode.WORD) # create a formatting toolbar if not self.dbstate.db.readonly: vbox = self.top.get_object('container') - vbox.pack_start(self.texteditor.get_toolbar(), + vbox.pack_start(label=self.texteditor.get_toolbar(), expand=False, fill=False) # setup initial values for textview and textbuffer diff --git a/src/gui/editors/editperson.py b/src/gui/editors/editperson.py index c27e48d5e..c8abc6e84 100644 --- a/src/gui/editors/editperson.py +++ b/src/gui/editors/editperson.py @@ -41,8 +41,8 @@ from gen.ggettext import sgettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -206,7 +206,7 @@ class EditPerson(EditPrimary): self.load_person_image() self.given.grab_focus() self._changed_name(None) - self.top.get_object("hboxmultsurnames").pack_start(self.surntab) + self.top.get_object("hboxmultsurnames").pack_start(self.surntab, True, True, 0) if len(self.obj.get_primary_name().get_surname_list()) > 1: self.multsurnfr.set_size_request(-1, @@ -419,7 +419,7 @@ class EditPerson(EditPrimary): obj.connect('changed', self._changed_name) self.preview_name = self.top.get_object("full_name") - self.preview_name.modify_font(pango.FontDescription('sans bold 12')) + self.preview_name.modify_font(Pango.FontDescription('sans bold 12')) def get_start_date(self): """ @@ -433,7 +433,7 @@ class EditPerson(EditPrimary): """ Create the notebook tabs and insert them into the main window. """ - notebook = gtk.Notebook() + notebook = Gtk.Notebook() notebook.set_scrollable(True) self.event_list = PersonEventEmbedList( @@ -589,7 +589,7 @@ class EditPerson(EditPrimary): main form. """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: media_list = self.obj.get_media_list() if media_list: @@ -617,7 +617,7 @@ class EditPerson(EditPrimary): available actions. """ - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_("Media Object")) obj = self.db.get_object_from_handle(photo.get_reference_handle()) if obj: @@ -656,17 +656,17 @@ class EditPerson(EditPrimary): Override from base class, the menuitems and actiongroups for the top of context menu. """ - self.all_action = gtk.ActionGroup("/PersonAll") - self.home_action = gtk.ActionGroup("/PersonHome") + self.all_action = Gtk.ActionGroup("/PersonAll") + self.home_action = Gtk.ActionGroup("/PersonHome") self.track_ref_for_deletion("all_action") self.track_ref_for_deletion("home_action") self.all_action.add_actions([ - ('ActivePerson', gtk.STOCK_APPLY, _("Make Active Person"), + ('ActivePerson', Gtk.STOCK_APPLY, _("Make Active Person"), None, None, self._make_active), ]) self.home_action.add_actions([ - ('HomePerson', gtk.STOCK_HOME, _("Make Home Person"), + ('HomePerson', Gtk.STOCK_HOME, _("Make Home Person"), None, None, self._make_home_person), ]) @@ -910,7 +910,7 @@ class EditPerson(EditPrimary): self.obj.get_primary_name()) self.multsurnfr.set_size_request(-1, int(config.get('interface.surname-box-height'))) - msurhbox.pack_start(self.surntab) + msurhbox.pack_start(self.surntab, True, True, 0) def load_person_image(self): """ @@ -1053,12 +1053,12 @@ class EditPerson(EditPrimary): #config.save() -class GenderDialog(gtk.MessageDialog): +class GenderDialog(Gtk.MessageDialog): def __init__(self, parent=None): - gtk.MessageDialog.__init__(self, + GObject.GObject.__init__(self, parent, - flags=gtk.DIALOG_MODAL, - type=gtk.MESSAGE_QUESTION, + flags=Gtk.DialogFlags.MODAL, + type=Gtk.MessageType.QUESTION, ) self.set_icon(ICON) self.set_title('') diff --git a/src/gui/editors/editpersonref.py b/src/gui/editors/editpersonref.py index 1e81c9a56..a95c152cc 100644 --- a/src/gui/editors/editpersonref.py +++ b/src/gui/editors/editpersonref.py @@ -39,7 +39,7 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -140,7 +140,7 @@ class EditPersonRef(EditSecondary): window. """ - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.srcref_list = CitationEmbedList(self.dbstate, self.uistate, self.track, diff --git a/src/gui/editors/editplace.py b/src/gui/editors/editplace.py index df6e7f4dc..0ffce7fa8 100644 --- a/src/gui/editors/editplace.py +++ b/src/gui/editors/editplace.py @@ -37,7 +37,7 @@ log = logging.getLogger(".") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -85,9 +85,9 @@ class MainLocTab(GrampsTab): @type widge: gtk widget """ GrampsTab.__init__(self, dbstate, uistate, track, name) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() eventbox.add(widget) - self.pack_start(eventbox) + self.pack_start(eventbox, True, True, 0) self._set_label(show_image=False) eventbox.connect('key_press_event', self.key_pressed) self.show_all() diff --git a/src/gui/editors/editprimary.py b/src/gui/editors/editprimary.py index 8857af3b5..22c43bb31 100644 --- a/src/gui/editors/editprimary.py +++ b/src/gui/editors/editprimary.py @@ -33,7 +33,7 @@ from gen.ggettext import gettext as _ # GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -305,7 +305,7 @@ class EditPrimary(ManagedWindow, DbGUIElement): """ from gui.plug.quick import create_quickreport_menu - self.popupmanager = gtk.UIManager() + self.popupmanager = Gtk.UIManager() #add custom actions (ui_top, action_groups) = self._top_contextmenu() for action in action_groups : @@ -316,7 +316,7 @@ class EditPrimary(ManagedWindow, DbGUIElement): (ui_qr, reportactions) = create_quickreport_menu(self.QR_CATEGORY, self.dbstate, self.uistate, self.obj.get_handle()) - self.report_action = gtk.ActionGroup("/PersonReport") + self.report_action = Gtk.ActionGroup("/PersonReport") self.report_action.add_actions(reportactions) self.report_action.set_visible(True) self.popupmanager.insert_action_group(self.report_action, -1) diff --git a/src/gui/editors/editreference.py b/src/gui/editors/editreference.py index e5f61de13..3bee635cf 100644 --- a/src/gui/editors/editreference.py +++ b/src/gui/editors/editreference.py @@ -26,7 +26,7 @@ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -68,9 +68,9 @@ class RefTab(GrampsTab): @type widge: gtk widget """ GrampsTab.__init__(self, dbstate, uistate, track, name) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() eventbox.add(widget) - self.pack_start(eventbox) + self.pack_start(eventbox, True, True, 0) self._set_label(show_image=False) widget.connect('key_press_event', self.key_pressed) self.show_all() diff --git a/src/gui/editors/editrepository.py b/src/gui/editors/editrepository.py index 40952b8f7..226f5b788 100644 --- a/src/gui/editors/editrepository.py +++ b/src/gui/editors/editrepository.py @@ -33,7 +33,7 @@ from gen.ggettext import gettext as _ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -105,7 +105,7 @@ class EditRepository(EditPrimary): def _create_tabbed_pages(self): - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.addr_tab = AddrEmbedList(self.dbstate, self.uistate, @@ -140,7 +140,7 @@ class EditRepository(EditPrimary): self._setup_notebook_tabs(notebook) notebook.show_all() - self.glade.get_object("vbox").pack_start(notebook, True, True) + self.glade.get_object("vbox").pack_start(notebook, True, True, 0) def _connect_signals(self): self.define_help_button(self.glade.get_object('help')) diff --git a/src/gui/editors/editsource.py b/src/gui/editors/editsource.py index 2a5165bb9..3e99054b5 100644 --- a/src/gui/editors/editsource.py +++ b/src/gui/editors/editsource.py @@ -37,7 +37,7 @@ LOG = logging.getLogger(".citation") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -128,7 +128,7 @@ class EditSource(EditPrimary): self.db.readonly) def _create_tabbed_pages(self): - notebook = gtk.Notebook() + notebook = Gtk.Notebook() self.note_tab = NoteTab(self.dbstate, self.uistate, diff --git a/src/gui/editors/edittaglist.py b/src/gui/editors/edittaglist.py index 4cc39955e..234bce2db 100644 --- a/src/gui/editors/edittaglist.py +++ b/src/gui/editors/edittaglist.py @@ -26,7 +26,7 @@ Tag editing module for Gramps. # GNOME modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -79,13 +79,13 @@ class EditTagList(ManagedWindow): while True: response = self.window.run() - if response == gtk.RESPONSE_HELP: + if response == Gtk.ResponseType.HELP: display_help(webpage=WIKI_HELP_PAGE, section=WIKI_HELP_SEC) - elif response == gtk.RESPONSE_DELETE_EVENT: + elif response == Gtk.ResponseType.DELETE_EVENT: break else: - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: self.return_list = [(row[0], row[2]) for row in self.namemodel.model if row[1]] @@ -98,7 +98,7 @@ class EditTagList(ManagedWindow): """ # pylint: disable-msg=E1101 title = _("%(title)s - Gramps") % {'title': _("Edit Tags")} - top = gtk.Dialog(title) + top = Gtk.Dialog(title) top.set_default_size(360, 400) top.set_modal(True) top.set_has_separator(False) @@ -107,17 +107,17 @@ class EditTagList(ManagedWindow): columns = [('', -1, 300), (' ', -1, 25, TOGGLE, True, None), (_('Tag'), -1, 300)] - view = gtk.TreeView() + view = Gtk.TreeView() self.namemodel = ListModel(view, columns) - slist = gtk.ScrolledWindow() + slist = Gtk.ScrolledWindow() slist.add_with_viewport(view) - slist.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + slist.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) top.vbox.pack_start(slist, 1, 1, 5) - top.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP) - top.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) - top.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) + top.add_button(Gtk.STOCK_HELP, Gtk.ResponseType.HELP) + top.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) + top.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) top.show_all() return top diff --git a/src/gui/editors/filtereditor.py b/src/gui/editors/filtereditor.py index e549fc8cb..25f842939 100644 --- a/src/gui/editors/filtereditor.py +++ b/src/gui/editors/filtereditor.py @@ -45,8 +45,8 @@ log = logging.getLogger(".filtereditor") # GTK/GNOME # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -117,10 +117,10 @@ def by_rule_name(f, s): # MyBoolean - check button with standard interface # #------------------------------------------------------------------------- -class MyBoolean(gtk.CheckButton): +class MyBoolean(Gtk.CheckButton): def __init__(self, label=None): - gtk.CheckButton.__init__(self, label) + GObject.GObject.__init__(self, label) self.show() def get_text(self): @@ -147,11 +147,11 @@ class MyBoolean(gtk.CheckButton): # MyInteger - spin button with standard interface # #------------------------------------------------------------------------- -class MyInteger(gtk.SpinButton): +class MyInteger(Gtk.SpinButton): def __init__(self, min, max): - gtk.SpinButton.__init__(self) - self.set_adjustment(gtk.Adjustment(min, min, max, 1)) + GObject.GObject.__init__(self) + self.set_adjustment(Gtk.Adjustment(min, min, max, 1)) self.show() def get_text(self): @@ -165,7 +165,7 @@ class MyInteger(gtk.SpinButton): # MyFilters - Combo box with list of filters with a standard interface # #------------------------------------------------------------------------- -class MyFilters(gtk.ComboBox): +class MyFilters(Gtk.ComboBox): """ Class to present a combobox of selectable filters. """ @@ -177,10 +177,10 @@ class MyFilters(gtk.ComboBox): If filter_name is given, it will be excluded from the dropdown box. """ - gtk.ComboBox.__init__(self) - store = gtk.ListStore(gobject.TYPE_STRING) + GObject.GObject.__init__(self) + store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell, True) self.add_attribute(cell, 'text', 0) #remove own name from the list if given. @@ -208,13 +208,13 @@ class MyFilters(gtk.ComboBox): # MyList - Combo box to allow entries # #------------------------------------------------------------------------- -class MyList(gtk.ComboBox): +class MyList(Gtk.ComboBox): def __init__(self, clist, clist_trans, default=0): - gtk.ComboBox.__init__(self) - store = gtk.ListStore(gobject.TYPE_STRING) + GObject.GObject.__init__(self) + store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell, True) self.add_attribute(cell, 'text', 0) self.clist = clist @@ -236,13 +236,13 @@ class MyList(gtk.ComboBox): # MyLesserEqualGreater - Combo box to allow selection of "<", "=", or ">" # #------------------------------------------------------------------------- -class MyLesserEqualGreater(gtk.ComboBox): +class MyLesserEqualGreater(Gtk.ComboBox): def __init__(self, default=0): - gtk.ComboBox.__init__(self) - store = gtk.ListStore(gobject.TYPE_STRING) + GObject.GObject.__init__(self) + store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell, True) self.add_attribute(cell, 'text', 0) self.clist = ['lesser than', 'equal to', 'greater than'] @@ -270,10 +270,10 @@ class MyLesserEqualGreater(gtk.ComboBox): # a standard interface # #------------------------------------------------------------------------- -class MyPlaces(gtk.Entry): +class MyPlaces(Gtk.Entry): def __init__(self, places): - gtk.Entry.__init__(self) + GObject.GObject.__init__(self) fill_entry(self, places) self.show() @@ -283,7 +283,7 @@ class MyPlaces(gtk.Entry): # MyID - Person/GRAMPS ID selection box with a standard interface # #------------------------------------------------------------------------- -class MyID(gtk.HBox): +class MyID(Gtk.HBox): _invalid_id_txt = _('Not a valid ID') _empty_id_txt = _invalid_id_txt @@ -300,20 +300,20 @@ class MyID(gtk.HBox): } def __init__(self, dbstate, uistate, track, namespace='Person'): - gtk.HBox.__init__(self, False, 6) + GObject.GObject.__init__(self, False, 6) self.dbstate = dbstate self.db = dbstate.db self.uistate = uistate self.track = track self.namespace = namespace - self.entry = gtk.Entry() + self.entry = Gtk.Entry() self.entry.show() - self.button = gtk.Button() + self.button = Gtk.Button() self.button.set_label(_('Select...')) self.button.connect('clicked', self.button_press) self.button.show() - self.pack_start(self.entry) + self.pack_start(self.entry, True, True, 0) self.add(self.button) self.button.set_tooltip_text(_('Select %s from a list') % self.obj_name[namespace]) @@ -393,10 +393,11 @@ class MySource(MyID): # MySelect # #------------------------------------------------------------------------- -class MySelect(gtk.ComboBoxEntry): +class MySelect(Gtk.ComboBox): def __init__(self, type_class): - gtk.ComboBoxEntry.__init__(self) + #we need to inherit and have an combobox with an entry + Gtk.Combobox.__init__(self, has_entry=True) self.type_class = type_class self.sel = StandardCustomSelector(type_class._I2SMAP, self, type_class._CUSTOM, @@ -416,10 +417,10 @@ class MySelect(gtk.ComboBoxEntry): # MyEntry # #------------------------------------------------------------------------- -class MyEntry(gtk.Entry): +class MyEntry(Gtk.Entry): def __init__(self): - gtk.Entry.__init__(self) + GObject.GObject.__init__(self) self.show() #------------------------------------------------------------------------- @@ -450,7 +451,7 @@ class EditRule(ManagedWindow): self.rname = self.get_widget('ruletree') self.rule_name = self.get_widget('rulename') - self.notebook = gtk.Notebook() + self.notebook = Gtk.Notebook() self.notebook.set_show_tabs(0) self.notebook.set_show_border(0) self.notebook.show() @@ -485,24 +486,24 @@ class EditRule(ManagedWindow): tlist = [] self.page.append((class_obj, vallist, tlist)) pos = 0 - l2 = gtk.Label(class_obj.name) + l2 = Gtk.Label(label=class_obj.name) l2.set_alignment(0, 0.5) l2.show() - c = gtk.TreeView() + c = Gtk.TreeView() c.set_data('d', pos) c.show() the_map[class_obj] = c # Only add a table with parameters if there are any parameters if arglist: - table = gtk.Table(3, len(arglist)) + table = Gtk.Table(3, len(arglist)) else: - table = gtk.Table(1, 1) + table = Gtk.Table(1, 1) table.set_border_width(6) table.set_col_spacings(6) table.set_row_spacings(6) table.show() for v in arglist: - l = gtk.Label(v) + l = Gtk.Label(label=v) l.set_alignment(1, 0.5) l.show() if v == _('Place:'): @@ -555,21 +556,21 @@ class EditRule(ManagedWindow): else: t = MyEntry() tlist.append(t) - table.attach(l, 1, 2, pos, pos+1, gtk.FILL, 0, 5, 5) - table.attach(t, 2, 3, pos, pos+1, gtk.EXPAND|gtk.FILL, 0, 5, 5) + table.attach(l, 1, 2, pos, pos+1, Gtk.AttachOptions.FILL, 0, 5, 5) + table.attach(t, 2, 3, pos, pos+1, Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, 0, 5, 5) pos += 1 # put the table into a scrollable area: - scrolled_win = gtk.ScrolledWindow() + scrolled_win = Gtk.ScrolledWindow() scrolled_win.add_with_viewport(table) - scrolled_win.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scrolled_win.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scrolled_win.show() - self.notebook.append_page(scrolled_win, gtk.Label(class_obj.name)) + self.notebook.append_page(scrolled_win, Gtk.Label(label=class_obj.name)) self.class2page[class_obj] = self.page_num self.page_num = self.page_num + 1 self.page_num = 0 - self.store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT) + self.store = Gtk.TreeStore(GObject.TYPE_STRING, GObject.TYPE_PYOBJECT) self.selection = self.rname.get_selection() - col = gtk.TreeViewColumn(_('Rule Name'), gtk.CellRendererText(), + col = Gtk.TreeViewColumn(_('Rule Name'), Gtk.CellRendererText(), text=0) self.rname.append_column(col) self.rname.set_model(self.store) @@ -640,11 +641,11 @@ class EditRule(ManagedWindow): self.selection.select_iter(iter) def _button_press(self, obj, event): - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: return self.expand_collapse() def _key_press(self, obj, event): - if event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter): + if event.keyval in (Gdk.KEY_Return, Gdk.KEY_KP_Enter): return self.expand_collapse() return False @@ -886,16 +887,16 @@ class ShowResults(ManagedWindow): self.get_widget('test_title'), _('Filter Test')) - render = gtk.CellRendererText() + render = Gtk.CellRendererText() tree = self.get_widget('list') - model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) tree.set_model(model) - column_n = gtk.TreeViewColumn(_('Name'), render, text=0) + column_n = Gtk.TreeViewColumn(_('Name'), render, text=0) tree.append_column(column_n) - column_n = gtk.TreeViewColumn(_('ID'), render, text=1) + column_n = Gtk.TreeViewColumn(_('ID'), render, text=1) tree.append_column(column_n) self.get_widget('test_close').connect('clicked', self.close) diff --git a/src/gui/editors/objectentries.py b/src/gui/editors/objectentries.py index 8d28964a4..5f6792f71 100644 --- a/src/gui/editors/objectentries.py +++ b/src/gui/editors/objectentries.py @@ -36,8 +36,8 @@ _LOG = logging.getLogger(".objectentries") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -from pango import ELLIPSIZE_END +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -73,13 +73,13 @@ class ObjEntry(object): def __init__(self, dbstate, uistate, track, label, set_val, get_val, add_edt, share): """Pass the dbstate and uistate and present track. - label is a gtk.Label that shows the persent value + label is a Gtk.Label that shows the persent value set_val is function that is called when handle changes, use it to update the calling module get_val is function that is called to obtain handle from calling module - share is the gtk.Button to call the object selector or del connect - add_edt is the gtk.Button with add or edit value. Pass None if + share is the Gtk.Button to call the object selector or del connect + add_edt is the Gtk.Button with add or edit value. Pass None if this button should not be present. """ self.label = label @@ -133,7 +133,7 @@ class ObjEntry(object): self.label.set_use_markup(True) else: self.label.set_text(name) - self.label.set_ellipsize(ELLIPSIZE_END) + self.label.set_ellipsize(Pango.ELLIPSIZE_END) def _init_dnd(self): """inheriting objects must set this @@ -217,26 +217,26 @@ class ObjEntry(object): self.share.remove(i) if use_add: - image = gtk.Image() - image.set_from_stock(gtk.STOCK_REMOVE, gtk.ICON_SIZE_BUTTON) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_REMOVE, Gtk.IconSize.BUTTON) image.show() self.share.add(image) self.share.set_tooltip_text(self.DEL_STR) if self.add_edt is not None: - image = gtk.Image() - image.set_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_BUTTON) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_EDIT, Gtk.IconSize.BUTTON) image.show() self.add_edt.add(image) self.add_edt.set_tooltip_text(self.EDIT_STR) else: - image = gtk.Image() - image.set_from_stock(gtk.STOCK_INDEX, gtk.ICON_SIZE_BUTTON) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_INDEX, Gtk.IconSize.BUTTON) image.show() self.share.add(image) self.share.set_tooltip_text(self.SHARE_STR) if self.add_edt is not None: - image = gtk.Image() - image.set_from_stock(gtk.STOCK_ADD, gtk.ICON_SIZE_BUTTON) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_ADD, Gtk.IconSize.BUTTON) image.show() self.add_edt.add(image) self.add_edt.set_tooltip_text(self.ADD_STR) @@ -262,8 +262,8 @@ class PlaceEntry(ObjEntry): def _init_dnd(self): """connect drag and drop of places """ - self.label.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.PLACE_LINK.target()], - gtk.gdk.ACTION_COPY) + self.label.drag_dest_set(Gtk.DestDefaults.ALL, [DdTargets.PLACE_LINK.target()], + Gdk.DragAction.COPY) self.label.connect('drag_data_received', self.drag_data_received) def get_from_handle(self, handle): @@ -313,8 +313,8 @@ class MediaEntry(ObjEntry): def _init_dnd(self): """connect drag and drop of places """ - self.label.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.MEDIAOBJ.target()], - gtk.gdk.ACTION_COPY) + self.label.drag_dest_set(Gtk.DestDefaults.ALL, [DdTargets.MEDIAOBJ.target()], + Gdk.DragAction.COPY) self.label.connect('drag_data_received', self.drag_data_received) def get_from_handle(self, handle): @@ -375,8 +375,8 @@ class NoteEntry(ObjEntry): def _init_dnd(self): """connect drag and drop of places """ - self.label.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.NOTE_LINK.target()], - gtk.gdk.ACTION_COPY) + self.label.drag_dest_set(Gtk.DestDefaults.ALL, [DdTargets.NOTE_LINK.target()], + Gdk.DragAction.COPY) self.label.connect('drag_data_received', self.drag_data_received) def get_from_handle(self, handle): diff --git a/src/gui/filters/_filtercombobox.py b/src/gui/filters/_filtercombobox.py index 1709d1e03..ef3e5134b 100644 --- a/src/gui/filters/_filtercombobox.py +++ b/src/gui/filters/_filtercombobox.py @@ -29,8 +29,8 @@ Package providing filtering framework for GRAMPS. # GTK # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -44,12 +44,12 @@ from gen.filters import CustomFilters # FilterComboBox # #------------------------------------------------------------------------- -class FilterComboBox(gtk.ComboBox): +class FilterComboBox(Gtk.ComboBox): def set(self,local_filters,default=""): - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell,True) self.add_attribute(cell,'text',0) diff --git a/src/gui/filters/_filtermenu.py b/src/gui/filters/_filtermenu.py index 3ad13a21a..3917253ba 100644 --- a/src/gui/filters/_filtermenu.py +++ b/src/gui/filters/_filtermenu.py @@ -25,8 +25,8 @@ # GTK # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -36,7 +36,7 @@ import gobject def build_filter_model(space, local = []): from gen.filters import CustomFilters - model = gtk.ListStore(gobject.TYPE_STRING, object) + model = Gtk.ListStore(GObject.TYPE_STRING, object) if isinstance(space, basestring): flist = local + CustomFilters.get_filters(space) diff --git a/src/gui/filters/_filterstore.py b/src/gui/filters/_filterstore.py index c1a896f6c..a903aaf69 100644 --- a/src/gui/filters/_filterstore.py +++ b/src/gui/filters/_filterstore.py @@ -29,7 +29,7 @@ Package providing filtering framework for GRAMPS. # GTK # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk from gen.ggettext import gettext as _ #------------------------------------------------------------------------- @@ -44,10 +44,10 @@ from gen.filters import CustomFilters # FilterStore # #------------------------------------------------------------------------- -class FilterStore(gtk.ListStore): +class FilterStore(Gtk.ListStore): def __init__(self, local_filters=[], namespace="generic", default=""): - gtk.ListStore.__init__(self, str) + GObject.GObject.__init__(self, str) self.list_map = [] self.def_index = 0 diff --git a/src/gui/filters/_searchbar.py b/src/gui/filters/_searchbar.py index 11b7f5a80..d61e767d2 100644 --- a/src/gui/filters/_searchbar.py +++ b/src/gui/filters/_searchbar.py @@ -17,7 +17,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -import gobject +from gi.repository import GObject # $Id$ @@ -30,11 +30,12 @@ Package providing filtering framework for GRAMPS. # GTK # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gdk +from gi.repository import Gtk from gen.ggettext import gettext as _ -_RETURN = gtk.gdk.keyval_from_name("Return") -_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter") +_RETURN = Gdk.keyval_from_name("Return") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") #------------------------------------------------------------------------- # @@ -50,14 +51,14 @@ class SearchBar(object): self.apply_text = '' self.visible = False - self.filterbar = gtk.HBox() - self.filter_text = gtk.Entry() - self.filter_button = gtk.Button(stock=gtk.STOCK_FIND) - self.clear_button = gtk.Button(stock=gtk.STOCK_CLEAR) - self.filter_list = gtk.ComboBox() - self.filter_model = gtk.ListStore(gobject.TYPE_STRING, - gobject.TYPE_INT, - gobject.TYPE_BOOLEAN) + self.filterbar = Gtk.HBox() + self.filter_text = Gtk.Entry() + self.filter_button = Gtk.Button(stock=Gtk.STOCK_FIND) + self.clear_button = Gtk.Button(stock=Gtk.STOCK_CLEAR) + self.filter_list = Gtk.ComboBox() + self.filter_model = Gtk.ListStore(GObject.TYPE_STRING, + GObject.TYPE_INT, + GObject.TYPE_BOOLEAN) def destroy(self): """Unset all things that can block garbage collection. @@ -80,10 +81,10 @@ class SearchBar(object): self.clear_button.connect( 'clicked', self.apply_clear) self.clear_button.set_sensitive(False) - self.filterbar.pack_start(self.filter_list, False) - self.filterbar.pack_start(self.filter_text, True) - self.filterbar.pack_end(self.clear_button, False) - self.filterbar.pack_end(self.filter_button, False) + self.filterbar.pack_start(self.filter_list, False, True, 0) + self.filterbar.pack_start(self.filter_text, True, True, 0) + self.filterbar.pack_end(self.clear_button, False, True, 0) + self.filterbar.pack_end(self.filter_button, False, True, 0) return self.filterbar @@ -95,7 +96,7 @@ class SearchBar(object): self.filter_model.clear() old_value = self.filter_list.get_active() - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.filter_list.clear() self.filter_list.pack_start(cell, True) self.filter_list.add_attribute(cell, 'text', 0) @@ -138,7 +139,7 @@ class SearchBar(object): self.clear_button.set_sensitive(True) def key_press(self, obj, event): - if not (event.state & gtk.gdk.CONTROL_MASK): + if not (event.get_state() & Gdk.ModifierType.CONTROL_MASK): if event.keyval in (_RETURN, _KP_ENTER): self.filter_button.set_sensitive(False) self.clear_button.set_sensitive(True) diff --git a/src/gui/filters/sidebar/_citationsidebarfilter.py b/src/gui/filters/sidebar/_citationsidebarfilter.py index 7ead4e2b9..56c277904 100644 --- a/src/gui/filters/sidebar/_citationsidebarfilter.py +++ b/src/gui/filters/sidebar/_citationsidebarfilter.py @@ -33,7 +33,7 @@ from gen.ggettext import gettext as _ # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -59,34 +59,34 @@ class CitationSidebarFilter(SidebarFilter): def __init__(self, dbstate, uistate, clicked): self.clicked_func = clicked - self.filter_id = gtk.Entry() - self.filter_page = gtk.Entry() - self.filter_date = gtk.Entry() + self.filter_id = Gtk.Entry() + self.filter_page = Gtk.Entry() + self.filter_date = Gtk.Entry() - self.filter_conf = gtk.ComboBox() - model = gtk.ListStore(str) + self.filter_conf = Gtk.ComboBox() + model = Gtk.ListStore(str) for conf_value in sorted(confidence.keys()): model.append((confidence[conf_value],)) self.filter_conf.set_model(model) self.filter_conf.set_active(2) # gen.lib.Citation.CONF_NORMAL - self.filter_note = gtk.Entry() + self.filter_note = Gtk.Entry() - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) - self.generic = gtk.ComboBox() + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Citation") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) self.generic.add_attribute(cell, 'text', 0) self.on_filters_changed('Citation') - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.filter_conf.pack_start(cell, True) diff --git a/src/gui/filters/sidebar/_eventsidebarfilter.py b/src/gui/filters/sidebar/_eventsidebarfilter.py index 184b3aa30..8a2e1221d 100644 --- a/src/gui/filters/sidebar/_eventsidebarfilter.py +++ b/src/gui/filters/sidebar/_eventsidebarfilter.py @@ -32,7 +32,7 @@ from gen.ggettext import gettext as _ # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -62,7 +62,7 @@ class EventSidebarFilter(SidebarFilter): self.filter_desc = widgets.BasicEntry() self.filter_event = gen.lib.Event() self.filter_event.set_type((gen.lib.EventType.CUSTOM, u'')) - self.etype = gtk.ComboBoxEntry() + self.etype = Gtk.ComboBox(has_entry=True) self.event_menu = widgets.MonitoredDataType( self.etype, @@ -74,21 +74,21 @@ class EventSidebarFilter(SidebarFilter): self.filter_place = widgets.BasicEntry() self.filter_note = widgets.BasicEntry() - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) - self.generic = gtk.ComboBox() + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Event") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) self.generic.add_attribute(cell, 'text', 0) self.on_filters_changed('Event') - self.etype.child.set_width_chars(5) + self.etype.get_child().set_width_chars(5) self.add_text_entry(_('ID'), self.filter_id) self.add_text_entry(_('Description'), self.filter_desc) @@ -107,7 +107,7 @@ class EventSidebarFilter(SidebarFilter): self.filter_date.set_text(u'') self.filter_place.set_text(u'') self.filter_note.set_text(u'') - self.etype.child.set_text(u'') + self.etype.get_child().set_text(u'') self.generic.set_active(0) def get_filter(self): diff --git a/src/gui/filters/sidebar/_familysidebarfilter.py b/src/gui/filters/sidebar/_familysidebarfilter.py index 9d49f85d0..48385aa92 100644 --- a/src/gui/filters/sidebar/_familysidebarfilter.py +++ b/src/gui/filters/sidebar/_familysidebarfilter.py @@ -33,7 +33,7 @@ from gen.ggettext import gettext as _ # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -69,11 +69,11 @@ class FamilySidebarFilter(SidebarFilter): self.filter_event = gen.lib.Event() self.filter_event.set_type((gen.lib.EventType.CUSTOM, u'')) - self.etype = gtk.ComboBoxEntry() + self.etype = Gtk.ComboBox(has_entry=True) self.family_stub = gen.lib.Family() self.family_stub.set_relationship((gen.lib.FamilyRelType.CUSTOM, u'')) - self.rtype = gtk.ComboBoxEntry() + self.rtype = Gtk.ComboBox(has_entry=True) self.event_menu = widgets.MonitoredDataType( self.etype, @@ -87,29 +87,29 @@ class FamilySidebarFilter(SidebarFilter): self.filter_note = widgets.BasicEntry() - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) - self.tag = gtk.ComboBox() - self.generic = gtk.ComboBox() + self.tag = Gtk.ComboBox() + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Family") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) self.generic.add_attribute(cell, 'text', 0) self.on_filters_changed('Family') - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.tag.pack_start(cell, True) self.tag.add_attribute(cell, 'text', 0) - self.etype.child.set_width_chars(5) - self.rtype.child.set_width_chars(5) + self.etype.get_child().set_width_chars(5) + self.rtype.get_child().set_width_chars(5) self.add_text_entry(_('ID'), self.filter_id) self.add_text_entry(_('Father'), self.filter_father) @@ -128,8 +128,8 @@ class FamilySidebarFilter(SidebarFilter): self.filter_mother.set_text(u'') self.filter_child.set_text(u'') self.filter_note.set_text(u'') - self.etype.child.set_text(u'') - self.rtype.child.set_text(u'') + self.etype.get_child().set_text(u'') + self.rtype.get_child().set_text(u'') self.tag.set_active(0) self.generic.set_active(0) @@ -223,7 +223,7 @@ class FamilySidebarFilter(SidebarFilter): """ Update the list of tags in the tag filter. """ - model = gtk.ListStore(str) + model = Gtk.ListStore(str) model.append(('',)) for tag_name in tag_list: model.append((tag_name,)) diff --git a/src/gui/filters/sidebar/_mediasidebarfilter.py b/src/gui/filters/sidebar/_mediasidebarfilter.py index 386480b38..aa978fe48 100644 --- a/src/gui/filters/sidebar/_mediasidebarfilter.py +++ b/src/gui/filters/sidebar/_mediasidebarfilter.py @@ -33,7 +33,7 @@ from gen.ggettext import gettext as _ # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -65,22 +65,22 @@ class MediaSidebarFilter(SidebarFilter): self.filter_date = widgets.BasicEntry() self.filter_note = widgets.BasicEntry() - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) - self.tag = gtk.ComboBox() - self.generic = gtk.ComboBox() + self.tag = Gtk.ComboBox() + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Media") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) self.generic.add_attribute(cell, 'text', 0) self.on_filters_changed('Media') - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.tag.pack_start(cell, True) @@ -169,7 +169,7 @@ class MediaSidebarFilter(SidebarFilter): """ Update the list of tags in the tag filter. """ - model = gtk.ListStore(str) + model = Gtk.ListStore(str) model.append(('',)) for tag_name in tag_list: model.append((tag_name,)) diff --git a/src/gui/filters/sidebar/_notesidebarfilter.py b/src/gui/filters/sidebar/_notesidebarfilter.py index e0a7490cd..c0f8d7586 100644 --- a/src/gui/filters/sidebar/_notesidebarfilter.py +++ b/src/gui/filters/sidebar/_notesidebarfilter.py @@ -33,7 +33,7 @@ from gen.ggettext import gettext as _ # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -63,34 +63,34 @@ class NoteSidebarFilter(SidebarFilter): self.note = Note() self.note.set_type((NoteType.CUSTOM,'')) - self.ntype = gtk.ComboBoxEntry() + self.ntype = Gtk.ComboBox(has_entry=True) self.event_menu = widgets.MonitoredDataType( self.ntype, self.note.set_type, self.note.get_type) - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) - self.tag = gtk.ComboBox() - self.generic = gtk.ComboBox() + self.tag = Gtk.ComboBox() + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Note") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) self.generic.add_attribute(cell, 'text', 0) self.on_filters_changed('Note') - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.tag.pack_start(cell, True) self.tag.add_attribute(cell, 'text', 0) - self.ntype.child.set_width_chars(5) + self.ntype.get_child().set_width_chars(5) self.add_text_entry(_('ID'), self.filter_id) self.add_text_entry(_('Text'), self.filter_text) @@ -102,7 +102,7 @@ class NoteSidebarFilter(SidebarFilter): def clear(self, obj): self.filter_id.set_text('') self.filter_text.set_text('') - self.ntype.child.set_text('') + self.ntype.get_child().set_text('') self.tag.set_active(0) self.generic.set_active(0) @@ -158,7 +158,7 @@ class NoteSidebarFilter(SidebarFilter): """ Update the list of tags in the tag filter. """ - model = gtk.ListStore(str) + model = Gtk.ListStore(str) model.append(('',)) for tag_name in tag_list: model.append((tag_name,)) diff --git a/src/gui/filters/sidebar/_personsidebarfilter.py b/src/gui/filters/sidebar/_personsidebarfilter.py index 0413db748..468de4c76 100644 --- a/src/gui/filters/sidebar/_personsidebarfilter.py +++ b/src/gui/filters/sidebar/_personsidebarfilter.py @@ -34,7 +34,7 @@ import locale # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -79,40 +79,40 @@ class PersonSidebarFilter(SidebarFilter): self.filter_death = widgets.BasicEntry() self.filter_event = gen.lib.Event() self.filter_event.set_type((gen.lib.EventType.CUSTOM, u'')) - self.etype = gtk.ComboBoxEntry() + self.etype = Gtk.ComboBox(has_entry=True) self.event_menu = widgets.MonitoredDataType( self.etype, self.filter_event.set_type, self.filter_event.get_type) self.filter_note = widgets.BasicEntry() - self.filter_gender = gtk.combo_box_new_text() + self.filter_gender = Gtk.ComboBoxText() map(self.filter_gender.append_text, [ _('any'), _('male'), _('female'), _('unknown') ]) self.filter_gender.set_active(0) - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) - self.tag = gtk.ComboBox() - self.generic = gtk.ComboBox() + self.tag = Gtk.ComboBox() + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Person") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) self.generic.add_attribute(cell, 'text', 0) self.on_filters_changed('Person') - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.tag.pack_start(cell, True) self.tag.add_attribute(cell, 'text', 0) - self.etype.child.set_width_chars(5) + self.etype.get_child().set_width_chars(5) exdate1 = gen.lib.Date() exdate2 = gen.lib.Date() @@ -145,7 +145,7 @@ class PersonSidebarFilter(SidebarFilter): self.filter_death.set_text(u'') self.filter_note.set_text(u'') self.filter_gender.set_active(0) - self.etype.child.set_text(u'') + self.etype.get_child().set_text(u'') self.tag.set_active(0) self.generic.set_active(0) @@ -262,7 +262,7 @@ class PersonSidebarFilter(SidebarFilter): """ Update the list of tags in the tag filter. """ - model = gtk.ListStore(str) + model = Gtk.ListStore(str) model.append(('',)) for tag_name in tag_list: model.append((tag_name,)) diff --git a/src/gui/filters/sidebar/_placesidebarfilter.py b/src/gui/filters/sidebar/_placesidebarfilter.py index edc37981c..1cb7aaf40 100644 --- a/src/gui/filters/sidebar/_placesidebarfilter.py +++ b/src/gui/filters/sidebar/_placesidebarfilter.py @@ -34,7 +34,7 @@ from gen.ggettext import gettext as _ # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -72,13 +72,13 @@ class PlaceSidebarFilter(SidebarFilter): self.filter_parish = widgets.BasicEntry() self.filter_note = widgets.BasicEntry() - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) - self.generic = gtk.ComboBox() + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Place") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) diff --git a/src/gui/filters/sidebar/_reposidebarfilter.py b/src/gui/filters/sidebar/_reposidebarfilter.py index c12820146..7c6627891 100644 --- a/src/gui/filters/sidebar/_reposidebarfilter.py +++ b/src/gui/filters/sidebar/_reposidebarfilter.py @@ -32,7 +32,7 @@ from gen.ggettext import gettext as _ # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -65,7 +65,7 @@ class RepoSidebarFilter(SidebarFilter): self.repo = Repository() self.repo.set_type((RepositoryType.CUSTOM,'')) - self.rtype = gtk.ComboBoxEntry() + self.rtype = Gtk.ComboBox(has_entry=True) self.event_menu = widgets.MonitoredDataType( self.rtype, self.repo.set_type, @@ -73,21 +73,21 @@ class RepoSidebarFilter(SidebarFilter): self.filter_note = widgets.BasicEntry() - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) - self.generic = gtk.ComboBox() + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Repository") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) self.generic.add_attribute(cell, 'text', 0) self.on_filters_changed('Repository') - self.rtype.child.set_width_chars(5) + self.rtype.get_child().set_width_chars(5) self.add_text_entry(_('ID'), self.filter_id) self.add_text_entry(_('Name'), self.filter_title) @@ -103,7 +103,7 @@ class RepoSidebarFilter(SidebarFilter): self.filter_title.set_text('') self.filter_address.set_text('') self.filter_url.set_text('') - self.rtype.child.set_text('') + self.rtype.get_child().set_text('') self.filter_note.set_text('') self.generic.set_active(0) diff --git a/src/gui/filters/sidebar/_sidebarfilter.py b/src/gui/filters/sidebar/_sidebarfilter.py index c4be2b5fb..534d4dceb 100644 --- a/src/gui/filters/sidebar/_sidebarfilter.py +++ b/src/gui/filters/sidebar/_sidebarfilter.py @@ -23,19 +23,20 @@ from gen.ggettext import gettext as _ from bisect import insort_left -import gtk -import pango +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import Pango from gui import widgets from gui.dbguielement import DbGUIElement from gen.config import config -_RETURN = gtk.gdk.keyval_from_name("Return") -_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter") +_RETURN = Gdk.keyval_from_name("Return") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") class SidebarFilter(DbGUIElement): _FILTER_WIDTH = 20 - _FILTER_ELLIPSIZE = pango.ELLIPSIZE_END + _FILTER_ELLIPSIZE = Pango.EllipsizeMode.END def __init__(self, dbstate, uistate, namespace): self.signal_map = { @@ -47,15 +48,15 @@ class SidebarFilter(DbGUIElement): DbGUIElement.__init__(self, dbstate.db) self.position = 1 - self.vbox = gtk.VBox() - self.table = gtk.Table(4, 11) - self.vbox.pack_start(self.table, False, False) + self.vbox = Gtk.VBox() + self.table = Gtk.Table(4, 11) + self.vbox.pack_start(self.table, False, False, 0) self.table.set_border_width(6) self.table.set_row_spacings(6) self.table.set_col_spacing(0, 6) self.table.set_col_spacing(1, 6) - self.apply_btn = gtk.Button(stock=gtk.STOCK_FIND) - self.clear_btn = gtk.Button() + self.apply_btn = Gtk.Button(stock=Gtk.STOCK_FIND) + self.clear_btn = Gtk.Button() self._init_interface() uistate.connect('filters-changed', self.on_filters_changed) @@ -71,28 +72,28 @@ class SidebarFilter(DbGUIElement): self.apply_btn.connect('clicked', self.clicked) - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.show() - image = gtk.Image() - image.set_from_stock(gtk.STOCK_UNDO, gtk.ICON_SIZE_BUTTON) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_UNDO, Gtk.IconSize.BUTTON) image.show() - label = gtk.Label(_('Reset')) + label = Gtk.Label(label=_('Reset')) label.show() - hbox.pack_start(image, False, False) + hbox.pack_start(image, False, False, 0) hbox.pack_start(label, False, True) hbox.set_spacing(4) self.clear_btn.add(hbox) self.clear_btn.connect('clicked', self.clear) - hbox = gtk.HButtonBox() - hbox.set_layout(gtk.BUTTONBOX_START) + hbox = Gtk.HButtonBox() + hbox.set_layout(Gtk.ButtonBoxStyle.START) hbox.set_spacing(6) hbox.set_border_width(12) hbox.add(self.apply_btn) hbox.add(self.clear_btn) hbox.show() - self.vbox.pack_start(hbox, False, False) + self.vbox.pack_start(hbox, False, False, 0) self.vbox.show() def get_widget(self): @@ -116,9 +117,9 @@ class SidebarFilter(DbGUIElement): pass def add_regex_entry(self, widget): - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.pack_start(widget, False, False, 12) - self.vbox.pack_start(hbox, False, False) + self.vbox.pack_start(hbox, False, False, 0) def add_text_entry(self, name, widget, tooltip=None): self.add_entry(name, widget) @@ -127,7 +128,7 @@ class SidebarFilter(DbGUIElement): widget.set_tooltip_text(tooltip) def key_press(self, obj, event): - if not (event.state & gtk.gdk.CONTROL_MASK): + if not (event.get_state() & Gdk.ModifierType.CONTROL_MASK): if event.keyval in (_RETURN, _KP_ENTER): self.clicked(obj) return False @@ -136,9 +137,9 @@ class SidebarFilter(DbGUIElement): if name: self.table.attach(widgets.BasicLabel(name), 1, 2, self.position, self.position+1, - xoptions=gtk.FILL, yoptions=0) + xoptions=Gtk.AttachOptions.FILL, yoptions=0) self.table.attach(widget, 2, 4, self.position, self.position+1, - xoptions=gtk.FILL|gtk.EXPAND, yoptions=0) + xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.EXPAND, yoptions=0) self.position += 1 def on_filters_changed(self, namespace): @@ -216,9 +217,9 @@ class SidebarFilter(DbGUIElement): """ Adds the text and widget to GUI, with an Edit button. """ - hbox = gtk.HBox() - hbox.pack_start(widget, True, True) - hbox.pack_start(widgets.SimpleButton(gtk.STOCK_EDIT, self.edit_filter), False, False) + hbox = Gtk.HBox() + hbox.pack_start(widget, True, True, 0) + hbox.pack_start(widgets.SimpleButton(Gtk.STOCK_EDIT, self.edit_filter), False, False) self.add_entry(text, hbox) def edit_filter(self, obj): diff --git a/src/gui/filters/sidebar/_sourcesidebarfilter.py b/src/gui/filters/sidebar/_sourcesidebarfilter.py index a4ca28af7..91383da1b 100644 --- a/src/gui/filters/sidebar/_sourcesidebarfilter.py +++ b/src/gui/filters/sidebar/_sourcesidebarfilter.py @@ -32,7 +32,7 @@ from gen.ggettext import gettext as _ # gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -64,14 +64,14 @@ class SourceSidebarFilter(SidebarFilter): self.filter_pub = widgets.BasicEntry() self.filter_note = widgets.BasicEntry() - self.filter_regex = gtk.CheckButton(_('Use regular expressions')) + self.filter_regex = Gtk.CheckButton(_('Use regular expressions')) - self.generic = gtk.ComboBox() + self.generic = Gtk.ComboBox() SidebarFilter.__init__(self, dbstate, uistate, "Source") def create_widget(self): - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() cell.set_property('width', self._FILTER_WIDTH) cell.set_property('ellipsize', self._FILTER_ELLIPSIZE) self.generic.pack_start(cell, True) diff --git a/src/gui/glade.py b/src/gui/glade.py index 069f90748..8966ba71b 100644 --- a/src/gui/glade.py +++ b/src/gui/glade.py @@ -40,7 +40,8 @@ This module exports the Glade class. #------------------------------------------------------------------------ import sys import os -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------ # @@ -52,13 +53,13 @@ import TransUtils #------------------------------------------------------------------------ # -# Glade class. Derived from gtk.Builder +# Glade class. Derived from Gtk.Builder # #------------------------------------------------------------------------ -class Glade(gtk.Builder): +class Glade(Gtk.Builder): """ - Glade class: Manage glade files as gtk.Builder objects + Glade class: Manage glade files as Gtk.Builder objects """ __slots__ = ['__toplevel', '__filename', '__dirname'] @@ -79,7 +80,7 @@ class Glade(gtk.Builder): :rtype: object reference :returns: reference to the newly-created Glade instance """ - gtk.Builder.__init__(self) + GObject.GObject.__init__(self) self.set_translation_domain(TransUtils.LOCALEDOMAIN) filename_given = filename is not None @@ -212,7 +213,7 @@ class Glade(gtk.Builder): queue = [toplevel] while queue: obj = queue.pop(0) - obj_id = gtk.Buildable.get_name(obj) + obj_id = Gtk.Buildable.get_name(obj) if obj_id == value: return obj if hasattr(obj, 'get_children'): diff --git a/src/gui/glade/catalog/grampswidgets.py b/src/gui/glade/catalog/grampswidgets.py index a8b9dbc4e..abcf6ad88 100644 --- a/src/gui/glade/catalog/grampswidgets.py +++ b/src/gui/glade/catalog/grampswidgets.py @@ -21,16 +21,16 @@ # glade/catalog/grampswidgets.py # $Id$ -import gtk +from gi.repository import Gtk -class ValidatableMaskedEntry(gtk.Entry): +class ValidatableMaskedEntry(Gtk.Entry): __gtype_name__ = 'ValidatableMaskedEntry' -class UndoableEntry(gtk.Entry): +class UndoableEntry(Gtk.Entry): __gtype_name__ = 'UndoableEntry' -class StyledTextEditor(gtk.TextView): +class StyledTextEditor(Gtk.TextView): __gtype_name__ = 'StyledTextEditor' -class UndoableBuffer(gtk.TextBuffer): +class UndoableBuffer(Gtk.TextBuffer): __gtype_name__ = 'UndoableBuffer' diff --git a/src/gui/glade/catalog/grampswidgets.xml b/src/gui/glade/catalog/grampswidgets.xml index ad977560a..439aaf6ae 100644 --- a/src/gui/glade/catalog/grampswidgets.xml +++ b/src/gui/glade/catalog/grampswidgets.xml @@ -1,5 +1,6 @@ - + + glade_python_init - - - + + False True 500 dialog - + - + True + False + vertical + + + True + False + end + + + gtk-cancel + False + True + True + True + False + Abandon changes and close window + False + True + + + + False + False + 0 + + + + + gtk-ok + False + True + True + True + False + Accept changes and close window + False + True + + + + False + False + 1 + + + + + gtk-help + False + True + True + True + False + False + True + + + + False + False + 2 + + + + + False + True + end + 0 + + True + False True + False 3 True + False 8 9 True + False 0 3 3 @@ -68,6 +142,7 @@ True + False 0 C_all: True @@ -103,6 +178,7 @@ True + False 0 3 3 @@ -164,6 +240,7 @@ True + False 0 3 _Nick: @@ -201,6 +278,7 @@ 114 114 True + False 2.2351741291171123e-10 @@ -210,9 +288,11 @@ True + False True + False 0 @@ -221,6 +301,7 @@ True + False <b>Image</b> True @@ -236,6 +317,7 @@ True + False 0 3 3 @@ -255,10 +337,17 @@ - + 100 True + False An identification of what type of Name this is, eg. Birth Name, Married Name. + True + + + False + + 7 @@ -273,6 +362,7 @@ True + False Click on a table cell to edit. @@ -292,11 +382,13 @@ + False True True True Use Multiple Surnames Indicate that the surname consists of different parts. Every surname has its own prefix and a possible connector to the next surname. Eg., the surname Ramón y Cajal can be stored as Ramón, which is inherited from the father, the connector y, and Cajal, which is inherited from the mother. + False image2 True @@ -318,9 +410,11 @@ Indicate that the surname consists of different parts. Every surname has its own True + False True + False 0 3 <b>General</b> @@ -328,15 +422,18 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 0 + False True True True Set person as private data + False none 1 @@ -348,6 +445,7 @@ Indicate that the surname consists of different parts. Every surname has its own True + False 16 gtk-dialog-authentication @@ -378,15 +476,19 @@ Indicate that the surname consists of different parts. Every surname has its own True + False True + False 0 3 <b>Preferred Name </b> True + True + True 0 @@ -404,10 +506,12 @@ Indicate that the surname consists of different parts. Every surname has its own True + False 6 True + False 0 _Surname: True @@ -415,6 +519,7 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 3 0 @@ -434,6 +539,7 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 1 @@ -449,6 +555,8 @@ Indicate that the surname consists of different parts. Every surname has its own + True + True 2 @@ -465,6 +573,7 @@ Indicate that the surname consists of different parts. Every surname has its own True + False 0 3 3 @@ -482,10 +591,12 @@ Indicate that the surname consists of different parts. Every surname has its own + False True True True Go to Name Editor to add more information about this name + False image1 @@ -493,7 +604,7 @@ Indicate that the surname consists of different parts. Every surname has its own Edit - + 8 @@ -507,10 +618,12 @@ Indicate that the surname consists of different parts. Every surname has its own True + False 6 True + False 0 O_rigin: True @@ -518,16 +631,26 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 0 - + 75 True + False The origin of this family name for this family, eg 'Inherited' or 'Patronymic'. + True + + + False + + + True + True 1 @@ -544,10 +667,12 @@ Indicate that the surname consists of different parts. Every surname has its own True + False 6 True + False 0 6 G_ender: @@ -556,12 +681,14 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 0 True + False @@ -571,12 +698,14 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 1 True + False 0 _ID: True @@ -585,6 +714,7 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 2 @@ -599,12 +729,14 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 3 True + False 0 6 _Tags: @@ -613,22 +745,28 @@ Indicate that the surname consists of different parts. Every surname has its own False + True 4 True + False + True + True 5 + False True True True + False 1 @@ -668,6 +806,8 @@ Indicate that the surname consists of different parts. Every surname has its own + True + True 2 0 @@ -684,67 +824,6 @@ Indicate that the surname consists of different parts. Every surname has its own 1 - - - True - end - - - gtk-cancel - True - True - True - False - Abandon changes and close window - True - - - - False - False - 0 - - - - - gtk-ok - True - True - True - False - Accept changes and close window - True - - - - False - False - 1 - - - - - gtk-help - True - True - True - False - True - - - - False - False - 2 - - - - - False - end - 0 - - @@ -755,6 +834,7 @@ Indicate that the surname consists of different parts. Every surname has its own True + False gtk-edit @@ -764,6 +844,7 @@ Indicate that the surname consists of different parts. Every surname has its own True + False gtk-add diff --git a/src/gui/grampsbar.py b/src/gui/grampsbar.py index 066a9e127..05c96150f 100644 --- a/src/gui/grampsbar.py +++ b/src/gui/grampsbar.py @@ -38,7 +38,8 @@ import os # GNOME modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -73,12 +74,12 @@ NL = "\n" # GrampsBar class # #------------------------------------------------------------------------- -class GrampsBar(gtk.Notebook): +class GrampsBar(Gtk.Notebook): """ A class which defines the graphical representation of the GrampsBar. """ def __init__(self, dbstate, uistate, pageview, configfile, defaults): - gtk.Notebook.__init__(self) + GObject.GObject.__init__(self) self.dbstate = dbstate self.uistate = uistate @@ -88,7 +89,7 @@ class GrampsBar(gtk.Notebook): self.detached_gramplets = [] self.empty = False - self.set_group_id(1) + self.set_group_name("grampsbar") self.set_show_border(False) self.set_scrollable(True) self.connect('switch-page', self.__switch_page) @@ -302,10 +303,10 @@ class GrampsBar(gtk.Notebook): """ Create an empty tab to be displayed when the GrampsBar is empty. """ - tab_label = gtk.Label(_('Gramps Bar')) + tab_label = Gtk.Label(label=_('Gramps Bar')) tab_label.show() msg = _('Right-click to the right of the tab to add a gramplet.') - content = gtk.Label(msg) + content = Gtk.Label(label=msg) content.show() self.append_page(content, tab_label) return content @@ -325,7 +326,7 @@ class GrampsBar(gtk.Notebook): """ Create a tab label. """ - label = gtk.Label() + label = Gtk.Label() if hasattr(gramplet.pui, "has_data"): if gramplet.pui.has_data: label.set_text("%s" % gramplet.title) @@ -416,9 +417,9 @@ class GrampsBar(gtk.Notebook): Called when a button is pressed in the tabs section of the GrampsBar. """ if gui.utils.is_right_click(event): - menu = gtk.Menu() + menu = Gtk.Menu() - ag_menu = gtk.MenuItem(_('Add a gramplet')) + ag_menu = Gtk.MenuItem(_('Add a gramplet')) nav_type = self.pageview.navigation_type() skip = self.all_gramplets() gramplet_list = GET_GRAMPLET_LIST(nav_type, skip) @@ -428,7 +429,7 @@ class GrampsBar(gtk.Notebook): menu.append(ag_menu) if not self.empty: - rg_menu = gtk.MenuItem(_('Remove a gramplet')) + rg_menu = Gtk.MenuItem(_('Remove a gramplet')) gramplet_list = [(gramplet.title, gramplet.gname) for gramplet in self.get_children() + self.detached_gramplets] @@ -438,7 +439,7 @@ class GrampsBar(gtk.Notebook): rg_menu.show() menu.append(rg_menu) - rd_menu = gtk.MenuItem(_('Restore default gramplets')) + rd_menu = Gtk.MenuItem(_('Restore default gramplets')) rd_menu.connect("activate", self.__restore_clicked) rd_menu.show() menu.append(rd_menu) @@ -454,9 +455,9 @@ class GrampsBar(gtk.Notebook): """ if main_menu: submenu = main_menu.get_submenu() - submenu = gtk.Menu() + submenu = Gtk.Menu() for entry in gramplet_list: - item = gtk.MenuItem(entry[0]) + item = Gtk.MenuItem(entry[0]) item.connect("activate", callback_func, entry[1]) item.show() submenu.append(item) @@ -513,7 +514,7 @@ class GrampsBar(gtk.Notebook): # TabGramplet class # #------------------------------------------------------------------------- -class TabGramplet(gtk.ScrolledWindow, GuiGramplet): +class TabGramplet(Gtk.ScrolledWindow, GuiGramplet): """ Class that handles the plugin interfaces for the GrampletBar. """ @@ -521,18 +522,18 @@ class TabGramplet(gtk.ScrolledWindow, GuiGramplet): """ Internal constructor for GUI portion of a gramplet. """ - gtk.ScrolledWindow.__init__(self) + GObject.GObject.__init__(self) GuiGramplet.__init__(self, pane, dbstate, uistate, title, **kwargs) self.scrolledwindow = self - self.textview = gtk.TextView() + self.textview = Gtk.TextView() self.textview.set_editable(False) - self.textview.set_wrap_mode(gtk.WRAP_WORD) + self.textview.set_wrap_mode(Gtk.WrapMode.WORD) self.buffer = UndoableBuffer() self.text_length = 0 self.textview.set_buffer(self.buffer) self.textview.connect("key-press-event", self.on_key_press_event) - self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.add(self.textview) self.show_all() self.track = [] @@ -565,18 +566,18 @@ class DetachedWindow(ManagedWindow): ManagedWindow.__init__(self, gramplet.uistate, [], self.title) - self.set_window(gtk.Dialog("", gramplet.uistate.window, - gtk.DIALOG_DESTROY_WITH_PARENT, - (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)), + self.set_window(Gtk.Dialog("", gramplet.uistate.window, + Gtk.DialogFlags.DESTROY_WITH_PARENT, + (Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)), None, self.title) self.window.move(x_pos, y_pos) self.window.set_size_request(gramplet.detached_width, gramplet.detached_height) - self.window.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP) + self.window.add_button(Gtk.STOCK_HELP, Gtk.ResponseType.HELP) self.window.connect('response', self.handle_response) - self.notebook = gtk.Notebook() + self.notebook = Gtk.Notebook() self.notebook.set_show_tabs(False) self.notebook.set_show_border(False) self.notebook.show() @@ -587,9 +588,9 @@ class DetachedWindow(ManagedWindow): """ Callback for taking care of button clicks. """ - if response in [gtk.RESPONSE_CLOSE, gtk.STOCK_CLOSE]: + if response in [Gtk.ResponseType.CLOSE, Gtk.STOCK_CLOSE]: self.close() - elif response == gtk.RESPONSE_HELP: + elif response == Gtk.ResponseType.HELP: # translated name: if self.gramplet.help_url: if self.gramplet.help_url.startswith("http://"): diff --git a/src/gui/grampsgui.py b/src/gui/grampsgui.py index 271c2d07f..38ab47588 100644 --- a/src/gui/grampsgui.py +++ b/src/gui/grampsgui.py @@ -34,22 +34,39 @@ LOG = logging.getLogger(".grampsgui") #------------------------------------------------------------------------- # -# pygtk +# Miscellaneous initialization # #------------------------------------------------------------------------- try: - import pygtk - pygtk.require('2.0') -except ImportError: - pass - + import gi + gi.require_version('Gtk', '3.0') + #It is important to import Pango before Gtk, or some things start to go + #wrong in GTK3 ! + from gi.repository import Pango + from gi.repository import Gtk, Gdk +except ImportError, ValueError: + print (_("Gtk typelib not installed. Install Gnome Introspection, and " + "pygobject version 3.3.2 or later.\n\n" + "Gramps will terminate now.")) + sys.exit(0) + #------------------------------------------------------------------------- # # Miscellaneous initialization # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import GObject + +MIN_PYGOBJECT_VERSION = (3, 3, 2) +if not GObject.pygobject_version >= MIN_PYGOBJECT_VERSION : + print (_("Your pygobject version does not meet the " + "requirements. At least pygobject %d.%d.%d is needed to" + " start Gramps with a GUI.\n\n" + "Gramps will terminate now.") % ( + MIN_PYGOBJECT_VERSION[0], + MIN_PYGOBJECT_VERSION[1], + MIN_PYGOBJECT_VERSION[2])) + sys.exit(0) #------------------------------------------------------------------------- # @@ -91,75 +108,75 @@ def register_stock_icons (): #add to the back of this list to overrule images set at beginning of list extraiconsize = [ (os.path.join(const.IMAGE_DIR, '22x22'), - gtk.ICON_SIZE_LARGE_TOOLBAR), + Gtk.IconSize.LARGE_TOOLBAR), (os.path.join(const.IMAGE_DIR, '16x16'), - gtk.ICON_SIZE_MENU), + Gtk.IconSize.MENU), (os.path.join(const.IMAGE_DIR, '22x22'), - gtk.ICON_SIZE_BUTTON), + Gtk.IconSize.BUTTON), ] items = [ - ('gramps-db', _('Family Trees'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-address', _('Address'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-attribute', _('Attribute'), gtk.gdk.CONTROL_MASK, 0, ''), - #('gramps-bookmark', _('Bookmarks'), gtk.gdk.CONTROL_MASK, 0, ''), - #('gramps-bookmark-delete', _('Delete bookmark'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-bookmark-new', _('_Add bookmark'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-bookmark-edit', _('Organize Bookmarks'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-config', _('Configure'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-date', _('Date'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-date-edit', _('Edit Date'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-event', _('Events'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-family', _('Family'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-fanchart', _('Fan Chart'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-font', _('Font'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-font-color', _('Font Color'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-font-bgcolor', _('Font Background Color'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-gramplet', _('Gramplets'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-geo', _('Geography'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-geo-mainmap', _('Geography'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-geo-altmap', _('Geography'), gtk.gdk.CONTROL_MASK, 0, ''), - ('geo-show-person', _('GeoPerson'), gtk.gdk.CONTROL_MASK, 0, ''), - ('geo-show-family', _('GeoFamily'), gtk.gdk.CONTROL_MASK, 0, ''), - ('geo-show-event', _('GeoEvents'), gtk.gdk.CONTROL_MASK, 0, ''), - ('geo-show-place', _('GeoPlaces'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-lock', _('Public'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-media', _('Media'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-merge', _('Merge'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-notes', _('Notes'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-parents', _('Parents'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-parents-add', _('Add Parents'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-parents-open', _('Select Parents'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-pedigree', _('Pedigree'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-person', _('Person'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-place', _('Places'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-relation', _('Relationships'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-reports', _('Reports'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-repository', _('Repositories'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-source', _('Sources'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-spouse', _('Add Spouse'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-tag', _('Tag'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-tag-new', _('New Tag'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-tools', _('Tools'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-tree-group', _('Grouped List'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-tree-list', _('List'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-tree-select', _('Select'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-unlock', _('Private'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-view', _('View'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-viewmedia', _('View'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-zoom-in', _('Zoom In'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-zoom-out', _('Zoom Out'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-zoom-fit-width', _('Fit Width'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-zoom-best-fit', _('Fit Page'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-citation', _('Citations'), gtk.gdk.CONTROL_MASK, 0, ''), + ('gramps-db', _('Family Trees'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-address', _('Address'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-attribute', _('Attribute'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + #('gramps-bookmark', _('Bookmarks'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + #('gramps-bookmark-delete', _('Delete bookmark'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-bookmark-new', _('_Add bookmark'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-bookmark-edit', _('Organize Bookmarks'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-config', _('Configure'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-date', _('Date'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-date-edit', _('Edit Date'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-event', _('Events'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-family', _('Family'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-fanchart', _('Fan Chart'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-font', _('Font'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-font-color', _('Font Color'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-font-bgcolor', _('Font Background Color'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-gramplet', _('Gramplets'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-geo', _('Geography'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-geo-mainmap', _('Geography'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-geo-altmap', _('Geography'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('geo-show-person', _('GeoPerson'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('geo-show-family', _('GeoFamily'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('geo-show-event', _('GeoEvents'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('geo-show-place', _('GeoPlaces'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-lock', _('Public'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-media', _('Media'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-merge', _('Merge'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-notes', _('Notes'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-parents', _('Parents'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-parents-add', _('Add Parents'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-parents-open', _('Select Parents'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-pedigree', _('Pedigree'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-person', _('Person'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-place', _('Places'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-relation', _('Relationships'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-reports', _('Reports'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-repository', _('Repositories'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-source', _('Sources'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-spouse', _('Add Spouse'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-tag', _('Tag'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-tag-new', _('New Tag'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-tools', _('Tools'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-tree-group', _('Grouped List'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-tree-list', _('List'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-tree-select', _('Select'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-unlock', _('Private'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-view', _('View'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-viewmedia', _('View'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-zoom-in', _('Zoom In'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-zoom-out', _('Zoom Out'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-zoom-fit-width', _('Fit Width'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-zoom-best-fit', _('Fit Page'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-citation', _('Citations'), Gdk.ModifierType.CONTROL_MASK, 0, ''), ] # the following icons are not yet in new directory structure # they should be ported in the near future items_legacy = [ - ('gramps-export', _('Export'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-import', _('Import'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-undo-history', _('Undo History'), gtk.gdk.CONTROL_MASK, 0, ''), - ('gramps-url', _('URL'), gtk.gdk.CONTROL_MASK, 0, ''), + ('gramps-export', _('Export'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-import', _('Import'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-undo-history', _('Undo History'), Gdk.ModifierType.CONTROL_MASK, 0, ''), + ('gramps-url', _('URL'), Gdk.ModifierType.CONTROL_MASK, 0, ''), ] base_reg_stock_icons(iconpaths, extraiconsize, items+items_legacy) @@ -253,19 +270,19 @@ class Gramps(object): def __startgramps(errors, argparser): """ - Main startup function started via gobject.timeout_add + Main startup function started via GObject.timeout_add First action inside the gtk loop """ from gui.dialog import ErrorDialog #handle first existing errors in GUI fashion if errors: ErrorDialog(errors[0], errors[1]) - gtk.main_quit() + Gtk.main_quit() sys.exit(1) if argparser.errors: ErrorDialog(argparser.errors[0], argparser.errors[1]) - gtk.main_quit() + Gtk.main_quit() sys.exit(1) # add gui logger @@ -317,7 +334,7 @@ def __startgramps(errors, argparser): if quit_now: #stop gtk loop and quit - gtk.main_quit() + Gtk.main_quit() sys.exit(exit_code) #function finished, return False to stop the timeout_add function calls @@ -326,9 +343,9 @@ def __startgramps(errors, argparser): def startgtkloop(errors, argparser): """ We start the gtk loop and run the function to start up GRAMPS """ - gobject.threads_init() + GObject.threads_init() - gobject.timeout_add(100, __startgramps, errors, argparser, priority=100) + GObject.timeout_add(100, __startgramps, errors, argparser, priority=100) if os.path.exists(os.path.join(const.DATA_DIR, "gramps.accel")): - gtk.accel_map_load(os.path.join(const.DATA_DIR, "gramps.accel")) - gtk.main() + Gtk.AccelMap.load(os.path.join(const.DATA_DIR, "gramps.accel")) + Gtk.main() diff --git a/src/gui/listmodel.py b/src/gui/listmodel.py index ec6e97553..dbd3ae23a 100644 --- a/src/gui/listmodel.py +++ b/src/gui/listmodel.py @@ -29,8 +29,8 @@ Provide the basic functionality for a list view # GTK # #------------------------------------------------------------------------- -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango import const #------------------------------------------------------------------------- @@ -81,7 +81,7 @@ class ListModel(object): """ def __init__(self, tree, dlist, select_func=None, event_func=None, - mode=gtk.SELECTION_SINGLE, list_mode="list"): + mode=Gtk.SelectionMode.SINGLE, list_mode="list"): self.tree = tree self.tree.set_fixed_height_mode(True) @@ -101,7 +101,7 @@ class ListModel(object): if col_type == TOGGLE: self.mylist.append(bool) elif col_type == IMAGE: - self.mylist.append(gtk.gdk.Pixbuf) + self.mylist.append(GdkPixbuf.Pixbuf) elif col_type == INTEGER: self.mylist.append(int) elif col_type == COLOR: @@ -132,8 +132,8 @@ class ListModel(object): self.tree.connect('event', self.__button_press) def __build_image_column(self, cnum, name, renderer, column): - renderer = gtk.CellRendererPixbuf() - column = gtk.TreeViewColumn(name[0], renderer) + renderer = Gtk.CellRendererPixbuf() + column = Gtk.TreeViewColumn(name[0], renderer) column.add_attribute(renderer, 'pixbuf', cnum) renderer.set_property('height', const.THUMBSCALE / 2) return renderer, column @@ -165,11 +165,11 @@ class ListModel(object): name = (name[0], name[1], name[2], name[3], name[4], None) if name[0] and name[3] == TOGGLE: - renderer = gtk.CellRendererToggle() + renderer = Gtk.CellRendererToggle() if visible_col is not None: - column = gtk.TreeViewColumn(name[0], renderer, visible=visible_col) + column = Gtk.TreeViewColumn(name[0], renderer, visible=visible_col) else: - column = gtk.TreeViewColumn(name[0], renderer) + column = Gtk.TreeViewColumn(name[0], renderer) column.add_attribute(renderer, 'active', cnum) if name[4]: renderer.set_property('activatable', True) @@ -181,16 +181,16 @@ class ListModel(object): elif name[0] and name[3] == IMAGE: renderer, column = self.__build_image_column(cnum, name, renderer, column) elif name[0] and name[3] == COLOR: - renderer = gtk.CellRendererText() + renderer = Gtk.CellRendererText() if visible_col is not None: - column = gtk.TreeViewColumn(name[0], renderer, background=cnum, + column = Gtk.TreeViewColumn(name[0], renderer, background=cnum, visible=visible_col) else: - column = gtk.TreeViewColumn(name[0], renderer, background=cnum) + column = Gtk.TreeViewColumn(name[0], renderer, background=cnum) else: - renderer = gtk.CellRendererText() + renderer = Gtk.CellRendererText() renderer.set_fixed_height_from_font(True) - renderer.set_property('ellipsize', pango.ELLIPSIZE_END) + renderer.set_property('ellipsize', Pango.EllipsizeMode.END) if name[4]: renderer.set_property('editable', True) renderer.connect('edited', self.__edited_cb, cnum) @@ -199,9 +199,9 @@ class ListModel(object): else: renderer.set_property('editable', False) if visible_col is not None: - column = gtk.TreeViewColumn(name[0], renderer, text=cnum, visible=visible_col) + column = Gtk.TreeViewColumn(name[0], renderer, text=cnum, visible=visible_col) else: - column = gtk.TreeViewColumn(name[0], renderer, text=cnum) + column = Gtk.TreeViewColumn(name[0], renderer, text=cnum) column.set_reorderable(True) column.set_min_width(name[2]) @@ -215,7 +215,7 @@ class ListModel(object): column.set_clickable(True) column.set_sort_column_id(name[1]) - column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) column.set_fixed_width(name[2]) cnum += 1 @@ -262,9 +262,9 @@ class ListModel(object): del self.selection self.count = 0 if self.list_mode == "list": - self.model = gtk.ListStore(*self.mylist) + self.model = Gtk.ListStore(*self.mylist) elif self.list_mode == "tree": - self.model = gtk.TreeStore(*self.mylist) + self.model = Gtk.TreeStore(*self.mylist) self.selection = self.tree.get_selection() self.selection.set_mode(self.mode) self.sel_iter = None @@ -332,7 +332,7 @@ class ListModel(object): """ if self.count == 0: return [] - elif self.mode == gtk.SELECTION_SINGLE: + elif self.mode == Gtk.SelectionMode.SINGLE: store, node = self.selection.get_selected() if node: return [self.model.get_value(node, self.data_index)] @@ -347,7 +347,7 @@ class ListModel(object): """ Return an icon to be used for Drag and drop. """ - if self.mode == gtk.SELECTION_SINGLE: + if self.mode == Gtk.SelectionMode.SINGLE: store, node = self.selection.get_selected() path = self.model.get_path(node) else: @@ -476,7 +476,7 @@ class ListModel(object): """ Called when a button press is executed """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: self.double_click(obj) return True return False diff --git a/src/gui/logger/__init__.py b/src/gui/logger/__init__.py index 2165debb7..540e77d35 100644 --- a/src/gui/logger/__init__.py +++ b/src/gui/logger/__init__.py @@ -60,7 +60,7 @@ Usage: except: l.error(log_message,exc_info=True) - gtk.main() + Gtk.main() """ diff --git a/src/gui/logger/_errorreportassistant.py b/src/gui/logger/_errorreportassistant.py index 08d6b91af..2446f2c88 100644 --- a/src/gui/logger/_errorreportassistant.py +++ b/src/gui/logger/_errorreportassistant.py @@ -27,8 +27,10 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gtk -import gobject +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import GdkPixbuf +from gi.repository import GObject import cairo import sys, os @@ -59,13 +61,13 @@ SPLASH_JPG = os.path.join(const.IMAGE_DIR, "splash.jpg") # ErrorReportAssistant # #------------------------------------------------------------------------- -class ErrorReportAssistant(gtk.Assistant): +class ErrorReportAssistant(Gtk.Assistant): """ Give the user an opportunity to report an error on the Gramps bug reporting system. """ def __init__(self, error_detail, rotate_handler, ownthread=False): - gtk.Assistant.__init__(self) + GObject.GObject.__init__(self) self._error_detail = error_detail self._rotate_handler = rotate_handler @@ -75,8 +77,8 @@ class ErrorReportAssistant(gtk.Assistant): self._error_details_text_buffer = None self._final_report_text_buffer = None - self.logo = gtk.gdk.pixbuf_new_from_file(GRAMPS_PNG) - self.splash = gtk.gdk.pixbuf_new_from_file(SPLASH_JPG) + self.logo = GdkPixbuf.Pixbuf.new_from_file(GRAMPS_PNG) + self.splash = GdkPixbuf.Pixbuf.new_from_file(SPLASH_JPG) self.set_title(_("Error Report Assistant")) self.connect('close', self.close) @@ -95,7 +97,7 @@ class ErrorReportAssistant(gtk.Assistant): self.ownthread = ownthread if self.ownthread: - gtk.main() + Gtk.main() def close(self, *obj): """ @@ -103,7 +105,7 @@ class ErrorReportAssistant(gtk.Assistant): """ self.hide() if self.ownthread: - gtk.main_quit() + Gtk.main_quit() def prepare(self, assistant, page): """ @@ -116,17 +118,19 @@ class ErrorReportAssistant(gtk.Assistant): """ Copy the bug report to the clipboard. """ - clipboard = gtk.Clipboard() + #TODO GTK3 Is this clipboard copy working ?? + clipboard = Gtk.Clipboard.get_for_display(Gdk.Display.get_default(), + Gdk.SELECTION_CLIPBOARD) clipboard.set_text( self._final_report_text_buffer.get_text( self._final_report_text_buffer.get_start_iter(), - self._final_report_text_buffer.get_end_iter())) + self._final_report_text_buffer.get_end_iter(), True), -1) - clipboard = gtk.Clipboard(selection="PRIMARY") + clipboard = t = Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY) clipboard.set_text( self._final_report_text_buffer.get_text( self._final_report_text_buffer.get_start_iter(), - self._final_report_text_buffer.get_end_iter())) + self._final_report_text_buffer.get_end_iter(), True), -1) def _start_email_client(self, obj=None): """ @@ -135,8 +139,8 @@ class ErrorReportAssistant(gtk.Assistant): display_url('mailto:gramps-bugs@lists.sourceforge.net?subject=' '"bug report"&body="%s"' \ % self._final_report_text_buffer.get_text( - self._final_report_text_buffer.get_start_iter(), - self._final_report_text_buffer.get_end_iter())) + self._final_report_text_buffer.get_start_iter(), + self._final_report_text_buffer.get_end_iter(), True)) def _start_gramps_bts_in_browser(self, obj=None): """ @@ -162,7 +166,6 @@ class ErrorReportAssistant(gtk.Assistant): "OS: %s\n"\ "Distribution: %s\n\n"\ "GTK version : %s\n"\ - "pygtk version : %s\n"\ "gobject version: %s\n"\ "cairo version : %s"\ % (str(sys.version).replace('\n',''), @@ -171,9 +174,9 @@ class ErrorReportAssistant(gtk.Assistant): os.environ.get('LANG',''), operatingsystem, distribution, - gtk.gtk_version, - gtk.pygtk_version, - gobject.pygobject_version, + '%d.%d.%d' % (Gtk.get_major_version(), + Gtk.get_minor_version(), Gtk.get_micro_version()), + '%d.%d.%d' % GObject.pygobject_version, cairo.version_info) def _reset_error_details(self, obj=None): @@ -220,15 +223,15 @@ class ErrorReportAssistant(gtk.Assistant): """ Create the introduction page. """ - label = gtk.Label(self.get_intro_text()) + label = Gtk.Label(label=self.get_intro_text()) label.set_line_wrap(True) # Using set_page_side_image causes window sizing problems, so put the # image in the main page instead. - image = gtk.Image() + image = Gtk.Image() image.set_from_file(SPLASH_JPG) - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.pack_start(image, False, False, 0) hbox.pack_start(label, True, True, 0) @@ -239,7 +242,7 @@ class ErrorReportAssistant(gtk.Assistant): self.set_page_header_image(page, self.logo) #self.set_page_side_image(page, self.splash) self.set_page_title(page, _('Report a bug')) - self.set_page_type(page, gtk.ASSISTANT_PAGE_INTRO) + self.set_page_type(page, Gtk.AssistantPageType.INTRO) def get_intro_text(self): """ @@ -262,56 +265,56 @@ class ErrorReportAssistant(gtk.Assistant): """ Build the error details page. """ - label = gtk.Label(_("If you can see that there is any personal " + label = Gtk.Label(label=_("If you can see that there is any personal " "information included in the error please remove " "it.")) label.set_alignment(0.01, 0.5) label.set_padding(0, 4) label.set_line_wrap(True) - swin = gtk.ScrolledWindow() - swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + swin = Gtk.ScrolledWindow() + swin.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) - textview = gtk.TextView() + textview = Gtk.TextView() self._error_details_text_buffer = textview.get_buffer() self._reset_error_details() swin.add(textview) - sw_frame = gtk.Frame() + sw_frame = Gtk.Frame() sw_frame.add(swin) - reset = gtk.Button("Reset") + reset = Gtk.Button("Reset") reset.connect('clicked', self._reset_error_details) - clear = gtk.Button("Clear") + clear = Gtk.Button("Clear") clear.connect('clicked', self._clear_error_details) - button_box = gtk.HButtonBox() + button_box = Gtk.HButtonBox() button_box.set_border_width(6) button_box.set_spacing(6) - button_box.set_layout(gtk.BUTTONBOX_END) + button_box.set_layout(Gtk.ButtonBoxStyle.END) - button_box.pack_end(reset, False, False) - button_box.pack_end(clear, False, False) + button_box.pack_end(reset, False, False, 0) + button_box.pack_end(clear, False, False, 0) - error_details_box = gtk.VBox() - error_details_box.pack_start(label, False, False) - error_details_box.pack_start(sw_frame, True, True) - error_details_box.pack_start(button_box, False, False) + error_details_box = Gtk.VBox() + error_details_box.pack_start(label, False, False, 0) + error_details_box.pack_start(sw_frame, True, True, 0) + error_details_box.pack_start(button_box, False, False, 0) - error_details_align = gtk.Alignment(0, 0, 1, 1) + error_details_align = Gtk.Alignment.new(0, 0, 1, 1) error_details_align.set_padding(0, 0, 11, 0) error_details_align.add(error_details_box) - error_details_frame = gtk.Frame() + error_details_frame = Gtk.Frame() error_details_frame.set_border_width(3) error_details_frame.set_label("%s" % _("Error Details")) error_details_frame.get_label_widget().set_use_markup(True) error_details_frame.add(error_details_align) - side_label = gtk.Label(_("This is the detailed Gramps error " + side_label = Gtk.Label(_("This is the detailed Gramps error " "information, don't worry if you do not " "understand it. You will have the opportunity " "to add further detail about the error " @@ -320,9 +323,9 @@ class ErrorReportAssistant(gtk.Assistant): side_label.set_line_wrap(True) side_label.set_size_request(124, -1) - box = gtk.HBox() + box = Gtk.HBox() box.pack_start(side_label, False, False, 5) - box.pack_start(error_details_frame) + box.pack_start(error_details_frame, True, True, 0) page = box @@ -330,13 +333,13 @@ class ErrorReportAssistant(gtk.Assistant): self.append_page(page) self.set_page_header_image(page, self.logo) self.set_page_title(page, _("Report a bug: Step 1 of 5")) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT) + self.set_page_type(page, Gtk.AssistantPageType.CONTENT) def build_page2(self): """ Build the system information page. """ - label = gtk.Label(_("Please check the information below and correct " + label = Gtk.Label(label=_("Please check the information below and correct " "anything that you know to be wrong or remove " "anything that you would rather not have included " "in the bug report.")) @@ -344,59 +347,59 @@ class ErrorReportAssistant(gtk.Assistant): label.set_padding(0, 4) label.set_line_wrap(True) - swin = gtk.ScrolledWindow() - swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + swin = Gtk.ScrolledWindow() + swin.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) - textview = gtk.TextView() + textview = Gtk.TextView() self._sys_information_text_buffer = textview.get_buffer() self._reset_sys_information() swin.add(textview) - sw_frame = gtk.Frame() + sw_frame = Gtk.Frame() sw_frame.add(swin) - reset = gtk.Button("Reset") + reset = Gtk.Button("Reset") reset.connect('clicked', self._reset_sys_information) - clear = gtk.Button("Clear") + clear = Gtk.Button("Clear") clear.connect('clicked', self._clear_sys_information) - button_box = gtk.HButtonBox() + button_box = Gtk.HButtonBox() button_box.set_border_width(6) button_box.set_spacing(6) - button_box.set_layout(gtk.BUTTONBOX_END) + button_box.set_layout(Gtk.ButtonBoxStyle.END) - button_box.pack_end(reset, False, False) - button_box.pack_end(clear, False, False) + button_box.pack_end(reset, False, False, 0) + button_box.pack_end(clear, False, False, 0) - sys_information_box = gtk.VBox() - sys_information_box.pack_start(label, False, False) - sys_information_box.pack_start(sw_frame, True, True) - sys_information_box.pack_start(button_box, False, False) + sys_information_box = Gtk.VBox() + sys_information_box.pack_start(label, False, False, 0) + sys_information_box.pack_start(sw_frame, True, True, 0) + sys_information_box.pack_start(button_box, False, False, 0) - sys_information_align = gtk.Alignment(0, 0, 1, 1) + sys_information_align = Gtk.Alignment.new(0, 0, 1, 1) sys_information_align.set_padding(0, 0, 11, 0) sys_information_align.add(sys_information_box) - sys_information_frame = gtk.Frame() + sys_information_frame = Gtk.Frame() sys_information_frame.set_border_width(3) sys_information_frame.set_label("%s" % _("System Information")) sys_information_frame.get_label_widget().set_use_markup(True) sys_information_frame.add(sys_information_align) - side_label = gtk.Label(_("This is the information about your system " + side_label = Gtk.Label(label=_("This is the information about your system " "that will help the developers to fix the " "bug.")) side_label.set_line_wrap(True) side_label.set_size_request(124, -1) - box = gtk.HBox() + box = Gtk.HBox() box.pack_start(side_label, False, False, 5) - box.pack_start(sys_information_frame) + box.pack_start(sys_information_frame, True, True, 0) page = box @@ -404,66 +407,66 @@ class ErrorReportAssistant(gtk.Assistant): self.append_page(page) self.set_page_header_image(page, self.logo) self.set_page_title(page, _("Report a bug: Step 2 of 5")) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT) + self.set_page_type(page, Gtk.AssistantPageType.CONTENT) def build_page3(self): """ Build the further information page. """ - label = gtk.Label(_("Please provide as much information as you can " + label = Gtk.Label(label=_("Please provide as much information as you can " "about what you were doing when the error " "occured.")) label.set_alignment(0.01, 0.5) label.set_padding(0, 4) label.set_line_wrap(True) - swin = gtk.ScrolledWindow() - swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + swin = Gtk.ScrolledWindow() + swin.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) - textview = gtk.TextView() + textview = Gtk.TextView() self._user_information_text_buffer = textview.get_buffer() swin.add(textview) - sw_frame = gtk.Frame() + sw_frame = Gtk.Frame() sw_frame.add(swin) - clear = gtk.Button("Clear") + clear = Gtk.Button("Clear") clear.connect('clicked', self._clear_user_information) - button_box = gtk.HButtonBox() + button_box = Gtk.HButtonBox() button_box.set_border_width(6) button_box.set_spacing(6) - button_box.set_layout(gtk.BUTTONBOX_END) + button_box.set_layout(Gtk.ButtonBoxStyle.END) - button_box.pack_end(clear, False, False) + button_box.pack_end(clear, False, False, 0) - user_information_box = gtk.VBox() - user_information_box.pack_start(label, False, False) - user_information_box.pack_start(sw_frame, True, True) - user_information_box.pack_start(button_box, False, False) + user_information_box = Gtk.VBox() + user_information_box.pack_start(label, False, False, 0) + user_information_box.pack_start(sw_frame, True, True, 0) + user_information_box.pack_start(button_box, False, False, 0) - user_information_align = gtk.Alignment(0, 0, 1, 1) + user_information_align = Gtk.Alignment.new(0, 0, 1, 1) user_information_align.set_padding(0, 0, 11, 0) user_information_align.add(user_information_box) - user_information_frame = gtk.Frame() + user_information_frame = Gtk.Frame() user_information_frame.set_border_width(3) user_information_frame.set_label("%s" % _("Further Information")) user_information_frame.get_label_widget().set_use_markup(True) user_information_frame.add(user_information_align) - side_label = gtk.Label(_("This is your opportunity to describe what " + side_label = Gtk.Label(label=_("This is your opportunity to describe what " "you were doing when the error occured.")) side_label.set_line_wrap(True) side_label.set_size_request(124, -1) - box = gtk.HBox() + box = Gtk.HBox() box.pack_start(side_label, False, False, 5) - box.pack_start(user_information_frame) + box.pack_start(user_information_frame, True, True, 0) page = box @@ -471,13 +474,13 @@ class ErrorReportAssistant(gtk.Assistant): self.append_page(page) self.set_page_header_image(page, self.logo) self.set_page_title(page, _("Report a bug: Step 3 of 5")) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT) + self.set_page_type(page, Gtk.AssistantPageType.CONTENT) def build_page4(self): """ Build the bug report summary page. """ - label = gtk.Label(_("Please check that the information is correct, " + label = Gtk.Label(_("Please check that the information is correct, " "do not worry if you don't understand the detail " "of the error information. Just make sure that it " "does not contain anything that you do not want " @@ -486,10 +489,10 @@ class ErrorReportAssistant(gtk.Assistant): label.set_padding(0, 4) label.set_line_wrap(True) - swin = gtk.ScrolledWindow() - swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + swin = Gtk.ScrolledWindow() + swin.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) - textview = gtk.TextView() + textview = Gtk.TextView() textview.set_editable(False) textview.set_cursor_visible(False) @@ -497,25 +500,25 @@ class ErrorReportAssistant(gtk.Assistant): swin.add(textview) - sw_frame = gtk.Frame() + sw_frame = Gtk.Frame() sw_frame.add(swin) - summary_box = gtk.VBox() - summary_box.pack_start(label, False, False) - summary_box.pack_start(sw_frame, True, True) + summary_box = Gtk.VBox() + summary_box.pack_start(label, False, False, 0) + summary_box.pack_start(sw_frame, True, True, 0) - summary_align = gtk.Alignment(0, 0, 1, 1) + summary_align = Gtk.Alignment.new(0, 0, 1, 1) summary_align.set_padding(0, 0, 11, 0) summary_align.add(summary_box) - summary_frame = gtk.Frame() + summary_frame = Gtk.Frame() summary_frame.set_border_width(3) summary_frame.set_label("%s" % _("Bug Report Summary")) summary_frame.get_label_widget().set_use_markup(True) summary_frame.add(summary_align) - side_label = gtk.Label(_("This is the completed bug report. The next " + side_label = Gtk.Label(label=_("This is the completed bug report. The next " "page of the assistant will help you to file " "a bug on the Gramps bug tracking system " "website.")) @@ -523,9 +526,9 @@ class ErrorReportAssistant(gtk.Assistant): side_label.set_line_wrap(True) side_label.set_size_request(124, -1) - box = gtk.HBox() + box = Gtk.HBox() box.pack_start(side_label, False, False, 5) - box.pack_start(summary_frame) + box.pack_start(summary_frame, True, True, 0) page = box @@ -533,13 +536,13 @@ class ErrorReportAssistant(gtk.Assistant): self.append_page(page) self.set_page_header_image(page, self.logo) self.set_page_title(page, _("Report a bug: Step 4 of 5")) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT) + self.set_page_type(page, Gtk.AssistantPageType.CONTENT) def build_page5(self): """ Build the send bug report page. """ - label = gtk.Label( + label = Gtk.Label(label= "%s %s" % (_("Use the two buttons below to first copy the bug report to the " "clipboard and then open a webbrowser to file a bug report at "), @@ -550,31 +553,31 @@ class ErrorReportAssistant(gtk.Assistant): label.set_use_markup(True) - url_label = gtk.Label(_("Use this button to start a web browser and " + url_label = Gtk.Label(label=_("Use this button to start a web browser and " "file a bug report on the Gramps bug tracking " "system.")) url_label.set_alignment(0.01, 0.5) url_label.set_padding(0, 4) url_label.set_line_wrap(True) - url_button = gtk.Button("File bug report") + url_button = Gtk.Button("File bug report") url_button.connect('clicked', self._start_gramps_bts_in_browser) - url_button_vbox = gtk.VBox() - url_button_vbox.pack_start(url_button, True, False) + url_button_vbox = Gtk.VBox() + url_button_vbox.pack_start(url_button, True, False, 0) - url_box = gtk.HBox() - url_box.pack_start(url_label, True, True) - url_box.pack_start(url_button_vbox, False, False) + url_box = Gtk.HBox() + url_box.pack_start(url_label, True, True, 0) + url_box.pack_start(url_button_vbox, False, False, 0) - url_align = gtk.Alignment(0, 0, 1, 1) + url_align = Gtk.Alignment.new(0, 0, 1, 1) url_align.set_padding(0, 0, 11, 0) url_align.add(url_box) - url_frame = gtk.Frame() + url_frame = Gtk.Frame() url_frame.add(url_align) - clip_label = gtk.Label(_("Use this button " + clip_label = Gtk.Label(_("Use this button " "to copy the bug report onto the clipboard. " "Then go to the bug tracking website by using " "the button below, paste the report and click " @@ -583,41 +586,41 @@ class ErrorReportAssistant(gtk.Assistant): clip_label.set_padding(0, 4) clip_label.set_line_wrap(True) - clip_button = gtk.Button("Copy to clipboard") + clip_button = Gtk.Button("Copy to clipboard") clip_button.connect('clicked', self._copy_to_clipboard) - clip_button_vbox = gtk.VBox() - clip_button_vbox.pack_start(clip_button, True, False) + clip_button_vbox = Gtk.VBox() + clip_button_vbox.pack_start(clip_button, True, False, 0) - clip_box = gtk.HBox() - clip_box.pack_start(clip_label, True, True) - clip_box.pack_start(clip_button_vbox, False, False) + clip_box = Gtk.HBox() + clip_box.pack_start(clip_label, True, True, 0) + clip_box.pack_start(clip_button_vbox, False, False, 0) - clip_align = gtk.Alignment(0, 0, 1, 1) + clip_align = Gtk.Alignment.new(0, 0, 1, 1) clip_align.set_padding(0, 0, 11, 0) clip_align.add(clip_box) - clip_frame = gtk.Frame() + clip_frame = Gtk.Frame() clip_frame.add(clip_align) - inner_box = gtk.VBox() - inner_box.pack_start(label, False, False) - inner_box.pack_start(clip_frame, False, False) - inner_box.pack_start(url_frame, False, False) + inner_box = Gtk.VBox() + inner_box.pack_start(label, False, False, 0) + inner_box.pack_start(clip_frame, False, False, 0) + inner_box.pack_start(url_frame, False, False, 0) - inner_align = gtk.Alignment(0, 0, 1, 1) + inner_align = Gtk.Alignment.new(0, 0, 1, 1) inner_align.set_padding(0, 0, 11, 0) inner_align.add(inner_box) - outer_frame = gtk.Frame() + outer_frame = Gtk.Frame() outer_frame.set_border_width(3) outer_frame.set_label("%s" % _("Send Bug Report")) outer_frame.get_label_widget().set_use_markup(True) outer_frame.add(inner_align) - side_label = gtk.Label(_("This is the final step. Use the buttons on " + side_label = Gtk.Label(label=_("This is the final step. Use the buttons on " "this page to start a web browser and file a " "bug report on the Gramps bug tracking " "system.")) @@ -625,9 +628,9 @@ class ErrorReportAssistant(gtk.Assistant): side_label.set_line_wrap(True) side_label.set_size_request(124, -1) - box = gtk.HBox() + box = Gtk.HBox() box.pack_start(side_label, False, False, 5) - box.pack_start(outer_frame) + box.pack_start(outer_frame, True, True, 0) page = box @@ -635,7 +638,7 @@ class ErrorReportAssistant(gtk.Assistant): self.append_page(page) self.set_page_header_image(page, self.logo) self.set_page_title(page, _("Report a bug: Step 5 of 5")) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT) + self.set_page_type(page, Gtk.AssistantPageType.CONTENT) def create_page_summary(self): """ @@ -644,15 +647,15 @@ class ErrorReportAssistant(gtk.Assistant): text = _('Gramps is an Open Source project. Its success ' 'depends on its users. User feedback is important. ' 'Thank you for taking the time to submit a bug report.') - label = gtk.Label(text) + label = Gtk.Label(label=text) label.set_line_wrap(True) # Using set_page_side_image causes window sizing problems, so put the # image in the main page instead. - image = gtk.Image() + image = Gtk.Image() image.set_from_file(SPLASH_JPG) - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.pack_start(image, False, False, 0) hbox.pack_start(label, True, True, 0) @@ -663,7 +666,7 @@ class ErrorReportAssistant(gtk.Assistant): self.set_page_header_image(page, self.logo) #self.set_page_side_image(page, self.splash) self.set_page_title(page, _('Complete')) - self.set_page_type(page, gtk.ASSISTANT_PAGE_SUMMARY) + self.set_page_type(page, Gtk.AssistantPageType.SUMMARY) def page4_update(self): """ @@ -674,19 +677,19 @@ class ErrorReportAssistant(gtk.Assistant): "===================\n\n" + self._user_information_text_buffer.get_text( self._user_information_text_buffer.get_start_iter(), - self._user_information_text_buffer.get_end_iter()) + + self._user_information_text_buffer.get_end_iter(), True) + "\n\n\nError Details: \n" + "===================\n\n" + self._error_details_text_buffer.get_text( self._error_details_text_buffer.get_start_iter(), - self._error_details_text_buffer.get_end_iter()) + + self._error_details_text_buffer.get_end_iter(), True) + "\n\nSystem Information: \n" + "===================\n\n" + self._sys_information_text_buffer.get_text( self._sys_information_text_buffer.get_start_iter(), - self._sys_information_text_buffer.get_end_iter()) + self._sys_information_text_buffer.get_end_iter(), True) ) diff --git a/src/gui/logger/_errorview.py b/src/gui/logger/_errorview.py index 85652a1f2..b2f897827 100644 --- a/src/gui/logger/_errorview.py +++ b/src/gui/logger/_errorview.py @@ -25,7 +25,7 @@ # GNOME modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -62,17 +62,17 @@ class ErrorView(object): self.run() def run(self): - response = gtk.RESPONSE_HELP - while response == gtk.RESPONSE_HELP: + response = Gtk.ResponseType.HELP + while response == Gtk.ResponseType.HELP: response = self.top.run() - if response == gtk.RESPONSE_HELP: + if response == Gtk.ResponseType.HELP: self.help_clicked() - elif response == gtk.RESPONSE_YES: + elif response == Gtk.ResponseType.YES: self.top.destroy() ErrorReportAssistant(error_detail = self._error_detail, rotate_handler = self._rotate_handler, ownthread=True) - elif response == gtk.RESPONSE_CANCEL: + elif response == Gtk.ResponseType.CANCEL: self.top.destroy() def help_clicked(self): @@ -82,25 +82,24 @@ class ErrorView(object): def draw_window(self): title = "%s - Gramps" % _("Error Report") - self.top = gtk.Dialog(title) - #self.top.set_default_size(400,350) - self.top.set_has_separator(False) - self.top.vbox.set_spacing(5) + self.top = Gtk.Dialog(title) + vbox = self.top.get_content_area() + vbox.set_spacing(5) self.top.set_border_width(12) - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.set_spacing(12) - image = gtk.Image() - image.set_from_stock(gtk.STOCK_DIALOG_ERROR, gtk.ICON_SIZE_DIALOG) - label = gtk.Label('%s' + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_DIALOG_ERROR, Gtk.IconSize.DIALOG) + label = Gtk.Label(label='%s' % _("Gramps has experienced an unexpected error")) label.set_use_markup(True) - hbox.pack_start(image,False) + hbox.pack_start(image, False, True, 0) hbox.add(label) - self.top.vbox.pack_start(hbox,False,False,5) + vbox.pack_start(hbox, False, False, 5) - instructions_label = gtk.Label( + instructions_label = Gtk.Label(label= _("Your data will be safe but it would be advisable to restart Gramps immediately. "\ "If you would like to report the problem to the Gramps team "\ "please click Report and the Error Reporting Wizard will help you "\ @@ -108,31 +107,31 @@ class ErrorView(object): instructions_label.set_line_wrap(True) instructions_label.set_use_markup(True) - self.top.vbox.pack_start(instructions_label,False,False,5) + vbox.pack_start(instructions_label, False, False, 5) - tb_frame = gtk.Frame(_("Error Detail")) + tb_frame = Gtk.Frame(label=_("Error Detail")) tb_frame.set_border_width(6) - tb_label = gtk.TextView() + tb_label = Gtk.TextView() tb_label.get_buffer().set_text(self._error_detail.get_formatted_log()) tb_label.set_border_width(6) tb_label.set_editable(False) - scroll = gtk.ScrolledWindow() - scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scroll = Gtk.ScrolledWindow() + scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) scroll.set_size_request(-1, 60) tb_frame.add(scroll) scroll.add_with_viewport(tb_label) - tb_expander = gtk.Expander('%s' % _("Error Detail")) + tb_expander = Gtk.Expander(label='%s' % _("Error Detail")) tb_expander.set_use_markup(True) tb_expander.add(tb_frame) - self.top.vbox.pack_start(tb_expander,True,True,5) + vbox.pack_start(tb_expander, True, True, 5) - self.top.add_button(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL) - self.top.add_button(_("Report"),gtk.RESPONSE_YES) - self.top.add_button(gtk.STOCK_HELP,gtk.RESPONSE_HELP) + self.top.add_button(Gtk.STOCK_CANCEL,Gtk.ResponseType.CANCEL) + self.top.add_button(_("Report"),Gtk.ResponseType.YES) + self.top.add_button(Gtk.STOCK_HELP,Gtk.ResponseType.HELP) self.top.show_all() diff --git a/src/gui/managedwindow.py b/src/gui/managedwindow.py index d37392333..78abe6827 100644 --- a/src/gui/managedwindow.py +++ b/src/gui/managedwindow.py @@ -39,7 +39,7 @@ import os # GNOME/GTK # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -108,7 +108,7 @@ class GrampsWindowManager(object): self.uimanager = uimanager self.window_tree = [] self.id2item = {} - self.action_group = gtk.ActionGroup('WindowManger') + self.action_group = Gtk.ActionGroup('WindowManger') self.active = DISABLED self.ui = _win_top + _win_btm @@ -286,7 +286,7 @@ class GrampsWindowManager(object): self.uimanager.remove_ui(self.active) self.uimanager.remove_action_group(self.action_group) - self.action_group = gtk.ActionGroup('WindowManger') + self.action_group = Gtk.ActionGroup('WindowManger') action_data = [] data = StringIO() @@ -395,12 +395,12 @@ class ManagedWindow(object): """ Set the window that is managed. - :param window: if isWindow=False window must be a gtk.Window() object, otherwise None + :param window: if isWindow=False window must be a Gtk.Window() object, otherwise None :param title: a label widget in which to write the title, None if not needed :param text: text to use as title of window and in title param :param msg: if not None, use msg as title of window instead of text :param isWindow: {if isWindow than self is the window - (so self inherits from gtk.Window and + (so self inherits from Gtk.Window and from ManagedWindow) if not isWindow, than window is the Window to manage, and after this method self.window stores it. @@ -414,7 +414,7 @@ class ManagedWindow(object): set_titles(self, title, text, msg) else : set_titles(window, title, text, msg) - #closing the gtk.Window must also close ManagedWindow + #closing the Gtk.Window must also close ManagedWindow self.window = window self.window.connect('delete-event', self.close) @@ -460,7 +460,7 @@ class ManagedWindow(object): else : assert self.window, "ManagedWindow: self.window does not exist!" - self.window.set_transient_for(self.parent_window) + self.set_transient_for(self.parent_window) self.opened = True self.window.show_all() @@ -482,15 +482,15 @@ class ManagedWindow(object): #self.show() while True: response = self.window.run() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: # dialog will be closed by connect, now continue work while # rest of dialog is unresponsive, release when finished self.close() if after_ok_func is not None: after_ok_func() break - elif (response == gtk.RESPONSE_DELETE_EVENT or - response == gtk.RESPONSE_CANCEL): + elif (response == Gtk.ResponseType.DELETE_EVENT or + response == Gtk.ResponseType.CANCEL): # connect buttons generating this to a close call break diff --git a/src/gui/merge/mergeperson.py b/src/gui/merge/mergeperson.py index 0756b7343..561372ce5 100644 --- a/src/gui/merge/mergeperson.py +++ b/src/gui/merge/mergeperson.py @@ -31,7 +31,7 @@ Provide merge capabilities for persons. # GTK/Gnome modules # #------------------------------------------------------------------------- -import pango +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -173,8 +173,8 @@ class MergePerson(ManagedWindow): indent.set_property('pixels-above-lines', 1) indent.set_property('pixels-below-lines', 1) title = tobj.create_tag() - title.set_property('weight', pango.WEIGHT_BOLD) - title.set_property('scale', pango.SCALE_LARGE) + title.set_property('weight', Pango.Weight.BOLD) + title.set_property('scale', Pango.SCALE_LARGE) self.add(tobj, title, name_displayer.display(person)) self.add(tobj, normal, "%s:\t%s" % (_('ID'), person.get_gramps_id())) diff --git a/src/gui/merge/mergeplace.py b/src/gui/merge/mergeplace.py index 7c5052b8c..a8c9cb258 100644 --- a/src/gui/merge/mergeplace.py +++ b/src/gui/merge/mergeplace.py @@ -30,7 +30,7 @@ Provide merge capabilities for places. # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -105,8 +105,8 @@ class MergePlace(ManagedWindow): loc2 = self.pl2.get_main_location().get_text_data_list() tv1 = self.get_widget("loc1") tv2 = self.get_widget("loc2") - tb1 = gtk.TextBuffer() - tb2 = gtk.TextBuffer() + tb1 = Gtk.TextBuffer() + tb2 = Gtk.TextBuffer() tv1.set_buffer(tb1) tv2.set_buffer(tb2) tb1.set_text("\n".join(loc1)) diff --git a/src/gui/navigator.py b/src/gui/navigator.py index 9fe9fba04..b4f14e324 100644 --- a/src/gui/navigator.py +++ b/src/gui/navigator.py @@ -28,7 +28,7 @@ manage pages in the main Gramps window. # GNOME modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -50,47 +50,47 @@ class Navigator(object): self.viewmanager = viewmanager self.pages = [] - self.top = gtk.VBox() + self.top = Gtk.VBox() - frame = gtk.Frame() - hbox = gtk.HBox() + frame = Gtk.Frame() + hbox = Gtk.HBox() hbox.show() frame.add(hbox) frame.show() - self.select_button = gtk.ToggleButton() - self.select_button.set_relief(gtk.RELIEF_NONE) - select_hbox = gtk.HBox() - self.title_label = gtk.Label('') - arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_NONE) - select_hbox.pack_start(self.title_label, False) - select_hbox.pack_end(arrow, False) + self.select_button = Gtk.ToggleButton() + self.select_button.set_relief(Gtk.ReliefStyle.NONE) + select_hbox = Gtk.HBox() + self.title_label = Gtk.Label(label='') + arrow = Gtk.Arrow(Gtk.ArrowType.DOWN, Gtk.ShadowType.NONE) + select_hbox.pack_start(self.title_label, False, True, 0) + select_hbox.pack_end(arrow, False, True, 0) self.select_button.add(select_hbox) self.select_button.connect('button_press_event', self.__menu_button_pressed) - #close_button = gtk.Button() - #img = gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) + #close_button = Gtk.Button() + #img = Gtk.Image.new_from_stock(Gtk.STOCK_CLOSE, Gtk.IconSize.MENU) #close_button.set_image(img) - #close_button.set_relief(gtk.RELIEF_NONE) + #close_button.set_relief(Gtk.ReliefStyle.NONE) #close_button.connect('clicked', self.cb_close_clicked) - hbox.pack_start(self.select_button, False) - #hbox.pack_end(close_button, False) + hbox.pack_start(self.select_button, False, True, 0) + #hbox.pack_end(close_button, False, True, 0) - self.top.pack_end(frame, False) + self.top.pack_end(frame, False, True, 0) - self.menu = gtk.Menu() + self.menu = Gtk.Menu() self.menu.show() self.menu.connect('deactivate', cb_menu_deactivate, self.select_button) - self.notebook = gtk.Notebook() + self.notebook = Gtk.Notebook() self.notebook.show() self.notebook.set_show_tabs(False) self.notebook.set_show_border(False) self.notebook.connect('switch_page', self.cb_switch_page) self.top.show() - self.top.pack_start(self.notebook, True) + self.top.pack_start(self.notebook, True, True, 0) def get_top(self): """ @@ -103,9 +103,9 @@ class Navigator(object): Add a page to the sidebar for a plugin. """ self.pages.append((title, sidebar)) - index = self.notebook.append_page(sidebar.get_top(), gtk.Label(title)) + index = self.notebook.append_page(sidebar.get_top(), Gtk.Label(label=title)) - menu_item = gtk.MenuItem(title) + menu_item = Gtk.MenuItem(title) if order == START: self.menu.prepend(menu_item) self.notebook.set_current_page(index) @@ -128,7 +128,7 @@ class Navigator(object): """ Called when the button to select a sidebar page is pressed. """ - if event.button == 1 and event.type == gtk.gdk.BUTTON_PRESS: + if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS: button.grab_focus() button.set_active(True) diff --git a/src/gui/plug/_dialogs.py b/src/gui/plug/_dialogs.py index b679e9c14..4ebb0fed1 100644 --- a/src/gui/plug/_dialogs.py +++ b/src/gui/plug/_dialogs.py @@ -26,7 +26,7 @@ # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -88,7 +88,7 @@ class PluginDialog(ManagedWindow): self.state = state self.uistate = uistate - self.dialog = gtk.Builder() + self.dialog = Gtk.Builder() self.dialog.add_from_file(const.PLUGINS_GLADE) self.dialog.connect_signals({ "on_report_apply_clicked" : self.on_apply_clicked, @@ -102,10 +102,10 @@ class PluginDialog(ManagedWindow): self.set_window(window, self.title, msg ) - self.store = gtk.TreeStore(str) + 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) + col = Gtk.TreeViewColumn('', Gtk.CellRendererText(), text=0) self.tree.append_column(col) self.tree.set_model(self.store) diff --git a/src/gui/plug/_guioptions.py b/src/gui/plug/_guioptions.py index 37ead20bd..cfd55b7e0 100644 --- a/src/gui/plug/_guioptions.py +++ b/src/gui/plug/_guioptions.py @@ -42,8 +42,8 @@ import sys # gtk modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -73,32 +73,31 @@ class LastNameDialog(ManagedWindow): def __init__(self, database, uistate, track, surnames, skip_list=set()): ManagedWindow.__init__(self, uistate, track, self) - flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT | \ - gtk.DIALOG_NO_SEPARATOR - buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, - gtk.RESPONSE_ACCEPT) - self.__dlg = gtk.Dialog(None, uistate.window, flags, buttons) - self.__dlg.set_position(gtk.WIN_POS_CENTER_ON_PARENT) + flags = Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT + buttons = (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT, Gtk.STOCK_OK, + Gtk.ResponseType.ACCEPT) + self.__dlg = Gtk.Dialog(None, uistate.window, flags, buttons) + self.__dlg.set_position(Gtk.WindowPosition.CENTER_ON_PARENT) self.set_window(self.__dlg, None, _('Select surname')) self.window.set_default_size(400, 400) # build up a container to display all of the people of interest - self.__model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT) - self.__tree_view = gtk.TreeView(self.__model) - col1 = gtk.TreeViewColumn(_('Surname'), gtk.CellRendererText(), text=0) - col2 = gtk.TreeViewColumn(_('Count'), gtk.CellRendererText(), text=1) + self.__model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_INT) + self.__tree_view = Gtk.TreeView(self.__model) + col1 = Gtk.TreeViewColumn(_('Surname'), Gtk.CellRendererText(), text=0) + col2 = Gtk.TreeViewColumn(_('Count'), Gtk.CellRendererText(), text=1) col1.set_resizable(True) col2.set_resizable(True) - col1.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) - col2.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) + col1.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + col2.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) col1.set_sort_column_id(0) col2.set_sort_column_id(1) self.__tree_view.append_column(col1) self.__tree_view.append_column(col2) - scrolled_window = gtk.ScrolledWindow() + scrolled_window = Gtk.ScrolledWindow() scrolled_window.add(self.__tree_view) - scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - scrolled_window.set_shadow_type(gtk.SHADOW_OUT) + scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + scrolled_window.set_shadow_type(Gtk.ShadowType.OUT) self.__dlg.vbox.pack_start(scrolled_window, expand=True, fill=True) scrolled_window.show_all() @@ -131,12 +130,12 @@ class LastNameDialog(ManagedWindow): self.__model.append([key, surnames[key]]) # keep the list sorted starting with the most popular last name - self.__model.set_sort_column_id(1, gtk.SORT_DESCENDING) + self.__model.set_sort_column_id(1, Gtk.SortType.DESCENDING) # the "OK" button should be enabled/disabled based on the selection of # a row self.__tree_selection = self.__tree_view.get_selection() - self.__tree_selection.set_mode(gtk.SELECTION_MULTIPLE) + self.__tree_selection.set_mode(Gtk.SelectionMode.MULTIPLE) self.__tree_selection.select_path(0) def run(self): @@ -145,7 +144,7 @@ class LastNameDialog(ManagedWindow): """ response = self.__dlg.run() surname_set = set() - if response == gtk.RESPONSE_ACCEPT: + if response == Gtk.ResponseType.ACCEPT: (mode, paths) = self.__tree_selection.get_selected_rows() for path in paths: i = self.__model.get_iter(path) @@ -159,7 +158,7 @@ class LastNameDialog(ManagedWindow): # GuiStringOption class # #------------------------------------------------------------------------- -class GuiStringOption(gtk.Entry): +class GuiStringOption(Gtk.Entry): """ This class displays an option that is a simple one-line string. """ @@ -169,7 +168,7 @@ class GuiStringOption(gtk.Entry): @type option: gen.plug.menu.StringOption @return: nothing """ - gtk.Entry.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.set_text( self.__option.get_value() ) @@ -221,14 +220,14 @@ class GuiStringOption(gtk.Entry): # GuiColorOption class # #------------------------------------------------------------------------- -class GuiColorOption(gtk.ColorButton): +class GuiColorOption(Gtk.ColorButton): """ This class displays an option that allows the selection of a colour. """ def __init__(self, option, dbstate, uistate, track): self.__option = option value = self.__option.get_value() - gtk.ColorButton.__init__( self, gtk.gdk.color_parse(value) ) + GObject.GObject.__init__( self, Gdk.color_parse(value) ) # Set up signal handlers when the widget value is changed # from user interaction or programmatically. When handling @@ -258,7 +257,7 @@ class GuiColorOption(gtk.ColorButton): Handle the change made programmatically """ self.handler_block(self.changekey) - self.set_color(gtk.gdk.color_parse(self.__option.get_value())) + self.set_color(Gdk.color_parse(self.__option.get_value())) self.handler_unblock(self.changekey) def clean_up(self): @@ -273,7 +272,7 @@ class GuiColorOption(gtk.ColorButton): # GuiNumberOption class # #------------------------------------------------------------------------- -class GuiNumberOption(gtk.SpinButton): +class GuiNumberOption(Gtk.SpinButton): """ This class displays an option that is a simple number with defined maximum and minimum values. @@ -283,7 +282,7 @@ class GuiNumberOption(gtk.SpinButton): decimals = 0 step = self.__option.get_step() - adj = gtk.Adjustment(1, + adj = Gtk.Adjustment(1, self.__option.get_min(), self.__option.get_max(), step) @@ -293,8 +292,8 @@ class GuiNumberOption(gtk.SpinButton): import math decimals = int(math.log10(step) * -1) - gtk.SpinButton.__init__(self, adj, digits=decimals) - gtk.SpinButton.set_numeric(self, True) + GObject.GObject.__init__(self, adj, digits=decimals) + Gtk.SpinButton.set_numeric(self, True) self.set_value(self.__option.get_value()) @@ -346,19 +345,19 @@ class GuiNumberOption(gtk.SpinButton): # GuiTextOption class # #------------------------------------------------------------------------- -class GuiTextOption(gtk.ScrolledWindow): +class GuiTextOption(Gtk.ScrolledWindow): """ This class displays an option that is a multi-line string. """ def __init__(self, option, dbstate, uistate, track): self.__option = option - gtk.ScrolledWindow.__init__(self) - self.set_shadow_type(gtk.SHADOW_IN) - self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + GObject.GObject.__init__(self) + self.set_shadow_type(Gtk.ShadowType.IN) + self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) # Add a TextView value = self.__option.get_value() - gtext = gtk.TextView() + gtext = Gtk.TextView() gtext.set_size_request(-1, 70) gtext.get_buffer().set_text("\n".join(value)) gtext.set_editable(1) @@ -373,8 +372,8 @@ class GuiTextOption(gtk.ScrolledWindow): self.valuekey = self.__option.connect('value-changed', self.__value_changed) # Required for tooltip - gtext.add_events(gtk.gdk.ENTER_NOTIFY_MASK) - gtext.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) + gtext.add_events(Gdk.EventMask.ENTER_NOTIFY_MASK) + gtext.add_events(Gdk.EventMask.LEAVE_NOTIFY_MASK) gtext.set_tooltip_text(self.__option.get_help()) def __text_changed(self, obj): # IGNORE:W0613 - obj is unused @@ -429,13 +428,13 @@ class GuiTextOption(gtk.ScrolledWindow): # GuiBooleanOption class # #------------------------------------------------------------------------- -class GuiBooleanOption(gtk.CheckButton): +class GuiBooleanOption(Gtk.CheckButton): """ This class displays an option that is a boolean (True or False). """ def __init__(self, option, dbstate, uistate, track): self.__option = option - gtk.CheckButton.__init__(self, self.__option.get_label()) + GObject.GObject.__init__(self, self.__option.get_label()) self.set_active(self.__option.get_value()) # Set up signal handlers when the widget value is changed @@ -484,18 +483,18 @@ class GuiBooleanOption(gtk.CheckButton): # GuiEnumeratedListOption class # #------------------------------------------------------------------------- -class GuiEnumeratedListOption(gtk.HBox): +class GuiEnumeratedListOption(Gtk.HBox): """ This class displays an option that provides a finite number of values. Each possible value is assigned a value and a description. """ def __init__(self, option, dbstate, uistate, track): - gtk.HBox.__init__(self) - evtBox = gtk.EventBox() + GObject.GObject.__init__(self) + evtBox = Gtk.EventBox() self.__option = option - self.__combo = gtk.combo_box_new_text() + self.__combo = Gtk.ComboBoxText() evtBox.add(self.__combo) - self.pack_start(evtBox, True, True) + self.pack_start(evtBox, True, True, 0) self.__update_options() @@ -577,7 +576,7 @@ class GuiEnumeratedListOption(gtk.HBox): # GuiPersonOption class # #------------------------------------------------------------------------- -class GuiPersonOption(gtk.HBox): +class GuiPersonOption(Gtk.HBox): """ This class displays an option that allows a person from the database to be selected. @@ -588,23 +587,23 @@ class GuiPersonOption(gtk.HBox): @type option: gen.plug.menu.PersonOption @return: nothing """ - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.__dbstate = dbstate self.__db = dbstate.get_database() self.__uistate = uistate self.__track = track - self.__person_label = gtk.Label() + self.__person_label = Gtk.Label() self.__person_label.set_alignment(0.0, 0.5) - pevt = gtk.EventBox() + pevt = Gtk.EventBox() pevt.add(self.__person_label) - person_button = widgets.SimpleButton(gtk.STOCK_INDEX, + person_button = widgets.SimpleButton(Gtk.STOCK_INDEX, self.__get_person_clicked) - person_button.set_relief(gtk.RELIEF_NORMAL) + person_button.set_relief(Gtk.ReliefStyle.NORMAL) - self.pack_start(pevt, False) - self.pack_end(person_button, False) + self.pack_start(pevt, False, True, 0) + self.pack_end(person_button, False, True, 0) gid = self.__option.get_value() @@ -701,7 +700,7 @@ class GuiPersonOption(gtk.HBox): # GuiFamilyOption class # #------------------------------------------------------------------------- -class GuiFamilyOption(gtk.HBox): +class GuiFamilyOption(Gtk.HBox): """ This class displays an option that allows a family from the database to be selected. @@ -712,23 +711,23 @@ class GuiFamilyOption(gtk.HBox): @type option: gen.plug.menu.FamilyOption @return: nothing """ - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.__dbstate = dbstate self.__db = dbstate.get_database() self.__uistate = uistate self.__track = track - self.__family_label = gtk.Label() + self.__family_label = Gtk.Label() self.__family_label.set_alignment(0.0, 0.5) - pevt = gtk.EventBox() + pevt = Gtk.EventBox() pevt.add(self.__family_label) - family_button = widgets.SimpleButton(gtk.STOCK_INDEX, + family_button = widgets.SimpleButton(Gtk.STOCK_INDEX, self.__get_family_clicked) - family_button.set_relief(gtk.RELIEF_NORMAL) + family_button.set_relief(Gtk.ReliefStyle.NORMAL) - self.pack_start(pevt, False) - self.pack_end(family_button, False) + self.pack_start(pevt, False, True, 0) + self.pack_end(family_button, False, True, 0) self.__initialize_family() @@ -887,7 +886,7 @@ class GuiFamilyOption(gtk.HBox): # GuiNoteOption class # #------------------------------------------------------------------------- -class GuiNoteOption(gtk.HBox): +class GuiNoteOption(Gtk.HBox): """ This class displays an option that allows a note from the database to be selected. @@ -898,23 +897,23 @@ class GuiNoteOption(gtk.HBox): @type option: gen.plug.menu.NoteOption @return: nothing """ - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.__dbstate = dbstate self.__db = dbstate.get_database() self.__uistate = uistate self.__track = track - self.__note_label = gtk.Label() + self.__note_label = Gtk.Label() self.__note_label.set_alignment(0.0, 0.5) - pevt = gtk.EventBox() + pevt = Gtk.EventBox() pevt.add(self.__note_label) - note_button = widgets.SimpleButton(gtk.STOCK_INDEX, + note_button = widgets.SimpleButton(Gtk.STOCK_INDEX, self.__get_note_clicked) - note_button.set_relief(gtk.RELIEF_NORMAL) + note_button.set_relief(Gtk.ReliefStyle.NORMAL) - self.pack_start(pevt, False) - self.pack_end(note_button, False) + self.pack_start(pevt, False, True, 0) + self.pack_end(note_button, False, True, 0) # Initialize to the current value nid = self.__option.get_value() @@ -991,7 +990,7 @@ class GuiNoteOption(gtk.HBox): # GuiMediaOption class # #------------------------------------------------------------------------- -class GuiMediaOption(gtk.HBox): +class GuiMediaOption(Gtk.HBox): """ This class displays an option that allows a media object from the database to be selected. @@ -1002,23 +1001,23 @@ class GuiMediaOption(gtk.HBox): @type option: gen.plug.menu.MediaOption @return: nothing """ - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.__dbstate = dbstate self.__db = dbstate.get_database() self.__uistate = uistate self.__track = track - self.__media_label = gtk.Label() + self.__media_label = Gtk.Label() self.__media_label.set_alignment(0.0, 0.5) - pevt = gtk.EventBox() + pevt = Gtk.EventBox() pevt.add(self.__media_label) - media_button = widgets.SimpleButton(gtk.STOCK_INDEX, + media_button = widgets.SimpleButton(Gtk.STOCK_INDEX, self.__get_media_clicked) - media_button.set_relief(gtk.RELIEF_NORMAL) + media_button.set_relief(Gtk.ReliefStyle.NORMAL) - self.pack_start(pevt, False) - self.pack_end(media_button, False) + self.pack_start(pevt, False, True, 0) + self.pack_end(media_button, False, True, 0) # Initialize to the current value mid = self.__option.get_value() @@ -1092,7 +1091,7 @@ class GuiMediaOption(gtk.HBox): # GuiPersonListOption class # #------------------------------------------------------------------------- -class GuiPersonListOption(gtk.HBox): +class GuiPersonListOption(Gtk.HBox): """ This class displays a widget that allows multiple people from the database to be selected. @@ -1103,31 +1102,31 @@ class GuiPersonListOption(gtk.HBox): @type option: gen.plug.menu.PersonListOption @return: nothing """ - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.__dbstate = dbstate self.__db = dbstate.get_database() self.__uistate = uistate self.__track = track - self.__model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) - self.__tree_view = gtk.TreeView(self.__model) + self.__model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) + self.__tree_view = Gtk.TreeView(self.__model) self.__tree_view.set_size_request(150, 150) - col1 = gtk.TreeViewColumn(_('Name' ), gtk.CellRendererText(), text=0) - col2 = gtk.TreeViewColumn(_('ID' ), gtk.CellRendererText(), text=1) + col1 = Gtk.TreeViewColumn(_('Name' ), Gtk.CellRendererText(), text=0) + col2 = Gtk.TreeViewColumn(_('ID' ), Gtk.CellRendererText(), text=1) col1.set_resizable(True) col2.set_resizable(True) - col1.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) - col2.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) + col1.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + col2.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) col1.set_sort_column_id(0) col2.set_sort_column_id(1) self.__tree_view.append_column(col1) self.__tree_view.append_column(col2) - self.__scrolled_window = gtk.ScrolledWindow() + self.__scrolled_window = Gtk.ScrolledWindow() self.__scrolled_window.add(self.__tree_view) - self.__scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, - gtk.POLICY_AUTOMATIC) - self.__scrolled_window.set_shadow_type(gtk.SHADOW_OUT) + self.__scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, + Gtk.PolicyType.AUTOMATIC) + self.__scrolled_window.set_shadow_type(Gtk.ShadowType.OUT) self.pack_start(self.__scrolled_window, expand=True, fill=True) @@ -1135,14 +1134,14 @@ class GuiPersonListOption(gtk.HBox): # now setup the '+' and '-' pushbutton for adding/removing people from # the container - self.__add_person = widgets.SimpleButton(gtk.STOCK_ADD, + self.__add_person = widgets.SimpleButton(Gtk.STOCK_ADD, self.__add_person_clicked) - self.__del_person = widgets.SimpleButton(gtk.STOCK_REMOVE, + self.__del_person = widgets.SimpleButton(Gtk.STOCK_REMOVE, self.__del_person_clicked) - self.__vbbox = gtk.VButtonBox() + self.__vbbox = Gtk.VButtonBox() self.__vbbox.add(self.__add_person) self.__vbbox.add(self.__del_person) - self.__vbbox.set_layout(gtk.BUTTONBOX_SPREAD) + self.__vbbox.set_layout(Gtk.ButtonBoxStyle.SPREAD) self.pack_end(self.__vbbox, expand=False) self.valuekey = self.__option.connect('value-changed', self.__value_changed) @@ -1196,7 +1195,7 @@ class GuiPersonListOption(gtk.HBox): text, _('No'), None, _('Yes'), None) - if prompt.get_response() == gtk.RESPONSE_YES: + if prompt.get_response() == Gtk.ResponseType.YES: gid = spouse.get_gramps_id() self.__model.append([spouse_name, gid]) @@ -1269,7 +1268,7 @@ class GuiPersonListOption(gtk.HBox): # GuiPlaceListOption class # #------------------------------------------------------------------------- -class GuiPlaceListOption(gtk.HBox): +class GuiPlaceListOption(Gtk.HBox): """ This class displays a widget that allows multiple places from the database to be selected. @@ -1280,31 +1279,31 @@ class GuiPlaceListOption(gtk.HBox): @type option: gen.plug.menu.PlaceListOption @return: nothing """ - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.__dbstate = dbstate self.__db = dbstate.get_database() self.__uistate = uistate self.__track = track - self.__model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) - self.__tree_view = gtk.TreeView(self.__model) + self.__model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) + self.__tree_view = Gtk.TreeView(self.__model) self.__tree_view.set_size_request(150, 150) - col1 = gtk.TreeViewColumn(_('Place' ), gtk.CellRendererText(), text=0) - col2 = gtk.TreeViewColumn(_('ID' ), gtk.CellRendererText(), text=1) + col1 = Gtk.TreeViewColumn(_('Place' ), Gtk.CellRendererText(), text=0) + col2 = Gtk.TreeViewColumn(_('ID' ), Gtk.CellRendererText(), text=1) col1.set_resizable(True) col2.set_resizable(True) - col1.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) - col2.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) + col1.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + col2.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) col1.set_sort_column_id(0) col2.set_sort_column_id(1) self.__tree_view.append_column(col1) self.__tree_view.append_column(col2) - self.__scrolled_window = gtk.ScrolledWindow() + self.__scrolled_window = Gtk.ScrolledWindow() self.__scrolled_window.add(self.__tree_view) - self.__scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, - gtk.POLICY_AUTOMATIC) - self.__scrolled_window.set_shadow_type(gtk.SHADOW_OUT) + self.__scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, + Gtk.PolicyType.AUTOMATIC) + self.__scrolled_window.set_shadow_type(Gtk.ShadowType.OUT) self.pack_start(self.__scrolled_window, expand=True, fill=True) @@ -1312,14 +1311,14 @@ class GuiPlaceListOption(gtk.HBox): # now setup the '+' and '-' pushbutton for adding/removing places from # the container - self.__add_place = widgets.SimpleButton(gtk.STOCK_ADD, + self.__add_place = widgets.SimpleButton(Gtk.STOCK_ADD, self.__add_place_clicked) - self.__del_place = widgets.SimpleButton(gtk.STOCK_REMOVE, + self.__del_place = widgets.SimpleButton(Gtk.STOCK_REMOVE, self.__del_place_clicked) - self.__vbbox = gtk.VButtonBox() + self.__vbbox = Gtk.VButtonBox() self.__vbbox.add(self.__add_place) self.__vbbox.add(self.__del_place) - self.__vbbox.set_layout(gtk.BUTTONBOX_SPREAD) + self.__vbbox.set_layout(Gtk.ButtonBoxStyle.SPREAD) self.pack_end(self.__vbbox, expand=False) self.valuekey = self.__option.connect('value-changed', self.__value_changed) @@ -1412,7 +1411,7 @@ class GuiPlaceListOption(gtk.HBox): # GuiSurnameColorOption class # #------------------------------------------------------------------------- -class GuiSurnameColorOption(gtk.HBox): +class GuiSurnameColorOption(Gtk.HBox): """ This class displays a widget that allows multiple surnames to be selected from the database, and to assign a colour (not necessarily @@ -1424,7 +1423,7 @@ class GuiSurnameColorOption(gtk.HBox): @type option: gen.plug.menu.SurnameColorOption @return: nothing """ - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.__dbstate = dbstate self.__db = dbstate.get_database() @@ -1435,34 +1434,34 @@ class GuiSurnameColorOption(gtk.HBox): # and used each time after. self.__surnames = {} # list of surnames and count - self.__model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) - self.__tree_view = gtk.TreeView(self.__model) + self.__model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING) + self.__tree_view = Gtk.TreeView(self.__model) self.__tree_view.set_size_request(150, 150) self.__tree_view.connect('row-activated', self.__row_clicked) - col1 = gtk.TreeViewColumn(_('Surname'), gtk.CellRendererText(), text=0) - col2 = gtk.TreeViewColumn(_('Color'), gtk.CellRendererText(), text=1) + col1 = Gtk.TreeViewColumn(_('Surname'), Gtk.CellRendererText(), text=0) + col2 = Gtk.TreeViewColumn(_('Color'), Gtk.CellRendererText(), text=1) col1.set_resizable(True) col2.set_resizable(True) col1.set_sort_column_id(0) - col1.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) - col2.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) + col1.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + col2.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.__tree_view.append_column(col1) self.__tree_view.append_column(col2) - self.scrolled_window = gtk.ScrolledWindow() + self.scrolled_window = Gtk.ScrolledWindow() self.scrolled_window.add(self.__tree_view) - self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, - gtk.POLICY_AUTOMATIC) - self.scrolled_window.set_shadow_type(gtk.SHADOW_OUT) + self.scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, + Gtk.PolicyType.AUTOMATIC) + self.scrolled_window.set_shadow_type(Gtk.ShadowType.OUT) self.pack_start(self.scrolled_window, expand=True, fill=True) - self.add_surname = widgets.SimpleButton(gtk.STOCK_ADD, + self.add_surname = widgets.SimpleButton(Gtk.STOCK_ADD, self.__add_clicked) - self.del_surname = widgets.SimpleButton(gtk.STOCK_REMOVE, + self.del_surname = widgets.SimpleButton(Gtk.STOCK_REMOVE, self.__del_clicked) - self.vbbox = gtk.VButtonBox() + self.vbbox = Gtk.VButtonBox() self.vbbox.add(self.add_surname) self.vbbox.add(self.del_surname) - self.vbbox.set_layout(gtk.BUTTONBOX_SPREAD) + self.vbbox.set_layout(Gtk.ButtonBoxStyle.SPREAD) self.pack_end(self.vbbox, expand=False) self.__value_changed() @@ -1506,15 +1505,15 @@ class GuiSurnameColorOption(gtk.HBox): # get the surname and colour value for this family i = self.__model.get_iter(path) surname = self.__model.get_value(i, 0) - colour = gtk.gdk.color_parse(self.__model.get_value(i, 1)) + colour = Gdk.color_parse(self.__model.get_value(i, 1)) title = _('Select color for %s') % surname - colour_dialog = gtk.ColorSelectionDialog(title) + colour_dialog = Gtk.ColorSelectionDialog(title) colorsel = colour_dialog.colorsel colorsel.set_current_color(colour) response = colour_dialog.run() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: colour = colorsel.get_current_color() colour_name = '#%02x%02x%02x' % ( int(colour.red *256/65536), @@ -1604,7 +1603,7 @@ class GuiSurnameColorOption(gtk.HBox): # GuiDestinationOption class # #------------------------------------------------------------------------- -class GuiDestinationOption(gtk.HBox): +class GuiDestinationOption(Gtk.HBox): """ This class displays an option that allows the user to select a DestinationOption. @@ -1615,18 +1614,18 @@ class GuiDestinationOption(gtk.HBox): @type option: gen.plug.menu.DestinationOption @return: nothing """ - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option - self.__entry = gtk.Entry() + self.__entry = Gtk.Entry() self.__entry.set_text( self.__option.get_value() ) - self.__button = gtk.Button() - img = gtk.Image() - img.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON) + self.__button = Gtk.Button() + img = Gtk.Image() + img.set_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON) self.__button.add(img) self.__button.connect('clicked', self.__select_file) - self.pack_start(self.__entry, True, True) + self.pack_start(self.__entry, True, True, 0) self.pack_end(self.__button, False, False) # Set up signal handlers when the widget value is changed @@ -1664,15 +1663,15 @@ class GuiDestinationOption(gtk.HBox): Handle the user's request to select a file (or directory). """ if self.__option.get_directory_entry(): - my_action = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER + my_action = Gtk.FileChooserAction.SELECT_FOLDER else: - my_action = gtk.FILE_CHOOSER_ACTION_SAVE + my_action = Gtk.FileChooserAction.SAVE - fcd = gtk.FileChooserDialog(_("Save As"), action=my_action, - buttons=(gtk.STOCK_CANCEL, - gtk.RESPONSE_CANCEL, - gtk.STOCK_OPEN, - gtk.RESPONSE_OK)) + fcd = Gtk.FileChooserDialog(_("Save As"), action=my_action, + buttons=(Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_OPEN, + Gtk.ResponseType.OK)) name = os.path.abspath(self.__option.get_value()) if self.__option.get_directory_entry(): @@ -1687,7 +1686,7 @@ class GuiDestinationOption(gtk.HBox): fcd.set_current_name(name) status = fcd.run() - if status == gtk.RESPONSE_OK: + if status == Gtk.ResponseType.OK: path = Utils.get_unicode_path_from_file_chooser(fcd.get_filename()) if path: if not self.__option.get_directory_entry() and \ @@ -1748,7 +1747,7 @@ class GuiStyleOption(GuiEnumeratedListOption): uistate, track) self.__option = option - self.__button = gtk.Button("%s..." % _("Style Editor")) + self.__button = Gtk.Button("%s..." % _("Style Editor")) self.__button.connect('clicked', self.__on_style_edit_clicked) self.pack_end(self.__button, False, False) @@ -1773,34 +1772,34 @@ class GuiStyleOption(GuiEnumeratedListOption): # GuiBooleanListOption class # #------------------------------------------------------------------------- -class GuiBooleanListOption(gtk.HBox): +class GuiBooleanListOption(Gtk.HBox): """ This class displays an option that provides a list of check boxes. Each possible value is assigned a value and a description. """ def __init__(self, option, dbstate, uistate, track): - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.__option = option self.__cbutton = [] COLUMNS = 2 # Number of checkbox columns column = [] for i in range(COLUMNS): - vbox = gtk.VBox() - self.pack_start(vbox, True, True) + vbox = Gtk.VBox() + self.pack_start(vbox, True, True, 0) column.append(vbox) vbox.show() counter = 0 default = option.get_value().split(',') for description in option.get_descriptions(): - button = gtk.CheckButton(description) + button = Gtk.CheckButton(description) self.__cbutton.append(button) if counter < len(default): if default[counter] == 'True': button.set_active(True) button.connect("toggled", self.__list_changed) - column[counter % COLUMNS].pack_start(button, True, True) + column[counter % COLUMNS].pack_start(button, True, True, 0) button.show() counter += 1 diff --git a/src/gui/plug/_windows.py b/src/gui/plug/_windows.py index 459b24e6c..10da67eb6 100644 --- a/src/gui/plug/_windows.py +++ b/src/gui/plug/_windows.py @@ -37,9 +37,9 @@ import sys # GTK modules # #------------------------------------------------------------------------- -import gtk -import pango -import gobject +from gi.repository import Gtk +from gi.repository import Pango +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -86,195 +86,195 @@ class PluginStatus(ManagedWindow): self.__pmgr = GuiPluginManager.get_instance() self.__preg = PluginRegister.get_instance() - self.set_window(gtk.Dialog("", uistate.window, - gtk.DIALOG_DESTROY_WITH_PARENT, - (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)), + self.set_window(Gtk.Dialog("", uistate.window, + Gtk.DialogFlags.DESTROY_WITH_PARENT, + (Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)), None, self.title) self.window.set_size_request(750, 400) self.window.connect('response', self.close) - notebook = gtk.Notebook() + notebook = Gtk.Notebook() #first page with all registered plugins - vbox_reg = gtk.VBox() - scrolled_window_reg = gtk.ScrolledWindow() - self.list_reg = gtk.TreeView() + vbox_reg = Gtk.VBox() + scrolled_window_reg = Gtk.ScrolledWindow() + self.list_reg = Gtk.TreeView() # model: plugintype, hidden, pluginname, plugindescr, pluginid - self.model_reg = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING) + self.model_reg = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, + GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING) self.selection_reg = self.list_reg.get_selection() self.list_reg.set_model(self.model_reg) self.list_reg.set_rules_hint(True) self.list_reg.connect('button-press-event', self.button_press_reg) - col0_reg = gtk.TreeViewColumn(_('Type'), gtk.CellRendererText(), text=0) + col0_reg = Gtk.TreeViewColumn(_('Type'), Gtk.CellRendererText(), text=0) col0_reg.set_sort_column_id(0) col0_reg.set_resizable(True) self.list_reg.append_column(col0_reg) - col = gtk.TreeViewColumn(_('Status'), gtk.CellRendererText(), markup=1) + col = Gtk.TreeViewColumn(_('Status'), Gtk.CellRendererText(), markup=1) col.set_sort_column_id(1) self.list_reg.append_column(col) - col2_reg = gtk.TreeViewColumn(_('Name'), gtk.CellRendererText(), text=2) + col2_reg = Gtk.TreeViewColumn(_('Name'), Gtk.CellRendererText(), text=2) col2_reg.set_sort_column_id(2) col2_reg.set_resizable(True) self.list_reg.append_column(col2_reg) - col = gtk.TreeViewColumn(_('Description'), gtk.CellRendererText(), text=3) + col = Gtk.TreeViewColumn(_('Description'), Gtk.CellRendererText(), text=3) col.set_sort_column_id(3) col.set_resizable(True) self.list_reg.append_column(col) self.list_reg.set_search_column(2) scrolled_window_reg.add(self.list_reg) - vbox_reg.pack_start(scrolled_window_reg) - hbutbox = gtk.HButtonBox() - hbutbox.set_layout(gtk.BUTTONBOX_SPREAD) - self.__info_btn = gtk.Button(_("Info")) + vbox_reg.pack_start(scrolled_window_reg, True, True, 0) + hbutbox = Gtk.HButtonBox() + hbutbox.set_layout(Gtk.ButtonBoxStyle.SPREAD) + self.__info_btn = Gtk.Button(_("Info")) hbutbox.add(self.__info_btn) self.__info_btn.connect('clicked', self.__info, self.list_reg, 4) # id_col - self.__hide_btn = gtk.Button(_("Hide/Unhide")) + self.__hide_btn = Gtk.Button(_("Hide/Unhide")) hbutbox.add(self.__hide_btn) self.__hide_btn.connect('clicked', self.__hide, self.list_reg, 4, 1) # list, id_col, hide_col if __debug__: - self.__edit_btn = gtk.Button(_("Edit")) + self.__edit_btn = Gtk.Button(_("Edit")) hbutbox.add(self.__edit_btn) self.__edit_btn.connect('clicked', self.__edit, self.list_reg, 4) # id_col - self.__load_btn = gtk.Button(_("Load")) + self.__load_btn = Gtk.Button(_("Load")) hbutbox.add(self.__load_btn) self.__load_btn.connect('clicked', self.__load, self.list_reg, 4) # id_col vbox_reg.pack_start(hbutbox, expand=False, padding=5) notebook.append_page(vbox_reg, - tab_label=gtk.Label(_('Registered Plugins'))) + tab_label=Gtk.Label(label=_('Registered Plugins'))) #second page with loaded plugins - vbox_loaded = gtk.VBox() - scrolled_window = gtk.ScrolledWindow() - self.list = gtk.TreeView() - self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING, object, - gobject.TYPE_STRING, gobject.TYPE_STRING) + vbox_loaded = Gtk.VBox() + scrolled_window = Gtk.ScrolledWindow() + self.list = Gtk.TreeView() + self.model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, + GObject.TYPE_STRING, object, + GObject.TYPE_STRING, GObject.TYPE_STRING) self.selection = self.list.get_selection() self.list.set_model(self.model) self.list.set_rules_hint(True) self.list.connect('button-press-event', self.button_press) self.list.connect('cursor-changed', self.cursor_changed) - col = gtk.TreeViewColumn(_('Loaded'), gtk.CellRendererText(), + col = Gtk.TreeViewColumn(_('Loaded'), Gtk.CellRendererText(), markup=0) col.set_sort_column_id(0) col.set_resizable(True) self.list.append_column(col) - col1 = gtk.TreeViewColumn(_('File'), gtk.CellRendererText(), + col1 = Gtk.TreeViewColumn(_('File'), Gtk.CellRendererText(), text=1) col1.set_sort_column_id(1) col1.set_resizable(True) self.list.append_column(col1) - col = gtk.TreeViewColumn(_('Status'), gtk.CellRendererText(), + col = Gtk.TreeViewColumn(_('Status'), Gtk.CellRendererText(), markup=5) col.set_sort_column_id(5) self.list.append_column(col) - col2 = gtk.TreeViewColumn(_('Message'), gtk.CellRendererText(), text=2) + col2 = Gtk.TreeViewColumn(_('Message'), Gtk.CellRendererText(), text=2) col2.set_sort_column_id(2) col2.set_resizable(True) self.list.append_column(col2) self.list.set_search_column(1) scrolled_window.add(self.list) - vbox_loaded.pack_start(scrolled_window) - hbutbox = gtk.HButtonBox() - hbutbox.set_layout(gtk.BUTTONBOX_SPREAD) - self.__info_btn = gtk.Button(_("Info")) + vbox_loaded.pack_start(scrolled_window, True, True, 0) + hbutbox = Gtk.HButtonBox() + hbutbox.set_layout(Gtk.ButtonBoxStyle.SPREAD) + self.__info_btn = Gtk.Button(_("Info")) hbutbox.add(self.__info_btn) self.__info_btn.connect('clicked', self.__info, self.list, 4) # id_col - self.__hide_btn = gtk.Button(_("Hide/Unhide")) + self.__hide_btn = Gtk.Button(_("Hide/Unhide")) hbutbox.add(self.__hide_btn) self.__hide_btn.connect('clicked', self.__hide, self.list, 4, 5) # list, id_col, hide_col if __debug__: - self.__edit_btn = gtk.Button(_("Edit")) + self.__edit_btn = Gtk.Button(_("Edit")) hbutbox.add(self.__edit_btn) self.__edit_btn.connect('clicked', self.__edit, self.list, 4) # id_col - self.__load_btn = gtk.Button(_("Load")) + self.__load_btn = Gtk.Button(_("Load")) self.__load_btn.set_sensitive(False) hbutbox.add(self.__load_btn) self.__load_btn.connect('clicked', self.__load, self.list, 4) # id_col vbox_loaded.pack_start(hbutbox, expand=False, padding=5) notebook.append_page(vbox_loaded, - tab_label=gtk.Label(_('Loaded Plugins'))) + tab_label=Gtk.Label(label=_('Loaded Plugins'))) #third page with method to install plugin - install_page = gtk.VBox() - scrolled_window = gtk.ScrolledWindow() - self.addon_list = gtk.TreeView() + install_page = Gtk.VBox() + scrolled_window = Gtk.ScrolledWindow() + self.addon_list = Gtk.TreeView() # model: help_name, name, ptype, image, desc, use, rating, contact, download, url - self.addon_model = gtk.ListStore(gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING) + self.addon_model = Gtk.ListStore(GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING) self.addon_list.set_model(self.addon_model) self.addon_list.set_rules_hint(True) #self.addon_list.connect('button-press-event', self.button_press) - col = gtk.TreeViewColumn(_('Addon Name'), gtk.CellRendererText(), + col = Gtk.TreeViewColumn(_('Addon Name'), Gtk.CellRendererText(), text=1) col.set_sort_column_id(1) self.addon_list.append_column(col) - col = gtk.TreeViewColumn(_('Type'), gtk.CellRendererText(), + col = Gtk.TreeViewColumn(_('Type'), Gtk.CellRendererText(), text=2) col.set_sort_column_id(2) self.addon_list.append_column(col) - col = gtk.TreeViewColumn(_('Description'), gtk.CellRendererText(), + col = Gtk.TreeViewColumn(_('Description'), Gtk.CellRendererText(), text=4) col.set_sort_column_id(4) self.addon_list.append_column(col) self.addon_list.connect('cursor-changed', self.button_press_addon) - install_row = gtk.HBox() - install_row.pack_start(gtk.Label(_("Path to Addon:")), expand=False) - self.install_addon_path = gtk.Entry() + install_row = Gtk.HBox() + install_row.pack_start(Gtk.Label(_("Path to Addon:", True, True, 0)), expand=False) + self.install_addon_path = Gtk.Entry() - button = gtk.Button() - img = gtk.Image() - img.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON) + button = Gtk.Button() + img = Gtk.Image() + img.set_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON) button.add(img) button.connect('clicked', self.__select_file) - install_row.pack_start(self.install_addon_path, expand=True) + install_row.pack_start(self.install_addon_path, True, True, 0) install_row.pack_start(button, expand=False, fill=False) scrolled_window.add(self.addon_list) - install_page.pack_start(scrolled_window) + install_page.pack_start(scrolled_window, True, True, 0) #add some spce under the scrollbar - install_page.pack_start(gtk.Label(''), expand=False, fill=False) + install_page.pack_start(Gtk.Label('', True, True, 0), expand=False, fill=False) #path to addon path line install_page.pack_start(install_row, expand=False, fill=False) - hbutbox = gtk.HButtonBox() - hbutbox.set_layout(gtk.BUTTONBOX_SPREAD) - self.__add_btn = gtk.Button(_("Install Addon")) + hbutbox = Gtk.HButtonBox() + hbutbox.set_layout(Gtk.ButtonBoxStyle.SPREAD) + self.__add_btn = Gtk.Button(_("Install Addon")) hbutbox.add(self.__add_btn) self.__add_btn.connect('clicked', self.__get_addon_top) - self.__add_all_btn = gtk.Button(_("Install All Addons")) + self.__add_all_btn = Gtk.Button(_("Install All Addons")) hbutbox.add(self.__add_all_btn) self.__add_all_btn.connect('clicked', self.__get_all_addons) - self.__refresh_btn = gtk.Button(_("Refresh Addon List")) + self.__refresh_btn = Gtk.Button(_("Refresh Addon List")) hbutbox.add(self.__refresh_btn) self.__refresh_btn.connect('clicked', self.__refresh_addon_list) install_page.pack_start(hbutbox, expand=False, padding=5) # notebook.append_page(install_page, - # tab_label=gtk.Label(_('Install Addons'))) + # tab_label=Gtk.Label(label=_('Install Addons'))) #add the notebook to the window - self.window.vbox.add(notebook) + self.window.get_content_area().add(notebook) if __debug__: # Only show the "Reload" button when in debug mode # (without -O on the command line) - self.__reload_btn = gtk.Button(_("Reload")) + self.__reload_btn = Gtk.Button(_("Reload")) self.window.action_area.add(self.__reload_btn) self.__reload_btn.connect('clicked', self.__reload) @@ -414,11 +414,11 @@ class PluginStatus(ManagedWindow): """ Select a file from the file system. """ - fcd = gtk.FileChooserDialog(_("Load Addon"), - buttons=(gtk.STOCK_CANCEL, - gtk.RESPONSE_CANCEL, - gtk.STOCK_OPEN, - gtk.RESPONSE_OK)) + fcd = Gtk.FileChooserDialog(_("Load Addon"), + buttons=(Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_OPEN, + Gtk.ResponseType.OK)) name = self.install_addon_path.get_text() dir = os.path.dirname(name) if not os.path.isdir(dir): @@ -431,7 +431,7 @@ class PluginStatus(ManagedWindow): fcd.set_filename(name) status = fcd.run() - if status == gtk.RESPONSE_OK: + if status == Gtk.ResponseType.OK: path = Utils.get_unicode_path_from_file_chooser(fcd.get_filename()) if path: self.install_addon_path.set_text(path) @@ -526,7 +526,7 @@ class PluginStatus(ManagedWindow): def button_press(self, obj, event): """ Callback function from the user clicking on a line """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: model, node = self.selection.get_selected() data = model.get_value(node, 3) name = model.get_value(node, 1) @@ -536,7 +536,7 @@ class PluginStatus(ManagedWindow): def button_press_reg(self, obj, event): """ Callback function from the user clicking on a line in reg plugin """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: self.__info(obj, self.list_reg, 4) def button_press_addon(self, obj): @@ -660,21 +660,21 @@ class PluginTrace(ManagedWindow): title = "%s: %s" % (_("Plugin Error"), name) ManagedWindow.__init__(self, uistate, track, self) - self.set_window(gtk.Dialog("", uistate.window, - gtk.DIALOG_DESTROY_WITH_PARENT, - (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)), + self.set_window(Gtk.Dialog("", uistate.window, + Gtk.DialogFlags.DESTROY_WITH_PARENT, + (Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)), None, title) self.window.set_size_request(600, 400) self.window.connect('response', self.close) - scrolled_window = gtk.ScrolledWindow() - scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - self.text = gtk.TextView() + scrolled_window = Gtk.ScrolledWindow() + scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + self.text = Gtk.TextView() scrolled_window.add(self.text) self.text.get_buffer().set_text( "".join(traceback.format_exception(data[0],data[1],data[2]))) - self.window.vbox.add(scrolled_window) + self.window.get_content_area().add(scrolled_window) self.window.show_all() def build_menu_names(self, obj): @@ -686,12 +686,12 @@ class PluginTrace(ManagedWindow): # Classes for tools # #------------------------------------------------------------------------- -class LinkTag(gtk.TextTag): +class LinkTag(Gtk.TextTag): def __init__(self, link, buffer): - gtk.TextTag.__init__(self, link) + GObject.GObject.__init__(self, link) tag_table = buffer.get_tag_table() self.set_property('foreground', "#0000ff") - self.set_property('underline', pango.UNDERLINE_SINGLE) + self.set_property('underline', Pango.Underline.SINGLE) try: tag_table.add(self) except ValueError: @@ -714,16 +714,16 @@ class ToolManagedWindowBase(ManagedWindow): self.format_menu = None self.style_button = None - window = gtk.Dialog('Tool') + window = Gtk.Dialog('Tool') self.set_window(window, None, self.get_title()) #self.window.set_has_separator(False) #self.window.connect('response', self.close) - self.cancel = self.window.add_button(gtk.STOCK_CLOSE, - gtk.RESPONSE_CANCEL) + self.cancel = self.window.add_button(Gtk.STOCK_CLOSE, + Gtk.ResponseType.CANCEL) self.cancel.connect('clicked', self.close) - self.ok = self.window.add_button(gtk.STOCK_EXECUTE, gtk.RESPONSE_OK) + self.ok = self.window.add_button(Gtk.STOCK_EXECUTE, Gtk.ResponseType.OK) self.ok.connect('clicked', self.on_ok_clicked) self.window.set_default_size(600, -1) @@ -734,7 +734,7 @@ class ToolManagedWindowBase(ManagedWindow): self.setup_title() self.setup_header() - #self.tbl = gtk.Table(4, 4, False) + #self.tbl = Gtk.Table(4, 4, False) #self.tbl.set_col_spacings(12) #self.tbl.set_row_spacings(6) #self.tbl.set_border_width(6) @@ -745,18 +745,18 @@ class ToolManagedWindowBase(ManagedWindow): # frame and to create other frames self.add_user_options() - self.notebook = gtk.Notebook() + self.notebook = Gtk.Notebook() self.notebook.set_border_width(6) - self.window.vbox.add(self.notebook) + self.window.get_content_area().add(self.notebook) - self.results_text = gtk.TextView() + self.results_text = Gtk.TextView() self.results_text.connect('button-press-event', self.on_button_press) self.results_text.connect('motion-notify-event', self.on_motion) self.tags = [] - self.link_cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) - self.standard_cursor = gtk.gdk.Cursor(gtk.gdk.XTERM) + self.link_cursor = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) + self.standard_cursor = Gdk.Cursor.new(Gdk.CursorType.XTERM) self.setup_other_frames() self.set_current_frame(self.initial_frame()) @@ -786,20 +786,20 @@ class ToolManagedWindowBase(ManagedWindow): return None def on_motion(self, view, event): - buffer_location = view.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, + buffer_location = view.window_to_buffer_coords(Gtk.TextWindowType.TEXT, int(event.x), int(event.y)) iter = view.get_iter_at_location(*buffer_location) for (tag, person_handle) in self.tags: if iter.has_tag(tag): - _window = view.get_window(gtk.TEXT_WINDOW_TEXT) + _window = view.get_window(Gtk.TextWindowType.TEXT) _window.set_cursor(self.link_cursor) return False # handle event further, if necessary - view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(self.standard_cursor) + view.get_window(Gtk.TextWindowType.TEXT).set_cursor(self.standard_cursor) return False # handle event further, if necessary def on_button_press(self, view, event): - buffer_location = view.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, + buffer_location = view.window_to_buffer_coords(Gtk.TextWindowType.TEXT, int(event.x), int(event.y)) iter = view.get_iter_at_location(*buffer_location) @@ -807,7 +807,7 @@ class ToolManagedWindowBase(ManagedWindow): if iter.has_tag(tag): person = self.db.get_person_from_handle(person_handle) if event.button == 1: - if event.type == gtk.gdk._2BUTTON_PRESS: + if event.type == Gdk.EventType._2BUTTON_PRESS: try: EditPerson(self.dbstate, self.uistate, [], person) except WindowActiveError: @@ -907,9 +907,10 @@ class ToolManagedWindowBase(ManagedWindow): of the currently selected person.""" title = self.get_header(self.get_title()) - label = gtk.Label('%s' % title) + label = Gtk.Label(label='%s' % title) label.set_use_markup(True) - self.window.vbox.pack_start(label, False, False, self.border_pad) + self.window.get_content_area().pack_start(label, False, False, + self.border_pad) def add_frame_option(self, frame_name, label_text, widget): """Similar to add_option this method takes a frame_name, a @@ -941,13 +942,13 @@ class ToolManagedWindowBase(ManagedWindow): def add_results_frame(self, frame_name="Results"): if frame_name not in self.frames: - window = gtk.ScrolledWindow() - window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + window = Gtk.ScrolledWindow() + window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) window.add(self.results_text) - window.set_shadow_type(gtk.SHADOW_IN) + window.set_shadow_type(Gtk.ShadowType.IN) self.frames[frame_name] = [[frame_name, window]] self.frame_names.append(frame_name) - l = gtk.Label("%s" % _(frame_name)) + l = Gtk.Label(label="%s" % _(frame_name)) l.set_use_markup(True) self.notebook.append_page(window, l) self.notebook.show_all() @@ -957,15 +958,15 @@ class ToolManagedWindowBase(ManagedWindow): def add_page(self, frame_name="Help"): if frame_name not in self.frames: - text = gtk.TextView() - text.set_wrap_mode(gtk.WRAP_WORD) - window = gtk.ScrolledWindow() - window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + text = Gtk.TextView() + text.set_wrap_mode(Gtk.WrapMode.WORD) + window = Gtk.ScrolledWindow() + window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) window.add(text) - window.set_shadow_type(gtk.SHADOW_IN) + window.set_shadow_type(Gtk.ShadowType.IN) self.frames[frame_name] = [[frame_name, window]] self.frame_names.append(frame_name) - l = gtk.Label("%s" % _(frame_name)) + l = Gtk.Label(label="%s" % _(frame_name)) l.set_use_markup(True) self.notebook.append_page(window, l) self.notebook.show_all() @@ -986,25 +987,25 @@ class ToolManagedWindowBase(ManagedWindow): the add_user_options task.""" for key in self.frame_names: flist = self.frames[key] - table = gtk.Table(3, len(flist)) + table = Gtk.Table(3, len(flist)) table.set_col_spacings(12) table.set_row_spacings(6) table.set_border_width(6) - l = gtk.Label("%s" % key) + l = Gtk.Label(label="%s" % key) l.set_use_markup(True) self.notebook.append_page(table, l) row = 0 for (text, widget) in flist: if text: - text_widget = gtk.Label('%s:' % text) + text_widget = Gtk.Label(label='%s:' % text) text_widget.set_alignment(0.0, 0.5) table.attach(text_widget, 1, 2, row, row+1, - gtk.SHRINK|gtk.FILL, gtk.SHRINK) + Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL, Gtk.AttachOptions.SHRINK) table.attach(widget, 2, 3, row, row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) else: table.attach(widget, 2, 3, row, row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) row += 1 self.notebook.show_all() diff --git a/src/gui/plug/export/_exportassistant.py b/src/gui/plug/export/_exportassistant.py index 7a849a33d..51bc786b7 100644 --- a/src/gui/plug/export/_exportassistant.py +++ b/src/gui/plug/export/_exportassistant.py @@ -48,7 +48,9 @@ log = logging.getLogger(".ExportAssistant") # Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk +from gi.repository import GdkPixbuf + #------------------------------------------------------------------------- # # gramps modules @@ -86,7 +88,7 @@ _ExportAssistant_pages = { 'summary' : 5, } -class ExportAssistant(gtk.Assistant, ManagedWindow) : +class ExportAssistant(Gtk.Assistant, ManagedWindow) : """ This class creates a GTK assistant to guide the user through the various Save as/Export options. @@ -116,10 +118,10 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.writestarted = False #set up Assistant - gtk.Assistant.__init__(self) + GObject.GObject.__init__(self) ##workaround around bug http://bugzilla.gnome.org/show_bug.cgi?id=56070 self.forward_button = None - gtk.Assistant.forall(self, self.get_forward_button) + Gtk.Assistant.forall(self, self.get_forward_button) ## end #set up ManagedWindow @@ -139,11 +141,11 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.person = self.dbstate.db.find_initial_person() try: - self.logo = gtk.gdk.pixbuf_new_from_file(_gramps_png) + self.logo = GdkPixbuf.Pixbuf.new_from_file(_gramps_png) except: self.logo = None try: - self.splash = gtk.gdk.pixbuf_new_from_file(_splash_jpg) + self.splash = GdkPixbuf.Pixbuf.new_from_file(_splash_jpg) except: self.splash = None @@ -171,27 +173,27 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : ManagedWindow.show(self) def get_forward_button(self, arg): - if isinstance(arg, gtk.HBox): + if isinstance(arg, Gtk.HBox): arg.forall(self._forward_btn) def _forward_btn(self, arg): - if isinstance(arg, gtk.Button) and arg.get_label() == 'gtk-go-forward': + if isinstance(arg, Gtk.Button) and arg.get_label() == 'gtk-go-forward': self.forward_button = arg def get_cancel_button(self, arg): - if isinstance(arg, gtk.HBox): + if isinstance(arg, Gtk.HBox): arg.forall(self._cancel_btn) def _cancel_btn(self, arg): - if isinstance(arg, gtk.Button) and arg.get_label() == 'gtk-cancel': + if isinstance(arg, Gtk.Button) and arg.get_label() == 'gtk-cancel': self.cancel_button = arg def get_close_button(self, arg): - if isinstance(arg, gtk.HBox): + if isinstance(arg, Gtk.HBox): arg.forall(self._close_btn) def _close_btn(self, arg): - if isinstance(arg, gtk.Button) and arg.get_label() == 'gtk-close': + if isinstance(arg, Gtk.Button) and arg.get_label() == 'gtk-close': self.close_button = arg def build_menu_names(self, obj): @@ -200,7 +202,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : def create_page_intro(self): """Create the introduction page.""" - label = gtk.Label(self.get_intro_text()) + label = Gtk.Label(label=self.get_intro_text()) label.set_line_wrap(True) label.set_use_markup(True) @@ -212,7 +214,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.set_page_side_image(page, self.splash) self.set_page_title(page, _('Saving your data')) self.set_page_complete(page, True) - self.set_page_type(page, gtk.ASSISTANT_PAGE_INTRO) + self.set_page_type(page, Gtk.AssistantPageType.INTRO) def create_page_exporttypes(self): """Create the export type page. @@ -223,11 +225,11 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : """ self.format_buttons = [] - box = gtk.VBox() + box = Gtk.VBox() box.set_border_width(12) box.set_spacing(12) - table = gtk.Table(2*len(self.__exporters),2) + table = Gtk.Table(2*len(self.__exporters),2) table.set_row_spacings(6) table.set_col_spacings(6) @@ -241,7 +243,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : title = exporter.get_name() description= exporter.get_description() self.map_exporters[ix] = exporter - button = gtk.RadioButton(group,title) + button = Gtk.RadioButton(group,title) button.set_tooltip_text(description) if not group: group = button @@ -261,12 +263,12 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.set_page_header_image(page, self.logo) self.set_page_title(page, _('Choose the output format')) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT) + self.set_page_type(page, Gtk.AssistantPageType.CONTENT) def create_page_options(self): # as we do not know yet what to show, we create an empty page - page = gtk.VBox() + page = Gtk.VBox() page.set_border_width(12) page.set_spacing(12) @@ -275,7 +277,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.append_page(page) self.set_page_header_image(page, self.logo) self.set_page_complete(page, False) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT) + self.set_page_type(page, Gtk.AssistantPageType.CONTENT) def forward_func(self, pagenumber, data): """This function is called on forward press. @@ -319,7 +321,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.set_page_complete(vbox, True) def create_page_fileselect(self): - self.chooser = gtk.FileChooserWidget(gtk.FILE_CHOOSER_ACTION_SAVE) + self.chooser = Gtk.FileChooserWidget(Gtk.FileChooserAction.SAVE) #add border self.chooser.set_border_width(12) #global files, ask before overwrite @@ -346,7 +348,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.set_page_title(page, _('Select Save File')) #see if page can be set as complete : self.check_fileselect(page) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONTENT) + self.set_page_type(page, Gtk.AssistantPageType.CONTENT) def check_fileselect(self, filechooser, event=None, show=True): """Given a filechooser, determine if it can be marked complete in @@ -373,7 +375,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : def create_page_confirm(self): # Construct confirm page - label = gtk.Label() + label = Gtk.Label() label.set_line_wrap(True) label.set_use_markup(True) label.show() @@ -382,25 +384,25 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.append_page(page) self.set_page_header_image(page, self.logo) self.set_page_title(page, _('Final confirmation')) - self.set_page_type(page, gtk.ASSISTANT_PAGE_CONFIRM) + self.set_page_type(page, Gtk.AssistantPageType.CONFIRM) self.set_page_complete(page, True) def create_page_summary(self): # Construct summary page # As this is the last page needs to be of page_type - # gtk.ASSISTANT_PAGE_CONFIRM or gtk.ASSISTANT_PAGE_SUMMARY - page = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=0, + # Gtk.AssistantPageType.CONFIRM or Gtk.AssistantPageType.SUMMARY + page = Gtk.Alignment.new(xalign=0.5, yalign=0.5, xscale=0, yscale=0) - vbox = gtk.VBox() + vbox = Gtk.VBox() vbox.set_border_width(12) vbox.set_spacing(6) - self.labelsum = gtk.Label(_("Please wait while your data is selected and exported")) + self.labelsum = Gtk.Label(label=_("Please wait while your data is selected and exported")) self.labelsum.set_line_wrap(True) self.labelsum.set_use_markup(True) - vbox.pack_start(self.labelsum, expand=True) + vbox.pack_start(self.labelsum, True, True, 0) - self.progressbar = gtk.ProgressBar() - vbox.pack_start(self.progressbar, expand=True) + self.progressbar = Gtk.ProgressBar() + vbox.pack_start(self.progressbar, True, True, 0) page.add(vbox) page.show_all() @@ -410,7 +412,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.set_page_title(page, _('Summary')) self.set_page_side_image(page, self.splash) self.set_page_complete(page, False) - self.set_page_type(page, gtk.ASSISTANT_PAGE_SUMMARY) + self.set_page_type(page, Gtk.AssistantPageType.SUMMARY) def do_apply(self): pass @@ -467,7 +469,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : # see if page is complete with above self.check_fileselect(page, show=True) - elif self.get_page_type(page) == gtk.ASSISTANT_PAGE_CONFIRM : + elif self.get_page_type(page) == Gtk.AssistantPageType.CONFIRM : # The confirm page with apply button # Present user with what will happen ix = self.get_selected_format_index() @@ -517,7 +519,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : confirm_text = self.option_box_instance.confirm_text page.set_label(confirm_text) - elif self.get_page_type(page) == gtk.ASSISTANT_PAGE_SUMMARY : + elif self.get_page_type(page) == Gtk.AssistantPageType.SUMMARY : # The summary page # Lock page, show progress bar self.pre_save(page) @@ -565,7 +567,7 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : def close(self, *obj) : #clean up ManagedWindow menu, then destroy window, bring forward parent - gtk.Assistant.destroy(self) + Gtk.Assistant.destroy(self) ManagedWindow.close(self,*obj) def get_intro_text(self): @@ -655,19 +657,19 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : def set_busy_cursor(self,value): """Set or unset the busy cursor while saving data. - Note : self.window is the gtk.Assistant gtk.Window, not + Note : self.window is the Gtk.Assistant Gtk.Window, not a part of ManagedWindow """ if value: - self.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) #self.set_sensitive(0) else: self.window.set_cursor(None) #self.set_sensitive(1) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def pulse_progressbar(self, value, text=None): self.progressbar.set_fraction(min(value/100.0, 1.0)) @@ -675,8 +677,8 @@ class ExportAssistant(gtk.Assistant, ManagedWindow) : self.progressbar.set_text("%s: %d%%" % (text, value)) else: self.progressbar.set_text("%d%%" % value) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() diff --git a/src/gui/plug/export/_exportoptions.py b/src/gui/plug/export/_exportoptions.py index 216fce224..84a60b1a6 100644 --- a/src/gui/plug/export/_exportoptions.py +++ b/src/gui/plug/export/_exportoptions.py @@ -48,31 +48,31 @@ class Progress(object): selection, but this is for the preview selection. """ def __init__(self): - import gtk + from gi.repository import Gtk self.pm = ProgressMeter(_("Selecting Preview Data"), _('Selecting...')) self.progress_cnt = 0 self.title = _("Selecting...") - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def reset(self, title): - import gtk + from gi.repository import Gtk self.pm.set_header(title) self.title = title - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def set_total(self, count): - import gtk + from gi.repository import Gtk self.pm.set_pass(self.title, total=count+1) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def update(self, count): - import gtk + from gi.repository import Gtk self.pm.step() - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def close(self): self.pm.step() @@ -134,28 +134,28 @@ class WriterOptionBox(object): self.parse_options() def get_option_box(self): - """Build up a gtk.Table that contains the standard options.""" - import gtk - import pango - widget = gtk.VBox() + """Build up a Gtk.Table that contains the standard options.""" + from gi.repository import Gtk + from gi.repository import Pango + widget = Gtk.VBox() - full_database_row = gtk.HBox() - full_database_row.pack_start(gtk.Label(_("Unfiltered Family Tree:")), False) + full_database_row = Gtk.HBox() + full_database_row.pack_start(Gtk.Label(_("Unfiltered Family Tree:", True, True, 0)), False) people_count = len(self.dbstate.db.get_person_handles()) - button = gtk.Button(ngettext("%d Person", "%d People", people_count) % + button = Gtk.Button(ngettext("%d Person", "%d People", people_count) % people_count) button.set_tooltip_text(_("Click to see preview of unfiltered data")) button.set_size_request(107, -1) button.connect("clicked", self.show_preview_data) button.proxy_name = "unfiltered" self.preview_proxy_button["unfiltered"] = button - self.spacer = gtk.HBox() - full_database_row.pack_end(self.spacer, False) - full_database_row.pack_end(button, False) + self.spacer = Gtk.HBox() + full_database_row.pack_end(self.spacer, False, True, 0) + full_database_row.pack_end(button, False, True, 0) - widget.pack_start(full_database_row, False) + widget.pack_start(full_database_row, False, True, 0) - self.private_check = gtk.CheckButton( + self.private_check = Gtk.CheckButton( _('_Do not include records marked private')) self.private_check.connect("clicked", self.mark_dirty) self.private_check.set_active(self.get_proxy_value("privacy")) @@ -167,43 +167,43 @@ class WriterOptionBox(object): row = 0 for proxy_name in self.get_proxy_names(): frame = self.build_frame(proxy_name, row) - widget.pack_start(frame, False) + widget.pack_start(frame, False, True, 0) row += 1 - hbox = gtk.HBox() - self.advanced_button = gtk.Button(_("Change order")) + hbox = Gtk.HBox() + self.advanced_button = Gtk.Button(_("Change order")) self.advanced_button.set_size_request(150, -1) self.proxy_options_showing = False self.advanced_button.connect("clicked", self.show_options) - hbox.pack_end(self.advanced_button, False) - self.preview_button = gtk.Button(_("Calculate Previews")) + hbox.pack_end(self.advanced_button, False, True, 0) + self.preview_button = Gtk.Button(_("Calculate Previews")) self.preview_button.connect("clicked", self.preview) - hbox.pack_end(self.preview_button, False) - widget.pack_start(hbox, False) + hbox.pack_end(self.preview_button, False, True, 0) + widget.pack_start(hbox, False, True, 0) - cell = gtk.CellRendererText() - cell.set_property('ellipsize', pango.ELLIPSIZE_END) + cell = Gtk.CellRendererText() + cell.set_property('ellipsize', Pango.EllipsizeMode.END) self.filter_obj.pack_start(cell, True) self.filter_obj.add_attribute(cell, 'text', 0) self.filter_obj.set_model(self.build_model("person")) self.filter_obj.set_active(self.get_proxy_value("person")) - cell = gtk.CellRendererText() - cell.set_property('ellipsize', pango.ELLIPSIZE_END) + cell = Gtk.CellRendererText() + cell.set_property('ellipsize', Pango.EllipsizeMode.END) self.restrict_option.pack_start(cell, True) self.restrict_option.add_attribute(cell, 'text', 0) self.restrict_option.set_model(self.build_model("living")) self.restrict_option.set_active(self.get_proxy_value("living")) - cell = gtk.CellRendererText() - cell.set_property('ellipsize', pango.ELLIPSIZE_END) + cell = Gtk.CellRendererText() + cell.set_property('ellipsize', Pango.EllipsizeMode.END) self.reference_filter.pack_start(cell, True) self.reference_filter.add_attribute(cell, 'text', 0) self.reference_filter.set_model(self.build_model("reference")) self.reference_filter.set_active(self.get_proxy_value("reference")) - notes_cell = gtk.CellRendererText() - notes_cell.set_property('ellipsize', pango.ELLIPSIZE_END) + notes_cell = Gtk.CellRendererText() + notes_cell.set_property('ellipsize', Pango.EllipsizeMode.END) self.filter_note.pack_start(notes_cell, True) self.filter_note.add_attribute(notes_cell, 'text', 0) self.filter_note.set_model(self.build_model("note")) @@ -244,97 +244,97 @@ class WriterOptionBox(object): Build a frame for a proxy option. proxy_name is a string. """ # Make a box and put the option in it: - import gtk + from gi.repository import Gtk import gui.widgets - button = gtk.Button(ngettext("%d Person", "%d People", 0) % 0) + button = Gtk.Button(ngettext("%d Person", "%d People", 0) % 0) button.set_size_request(107, -1) button.connect("clicked", self.show_preview_data) button.proxy_name = proxy_name if proxy_name == "person": # Frame Person: - self.filter_obj = gtk.ComboBox() - label = gtk.Label(_('_Person Filter') + ": ") + self.filter_obj = Gtk.ComboBox() + label = Gtk.Label(label=_('_Person Filter') + ": ") label.set_alignment(0, 0.5) label.set_size_request(150, -1) label.set_use_underline(True) label.set_mnemonic_widget(self.filter_obj) - box = gtk.HBox() - box.pack_start(label, False) - box.pack_start(self.filter_obj) + box = Gtk.HBox() + box.pack_start(label, False, True, 0) + box.pack_start(self.filter_obj, True, True, 0) box.pack_start( - gui.widgets.SimpleButton(gtk.STOCK_EDIT, + gui.widgets.SimpleButton(Gtk.STOCK_EDIT, lambda obj: self.edit_filter('Person', self.filter_obj)), False) button.set_tooltip_text(_("Click to see preview after person filter")) elif proxy_name == "note": # Frame Note: # Objects for choosing a Note filter: - self.filter_note = gtk.ComboBox() - label_note = gtk.Label(_('_Note Filter') + ": ") + self.filter_note = Gtk.ComboBox() + label_note = Gtk.Label(label=_('_Note Filter') + ": ") label_note.set_alignment(0, 0.5) label_note.set_size_request(150, -1) label_note.set_use_underline(True) label_note.set_mnemonic_widget(self.filter_note) - box = gtk.HBox() - box.pack_start(label_note, False) - box.pack_start(self.filter_note) + box = Gtk.HBox() + box.pack_start(label_note, False, True, 0) + box.pack_start(self.filter_note, True, True, 0) box.pack_start( - gui.widgets.SimpleButton(gtk.STOCK_EDIT, + gui.widgets.SimpleButton(Gtk.STOCK_EDIT, lambda obj: self.edit_filter('Note', self.filter_note)), False) button.set_tooltip_text(_("Click to see preview after note filter")) elif proxy_name == "privacy": # Frame 3: - label = gtk.Label(_("Privacy Filter") + ":") + label = Gtk.Label(label=_("Privacy Filter") + ":") label.set_alignment(0, 0.5) label.set_size_request(150, -1) - box = gtk.HBox() - box.pack_start(label, False) + box = Gtk.HBox() + box.pack_start(label, False, True, 0) box.add(self.private_check) button.set_tooltip_text(_("Click to see preview after privacy filter")) elif proxy_name == "living": # Frame 4: - label = gtk.Label(_("Living Filter") + ":") + label = Gtk.Label(label=_("Living Filter") + ":") label.set_alignment(0, 0.5) label.set_size_request(150, -1) - box = gtk.HBox() - box.pack_start(label, False) - self.restrict_option = gtk.ComboBox() + box = Gtk.HBox() + box.pack_start(label, False, True, 0) + self.restrict_option = Gtk.ComboBox() box.add(self.restrict_option) button.set_tooltip_text(_("Click to see preview after living filter")) elif proxy_name == "reference": # Frame 5: - self.reference_filter = gtk.ComboBox() - label = gtk.Label(_('Reference Filter') + ": ") + self.reference_filter = Gtk.ComboBox() + label = Gtk.Label(label=_('Reference Filter') + ": ") label.set_alignment(0, 0.5) label.set_size_request(150, -1) - box = gtk.HBox() - box.pack_start(label, False) - box.pack_start(self.reference_filter) + box = Gtk.HBox() + box.pack_start(label, False, True, 0) + box.pack_start(self.reference_filter, True, True, 0) button.set_tooltip_text(_("Click to see preview after reference filter")) else: raise AttributeError("Unknown proxy '%s'" % proxy_name) - frame = gtk.Frame() - hbox = gtk.HBox() + frame = Gtk.Frame() + hbox = Gtk.HBox() frame.add(hbox) - vbox = gtk.HBox() + vbox = Gtk.HBox() self.vbox_n.append(vbox) - up = gtk.Button() + up = Gtk.Button() up.connect("clicked", self.swap) if row == 0: up.set_sensitive(0) # can't go up - image = gtk.Image() - image.set_from_stock(gtk.STOCK_GO_UP, - gtk.ICON_SIZE_MENU) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_GO_UP, + Gtk.IconSize.MENU) up.set_image(image) up.row = row - 1 self.up_n.append(up) - down = gtk.Button() + down = Gtk.Button() down.connect("clicked", self.swap) - image = gtk.Image() - image.set_from_stock(gtk.STOCK_GO_DOWN, - gtk.ICON_SIZE_MENU) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_GO_DOWN, + Gtk.IconSize.MENU) down.set_image(image) down.row = row if row == 4: @@ -342,9 +342,9 @@ class WriterOptionBox(object): self.down_n.append(down) self.preview_proxy_button[proxy_name] = button self.preview_proxy_button[proxy_name].set_sensitive(0) - box.pack_end(button, False) - hbox.pack_start(box) - hbox.pack_end(vbox, False) + box.pack_end(button, False, True, 0) + hbox.pack_start(box, True, True, 0) + hbox.pack_end(vbox, False, True, 0) self.proxy_widget[proxy_name] = box return frame @@ -354,7 +354,7 @@ class WriterOptionBox(object): time due to the fact that Gramps tends to use show_all rather than show. """ - import gtk + from gi.repository import Gtk if self.proxy_options_showing: self.advanced_button.set_label(_("Change order")) self.spacer_up.hide() @@ -369,23 +369,23 @@ class WriterOptionBox(object): # This is necessary because someone used show_all up top # Now, we can't add something that we want hidden for n in range(5): - self.vbox_n[n].pack_start(self.up_n[n]) + self.vbox_n[n].pack_start(self.up_n[n], True, True, 0) self.vbox_n[n].pack_end(self.down_n[n]) # some spacer buttons: - up = gtk.Button() + up = Gtk.Button() up.set_sensitive(0) - image = gtk.Image() - image.set_from_stock(gtk.STOCK_GO_UP, - gtk.ICON_SIZE_MENU) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_GO_UP, + Gtk.IconSize.MENU) up.set_image(image) - self.spacer.pack_start(up, False) - down = gtk.Button() + self.spacer.pack_start(up, False, True, 0) + down = Gtk.Button() down.set_sensitive(0) - image = gtk.Image() - image.set_from_stock(gtk.STOCK_GO_DOWN, - gtk.ICON_SIZE_MENU) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_GO_DOWN, + Gtk.IconSize.MENU) down.set_image(image) - self.spacer.pack_end(down, False) + self.spacer.pack_end(down, False, True, 0) self.spacer_up = up self.spacer_down = down self.spacer_up.show() @@ -666,8 +666,8 @@ class WriterOptionBox(object): """ Build a model for the combo box selector. """ - import gtk - import gobject + from gi.repository import Gtk + from gi.repository import GObject from gen.filters import CustomFilters if namespace == "person": # Populate the Person Filter @@ -680,7 +680,7 @@ class WriterOptionBox(object): the_filters.extend(CustomFilters.get_filters('Person')) - model = gtk.ListStore(gobject.TYPE_STRING, object) + model = Gtk.ListStore(GObject.TYPE_STRING, object) for item in the_filters: model.append(row=[item.get_name(), item]) elif namespace == "note": @@ -689,12 +689,12 @@ class WriterOptionBox(object): entire_db.set_name(_("Include all selected notes")) notes_filters = [entire_db] notes_filters.extend(CustomFilters.get_filters('Note')) - model = gtk.ListStore(gobject.TYPE_STRING, object) + model = Gtk.ListStore(GObject.TYPE_STRING, object) for item in notes_filters: model.append(row=[item.get_name(), item]) elif namespace == "living": - model = gtk.ListStore(gobject.TYPE_STRING, int) + model = Gtk.ListStore(GObject.TYPE_STRING, int) row = 0 for item in [ _('Include all selected people'), @@ -704,7 +704,7 @@ class WriterOptionBox(object): row += 1 elif namespace == "reference": - model = gtk.ListStore(gobject.TYPE_STRING, int) + model = Gtk.ListStore(GObject.TYPE_STRING, int) row = 0 for item in [ _('Include all selected records'), diff --git a/src/gui/plug/quick/_quickreports.py b/src/gui/plug/quick/_quickreports.py index 5cc4aaaa3..a958c2ff4 100644 --- a/src/gui/plug/quick/_quickreports.py +++ b/src/gui/plug/quick/_quickreports.py @@ -47,7 +47,7 @@ log = logging.getLogger(".quickreports") # GNOME modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -92,7 +92,7 @@ def create_web_connect_menu(dbstate, uistate, nav_group, handle): ofile = StringIO() ofile.write('') actions.append(('WebConnect', None, _("Web Connect"), None, None, None)) - menu = gtk.Menu() + menu = Gtk.Menu() menu.show() #select the web connects to show showlst = [] @@ -138,7 +138,7 @@ def create_quickreport_menu(category,dbstate,uistate, handle) : actions.append(('QuickReport', None, _("Quick View"), None, None, None)) - menu = gtk.Menu() + menu = Gtk.Menu() menu.show() #select the reports to show diff --git a/src/gui/plug/quick/_quicktable.py b/src/gui/plug/quick/_quicktable.py index 431e60b10..e149626fd 100644 --- a/src/gui/plug/quick/_quicktable.py +++ b/src/gui/plug/quick/_quicktable.py @@ -38,8 +38,8 @@ import cPickle as pickle # GNOME modules # #------------------------------------------------------------------------- -import gtk -from gtk.gdk import ACTION_COPY +from gi.repository import Gdk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -117,11 +117,11 @@ class QuickTable(SimpleTable): # you need index, treeview, path, button_code, # func, and event_time if index is not None: - popup = gtk.Menu() + popup = Gtk.Menu() if (index is not None and self._link[index]): # See details (edit, etc): objclass, handle = self._link[index] - menu_item = gtk.MenuItem(_("the object|See %s details") % trans_objclass(objclass)) + menu_item = Gtk.MenuItem(_("the object|See %s details") % trans_objclass(objclass)) menu_item.connect("activate", lambda widget: self.on_table_doubleclick(treeview)) popup.append(menu_item) @@ -131,7 +131,7 @@ class QuickTable(SimpleTable): (index is not None and self._link[index])): objclass, handle = self._link[index] if objclass == 'Person': - menu_item = gtk.MenuItem(_("the object|Make %s active") % trans_objclass('Person')) + menu_item = Gtk.MenuItem(_("the object|Make %s active") % trans_objclass('Person')) menu_item.connect("activate", lambda widget: self.on_table_click(treeview)) popup.append(menu_item) @@ -144,7 +144,7 @@ class QuickTable(SimpleTable): handle[0] in ['Person', 'Family', 'Place', 'Event', 'Repository', 'Note', 'MediaObject', 'Citation', 'Source']): - menu_item = gtk.MenuItem(_("See data not in Filter")) + menu_item = Gtk.MenuItem(_("See data not in Filter")) menu_item.connect("activate", lambda widget: self.show_not_in_filter(handle[0])) popup.append(menu_item) @@ -293,12 +293,12 @@ class QuickTable(SimpleTable): if isinstance(handle, list): handle = handle[0] if objclass == 'Person': - import gobject + from gi.repository import GObject # If you emmit the signal here and it causes this table to be deleted, # then you'll crash Python: #self.simpledoc.doc.uistate.set_active(handle, 'Person') # So, let's return from this, then change the active person: - return gobject.timeout_add(100, self.simpledoc.doc.uistate.set_active, handle, 'Person') + return GObject.timeout_add(100, self.simpledoc.doc.uistate.set_active, handle, 'Person') return True return False # didn't handle event @@ -333,18 +333,18 @@ class QuickTable(SimpleTable): else: sort_index = 0 treeview = MultiTreeView() - treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, - [(DdTargets.HANDLE_LIST.drag_type, gtk.TARGET_SAME_WIDGET, 0)], - gtk.gdk.ACTION_COPY) + treeview.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, + [(DdTargets.HANDLE_LIST.drag_type, Gtk.TargetFlags.SAME_WIDGET, 0)], + Gdk.DragAction.COPY) #treeview.enable_model_drag_dest(DdTargets.all_targets(), - # gtk.gdk.ACTION_DEFAULT) + # Gdk.DragAction.DEFAULT) treeview.connect('drag_data_get', self.object_drag_data_get) - treeview.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH) + treeview.set_grid_lines(Gtk.TREE_VIEW_GRID_LINES_BOTH) #treeview.connect('row-activated', on_table_doubleclick, self) #treeview.connect('cursor-changed', on_table_click, self) treeview.connect('button-press-event', self.button_press_event) treeview.connect('select-cursor-row', self.button_press_event) - renderer = gtk.CellRendererText() + renderer = Gtk.CellRendererText() types = [int] # index cnt = 0 sort_data = [] @@ -353,15 +353,15 @@ class QuickTable(SimpleTable): if self.get_cell_type(cnt) == "text": types.append(str) if self.get_cell_markup(cnt): - column = gtk.TreeViewColumn(col,renderer,markup=model_index) + column = Gtk.TreeViewColumn(col,renderer,markup=model_index) else: - column = gtk.TreeViewColumn(col,renderer,text=model_index) + column = Gtk.TreeViewColumn(col,renderer,text=model_index) elif self.get_cell_type(cnt) == "checkbox": types.append(bool) - toggle_renderer = gtk.CellRendererToggle() + toggle_renderer = Gtk.CellRendererToggle() toggle_renderer.set_property('activatable', True) toggle_renderer.connect("toggled", self.toggle, model_index) - column = gtk.TreeViewColumn(col, toggle_renderer) + column = Gtk.TreeViewColumn(col, toggle_renderer) column.add_attribute(toggle_renderer, "active", model_index) column.set_resizable(True) if self._sort_vals[cnt] != []: @@ -381,9 +381,9 @@ class QuickTable(SimpleTable): self.simpledoc.paragraph(self.title) # Make a GUI to put the tree view in types += sort_data_types - model = gtk.ListStore(*types) + model = Gtk.ListStore(*types) treeview.set_model(model) - treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE) + treeview.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE) iter = buffer.get_end_iter() anchor = buffer.create_child_anchor(iter) text_view.add_child_at_anchor(treeview, anchor) diff --git a/src/gui/plug/quick/_textbufdoc.py b/src/gui/plug/quick/_textbufdoc.py index 0c20f103b..c0ebb2dc6 100644 --- a/src/gui/plug/quick/_textbufdoc.py +++ b/src/gui/plug/quick/_textbufdoc.py @@ -27,8 +27,8 @@ # #------------------------------------------------------------------------ from gen.ggettext import gettext as _ -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango, PangoCairo #------------------------------------------------------------------------ # @@ -40,12 +40,7 @@ from gen.plug.docgen import (BaseDoc, TextDoc, FONT_SERIF, PARA_ALIGN_RIGHT, PARA_ALIGN_LEFT) from gui.managedwindow import ManagedWindow -try: - import pangocairo - - RESOLUTION = pangocairo.cairo_font_map_get_default().get_resolution() -except: - RESOLUTION = 96 +RESOLUTION = PangoCairo.font_map_get_default().get_resolution() def pixels(cm): return int (RESOLUTION/2.54 * cm) @@ -63,14 +58,14 @@ class DisplayBuf(ManagedWindow): self.title = title ManagedWindow.__init__(self, document.uistate, [], document) - self.set_window(gtk.Dialog("",document.uistate.window, - gtk.DIALOG_DESTROY_WITH_PARENT, - (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)), + self.set_window(Gtk.Dialog("",document.uistate.window, + Gtk.DialogFlags.DESTROY_WITH_PARENT, + (Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)), None, title) self.window.set_size_request(600,400) - scrolled_window = gtk.ScrolledWindow() - scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) - document.text_view = gtk.TextView() + scrolled_window = Gtk.ScrolledWindow() + scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC,Gtk.PolicyType.AUTOMATIC) + document.text_view = Gtk.TextView() document.text_view.set_buffer(document.buffer) self.window.connect('response', self.close) scrolled_window.add(document.text_view) @@ -104,12 +99,12 @@ class TextBufDoc(BaseDoc, TextDoc): #-------------------------------------------------------------------- def open(self, filename, container=None): self.has_data = True - self.tag_table = gtk.TextTagTable() + self.tag_table = Gtk.TextTagTable() sheet = self.get_style_sheet() for name in sheet.get_paragraph_style_names(): - tag = gtk.TextTag(name) + tag = Gtk.TextTag(name) style = sheet.get_paragraph_style(name) font = style.get_font() @@ -122,18 +117,18 @@ class TextBufDoc(BaseDoc, TextDoc): tag.set_property("size-points", float(font.get_size())) if font.get_bold(): - tag.set_property("weight", pango.WEIGHT_BOLD) + tag.set_property("weight", Pango.Weight.BOLD) if style.get_alignment() == PARA_ALIGN_RIGHT: - tag.set_property("justification", gtk.JUSTIFY_RIGHT) + tag.set_property("justification", Gtk.Justification.RIGHT) elif style.get_alignment() == PARA_ALIGN_LEFT: - tag.set_property("justification", gtk.JUSTIFY_LEFT) + tag.set_property("justification", Gtk.Justification.LEFT) elif style.get_alignment() == PARA_ALIGN_CENTER: - tag.set_property("justification", gtk.JUSTIFY_CENTER) + tag.set_property("justification", Gtk.Justification.CENTER) else: - tag.set_property("justification", gtk.JUSTIFY_FILL) + tag.set_property("justification", Gtk.Justification.FILL) if font.get_italic(): - tag.set_property("style", pango.STYLE_ITALIC) + tag.set_property("style", Pango.Style.ITALIC) if style.get_first_indent(): tag.set_property("indent", pixels(style.get_first_indent())) @@ -143,19 +138,19 @@ class TextBufDoc(BaseDoc, TextDoc): tag.set_property("right-margin", pixels(style.get_right_margin())) tag.set_property("pixels-above-lines", pixels(style.get_top_margin())) tag.set_property("pixels-below-lines", pixels(style.get_bottom_margin())) - tag.set_property("wrap-mode", gtk.WRAP_WORD) + tag.set_property("wrap-mode", Gtk.WrapMode.WORD) new_tabs = style.get_tabs() - tab_array = pango.TabArray(len(new_tabs)+1,True) + tab_array = Pango.TabArray(len(new_tabs)+1,True) index = 0 for tab in map(pixels, new_tabs): - tab_array.set_tab(index, pango.TAB_LEFT, tab) + tab_array.set_tab(index, Pango.TabAlign.LEFT, tab) index += 1 tag.set_property("tabs", tab_array) self.tag_table.add(tag) - self.buffer = gtk.TextBuffer(self.tag_table) + self.buffer = Gtk.TextBuffer(self.tag_table) if container: return DocumentManager(_('Quick View'), self, container) else: diff --git a/src/gui/plug/report/_docreportdialog.py b/src/gui/plug/report/_docreportdialog.py index 7fd21e349..2e30591f0 100644 --- a/src/gui/plug/report/_docreportdialog.py +++ b/src/gui/plug/report/_docreportdialog.py @@ -34,7 +34,7 @@ from gen.ggettext import gettext as _ # GTK+ modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -120,12 +120,12 @@ class DocReportDialog(ReportDialog): if self.firstpage_added: self.notebook.remove_page(0) if docgen_plugin.get_paper_used(): - self.paper_label = gtk.Label('%s'%_("Paper Options")) + self.paper_label = Gtk.Label(label='%s'%_("Paper Options")) self.paper_label.set_use_markup(True) self.notebook.insert_page(self.paper_frame, self.paper_label, 0) self.paper_frame.show_all() else: - self.html_label = gtk.Label('%s' % _("HTML Options")) + self.html_label = Gtk.Label(label='%s' % _("HTML Options")) self.html_label.set_use_markup(True) self.notebook.insert_page(self.html_table, self.html_label, 0) self.html_table.show_all() @@ -155,18 +155,18 @@ class DocReportDialog(ReportDialog): self.make_doc_menu(self.options.handler.get_format_name()) self.format_menu.connect('changed', self.doc_type_changed) - label = gtk.Label("%s:" % _("Output Format")) + label = Gtk.Label(label="%s:" % _("Output Format")) label.set_alignment(0.0, 0.5) - self.tbl.attach(label, 1, 2, self.row, self.row+1, gtk.SHRINK|gtk.FILL) + self.tbl.attach(label, 1, 2, self.row, self.row+1, Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL) self.tbl.attach(self.format_menu, 2, 4, self.row, self.row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) self.row += 1 - self.open_with_app = gtk.CheckButton(_("Open with default viewer")) + self.open_with_app = Gtk.CheckButton(_("Open with default viewer")) self.open_with_app.set_active( config.get('interface.open-with-default-viewer')) self.tbl.attach(self.open_with_app, 2, 4, self.row, self.row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) self.row += 1 ext = self.format_menu.get_active_plugin().get_extension() @@ -193,17 +193,17 @@ class DocReportDialog(ReportDialog): this function is to grab a pointer for later use in the parse html frame function.""" - self.html_table = gtk.Table(3,3) + self.html_table = Gtk.Table(3,3) self.html_table.set_col_spacings(12) self.html_table.set_row_spacings(6) self.html_table.set_border_width(0) - label = gtk.Label("%s:" % _("CSS file")) + label = Gtk.Label(label="%s:" % _("CSS file")) label.set_alignment(0.0,0.5) - self.html_table.attach(label, 1, 2, 1, 2, gtk.SHRINK|gtk.FILL, - yoptions=gtk.SHRINK) + self.html_table.attach(label, 1, 2, 1, 2, Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL, + yoptions=Gtk.AttachOptions.SHRINK) - self.css_combo = gtk.combo_box_new_text() + self.css_combo = Gtk.ComboBoxText() css_filename = self.options.handler.get_css_filename() active_index = 0 @@ -218,7 +218,7 @@ class DocReportDialog(ReportDialog): active_index = index index += 1 - self.html_table.attach(self.css_combo,2,3,1,2, yoptions=gtk.SHRINK) + self.html_table.attach(self.css_combo,2,3,1,2, yoptions=Gtk.AttachOptions.SHRINK) self.css_combo.set_active(active_index) def parse_format_frame(self): diff --git a/src/gui/plug/report/_drawreportdialog.py b/src/gui/plug/report/_drawreportdialog.py index cc9214c09..4dbcafdd8 100644 --- a/src/gui/plug/report/_drawreportdialog.py +++ b/src/gui/plug/report/_drawreportdialog.py @@ -26,8 +26,8 @@ # GTK modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -43,14 +43,14 @@ from gui.pluginmanager import GuiPluginManager # _DrawFormatComboBox # #------------------------------------------------------------------------- -class _DrawFormatComboBox(gtk.ComboBox): +class _DrawFormatComboBox(Gtk.ComboBox): """ This class is a combo box that allows the selection of a docgen plugin from all drawdoc plugins. """ def __init__(self, active): - gtk.ComboBox.__init__(self) + GObject.GObject.__init__(self) pmgr = GuiPluginManager.get_instance() self.__drawdoc_plugins = [] @@ -58,9 +58,9 @@ class _DrawFormatComboBox(gtk.ComboBox): if plugin.get_draw_support(): self.__drawdoc_plugins.append(plugin) - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell, True) self.add_attribute(cell, 'text', 0) diff --git a/src/gui/plug/report/_fileentry.py b/src/gui/plug/report/_fileentry.py index cfabec0fb..4817990d4 100644 --- a/src/gui/plug/report/_fileentry.py +++ b/src/gui/plug/report/_fileentry.py @@ -23,44 +23,44 @@ # $Id$ import os -import gtk +from gi.repository import Gtk import Utils -class FileEntry(gtk.HBox): +class FileEntry(Gtk.HBox): """ A widget that allows the user to select a file from the file system """ def __init__(self, defname, title): - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.title = title self.dir = False self.__base_path = "" self.__file_name = "" - self.entry = gtk.Entry() + self.entry = Gtk.Entry() self.entry.set_text(defname) self.set_filename(defname) self.set_spacing(6) self.set_homogeneous(False) - self.button = gtk.Button() - image = gtk.Image() - image.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON) + self.button = Gtk.Button() + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON) self.button.add(image) self.button.connect('clicked', self.__select_file) - self.pack_start(self.entry, True, True) + self.pack_start(self.entry, True, True, 0) self.pack_end(self.button, False, False) def __select_file(self, obj): """ Call back function to handle the open button press """ if self.dir: - my_action = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER + my_action = Gtk.FileChooserAction.SELECT_FOLDER else: - my_action = gtk.FILE_CHOOSER_ACTION_SAVE + my_action = Gtk.FileChooserAction.SAVE - dialog = gtk.FileChooserDialog(self.title, + dialog = Gtk.FileChooserDialog(self.title, action=my_action, - buttons=(gtk.STOCK_CANCEL, - gtk.RESPONSE_CANCEL, - gtk.STOCK_OPEN, - gtk.RESPONSE_OK)) + buttons=(Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_OPEN, + Gtk.ResponseType.OK)) name = os.path.basename(self.entry.get_text()) if self.dir: @@ -73,7 +73,7 @@ class FileEntry(gtk.HBox): dialog.set_current_folder(self.__base_path) dialog.present() status = dialog.run() - if status == gtk.RESPONSE_OK: + if status == Gtk.ResponseType.OK: self.set_filename(Utils.get_unicode_path_from_file_chooser(dialog.get_filename())) dialog.destroy() diff --git a/src/gui/plug/report/_graphvizreportdialog.py b/src/gui/plug/report/_graphvizreportdialog.py index d94231823..c7548a2aa 100644 --- a/src/gui/plug/report/_graphvizreportdialog.py +++ b/src/gui/plug/report/_graphvizreportdialog.py @@ -37,8 +37,8 @@ from gen.ggettext import gettext as _ # GTK+ modules # #------------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------------- # @@ -57,14 +57,14 @@ import gen.plug # GraphvizFormatComboBox # #------------------------------------------------------------------------------- -class GraphvizFormatComboBox(gtk.ComboBox): +class GraphvizFormatComboBox(Gtk.ComboBox): """ Format combo box class for Graphviz report. """ def set(self, active=None): - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell, True) self.add_attribute(cell, 'text', 0) @@ -146,18 +146,18 @@ class GraphvizReportDialog(ReportDialog): self.format_menu = GraphvizFormatComboBox() self.format_menu.set(self.options.handler.get_format_name()) self.format_menu.connect('changed', self.doc_type_changed) - label = gtk.Label("%s:" % _("Output Format")) + label = Gtk.Label(label="%s:" % _("Output Format")) label.set_alignment(0.0, 0.5) - self.tbl.attach(label, 1, 2, self.row, self.row+1, gtk.SHRINK|gtk.FILL) + self.tbl.attach(label, 1, 2, self.row, self.row+1, Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL) self.tbl.attach(self.format_menu, 2, 4, self.row, self.row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) self.row += 1 - self.open_with_app = gtk.CheckButton(_("Open with default viewer")) + self.open_with_app = Gtk.CheckButton(_("Open with default viewer")) self.open_with_app.set_active( config.get('interface.open-with-default-viewer')) self.tbl.attach(self.open_with_app, 2, 4, self.row, self.row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) self.row += 1 ext = self.format_menu.get_ext() @@ -170,7 +170,7 @@ class GraphvizReportDialog(ReportDialog): self.target_fileentry.set_filename(spath) def setup_report_options_frame(self): - self.paper_label = gtk.Label('%s'%_("Paper Options")) + self.paper_label = Gtk.Label(label='%s'%_("Paper Options")) self.paper_label.set_use_markup(True) handler = self.options.handler self.paper_frame = PaperFrame( diff --git a/src/gui/plug/report/_papermenu.py b/src/gui/plug/report/_papermenu.py index 26b15995c..bac0c45ba 100644 --- a/src/gui/plug/report/_papermenu.py +++ b/src/gui/plug/report/_papermenu.py @@ -33,8 +33,8 @@ from gen.ggettext import sgettext as _ # GNOME modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -50,14 +50,14 @@ from gui.glade import Glade # PaperComboBox # #------------------------------------------------------------------------- -class PaperComboBox(gtk.ComboBox): +class PaperComboBox(Gtk.ComboBox): def __init__(self,default_name): - gtk.ComboBox.__init__(self) + GObject.GObject.__init__(self) - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell,True) self.add_attribute(cell,'text',0) self.mapping = {} @@ -85,14 +85,14 @@ class PaperComboBox(gtk.ComboBox): # OrientationComboBox # #------------------------------------------------------------------------- -class OrientationComboBox(gtk.ComboBox): +class OrientationComboBox(Gtk.ComboBox): def __init__(self,default=PAPER_PORTRAIT): - gtk.ComboBox.__init__(self) + GObject.GObject.__init__(self) - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell,True) self.add_attribute(cell,'text',0) self.mapping = {} @@ -124,11 +124,11 @@ class OrientationComboBox(gtk.ComboBox): # PaperFrame # #------------------------------------------------------------------------- -class PaperFrame(gtk.HBox): +class PaperFrame(Gtk.HBox): """PaperFrame provides all the entry necessary to specify a paper style. """ def __init__(self,default_metric,default_name,default_orientation, margins=[2.54,2.54,2.54,2.54], custom=[29.7,21.0]): - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) glade_xml = Glade() self.paper_table = glade_xml.get_object('paper_table') @@ -150,9 +150,9 @@ class PaperFrame(gtk.HBox): # connect all widgets format_table = glade_xml.get_object('format_table') format_table.attach(self.papersize_menu, 1, 3, 0, 1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) format_table.attach(self.orientation_menu, 1, 3, 3, 4, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) # connect signals self.papersize_menu.connect('changed',self.size_changed) diff --git a/src/gui/plug/report/_reportdialog.py b/src/gui/plug/report/_reportdialog.py index 1d7692352..1da046d31 100644 --- a/src/gui/plug/report/_reportdialog.py +++ b/src/gui/plug/report/_reportdialog.py @@ -41,7 +41,7 @@ LOG = logging.getLogger(".") # GTK+ modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -152,19 +152,19 @@ class ReportDialog(ManagedWindow): self.style_name = self.options.handler.get_default_stylesheet_name() - window = gtk.Dialog('Gramps') + window = Gtk.Dialog('Gramps') self.set_window(window, None, self.get_title()) self.window.set_has_separator(False) self.window.set_modal(True) - self.help = self.window.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP) + self.help = self.window.add_button(Gtk.STOCK_HELP, Gtk.ResponseType.HELP) self.help.connect('clicked', self.on_help_clicked) - self.cancel = self.window.add_button(gtk.STOCK_CANCEL, - gtk.RESPONSE_CANCEL) + self.cancel = self.window.add_button(Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL) self.cancel.connect('clicked', self.on_cancel) - self.ok = self.window.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) + self.ok = self.window.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) self.ok.connect('clicked', self.on_ok_clicked) self.window.set_default_size(600, -1) @@ -175,7 +175,7 @@ class ReportDialog(ManagedWindow): self.setup_title() self.setup_header() - self.tbl = gtk.Table(4, 4, False) + self.tbl = Gtk.Table(4, 4, False) self.tbl.set_col_spacings(12) self.tbl.set_row_spacings(6) self.tbl.set_border_width(6) @@ -191,7 +191,7 @@ class ReportDialog(ManagedWindow): self.setup_target_frame() self.setup_style_frame() - self.notebook = gtk.Notebook() + self.notebook = Gtk.Notebook() self.notebook.set_scrollable(True) self.notebook.set_border_width(6) self.window.vbox.add(self.notebook) @@ -290,7 +290,7 @@ class ReportDialog(ManagedWindow): def setup_header(self): """Set up the header line bar of the dialog.""" - label = gtk.Label('%s' % + label = Gtk.Label(label='%s' % self.report_name) label.set_use_markup(True) self.window.vbox.pack_start(label, True, True, self.border_pad) @@ -310,18 +310,18 @@ class ReportDialog(ManagedWindow): return # Styles Frame - label = gtk.Label("%s:" % _("Style")) + label = Gtk.Label(label="%s:" % _("Style")) label.set_alignment(0.0, 0.5) self.style_menu = StyleComboBox() - self.style_button = gtk.Button("%s..." % _("Style Editor")) + self.style_button = Gtk.Button("%s..." % _("Style Editor")) self.style_button.connect('clicked', self.on_style_edit_clicked) - self.tbl.attach(label, 1, 2, self.row, self.row+1, gtk.SHRINK|gtk.FILL) + self.tbl.attach(label, 1, 2, self.row, self.row+1, Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL) self.tbl.attach(self.style_menu, 2, 3, self.row, self.row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) self.tbl.attach(self.style_button, 3, 4, self.row, self.row+1, - xoptions=gtk.SHRINK|gtk.FILL, yoptions=gtk.SHRINK) + xoptions=Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL, yoptions=Gtk.AttachOptions.SHRINK) self.row += 1 # Build the initial list of available styles sets. This @@ -349,11 +349,11 @@ class ReportDialog(ManagedWindow): if max_rows == 0: return - table = gtk.Table(3, max_rows+1) + table = Gtk.Table(3, max_rows+1) table.set_col_spacings(12) table.set_row_spacings(6) - label = gtk.Label("%s" % _("Report Options")) + label = Gtk.Label(label="%s" % _("Report Options")) label.set_alignment(0.0, 0.5) label.set_use_markup(True) @@ -364,15 +364,15 @@ class ReportDialog(ManagedWindow): # Setup requested widgets for (text, widget) in self.widgets: if text: - text_widget = gtk.Label("%s:" % text) + text_widget = Gtk.Label(label="%s:" % text) text_widget.set_alignment(0.0, 0.0) table.attach(text_widget, 1, 2, row, row+1, - gtk.SHRINK|gtk.FILL, gtk.SHRINK) + Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL, Gtk.AttachOptions.SHRINK) table.attach(widget, 2, 3, row, row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) else: table.attach(widget, 2, 3, row, row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) row += 1 def setup_other_frames(self): @@ -380,33 +380,33 @@ class ReportDialog(ManagedWindow): if key == "": continue flist = self.frames[key] - table = gtk.Table(3, len(flist)) + table = Gtk.Table(3, len(flist)) table.set_col_spacings(12) table.set_row_spacings(6) table.set_border_width(6) - l = gtk.Label("%s" % _(key)) + l = Gtk.Label(label="%s" % _(key)) l.set_use_markup(True) self.notebook.append_page(table, l) row = 0 for (text, widget) in flist: if text: - text_widget = gtk.Label('%s:' % text) + text_widget = Gtk.Label(label='%s:' % text) text_widget.set_alignment(0.0, 0.5) table.attach(text_widget, 1, 2, row, row+1, - gtk.SHRINK|gtk.FILL, gtk.SHRINK) + Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL, Gtk.AttachOptions.SHRINK) table.attach(widget, 2, 3, row, row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) else: table.attach(widget, 2, 3, row, row+1, - yoptions=gtk.SHRINK) + yoptions=Gtk.AttachOptions.SHRINK) row += 1 def setup_main_options(self): if "" in self.frames: flist = self.frames[""] for (text, widget) in flist: - label = gtk.Label("%s" % text) + label = Gtk.Label(label="%s" % text) label.set_use_markup(True) label.set_alignment(0.0, 0.5) @@ -461,11 +461,11 @@ class ReportDialog(ManagedWindow): spath = self.get_default_directory() self.target_fileentry.set_filename(spath) # need any labels at top: - label = gtk.Label("%s" % _('Document Options')) + label = Gtk.Label(label="%s" % _('Document Options')) label.set_use_markup(1) label.set_alignment(0.0, 0.5) self.tbl.set_border_width(12) - self.tbl.attach(label, 0, 4, self.row, self.row+1, gtk.FILL) + self.tbl.attach(label, 0, 4, self.row, self.row+1, Gtk.AttachOptions.FILL) self.row += 1 def setup_target_frame(self): @@ -476,13 +476,13 @@ class ReportDialog(ManagedWindow): directory should be used.""" # Save Frame - self.doc_label = gtk.Label("%s:" % _("Filename")) + self.doc_label = Gtk.Label(label="%s:" % _("Filename")) self.doc_label.set_alignment(0.0, 0.5) self.tbl.attach(self.doc_label, 1, 2, self.row, self.row+1, - xoptions=gtk.SHRINK|gtk.FILL,yoptions=gtk.SHRINK) + xoptions=Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL,yoptions=Gtk.AttachOptions.SHRINK) self.tbl.attach(self.target_fileentry, 2, 4, self.row, self.row+1, - xoptions=gtk.EXPAND|gtk.FILL,yoptions=gtk.SHRINK) + xoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL,yoptions=Gtk.AttachOptions.SHRINK) self.row += 1 #------------------------------------------------------------------------ @@ -524,7 +524,7 @@ class ReportDialog(ManagedWindow): _('_Overwrite'), None, _('_Change filename'), None) - if a.get_response() == gtk.RESPONSE_YES: + if a.get_response() == Gtk.ResponseType.YES: return None # selected path does not exist yet @@ -636,7 +636,7 @@ def report(dbstate, uistate, person, report_class, options_class, while True: response = dialog.window.run() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: dialog.close() try: user = User() @@ -679,10 +679,10 @@ def report(dbstate, uistate, person, report_class, options_class, except: LOG.error("Failed to run report.", exc_info=True) break - elif response == gtk.RESPONSE_CANCEL: + elif response == Gtk.ResponseType.CANCEL: dialog.close() break - elif response == gtk.RESPONSE_DELETE_EVENT: + elif response == Gtk.ResponseType.DELETE_EVENT: #just stop, in ManagedWindow, delete-event is already coupled to #correct action. break diff --git a/src/gui/plug/report/_stylecombobox.py b/src/gui/plug/report/_stylecombobox.py index b19a1ad13..318e179c0 100644 --- a/src/gui/plug/report/_stylecombobox.py +++ b/src/gui/plug/report/_stylecombobox.py @@ -23,15 +23,15 @@ from gen.ggettext import gettext as _ -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # # StyleComboBox # #------------------------------------------------------------------------- -class StyleComboBox(gtk.ComboBox): +class StyleComboBox(Gtk.ComboBox): """ Derived from the ComboBox, this widget provides handling of Report Styles. @@ -41,8 +41,8 @@ class StyleComboBox(gtk.ComboBox): """ Initialize the combobox, building the display column. """ - gtk.ComboBox.__init__(self,model) - cell = gtk.CellRendererText() + GObject.GObject.__init__(self,model) + cell = Gtk.CellRendererText() self.pack_start(cell,True) self.add_attribute(cell,'text',0) @@ -57,7 +57,7 @@ class StyleComboBox(gtk.ComboBox): @param default: Default selection in the ComboBox @type default: str """ - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) self.style_map = style_map start_index = 0 diff --git a/src/gui/plug/report/_styleeditor.py b/src/gui/plug/report/_styleeditor.py index 30d92c518..4ab64e756 100644 --- a/src/gui/plug/report/_styleeditor.py +++ b/src/gui/plug/report/_styleeditor.py @@ -41,8 +41,7 @@ log = logging.getLogger(".") # GNOME/GTK modules # #------------------------------------------------------------------------ -import gtk -from gtk.gdk import Color +from gi.repository import Gdk #------------------------------------------------------------------------ # @@ -105,7 +104,7 @@ class StyleListDisplay(object): [(_('Style'), -1, 10)], ) self.redraw() if parent_window: - self.window.set_transient_for(parent_window) + self.set_transient_for(parent_window) self.window.run() self.window.destroy() @@ -145,7 +144,7 @@ class StyleListDisplay(object): log.error("Failed to save stylesheet", exc_info=True) def on_button_press(self, obj, event): - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: self.on_edit_clicked(obj) def on_edit_clicked(self, obj): @@ -229,7 +228,7 @@ class StyleEditor(object): self.plist.select_row(0) if self.parent: - self.window.set_transient_for(parent.window) + self.set_transient_for(parent.window) self.window.run() self.window.destroy() @@ -276,7 +275,7 @@ class StyleEditor(object): self.top.get_object("bborder").set_active(p.get_bottom_border()) self.fg_color = font.get_color() - c = Color(self.fg_color[0] << 8, + c = Gdk.Color(self.fg_color[0] << 8, self.fg_color[1] << 8, self.fg_color[2] << 8) self.top.get_object("color").set_color(c) @@ -284,7 +283,7 @@ class StyleEditor(object): "#%02X%02X%02X" % self.fg_color) self.bg_color = p.get_background_color() - c = Color(self.bg_color[0] << 8, + c = Gdk.Color(self.bg_color[0] << 8, self.bg_color[1] << 8, self.bg_color[2] << 8) self.top.get_object("bgcolor").set_color(c) diff --git a/src/gui/plug/report/_textreportdialog.py b/src/gui/plug/report/_textreportdialog.py index f2b9a9891..7b35b4771 100644 --- a/src/gui/plug/report/_textreportdialog.py +++ b/src/gui/plug/report/_textreportdialog.py @@ -27,8 +27,8 @@ # GTK modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -44,14 +44,14 @@ from _docreportdialog import DocReportDialog # _TextFormatComboBox # #------------------------------------------------------------------------- -class _TextFormatComboBox(gtk.ComboBox): +class _TextFormatComboBox(Gtk.ComboBox): """ This class is a combo box that allows the selection of a docgen plugin from all textdoc plugins. """ def __init__(self, active): - gtk.ComboBox.__init__(self) + GObject.GObject.__init__(self) pmgr = GuiPluginManager.get_instance() self.__textdoc_plugins = [] @@ -59,9 +59,9 @@ class _TextFormatComboBox(gtk.ComboBox): if plugin.get_text_support(): self.__textdoc_plugins.append(plugin) - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell, True) self.add_attribute(cell, 'text', 0) diff --git a/src/gui/pluginmanager.py b/src/gui/pluginmanager.py index 8ddff1354..5c61c2c9f 100644 --- a/src/gui/pluginmanager.py +++ b/src/gui/pluginmanager.py @@ -35,7 +35,8 @@ importers, exporters, quick reports, and document generators. # #------------------------------------------------------------------------- import os -import gtk +from gi.repository import Gtk +from gi.repository import GdkPixbuf #------------------------------------------------------------------------- # @@ -62,17 +63,20 @@ def base_reg_stock_icons(iconpaths, extraiconsize, items): [(os.path.join(const.IMAGE_DIR, 'scalable'), '.svg')] ..attribute extraiconsize: list of dir with extra prepared icon sizes and the gtk size to use them for, eg: - [(os.path.join(const.IMAGE_DIR, '22x22'), gtk.ICON_SIZE_LARGE_TOOLBAR)] + [(os.path.join(const.IMAGE_DIR, '22x22'), Gtk.IconSize.LARGE_TOOLBAR)] ..attribute items: list of icons to register, eg: - [('gramps-db', _('Family Trees'), gtk.gdk.CONTROL_MASK, 0, '')] + [('gramps-db', _('Family Trees'), Gdk.ModifierType.CONTROL_MASK, 0, '')] """ # Register our stock items - gtk.stock_add (items) +##TODO GTK3: stock_add does not work on items, it must be Gtk.StockItem, but +## in python one cannot create them, bug http://www.gramps-project.org/bugs/view.php?id=5009 +## However, it seems we do not need this line as stock icons are found via Iconset +## Gtk.stock_add (items) # Add our custom icon factory to the list of defaults - factory = gtk.IconFactory () - factory.add_default () + factory = Gtk.IconFactory() + factory.add_default() for data in items: pixbuf = 0 @@ -80,19 +84,17 @@ def base_reg_stock_icons(iconpaths, extraiconsize, items): icon_file = os.path.expanduser(os.path.join(dirname, data[0]+ext)) if os.path.isfile(icon_file): try: - pixbuf = gtk.gdk.pixbuf_new_from_file (icon_file) + pixbuf = GdkPixbuf.Pixbuf.new_from_file (icon_file) break except: pass if not pixbuf : icon_file = os.path.join(const.IMAGE_DIR, 'gramps.png') - pixbuf = gtk.gdk.pixbuf_new_from_file (icon_file) - - ## FIXME from gtk 2.17.3/2.15.2 change this to - ## FIXME pixbuf = pixbuf.add_alpha(True, 255, 255, 255) - pixbuf = pixbuf.add_alpha(True, chr(0xff), chr(0xff), chr(0xff)) - icon_set = gtk.IconSet (pixbuf) + pixbuf = GdkPixbuf.Pixbuf.new_from_file (icon_file) + + pixbuf = pixbuf.add_alpha(True, 255, 255, 255) + icon_set = Gtk.IconSet.new_from_pixbuf (pixbuf) #add different sized icons, always png type! for size in extraiconsize : pixbuf = 0 @@ -100,12 +102,12 @@ def base_reg_stock_icons(iconpaths, extraiconsize, items): os.path.join(size[0], data[0]+'.png')) if os.path.isfile(icon_file): try: - pixbuf = gtk.gdk.pixbuf_new_from_file (icon_file) + pixbuf = GdkPixbuf.Pixbuf.new_from_file (icon_file) except: pass if pixbuf : - source = gtk.IconSource() + source = Gtk.IconSource() source.set_size_wildcarded(False) source.set_size(size[1]) source.set_pixbuf(pixbuf) @@ -197,14 +199,14 @@ class GuiPluginManager(gen.utils.Callback): # button=20, dnd=32, dialog=48 #add to the back of this list to overrule images set at beginning of list extraiconsize = [ - (os.path.join(dir, '22x22'), gtk.ICON_SIZE_LARGE_TOOLBAR), - (os.path.join(dir, '16x16'), gtk.ICON_SIZE_MENU), - (os.path.join(dir, '22x22'), gtk.ICON_SIZE_BUTTON), + (os.path.join(dir, '22x22'), Gtk.IconSize.LARGE_TOOLBAR), + (os.path.join(dir, '16x16'), Gtk.IconSize.MENU), + (os.path.join(dir, '22x22'), Gtk.IconSize.BUTTON), ] items = [] for stock_id, label in icons: - items.append((stock_id, label, gtk.gdk.CONTROL_MASK, 0, '')) + items.append((stock_id, label, Gdk.ModifierType.CONTROL_MASK, 0, '')) base_reg_stock_icons(iconpaths, extraiconsize, items) diff --git a/src/gui/selectors/baseselector.py b/src/gui/selectors/baseselector.py index b7aedc084..5b699f382 100644 --- a/src/gui/selectors/baseselector.py +++ b/src/gui/selectors/baseselector.py @@ -26,8 +26,8 @@ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -68,9 +68,9 @@ class BaseSelector(ManagedWindow): ManagedWindow.__init__(self, uistate, track, self) - self.renderer = gtk.CellRendererText() + self.renderer = Gtk.CellRendererText() self.track_ref_for_deletion("renderer") - self.renderer.set_property('ellipsize',pango.ELLIPSIZE_END) + self.renderer.set_property('ellipsize',Pango.EllipsizeMode.END) self.db = dbstate.db self.tree = None @@ -92,7 +92,7 @@ class BaseSelector(ManagedWindow): self.search_bar = SearchBar(dbstate, uistate, self.build_tree) filter_box = self.search_bar.build() self.setup_filter() - vbox.pack_start(filter_box, False, False) + vbox.pack_start(filter_box, False, False, 0) vbox.reorder_child(filter_box, 1) self.set_window(window,title_label,self.title) @@ -101,7 +101,7 @@ class BaseSelector(ManagedWindow): self.sort_col = 0 self.setupcols = True self.columns = [] - self.sortorder = gtk.SORT_ASCENDING + self.sortorder = Gtk.SortType.ASCENDING self.skip_list=skip self.build_tree() @@ -161,10 +161,10 @@ class BaseSelector(ManagedWindow): if item[2] == BaseSelector.NONE: continue elif item[2] == BaseSelector.TEXT: - column = gtk.TreeViewColumn(item[0],self.renderer,text=item[3]) + column = Gtk.TreeViewColumn(item[0],self.renderer,text=item[3]) elif item[2] == BaseSelector.MARKUP: - column = gtk.TreeViewColumn(item[0],self.renderer,markup=item[3]) - column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column = Gtk.TreeViewColumn(item[0],self.renderer,markup=item[3]) + column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) column.set_fixed_width(item[1]) column.set_resizable(True) #connect click @@ -189,19 +189,19 @@ class BaseSelector(ManagedWindow): def run(self): val = self.window.run() result = None - if val == gtk.RESPONSE_OK: + if val == Gtk.ResponseType.OK: id_list = self.get_selected_ids() if id_list and id_list[0]: result = self.get_from_handle_func()(id_list[0]) if result is None and self.get_from_handle_func2: result = self.get_from_handle_func2()(id_list[0]) self.close() - elif val != gtk.RESPONSE_DELETE_EVENT: + elif val != Gtk.ResponseType.DELETE_EVENT: self.close() return result def _on_row_activated(self, treeview, path, view_col): - self.window.response(gtk.RESPONSE_OK) + self.window.response(Gtk.ResponseType.OK) def _local_init(self): # define selector-specific init routine @@ -321,14 +321,14 @@ class BaseSelector(ManagedWindow): def column_clicked(self, obj, data): if self.sort_col != data: - self.sortorder = gtk.SORT_ASCENDING + self.sortorder = Gtk.SortType.ASCENDING self.sort_col = data else: - if (self.columns[data].get_sort_order() == gtk.SORT_DESCENDING + if (self.columns[data].get_sort_order() == Gtk.SortType.DESCENDING or not self.columns[data].get_sort_indicator()): - self.sortorder = gtk.SORT_ASCENDING + self.sortorder = Gtk.SortType.ASCENDING else: - self.sortorder = gtk.SORT_DESCENDING + self.sortorder = Gtk.SortType.DESCENDING self.model.reverse_order() self.build_tree() diff --git a/src/gui/selectors/selectobject.py b/src/gui/selectors/selectobject.py index eacefb128..770f19b40 100644 --- a/src/gui/selectors/selectobject.py +++ b/src/gui/selectors/selectobject.py @@ -37,7 +37,7 @@ from gen.ggettext import gettext as _ # GTK+ # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -82,11 +82,11 @@ class SelectObject(BaseSelector): """ self.width_key = 'interface.media-sel-width' self.height_key = 'interface.media-sel-height' - self.preview = gtk.Image() + self.preview = Gtk.Image() self.preview.set_size_request(int(const.THUMBSCALE), int(const.THUMBSCALE)) vbox = self.glade.get_object('select_person_vbox') - vbox.pack_start(self.preview,False) + vbox.pack_start(self.preview, False, True, 0) vbox.reorder_child(self.preview,1) self.preview.show() self.selection.connect('changed',self._row_change) diff --git a/src/gui/selectors/selectperson.py b/src/gui/selectors/selectperson.py index 4eb0ee60c..c41040fd0 100644 --- a/src/gui/selectors/selectperson.py +++ b/src/gui/selectors/selectperson.py @@ -27,7 +27,7 @@ # #------------------------------------------------------------------------- from gen.ggettext import gettext as _ -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -97,10 +97,10 @@ class SelectPerson(BaseSelector): def _on_row_activated(self, treeview, path, view_col): store, paths = self.selection.get_selected_rows() if paths and len(paths[0]) == 2 : - self.window.response(gtk.RESPONSE_OK) + self.window.response(Gtk.ResponseType.OK) def _key_press(self, obj, event): - if event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter): + if event.keyval in (Gdk.KEY_Return, Gdk.KEY_KP_Enter): store, paths = self.selection.get_selected_rows() if paths and len(paths[0]) == 1 : if self.tree.row_expanded(paths[0]): diff --git a/src/gui/spell.py b/src/gui/spell.py index ac7afd0e7..6e57e1e31 100644 --- a/src/gui/spell.py +++ b/src/gui/spell.py @@ -48,7 +48,7 @@ LOG = logging.getLogger(".Spell") # GTK libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk try: import gtkspell diff --git a/src/gui/thumbnails.py b/src/gui/thumbnails.py index 8c4e73c89..1ab158da3 100644 --- a/src/gui/thumbnails.py +++ b/src/gui/thumbnails.py @@ -41,8 +41,9 @@ except ImportError: # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject +from gi.repository import GdkPixbuf #------------------------------------------------------------------------- # @@ -58,10 +59,15 @@ import const # #------------------------------------------------------------------------- try: - import gconf + #test first for the key to avoid an error in the importer that causes + #the error logger to activate + ##TODO GTK3: Is this the best way to avoid error? + import gi.repository as repo + repo.__dict__['GConf'] + from gi.repository import GConf GCONF = True - CLIENT = gconf.client_get_default() -except ImportError: + CLIENT = GConf.Client.get_default() +except (ImportError, KeyError), msg: GCONF = False #------------------------------------------------------------------------- @@ -90,7 +96,7 @@ def __get_gconf_string(key): """ try: val = CLIENT.get_string(key) - except gobject.GError: + except GObject.GError: val = None return unicode(val) @@ -111,7 +117,7 @@ def __get_gconf_bool(key): """ try: val = CLIENT.get_bool(key) - except gobject.GError: + except GObject.GError: val = None return val @@ -175,7 +181,7 @@ def __create_thumbnail_image(src_file, mtype=None, rectangle=None, # build a thumbnail by scaling the image using GTK's built in # routines. try: - pixbuf = gtk.gdk.pixbuf_new_from_file(src_file) + pixbuf = GdkPixbuf.Pixbuf.new_from_file(src_file) width = pixbuf.get_width() height = pixbuf.get_height() @@ -203,7 +209,7 @@ def __create_thumbnail_image(src_file, mtype=None, rectangle=None, scaled_height = int(height * scale) pixbuf = pixbuf.scale_simple(scaled_width, scaled_height, - gtk.gdk.INTERP_BILINEAR) + GdkPixbuf.InterpType.BILINEAR) pixbuf.save(filename, "png") return True except Exception, err: @@ -215,7 +221,7 @@ def __create_thumbnail_image(src_file, mtype=None, rectangle=None, # find_mime_type_pixbuf # #------------------------------------------------------------------------- -_icon_theme = gtk.icon_theme_get_default() +_icon_theme = Gtk.IconTheme.get_default() def find_mime_type_pixbuf(mime_type): try: @@ -229,9 +235,9 @@ def find_mime_type_pixbuf(mime_type): newicon = "gnome-mime-%s" % icontmp return _icon_theme.load_icon(newicon,48,0) except: - return gtk.gdk.pixbuf_new_from_file(const.ICON) + return GdkPixbuf.Pixbuf.new_from_file(const.ICON) except: - return gtk.gdk.pixbuf_new_from_file(const.ICON) + return GdkPixbuf.Pixbuf.new_from_file(const.ICON) #------------------------------------------------------------------------- # @@ -305,17 +311,17 @@ def get_thumbnail_image(src_file, mtype=None, rectangle=None, size=SIZE_NORMAL): :param rectangle: subsection rectangle :type rectangle: tuple :returns: thumbnail representing the source file - :rtype: gtk.gdk.Pixbuf + :rtype: GdkPixbuf.Pixbuf """ try: filename = get_thumbnail_path(src_file, mtype, rectangle, size) - return gtk.gdk.pixbuf_new_from_file(filename) - except (gobject.GError, OSError): + return GdkPixbuf.Pixbuf.new_from_file(filename) + except (GObject.GError, OSError): if mtype: return find_mime_type_pixbuf(mtype) else: default = os.path.join(const.IMAGE_DIR, "document.png") - return gtk.gdk.pixbuf_new_from_file(default) + return GdkPixbuf.Pixbuf.new_from_file(default) #------------------------------------------------------------------------- # @@ -335,7 +341,7 @@ def get_thumbnail_path(src_file, mtype=None, rectangle=None, size=SIZE_NORMAL): :param rectangle: subsection rectangle :type rectangle: tuple :returns: thumbnail representing the source file - :rtype: gtk.gdk.Pixbuf + :rtype: GdkPixbuf.Pixbuf """ filename = __build_thumb_path(src_file, rectangle, size) if not os.path.isfile(src_file): diff --git a/src/gui/undohistory.py b/src/gui/undohistory.py index d6eb0fcaa..c57fb2c13 100644 --- a/src/gui/undohistory.py +++ b/src/gui/undohistory.py @@ -36,8 +36,8 @@ from itertools import chain # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -67,37 +67,37 @@ class UndoHistory(ManagedWindow): self.undodb = self.db.undodb self.dbstate = dbstate - window = gtk.Dialog("", uistate.window, - gtk.DIALOG_DESTROY_WITH_PARENT, None) + window = Gtk.Dialog("", uistate.window, + Gtk.DialogFlags.DESTROY_WITH_PARENT, None) - self.undo_button = window.add_button(gtk.STOCK_UNDO, - gtk.RESPONSE_REJECT) - self.redo_button = window.add_button(gtk.STOCK_REDO, - gtk.RESPONSE_ACCEPT) - self.clear_button = window.add_button(gtk.STOCK_CLEAR, - gtk.RESPONSE_APPLY) - self.close_button = window.add_button(gtk.STOCK_CLOSE, - gtk.RESPONSE_CLOSE) + self.undo_button = window.add_button(Gtk.STOCK_UNDO, + Gtk.ResponseType.REJECT) + self.redo_button = window.add_button(Gtk.STOCK_REDO, + Gtk.ResponseType.ACCEPT) + self.clear_button = window.add_button(Gtk.STOCK_CLEAR, + Gtk.ResponseType.APPLY) + self.close_button = window.add_button(Gtk.STOCK_CLOSE, + Gtk.ResponseType.CLOSE) self.set_window(window, None, self.title) self.window.set_size_request(400, 200) self.window.connect('response', self._response) - scrolled_window = gtk.ScrolledWindow() - scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - self.tree = gtk.TreeView() - self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_STRING) + scrolled_window = Gtk.ScrolledWindow() + scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + self.tree = Gtk.TreeView() + self.model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, + GObject.TYPE_STRING, GObject.TYPE_STRING) self.selection = self.tree.get_selection() - self.renderer = gtk.CellRendererText() + self.renderer = Gtk.CellRendererText() self.tree.set_model(self.model) self.tree.set_rules_hint(True) self.tree.append_column( - gtk.TreeViewColumn(_('Original time'), self.renderer, + Gtk.TreeViewColumn(_('Original time'), self.renderer, text=0, foreground=2, background=3)) self.tree.append_column( - gtk.TreeViewColumn(_('Action'), self.renderer, + Gtk.TreeViewColumn(_('Action'), self.renderer, text=1, foreground=2, background=3)) scrolled_window.add(self.tree) @@ -133,7 +133,7 @@ class UndoHistory(ManagedWindow): def _paint_rows(self, start, end, selected=False): if selected: - (fg, bg) = get_colors(self.tree, gtk.STATE_SELECTED) + (fg, bg) = get_colors(self.tree, Gtk.StateType.SELECTED) else: fg = bg = None @@ -143,10 +143,10 @@ class UndoHistory(ManagedWindow): self.model.set(the_iter, 3, bg) def _response(self, obj, response_id): - if response_id == gtk.RESPONSE_CLOSE: + if response_id == Gtk.ResponseType.CLOSE: self.close(obj) - elif response_id == gtk.RESPONSE_REJECT: + elif response_id == Gtk.ResponseType.REJECT: # Undo the selected entries (model, node) = self.selection.get_selected() if not node: @@ -155,7 +155,7 @@ class UndoHistory(ManagedWindow): nsteps = path[0] - self.undodb.undo_count - 1 self._move(nsteps or -1) - elif response_id == gtk.RESPONSE_ACCEPT: + elif response_id == Gtk.ResponseType.ACCEPT: # Redo the selected entries (model, node) = self.selection.get_selected() if not node: @@ -164,9 +164,9 @@ class UndoHistory(ManagedWindow): nsteps = path[0] - self.undodb.undo_count self._move(nsteps or 1) - elif response_id == gtk.RESPONSE_APPLY: + elif response_id == Gtk.ResponseType.APPLY: self._clear_clicked() - elif response_id == gtk.RESPONSE_DELETE_EVENT: + elif response_id == Gtk.ResponseType.DELETE_EVENT: self.close(obj) def build_menu_names(self, obj): diff --git a/src/gui/utils.py b/src/gui/utils.py index 2ee02a5e3..d9898170b 100644 --- a/src/gui/utils.py +++ b/src/gui/utils.py @@ -60,8 +60,8 @@ def add_menuitem(menu, msg, obj, func): add a menuitem to menu with label msg, which activates func, and has data obj """ - import gtk - item = gtk.MenuItem(msg) + from gi.repository import Gtk + item = Gtk.MenuItem(msg) item.set_data('o', obj) item.connect("activate", func) item.show() @@ -130,7 +130,7 @@ class ProgressMeter(object): """ Specify the title and the current pass header. """ - import gtk + from gi.repository import Gtk self.__mode = ProgressMeter.MODE_FRACTION self.__pbar_max = 100.0 self.__pbar_index = 0.0 @@ -143,7 +143,7 @@ class ProgressMeter(object): self.__cancel_callback = self.handle_cancel if has_display(): - self.__dialog = gtk.Dialog() + self.__dialog = Gtk.Dialog() else: self.__dialog = CLIDialog() if self.__can_cancel: @@ -157,34 +157,34 @@ class ProgressMeter(object): self.__dialog.vbox.set_border_width(24) self.__dialog.set_size_request(400, 125) - tlbl = gtk.Label('%s' % title) + tlbl = Gtk.Label(label='%s' % title) tlbl.set_use_markup(True) self.__dialog.vbox.add(tlbl) - self.__lbl = gtk.Label(header) + self.__lbl = Gtk.Label(label=header) self.__lbl.set_use_markup(True) self.__dialog.vbox.add(self.__lbl) - self.__pbar = gtk.ProgressBar() + self.__pbar = Gtk.ProgressBar() self.__dialog.vbox.add(self.__pbar) if self.__can_cancel: self.__dialog.set_size_request(350, 170) - self.__cancel_button = gtk.Button(stock=gtk.STOCK_CANCEL) + self.__cancel_button = Gtk.Button(stock=Gtk.STOCK_CANCEL) self.__cancel_button.connect('clicked', self.__cancel_callback) self.__dialog.vbox.add(self.__cancel_button) self.message_area = None if message_area: - area = gtk.ScrolledWindow() - text = gtk.TextView() + area = Gtk.ScrolledWindow() + text = Gtk.TextView() text.set_border_width(6) text.set_editable(False) self.message_area = text area.add_with_viewport(text) - area.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + area.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.__dialog.vbox.add(area) - self.message_area_ok = gtk.Button(stock=gtk.STOCK_OK) + self.message_area_ok = Gtk.Button(stock=Gtk.STOCK_OK) self.message_area_ok.connect("clicked", self.close) self.message_area_ok.set_sensitive(False) self.__dialog.vbox.pack_start(self.message_area_ok, expand=False, fill=False) @@ -236,7 +236,7 @@ class ProgressMeter(object): of steps to be used. """ - import gtk + from gi.repository import Gtk self.__mode = mode self.__pbar_max = total self.__pbar_index = 0.0 @@ -254,8 +254,8 @@ class ProgressMeter(object): else: # ProgressMeter.MODE_ACTIVITY self.__pbar.set_pulse_step(1.0/self.__pbar_max) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def step(self): """ @@ -263,7 +263,7 @@ class ProgressMeter(object): and insure that it doesn't go over 100%. """ - import gtk + from gi.repository import Gtk if self.__mode is ProgressMeter.MODE_FRACTION: self.__pbar_index = self.__pbar_index + 1.0 @@ -282,16 +282,16 @@ class ProgressMeter(object): else: # ProgressMeter.MODE_ACTIVITY self.__pbar.pulse() - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() return self.__cancelled def set_header(self, text): - import gtk + from gi.repository import Gtk self.__lbl.set_text(text) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def __warn(self, *obj): """ @@ -354,10 +354,10 @@ def process_pending_events(max_count=10): """ Process pending events, but don't get into an infinite loop. """ - import gtk + from gi.repository import Gtk count = 0 - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() count += 1 if count >= max_count: break @@ -371,12 +371,12 @@ def is_right_click(event): """ Returns True if the event is a button-3 or equivalent """ - import gtk + from gi.repository import Gdk - if event.type == gtk.gdk.BUTTON_PRESS: + if event.type == Gdk.EventType.BUTTON_PRESS: if is_quartz(): if (event.button == 3 - or (event.button == 1 and event.state & gtk.gdk.CONTROL_MASK)): + or (event.button == 1 and event.get_state() & Gdk.ModifierType.CONTROL_MASK)): return True if event.button == 3: diff --git a/src/gui/viewmanager.py b/src/gui/viewmanager.py index a075d2a94..d081f272c 100644 --- a/src/gui/viewmanager.py +++ b/src/gui/viewmanager.py @@ -60,7 +60,7 @@ LOG = logging.getLogger(".") # GNOME modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -269,7 +269,7 @@ class ViewManager(CLIManager): The ViewManager is the session manager of the program. Specifically, it manages the main window of the program. It is closely tied - into the gtk.UIManager to control all menus and actions. + into the Gtk.UIManager to control all menus and actions. The ViewManager controls the various Views within the GRAMPS programs. Views are organised in categories. The categories can be accessed via @@ -538,7 +538,7 @@ class ViewManager(CLIManager): length, 1, # total, increment-by can_cancel=True) pm = ProgressMonitor(GtkProgressDialog, - ("Title", self.window, gtk.DIALOG_MODAL)) + ("Title", self.window, Gtk.DialogFlags.MODAL)) pm.add_op(longop) count = 0 if not config.get('behavior.do-not-show-previously-seen-updates'): @@ -593,21 +593,21 @@ class ViewManager(CLIManager): width = config.get('interface.width') height = config.get('interface.height') - self.window = gtk.Window() + self.window = Gtk.Window() self.window.set_icon_from_file(const.ICON) self.window.set_default_size(width, height) - vbox = gtk.VBox() + vbox = Gtk.VBox() self.window.add(vbox) - hpane = gtk.HPaned() - self.ebox = gtk.EventBox() + hpane = Gtk.HPaned() + self.ebox = Gtk.EventBox() self.navigator = Navigator(self) self.ebox.add(self.navigator.get_top()) hpane.add1(self.ebox) hpane.show() - self.notebook = gtk.Notebook() + self.notebook = Gtk.Notebook() self.notebook.set_scrollable(True) self.notebook.set_show_tabs(False) self.notebook.show() @@ -617,10 +617,10 @@ class ViewManager(CLIManager): hpane.add2(self.notebook) self.menubar = self.uimanager.get_widget('/MenuBar') self.toolbar = self.uimanager.get_widget('/ToolBar') - vbox.pack_start(self.menubar, False) - vbox.pack_start(self.toolbar, False) + vbox.pack_start(self.menubar, False, True, 0) + vbox.pack_start(self.toolbar, False, True, 0) vbox.add(hpane) - vbox.pack_end(self.__setup_statusbar(), False) + vbox.pack_end(self.__setup_statusbar(), False, True, 0) vbox.show() self.progress_monitor = ProgressMonitor( @@ -662,7 +662,7 @@ class ViewManager(CLIManager): # Showing the main window is deferred so that # ArgHandler can work without it always shown - # But we need to realize it here to have gtk.gdk.window handy + # But we need to realize it here to have Gdk.window handy self.window.realize() def __load_sidebar_plugins(self): @@ -684,7 +684,7 @@ class ViewManager(CLIManager): """ Create the statusbar that sits at the bottom of the window """ - self.progress = gtk.ProgressBar() + self.progress = Gtk.ProgressBar() self.progress.set_size_request(100, -1) self.progress.hide() @@ -693,12 +693,12 @@ class ViewManager(CLIManager): self.warnbtn = widgets.WarnButton() - hbox2 = gtk.HBox() + hbox2 = Gtk.HBox() hbox2.set_spacing(4) hbox2.set_border_width(2) - hbox2.pack_start(self.progress, False) - hbox2.pack_start(self.warnbtn, False) - hbox2.pack_end(self.statusbar, True) + hbox2.pack_start(self.progress, False, True, 0) + hbox2.pack_start(self.warnbtn, False, True, 0) + hbox2.pack_end(self.statusbar, True, True, 0) hbox2.show() return hbox2 @@ -717,7 +717,7 @@ class ViewManager(CLIManager): Build the OPEN button. Since GTK's UIManager does not have support for the Open Recent button, we must build in on our own. """ - openbtn = gtk.MenuToolButton('gramps-db') + openbtn = Gtk.MenuToolButton.new_from_stock('gramps-db') openbtn.connect('clicked', self.__open_activate) openbtn.set_sensitive(False) openbtn.set_tooltip_text(_("Connect to a recent database")) @@ -743,11 +743,11 @@ class ViewManager(CLIManager): _("Manage databases"), self.__open_activate), ('OpenRecent', None, _('Open _Recent'), None, _("Open an existing database")), - ('Quit', gtk.STOCK_QUIT, _('_Quit'), "q", None, + ('Quit', Gtk.STOCK_QUIT, _('_Quit'), "q", None, self.quit), ('ViewMenu', None, _('_View')), ('EditMenu', None, _('_Edit')), - ('Preferences', gtk.STOCK_PREFERENCES, _('_Preferences...'), None, + ('Preferences', Gtk.STOCK_PREFERENCES, _('_Preferences...'), None, None, self.preferences_activate), ('HelpMenu', None, _('_Help')), ('HomePage', None, _('Gramps _Home Page'), None, None, @@ -758,13 +758,13 @@ class ViewManager(CLIManager): report_bug_activate), ('ExtraPlugins', None, _('_Extra Reports/Tools'), None, None, extra_plugins_activate), - ('About', gtk.STOCK_ABOUT, _('_About'), None, None, + ('About', Gtk.STOCK_ABOUT, _('_About'), None, None, self.display_about_box), ('PluginStatus', None, _('_Plugin Manager'), None, None, self.__plugin_status), ('FAQ', None, _('_FAQ'), None, None, faq_activate), ('KeyBindings', None, _('_Key Bindings'), None, None, key_bindings), - ('UserManual', gtk.STOCK_HELP, _('_User Manual'), 'F1', None, + ('UserManual', Gtk.STOCK_HELP, _('_User Manual'), 'F1', None, manual_activate), ('TipOfDay', None, _('Tip of the Day'), None, None, self.tip_of_day_activate), @@ -775,7 +775,7 @@ class ViewManager(CLIManager): self.export_data), ('Backup', None, _("Make Backup..."), None, _("Make a Gramps XML backup of the database"), self.quick_backup), - ('Abandon', gtk.STOCK_REVERT_TO_SAVED, + ('Abandon', Gtk.STOCK_REVERT_TO_SAVED, _('_Abandon Changes and Quit'), None, None, self.abort), ('Reports', 'gramps-reports', _('_Reports'), None, _("Open the reports dialog"), self.reports_clicked), @@ -818,7 +818,7 @@ class ViewManager(CLIManager): ] self._action_action_list = [ - ('Clipboard', gtk.STOCK_PASTE, _('Clip_board'), "b", + ('Clipboard', Gtk.STOCK_PASTE, _('Clip_board'), "b", _("Open the Clipboard dialog"), self.clipboard), ('Import', 'gramps-import', _('_Import...'), "i", None, self.import_data), @@ -841,12 +841,12 @@ class ViewManager(CLIManager): ] self._undo_action_list = [ - ('Undo', gtk.STOCK_UNDO, _('_Undo'), 'z', None, + ('Undo', Gtk.STOCK_UNDO, _('_Undo'), 'z', None, self.undo), ] self._redo_action_list = [ - ('Redo', gtk.STOCK_REDO, _('_Redo'), 'z', None, + ('Redo', Gtk.STOCK_REDO, _('_Redo'), 'z', None, self.redo), ] @@ -1010,7 +1010,7 @@ class ViewManager(CLIManager): config.set('interface.width', width) config.set('interface.height', height) config.save() - gtk.main_quit() + Gtk.main_quit() def __backup(self): """ @@ -1056,7 +1056,7 @@ class ViewManager(CLIManager): """ Initialize an action group for the UIManager """ - new_group = gtk.ActionGroup(name) + new_group = Gtk.ActionGroup(name) new_group.add_actions(actions) if toggles: new_group.add_toggle_actions(toggles) @@ -1068,7 +1068,7 @@ class ViewManager(CLIManager): """ Builds the UIManager, and the associated action groups """ - self.uimanager = gtk.UIManager() + self.uimanager = Gtk.UIManager() accelgroup = self.uimanager.get_accel_group() @@ -1115,7 +1115,7 @@ class ViewManager(CLIManager): from gui.tipofday import TipOfDay TipOfDay(self.uistate) - def __plugin_status(self, obj=None): + def __plugin_status(self, obj=None, data=None): """ Display plugin status dialog """ @@ -1124,7 +1124,7 @@ class ViewManager(CLIManager): except WindowActiveError: pass - def navigator_toggle(self, obj): + def navigator_toggle(self, obj, data=None): """ Set the sidebar based on the value of the toggle button. Save the results in the configuration settings @@ -1139,7 +1139,7 @@ class ViewManager(CLIManager): self.show_navigator = False config.save() - def toolbar_toggle(self, obj): + def toolbar_toggle(self, obj, data=None): """ Set the toolbar based on the value of the toggle button. Save the results in the configuration settings @@ -1152,7 +1152,7 @@ class ViewManager(CLIManager): config.set('interface.toolbar-on', False) config.save() - def fullscreen_toggle(self, obj): + def fullscreen_toggle(self, obj, data=None): """ Set the main Granps window fullscreen based on the value of the toggle button. Save the setting in the config file. @@ -1231,11 +1231,11 @@ class ViewManager(CLIManager): self.pages.append(page) # create icon/label for notebook tab (useful for debugging) - hbox = gtk.HBox() - image = gtk.Image() - image.set_from_stock(page.get_stock(), gtk.ICON_SIZE_MENU) - hbox.pack_start(image, False) - hbox.add(gtk.Label(pdata.name)) + hbox = Gtk.HBox() + image = Gtk.Image() + image.set_from_stock(page.get_stock(), Gtk.IconSize.MENU) + hbox.pack_start(image, False, True, 0) + hbox.add(Gtk.Label(label=pdata.name)) hbox.show_all() page_num = self.notebook.append_page(page.get_display(), hbox) return page @@ -1286,8 +1286,8 @@ class ViewManager(CLIManager): if _GTKOSXAPPLICATION: self.macapp.sync_menubar() - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() self.active_page.change_page() @@ -1369,7 +1369,7 @@ class ViewManager(CLIManager): self.dbstate.db.undo_history_callback = self.undo_history_update self.undo_history_close() - self.uistate.window.window.set_cursor(None) + self.uistate.window.get_root_window().set_cursor(None) def _post_load_newdb(self, filename, filetype, title=None): """ @@ -1417,13 +1417,13 @@ class ViewManager(CLIManager): Change the UNDO label """ self.uimanager.remove_action_group(self.undoactions) - self.undoactions = gtk.ActionGroup('Undo') + self.undoactions = Gtk.ActionGroup('Undo') if label: self.undoactions.add_actions([ - ('Undo', gtk.STOCK_UNDO, label, 'z', None, self.undo)]) + ('Undo', Gtk.STOCK_UNDO, label, 'z', None, self.undo)]) else: self.undoactions.add_actions([ - ('Undo', gtk.STOCK_UNDO, _('_Undo'), + ('Undo', Gtk.STOCK_UNDO, _('_Undo'), 'z', None, self.undo)]) self.undoactions.set_sensitive(False) self.uimanager.insert_action_group(self.undoactions, 1) @@ -1433,14 +1433,14 @@ class ViewManager(CLIManager): Change the REDO label """ self.uimanager.remove_action_group(self.redoactions) - self.redoactions = gtk.ActionGroup('Redo') + self.redoactions = Gtk.ActionGroup('Redo') if label: self.redoactions.add_actions([ - ('Redo', gtk.STOCK_REDO, label, 'z', + ('Redo', Gtk.STOCK_REDO, label, 'z', None, self.redo)]) else: self.redoactions.add_actions([ - ('Redo', gtk.STOCK_UNDO, _('_Redo'), + ('Redo', Gtk.STOCK_UNDO, _('_Redo'), 'z', None, self.redo)]) self.redoactions.set_sensitive(False) self.uimanager.insert_action_group(self.redoactions, 1) @@ -1475,41 +1475,41 @@ class ViewManager(CLIManager): Make a quick XML back with or without media. """ from gui.dialog import QuestionDialog2 - window = gtk.Dialog(_("Gramps XML Backup"), + window = Gtk.Dialog(_("Gramps XML Backup"), self.uistate.window, - gtk.DIALOG_DESTROY_WITH_PARENT, None) + Gtk.DialogFlags.DESTROY_WITH_PARENT, None) window.set_size_request(400, -1) - ok_button = window.add_button(gtk.STOCK_OK, - gtk.RESPONSE_APPLY) - close_button = window.add_button(gtk.STOCK_CLOSE, - gtk.RESPONSE_CLOSE) + ok_button = window.add_button(Gtk.STOCK_OK, + Gtk.ResponseType.APPLY) + close_button = window.add_button(Gtk.STOCK_CLOSE, + Gtk.ResponseType.CLOSE) vbox = window.get_content_area() - hbox = gtk.HBox() - label = gtk.Label(_("Path:")) - label.set_justify(gtk.JUSTIFY_LEFT) + hbox = Gtk.HBox() + label = Gtk.Label(label=_("Path:")) + label.set_justify(Gtk.Justification.LEFT) label.set_size_request(90, -1) label.set_alignment(0, .5) - hbox.pack_start(label, False) - path_entry = gtk.Entry() + hbox.pack_start(label, False, True, 0) + path_entry = Gtk.Entry() text = config.get('paths.quick-backup-directory') path_entry.set_text(text) hbox.pack_start(path_entry, True) - file_entry = gtk.Entry() - button = gtk.Button() + file_entry = Gtk.Entry() + button = Gtk.Button() button.connect("clicked", lambda widget: self.select_backup_path(widget, path_entry)) - image = gtk.Image() - image.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON) + image = Gtk.Image() + image.set_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON) image.show() button.add(image) - hbox.pack_end(button, False) - vbox.pack_start(hbox, False) - hbox = gtk.HBox() - label = gtk.Label(_("File:")) - label.set_justify(gtk.JUSTIFY_LEFT) + hbox.pack_end(button, False, True, 0) + vbox.pack_start(hbox, False, True, 0) + hbox = Gtk.HBox() + label = Gtk.Label(label=_("File:")) + label.set_justify(Gtk.Justification.LEFT) label.set_size_request(90, -1) label.set_alignment(0, .5) - hbox.pack_start(label, False) + hbox.pack_start(label, False, True, 0) struct_time = time.localtime() file_entry.set_text(config.get('paths.quick-backup-filename') % {"filename": self.dbstate.db.get_dbname(), @@ -1522,8 +1522,8 @@ class ViewManager(CLIManager): "extension": "gpkg", }) hbox.pack_end(file_entry, True) - vbox.pack_start(hbox, False) - hbox = gtk.HBox() + vbox.pack_start(hbox, False, True, 0) + hbox = Gtk.HBox() bytes = 0 mbytes = "0" for media in self.dbstate.db.iter_media_objects(): @@ -1537,22 +1537,22 @@ class ViewManager(CLIManager): mbytes = str(bytes)[:(length-6)] except OSError: pass - label = gtk.Label(_("Media:")) - label.set_justify(gtk.JUSTIFY_LEFT) + label = Gtk.Label(label=_("Media:")) + label.set_justify(Gtk.Justification.LEFT) label.set_size_request(90, -1) label.set_alignment(0, .5) - hbox.pack_start(label, False) - include = gtk.RadioButton(None, "%s (%s %s)" % (_("Include"), + hbox.pack_start(label, False, True, 0) + include = Gtk.RadioButton(None, "%s (%s %s)" % (_("Include"), mbytes, _("Megabyte|MB"))) - exclude = gtk.RadioButton(include, _("Exclude")) + exclude = Gtk.RadioButton(include, _("Exclude")) include.connect("toggled", lambda widget: self.media_toggle(widget, file_entry)) hbox.pack_start(include, True) hbox.pack_end(exclude, True) - vbox.pack_start(hbox, False) + vbox.pack_start(hbox, False, True, 0) window.show_all() d = window.run() window.hide() - if d == gtk.RESPONSE_APPLY: + if d == Gtk.ResponseType.APPLY: # if file exists, ask if overwrite; else abort basefile = file_entry.get_text() basefile = basefile.replace("/", r"-") @@ -1600,28 +1600,28 @@ class ViewManager(CLIManager): self.progress.set_text("%s: %d%%" % (text, value)) else: self.progress.set_text("%d%%" % value) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def select_backup_path(self, widget, path_entry): """ Choose a backup folder. Make sure there is one highlighted in right pane, otherwise FileChooserDialog will hang. """ - f = gtk.FileChooserDialog( + f = Gtk.FileChooserDialog( _("Select backup directory"), - action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, - buttons=(gtk.STOCK_CANCEL, - gtk.RESPONSE_CANCEL, - gtk.STOCK_APPLY, - gtk.RESPONSE_OK)) + action=Gtk.FileChooserAction.SELECT_FOLDER, + buttons=(Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_APPLY, + Gtk.ResponseType.OK)) mpath = path_entry.get_text() if not mpath: mpath = const.HOME_DIR f.set_current_folder(os.path.dirname(mpath)) f.set_filename(os.path.join(mpath, ".")) status = f.run() - if status == gtk.RESPONSE_OK: + if status == Gtk.ResponseType.OK: filename = f.get_filename() if filename: val = Utils.get_unicode_path_from_file_chooser(filename) @@ -1728,7 +1728,7 @@ class ViewManager(CLIManager): if self.toolactions: self.uistate.uimanager.remove_action_group(self.toolactions) self.uistate.uimanager.remove_ui(self.tool_menu_ui_id) - self.toolactions = gtk.ActionGroup('ToolWindow') + self.toolactions = Gtk.ActionGroup('ToolWindow') (uidef, actions) = self.build_plugin_menu( 'ToolsMenu', tool_menu_list, tool.tool_categories, make_plugin_callback) @@ -1744,7 +1744,7 @@ class ViewManager(CLIManager): if self.reportactions: self.uistate.uimanager.remove_action_group(self.reportactions) self.uistate.uimanager.remove_ui(self.report_menu_ui_id) - self.reportactions = gtk.ActionGroup('ReportWindow') + self.reportactions = Gtk.ActionGroup('ReportWindow') (uidef, actions) = self.build_plugin_menu( 'ReportsMenu', report_menu_list, standalone_categories, make_plugin_callback) @@ -1761,7 +1761,7 @@ class ViewManager(CLIManager): ofile = StringIO() ofile.write('' % text) - menu = gtk.Menu() + menu = Gtk.Menu() menu.show() hash_data = defaultdict(list) diff --git a/src/gui/views/bookmarks.py b/src/gui/views/bookmarks.py index 2d08d3267..d735cda4d 100644 --- a/src/gui/views/bookmarks.py +++ b/src/gui/views/bookmarks.py @@ -44,7 +44,7 @@ log = logging.getLogger(".Bookmarks") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -91,7 +91,7 @@ class Bookmarks : self.uistate = uistate self.bookmarks = bookmarks self.active = DISABLED - self.action_group = gtk.ActionGroup('Bookmarks') + self.action_group = Gtk.ActionGroup('Bookmarks') self.connect_signals() self.dbstate.connect('database-changed', self.db_changed) @@ -126,7 +126,7 @@ class Bookmarks : if self.active != DISABLED: self.uistate.uimanager.remove_ui(self.active) self.uistate.uimanager.remove_action_group(self.action_group) - self.action_group = gtk.ActionGroup('Bookmarks') + self.action_group = Gtk.ActionGroup('Bookmarks') self.uistate.uimanager.ensure_update() self.active = DISABLED @@ -197,39 +197,39 @@ class Bookmarks : def draw_window(self): """Draw the bookmark dialog box.""" title = _("%(title)s - Gramps") % {'title': _("Organize Bookmarks")} - self.top = gtk.Dialog(title) + self.top = Gtk.Dialog(title) self.top.set_default_size(400, 350) self.top.set_modal(True) self.top.set_transient_for(self.uistate.window) self.top.set_has_separator(False) self.top.vbox.set_spacing(5) - label = gtk.Label('%s' + label = Gtk.Label(label='%s' % _("Organize Bookmarks")) label.set_use_markup(True) self.top.vbox.pack_start(label, 0, 0, 5) - box = gtk.HBox() + box = Gtk.HBox() self.top.vbox.pack_start(box, 1, 1, 5) name_titles = [(_('Name'), -1, 200), (_('ID'), -1, 50), ('', -1, 0)] - self.namelist = gtk.TreeView() + self.namelist = Gtk.TreeView() self.namemodel = ListModel(self.namelist, name_titles) self.namemodel_cols = len(name_titles) - slist = gtk.ScrolledWindow() + slist = Gtk.ScrolledWindow() slist.add_with_viewport(self.namelist) - slist.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + slist.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) box.pack_start(slist, 1, 1, 5) - bbox = gtk.VButtonBox() - bbox.set_layout(gtk.BUTTONBOX_START) + bbox = Gtk.VButtonBox() + bbox.set_layout(Gtk.ButtonBoxStyle.START) bbox.set_spacing(6) - up = gtk.Button(stock=gtk.STOCK_GO_UP) - down = gtk.Button(stock=gtk.STOCK_GO_DOWN) - delete = gtk.Button(stock=gtk.STOCK_REMOVE) + up = Gtk.Button(stock=Gtk.STOCK_GO_UP) + down = Gtk.Button(stock=Gtk.STOCK_GO_DOWN) + delete = Gtk.Button(stock=Gtk.STOCK_REMOVE) up.connect('clicked', self.up_clicked) down.connect('clicked', self.down_clicked) delete.connect('clicked', self.delete_clicked) - self.top.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE) - self.top.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP) + self.top.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE) + self.top.add_button(Gtk.STOCK_HELP, Gtk.ResponseType.HELP) self.top.connect('delete-event', self.close) bbox.add(up) bbox.add(down) @@ -239,7 +239,7 @@ class Bookmarks : def close(self, widget, event): """Stop the bookmark organizer""" - self.top.response(gtk.RESPONSE_CLOSE) + self.top.response(Gtk.ResponseType.CLOSE) def edit(self): """ @@ -261,9 +261,9 @@ class Bookmarks : self.modified = False while True: self.response = self.top.run() - if self.response == gtk.RESPONSE_HELP: + if self.response == Gtk.ResponseType.HELP: self.help_clicked() - elif self.response == gtk.RESPONSE_CLOSE: + elif self.response == Gtk.ResponseType.CLOSE: if self.modified: self.redraw_and_report_change() self.top.destroy() diff --git a/src/gui/views/listview.py b/src/gui/views/listview.py index 96970d194..6444fbbcb 100644 --- a/src/gui/views/listview.py +++ b/src/gui/views/listview.py @@ -42,8 +42,9 @@ _LOG = logging.getLogger('.gui.listview') # gtk # #---------------------------------------------------------------- -import gtk -import pango +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import Pango #---------------------------------------------------------------- # @@ -103,10 +104,10 @@ class ListView(NavigationView): self._dirty_on_change_inactive = False self.filter_class = filter_class - self.renderer = gtk.CellRendererText() - self.renderer.set_property('ellipsize', pango.ELLIPSIZE_END) + self.renderer = Gtk.CellRendererText() + self.renderer.set_property('ellipsize', Pango.EllipsizeMode.END) self.sort_col = 0 - self.sort_order = gtk.SORT_ASCENDING + self.sort_order = Gtk.SortType.ASCENDING self.columns = [] self.colinfo = columns self.handle_col = handle_col @@ -130,11 +131,11 @@ class ListView(NavigationView): #################################################################### def build_widget(self): """ - Builds the interface and returns a gtk.Container type that + Builds the interface and returns a Gtk.Container type that contains the interface. This containter will be inserted into - a gtk.Notebook page. + a Gtk.Notebook page. """ - self.vbox = gtk.VBox() + self.vbox = Gtk.VBox() self.vbox.set_border_width(4) self.vbox.set_spacing(4) @@ -142,7 +143,7 @@ class ListView(NavigationView): self.search_build_tree) filter_box = self.search_bar.build() - self.list = gtk.TreeView() + self.list = Gtk.TreeView() self.list.set_rules_hint(True) self.list.set_headers_visible(True) self.list.set_headers_clickable(True) @@ -160,28 +161,28 @@ class ListView(NavigationView): self.list.connect('drag_begin', self.drag_begin) if self.drag_dest_info(): self.list.connect('drag_data_received', self.drag_data_received) - self.list.drag_dest_set(gtk.DEST_DEFAULT_MOTION | - gtk.DEST_DEFAULT_DROP, + self.list.drag_dest_set(Gtk.DestDefaults.MOTION | + Gtk.DestDefaults.DROP, [self.drag_dest_info().target()], - gtk.gdk.ACTION_MOVE | - gtk.gdk.ACTION_COPY) + Gdk.DragAction.MOVE | + Gdk.DragAction.COPY) - scrollwindow = gtk.ScrolledWindow() - scrollwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - scrollwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN) + scrollwindow = Gtk.ScrolledWindow() + scrollwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + scrollwindow.set_shadow_type(Gtk.ShadowType.ETCHED_IN) scrollwindow.add(self.list) - self.vbox.pack_start(filter_box, False) - self.vbox.pack_start(scrollwindow, True) + self.vbox.pack_start(filter_box, False, True, 0) + self.vbox.pack_start(scrollwindow, True, True, 0) - self.renderer = gtk.CellRendererText() - self.renderer.set_property('ellipsize', pango.ELLIPSIZE_END) + self.renderer = Gtk.CellRendererText() + self.renderer.set_property('ellipsize', Pango.EllipsizeMode.END) self.columns = [] self.build_columns() self.selection = self.list.get_selection() if self.multiple_selection: - self.selection.set_mode(gtk.SELECTION_MULTIPLE) + self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) self.selection.connect('changed', self.row_changed) self.setup_filter() @@ -197,11 +198,11 @@ class ListView(NavigationView): NavigationView.define_actions(self) - self.edit_action = gtk.ActionGroup(self.title + '/ChangeOrder') + self.edit_action = Gtk.ActionGroup(self.title + '/ChangeOrder') self.edit_action.add_actions([ - ('Add', gtk.STOCK_ADD, _("_Add..."), "Insert", + ('Add', Gtk.STOCK_ADD, _("_Add..."), "Insert", self.ADD_MSG, self.add), - ('Remove', gtk.STOCK_REMOVE, _("_Remove"), "Delete", + ('Remove', Gtk.STOCK_REMOVE, _("_Remove"), "Delete", self.DEL_MSG, self.remove), ('Merge', 'gramps-merge', _('_Merge...'), None, self.MERGE_MSG, self.merge), @@ -211,7 +212,7 @@ class ListView(NavigationView): self._add_action_group(self.edit_action) - self._add_action('Edit', gtk.STOCK_EDIT, _("action|_Edit..."), + self._add_action('Edit', Gtk.STOCK_EDIT, _("action|_Edit..."), accel="Return", tip=self.EDIT_MSG, callback=self.edit) @@ -226,7 +227,7 @@ class ListView(NavigationView): if not pair[0]: continue name = self.colinfo[pair[1]] - column = gtk.TreeViewColumn(name, self.renderer) + column = Gtk.TreeViewColumn(name, self.renderer) if self.model and self.model.color_column() is not None: column.set_cell_data_func(self.renderer, self.foreground_color) @@ -240,14 +241,14 @@ class ListView(NavigationView): column.set_resizable(True) column.set_clickable(True) - column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) column.set_fixed_width(pair[2]) self.columns.append(column) self.list.append_column(column) index += 1 - def foreground_color(self, column, renderer, model, iter_): + def foreground_color(self, column, renderer, model, iter_, data=None): ''' Set the foreground color of the cell renderer. We use a cell data function because we don't want to set the color of untagged rows. @@ -341,7 +342,7 @@ class ListView(NavigationView): [(self.colinfo[pair[1]], pair[1], pair[1] in self.exact_search()) for pair in self.column_order() if pair[0]]) - def sidebar_toggled(self, active): + def sidebar_toggled(self, active, data=None): """ Called when the sidebar is toggled. """ @@ -389,7 +390,8 @@ class ListView(NavigationView): parent_path = self.model.on_get_path(parent_node) if parent_path: for i in range(len(parent_path)): - expand_path = tuple([x for x in parent_path[:i+1]]) + expand_path = Gtk.TreePath( + tuple([x for x in parent_path[:i+1]])) self.list.expand_row(expand_path, False) path = self.model.on_get_path(node) @@ -465,7 +467,7 @@ class ListView(NavigationView): #make sure we sort on first column. We have no idea where the # column that was sorted on before is situated now. self.sort_col = 0 - self.sort_order = gtk.SORT_ASCENDING + self.sort_order = Gtk.SortType.ASCENDING self.setup_filter() self.build_tree() @@ -532,7 +534,7 @@ class ListView(NavigationView): self.uistate.set_busy_cursor(0) def blist(self, store, path, node, sel_list): - if store.get_flags() & gtk.TREE_MODEL_LIST_ONLY: + if store.get_flags() & Gtk.TreeModelFlags.LIST_ONLY: handle = store.get_value(node, self.handle_col) else: handle = store.get_handle(store.on_get_iter(path)) @@ -569,14 +571,14 @@ class ListView(NavigationView): cput = time.clock() same_col = False if self.sort_col != data: - order = gtk.SORT_ASCENDING + order = Gtk.SortType.ASCENDING else: same_col = True - if (self.columns[data].get_sort_order() == gtk.SORT_DESCENDING + if (self.columns[data].get_sort_order() == Gtk.SortType.DESCENDING or not self.columns[data].get_sort_indicator()): - order = gtk.SORT_ASCENDING + order = Gtk.SortType.ASCENDING else: - order = gtk.SORT_DESCENDING + order = Gtk.SortType.DESCENDING self.sort_col = data self.sort_order = order @@ -654,14 +656,14 @@ class ListView(NavigationView): if len(selected_ids) == 1: if self.drag_info(): - self.list.drag_source_set(gtk.gdk.BUTTON1_MASK, + self.list.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, [self.drag_info().target()], - gtk.gdk.ACTION_COPY) + Gdk.DragAction.COPY) elif len(selected_ids) > 1: if self.drag_list_info(): - self.list.drag_source_set(gtk.gdk.BUTTON1_MASK, + self.list.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, [self.drag_list_info().target()], - gtk.gdk.ACTION_COPY) + Gdk.DragAction.COPY) self.uistate.modify_statusbar(self.dbstate) @@ -743,7 +745,7 @@ class ListView(NavigationView): """ if not self.dbstate.open: return False - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: if self.type_list() == LISTFLAT: self.edit(obj) return True @@ -766,7 +768,7 @@ class ListView(NavigationView): get_widget('/Popup/QuickReport').get_submenu() if qr_menu : self.uistate.uimanager.\ - get_widget('/Popup/QuickReport').remove_submenu() + get_widget('/Popup/QuickReport').set_submenu(None) reportactions = [] if menu and self.get_active(): (ui, reportactions) = create_quickreport_menu( @@ -775,7 +777,7 @@ class ListView(NavigationView): self.uistate, self.first_selected()) if len(reportactions) > 1 : - qr_menu = gtk.Menu() + qr_menu = Gtk.Menu() for action in reportactions[1:] : add_menuitem(qr_menu, action[2], None, action[5]) self.uistate.uimanager.get_widget('/Popup/QuickReport').\ @@ -786,19 +788,19 @@ class ListView(NavigationView): qr_menu = popup.get_submenu() webconnects = [] if qr_menu: - popup.remove_submenu() + popup.set_submenu(None) webconnects = create_web_connect_menu( self.dbstate, self.uistate, self.navigation_type(), self.first_selected()) if len(webconnects) > 1 : - qr_menu = gtk.Menu() + qr_menu = Gtk.Menu() for action in webconnects[1:] : add_menuitem(qr_menu, action[2], None, action[5]) popup.set_submenu(qr_menu) if menu: - menu.popup(None, None, None, event.button, event.time) + menu.popup(None, None, None, None, event.button, event.time) return True return False @@ -810,7 +812,7 @@ class ListView(NavigationView): """ if not self.dbstate.open: return False - if event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter): + if event.keyval in (Gdk.KEY_Return, Gdk.KEY_KP_Enter): self.edit(obj) return True return False @@ -823,8 +825,8 @@ class ListView(NavigationView): """ if not self.dbstate.open: return False - elif event.state & gtk.gdk.SHIFT_MASK: - if event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter): + elif event.get_state() & Gdk.ModifierType.SHIFT_MASK: + if event.keyval in (Gdk.KEY_Return, Gdk.KEY_KP_Enter): store, paths = self.selection.get_selected_rows() if paths: firstsel = paths[0] @@ -832,7 +834,7 @@ class ListView(NavigationView): if len(paths) == 1 and firstnode.handle is None: return self.expand_collapse_tree_branch() else: - if event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter): + if event.keyval in (Gdk.KEY_Return, Gdk.KEY_KP_Enter): store, paths = self.selection.get_selected_rows() if paths: firstsel = paths[0] @@ -918,20 +920,20 @@ class ListView(NavigationView): # Export data #################################################################### def export(self, obj): - chooser = gtk.FileChooserDialog( + chooser = Gtk.FileChooserDialog( _("Export View as Spreadsheet"), self.uistate.window, - gtk.FILE_CHOOSER_ACTION_SAVE, - (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, - gtk.STOCK_SAVE, gtk.RESPONSE_OK)) + Gtk.FileChooserAction.SAVE, + (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + Gtk.STOCK_SAVE, Gtk.ResponseType.OK)) chooser.set_do_overwrite_confirmation(True) - combobox = gtk.combo_box_new_text() - label = gtk.Label(_("Format:")) + combobox = Gtk.ComboBoxText() + label = Gtk.Label(label=_("Format:")) label.set_alignment(1.0, 0.5) - box = gtk.HBox() + box = Gtk.HBox() box.pack_start(label, True, True, padding=12) - box.pack_start(combobox, False, False) + box.pack_start(combobox, False, False, 0) combobox.append_text(_('CSV')) combobox.append_text(_('OpenDocument Spreadsheet')) combobox.set_active(0) @@ -943,7 +945,7 @@ class ListView(NavigationView): fn = chooser.get_filename() fn = Utils.get_unicode_path_from_file_chooser(fn) fl = combobox.get_active() - if value == gtk.RESPONSE_OK: + if value == Gtk.ResponseType.OK: if fn: chooser.destroy() break @@ -973,7 +975,7 @@ class ListView(NavigationView): ofile.start_row() # Headings - if self.model.get_flags() & gtk.TREE_MODEL_LIST_ONLY: + if self.model.get_flags() & Gtk.TreeModelFlags.LIST_ONLY: headings = column_names else: levels = self.model.get_tree_levels() @@ -983,7 +985,7 @@ class ListView(NavigationView): map(ofile.write_cell, headings) ofile.end_row() - if self.model.get_flags() & gtk.TREE_MODEL_LIST_ONLY: + if self.model.get_flags() & Gtk.TreeModelFlags.LIST_ONLY: # Flat model for row in self.model: ofile.start_row() @@ -1025,25 +1027,25 @@ class ListView(NavigationView): """ raise NotImplementedError - def edit(self, obj): + def edit(self, obj, data=None): """ Template function to allow the editing of the selected object """ raise NotImplementedError - def remove(self, handle): + def remove(self, handle, data=None): """ Template function to allow the removal of an object by its handle """ raise NotImplementedError - def add(self, obj): + def add(self, obj, data=None): """ Template function to allow the adding of a new object """ raise NotImplementedError - def merge(self, obj): + def merge(self, obj, data=None): """ Template function to allow the merger of two objects. """ diff --git a/src/gui/views/navigationview.py b/src/gui/views/navigationview.py index 66051319f..fabf0924b 100644 --- a/src/gui/views/navigationview.py +++ b/src/gui/views/navigationview.py @@ -39,7 +39,7 @@ _LOG = logging.getLogger('.navigationview') # gtk # #---------------------------------------------------------------- -import gtk +from gi.repository import Gtk #---------------------------------------------------------------- # @@ -266,7 +266,7 @@ class NavigationView(PageView): """ Define the bookmark menu actions. """ - self.book_action = gtk.ActionGroup(self.title + '/Bookmark') + self.book_action = Gtk.ActionGroup(self.title + '/Bookmark') self.book_action.add_actions([ ('AddBook', 'gramps-bookmark-new', _('_Add Bookmark'), 'd', None, self.add_bookmark), @@ -286,28 +286,28 @@ class NavigationView(PageView): Define the navigation menu actions. """ # add the Forward action group to handle the Forward button - self.fwd_action = gtk.ActionGroup(self.title + '/Forward') + self.fwd_action = Gtk.ActionGroup(self.title + '/Forward') self.fwd_action.add_actions([ - ('Forward', gtk.STOCK_GO_FORWARD, _("_Forward"), + ('Forward', Gtk.STOCK_GO_FORWARD, _("_Forward"), "%sRight" % mod_key(), _("Go to the next object in the history"), self.fwd_clicked) ]) # add the Backward action group to handle the Forward button - self.back_action = gtk.ActionGroup(self.title + '/Backward') + self.back_action = Gtk.ActionGroup(self.title + '/Backward') self.back_action.add_actions([ - ('Back', gtk.STOCK_GO_BACK, _("_Back"), + ('Back', Gtk.STOCK_GO_BACK, _("_Back"), "%sLeft" % mod_key(), _("Go to the previous object in the history"), self.back_clicked) ]) - self._add_action('HomePerson', gtk.STOCK_HOME, _("_Home"), + self._add_action('HomePerson', Gtk.STOCK_HOME, _("_Home"), accel="%sHome" % mod_key(), tip=_("Go to the default person"), callback=self.home) - self.other_action = gtk.ActionGroup(self.title + '/PersonOther') + self.other_action = Gtk.ActionGroup(self.title + '/PersonOther') self.other_action.add_actions([ - ('SetActive', gtk.STOCK_HOME, _("Set _Home Person"), None, + ('SetActive', Gtk.STOCK_HOME, _("Set _Home Person"), None, None, self.set_default_person), ]) @@ -335,27 +335,26 @@ class NavigationView(PageView): """ A dialog to move to a Gramps ID entered by the user. """ - dialog = gtk.Dialog(_('Jump to by Gramps ID'), None, - gtk.DIALOG_NO_SEPARATOR) + dialog = Gtk.Dialog(_('Jump to by Gramps ID')) dialog.set_border_width(12) - label = gtk.Label('%s' % + label = Gtk.Label(label='%s' % _('Jump to by Gramps ID')) label.set_use_markup(True) dialog.vbox.add(label) dialog.vbox.set_spacing(10) dialog.vbox.set_border_width(12) - hbox = gtk.HBox() - hbox.pack_start(gtk.Label("%s: " % _('ID')), False) - text = gtk.Entry() + hbox = Gtk.HBox() + hbox.pack_start(Gtk.Label("%s: " % _('ID', True, True, 0)), False) + text = Gtk.Entry() text.set_activates_default(True) - hbox.pack_start(text, False) - dialog.vbox.pack_start(hbox, False) - dialog.add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, - gtk.STOCK_JUMP_TO, gtk.RESPONSE_OK) - dialog.set_default_response(gtk.RESPONSE_OK) + hbox.pack_start(text, False, True, 0) + dialog.vbox.pack_start(hbox, False, True, 0) + dialog.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + Gtk.STOCK_JUMP_TO, Gtk.ResponseType.OK) + dialog.set_default_response(Gtk.ResponseType.OK) dialog.vbox.show_all() - if dialog.run() == gtk.RESPONSE_OK: + if dialog.run() == Gtk.ResponseType.OK: gid = text.get_text() handle = self.get_handle_from_gramps_id(gid) if handle is not None: @@ -444,7 +443,7 @@ class NavigationView(PageView): "%s%d" % (mod_key(), index), None, make_callback(hobj.push, handle))) - self.mru_action = gtk.ActionGroup(nav_type) + self.mru_action = Gtk.ActionGroup(nav_type) self.mru_action.add_actions(data) self.mru_enable() @@ -501,9 +500,9 @@ class NavigationView(PageView): Handle the control+c (copy) and control+v (paste), or pass it on. """ if self.active: - if event.type == gtk.gdk.KEY_PRESS: - if (event.keyval == gtk.keysyms.c and - (event.state & gtk.gdk.CONTROL_MASK)): + if event.type == Gdk.KEY_PRESS: + if (event.keyval == Gdk.KEY_c and + (event.get_state() & Gdk.ModifierType.CONTROL_MASK)): self.call_copy() return True return super(NavigationView, self).key_press_handler(widget, event) diff --git a/src/gui/views/pageview.py b/src/gui/views/pageview.py index b74f3b2aa..d2665ac42 100644 --- a/src/gui/views/pageview.py +++ b/src/gui/views/pageview.py @@ -38,7 +38,7 @@ _LOG = logging.getLogger('.pageview') # gtk # #---------------------------------------------------------------- -import gtk +from gi.repository import Gtk from gen.ggettext import gettext as _ #---------------------------------------------------------------- @@ -153,8 +153,8 @@ class PageView(DbGUIElement): self.bottombar = GrampsBar(self.dbstate, self.uistate, self, self.ident + "_bottombar", defaults[1]) - hpane = gtk.HPaned() - vpane = gtk.VPaned() + hpane = Gtk.HPaned() + vpane = Gtk.VPaned() hpane.pack1(vpane, resize=True, shrink=False) hpane.pack2(self.sidebar, resize=False, shrink=True) hpane.show() @@ -214,9 +214,9 @@ class PageView(DbGUIElement): (paste). """ if self.active: - if event.type == gtk.gdk.KEY_PRESS: - if (event.keyval == gtk.keysyms.v and - (event.state & gtk.gdk.CONTROL_MASK)): + if event.type == Gdk.KEY_PRESS: + if (event.keyval == Gdk.KEY_v and + (event.get_state() & Gdk.ModifierType.CONTROL_MASK)): self.call_paste() return True return False @@ -352,14 +352,14 @@ class PageView(DbGUIElement): Return image associated with the view category, which is used for the icon for the button. """ - return gtk.STOCK_MISSING_IMAGE + return Gtk.STOCK_MISSING_IMAGE def get_viewtype_stock(self): """ Return immage associated with the viewtype inside a view category, it will be used for the icon on the button to select view in the category """ - return gtk.STOCK_MISSING_IMAGE + return Gtk.STOCK_MISSING_IMAGE def get_title(self): """ @@ -416,7 +416,7 @@ class PageView(DbGUIElement): and self.action_toggle_list. The user should define these in self.define_actions """ - self.action_group = gtk.ActionGroup(self.title) + self.action_group = Gtk.ActionGroup(self.title) if len(self.action_list) > 0: self.action_group.add_actions(self.action_list) if len(self.action_toggle_list) > 0: @@ -513,7 +513,7 @@ class PageView(DbGUIElement): Define the action for a key press event """ # TODO: This is never used? (replaced in ListView) - if event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter): + if event.keyval in (Gdk.KEY_Return, Gdk.KEY_KP_Enter): self.edit(obj) return True return False @@ -634,12 +634,12 @@ class DummyPage(PageView): PageView.__init__(self, title, pdata, dbstate, uistate) def build_widget(self): - box = gtk.VBox(False, 1) + box = Gtk.VBox(False, 1) #top widget at the top - box.pack_start(gtk.Label(_('View %(name)s: %(msg)s') % { + box.pack_start(Gtk.Label(label=_('View %(name)s: %(msg)s') % { 'name': self.title, - 'msg': self.msg}), False, False, 0 ) - tv = gtk.TextView() + 'msg': self.msg}), False, False, 0) + tv = Gtk.TextView() tb = tv.get_buffer() tb.insert_at_cursor(self.msg2) box.pack_start(tv, False, False, 0) diff --git a/src/gui/views/tags.py b/src/gui/views/tags.py index 655ec67f5..4338c824b 100644 --- a/src/gui/views/tags.py +++ b/src/gui/views/tags.py @@ -34,7 +34,7 @@ from xml.sax.saxutils import escape # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -203,7 +203,7 @@ class Tags(DbGUIElement): if self.db is None: self.tag_ui = '' - self.tag_action = gtk.ActionGroup('Tag') + self.tag_action = Gtk.ActionGroup('Tag') return tag_menu = '' @@ -224,7 +224,7 @@ class Tags(DbGUIElement): actions.append(('TagButton', 'gramps-tag', _('Tag'), None, _('Tag selected rows'), self.cb_tag_button)) - self.tag_action = gtk.ActionGroup('Tag') + self.tag_action = Gtk.ActionGroup('Tag') self.tag_action.add_actions(actions) def cb_tag_button(self, action): @@ -263,7 +263,7 @@ class Tags(DbGUIElement): # Make the dialog modal so that the user can't start another # database transaction while the one setting tags is still running. pmon = progressdlg.ProgressMonitor(progressdlg.GtkProgressDialog, - ("", self.uistate.window, gtk.DIALOG_MODAL), popup_time=2) + ("", self.uistate.window, Gtk.DialogFlags.MODAL), popup_time=2) status = progressdlg.LongOpStatus(msg=_("Adding Tags"), total_steps=len(selected), interval=len(selected)//20) @@ -315,7 +315,7 @@ class OrganizeTagsDialog(object): self._populate_model() while True: response = self.top.run() - if response == gtk.RESPONSE_HELP: + if response == Gtk.ResponseType.HELP: display_help(webpage=WIKI_HELP_PAGE, section=WIKI_HELP_SEC) else: @@ -369,45 +369,45 @@ class OrganizeTagsDialog(object): """ # pylint: disable-msg=E1101 title = _("%(title)s - Gramps") % {'title': _("Organize Tags")} - top = gtk.Dialog(title) + top = Gtk.Dialog(title) top.set_default_size(400, 350) top.set_modal(True) top.set_transient_for(self.parent_window) top.set_has_separator(False) top.vbox.set_spacing(5) - label = gtk.Label('%s' + label = Gtk.Label(label='%s' % _("Organize Tags")) label.set_use_markup(True) top.vbox.pack_start(label, 0, 0, 5) - box = gtk.HBox() + box = Gtk.HBox() top.vbox.pack_start(box, 1, 1, 5) name_titles = [('', NOSORT, 20, INTEGER), # Priority ('', NOSORT, 100), # Handle (_('Name'), NOSORT, 200), (_('Color'), NOSORT, 50, COLOR)] - self.namelist = gtk.TreeView() + self.namelist = Gtk.TreeView() self.namemodel = ListModel(self.namelist, name_titles) - slist = gtk.ScrolledWindow() + slist = Gtk.ScrolledWindow() slist.add_with_viewport(self.namelist) - slist.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + slist.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) box.pack_start(slist, 1, 1, 5) - bbox = gtk.VButtonBox() - bbox.set_layout(gtk.BUTTONBOX_START) + bbox = Gtk.VButtonBox() + bbox.set_layout(Gtk.ButtonBoxStyle.START) bbox.set_spacing(6) - up = gtk.Button(stock=gtk.STOCK_GO_UP) - down = gtk.Button(stock=gtk.STOCK_GO_DOWN) - add = gtk.Button(stock=gtk.STOCK_ADD) - edit = gtk.Button(stock=gtk.STOCK_EDIT) - remove = gtk.Button(stock=gtk.STOCK_REMOVE) + up = Gtk.Button(stock=Gtk.STOCK_GO_UP) + down = Gtk.Button(stock=Gtk.STOCK_GO_DOWN) + add = Gtk.Button(stock=Gtk.STOCK_ADD) + edit = Gtk.Button(stock=Gtk.STOCK_EDIT) + remove = Gtk.Button(stock=Gtk.STOCK_REMOVE) up.connect('clicked', self.cb_up_clicked) down.connect('clicked', self.cb_down_clicked) add.connect('clicked', self.cb_add_clicked, top) edit.connect('clicked', self.cb_edit_clicked, top) remove.connect('clicked', self.cb_remove_clicked, top) - top.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE) - top.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP) + top.add_button(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE) + top.add_button(Gtk.STOCK_HELP, Gtk.ResponseType.HELP) bbox.add(up) bbox.add(down) bbox.add(add) @@ -501,7 +501,7 @@ class OrganizeTagsDialog(object): # Make the dialog modal so that the user can't start another # database transaction while the one removing tags is still running. pmon = progressdlg.ProgressMonitor(progressdlg.GtkProgressDialog, - ("", self.parent_window, gtk.DIALOG_MODAL), popup_time=2) + ("", self.parent_window, Gtk.DialogFlags.MODAL), popup_time=2) status = progressdlg.LongOpStatus(msg=_("Removing Tags"), total_steps=len(links), interval=len(links)//20) @@ -542,7 +542,7 @@ class EditTag(object): Run the dialog and return the result. """ response = self.top.run() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: self._save() self.top.destroy() @@ -579,28 +579,28 @@ class EditTag(object): title = _('Tag: %s') % self.tag.get_name() else: title = _('New Tag') - top = gtk.Dialog(_("%(title)s - Gramps") % {'title': title}) + top = Gtk.Dialog(_("%(title)s - Gramps") % {'title': title}) top.set_default_size(300, 100) top.set_modal(True) top.set_transient_for(self.parent_window) top.set_has_separator(False) top.vbox.set_spacing(5) - hbox = gtk.HBox() + hbox = Gtk.HBox() top.vbox.pack_start(hbox, False, False, 10) - label = gtk.Label(_('Tag Name:')) - self.entry = gtk.Entry() + label = Gtk.Label(label=_('Tag Name:')) + self.entry = Gtk.Entry() self.entry.set_text(self.tag.get_name()) - self.color = gtk.ColorButton() - self.color.set_color(gtk.gdk.color_parse(self.tag.get_color())) + self.color = Gtk.ColorButton() + self.color.set_color(Gdk.color_parse(self.tag.get_color())) title = _("%(title)s - Gramps") % {'title': _("Pick a Color")} self.color.set_title(title) hbox.pack_start(label, False, False, 5) hbox.pack_start(self.entry, True, True, 5) hbox.pack_start(self.color, False, False, 5) - top.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) - top.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) + top.add_button(Gtk.STOCK_OK, Gtk.ResponseType.OK) + top.add_button(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) top.show_all() return top diff --git a/src/gui/views/treemodels/citationlistmodel.py b/src/gui/views/treemodels/citationlistmodel.py index 0ddf414b8..353f6f5b4 100644 --- a/src/gui/views/treemodels/citationlistmodel.py +++ b/src/gui/views/treemodels/citationlistmodel.py @@ -38,7 +38,7 @@ LOG = logging.getLogger(".citation") # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -57,7 +57,7 @@ class CitationListModel(CitationBaseModel, FlatBaseModel): """ Flat citation model. (Original code in CitationBaseModel). """ - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): self.map = db.get_raw_citation_data self.gen_cursor = db.get_citation_cursor @@ -105,5 +105,5 @@ class CitationListModel(CitationBaseModel, FlatBaseModel): self.smap = None FlatBaseModel.destroy(self) - def on_get_n_columns(self): + def do_get_n_columns(self): return len(self.fmap)+1 diff --git a/src/gui/views/treemodels/citationtreemodel.py b/src/gui/views/treemodels/citationtreemodel.py index c8c28a4ba..05090bd86 100644 --- a/src/gui/views/treemodels/citationtreemodel.py +++ b/src/gui/views/treemodels/citationtreemodel.py @@ -45,7 +45,7 @@ from gen.ggettext import gettext as _ # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -65,7 +65,7 @@ class CitationTreeModel(CitationBaseModel, TreeBaseModel): """ Hierarchical citation model. """ - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): self.db = db self.number_items = self.db.get_number_of_sources @@ -181,7 +181,7 @@ class CitationTreeModel(CitationBaseModel, TreeBaseModel): if self.get_node(data[5]): self.add_node(data[5], handle, sort_key, handle, secondary=True) - def on_get_n_columns(self): + def do_get_n_columns(self): return len(self.fmap)+1 def column_header(self, node): diff --git a/src/gui/views/treemodels/eventmodel.py b/src/gui/views/treemodels/eventmodel.py index 5789021e3..626b40180 100644 --- a/src/gui/views/treemodels/eventmodel.py +++ b/src/gui/views/treemodels/eventmodel.py @@ -33,7 +33,7 @@ log = logging.getLogger(".") # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -68,7 +68,7 @@ INVALID_DATE_FORMAT = config.get('preferences.invalid-date-format') #------------------------------------------------------------------------- class EventModel(FlatBaseModel): - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): self.gen_cursor = db.get_event_cursor self.map = db.get_raw_event_data @@ -109,7 +109,7 @@ class EventModel(FlatBaseModel): self.smap = None FlatBaseModel.destroy(self) - def on_get_n_columns(self): + def do_get_n_columns(self): return len(self.fmap)+1 def column_description(self,data): diff --git a/src/gui/views/treemodels/familymodel.py b/src/gui/views/treemodels/familymodel.py index 764e97253..e9099e288 100644 --- a/src/gui/views/treemodels/familymodel.py +++ b/src/gui/views/treemodels/familymodel.py @@ -34,7 +34,7 @@ import locale # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -58,7 +58,7 @@ invalid_date_format = config.get('preferences.invalid-date-format') #------------------------------------------------------------------------- class FamilyModel(FlatBaseModel): - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): self.gen_cursor = db.get_family_cursor self.map = db.get_raw_family_data @@ -106,7 +106,7 @@ class FamilyModel(FlatBaseModel): """ return 8 - def on_get_n_columns(self): + def do_get_n_columns(self): return len(self.fmap)+1 def column_handle(self, data): @@ -188,7 +188,7 @@ class FamilyModel(FlatBaseModel): """ Return the tag color. """ - tag_color = None + tag_color = "#000000000000" tag_priority = None for handle in data[13]: tag = self.db.get_tag_from_handle(handle) diff --git a/src/gui/views/treemodels/flatbasemodel.py b/src/gui/views/treemodels/flatbasemodel.py index 8c9370200..4fe3eda43 100644 --- a/src/gui/views/treemodels/flatbasemodel.py +++ b/src/gui/views/treemodels/flatbasemodel.py @@ -24,7 +24,7 @@ """ This module provides the flat treemodel that is used for all flat treeviews. -For performance, GRAMPS does not use gtk.TreeStore, as that would mean keeping +For performance, GRAMPS does not use Gtk.TreeStore, as that would mean keeping the entire database table of an object in memory. Instead, it suffices to keep in memory the sortkey and the matching handle, as well as a map of sortkey,handle to treeview path, and vice versa. @@ -65,7 +65,8 @@ _LOG = logging.getLogger(".gui.basetreemodel") # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -91,7 +92,7 @@ class FlatNodeMap(object): * srtkey : key on which to sort * hndl : handle of the object, makes it possible to retrieve the object from the database. As handle is unique, it is used - as the iter for the TreeView + in the iter for the TreeView * index : the index in the internal lists. When a view is in reverse, this is not kept physically, but instead via an offset * path : integer path in the TreeView. This will be index if view is @@ -120,6 +121,13 @@ class FlatNodeMap(object): self._hndl2index = {} self._reverse = False self.__corr = (0, 1) + #We create a stamp to recognize invalid iterators. From the docs: + #Set the stamp to be equal to your model's stamp, to mark the + #iterator as valid. When your model's structure changes, you should + #increment your model's stamp to mark all older iterators as invalid. + #They will be recognised as invalid because they will then have an + #incorrect stamp. + self.stamp = 0 def destroy(self): """ @@ -143,18 +151,20 @@ class FlatNodeMap(object): Reverse sets up how the path is determined from the index. If True the first index is the last path - :param index2hndllist: the ascending sorted (sortkey, handle) values + :param index2hndllist: the ascending sorted (sortkey, handle, iter) values as they will appear in the flat treeview. This often is - a subset of all possible data + a subset of all possible data. + Set iter=None, it will be set internally :type index2hndllist: a list of (sortkey, handle) tuples :param fullhndllist: the list of all possilbe ascending sorted - (sortkey, handle) values as they will appear in the flat + [sortkey, handle, iter] values as they will appear in the flat treeview if all data is shown. - :type fullhndllist: a list of (sortkey, handle) tuples + :type fullhndllist: a list of (sortkey, handle, iter) tuples :param identical: identify if index2hndllist and fullhndllist are the same list, so only one is kept in memory. :type identical: bool """ + self.stamp += 1 self._index2hndl = index2hndllist self._hndl2index = {} self._identical = identical @@ -215,9 +225,21 @@ class FlatNodeMap(object): self._fullhndl = self._index2hndl self._identical = True - def get_path(self, handle): + def get_path(self, iter): """ - Return the path from the passed handle. + Return the path from the passed iter. + + :param handle: the key of the object for which the path in the treeview + is needed + :param type: an object handle + :Returns: the path, or None if handle does not link to a path + """ + handle = iter.user_data + return self.get_path_from_handle(handle) + + def get_path_from_handle(self, handle): + """ + Return the path from the passed handle :param handle: the key of the object for which the path in the treeview is needed @@ -225,7 +247,10 @@ class FlatNodeMap(object): :Returns: the path, or None if handle does not link to a path """ index = self._hndl2index.get(handle) - return None if index is None else self.real_path(index) + if index is None: + return None + + return Gtk.TreePath((self.real_path(index),)) def get_sortkey(self, handle): """ @@ -239,6 +264,30 @@ class FlatNodeMap(object): index = self._hndl2index.get(handle) return None if index is None else self._index2hndl[index][0] + def new_iter(self, handle): + """ + Return a new iter containing the handle + """ + iter = Gtk.TreeIter() + iter.stamp = self.stamp + iter.user_data = handle + return iter + + def get_iter(self, path): + """ + Return an iter from the path. The path is assumed to be an integer. + This is accomplished by indexing into the index2hndl + iters are always created afresh + + Will raise IndexError if the maps are not filled yet, or if it is empty. + Caller should take care of this if it allows calling with invalid path + + :param path: path as it appears in the treeview + :type path: integer + """ + iter = self.new_iter(self._index2hndl[self.real_index(path)][1]) + return iter + def get_handle(self, path): """ Return the handle from the path. The path is assumed to be an integer. @@ -251,40 +300,47 @@ class FlatNodeMap(object): :type path: integer """ return self._index2hndl[self.real_index(path)][1] - - def find_next_handle(self, handle): + + def find_next_handle(self, iter): """ Finds the next handle based off the passed handle. This is accomplished - by finding the index associated with the handle, adding or substracting + by finding the index associated with the iter, adding or substracting one to find the next index, then finding the handle associated with that. + False is returned if no next handle + True, handle tuple otherwise :param handle: the key of the object for which the next handle shown in the treeview is needed :param type: an object handle """ + handle = iter.user_data + if handle is None: + #Nothing on this level + return False + index = self._hndl2index.get(handle) if self._reverse : index -= 1 if index < 0: # -1 does not raise IndexError, as -1 is last element. Catch. - return None + return False else: index += 1 try: - return self._index2hndl[index][1] + return True, self._index2hndl[index][1] except IndexError: - return None + return False - def get_first_handle(self): + def get_first_iter(self): """ Return the first handle that must be shown (corresponding to path 0) Will raise IndexError if the maps are not filled yet, or if it is empty. Caller should take care of this if it allows calling with invalid path """ - return self._index2hndl[self.real_index(0)][1] + return self.get_iter(0) def __len__(self): """ @@ -376,20 +432,21 @@ class FlatNodeMap(object): # FlatBaseModel # #------------------------------------------------------------------------- -class FlatBaseModel(gtk.GenericTreeModel): +class FlatBaseModel(GObject.Object, Gtk.TreeModel): """ The base class for all flat treeview models. It keeps a FlatNodeMap, and obtains data from database as needed """ - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, tooltip_column=None, search=None, skip=set(), sort_map=None): cput = time.clock() - gtk.GenericTreeModel.__init__(self) + GObject.GObject.__init__(self) + #inheriting classes must set self.map to obtain the data self.prev_handle = None self.prev_data = None - self.set_property("leak_references", False) + #self.set_property("leak_references", False) self.db = db #normally sort on first column, so scol=0 if sort_map: @@ -408,7 +465,7 @@ class FlatBaseModel(gtk.GenericTreeModel): self.node_map = FlatNodeMap() self.set_search(search) - self._reverse = (order == gtk.SORT_DESCENDING) + self._reverse = (order == Gtk.SortType.DESCENDING) self._tooltip_column = tooltip_column self.rebuild_data() @@ -510,7 +567,8 @@ class FlatBaseModel(gtk.GenericTreeModel): """ # use cursor as a context manager with self.gen_cursor() as cursor: - #loop over database and store the sort field, and the handle + #loop over database and store the sort field, and the handle, and + #allow for a third iter return sorted((map(conv_unicode_tosrtkey_ongtk, self.sort_func(data)), key) for key, data in cursor) @@ -578,7 +636,7 @@ class FlatBaseModel(gtk.GenericTreeModel): Add a row. This is called after object with handle is created. Row is only added if search/filter data is such that it must be shown """ - if self.node_map.get_path(handle) is not None: + if self.node_map.get_path_from_handle(handle) is not None: return # row is already displayed data = self.map(handle) insert_val = (map(conv_unicode_tosrtkey_ongtk, self.sort_func(data)), @@ -598,7 +656,7 @@ class FlatBaseModel(gtk.GenericTreeModel): """ Delete a row, called after the object with handle is deleted """ - if self.node_map.get_path(handle) is None: + if self.node_map.get_path_from_handle(handle) is None: return # row is not currently displayed self.clear_cache(handle) delete_val = (self.node_map.get_sortkey(handle), handle) @@ -611,7 +669,7 @@ class FlatBaseModel(gtk.GenericTreeModel): """ Update a row, called after the object with handle is changed """ - if self.node_map.get_path(handle) is None: + if self.node_map.get_path_from_handle(handle) is None: return # row is not currently displayed self.clear_cache(handle) oldsortkey = self.node_map.get_sortkey(handle) @@ -624,7 +682,7 @@ class FlatBaseModel(gtk.GenericTreeModel): self.add_row_by_handle(handle) else: #the row is visible in the view, is changed, but the order is fixed - path = self.node_map.get_path(handle) + path = self.node_map.get_path_from_handle(handle) node = self.get_iter(path) self.row_changed(path, node) @@ -633,104 +691,139 @@ class FlatBaseModel(gtk.GenericTreeModel): Obtain from a handle, a path. Part of common api with flat/treebasemodel """ - return self.on_get_path(handle) + return self.on_get_path_from_handle(handle) - def on_get_flags(self): + def do_get_flags(self): """ Returns the GtkTreeModelFlags for this particular type of model - See gtk.TreeModel + See Gtk.TreeModel """ - return gtk.TREE_MODEL_LIST_ONLY | gtk.TREE_MODEL_ITERS_PERSIST + #print 'do_get_flags' + return Gtk.TreeModelFlags.LIST_ONLY #| Gtk.TreeModelFlags.ITERS_PERSIST - def on_get_n_columns(self): + def do_get_n_columns(self): """ Return the number of columns. Must be implemented in the child objects - See gtk.TreeModel + See Gtk.TreeModel """ + #print 'do_get_n_col' raise NotImplementedError - def on_get_path(self, handle): + def do_get_path(self, iter): """ Return the tree path (a tuple of indices at the various levels) for a particular iter. We use handles for unique key iters - See gtk.TreeModel + See Gtk.TreeModel """ - return self.node_map.get_path(handle) + #print 'do_get_path', iter + return self.node_map.get_path(iter) - def on_get_column_type(self, index): + def do_get_column_type(self, index): """ - See gtk.TreeModel + See Gtk.TreeModel """ + #print 'do_get_col_type' if index == self._tooltip_column: return object return str - def on_get_iter(self, path): - """ - See gtk.TreeModel - """ - try: - return self.node_map.get_handle(path[0]) - except IndexError: - return None + def do_get_iter_first(self): + #print 'get iter first' + raise NotImplementedError - def on_get_value(self, handle, col): + def do_get_iter(self, path): """ - See gtk.TreeModel. + See Gtk.TreeModel + """ + #print 'do_get_iter', path + for p in path: + break + try: + return True, self.node_map.get_iter(p) + except IndexError: + return False, Gtk.TreeIter() + + def do_get_value(self, iter, col): + """ + See Gtk.TreeModel. col is the model column that is needed, not the visible column! """ - try: - if handle != self.prev_handle: - self.prev_data = self.map(str(handle)) - self.prev_handle = handle - return self.fmap[col](self.prev_data) - except: - return None + #print 'do_get_val', iter, iter.user_data, col, + handle = iter.user_data + if handle != self.prev_handle: + self.prev_data = self.map(str(handle)) + self.prev_handle = handle + val = self.fmap[col](self.prev_data) + #print 'val is', val, type(val) + if col == self._tooltip_column: + return val + else: + return str(val) - def on_iter_next(self, handle): - """ - Returns the next node at this level of the tree - See gtk.TreeModel - """ - return self.node_map.find_next_handle(handle) + def do_iter_previous(self, iter): + #print 'do_iter_previous' + raise NotImplementedError - def on_iter_children(self, handle): + def do_iter_next(self, iter): + """ + Sets iter to the next node at this level of the tree + See Gtk.TreeModel + """ + #print 'do_iter_next', iter, iter.user_data + handle = self.node_map.find_next_handle(iter) + if handle: + iter.user_data = handle[1] + return True + else: + return False + + def do_iter_children(self, iter): """ Return the first child of the node - See gtk.TreeModel + See Gtk.TreeModel """ + #print 'do_iter_children' + print 'ERROR: iter children, should not be called in flat base!!' if handle is None and len(self.node_map): return self.node_map.get_first_handle() return None - def on_iter_has_child(self, handle): + def do_iter_has_child(self, iter): """ Returns true if this node has children - See gtk.TreeModel + See Gtk.TreeModel """ + #print 'do_iter_has_child' + print 'ERROR: iter has_child', iter, 'should not be called in flat base' + return False if handle is None: return len(self.node_map) > 0 return False - def on_iter_n_children(self, handle): + def do_iter_n_children(self, iter): """ - See gtk.TreeModel + See Gtk.TreeModel """ + #print 'do_iter_n_children' + print 'ERROR: iter_n_children', iter, 'should not be called in flat base' + return 0 if handle is None: return len(self.node_map) return 0 - def on_iter_nth_child(self, handle, nth): + def do_iter_nth_child(self, iter, nth): """ - See gtk.TreeModel + See Gtk.TreeModel """ - if handle is None: - return self.node_map.get_handle(nth) - return None + #print 'do_iter_nth_child', iter, nth + if iter == None: + return True, self.node_map.get_iter(nth) + return False - def on_iter_parent(self, handle): + def do_iter_parent(self, iter): """ Returns the parent of this node - See gtk.TreeModel + See Gtk.TreeModel """ - return None + #print 'do_iter_parent' + return False diff --git a/src/gui/views/treemodels/mediamodel.py b/src/gui/views/treemodels/mediamodel.py index 56d84835e..a1c00e035 100644 --- a/src/gui/views/treemodels/mediamodel.py +++ b/src/gui/views/treemodels/mediamodel.py @@ -35,7 +35,7 @@ import locale # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -54,7 +54,7 @@ from gui.views.treemodels.flatbasemodel import FlatBaseModel #------------------------------------------------------------------------- class MediaModel(FlatBaseModel): - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): self.gen_cursor = db.get_media_cursor self.map = db.get_raw_object_data @@ -104,7 +104,7 @@ class MediaModel(FlatBaseModel): """ return 8 - def on_get_n_columns(self): + def do_get_n_columns(self): return len(self.fmap)+1 def column_description(self,data): @@ -166,7 +166,7 @@ class MediaModel(FlatBaseModel): """ Return the tag color. """ - tag_color = None + tag_color = "#000000000000" tag_priority = None for handle in data[10]: tag = self.db.get_tag_from_handle(handle) diff --git a/src/gui/views/treemodels/notemodel.py b/src/gui/views/treemodels/notemodel.py index 8575d3138..7212eee1f 100644 --- a/src/gui/views/treemodels/notemodel.py +++ b/src/gui/views/treemodels/notemodel.py @@ -34,7 +34,7 @@ import locale # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -53,7 +53,7 @@ from gen.lib import (Note, NoteType, StyledText) class NoteModel(FlatBaseModel): """ """ - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): """Setup initial values for instance variables.""" self.gen_cursor = db.get_note_cursor @@ -96,7 +96,7 @@ class NoteModel(FlatBaseModel): """ return 6 - def on_get_n_columns(self): + def do_get_n_columns(self): """Return the column number of the Note tab.""" return len(self.fmap) + 1 @@ -141,7 +141,7 @@ class NoteModel(FlatBaseModel): """ Return the tag color. """ - tag_color = None + tag_color = "#000000000000" tag_priority = None for handle in data[Note.POS_TAGS]: tag = self.db.get_tag_from_handle(handle) diff --git a/src/gui/views/treemodels/peoplemodel.py b/src/gui/views/treemodels/peoplemodel.py index 4bbd685bd..753b8b787 100644 --- a/src/gui/views/treemodels/peoplemodel.py +++ b/src/gui/views/treemodels/peoplemodel.py @@ -41,7 +41,7 @@ import locale # GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -187,7 +187,7 @@ class PeopleBaseModel(object): self.lru_bdate.clear() self.lru_ddate.clear() - def on_get_n_columns(self): + def do_get_n_columns(self): """ Return the number of columns in the model """ return len(self.fmap)+1 @@ -439,7 +439,7 @@ class PeopleBaseModel(object): """ Return the tag color. """ - tag_color = None + tag_color = "#000000000000" tag_priority = None for handle in data[COLUMN_TAGS]: tag = self.db.get_tag_from_handle(handle) @@ -460,7 +460,7 @@ class PersonListModel(PeopleBaseModel, FlatBaseModel): """ Listed people model. """ - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): PeopleBaseModel.__init__(self, db) FlatBaseModel.__init__(self, db, search=search, skip=skip, @@ -482,7 +482,7 @@ class PersonTreeModel(PeopleBaseModel, TreeBaseModel): """ Hierarchical people model. """ - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): PeopleBaseModel.__init__(self, db) diff --git a/src/gui/views/treemodels/placemodel.py b/src/gui/views/treemodels/placemodel.py index 04e06c702..4ec05021a 100644 --- a/src/gui/views/treemodels/placemodel.py +++ b/src/gui/views/treemodels/placemodel.py @@ -39,7 +39,7 @@ _LOG = logging.getLogger(".gui.views.treemodels.placemodel") # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -126,7 +126,7 @@ class PlaceBaseModel(object): self.fmap = None self.smap = None - def on_get_n_columns(self): + def do_get_n_columns(self): return len(self.fmap)+1 def column_handle(self, data): @@ -236,7 +236,7 @@ class PlaceListModel(PlaceBaseModel, FlatBaseModel): """ Flat place model. (Original code in PlaceBaseModel). """ - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): PlaceBaseModel.__init__(self, db) @@ -262,7 +262,7 @@ class PlaceTreeModel(PlaceBaseModel, TreeBaseModel): """ Hierarchical place model. """ - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): PlaceBaseModel.__init__(self, db) diff --git a/src/gui/views/treemodels/repomodel.py b/src/gui/views/treemodels/repomodel.py index 70c30f694..612a93567 100644 --- a/src/gui/views/treemodels/repomodel.py +++ b/src/gui/views/treemodels/repomodel.py @@ -32,7 +32,7 @@ log = logging.getLogger(".") # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -50,7 +50,7 @@ from gui.views.treemodels.flatbasemodel import FlatBaseModel #------------------------------------------------------------------------- class RepositoryModel(FlatBaseModel): - def __init__(self, db, scol=0, order=gtk.SORT_ASCENDING, search=None, + def __init__(self, db, scol=0, order=Gtk.SortType.ASCENDING, search=None, skip=set(), sort_map=None): self.gen_cursor = db.get_repository_cursor self.get_handles = db.get_repository_handles @@ -105,7 +105,7 @@ class RepositoryModel(FlatBaseModel): self.smap = None FlatBaseModel.destroy(self) - def on_get_n_columns(self): + def do_get_n_columns(self): return len(self.fmap)+1 def column_handle(self,data): diff --git a/src/gui/views/treemodels/sourcemodel.py b/src/gui/views/treemodels/sourcemodel.py index ca667a679..94ac915f0 100644 --- a/src/gui/views/treemodels/sourcemodel.py +++ b/src/gui/views/treemodels/sourcemodel.py @@ -32,7 +32,7 @@ log = logging.getLogger(".") # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -49,7 +49,7 @@ from gui.views.treemodels.flatbasemodel import FlatBaseModel #------------------------------------------------------------------------- class SourceModel(FlatBaseModel): - def __init__(self,db,scol=0, order=gtk.SORT_ASCENDING,search=None, + def __init__(self,db,scol=0, order=Gtk.SortType.ASCENDING,search=None, skip=set(), sort_map=None): self.map = db.get_raw_source_data self.gen_cursor = db.get_source_cursor @@ -85,7 +85,7 @@ class SourceModel(FlatBaseModel): self.smap = None FlatBaseModel.destroy(self) - def on_get_n_columns(self): + def do_get_n_columns(self): return len(self.fmap)+1 def column_title(self,data): diff --git a/src/gui/views/treemodels/treebasemodel.py b/src/gui/views/treemodels/treebasemodel.py index 77bbce639..b2f5d381c 100644 --- a/src/gui/views/treemodels/treebasemodel.py +++ b/src/gui/views/treemodels/treebasemodel.py @@ -47,7 +47,8 @@ _LOG = logging.getLogger(".gui.treebasemodel") # GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -230,7 +231,7 @@ class NodeMap(object): # TreeBaseModel # #------------------------------------------------------------------------- -class TreeBaseModel(gtk.GenericTreeModel): +class TreeBaseModel(GObject.Object, Gtk.TreeModel): """ The base class for all hierarchical treeview models. The model defines the mapping between a unique node and a path. Paths are defined by a tuple. @@ -279,17 +280,19 @@ class TreeBaseModel(gtk.GenericTreeModel): def __init__(self, db, tooltip_column, search=None, skip=set(), - scol=0, order=gtk.SORT_ASCENDING, sort_map=None, + scol=0, order=Gtk.SortType.ASCENDING, sort_map=None, nrgroups = 1, group_can_have_handle = False, has_secondary=False): + #TODO GTK3, first get flatbasemodel working ! + raise NotImplementedError cput = time.clock() - gtk.GenericTreeModel.__init__(self) + GObject.GObject.__init__(self) #two unused attributes pesent to correspond to flatbasemodel self.prev_handle = None self.prev_data = None - self.__reverse = (order == gtk.SORT_DESCENDING) + self.__reverse = (order == Gtk.SortType.DESCENDING) self.scol = scol self.nrgroups = nrgroups self.group_can_have_handle = group_can_have_handle @@ -801,24 +804,24 @@ class TreeBaseModel(gtk.GenericTreeModel): """ return self.on_get_path(self.get_node(handle)) - # The following implement the public interface of gtk.GenericTreeModel + # The following implement the public interface of Gtk.GenericTreeModel def on_get_flags(self): """ - See gtk.GenericTreeModel + See Gtk.GenericTreeModel """ - return gtk.TREE_MODEL_ITERS_PERSIST + return Gtk.TreeModelFlags.ITERS_PERSIST def on_get_n_columns(self): """ Return the number of columns. Must be implemented in the child objects - See gtk.GenericTreeModel + See Gtk.GenericTreeModel """ raise NotImplementedError def on_get_column_type(self, index): """ - See gtk.GenericTreeModel + See Gtk.GenericTreeModel """ if index == self._tooltip_column: return object @@ -826,7 +829,7 @@ class TreeBaseModel(gtk.GenericTreeModel): def on_get_value(self, nodeid, col): """ - See gtk.GenericTreeModel + See Gtk.GenericTreeModel """ #print 'get_value', nodeid, col nodeid = id(nodeid) diff --git a/src/gui/widgets/basicentry.py b/src/gui/widgets/basicentry.py index 7d5119ca5..41f579821 100644 --- a/src/gui/widgets/basicentry.py +++ b/src/gui/widgets/basicentry.py @@ -35,16 +35,17 @@ _LOG = logging.getLogger(".widgets.basicentry") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # # BasicEntry class # #------------------------------------------------------------------------- -class BasicEntry(gtk.Entry): +class BasicEntry(Gtk.Entry): def __init__(self): - gtk.Entry.__init__(self) + GObject.GObject.__init__(self) self.set_width_chars(5) self.show() diff --git a/src/gui/widgets/buttons.py b/src/gui/widgets/buttons.py index 4bcf48d72..87942579e 100644 --- a/src/gui/widgets/buttons.py +++ b/src/gui/widgets/buttons.py @@ -37,7 +37,8 @@ _LOG = logging.getLogger(".widgets.buttons") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -46,9 +47,9 @@ import gtk #------------------------------------------------------------------------- # STOCK_INFO was added only in Gtk 2.8 try: - INFO_ICON = gtk.STOCK_INFO + INFO_ICON = Gtk.STOCK_INFO except AttributeError: - INFO_ICON = gtk.STOCK_DIALOG_INFO + INFO_ICON = Gtk.STOCK_DIALOG_INFO #------------------------------------------------------------------------- @@ -56,16 +57,16 @@ except AttributeError: # IconButton class # #------------------------------------------------------------------------- -class IconButton(gtk.Button): +class IconButton(Gtk.Button): - def __init__(self, func, handle, icon=gtk.STOCK_EDIT, - size=gtk.ICON_SIZE_MENU): - gtk.Button.__init__(self) - image = gtk.Image() + def __init__(self, func, handle, icon=Gtk.STOCK_EDIT, + size=Gtk.IconSize.MENU): + GObject.GObject.__init__(self) + image = Gtk.Image() image.set_from_stock(icon, size) image.show() self.add(image) - self.set_relief(gtk.RELIEF_NONE) + self.set_relief(Gtk.ReliefStyle.NONE) self.show() if func: @@ -76,23 +77,23 @@ class IconButton(gtk.Button): ## """ ## Unset all elements that can prevent garbage collection ## """ -## gtk.Button.destroy(self) +## Gtk.Button.destroy(self) #------------------------------------------------------------------------- # # WarnButton class # #------------------------------------------------------------------------- -class WarnButton(gtk.Button): +class WarnButton(Gtk.Button): def __init__(self): - gtk.Button.__init__(self) + GObject.GObject.__init__(self) - image = gtk.Image() - image.set_from_stock(INFO_ICON, gtk.ICON_SIZE_MENU) + image = Gtk.Image() + image.set_from_stock(INFO_ICON, Gtk.IconSize.MENU) image.show() self.add(image) - self.set_relief(gtk.RELIEF_NONE) + self.set_relief(Gtk.ReliefStyle.NONE) self.show() self.func = None self.hide() @@ -102,14 +103,14 @@ class WarnButton(gtk.Button): ## Unset all elements that can prevent garbage collection ## """ ## self.func = None -## gtk.Button.destroy(self) +## Gtk.Button.destroy(self) def on_clicked(self, func): self.connect('button-press-event', self._button_press) self.func = func def _button_press(self, obj, event): - if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 1: self.func(obj) #------------------------------------------------------------------------- @@ -117,12 +118,12 @@ class WarnButton(gtk.Button): # SimpleButton class # #------------------------------------------------------------------------- -class SimpleButton(gtk.Button): +class SimpleButton(Gtk.Button): def __init__(self, image, func): - gtk.Button.__init__(self) - self.set_relief(gtk.RELIEF_NONE) - self.add(gtk.image_new_from_stock(image, gtk.ICON_SIZE_BUTTON)) + GObject.GObject.__init__(self) + self.set_relief(Gtk.ReliefStyle.NONE) + self.add(Gtk.Image.new_from_stock(image, Gtk.IconSize.BUTTON)) self.connect('clicked', func) self.show() @@ -130,7 +131,7 @@ class SimpleButton(gtk.Button): ## """ ## Unset all elements that can prevent garbage collection ## """ -## gtk.Button.destroy(self) +## Gtk.Button.destroy(self) #------------------------------------------------------------------------- # @@ -163,18 +164,18 @@ class PrivacyButton(object): return self.button.get_active() def _on_toggle(self, obj): - child = obj.child + child = obj.get_child() if child: obj.remove(child) - image = gtk.Image() + image = Gtk.Image() if obj.get_active(): -# image.set_from_icon_name('stock_lock', gtk.ICON_SIZE_MENU) - image.set_from_stock('gramps-lock', gtk.ICON_SIZE_MENU) +# image.set_from_icon_name('stock_lock', Gtk.IconSize.MENU) + image.set_from_stock('gramps-lock', Gtk.IconSize.MENU) obj.set_tooltip_text(_('Record is private')) self.obj.set_privacy(True) else: -# image.set_from_icon_name('stock_lock-open', gtk.ICON_SIZE_MENU) - image.set_from_stock('gramps-unlock', gtk.ICON_SIZE_MENU) +# image.set_from_icon_name('stock_lock-open', Gtk.IconSize.MENU) + image.set_from_stock('gramps-unlock', Gtk.IconSize.MENU) obj.set_tooltip_text(_('Record is public')) self.obj.set_privacy(False) image.show() diff --git a/src/gui/widgets/expandcollapsearrow.py b/src/gui/widgets/expandcollapsearrow.py index ca20923b3..0f9838ed7 100644 --- a/src/gui/widgets/expandcollapsearrow.py +++ b/src/gui/widgets/expandcollapsearrow.py @@ -37,7 +37,9 @@ _LOG = logging.getLogger(".widgets.expandcollapsearrow") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gtk +from gi.repository import Gdk from gen.constfunc import has_display #------------------------------------------------------------------------- @@ -46,7 +48,7 @@ from gen.constfunc import has_display # #------------------------------------------------------------------------- if has_display(): - HAND_CURSOR = gtk.gdk.Cursor(gtk.gdk.HAND2) + HAND_CURSOR = Gdk.Cursor.new(Gdk.CursorType.HAND2) #------------------------------------------------------------------------- # @@ -54,14 +56,14 @@ if has_display(): # #------------------------------------------------------------------------- def realize_cb(widget): - widget.window.set_cursor(HAND_CURSOR) + widget.get_root_window().set_cursor(HAND_CURSOR) #------------------------------------------------------------------------- # # ExpandCollapseArrow class # #------------------------------------------------------------------------- -class ExpandCollapseArrow(gtk.EventBox): +class ExpandCollapseArrow(Gtk.EventBox): """ Arrow to be used for expand/collapse of sections. Note: shadow does not work, we indicate action with realize_cb @@ -77,12 +79,12 @@ class ExpandCollapseArrow(gtk.EventBox): @type onbuttonpress: callback @param pair: user param for onbuttonpress function """ - gtk.EventBox.__init__(self) + GObject.GObject.__init__(self) if collapsed : - self.arrow = gtk.Arrow(gtk.ARROW_RIGHT, gtk.SHADOW_OUT) + self.arrow = Gtk.Arrow(Gtk.ArrowType.RIGHT, Gtk.ShadowType.OUT) self.set_tooltip_text(_("Expand this section")) else: - self.arrow = gtk.Arrow(gtk.ARROW_DOWN, gtk.SHADOW_OUT) + self.arrow = Gtk.Arrow(Gtk.ArrowType.DOWN, Gtk.ShadowType.OUT) self.set_tooltip_text(_("Collapse this section")) self.add(self.arrow) self.connect('button-press-event', onbuttonpress, pair) diff --git a/src/gui/widgets/grampletpane.py b/src/gui/widgets/grampletpane.py index 6528476cf..65a8838cc 100644 --- a/src/gui/widgets/grampletpane.py +++ b/src/gui/widgets/grampletpane.py @@ -30,8 +30,10 @@ GrampletView interface. # Python modules # #------------------------------------------------------------------------- -import gtk -import pango +from gi.repository import GObject +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import Pango import time import os from gen.ggettext import gettext as _ @@ -178,17 +180,17 @@ def logical_true(value): """ return value in ["True", True, 1, "1"] -class LinkTag(gtk.TextTag): +class LinkTag(Gtk.TextTag): """ Class for keeping track of link data. """ lid = 0 def __init__(self, buffer): LinkTag.lid += 1 - gtk.TextTag.__init__(self, str(LinkTag.lid)) + GObject.GObject.__init__(self, str(LinkTag.lid)) tag_table = buffer.get_tag_table() self.set_property('foreground', "blue") - #self.set_property('underline', pango.UNDERLINE_SINGLE) + #self.set_property('underline', Pango.Underline.SINGLE) try: tag_table.add(self) except ValueError: # tag is already in tag table @@ -211,13 +213,13 @@ class GrampletWindow(ManagedWindow): self.gramplet.set_state("detached") ManagedWindow.__init__(self, gramplet.uistate, [], self.title) - self.set_window(gtk.Dialog("", gramplet.uistate.window, - gtk.DIALOG_DESTROY_WITH_PARENT, - (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)), + self.set_window(Gtk.Dialog("", gramplet.uistate.window, + Gtk.DialogFlags.DESTROY_WITH_PARENT, + (Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)), None, self.title) self.window.set_size_request(gramplet.detached_width, gramplet.detached_height) - self.window.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP) + self.window.add_button(Gtk.STOCK_HELP, Gtk.ResponseType.HELP) # add gramplet: if self.gramplet.pui: self.gramplet.pui.active = True @@ -238,9 +240,9 @@ class GrampletWindow(ManagedWindow): """ Callback for taking care of button clicks. """ - if response in [gtk.RESPONSE_CLOSE, gtk.STOCK_CLOSE]: + if response in [Gtk.ResponseType.CLOSE, Gtk.STOCK_CLOSE]: self.close() - elif response == gtk.RESPONSE_HELP: + elif response == Gtk.ResponseType.HELP: # translated name: if self.gramplet.help_url: if self.gramplet.help_url.startswith("http://"): @@ -290,7 +292,7 @@ class GrampletWindow(ManagedWindow): for gframe in stack: gramplet = pane.frame_map[str(gframe)] expand = gramplet.gstate == "maximized" and gramplet.expand - pane.columns[col].pack_start(gframe, expand=expand) + pane.columns[col].pack_start(gframe, expand, True, 0) # Now make sure they all have the correct expand: for gframe in pane.columns[col]: gramplet = pane.frame_map[str(gframe)] @@ -343,8 +345,8 @@ class GuiGramplet(object): self.pui = None # user code self.tooltips_text = None - self.link_cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) - self.standard_cursor = gtk.gdk.Cursor(gtk.gdk.XTERM) + self.link_cursor = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) + self.standard_cursor = Gdk.Cursor.new(Gdk.CursorType.XTERM) self.scrolledwindow = None self.textview = None @@ -368,13 +370,13 @@ class GuiGramplet(object): Handle formatting shortcuts. """ - if ((gtk.gdk.keyval_name(event.keyval) == 'Z') and - (event.state & gtk.gdk.CONTROL_MASK) and - (event.state & gtk.gdk.SHIFT_MASK)): + if ((Gdk.keyval_name(event.keyval) == 'Z') and + (event.get_state() & Gdk.ModifierType.CONTROL_MASK) and + (event.get_state() & Gdk.ModifierType.SHIFT_MASK)): self.redo() return True - elif ((gtk.gdk.keyval_name(event.keyval) == 'z') and - (event.state & gtk.gdk.CONTROL_MASK)): + elif ((Gdk.keyval_name(event.keyval) == 'z') and + (event.get_state() & Gdk.ModifierType.CONTROL_MASK)): self.undo() return True @@ -497,10 +499,10 @@ class GuiGramplet(object): if self.use_markup == value: return self.use_markup = value if value: - self.buffer.create_tag("bold", weight=pango.WEIGHT_HEAVY) - self.buffer.create_tag("italic", style=pango.STYLE_ITALIC) + self.buffer.create_tag("bold", weight=Pango.Weight.HEAVY) + self.buffer.create_tag("italic", style=Pango.Style.ITALIC) self.buffer.create_tag("underline", - underline=pango.UNDERLINE_SINGLE) + underline=Pango.Underline.SINGLE) self.buffer.create_tag("fixed", font="monospace") else: tag_table = self.buffer.get_tag_table() @@ -526,20 +528,20 @@ class GuiGramplet(object): self.pui.build_options() # END WORKAROUND if len(self.pui.option_order) == 0: return - frame = gtk.Frame() - topbox = gtk.VBox(False) - hbox = gtk.HBox(False, 5) - labels = gtk.VBox(True) - options = gtk.VBox(True) - hbox.pack_start(labels, False) + frame = Gtk.Frame() + topbox = Gtk.VBox(False) + hbox = Gtk.HBox(False, 5) + labels = Gtk.VBox(True) + options = Gtk.VBox(True) + hbox.pack_start(labels, False, True, 0) hbox.pack_start(options, True) - topbox.pack_start(hbox, False, False) + topbox.pack_start(hbox, False, False, 0) for item in self.pui.option_order: - label = gtk.Label(item + ":") + label = Gtk.Label(label=item + ":") label.set_alignment(1.0, 0.5) - labels.pack_start(label) - options.pack_start(self.pui.option_dict[item][0]) # widget - save_button = gtk.Button(stock=gtk.STOCK_SAVE) + labels.pack_start(label, True, True, 0) + options.pack_start(self.pui.option_dict[item][0], True, True, 0) # widget + save_button = Gtk.Button(stock=Gtk.STOCK_SAVE) topbox.pack_end(save_button, False, False) save_button.connect('clicked', self.pui.save_update_options) frame.add(topbox) @@ -560,7 +562,7 @@ class GuiGramplet(object): buffer.apply_tag(link_data[0], start, end) def on_motion(self, view, event): - buffer_location = view.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, + buffer_location = view.window_to_buffer_coords(Gtk.TextWindowType.TEXT, int(event.x), int(event.y)) iter = view.get_iter_at_location(*buffer_location) @@ -568,12 +570,12 @@ class GuiGramplet(object): ttip = None for (tag, link_type, handle, tooltip) in self._tags: if iter.has_tag(tag): - tag.set_property('underline', pango.UNDERLINE_SINGLE) + tag.set_property('underline', Pango.Underline.SINGLE) cursor = self.link_cursor ttip = tooltip else: - tag.set_property('underline', pango.UNDERLINE_NONE) - view.get_window(gtk.TEXT_WINDOW_TEXT).set_cursor(cursor) + tag.set_property('underline', Pango.Underline.NONE) + view.get_window(Gtk.TextWindowType.TEXT).set_cursor(cursor) if ttip: self.scrolledwindow.set_tooltip_text(ttip) elif self.tooltips_text: @@ -582,7 +584,7 @@ class GuiGramplet(object): def on_button_press(self, view, event): # pylint: disable-msg=W0212 - buffer_location = view.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, + buffer_location = view.window_to_buffer_coords(Gtk.TextWindowType.TEXT, int(event.x), int(event.y)) iter = view.get_iter_at_location(*buffer_location) @@ -592,7 +594,7 @@ class GuiGramplet(object): person = self.dbstate.db.get_person_from_handle(handle) if person is not None: if event.button == 1: # left mouse - if event.type == gtk.gdk._2BUTTON_PRESS: # double + if event.type == Gdk.EventType._2BUTTON_PRESS: # double try: EditPerson(self.dbstate, self.uistate, @@ -600,7 +602,7 @@ class GuiGramplet(object): return True # handled event except WindowActiveError: pass - elif event.type == gtk.gdk.BUTTON_PRESS: # single + elif event.type == Gdk.EventType.BUTTON_PRESS: # single self.uistate.set_active(handle, 'Person') return True # handled event elif gui.utils.is_right_click(event): @@ -614,7 +616,7 @@ class GuiGramplet(object): pass elif link_type == 'Surname': if event.button == 1: # left mouse - if event.type == gtk.gdk._2BUTTON_PRESS: # double + if event.type == Gdk.EventType._2BUTTON_PRESS: # double run_quick_report_by_name(self.dbstate, self.uistate, 'samesurnames', @@ -622,7 +624,7 @@ class GuiGramplet(object): return True elif link_type == 'Given': if event.button == 1: # left mouse - if event.type == gtk.gdk._2BUTTON_PRESS: # double + if event.type == Gdk.EventType._2BUTTON_PRESS: # double run_quick_report_by_name(self.dbstate, self.uistate, 'samegivens_misc', @@ -630,7 +632,7 @@ class GuiGramplet(object): return True elif link_type == 'Filter': if event.button == 1: # left mouse - if event.type == gtk.gdk._2BUTTON_PRESS: # double + if event.type == Gdk.EventType._2BUTTON_PRESS: # double run_quick_report_by_name(self.dbstate, self.uistate, 'filterbyname', @@ -653,7 +655,7 @@ class GuiGramplet(object): family = self.dbstate.db.get_family_from_handle(handle) if family is not None: if event.button == 1: # left mouse - if event.type == gtk.gdk._2BUTTON_PRESS: # double + if event.type == Gdk.EventType._2BUTTON_PRESS: # double try: EditFamily(self.dbstate, self.uistate, @@ -661,7 +663,7 @@ class GuiGramplet(object): return True # handled event except WindowActiveError: pass - elif event.type == gtk.gdk.BUTTON_PRESS: # single + elif event.type == Gdk.EventType.BUTTON_PRESS: # single self.uistate.set_active(handle, 'Family') return True # handle event elif gui.utils.is_right_click(event): @@ -675,7 +677,7 @@ class GuiGramplet(object): pass elif link_type == 'PersonList': if event.button == 1: # left mouse - if event.type == gtk.gdk._2BUTTON_PRESS: # double + if event.type == Gdk.EventType._2BUTTON_PRESS: # double run_quick_report_by_name(self.dbstate, self.uistate, 'filterbyname', @@ -684,7 +686,7 @@ class GuiGramplet(object): return True elif link_type == 'Attribute': if event.button == 1: # left mouse - if event.type == gtk.gdk._2BUTTON_PRESS: # double + if event.type == Gdk.EventType._2BUTTON_PRESS: # double run_quick_report_by_name(self.dbstate, self.uistate, 'attribute_match', @@ -695,7 +697,7 @@ class GuiGramplet(object): return False # did not handle event def set_has_data(self, value): - if isinstance(self.pane, gtk.Notebook): + if isinstance(self.pane, Gtk.Notebook): if self.pane.get_tab_label(self): label = self.pane.get_tab_label(self) if value: @@ -710,7 +712,7 @@ class GridGramplet(GuiGramplet): """ TARGET_TYPE_FRAME = 80 LOCAL_DRAG_TYPE = 'GRAMPLET' - LOCAL_DRAG_TARGET = (LOCAL_DRAG_TYPE, 0, TARGET_TYPE_FRAME) + LOCAL_DRAG_TARGET = Gtk.TargetEntry.new(LOCAL_DRAG_TYPE, 0, TARGET_TYPE_FRAME) def __init__(self, pane, dbstate, uistate, title, **kwargs): """ Internal constructor for GUI portion of a gramplet. @@ -730,8 +732,8 @@ class GridGramplet(GuiGramplet): self.textview.connect("key-press-event", self.on_key_press_event) #self.buffer = self.textview.get_buffer() self.scrolledwindow = self.xml.get_object('gvscrolledwindow') - self.scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, - gtk.POLICY_AUTOMATIC) + self.scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, + Gtk.PolicyType.AUTOMATIC) self.vboxtop = self.xml.get_object('vboxtop') self.titlelabel = self.xml.get_object('gvtitle') self.titlelabel.get_children()[0].set_text("%s" % @@ -745,18 +747,18 @@ class GridGramplet(GuiGramplet): self.gvstate.connect('clicked', self.change_state) self.gvproperties = self.xml.get_object('gvproperties') self.gvproperties.connect('clicked', self.set_properties) - self.xml.get_object('gvcloseimage').set_from_stock(gtk.STOCK_CLOSE, - gtk.ICON_SIZE_MENU) - self.xml.get_object('gvstateimage').set_from_stock(gtk.STOCK_REMOVE, - gtk.ICON_SIZE_MENU) - self.xml.get_object('gvpropertiesimage').set_from_stock(gtk.STOCK_PROPERTIES, - gtk.ICON_SIZE_MENU) + self.xml.get_object('gvcloseimage').set_from_stock(Gtk.STOCK_CLOSE, + Gtk.IconSize.MENU) + self.xml.get_object('gvstateimage').set_from_stock(Gtk.STOCK_REMOVE, + Gtk.IconSize.MENU) + self.xml.get_object('gvpropertiesimage').set_from_stock(Gtk.STOCK_PROPERTIES, + Gtk.IconSize.MENU) # source: drag = self.gvproperties - drag.drag_source_set(gtk.gdk.BUTTON1_MASK, + drag.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, [GridGramplet.LOCAL_DRAG_TARGET], - gtk.gdk.ACTION_COPY) + Gdk.DragAction.COPY) # default tooltip msg = _("Drag Properties Button to move and click it for setup") @@ -770,7 +772,7 @@ class GridGramplet(GuiGramplet): parent = widget.get_parent() widget.hide() if self.titlelabel_entry is None: - self.titlelabel_entry = gtk.Entry() + self.titlelabel_entry = Gtk.Entry() parent = widget.get_parent() parent.pack_end(self.titlelabel_entry) self.titlelabel_entry.connect("focus-out-event", @@ -787,8 +789,8 @@ class GridGramplet(GuiGramplet): """ Edit the title, handle escape. """ - if event.type == gtk.gdk.KEY_PRESS: - if event.keyval == gtk.keysyms.Escape: + if event.type == Gdk.KEY_PRESS: + if event.keyval == Gdk.KEY_Escape: self.titlelabel.show() widget.hide() @@ -830,15 +832,15 @@ class GridGramplet(GuiGramplet): self.gstate = state if state == "minimized": self.scrolledwindow.hide() - self.xml.get_object('gvstateimage').set_from_stock(gtk.STOCK_ADD, - gtk.ICON_SIZE_MENU) + self.xml.get_object('gvstateimage').set_from_stock(Gtk.STOCK_ADD, + Gtk.IconSize.MENU) column = self.mainframe.get_parent() # column expand, fill, padding, pack = column.query_child_packing(self.mainframe) column.set_child_packing(self.mainframe, False, fill, padding, pack) else: self.scrolledwindow.show() - self.xml.get_object('gvstateimage').set_from_stock(gtk.STOCK_REMOVE, - gtk.ICON_SIZE_MENU) + self.xml.get_object('gvstateimage').set_from_stock(Gtk.STOCK_REMOVE, + Gtk.IconSize.MENU) column = self.mainframe.get_parent() # column expand, fill, padding, pack = column.query_child_packing(self.mainframe) column.set_child_packing(self.mainframe, @@ -934,11 +936,11 @@ class GridGramplet(GuiGramplet): self.titlelabel.get_children()[0].set_use_markup(True) return True -class GrampletPane(gtk.ScrolledWindow): +class GrampletPane(Gtk.ScrolledWindow): def __init__(self, configfile, pageview, dbstate, uistate, **kwargs): self._config = Configuration(self) self.track = [] - gtk.ScrolledWindow.__init__(self) + GObject.GObject.__init__(self) self.configfile = os.path.join(const.VERSION_DIR, "%s.ini" % configfile) # default for new user; may be overridden in config: self.column_count = kwargs.get("column_count", 2) @@ -957,14 +959,14 @@ class GrampletPane(gtk.ScrolledWindow): # build the GUI: msg = _("Right click to add gramplets") self.set_tooltip_text(msg) - self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - self.hbox = gtk.HBox(homogeneous=True) + self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + self.hbox = Gtk.HBox(homogeneous=True) # Set up drag and drop - self.drag_dest_set(gtk.DEST_DEFAULT_MOTION | - gtk.DEST_DEFAULT_HIGHLIGHT | - gtk.DEST_DEFAULT_DROP, - [('GRAMPLET', 0, 80)], - gtk.gdk.ACTION_COPY) + self.drag_dest_set(Gtk.DestDefaults.MOTION | + Gtk.DestDefaults.HIGHLIGHT | + Gtk.DestDefaults.DROP, + [Gtk.TargetEntry.new('GRAMPLET', 0, 80)], + Gdk.DragAction.COPY) self.connect('drag_drop', self.drop_widget) self.connect('button-press-event', self._button_press) @@ -972,8 +974,8 @@ class GrampletPane(gtk.ScrolledWindow): # Create the columns: self.columns = [] for i in range(self.column_count): - self.columns.append(gtk.VBox()) - self.hbox.pack_start(self.columns[-1], expand=True) + self.columns.append(Gtk.VBox()) + self.hbox.pack_start(self.columns[-1], True, True, 0) # Load the gramplets self.gramplet_map = {} # title->gramplet self.frame_map = {} # frame->gramplet @@ -1079,10 +1081,10 @@ class GrampletPane(gtk.ScrolledWindow): gramplet.gstate == "closed"): continue if gramplet.gstate == "minimized": - self.columns[pos].pack_start(gramplet.mainframe, expand=False) + self.columns[pos].pack_start(gramplet.mainframe, False, True, 0) else: self.columns[pos].pack_start(gramplet.mainframe, - expand=gramplet.expand) + gramplet.expand, True, 0) # set height on gramplet.scrolledwindow here: gramplet.scrolledwindow.set_size_request(-1, gramplet.height) # Can't minimize here, because GRAMPS calls show_all later: @@ -1256,13 +1258,13 @@ class GrampletPane(gtk.ScrolledWindow): maingramplet.row = current_row current_row += 1 expand = maingramplet.gstate == "maximized" and maingramplet.expand - self.columns[col].pack_start(mainframe, expand=expand) + self.columns[col].pack_start(mainframe, expand, True, 0) for gframe in stack: gramplet = self.frame_map[str(gframe)] gramplet.row = current_row current_row += 1 expand = gramplet.gstate == "maximized" and gramplet.expand - self.columns[col].pack_start(gframe, expand=expand) + self.columns[col].pack_start(gframe, expand, True, 0) return True def set_columns(self, num): @@ -1279,9 +1281,9 @@ class GrampletPane(gtk.ScrolledWindow): self.column_count = num self.columns = [] for i in range(self.column_count): - self.columns.append(gtk.VBox()) + self.columns.append(Gtk.VBox()) self.columns[-1].show() - self.hbox.pack_start(self.columns[-1], expand=True) + self.hbox.pack_start(self.columns[-1], True, True, 0) # place the gramplets back in the new columns self.place_gramplets(recolumn=True) self.show() @@ -1379,7 +1381,7 @@ class GrampletPane(gtk.ScrolledWindow): ag_menu = uiman.get_widget('/GrampletPopup/AddGramplet') if ag_menu: qr_menu = ag_menu.get_submenu() - qr_menu = gtk.Menu() + qr_menu = Gtk.Menu() names = [gplug.name for gplug in PLUGMAN.get_reg_gramplets() if gplug.navtypes == []] names.sort() @@ -1396,7 +1398,7 @@ class GrampletPane(gtk.ScrolledWindow): names.extend(opts["title"] for opts in self.closed_opts) names.sort() if len(names) > 0: - qr_menu = gtk.Menu() + qr_menu = Gtk.Menu() for name in names: gui.utils.add_menuitem(qr_menu, name, None, self.restore_gramplet) @@ -1458,7 +1460,7 @@ class GrampletPane(gtk.ScrolledWindow): """ Function that builds the widget in the configuration dialog """ - table = gtk.Table(3, 2) + table = Gtk.Table(3, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -1491,7 +1493,7 @@ class GrampletPane(gtk.ScrolledWindow): bool, gramplet.get_expand, gramplet.set_expand) def gramplet_panel(configdialog): configdialog.window.set_size_request(600, -1) - table = gtk.Table(3, 2) + table = Gtk.Table(3, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) diff --git a/src/gui/widgets/labels.py b/src/gui/widgets/labels.py index b1c9ade58..87bdf4a4a 100644 --- a/src/gui/widgets/labels.py +++ b/src/gui/widgets/labels.py @@ -39,8 +39,10 @@ _LOG = logging.getLogger(".widgets.labels") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -import pango +from gi.repository import GObject +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -55,7 +57,7 @@ from gen.constfunc import has_display, win # #------------------------------------------------------------------------- if has_display(): - HAND_CURSOR = gtk.gdk.Cursor(gtk.gdk.HAND2) + HAND_CURSOR = Gdk.Cursor.new(Gdk.CursorType.HAND2) #------------------------------------------------------------------------- # @@ -63,14 +65,14 @@ if has_display(): # #------------------------------------------------------------------------- def realize_cb(widget): - widget.window.set_cursor(HAND_CURSOR) + widget.get_root_window().set_cursor(HAND_CURSOR) #------------------------------------------------------------------------- # # LinkLabel class # #------------------------------------------------------------------------- -class LinkLabel(gtk.EventBox): +class LinkLabel(Gtk.EventBox): def __init__(self, label, func, handle, emph=False, theme="CLASSIC"): self.theme = theme @@ -100,7 +102,7 @@ class LinkLabel(gtk.EventBox): else: raise AttributeError("invalid theme: '%s'" % theme) - gtk.EventBox.__init__(self) + GObject.GObject.__init__(self) self.orig_text = cgi.escape(label[0]) self.gender = label[1] self.decoration = format @@ -113,11 +115,11 @@ class LinkLabel(gtk.EventBox): self.set_tooltip_text(msg) - self.label = gtk.Label(text) + self.label = Gtk.Label(label=text) self.label.set_use_markup(True) self.label.set_alignment(0, 0.5) - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.pack_start(self.label, False, False, 0) if label[1]: hbox.pack_start(GenderLabel(label[1]), False, False, 0) @@ -175,13 +177,13 @@ class LinkLabel(gtk.EventBox): # EditLabel class # #------------------------------------------------------------------------- -class EditLabel(gtk.HBox): +class EditLabel(Gtk.HBox): def __init__(self, text): - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) label = BasicLabel(text) - self.pack_start(label, False) - self.pack_start(gtk.image_new_from_stock(gtk.STOCK_EDIT, - gtk.ICON_SIZE_MENU), False) + self.pack_start(label, False, True, 0) + self.pack_start(Gtk.Image.new_from_stock(Gtk.STOCK_EDIT, + Gtk.IconSize.MENU), False) self.set_spacing(4) self.show_all() @@ -190,10 +192,10 @@ class EditLabel(gtk.HBox): # BasicLabel class # #------------------------------------------------------------------------- -class BasicLabel(gtk.Label): +class BasicLabel(Gtk.Label): - def __init__(self, text, ellipsize=pango.ELLIPSIZE_NONE): - gtk.Label.__init__(self, text) + def __init__(self, text, ellipsize=Pango.EllipsizeMode.NONE): + GObject.GObject.__init__(self, label=text) self.set_alignment(0, 0.5) self.set_ellipsize(ellipsize) self.show() @@ -203,13 +205,13 @@ class BasicLabel(gtk.Label): # GenderLabel class # #------------------------------------------------------------------------- -class GenderLabel(gtk.Label): +class GenderLabel(Gtk.Label): def __init__(self, text): - gtk.Label.__init__(self, text) + GObject.GObject.__init__(self, label=text) self.set_alignment(0, 0.5) if win(): - pangoFont = pango.FontDescription('Arial') + pangoFont = Pango.FontDescription('Arial') self.modify_font(pangoFont) self.show() @@ -218,10 +220,10 @@ class GenderLabel(gtk.Label): # MarkupLabel class # #------------------------------------------------------------------------- -class MarkupLabel(gtk.Label): +class MarkupLabel(Gtk.Label): def __init__(self, text, x_align=0, y_align=0.5): - gtk.Label.__init__(self, text) + GObject.GObject.__init__(self, label=text) self.set_alignment(x_align, y_align) self.set_use_markup(True) self.show_all() @@ -231,11 +233,11 @@ class MarkupLabel(gtk.Label): # DualMarkupLabel class # #------------------------------------------------------------------------- -class DualMarkupLabel(gtk.HBox): +class DualMarkupLabel(Gtk.HBox): def __init__(self, text, alt, x_align=0, y_align=0.5): - gtk.HBox.__init__(self) - label = gtk.Label(text) + GObject.GObject.__init__(self) + label = Gtk.Label(label=text) label.set_alignment(x_align, y_align) label.set_use_markup(True) diff --git a/src/gui/widgets/linkbox.py b/src/gui/widgets/linkbox.py index a6dab2bed..fdfcb7d64 100644 --- a/src/gui/widgets/linkbox.py +++ b/src/gui/widgets/linkbox.py @@ -35,19 +35,20 @@ _LOG = logging.getLogger(".widgets.linkbox") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # # LinkBox class # #------------------------------------------------------------------------- -class LinkBox(gtk.HBox): +class LinkBox(Gtk.HBox): def __init__(self, link, button): - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.set_spacing(6) - self.pack_start(link, False) + self.pack_start(link, False, True, 0) if button: - self.pack_start(button, False) + self.pack_start(button, False, True, 0) self.show() diff --git a/src/gui/widgets/menutoolbuttonaction.py b/src/gui/widgets/menutoolbuttonaction.py index e500aac02..f0668ec41 100644 --- a/src/gui/widgets/menutoolbuttonaction.py +++ b/src/gui/widgets/menutoolbuttonaction.py @@ -37,8 +37,8 @@ _LOG = logging.getLogger(".widgets.menutoolbuttonaction") # GTK modules # #------------------------------------------------------------------------- -import gobject -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -52,7 +52,7 @@ import gtk # MenuToolButtonAction class # #------------------------------------------------------------------------- -class MenuToolButtonAction(gtk.Action): +class MenuToolButtonAction(Gtk.Action): """MenuToolButton action class. (A MenuToolButtonAction with menu item doesn't make any sense, @@ -62,8 +62,8 @@ class MenuToolButtonAction(gtk.Action): __gtype_name__ = "MenuToolButtonAction" __gsignals__ = { - 'changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, #return value + 'changed': (GObject.SignalFlags.RUN_FIRST, + None, #return value ()), # arguments } @@ -76,9 +76,10 @@ class MenuToolButtonAction(gtk.Action): @type tooltip: str """ - gtk.Action.__init__(self, name, label, tooltip, None) - - self.set_tool_item_type(gtk.MenuToolButton) + GObject.GObject.__init__(self, name, label, tooltip, None) +##TODO GTK3: following is deprecated, must be replaced by +## Gtk.MenuToolButton.set_related_action(MenuToolButtonAction) in calling class? +## self.set_tool_item_type(Gtk.MenuToolButton) if callback: self.connect('activate', callback) self.arrowtooltip = arrowtooltip diff --git a/src/gui/widgets/monitoredwidgets.py b/src/gui/widgets/monitoredwidgets.py index 3549aff6f..db93d358c 100644 --- a/src/gui/widgets/monitoredwidgets.py +++ b/src/gui/widgets/monitoredwidgets.py @@ -41,9 +41,10 @@ import locale # GTK/Gnome modules # #------------------------------------------------------------------------- -import gobject -import gtk -import pango +from gi.repository import GObject +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -62,8 +63,8 @@ from gen.errors import ValidationError # #------------------------------------------------------------------------ -_RETURN = gtk.gdk.keyval_from_name("Return") -_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter") +_RETURN = Gdk.keyval_from_name("Return") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") #------------------------------------------------------------------------- # @@ -179,9 +180,9 @@ class MonitoredEntryIndicator(MonitoredEntry): self.indicatorshown = True self.indicator = indicator self.obj.set_text(indicator) - self.obj.modify_text(gtk.STATE_NORMAL, - gtk.gdk.color_parse('grey')) - self.obj.modify_font(pango.FontDescription('sans italic')) + self.obj.modify_text(Gtk.StateType.NORMAL, + Gdk.color_parse('grey')) + self.obj.modify_font(Pango.FontDescription('sans italic')) self.fockey = self.obj.connect('focus-in-event', self._obj_focus) @@ -196,8 +197,8 @@ class MonitoredEntryIndicator(MonitoredEntry): callback for when prefix obtains focus """ self.set_text('') - self.obj.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse('black')) - self.obj.modify_font(pango.FontDescription('normal')) + self.obj.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse('black')) + self.obj.modify_font(Pango.FontDescription('normal')) self.obj.disconnect(self.fockey) self.indicatorshown = False return False @@ -217,7 +218,7 @@ class MonitoredSpinButton(object): autolist=None, changed=None): """ @param obj: widget to be monitored - @type obj: gtk.SpinButton + @type obj: Gtk.SpinButton @param set_val: callback to be called when obj is changed @param get_val: callback to be called to retrieve value for obj @param read_only: If SpinButton is read only. @@ -280,7 +281,7 @@ class MonitoredSpinButton(object): Event handler to be called when the monitored widget is changed. @param obj: Widget that has been changed. - @type obj: gtk.SpinButton + @type obj: Gtk.SpinButton """ self.set_val(obj.get_value()) @@ -421,7 +422,7 @@ class MonitoredDataType(object): Constructor for the MonitoredDataType class. @param obj: Existing ComboBoxEntry widget to use. - @type obj: gtk.ComboBoxEntry + @type obj: Gtk.ComboBoxEntry @param set_val: The function that sets value of the type in the object @type set_val: method @param get_val: The function that gets value of the type in the object. @@ -525,7 +526,7 @@ class MonitoredMenu(object): def change_menu(self, mapping): self.data = {} - self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_INT) + self.model = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_INT) index = 0 for t, v in mapping: self.model.append(row=[t, v]) @@ -551,7 +552,7 @@ class MonitoredStrMenu(object): self.get_val = get_val self.obj = obj - self.model = gtk.ListStore(gobject.TYPE_STRING) + self.model = Gtk.ListStore(GObject.TYPE_STRING) if len(mapping) > 20: self.obj.set_wrap_width(3) @@ -610,10 +611,10 @@ class MonitoredDate(object): self.text_obj = field self.button_obj = button - image = gtk.Image() - image.set_from_stock('gramps-date-edit', gtk.ICON_SIZE_BUTTON) + image = Gtk.Image() + image.set_from_stock('gramps-date-edit', Gtk.IconSize.BUTTON) self.button_obj.set_image(image) - self.button_obj.set_relief(gtk.RELIEF_NORMAL) + self.button_obj.set_relief(Gtk.ReliefStyle.NORMAL) self.pixmap_obj = self.button_obj.get_child() self.text_obj.connect('validate', self.validate) @@ -701,7 +702,7 @@ class MonitoredComboSelectedEntry(object): self.__fill() self.objcombo.clear() self.objcombo.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.objcombo.pack_start(cell, True) self.objcombo.add_attribute(cell, 'text', 1) self.objcombo.set_active(self.active_index) @@ -727,7 +728,7 @@ class MonitoredComboSelectedEntry(object): """ Fill combo with data """ - self.store = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_INT, GObject.TYPE_STRING) keys = sorted(self.mapping.keys(), key=self.__by_value_key) for index, key in enumerate(keys): @@ -824,9 +825,9 @@ class MonitoredTagList(object): self.label = label self.label.set_alignment(0, 0.5) - self.label.set_ellipsize(pango.ELLIPSIZE_END) - image = gtk.Image() - image.set_from_stock('gramps-tag', gtk.ICON_SIZE_MENU) + self.label.set_ellipsize(Pango.EllipsizeMode.END) + image = Gtk.Image() + image.set_from_stock('gramps-tag', Gtk.IconSize.MENU) button.set_image (image) button.set_tooltip_text(_('Edit the tag list')) button.connect('button-press-event', self.cb_edit) @@ -856,8 +857,8 @@ class MonitoredTagList(object): """ Invoke the tag editor. """ - if (event.type == gtk.gdk.BUTTON_PRESS or - (event.type == gtk.gdk.KEY_PRESS and + if (event.type == Gdk.EventType.BUTTON_PRESS or + (event.type == Gdk.KEY_PRESS and event.keyval in (_RETURN, _KP_ENTER))): from gui.editors import EditTagList editor = EditTagList(self.tag_list, self.all_tags, diff --git a/src/gui/widgets/multitreeview.py b/src/gui/widgets/multitreeview.py index b93b10c4b..eaa6fb597 100644 --- a/src/gui/widgets/multitreeview.py +++ b/src/gui/widgets/multitreeview.py @@ -24,14 +24,14 @@ An override to allow easy multiselections. """ -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # # MultiTreeView class # #------------------------------------------------------------------------- -class MultiTreeView(gtk.TreeView): +class MultiTreeView(Gtk.TreeView): ''' TreeView that captures mouse events to make drag and drop work properly ''' @@ -43,8 +43,8 @@ class MultiTreeView(gtk.TreeView): self.defer_select = False def key_press_event(self, widget, event): - if event.type == gtk.gdk.KEY_PRESS: - if event.keyval == gtk.keysyms.Delete: + if event.type == Gdk.KEY_PRESS: + if event.keyval == Gdk.KEY_Delete: model, paths = self.get_selection().get_selected_rows() # reverse, to delete from the end paths.sort(key=lambda x:-x[0]) @@ -62,8 +62,8 @@ class MultiTreeView(gtk.TreeView): # drag multiple items without the click selecting only one target = self.get_path_at_pos(int(event.x), int(event.y)) if (target - and event.type == gtk.gdk.BUTTON_PRESS - and not (event.state & (gtk.gdk.CONTROL_MASK|gtk.gdk.SHIFT_MASK)) + and event.type == Gdk.EventType.BUTTON_PRESS + and not (event.get_state() & (Gdk.ModifierType.CONTROL_MASK|Gdk.ModifierType.SHIFT_MASK)) and self.get_selection().path_is_selected(target[0])): # disable selection self.get_selection().set_select_function(lambda *ignore: False) diff --git a/src/gui/widgets/photo.py b/src/gui/widgets/photo.py index e7379395d..31c70fb4d 100644 --- a/src/gui/widgets/photo.py +++ b/src/gui/widgets/photo.py @@ -24,7 +24,7 @@ # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -40,14 +40,14 @@ from gen.ggettext import gettext as _ # Photo class # #------------------------------------------------------------------------- -class Photo(gtk.EventBox): +class Photo(Gtk.EventBox): """ Displays an image and allows it to be viewed in an external image viewer. """ def __init__(self, use_small_size=False): - gtk.EventBox.__init__(self) + GObject.GObject.__init__(self) self.full_path = None - self.photo = gtk.Image() + self.photo = Gtk.Image() self.add(self.photo) self.connect('button-press-event', self.display_image) tip = _('Double-click on the picture to view it in the default image ' @@ -74,5 +74,5 @@ class Photo(gtk.EventBox): """ Display the image with the default external viewer. """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: open_file_with_default_application(self.full_path) diff --git a/src/gui/widgets/progressdialog.py b/src/gui/widgets/progressdialog.py index a2bc9ed6a..26c369ad8 100644 --- a/src/gui/widgets/progressdialog.py +++ b/src/gui/widgets/progressdialog.py @@ -39,7 +39,7 @@ log = logging.getLogger("gen.progressdialog") # GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -404,7 +404,7 @@ class ProgressMonitor(object): # _GtkProgressBar # #------------------------------------------------------------------------- -class _GtkProgressBar(gtk.VBox): +class _GtkProgressBar(Gtk.VBox): """This widget displays the progress bar and labels for a progress indicator. It provides an interface to updating the progress bar. """ @@ -413,27 +413,27 @@ class _GtkProgressBar(gtk.VBox): """:param long_op_status: the status of the operation. :type long_op_status: L{gen.utils.LongOpStatus} """ - gtk.VBox.__init__(self) + GObject.GObject.__init__(self) msg = long_op_status.get_msg() self._old_val = -1 - self._lbl = gtk.Label(msg) + self._lbl = Gtk.Label(label=msg) self._lbl.set_use_markup(True) #self.set_border_width(24) - self._pbar = gtk.ProgressBar() - self._hbox = gtk.HBox() + self._pbar = Gtk.ProgressBar() + self._hbox = Gtk.HBox() # Only display the cancel button is the operation # can be canceled. if long_op_status.can_cancel(): - self._cancel = gtk.Button(stock=gtk.STOCK_CANCEL) + self._cancel = Gtk.Button(stock=Gtk.STOCK_CANCEL) self._cancel.connect("clicked", lambda x: long_op_status.cancel()) self._cancel.show() self._hbox.pack_end(self._cancel) - self._hbox.pack_start(self._pbar) + self._hbox.pack_start(self._pbar, True, True, 0) self.pack_start(self._lbl, expand=False, fill=False) self.pack_start(self._hbox, expand=False, fill=False) @@ -474,7 +474,7 @@ class _GtkProgressBar(gtk.VBox): # GtkProgressDialog # #------------------------------------------------------------------------- -class GtkProgressDialog(gtk.Dialog): +class GtkProgressDialog(Gtk.Dialog): """A gtk window to display the status of a long running process.""" @@ -482,11 +482,11 @@ class GtkProgressDialog(gtk.Dialog): """:param title: The title to display on the top of the window. :type title: string """ - gtk.Dialog.__init__(self, *window_params) + GObject.GObject.__init__(self, *window_params) self.connect('delete_event', self._warn) self.set_has_separator(False) self.set_title(title) - #self.set_resize_mode(gtk.RESIZE_IMMEDIATE) + #self.set_resize_mode(Gtk.RESIZE_IMMEDIATE) #self.show() self._progress_bars = [] @@ -536,19 +536,19 @@ class GtkProgressDialog(gtk.Dialog): self._process_events() def _process_events(self): - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def show(self): """Show the dialog and process any events. """ - gtk.Dialog.show(self) + Gtk.Dialog.show(self) self._process_events() def hide(self): """Hide the dialog and process any events. """ - gtk.Dialog.hide(self) + Gtk.Dialog.hide(self) self._process_events() def _warn(self, x, y): @@ -598,12 +598,12 @@ if __name__ == '__main__': if not s.was_cancelled(): s.end() - w = gtk.Window(gtk.WINDOW_TOPLEVEL) - w.connect('destroy', gtk.main_quit) - button = gtk.Button("Test") + w = Gtk.Window(Gtk.WindowType.TOPLEVEL) + w.connect('destroy', Gtk.main_quit) + button = Gtk.Button("Test") button.connect("clicked", test, None) w.add(button) button.show() w.show() - gtk.main() + Gtk.main() print 'done' diff --git a/src/gui/widgets/shortlistcomboentry.py b/src/gui/widgets/shortlistcomboentry.py index ce435c8c6..f12f8dd8b 100644 --- a/src/gui/widgets/shortlistcomboentry.py +++ b/src/gui/widgets/shortlistcomboentry.py @@ -37,8 +37,8 @@ _LOG = logging.getLogger(".widgets.shortlistcomboentry") # GTK modules # #------------------------------------------------------------------------- -import gobject -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -53,11 +53,11 @@ from gui.widgets.validatedcomboentry import ValidatedComboEntry # #------------------------------------------------------------------------- _GTYPE = { - str: gobject.TYPE_STRING, - unicode: gobject.TYPE_STRING, - int: gobject.TYPE_INT, - long: gobject.TYPE_INT64, - float: gobject.TYPE_FLOAT, + str: GObject.TYPE_STRING, + unicode: GObject.TYPE_STRING, + int: GObject.TYPE_INT, + long: GObject.TYPE_INT64, + float: GObject.TYPE_FLOAT, } (COLUMN_ITEM, @@ -78,10 +78,10 @@ class ShortlistComboEntry(ValidatedComboEntry): raise ValueError data_type = items[0].__class__ - gtype = _GTYPE.get(data_type, gobject.TYPE_PYOBJECT) + gtype = _GTYPE.get(data_type, GObject.TYPE_PYOBJECT) # create the model and insert the items - model = gtk.ListStore(gtype, gobject.TYPE_BOOLEAN) + model = Gtk.ListStore(gtype, GObject.TYPE_BOOLEAN) maxlen = -1 for item in items: if len(str(item)) > maxlen: @@ -99,7 +99,7 @@ class ShortlistComboEntry(ValidatedComboEntry): self._shortlist = [] self.connect("changed", self._on_combobox_changed) - self.set_row_separator_func(self._is_row_separator) + self.set_row_separator_func(self._is_row_separator, None) def _on_combobox_changed(self, combobox): if self._internal_change: @@ -127,5 +127,5 @@ class ShortlistComboEntry(ValidatedComboEntry): for data in self._shortlist: model.prepend((data, False)) - def _is_row_separator(self, model, iter): + def _is_row_separator(self, model, iter, data=None): return model.get_value(iter, COLUMN_IS_SEP) diff --git a/src/gui/widgets/springseparator.py b/src/gui/widgets/springseparator.py index 69bbb8f96..3c791a44f 100644 --- a/src/gui/widgets/springseparator.py +++ b/src/gui/widgets/springseparator.py @@ -37,14 +37,15 @@ _LOG = logging.getLogger(".widgets.springseparator") # GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # # SpringSeparatorToolItem class # #------------------------------------------------------------------------- -class SpringSeparatorToolItem(gtk.SeparatorToolItem): +class SpringSeparatorToolItem(Gtk.SeparatorToolItem): """Custom separator toolitem. Its only purpose is to push following tool items to the right end @@ -54,7 +55,7 @@ class SpringSeparatorToolItem(gtk.SeparatorToolItem): __gtype_name__ = "SpringSeparatorToolItem" def __init__(self): - gtk.SeparatorToolItem.__init__(self) + GObject.GObject.__init__(self) self.set_draw(False) self.set_expand(True) @@ -64,13 +65,15 @@ class SpringSeparatorToolItem(gtk.SeparatorToolItem): # SpringSeparatorAction class # #------------------------------------------------------------------------- -class SpringSeparatorAction(gtk.Action): +class SpringSeparatorAction(Gtk.Action): """Custom Action to hold a SpringSeparatorToolItem.""" __gtype_name__ = "SpringSeparatorAction" def __init__(self, name, label, tooltip, stock_id): - gtk.Action.__init__(self, name, label, tooltip, stock_id) - -SpringSeparatorAction.set_tool_item_type(SpringSeparatorToolItem) + GObject.GObject.__init__(self, name=name, label=label, + tooltip=tooltip, stock_id=stock_id) +## TODO GTK3, How to connect these? Used in styledtexteditor +##SpringSeparatorToolItem.set_related_action(SpringSeparatorAction) +##deprecated: SpringSeparatorAction.set_tool_item_type(SpringSeparatorToolItem) diff --git a/src/gui/widgets/statusbar.py b/src/gui/widgets/statusbar.py index 638c8f6a1..f89bdaf9a 100644 --- a/src/gui/widgets/statusbar.py +++ b/src/gui/widgets/statusbar.py @@ -35,22 +35,22 @@ _LOG = logging.getLogger(".widgets.statusbar") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gobject -import gtk -import pango +from gi.repository import GObject +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # # Statusbar class # #------------------------------------------------------------------------- -class Statusbar(gtk.HBox): +class Statusbar(Gtk.HBox): """Custom Statusbar with flexible number of "bars". Statusbar can have any number of fields included, each identified by it's own bar id. It has by default one field with id = 0. This defult field is used when no bar id is given in the relevant (push, pop, - etc.) methods, thus Statusbar behaves as a single gtk.Statusbar. + etc.) methods, thus Statusbar behaves as a single Gtk.Statusbar. To add a new field use the "insert" method. Using the received bar id one can push, pop and remove messages to/from this newly inserted field. @@ -64,56 +64,59 @@ class Statusbar(gtk.HBox): ##} __gproperties__ = { - 'has-resize-grip': (gobject.TYPE_BOOLEAN, + 'has-resize-grip': (GObject.TYPE_BOOLEAN, 'Resize grip', 'Whether resize grip is visible', True, - gobject.PARAM_READWRITE), + GObject.PARAM_READWRITE), } def __init__(self): - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) # initialize property values self.__has_resize_grip = True # create the main statusbar with id #0 - main_bar = gtk.Statusbar() + main_bar = Gtk.Statusbar() main_bar.show() - self.pack_start(main_bar, fill=True, expand=True) + self.pack_start(main_bar, True, True, 0) self._bars = {0: main_bar} - self._set_resize_grip() - # Virtual methods - - def do_get_property(self, prop): - """Return the gproperty's value. - """ - if prop.name == 'has-resize-grip': - return self.__has_resize_grip - else: - raise AttributeError, 'unknown property %s' % prop.name - - def do_set_property(self, prop, value): - """Set the property of writable properties. - """ - if prop.name == 'has-resize-grip': - self.__has_resize_grip = value - self._set_resize_grip() - else: - raise AttributeError, 'unknown or read only property %s' % prop.name - - # Private - - def _set_resize_grip(self): - """Set the resize grip for the statusbar. - - Resize grip is disabled for all statusbars except the last one, - which is set according to the "has-resize-grip" propery. - - """ - for bar in self.get_children(): - bar.set_has_resize_grip(False) - - bar.set_has_resize_grip(self.get_property('has-resize-grip')) +##TODO GTK3: statusbar no longer has resize grip methods, depracate this part +## of Gramps Statusbar?? +## self._set_resize_grip() +## +## # Virtual methods +## +## def do_get_property(self, prop): +## """Return the gproperty's value. +## """ +## if prop.name == 'has-resize-grip': +## return self.__has_resize_grip +## else: +## raise AttributeError, 'unknown property %s' % prop.name +## +## def do_set_property(self, prop, value): +## """Set the property of writable properties. +## """ +## if prop.name == 'has-resize-grip': +## self.__has_resize_grip = value +## self._set_resize_grip() +## else: +## raise AttributeError, 'unknown or read only property %s' % prop.name +## +## # Private +## +## def _set_resize_grip(self): +## """Set the resize grip for the statusbar. +## +## Resize grip is disabled for all statusbars except the last one, +## which is set according to the "has-resize-grip" propery. +## +## """ +## for bar in self.get_children(): +## bar.set_has_resize_grip(False) +## +## bar.set_has_resize_grip(self.get_property('has-resize-grip')) def _get_next_id(self): """Get next unused statusbar id. @@ -134,20 +137,22 @@ class Statusbar(gtk.HBox): The new bar_id is returned. """ - new_bar = gtk.Statusbar() + new_bar = Gtk.Statusbar() new_bar.show() - self.pack_start(new_bar, fill=True, expand=True) + self.pack_start(new_bar, True, True, 0) self.reorder_child(new_bar, index) - self._set_resize_grip() +##TODO GTK3: statusbar no longer has resize grip methods, depracate this part +## of Gramps Statusbar?? +## self._set_resize_grip() if ralign: frame = new_bar.get_children()[0] - obj = frame.get_children()[0] - # obj was a gtk.Label (GTK 2.16.6), - # now it is is gtk.HBox (GTK 2.19.1) - while not isinstance(obj, gtk.Label): - obj = obj.get_children()[0] - obj.set_alignment(xalign=1.0, yalign=0.5) + obj = frame.get_children()[0] + # obj is HBox + obj = obj.get_children()[0] +##TODO GTK3: Check if following give expected alignment in statusbar + obj.valign = Gtk.Align(value=Gtk.Align.CENTER) + obj.halign = Gtk.Align(value=Gtk.Align.END) new_bar_id = self._get_next_id() self._bars[new_bar_id] = new_bar @@ -200,28 +205,28 @@ class Statusbar(gtk.HBox): self._bars[bar_id].remove(context_id, message_id) def set_has_resize_grip(self, setting): - """Mirror gtk.Statusbar functionaliy. + """Mirror Gtk.Statusbar functionaliy. """ self.set_property('has-resize-grip', setting) def get_has_resize_grip(self): - """Mirror gtk.Statusbar functionaliy. + """Mirror Gtk.Statusbar functionaliy. """ return self.get_property('has-resize-grip') def main(args): - win = gtk.Window() + win = Gtk.Window() win.set_title('Statusbar test window') - win.set_position(gtk.WIN_POS_CENTER) + win.set_position(Gtk.WindowPosition.CENTER) def cb(window, event): - gtk.main_quit() + Gtk.main_quit() win.connect('delete-event', cb) - vbox = gtk.VBox() + vbox = Gtk.VBox() win.add(vbox) statusbar = Statusbar() - vbox.pack_end(statusbar, False) + vbox.pack_end(statusbar, False, True, 0) statusbar.push(1, "My statusbar") @@ -236,7 +241,7 @@ def main(args): last_statusbar) win.show_all() - gtk.main() + Gtk.main() if __name__ == '__main__': import sys diff --git a/src/gui/widgets/styledtextbuffer.py b/src/gui/widgets/styledtextbuffer.py index d789c9944..b5d6ca44a 100644 --- a/src/gui/widgets/styledtextbuffer.py +++ b/src/gui/widgets/styledtextbuffer.py @@ -20,7 +20,7 @@ # $Id$ -"""Text buffer subclassed from gtk.TextBuffer handling L{StyledText}.""" +"""Text buffer subclassed from Gtk.TextBuffer handling L{StyledText}.""" __all__ = ["ALLOWED_STYLES", "MATCH_START", "MATCH_END", "MATCH_FLAVOR", "MATCH_STRING", "StyledTextBuffer"] @@ -41,10 +41,13 @@ _LOG = logging.getLogger(".widgets.styledtextbuffer") # GTK modules # #------------------------------------------------------------------------- -import gobject -import gtk +from gi.repository import GObject +from gi.repository import Gtk +from gi.repository import Pango from gui.widgets.undoablebuffer import UndoableBuffer -from pango import WEIGHT_BOLD, STYLE_ITALIC, UNDERLINE_SINGLE +WEIGHT_BOLD = Pango.Weight.BOLD +STYLE_ITALIC = Pango.Style.ITALIC +UNDERLINE_SINGLE = Pango.Underline.SINGLE #------------------------------------------------------------------------- # @@ -90,7 +93,7 @@ STYLE_TO_PROPERTY = { # LinkTag class # #------------------------------------------------------------------------- -class LinkTag(gtk.TextTag): +class LinkTag(Gtk.TextTag): """ Class for keeping track of link data. """ @@ -98,7 +101,7 @@ class LinkTag(gtk.TextTag): def __init__(self, buffer, data, **properties): LinkTag.lid += 1 self.data = data - gtk.TextTag.__init__(self, "link-%d" % LinkTag.lid) + GObject.GObject.__init__(self, name="link-%d" % LinkTag.lid) tag_table = buffer.get_tag_table() for property in properties: self.set_property(property, properties[property]) @@ -112,8 +115,8 @@ class LinkTag(gtk.TextTag): class GtkSpellState(object): """A simple state machine kinda thingy. - Trying to track gtk.Spell activities on a buffer and re-apply formatting - after gtk.Spell replaces a misspelled word. + Trying to track Gtk.Spell activities on a buffer and re-apply formatting + after Gtk.Spell replaces a misspelled word. """ (STATE_NONE, @@ -122,8 +125,8 @@ class GtkSpellState(object): STATE_INSERTING) = range(4) def __init__(self, textbuffer): - if not isinstance(textbuffer, gtk.TextBuffer): - raise TypeError("Init parameter must be instance of gtk.TextBuffer") + if not isinstance(textbuffer, Gtk.TextBuffer): + raise TypeError("Init parameter must be instance of Gtk.TextBuffer") textbuffer.connect('mark-set', self.on_buffer_mark_set) textbuffer.connect('delete-range', self.on_buffer_delete_range) @@ -169,10 +172,10 @@ class GtkSpellState(object): self.reset_state() def get_word_extents_from_mark(self, textbuffer, mark): - """Get the word extents as gtk.Spell does. + """Get the word extents as Gtk.Spell does. Used to get the beginning of the word, in which user right clicked. - Formatting found at that position used after gtk.Spell replaces + Formatting found at that position used after Gtk.Spell replaces misspelled words. """ @@ -187,7 +190,7 @@ class GtkSpellState(object): return start.get_offset(), end.get_offset() def forward_word_end(self, iter): - """gtk.Spell style gtk.TextIter.forward_word_end. + """Gtk.Spell style Gtk.TextIter.forward_word_end. The parameter 'iter' is changing as side effect. @@ -206,7 +209,7 @@ class GtkSpellState(object): return True def backward_word_start(self, iter): - """gtk.Spell style gtk.TextIter.backward_word_start. + """Gtk.Spell style Gtk.TextIter.backward_word_start. The parameter 'iter' is changing as side effect. @@ -232,7 +235,7 @@ class StyledTextBuffer(UndoableBuffer): """An extended TextBuffer for handling StyledText strings. StyledTextBuffer is an interface between GRAMPS' L{StyledText} format - and gtk.TextBuffer. To set and get the text use the L{set_text} and + and Gtk.TextBuffer. To set and get the text use the L{set_text} and L{get_text} methods. To set a style to (a portion of) the text (e.g. from GUI) use the @@ -253,9 +256,9 @@ class StyledTextBuffer(UndoableBuffer): __gtype_name__ = 'StyledTextBuffer' __gsignals__ = { - 'style-changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, #return value - (gobject.TYPE_PYOBJECT,)), # arguments + 'style-changed': (GObject.SignalFlags.RUN_FIRST, + None, #return value + (GObject.TYPE_PYOBJECT,)), # arguments } def __init__(self): @@ -327,12 +330,12 @@ class StyledTextBuffer(UndoableBuffer): # move 'insert' marker to have the format attributes updated self.move_mark(self._insert, start) - def do_changed(self): + def do_changed(self, data=None): """Parse for patterns in the text.""" self.matches = [] text = unicode(super(StyledTextBuffer, self).get_text( self.get_start_iter(), - self.get_end_iter())) + self.get_end_iter(), True)) for regex, flavor in self.patterns: iter = regex.finditer(text) while True: @@ -479,7 +482,7 @@ class StyledTextBuffer(UndoableBuffer): return removed_something def _get_tag_from_range(self, start=None, end=None): - """Extract gtk.TextTags from buffer. + """Extract Gtk.TextTags from buffer. Return only the name of the TextTag from the specified range. If range is not given, tags extracted from the whole buffer. @@ -547,7 +550,7 @@ class StyledTextBuffer(UndoableBuffer): def set_text(self, s_text): """Set the content of the buffer with markup tags. - @note: 's_' prefix means StyledText*, while 'g_' prefix means gtk.*. + @note: 's_' prefix means StyledText*, while 'g_' prefix means Gtk.*. """ super(StyledTextBuffer, self).set_text(str(s_text)) @@ -570,7 +573,7 @@ class StyledTextBuffer(UndoableBuffer): def get_text(self, start=None, end=None, include_hidden_chars=True): """Return the buffer text. - @note: 's_' prefix means StyledText*, while 'g_' prefix means gtk.*. + @note: 's_' prefix means StyledText*, while 'g_' prefix means Gtk.*. """ if start is None: @@ -578,7 +581,8 @@ class StyledTextBuffer(UndoableBuffer): if end is None: end = self.get_end_iter() - txt = super(StyledTextBuffer, self).get_text(start, end, include_hidden_chars) + txt = super(StyledTextBuffer, self).get_text(start, end, + include_hidden_chars) txt = unicode(txt) # extract tags out of the buffer @@ -609,7 +613,7 @@ class StyledTextBuffer(UndoableBuffer): s_tags.append(s_tag) except ValueError: - _LOG.debug("silently skipping gtk.TextTag '%s'" % g_tagname) + _LOG.debug("silently skipping Gtk.TextTag '%s'" % g_tagname) return StyledText(txt, s_tags) diff --git a/src/gui/widgets/styledtexteditor.py b/src/gui/widgets/styledtexteditor.py index 3f97ecb2e..814d496e5 100644 --- a/src/gui/widgets/styledtexteditor.py +++ b/src/gui/widgets/styledtexteditor.py @@ -20,7 +20,7 @@ # $Id$ -"Text editor subclassed from gtk.TextView handling L{StyledText}." +"Text editor subclassed from Gtk.TextView handling L{StyledText}." __all__ = ["StyledTextEditor"] @@ -39,9 +39,10 @@ _LOG = logging.getLogger(".widgets.styledtexteditor") # GTK libraries # #------------------------------------------------------------------------- -import gobject -import gtk -from pango import UNDERLINE_SINGLE +from gi.repository import GObject +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -68,8 +69,8 @@ from gen.constfunc import has_display # #------------------------------------------------------------------------- if has_display(): - HAND_CURSOR = gtk.gdk.Cursor(gtk.gdk.HAND2) - REGULAR_CURSOR = gtk.gdk.Cursor(gtk.gdk.XTERM) + HAND_CURSOR = Gdk.Cursor.new(Gdk.CursorType.HAND2) + REGULAR_CURSOR = Gdk.Cursor.new(Gdk.CursorType.XTERM) FORMAT_TOOLBAR = ''' @@ -128,8 +129,8 @@ def find_parent_with_attr(self, attr="dbstate"): # StyledTextEditor # #------------------------------------------------------------------------- -class StyledTextEditor(gtk.TextView): - """StyledTextEditor is an enhanced gtk.TextView to edit L{StyledText}. +class StyledTextEditor(Gtk.TextView): + """StyledTextEditor is an enhanced Gtk.TextView to edit L{StyledText}. StyledTextEditor is a gui object for L{StyledTextBuffer}. It offers L{set_text} and L{get_text} convenience methods to set and get the @@ -152,7 +153,7 @@ class StyledTextEditor(gtk.TextView): @ivar match: currently matched string, used for generating the 'match-changed' signal. @type match: tuple or None - @ivar show_unicode: stores the user's gtk.settings['gtk-show-unicode-menu'] + @ivar show_unicode: stores the user's Gtk.settings['gtk-show-unicode-menu'] value. @type show_unicode: bool @ivar spellcheck: spell checker object created for the editor instance. @@ -160,7 +161,7 @@ class StyledTextEditor(gtk.TextView): @ivar textbuffer: text buffer assigned to the edit instance. @type textbuffer: L{StyledTextBuffer} @ivar toolbar: toolbar to be used for text formatting. - @type toolbar: gtk.Toolbar + @type toolbar: Gtk.Toolbar @ivar url_match: stores the matched URL and other mathing parameters. @type url_match: tuple or None @@ -168,9 +169,9 @@ class StyledTextEditor(gtk.TextView): __gtype_name__ = 'StyledTextEditor' __gsignals__ = { - 'match-changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, #return value - (gobject.TYPE_PYOBJECT,)), # arguments + 'match-changed': (GObject.SignalFlags.RUN_FIRST, + None, #return value + (GObject.TYPE_PYOBJECT,)), # arguments } def __init__(self): @@ -178,7 +179,7 @@ class StyledTextEditor(gtk.TextView): self.textbuffer = UndoableStyledBuffer() self.textbuffer.connect('style-changed', self._on_buffer_style_changed) self.textbuffer.connect('changed', self._on_buffer_changed) - gtk.TextView.__init__(self, self.textbuffer) + GObject.GObject.__init__(self, buffer=self.textbuffer) self.match = None self.last_match = None @@ -192,7 +193,7 @@ class StyledTextEditor(gtk.TextView): self._connect_signals() # we want to disable the unicode menu in the popup - settings = gtk.settings_get_default() + settings = Gtk.Settings.get_default() self.show_unicode = settings.get_property('gtk-show-unicode-menu') settings.set_property('gtk-show-unicode-menu', False) @@ -212,7 +213,7 @@ class StyledTextEditor(gtk.TextView): @attention: Do not override the handler, but connect to the signal. """ - window = self.get_window(gtk.TEXT_WINDOW_TEXT) + window = self.get_window(Gtk.TextWindowType.TEXT) start, end = self.textbuffer.get_bounds() self.textbuffer.remove_tag_by_name('hyperlink', start, end) if match and (match[MATCH_FLAVOR] in (GENURL, HTTP, MAIL)): @@ -238,7 +239,7 @@ class StyledTextEditor(gtk.TextView): Set the default Gtk settings back before leaving. """ - settings = gtk.settings_get_default() + settings = Gtk.Settings.get_default() settings.set_property('gtk-show-unicode-menu', self.show_unicode) def on_key_press_event(self, widget, event): @@ -247,19 +248,19 @@ class StyledTextEditor(gtk.TextView): Handle formatting shortcuts. """ - if ((gtk.gdk.keyval_name(event.keyval) == 'Z') and - (event.state & gtk.gdk.CONTROL_MASK) and - (event.state & gtk.gdk.SHIFT_MASK)): + if ((Gdk.keyval_name(event.keyval) == 'Z') and + (event.get_state() & Gdk.ModifierType.CONTROL_MASK) and + (event.get_state() & Gdk.ModifierType.SHIFT_MASK)): self.redo() return True - elif ((gtk.gdk.keyval_name(event.keyval) == 'z') and - (event.state & gtk.gdk.CONTROL_MASK)): + elif ((Gdk.keyval_name(event.keyval) == 'z') and + (event.get_state() & Gdk.ModifierType.CONTROL_MASK)): self.undo() return True else: for accel, accel_name in self.action_accels.iteritems(): - key, mod = gtk.accelerator_parse(accel) - if ((event.keyval == key) and (event.state & mod)): + key, mod = Gtk.accelerator_parse(accel) + if ((event.keyval == key) and (event.get_state() & mod)): action_name = accel_name action = self.action_group.get_action(action_name) action.activate() @@ -286,7 +287,7 @@ class StyledTextEditor(gtk.TextView): 'match-changed' signal is raised. """ - x, y = self.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET, + x, y = self.window_to_buffer_coords(Gtk.TextWindowType.WIDGET, int(event.x), int(event.y)) iter_at_location = self.get_iter_at_location(x, y) self.match = self.textbuffer.match_check(iter_at_location.get_offset()) @@ -302,7 +303,7 @@ class StyledTextEditor(gtk.TextView): self.emit('match-changed', self.match) self.last_match = self.match - self.window.get_pointer() + self.get_root_window().get_pointer() self.set_tooltip_text(tooltip) return False @@ -325,11 +326,11 @@ class StyledTextEditor(gtk.TextView): """ Copy selection to clipboard for left click if selection given """ - if (event.type == gtk.gdk.BUTTON_RELEASE and self.selclick and + if (event.type == Gdk.EventType.BUTTON_RELEASE and self.selclick and event.button == 1): bounds = self.textbuffer.get_selection_bounds() if bounds: - clip = gtk.Clipboard(selection="PRIMARY") + clip = Gtk.Clipboard(selection="PRIMARY") clip.set_text(str(self.textbuffer.get_text(bounds[0], bounds[1]))) return False @@ -341,15 +342,15 @@ class StyledTextEditor(gtk.TextView): """ self.selclick=False - if ((event.type == gtk.gdk.BUTTON_PRESS) and + if ((event.type == Gdk.EventType.BUTTON_PRESS) and (event.button == 1) and - (event.state and gtk.gdk.CONTROL_MASK) and + (event.get_state() and Gdk.ModifierType.CONTROL_MASK) and (self.url_match)): flavor = self.url_match[MATCH_FLAVOR] url = self.url_match[MATCH_STRING] self._open_url_cb(None, url, flavor) - elif (event.type == gtk.gdk.BUTTON_PRESS and event.button == 1) : + elif (event.type == Gdk.EventType.BUTTON_PRESS and event.button == 1) : #on release we will copy selected data to clipboard self.selclick = True #propagate click @@ -364,12 +365,12 @@ class StyledTextEditor(gtk.TextView): """ # spell checker submenu - spell_menu = gtk.MenuItem(_('Spellcheck')) + spell_menu = Gtk.MenuItem(_('Spellcheck')) spell_menu.set_submenu(self._create_spell_menu()) spell_menu.show_all() menu.prepend(spell_menu) - search_menu = gtk.MenuItem(_("Search selection on web")) + search_menu = Gtk.MenuItem(_("Search selection on web")) search_menu.connect('activate', self.search_web) search_menu.show_all() menu.append(search_menu) @@ -380,14 +381,14 @@ class StyledTextEditor(gtk.TextView): url = self.url_match[MATCH_STRING] if flavor == MAIL: - open_menu = gtk.MenuItem(_('_Send Mail To...')) - copy_menu = gtk.MenuItem(_('Copy _E-mail Address')) + open_menu = Gtk.MenuItem(_('_Send Mail To...')) + copy_menu = Gtk.MenuItem(_('Copy _E-mail Address')) else: - open_menu = gtk.MenuItem(_('_Open Link')) - copy_menu = gtk.MenuItem(_('Copy _Link Address')) + open_menu = Gtk.MenuItem(_('_Open Link')) + copy_menu = Gtk.MenuItem(_('Copy _Link Address')) if flavor == LINK: - edit_menu = gtk.MenuItem(_('_Edit Link')) + edit_menu = Gtk.MenuItem(_('_Edit Link')) edit_menu.connect('activate', self._edit_url_cb, self.url_match[-1], # tag ) @@ -425,7 +426,7 @@ class StyledTextEditor(gtk.TextView): # private methods def _connect_signals(self): - """Connect to several signals of the super class gtk.TextView.""" + """Connect to several signals of the super class Gtk.TextView.""" self.connect('key-press-event', self.on_key_press_event) self.connect('insert-at-cursor', self.on_insert_at_cursor) self.connect('delete-from-cursor', self.on_delete_from_cursor) @@ -440,17 +441,17 @@ class StyledTextEditor(gtk.TextView): """Create a formatting toolbar. @returns: toolbar containing text formatting toolitems. - @returntype: gtk.Toolbar + @returntype: Gtk.Toolbar """ # define the actions... # ...first the toggle actions, which have a ToggleToolButton as proxy format_toggle_actions = [ - (str(StyledTextTagType.ITALIC), gtk.STOCK_ITALIC, None, None, + (str(StyledTextTagType.ITALIC), Gtk.STOCK_ITALIC, None, None, _('Italic'), self._on_toggle_action_activate), - (str(StyledTextTagType.BOLD), gtk.STOCK_BOLD, None, None, + (str(StyledTextTagType.BOLD), Gtk.STOCK_BOLD, None, None, _('Bold'), self._on_toggle_action_activate), - (str(StyledTextTagType.UNDERLINE), gtk.STOCK_UNDERLINE, None, None, + (str(StyledTextTagType.UNDERLINE), Gtk.STOCK_UNDERLINE, None, None, _('Underline'), self._on_toggle_action_activate), ] @@ -462,9 +463,9 @@ class StyledTextEditor(gtk.TextView): _('Font Color'), self._on_action_activate), (str(StyledTextTagType.HIGHLIGHT), 'gramps-font-bgcolor', None, None, _('Background Color'), self._on_action_activate), - (str(StyledTextTagType.LINK), gtk.STOCK_JUMP_TO, None, None, + (str(StyledTextTagType.LINK), Gtk.STOCK_JUMP_TO, None, None, _('Link'), self._on_link_activate), - ('clear', gtk.STOCK_CLEAR, None, None, + ('clear', Gtk.STOCK_CLEAR, None, None, _('Clear Markup'), self._format_clear_cb), ] @@ -504,13 +505,13 @@ class StyledTextEditor(gtk.TextView): } # create the action group and insert all the actions - self.action_group = gtk.ActionGroup('Format') + self.action_group = Gtk.ActionGroup('Format') self.action_group.add_toggle_actions(format_toggle_actions) - self.undo_action = gtk.Action("Undo", _('Undo'), _('Undo'), - gtk.STOCK_UNDO) + self.undo_action = Gtk.Action("Undo", _('Undo'), _('Undo'), + Gtk.STOCK_UNDO) self.undo_action.connect('activate', self.undo) - self.redo_action = gtk.Action("Redo", _('Redo'), _('Redo'), - gtk.STOCK_REDO) + self.redo_action = Gtk.Action("Redo", _('Redo'), _('Redo'), + Gtk.STOCK_REDO) self.redo_action.connect('activate', self.redo) self.action_group.add_action(self.undo_action) self.action_group.add_action(self.redo_action) @@ -520,14 +521,14 @@ class StyledTextEditor(gtk.TextView): self.action_group.add_action(spring) # define the toolbar and create the proxies via ensure_update() - uimanager = gtk.UIManager() + uimanager = Gtk.UIManager() uimanager.insert_action_group(self.action_group, 0) uimanager.add_ui_from_string(FORMAT_TOOLBAR) uimanager.ensure_update() # get the toolbar and set it's style toolbar = uimanager.get_widget('/ToolBar') - toolbar.set_style(gtk.TOOLBAR_ICONS) + toolbar.set_style(Gtk.ToolbarStyle.ICONS) self.undo_action.set_sensitive(False) self.redo_action.set_sensitive(False) @@ -536,7 +537,7 @@ class StyledTextEditor(gtk.TextView): def _init_url_match(self): """Setup regexp matching for URL match.""" self.textbuffer.create_tag('hyperlink', - underline=UNDERLINE_SINGLE, + underline=Pango.Underline.SINGLE, foreground='blue') self.textbuffer.match_add(SCHEME + "//(" + USER + "@)?[" + HOSTCHARS + ".]+" + "(:[0-9]+)?(" + @@ -554,15 +555,15 @@ class StyledTextEditor(gtk.TextView): forms a radio menu item, and the selected spellcheck is set as active. @returns: menu containing all the installed spellchecks. - @returntype: gtk.Menu + @returntype: Gtk.Menu """ active_spellcheck = self.spellcheck.get_active_spellcheck() - menu = gtk.Menu() + menu = Gtk.Menu() group = None for lang in self.spellcheck.get_all_spellchecks(): - menuitem = gtk.RadioMenuItem(group, lang) + menuitem = Gtk.RadioMenuItem(group, lang) menuitem.set_active(lang == active_spellcheck) menuitem.connect('activate', self._spell_change_cb, lang) menu.append(menuitem) @@ -598,9 +599,9 @@ class StyledTextEditor(gtk.TextView): # Paste text to clipboards text = str(self.textbuffer.get_text(selection_bounds[0], selection_bounds[1])) - clipboard = gtk.Clipboard(selection="CLIPBOARD") + clipboard = Gtk.Clipboard(selection="CLIPBOARD") clipboard.set_text(text) - clipboard = gtk.Clipboard(selection="PRIMARY") + clipboard = Gtk.Clipboard(selection="PRIMARY") clipboard.set_text(text) uri_dialog(self, None, self.setlink_callback) @@ -613,7 +614,7 @@ class StyledTextEditor(gtk.TextView): if not tag: tag = LinkTag(self.textbuffer, data=uri, - underline=UNDERLINE_SINGLE, + underline=Pango.Underline.SINGLE, foreground="blue") selection_bounds = self.textbuffer.get_selection_bounds() self.textbuffer.apply_tag(tag, @@ -624,14 +625,14 @@ class StyledTextEditor(gtk.TextView): def _on_action_activate(self, action): - """Apply a format set from a gtk.Action type of action.""" + """Apply a format set from a Gtk.Action type of action.""" style = int(action.get_name()) current_value = self.textbuffer.get_style_at_cursor(style) if style == StyledTextTagType.FONTCOLOR: - color_selection = gtk.ColorSelectionDialog(_("Select font color")) + color_selection = Gtk.ColorSelectionDialog(_("Select font color")) elif style == StyledTextTagType.HIGHLIGHT: - color_selection = gtk.ColorSelectionDialog(_("Select " + color_selection = Gtk.ColorSelectionDialog(_("Select " "background color")) else: _LOG.debug("unknown style: '%d'" % style) @@ -646,7 +647,7 @@ class StyledTextEditor(gtk.TextView): value = color_to_hex(color) color_selection.destroy() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: _LOG.debug("applying style '%d' with value '%s'" % (style, str(value))) self.textbuffer.apply_style(style, value) @@ -672,7 +673,7 @@ class StyledTextEditor(gtk.TextView): """ Remove all formats from the selection or from all. - Remove only our own tags without touching other ones (e.g. gtk.Spell), + Remove only our own tags without touching other ones (e.g. Gtk.Spell), thus remove_all_tags() can not be used. """ @@ -751,10 +752,10 @@ class StyledTextEditor(gtk.TextView): def _copy_url_cb(self, menuitem, url, flavor): """Copy url to both useful selections.""" - clipboard = gtk.Clipboard(selection="CLIPBOARD") + clipboard = Gtk.Clipboard(selection="CLIPBOARD") clipboard.set_text(url) - clipboard = gtk.Clipboard(selection="PRIMARY") + clipboard = Gtk.Clipboard(selection="PRIMARY") clipboard.set_text(url) @@ -766,9 +767,9 @@ class StyledTextEditor(gtk.TextView): bounds = self.textbuffer.get_selection_bounds() if bounds: text = str(self.textbuffer.get_text(bounds[0], bounds[1])) - clipboard = gtk.Clipboard(selection="CLIPBOARD") + clipboard = Gtk.Clipboard(selection="CLIPBOARD") clipboard.set_text(text) - clipboard = gtk.Clipboard(selection="PRIMARY") + clipboard = Gtk.Clipboard(selection="PRIMARY") clipboard.set_text(text) uri_dialog(self, link_tag.data, lambda uri: self.setlink_callback(uri, link_tag)) @@ -798,7 +799,7 @@ class StyledTextEditor(gtk.TextView): """Get the formatting toolbar of the editor. @returns: toolbar widget to use as formatting GUI. - @returntype: gtk.Toolbar + @returntype: Gtk.Toolbar """ return self.toolbar @@ -833,7 +834,7 @@ def uri_dialog(self, uri, callback): # #------------------------------------------------------------------------- def color_to_hex(color): - """Convert gtk.gdk.Color to hex string.""" + """Convert Gdk.Color to hex string.""" hexstring = "" for col in 'red', 'green', 'blue': hexfrag = hex(getattr(color, col) / (16 * 16)).split("x")[1] @@ -843,8 +844,8 @@ def color_to_hex(color): return '#' + hexstring def hex_to_color(hex): - """Convert hex string to gtk.gdk.Color.""" - color = gtk.gdk.color_parse(hex) + """Convert hex string to Gdk.Color.""" + color = Gdk.color_parse(hex) return color def is_valid_fontsize(size): diff --git a/src/gui/widgets/toolcomboentry.py b/src/gui/widgets/toolcomboentry.py index 2aa02c8d7..871553df5 100644 --- a/src/gui/widgets/toolcomboentry.py +++ b/src/gui/widgets/toolcomboentry.py @@ -37,8 +37,8 @@ _LOG = logging.getLogger(".widgets.toolcomboentry") # GTK modules # #------------------------------------------------------------------------- -#import gobject -import gtk +#from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -71,7 +71,7 @@ class ToolComboEntry(ValueToolItem): combo.connect('changed', self._on_widget_changed) def set_value(self, value): - self.child.set_active_data(value) + self.get_child().set_active_data(value) def get_value(self): - return self.child.get_active_data() \ No newline at end of file + return self.get_child().get_active_data() \ No newline at end of file diff --git a/src/gui/widgets/undoablebuffer.py b/src/gui/widgets/undoablebuffer.py index 36c4d7f1f..b4409be2e 100644 --- a/src/gui/widgets/undoablebuffer.py +++ b/src/gui/widgets/undoablebuffer.py @@ -32,7 +32,8 @@ __all__ = ["UndoableBuffer"] # http://bitbucket.org/tiax/gtk-textbuffer-with-undo/ # Please send bugfixes and comments upstream to Florian -import gtk +from gi.repository import GObject +from gi.repository import Gtk class Stack(list): """ @@ -66,7 +67,7 @@ class UndoableInsert(object): class UndoableDelete(object): """something that has been deleted from our textbuffer""" def __init__(self, text_buffer, start_iter, end_iter): - self.text = str(text_buffer.get_text(start_iter, end_iter)) + self.text = str(text_buffer.get_text(start_iter, end_iter, True)) self.start = start_iter.get_offset() self.end = end_iter.get_offset() # need to find out if backspace or delete key has been used @@ -82,7 +83,7 @@ class UndoableDelete(object): self.mergeable = True self.tags = None -class UndoableBuffer(gtk.TextBuffer): +class UndoableBuffer(Gtk.TextBuffer): """text buffer with added undo capabilities designed as a drop-in replacement for gtksourceview, @@ -97,7 +98,7 @@ class UndoableBuffer(gtk.TextBuffer): """ we'll need empty stacks for undo/redo and some state keeping """ - gtk.TextBuffer.__init__(self) + GObject.GObject.__init__(self) self.undo_stack = Stack(self.undo_stack_size) self.redo_stack = [] self.not_undoable_action = False diff --git a/src/gui/widgets/undoableentry.py b/src/gui/widgets/undoableentry.py index aa56acf6b..be695d467 100644 --- a/src/gui/widgets/undoableentry.py +++ b/src/gui/widgets/undoableentry.py @@ -39,8 +39,8 @@ _LOG = logging.getLogger(".widgets.undoableentry") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gobject -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -50,7 +50,7 @@ import gtk from undoablebuffer import Stack class UndoableInsertEntry(object): - """something that has been inserted into our gtk.editable""" + """something that has been inserted into our Gtk.editable""" def __init__(self, text, length, position, editable): self.offset = position self.text = str(text) @@ -80,7 +80,7 @@ class UndoableDeleteEntry(object): else: self.mergeable = True -class UndoableEntry(gtk.Entry): +class UndoableEntry(Gtk.Entry): """ The UndoableEntry is an Entry subclass with additional features. @@ -96,7 +96,7 @@ class UndoableEntry(gtk.Entry): undo_stack_size = 50 def __init__(self): - gtk.Entry.__init__(self) + GObject.GObject.__init__(self) self.undo_stack = Stack(self.undo_stack_size) self.redo_stack = [] self.not_undoable_action = False @@ -107,7 +107,7 @@ class UndoableEntry(gtk.Entry): self.connect('key-press-event', self._on_key_press_event) def set_text(self, text): - gtk.Entry.set_text(self, text) + Gtk.Entry.set_text(self, text) self.reset() def _on_key_press_event(self, widget, event): @@ -115,13 +115,13 @@ class UndoableEntry(gtk.Entry): Handle formatting undo/redo key press. """ - if ((gtk.gdk.keyval_name(event.keyval) == 'Z') and - (event.state & gtk.gdk.CONTROL_MASK) and - (event.state & gtk.gdk.SHIFT_MASK)): + if ((Gdk.keyval_name(event.keyval) == 'Z') and + (event.get_state() & Gdk.ModifierType.CONTROL_MASK) and + (event.get_state() & Gdk.ModifierType.SHIFT_MASK)): self.redo() return True - elif ((gtk.gdk.keyval_name(event.keyval) == 'z') and - (event.state & gtk.gdk.CONTROL_MASK)): + elif ((Gdk.keyval_name(event.keyval) == 'z') and + (event.get_state() & Gdk.ModifierType.CONTROL_MASK)): self.undo() return True diff --git a/src/gui/widgets/undoablestyledbuffer.py b/src/gui/widgets/undoablestyledbuffer.py index 498f7da6f..fc1cf17e0 100644 --- a/src/gui/widgets/undoablestyledbuffer.py +++ b/src/gui/widgets/undoablestyledbuffer.py @@ -28,7 +28,7 @@ gtk textbuffer with undo functionality __all__ = ["UndoableStyledBuffer"] -import gtk +from gi.repository import Gtk from gen.lib.styledtext import StyledText from gui.widgets.undoablebuffer import UndoableInsert, UndoableDelete @@ -110,7 +110,7 @@ class UndoableStyledBuffer(StyledTextBuffer): ) self.delete(start, stop) #the text is correct again, now we create correct styled text - s_text = StyledText(gtk.TextBuffer.get_text(self, + s_text = StyledText(Gtk.TextBuffer.get_text(self, self.get_start_iter(), self.get_end_iter()), undo_action.tags) self.set_text(s_text) self.place_cursor(self.get_iter_at_offset(undo_action.offset)) @@ -119,7 +119,7 @@ class UndoableStyledBuffer(StyledTextBuffer): start = self.get_iter_at_offset(undo_action.start) self.insert(start, undo_action.text) #the text is correct again, now we create correct styled text - s_text = StyledText(gtk.TextBuffer.get_text(self, + s_text = StyledText(Gtk.TextBuffer.get_text(self, self.get_start_iter(), self.get_end_iter()), undo_action.tags) self.set_text(s_text) if undo_action.delete_key_used: @@ -128,7 +128,7 @@ class UndoableStyledBuffer(StyledTextBuffer): self.place_cursor(self.get_iter_at_offset(undo_action.end)) def _redo_insert(self, redo_action): - s_text = StyledText(gtk.TextBuffer.get_text(self, + s_text = StyledText(Gtk.TextBuffer.get_text(self, self.get_start_iter(), self.get_end_iter()), redo_action.tags) self.set_text(s_text) start = self.get_iter_at_offset(redo_action.offset) @@ -143,21 +143,21 @@ class UndoableStyledBuffer(StyledTextBuffer): stop = self.get_iter_at_offset(redo_action.end) self.delete(start, stop) #the text is correct again, now we create correct styled text - #s_text = StyledText(gtk.TextBuffer.get_text(self, + #s_text = StyledText(Gtk.TextBuffer.get_text(self, # self.get_start_iter(), self.get_end_iter()), redo_action.tags) #self.set_text(s_text) self.place_cursor(self.get_iter_at_offset(redo_action.start)) def _handle_undo(self, undo_action): """ undo of apply of style """ - s_text = StyledText(gtk.TextBuffer.get_text(self, + s_text = StyledText(Gtk.TextBuffer.get_text(self, self.get_start_iter(), self.get_end_iter()), undo_action.tags) self.set_text(s_text) self.place_cursor(self.get_iter_at_offset(undo_action.offset)) def _handle_redo(self, redo_action): """ redo of apply of style """ - s_text = StyledText(gtk.TextBuffer.get_text(self, + s_text = StyledText(Gtk.TextBuffer.get_text(self, self.get_start_iter(), self.get_end_iter()), redo_action.tags_after) self.set_text(s_text) diff --git a/src/gui/widgets/validatedcomboentry.py b/src/gui/widgets/validatedcomboentry.py index 7ff5cad6b..84d870fd8 100644 --- a/src/gui/widgets/validatedcomboentry.py +++ b/src/gui/widgets/validatedcomboentry.py @@ -37,21 +37,23 @@ _LOG = logging.getLogger(".widgets.validatedcomboentry") # GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Gdk +from gi.repository import Gtk #------------------------------------------------------------------------- # # ValidatedComboEntry class # #------------------------------------------------------------------------- -class ValidatedComboEntry(gtk.ComboBox, gtk.CellLayout): +class ValidatedComboEntry(Gtk.ComboBox): """A ComboBoxEntry widget with validation. ValidatedComboEntry may have data type other then string, and is set with the C{datatype} contructor parameter. - Its behaviour is different from gtk.ComboBoxEntry in the way how - the entry part of the widget is handled. While gtk.ComboBoxEntry + Its behaviour is different from Gtk.ComboBoxEntry in the way how + the entry part of the widget is handled. While Gtk.ComboBoxEntry emits the 'changed' signal immediatelly the text in the entry is changed, ValidatedComboEntry emits the signal only after the text is activated (enter is pressed, the focus is moved out) and validated. @@ -66,19 +68,20 @@ class ValidatedComboEntry(gtk.ComboBox, gtk.CellLayout): __gtype_name__ = "ValidatedComboEntry" def __init__(self, datatype, model=None, column=-1, validator=None, width=-1): - gtk.ComboBox.__init__(self, model) + #GObject.GObject.__init__(self, model) + Gtk.ComboBox.__init__(self, model=model) - self._entry = gtk.Entry() + self._entry = Gtk.Entry() self._entry.set_width_chars(width) # - dummy_event = gtk.gdk.Event(gtk.gdk.NOTHING) + dummy_event = Gdk.Event(Gdk.EventType.NOTHING) self._entry.start_editing(dummy_event) # self.add(self._entry) self._entry.show() - self._text_renderer = gtk.CellRendererText() + self._text_renderer = Gtk.CellRendererText() self.pack_start(self._text_renderer, False) self._data_type = datatype @@ -145,7 +148,7 @@ class ValidatedComboEntry(gtk.ComboBox, gtk.CellLayout): """ # FIXME Escape never reaches here, the dialog eats it, I assume. - if event.keyval == gtk.keysyms.Escape: + if event.keyval == Gdk.KEY_Escape: entry.set_text(self._active_text) entry.set_position(-1) return True @@ -174,7 +177,7 @@ class ValidatedComboEntry(gtk.ComboBox, gtk.CellLayout): Called whenever a property of the object is changed. """ - if gparamspec.name == 'has-frame': + if gparamspec and gparamspec.name == 'has-frame': self._has_frame_changed() # Private methods @@ -213,7 +216,7 @@ class ValidatedComboEntry(gtk.ComboBox, gtk.CellLayout): @param data: data value to check @type data: depends on the actual data type of the object @returns: position of 'data' in the model - @returntype: gtk.TreeIter or None + @returntype: Gtk.TreeIter or None """ model = self.get_model() @@ -241,7 +244,7 @@ class ValidatedComboEntry(gtk.ComboBox, gtk.CellLayout): if self._data_column == -1: self._data_column = data_column - self.set_attributes(self._text_renderer, text=data_column) + self.add_attribute(self._text_renderer, "text", data_column) def get_data_column(self): return self._data_column diff --git a/src/gui/widgets/validatedmaskedentry.py b/src/gui/widgets/validatedmaskedentry.py index b5733a814..9069df87a 100644 --- a/src/gui/widgets/validatedmaskedentry.py +++ b/src/gui/widgets/validatedmaskedentry.py @@ -38,9 +38,10 @@ _LOG = logging.getLogger(".widgets.validatedmaskedentry") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gobject -import gtk -import pango +from gi.repository import GObject +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -57,9 +58,9 @@ from gui.widgets.undoableentry import UndoableEntry #------------------------------------------------------------------------- # STOCK_INFO was added only in Gtk 2.8 try: - INFO_ICON = gtk.STOCK_INFO + INFO_ICON = Gtk.STOCK_INFO except AttributeError: - INFO_ICON = gtk.STOCK_DIALOG_INFO + INFO_ICON = Gtk.STOCK_DIALOG_INFO #============================================================================ # @@ -70,17 +71,17 @@ except AttributeError: # #============================================================================ -class FadeOut(gobject.GObject): +class FadeOut(GObject.GObject): """I am a helper class to draw the fading effect of the background Call my methods start() and stop() to control the fading. """ __gsignals__ = { - 'done': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, + 'done': (GObject.SignalFlags.RUN_FIRST, + None, ()), - 'color-changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - (gtk.gdk.Color, )), + 'color-changed': (GObject.SignalFlags.RUN_FIRST, + None, + (Gdk.Color, )), } # How long time it'll take before we start (in ms) @@ -89,7 +90,7 @@ class FadeOut(gobject.GObject): MERGE_COLORS_DELAY = 100 def __init__(self, widget, err_color = "#ffd5d5"): - gobject.GObject.__init__(self) + GObject.GObject.__init__(self) self.ERROR_COLOR = err_color self._widget = widget self._start_color = None @@ -113,7 +114,7 @@ class FadeOut(gobject.GObject): rs += rinc gs += ginc bs += binc - col = gtk.gdk.color_parse("#%02X%02X%02X" % (int(rs) >> 8, + col = Gdk.color_parse("#%02X%02X%02X" % (int(rs) >> 8, int(gs) >> 8, int(bs) >> 8)) self.emit('color-changed', col) @@ -132,9 +133,9 @@ class FadeOut(gobject.GObject): ##_LOG.debug('_start_merging: Starting') func = self._merge_colors(self._start_color, - gtk.gdk.color_parse(self.ERROR_COLOR)).next + Gdk.color_parse(self.ERROR_COLOR)).next self._background_timeout_id = ( - gobject.timeout_add(FadeOut.MERGE_COLORS_DELAY, func)) + GObject.timeout_add(FadeOut.MERGE_COLORS_DELAY, func)) self._countdown_timeout_id = -1 def start(self, color): @@ -154,7 +155,7 @@ class FadeOut(gobject.GObject): self._start_color = color ##_LOG.debug('start: Scheduling') - self._countdown_timeout_id = gobject.timeout_add( + self._countdown_timeout_id = GObject.timeout_add( FadeOut.COMPLAIN_DELAY, self._start_merging) return True @@ -163,31 +164,32 @@ class FadeOut(gobject.GObject): """Stops the fadeout and restores the background color""" ##_LOG.debug('Stopping') if self._background_timeout_id != -1: - gobject.source_remove(self._background_timeout_id) + GObject.source_remove(self._background_timeout_id) self._background_timeout_id = -1 if self._countdown_timeout_id != -1: - gobject.source_remove(self._countdown_timeout_id) + GObject.source_remove(self._countdown_timeout_id) self._countdown_timeout_id = -1 self._widget.update_background(self._start_color) self._done = False -class Tooltip(gtk.Window): +class Tooltip(Gtk.Window): """Tooltip for the Icon in the MaskedEntry""" DEFAULT_DELAY = 500 BORDER_WIDTH = 4 def __init__(self, widget): - gtk.Window.__init__(self, gtk.WINDOW_POPUP) + GObject.GObject.__init__(self, type=Gtk.WindowType.POPUP) # from gtktooltips.c:gtk_tooltips_force_window self.set_app_paintable(True) self.set_resizable(False) self.set_name("gtk-tooltips") self.set_border_width(Tooltip.BORDER_WIDTH) - self.connect('expose-event', self._on__expose_event) + #TODO GTK3: this signal no longer exists. Convert to draw + self.connect('draw', self._on__draw_event) - self._label = gtk.Label() + self._label = Gtk.Label() self.add(self._label) self._show_timeout_id = -1 @@ -199,7 +201,7 @@ class Tooltip(gtk.Window): x, y = widget.window.get_origin() - if widget.flags() & gtk.NO_WINDOW: + if widget.flags() & Gtk.NO_WINDOW: x += widget.allocation.x y += widget.allocation.y @@ -228,10 +230,10 @@ class Tooltip(gtk.Window): return x, y # from gtktooltips.c:gtk_tooltips_paint_window - def _on__expose_event(self, window, event): + def _on__draw_event(self, window, cairo_context): w, h = window.size_request() window.style.paint_flat_box(window.window, - gtk.STATE_NORMAL, gtk.SHADOW_OUT, + Gtk.StateType.NORMAL, Gtk.ShadowType.OUT, None, window, "tooltip", 0, 0, w, h) return False @@ -248,8 +250,8 @@ class Tooltip(gtk.Window): self._label.set_text(text) def hide(self): - gtk.Window.hide(self) - gobject.source_remove(self._show_timeout_id) + Gtk.Window.hide(self) + GObject.source_remove(self._show_timeout_id) self._show_timeout_id = -1 def display(self, widget): @@ -259,7 +261,7 @@ class Tooltip(gtk.Window): if self._show_timeout_id != -1: return - self._show_timeout_id = gobject.timeout_add(Tooltip.DEFAULT_DELAY, + self._show_timeout_id = GObject.timeout_add(Tooltip.DEFAULT_DELAY, self._real_display, widget) @@ -314,8 +316,8 @@ class IconEntry(object): """ def __init__(self, entry): - if not isinstance(entry, gtk.Entry): - raise TypeError("entry must be a gtk.Entry") + if not isinstance(entry, Gtk.Entry): + raise TypeError("entry must be a Gtk.Entry") self._constructed = False self._pixbuf = None self._pixw = 1 @@ -358,21 +360,21 @@ class IconEntry(object): def set_pixbuf(self, pixbuf): """ - @param pixbuf: a gdk.Pixbuf or None + @param pixbuf: a GdkPixbuf.Pixbuf or None """ entry = self._entry - if not isinstance(entry.get_toplevel(), gtk.Window): + if not isinstance(entry.get_toplevel(), Gtk.Window): # For widgets in SlaveViews, wait until they're attached # to something visible, then set the pixbuf entry.connect_object('realize', self.set_pixbuf, pixbuf) return if pixbuf: - if not isinstance(pixbuf, gtk.gdk.Pixbuf): + if not isinstance(pixbuf, GdkPixbuf.Pixbuf): raise TypeError("pixbuf must be a GdkPixbuf") else: # Turning of the icon should also restore the background - entry.modify_base(gtk.STATE_NORMAL, None) + entry.modify_base(Gtk.StateType.NORMAL, None) if not self._pixbuf: return self._pixbuf = pixbuf @@ -405,7 +407,7 @@ class IconEntry(object): return entry = self._entry - if not entry.flags() & gtk.REALIZED: + if not entry.get_realized(): entry.realize() # Hack: Save a reference to the text area, now when its created @@ -413,17 +415,17 @@ class IconEntry(object): self._text_area_pos = self._text_area.get_position() # PyGTK should allow default values for most of the values here. - win = gtk.gdk.Window(entry.window, + win = Gdk.Window(entry.window, self._pixw, self._pixh, - gtk.gdk.WINDOW_CHILD, - (gtk.gdk.ENTER_NOTIFY_MASK | - gtk.gdk.LEAVE_NOTIFY_MASK), - gtk.gdk.INPUT_OUTPUT, + Gdk.WINDOW_CHILD, + (Gdk.EventMask.ENTER_NOTIFY_MASK | + Gdk.EventMask.LEAVE_NOTIFY_MASK), + Gdk.INPUT_OUTPUT, 'icon window', 0, 0, entry.get_visual(), entry.get_colormap(), - gtk.gdk.Cursor(entry.get_display(), gtk.gdk.LEFT_PTR), + Gdk.Cursor.new(entry.get_display(), Gdk.CursorType.LEFT_PTR), '', '', True) self._icon_win = win win.set_user_data(entry) @@ -446,12 +448,12 @@ class IconEntry(object): if not self._icon_win: return - self._entry.modify_base(gtk.STATE_NORMAL, color) + self._entry.modify_base(Gtk.StateType.NORMAL, color) self.draw_pixbuf() def get_background(self): - return self._entry.style.base[gtk.STATE_NORMAL] + return self._entry.style.base[Gtk.StateType.NORMAL] def resize_windows(self): if not self._pixbuf: @@ -464,7 +466,7 @@ class IconEntry(object): textw, texth = self._text_area.get_size() textw = winw - self._pixw - (iconx + icony) - if self._pos == gtk.POS_LEFT: + if self._pos == Gtk.PositionType.LEFT: textx, texty = self._text_area_pos textx += iconx + self._pixw @@ -473,7 +475,7 @@ class IconEntry(object): textw -= 2 self._text_area.move_resize(textx, texty, textw, texth) self._recompute() - elif self._pos == gtk.POS_RIGHT: + elif self._pos == Gtk.PositionType.RIGHT: self._text_area.resize(textw, texth) iconx += textw @@ -505,15 +507,15 @@ class IconEntry(object): # If sensitive draw the icon, regardless of the window emitting the # event since makes it a bit smoother on resize - if self._entry.flags() & gtk.SENSITIVE: + if self._entry.flags() & Gtk.SENSITIVE: win.draw_pixbuf(None, self._pixbuf, 0, 0, 0, 0, self._pixw, self._pixh) def _update_position(self): if self._entry.get_property('xalign') > 0.5: - self._pos = gtk.POS_LEFT + self._pos = Gtk.PositionType.LEFT else: - self._pos = gtk.POS_RIGHT + self._pos = Gtk.PositionType.RIGHT def _recompute(self): # Protect against re-entrancy when inserting text, happens in DateEntry @@ -618,24 +620,24 @@ class MaskedEntry(UndoableEntry): # Virtual methods, note do_size_alloc needs gtk 2.9 + def do_size_allocate(self, allocation): - gtk.Entry.do_size_allocate(self, allocation) + Gtk.Entry.do_size_allocate(self, allocation) - if self.flags() & gtk.REALIZED: + if self.get_realized(): self._icon.resize_windows() def do_expose_event(self, event): - gtk.Entry.do_expose_event(self, event) + Gtk.Entry.do_expose_event(self, event) if event.window == self.window: self._icon.draw_pixbuf() def do_realize(self): - gtk.Entry.do_realize(self) + Gtk.Entry.do_realize(self) self._icon.construct() def do_unrealize(self): self._icon.deconstruct() - gtk.Entry.do_unrealize(self) + Gtk.Entry.do_unrealize(self) # Mask & Fields @@ -659,7 +661,7 @@ class MaskedEntry(UndoableEntry): @param mask: the mask to set """ if not mask: - self.modify_font(pango.FontDescription("sans")) + self.modify_font(Pango.FontDescription("sans")) self._mask = mask return @@ -689,7 +691,7 @@ class MaskedEntry(UndoableEntry): pos += 1 self._mask_fields.append((field_begin, field_end)) - self.modify_font(pango.FontDescription("monospace")) + self.modify_font(Pango.FontDescription("monospace")) self._really_delete_text(0, -1) self._insert_mask(0, input_length) @@ -958,7 +960,7 @@ class MaskedEntry(UndoableEntry): if completion: return completion - completion = gtk.EntryCompletion() + completion = Gtk.EntryCompletion() self.set_completion(completion) return completion @@ -966,15 +968,15 @@ class MaskedEntry(UndoableEntry): return self._completion def set_completion(self, completion): - gtk.Entry.set_completion(self, completion) + Gtk.Entry.set_completion(self, completion) # FIXME objects not supported yet, should it be at all? - #completion.set_model(gtk.ListStore(str, object)) - completion.set_model(gtk.ListStore(gobject.TYPE_STRING)) + #completion.set_model(Gtk.ListStore(str, object)) + completion.set_model(Gtk.ListStore(GObject.TYPE_STRING)) completion.set_text_column(0) #completion.connect("match-selected", #self._on_completion__match_selected) - self._completion = gtk.Entry.get_completion(self) + self._completion = Gtk.Entry.get_completion(self) self.set_exact_completion(self._exact_completion) return @@ -1057,7 +1059,7 @@ class MaskedEntry(UndoableEntry): text = self.get_field_text(field) length = self.get_field_length(field) if len(text) == length: - gtk.gdk.beep() + Gdk.beep() return pos # If the char confirms to the mask, but is a static char, return the @@ -1074,7 +1076,7 @@ class MaskedEntry(UndoableEntry): if field is not False: pos = self.get_field_pos(field+1) if pos is not None: - gobject.idle_add(self.set_position, pos) + GObject.idle_add(self.set_position, pos) return pos return None @@ -1134,11 +1136,11 @@ class MaskedEntry(UndoableEntry): # text[pos+length:end]+ # text[end:]) new_pos = pos+1 - gobject.idle_add(self.set_position, new_pos) + GObject.idle_add(self.set_position, new_pos) # If the field is full, jump to the next field if len(self.get_field_text(field)) == self.get_field_length(field)-1: - gobject.idle_add(self.set_field, field+1, True) + GObject.idle_add(self.set_field, field+1, True) self.set_field(field+1) return new_pos, new_text @@ -1285,11 +1287,11 @@ class MaskedEntry(UndoableEntry): if not self._mask: return - if (direction == gtk.DIR_TAB_FORWARD or - direction == gtk.DIR_DOWN): + if (direction == Gtk.DIR_TAB_FORWARD or + direction == Gtk.DIR_DOWN): inc = 1 - if (direction == gtk.DIR_TAB_BACKWARD or - direction == gtk.DIR_UP): + if (direction == Gtk.DIR_TAB_BACKWARD or + direction == Gtk.DIR_UP): inc = -1 field = self._current_field @@ -1361,9 +1363,9 @@ class MaskedEntry(UndoableEntry): self._selecting = extend_selection def _on_button_press_event(self, entry, event ): - if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 1: self._selecting = True - elif event.type == gtk.gdk.BUTTON_RELEASE and event.button == 1: + elif event.type == Gdk.EventType.BUTTON_RELEASE and event.button == 1: self._selecting = True # IconEntry @@ -1375,7 +1377,7 @@ class MaskedEntry(UndoableEntry): self._icon.set_pixbuf(pixbuf) def set_stock(self, stock_name): - pixbuf = self.render_icon(stock_name, gtk.ICON_SIZE_MENU) + pixbuf = self.render_icon(stock_name, Gtk.IconSize.MENU) self._icon.set_pixbuf(pixbuf) def update_background(self, color): @@ -1387,7 +1389,7 @@ class MaskedEntry(UndoableEntry): def get_icon_window(self): return self._icon.get_icon_window() - # gtk.EntryCompletion convenience function + # Gtk.EntryCompletion convenience function def prefill(self, itemdata, sort=False): if not isinstance(itemdata, (list, tuple)): @@ -1418,7 +1420,7 @@ class MaskedEntry(UndoableEntry): VALIDATION_ICON_WIDTH = 16 MANDATORY_ICON = INFO_ICON -ERROR_ICON = gtk.STOCK_STOP +ERROR_ICON = Gtk.STOCK_STOP class ValidatableMaskedEntry(MaskedEntry): """It extends the MaskedEntry with validation feature. @@ -1431,28 +1433,28 @@ class ValidatableMaskedEntry(MaskedEntry): __gtype_name__ = 'ValidatableMaskedEntry' __gsignals__ = { - 'content-changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, + 'content-changed': (GObject.SignalFlags.RUN_FIRST, + None, ()), - 'validation-changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - (gobject.TYPE_BOOLEAN, )), - 'validate': (gobject.SIGNAL_RUN_LAST, - gobject.TYPE_PYOBJECT, - (gobject.TYPE_PYOBJECT, )), + 'validation-changed': (GObject.SignalFlags.RUN_FIRST, + None, + (GObject.TYPE_BOOLEAN, )), + 'validate': (GObject.SignalFlags.RUN_LAST, + GObject.TYPE_PYOBJECT, + (GObject.TYPE_PYOBJECT, )), 'changed': 'override', } __gproperties__ = { - 'data-type': (gobject.TYPE_PYOBJECT, + 'data-type': (GObject.TYPE_PYOBJECT, 'Data Type of the widget', 'Type object', - gobject.PARAM_READWRITE), - 'mandatory': (gobject.TYPE_BOOLEAN, + GObject.PARAM_READWRITE), + 'mandatory': (GObject.TYPE_BOOLEAN, 'Mandatory', 'Mandatory', False, - gobject.PARAM_READWRITE), + GObject.PARAM_READWRITE), } # FIXME put the data type support back @@ -1632,7 +1634,7 @@ class ValidatableMaskedEntry(MaskedEntry): if not fade: if self.error_icon: self.set_stock(self.error_icon) - self.update_background(gtk.gdk.color_parse(self._fade.ERROR_COLOR)) + self.update_background(Gdk.color_parse(self._fade.ERROR_COLOR)) return # When the fading animation is finished, set the error icon @@ -1713,18 +1715,18 @@ def main(args): # used on AgeOnDateGramplet return ValidationError(_("'%s' is not a valid date value")) - win = gtk.Window() + win = Gtk.Window() win.set_title('ValidatableMaskedEntry test window') - win.set_position(gtk.WIN_POS_CENTER) + win.set_position(Gtk.WindowPosition.CENTER) def cb(window, event): - gtk.main_quit() + Gtk.main_quit() win.connect('delete-event', cb) - vbox = gtk.VBox() + vbox = Gtk.VBox() win.add(vbox) - label = gtk.Label('Pre-filled entry validated against the given list:') - vbox.pack_start(label) + label = Gtk.Label(label='Pre-filled entry validated against the given list:') + vbox.pack_start(label, True, True, 0) widget1 = ValidatableMaskedEntry(str) widget1.set_completion_mode(inline=True, popup=False) @@ -1732,20 +1734,20 @@ def main(args): #widget1.set_default_error_msg(widget1) widget1.prefill(('Birth', 'Death', 'Conseption')) #widget1.set_exact_completion(True) - vbox.pack_start(widget1, fill=False) + vbox.pack_start(widget1, True, False, 0) - label = gtk.Label('Mandatory masked entry validated against user function:') - vbox.pack_start(label) + label = Gtk.Label(label='Mandatory masked entry validated against user function:') + vbox.pack_start(label, True, True, 0) #widget2 = ValidatableMaskedEntry(str, "#e0e0e0", error_icon=None) widget2 = ValidatableMaskedEntry() widget2.set_mask('00/00/0000') widget2.connect('validate', on_validate) widget2.mandatory = True - vbox.pack_start(widget2, fill=False) + vbox.pack_start(widget2, True, False, 0) win.show_all() - gtk.main() + Gtk.main() if __name__ == '__main__': import sys diff --git a/src/gui/widgets/valueaction.py b/src/gui/widgets/valueaction.py index 40a5f3809..e745636ad 100644 --- a/src/gui/widgets/valueaction.py +++ b/src/gui/widgets/valueaction.py @@ -37,8 +37,8 @@ _LOG = logging.getLogger(".widgets.valueaction") # GTK modules # #------------------------------------------------------------------------- -import gobject -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -52,7 +52,7 @@ from gui.widgets.valuetoolitem import ValueToolItem # ValueAction class # #------------------------------------------------------------------------- -class ValueAction(gtk.Action): +class ValueAction(Gtk.Action): """Value action class. (A ValueAction with menu item doesn't make any sense.) @@ -61,8 +61,8 @@ class ValueAction(gtk.Action): __gtype_name__ = "ValueAction" __gsignals__ = { - 'changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, #return value + 'changed': (GObject.SignalFlags.RUN_FIRST, + None, #return value ()), # arguments } @@ -83,7 +83,8 @@ class ValueAction(gtk.Action): @type args: list """ - gtk.Action.__init__(self, name, '', tooltip, None) + GObject.GObject.__init__(self, name=name, label='', tooltip=tooltip, + stock_id=None) self._value = default self._data_type = type(default) @@ -91,7 +92,9 @@ class ValueAction(gtk.Action): # have to be remembered, because we can't access # GtkAction->toolbar_item_type later. self._default_toolitem_type = itemtype - self.set_tool_item_type(itemtype) +##TODO GTK3: following is deprecated, must be replaced by +## itemtype.set_related_action(ValueAction) in calling class? +## self.set_tool_item_type(itemtype) self._args_for_toolitem = args self._handlers = {} @@ -113,14 +116,14 @@ class ValueAction(gtk.Action): Override the default method, to be able to pass the required parameters to the proxy's constructor. - This method is called from gtk.UIManager.ensure_update(), when a + This method is called from Gtk.UIManager.ensure_update(), when a 'toolitem' is found in the UI definition with a name refering to a ValueAction. Thus, to use the action via the UIManager a 'default' - toolitem type has to be set with the gtk.Action.set_tool_item_type() - method, before invoking the gtk.UIManager.ensure_update() method. + toolitem type has to be set with the Gtk.Action.set_tool_item_type() + method, before invoking the Gtk.UIManager.ensure_update() method. Widgets other than the default type has to be created and added - manually with the gtk.Action.connect_proxy() method. + manually with the Gtk.Action.connect_proxy() method. @returns: a toolbar item connected to the action. @returntype: L{ValueToolItem} subclass @@ -152,7 +155,7 @@ class ValueAction(gtk.Action): self._handlers[proxy] = proxy.connect('changed', self._on_proxy_changed) # if this is called the proxy will appear on the proxy list twice. why? - #gtk.Action.connect_proxy(self, proxy) + #Gtk.Action.connect_proxy(self, proxy) def set_value(self, value): """Set value to action.""" diff --git a/src/gui/widgets/valuetoolitem.py b/src/gui/widgets/valuetoolitem.py index 655bbb5e4..b44b00a1a 100644 --- a/src/gui/widgets/valuetoolitem.py +++ b/src/gui/widgets/valuetoolitem.py @@ -37,8 +37,8 @@ _LOG = logging.getLogger(".widgets.valuetoolitem") # GTK modules # #------------------------------------------------------------------------- -import gobject -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- @@ -46,7 +46,7 @@ import gtk # ValueToolItem class # #------------------------------------------------------------------------- -class ValueToolItem(gtk.ToolItem): +class ValueToolItem(Gtk.ToolItem): """ValueToolItem is an abstract toolbar proxy for ValueAction. For each kind of widget a separete tool item proxy has to be @@ -56,13 +56,13 @@ class ValueToolItem(gtk.ToolItem): __gtype_name__ = "ValueToolItem" __gsignals__ = { - 'changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, #return value + 'changed': (GObject.SignalFlags.RUN_FIRST, + None, #return value ()), # arguments } def __init__(self, data_type, args): - gtk.ToolItem.__init__(self) + GObject.GObject.__init__(self) self._data_type = data_type diff --git a/src/guiQML/grampsqml.py b/src/guiQML/grampsqml.py index 91b7f93a1..5ff084392 100644 --- a/src/guiQML/grampsqml.py +++ b/src/guiQML/grampsqml.py @@ -100,7 +100,7 @@ class GrampsQML(object): def startqml(errors, argparser): """ - Main startup function started via gobject.timeout_add + Main startup function started via GObject.timeout_add First action inside the gtk loop """ from guiQML.questiondialog import ErrorDialog, run_dialog_standalone diff --git a/src/plugins/BookReport.py b/src/plugins/BookReport.py index d442ab3fa..0e0585b02 100644 --- a/src/plugins/BookReport.py +++ b/src/plugins/BookReport.py @@ -59,8 +59,8 @@ except: # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -946,7 +946,7 @@ class BookReportSelector(ManagedWindow): while True: response = item_dialog.window.run() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: # dialog will be closed by connect, now continue work while # rest of dialog is unresponsive, release when finished subject = _get_subject(option_class, self.db) @@ -954,10 +954,10 @@ class BookReportSelector(ManagedWindow): self.book.set_item(row, item) item_dialog.close() break - elif response == gtk.RESPONSE_CANCEL: + elif response == Gtk.ResponseType.CANCEL: item_dialog.close() break - elif response == gtk.RESPONSE_DELETE_EVENT: + elif response == Gtk.ResponseType.DELETE_EVENT: #just stop, in ManagedWindow, delete-event is already coupled to #correct action. break @@ -967,7 +967,7 @@ class BookReportSelector(ManagedWindow): Double-click on the current book selection is the same as setup. Right click evokes the context menu. """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: self.on_setup_clicked(obj) elif gui.utils.is_right_click(event): self.build_book_context_menu(event) @@ -977,7 +977,7 @@ class BookReportSelector(ManagedWindow): Double-click on the available selection is the same as add. Right click evokes the context menu. """ - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: self.on_add_clicked(obj) elif gui.utils.is_right_click(event): self.build_avail_context_menu(event) @@ -991,21 +991,21 @@ class BookReportSelector(ManagedWindow): else: sensitivity = 0 entries = [ - (gtk.STOCK_GO_UP, self.on_up_clicked, sensitivity), - (gtk.STOCK_GO_DOWN, self.on_down_clicked, sensitivity), + (Gtk.STOCK_GO_UP, self.on_up_clicked, sensitivity), + (Gtk.STOCK_GO_DOWN, self.on_down_clicked, sensitivity), (_("Setup"), self.on_setup_clicked, sensitivity), - (gtk.STOCK_REMOVE, self.on_remove_clicked, sensitivity), + (Gtk.STOCK_REMOVE, self.on_remove_clicked, sensitivity), (None,None,0), - (gtk.STOCK_CLEAR, self.on_clear_clicked, 1), - (gtk.STOCK_SAVE, self.on_save_clicked, 1), - (gtk.STOCK_OPEN, self.on_open_clicked, 1), + (Gtk.STOCK_CLEAR, self.on_clear_clicked, 1), + (Gtk.STOCK_SAVE, self.on_save_clicked, 1), + (Gtk.STOCK_OPEN, self.on_open_clicked, 1), (_("Edit"), self.on_edit_clicked,1 ), ] - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_('Book Menu')) for stock_id, callback, sensitivity in entries: - item = gtk.ImageMenuItem(stock_id) + item = Gtk.ImageMenuItem(stock_id) if callback: item.connect("activate", callback) item.set_sensitive(sensitivity) @@ -1022,13 +1022,13 @@ class BookReportSelector(ManagedWindow): else: sensitivity = 0 entries = [ - (gtk.STOCK_ADD, self.on_add_clicked, sensitivity), + (Gtk.STOCK_ADD, self.on_add_clicked, sensitivity), ] - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_('Available Items Menu')) for stock_id, callback, sensitivity in entries: - item = gtk.ImageMenuItem(stock_id) + item = Gtk.ImageMenuItem(stock_id) if callback: item.connect("activate", callback) item.set_sensitive(sensitivity) @@ -1145,11 +1145,11 @@ class BookItemDialog(ReportDialog): # _BookFormatComboBox # #------------------------------------------------------------------------- -class _BookFormatComboBox(gtk.ComboBox): +class _BookFormatComboBox(Gtk.ComboBox): def __init__(self, active): - gtk.ComboBox.__init__(self) + GObject.GObject.__init__(self) pmgr = GuiPluginManager.get_instance() self.__bookdoc_plugins = [] @@ -1157,9 +1157,9 @@ class _BookFormatComboBox(gtk.ComboBox): if plugin.get_text_support() and plugin.get_draw_support(): self.__bookdoc_plugins.append(plugin) - self.store = gtk.ListStore(gobject.TYPE_STRING) + self.store = Gtk.ListStore(GObject.TYPE_STRING) self.set_model(self.store) - cell = gtk.CellRendererText() + cell = Gtk.CellRendererText() self.pack_start(cell, True) self.add_attribute(cell, 'text', 0) @@ -1233,7 +1233,7 @@ class BookReportDialog(DocReportDialog): this_style_name,style_sheet.get_cell_style(this_style_name)) response = self.window.run() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: try: self.make_report() except (IOError,OSError),msg: diff --git a/src/plugins/docgen/GtkPrint.py b/src/plugins/docgen/GtkPrint.py index 9eff3494d..f1454191f 100644 --- a/src/plugins/docgen/GtkPrint.py +++ b/src/plugins/docgen/GtkPrint.py @@ -21,7 +21,7 @@ # $Id$ -"""Printing interface based on gtk.Print* classes. +"""Printing interface based on Gtk.Print* classes. """ #------------------------------------------------------------------------ @@ -62,9 +62,7 @@ log = logging.getLogger(".GtkPrint") #------------------------------------------------------------------------- import cairo try: # the Gramps-Connect server has no DISPLAY - import gtk - if gtk.pygtk_version < (2, 10, 0): - raise UnavailableError(_("PyGtk 2.10 or later is required")) + from gi.repository import Gtk except: pass @@ -96,12 +94,12 @@ MARGIN = 6 #------------------------------------------------------------------------ def paperstyle_to_pagesetup(paper_style): - """Convert a PaperStyle instance into a gtk.PageSetup instance. + """Convert a PaperStyle instance into a Gtk.PageSetup instance. @param paper_style: Gramps paper style object to convert @param type: PaperStyle @return: page_setup - @rtype: gtk.PageSetup + @rtype: Gtk.PageSetup """ # paper size names according to 'PWG Candidate Standard 5101.1-2002' # ftp://ftp.pwg.org/pub/pwg/candidates/cs-pwgmsn10-20020226-5101.1.pdf @@ -134,7 +132,7 @@ def paperstyle_to_pagesetup(paper_style): # All sizes not included in the translation table (even if a standard size) # are handled as custom format, because we are not intelligent enough. if gramps_paper_name in gramps_to_gtk: - paper_size = gtk.PaperSize(gramps_to_gtk[gramps_paper_name]) + paper_size = Gtk.PaperSize(gramps_to_gtk[gramps_paper_name]) log.debug("Selected paper size: %s" % gramps_to_gtk[gramps_paper_name]) else: if paper_style.get_orientation() == PAPER_PORTRAIT: @@ -143,31 +141,31 @@ def paperstyle_to_pagesetup(paper_style): else: paper_width = gramps_paper_size.get_height() * 10 paper_height = gramps_paper_size.get_width() * 10 - paper_size = gtk.paper_size_new_custom("custom", + paper_size = Gtk.paper_size_new_custom("custom", "Custom Size", paper_width, paper_height, - gtk.UNIT_MM) + Gtk.UNIT_MM) log.debug("Selected paper size: (%f,%f)" % (paper_width, paper_height)) - page_setup = gtk.PageSetup() + page_setup = Gtk.PageSetup() page_setup.set_paper_size(paper_size) # Set paper orientation if paper_style.get_orientation() == PAPER_PORTRAIT: - page_setup.set_orientation(gtk.PAGE_ORIENTATION_PORTRAIT) + page_setup.set_orientation(Gtk.PAGE_ORIENTATION_PORTRAIT) else: - page_setup.set_orientation(gtk.PAGE_ORIENTATION_LANDSCAPE) + page_setup.set_orientation(Gtk.PAGE_ORIENTATION_LANDSCAPE) # Set paper margins page_setup.set_top_margin(paper_style.get_top_margin() * 10, - gtk.UNIT_MM) + Gtk.UNIT_MM) page_setup.set_bottom_margin(paper_style.get_bottom_margin() * 10, - gtk.UNIT_MM) + Gtk.UNIT_MM) page_setup.set_left_margin(paper_style.get_left_margin() * 10, - gtk.UNIT_MM) + Gtk.UNIT_MM) page_setup.set_right_margin(paper_style.get_right_margin() * 10, - gtk.UNIT_MM) + Gtk.UNIT_MM) return page_setup @@ -326,7 +324,7 @@ class PrintPreview(object): width = self._swin.allocation.width - 2 * MARGIN height = self._swin.allocation.height - 2 * MARGIN - if self._swin.get_shadow_type() != gtk.SHADOW_NONE: + if self._swin.get_shadow_type() != Gtk.ShadowType.NONE: width -= 2 * self._swin.style.xthickness height -= 2 * self._swin.style.ythickness @@ -379,13 +377,13 @@ class PrintPreview(object): cr.set_line_width(1) cr.stroke() - if self._orientation == gtk.PAGE_ORIENTATION_LANDSCAPE: + if self._orientation == Gtk.PAGE_ORIENTATION_LANDSCAPE: cr.rotate(radians(-90)) cr.translate(-paper_h, 0) ##page_setup = self._context.get_page_setup() - ##cr.translate(page_setup.get_left_margin(gtk.UNIT_POINTS), - ##page_setup.get_top_margin(gtk.UNIT_POINTS)) + ##cr.translate(page_setup.get_left_margin(Gtk.UNIT_POINTS), + ##page_setup.get_top_margin(Gtk.UNIT_POINTS)) ##cr.set_source_surface(self.get_page(0)) ##cr.paint() @@ -472,10 +470,10 @@ class PrintPreview(object): def start(self): # get paper/page dimensions page_setup = self._context.get_page_setup() - self._paper_width = page_setup.get_paper_width(gtk.UNIT_POINTS) - self._paper_height = page_setup.get_paper_height(gtk.UNIT_POINTS) - self._page_width = page_setup.get_page_width(gtk.UNIT_POINTS) - self._page_height = page_setup.get_page_height(gtk.UNIT_POINTS) + self._paper_width = page_setup.get_paper_width(Gtk.UNIT_POINTS) + self._paper_height = page_setup.get_paper_height(Gtk.UNIT_POINTS) + self._page_width = page_setup.get_page_width(Gtk.UNIT_POINTS) + self._page_height = page_setup.get_page_height(Gtk.UNIT_POINTS) self._orientation = page_setup.get_orientation() # get the total number of pages @@ -512,7 +510,7 @@ class GtkPrint(libcairodoc.CairoDoc): page_setup = paperstyle_to_pagesetup(self.paper) # set up a print operation - operation = gtk.PrintOperation() + operation = Gtk.PrintOperation() operation.set_default_page_setup(page_setup) operation.connect("begin_print", self.on_begin_print) operation.connect("draw_page", self.on_draw_page) @@ -526,11 +524,11 @@ class GtkPrint(libcairodoc.CairoDoc): # run print dialog while True: self.preview = None - res = operation.run(gtk.PRINT_OPERATION_ACTION_PRINT_DIALOG) + res = operation.run(Gtk.PRINT_OPERATION_ACTION_PRINT_DIALOG) if self.preview is None: # cancel or print break # set up printing again; can't reuse PrintOperation? - operation = gtk.PrintOperation() + operation = Gtk.PrintOperation() operation.set_default_page_setup(page_setup) operation.connect("begin_print", self.on_begin_print) operation.connect("draw_page", self.on_draw_page) @@ -541,7 +539,7 @@ class GtkPrint(libcairodoc.CairoDoc): operation.set_print_settings(PRINT_SETTINGS) # store print settings if printing was successful - if res == gtk.PRINT_OPERATION_RESULT_APPLY: + if res == Gtk.PRINT_OPERATION_RESULT_APPLY: PRINT_SETTINGS = operation.get_print_settings() def on_begin_print(self, operation, context): @@ -592,7 +590,7 @@ class GtkPrint(libcairodoc.CairoDoc): self.preview = PrintPreview(operation, preview, context, parent) - # give a dummy cairo context to gtk.PrintContext, + # give a dummy cairo context to Gtk.PrintContext, # PrintPreview will update it with the real one try: width = int(round(context.get_width())) diff --git a/src/plugins/docgen/PdfDoc.py b/src/plugins/docgen/PdfDoc.py index e328cb2e0..217897485 100644 --- a/src/plugins/docgen/PdfDoc.py +++ b/src/plugins/docgen/PdfDoc.py @@ -54,9 +54,8 @@ LOG = logging.getLogger(".PdfDoc") # GTK modules # #------------------------------------------------------------------------- -import pango +from gi.repository import Pango, PangoCairo import cairo -import pangocairo #------------------------------------------------------------------------ # @@ -96,17 +95,17 @@ class PdfDoc(libcairodoc.CairoDoc): except: raise ReportError(_("Could not create %s") % filename) surface.set_fallback_resolution(300, 300) - cr = pangocairo.CairoContext(cairo.Context(surface)) + cr = PangoCairo.create_context(cairo.Context(surface)) - fontmap = pangocairo.cairo_font_map_get_default() + fontmap = PangoCairo.font_map_get_default() saved_resolution = fontmap.get_resolution() fontmap.set_resolution(DPI) pango_context = fontmap.create_context() options = cairo.FontOptions() options.set_hint_metrics(cairo.HINT_METRICS_OFF) - pangocairo.context_set_font_options(pango_context, options) - layout = pango.Layout(pango_context) + PangoCairo.context_set_font_options(pango_context, options) + layout = Pango.Layout(pango_context) cr.update_context(pango_context) # paginate the document diff --git a/src/plugins/export/ExportCsv.py b/src/plugins/export/ExportCsv.py index 948d285db..f0a2a4f0a 100644 --- a/src/plugins/export/ExportCsv.py +++ b/src/plugins/export/ExportCsv.py @@ -188,23 +188,23 @@ class CSVWriterOptionBox(WriterOptionBox): self.translate_headers_check = None def get_option_box(self): - import gtk + from gi.repository import Gtk option_box = WriterOptionBox.get_option_box(self) - self.include_individuals_check = gtk.CheckButton(_("Include people")) - self.include_marriages_check = gtk.CheckButton(_("Include marriages")) - self.include_children_check = gtk.CheckButton(_("Include children")) - self.translate_headers_check = gtk.CheckButton(_("Translate headers")) + self.include_individuals_check = Gtk.CheckButton(_("Include people")) + self.include_marriages_check = Gtk.CheckButton(_("Include marriages")) + self.include_children_check = Gtk.CheckButton(_("Include children")) + self.translate_headers_check = Gtk.CheckButton(_("Translate headers")) self.include_individuals_check.set_active(1) self.include_marriages_check.set_active(1) self.include_children_check.set_active(1) self.translate_headers_check.set_active(1) - option_box.pack_start(self.include_individuals_check, False) - option_box.pack_start(self.include_marriages_check, False) - option_box.pack_start(self.include_children_check, False) - option_box.pack_start(self.translate_headers_check, False) + option_box.pack_start(self.include_individuals_check, False, True, 0) + option_box.pack_start(self.include_marriages_check, False, True, 0) + option_box.pack_start(self.include_children_check, False, True, 0) + option_box.pack_start(self.translate_headers_check, False, True, 0) return option_box diff --git a/src/plugins/export/ExportPkg.py b/src/plugins/export/ExportPkg.py index 6a56b0c74..b6646ce3b 100644 --- a/src/plugins/export/ExportPkg.py +++ b/src/plugins/export/ExportPkg.py @@ -52,7 +52,7 @@ log = logging.getLogger(".WritePkg") # GNOME/GTK modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -161,14 +161,14 @@ class PackageWriter(object): # if os.path.isfile(name): # archive.add(name) - # fs_top = gtk.FileChooserDialog("%s - GRAMPS" % _("Select file"), - # buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, - # gtk.STOCK_OK, gtk.RESPONSE_OK) + # fs_top = Gtk.FileChooserDialog("%s - GRAMPS" % _("Select file"), + # buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + # Gtk.STOCK_OK, Gtk.ResponseType.OK) # ) # response = fs_top.run() - # if response == gtk.RESPONSE_OK: + # if response == Gtk.ResponseType.OK: # fs_ok_clicked(fs_top) - # elif response == gtk.RESPONSE_CANCEL: + # elif response == Gtk.ResponseType.CANCEL: # fs_close_window(fs_top) # fs_top.destroy() diff --git a/src/plugins/gramplet/AgeOnDateGramplet.py b/src/plugins/gramplet/AgeOnDateGramplet.py index c86b74853..5275e6bf5 100644 --- a/src/plugins/gramplet/AgeOnDateGramplet.py +++ b/src/plugins/gramplet/AgeOnDateGramplet.py @@ -54,14 +54,14 @@ class AgeOnDateGramplet(Gramplet): Constructs the GUI, consisting of a message, an entry, and a Run button. """ - import gtk + from gi.repository import Gtk # GUI setup: self.set_tooltip(_("Enter a date, click Run")) - vbox = gtk.VBox() - hbox = gtk.HBox() + vbox = Gtk.VBox() + hbox = Gtk.HBox() # label, entry - description = gtk.TextView() - description.set_wrap_mode(gtk.WRAP_WORD) + description = Gtk.TextView() + description.set_wrap_mode(Gtk.WrapMode.WORD) description.set_editable(False) buffer = description.get_buffer() buffer.set_text(_("Enter a valid date (like YYYY-MM-DD) in the" @@ -69,17 +69,17 @@ class AgeOnDateGramplet(Gramplet): " the ages for everyone in your Family Tree on" " that date. You can then sort by the age column," " and double-click the row to view or edit.")) - label = gtk.Label() + label = Gtk.Label() label.set_text(_("Date") + ":") - self.entry = gtk.Entry() - button = gtk.Button(_("Run")) + self.entry = Gtk.Entry() + button = Gtk.Button(_("Run")) button.connect("clicked", self.run) ##self.filter = - hbox.pack_start(label, False) + hbox.pack_start(label, False, True, 0) hbox.pack_start(self.entry, True) vbox.pack_start(description, True) - vbox.pack_start(hbox, False) - vbox.pack_start(button, False) + vbox.pack_start(hbox, False, True, 0) + vbox.pack_start(button, False, True, 0) self.gui.get_container_widget().remove(self.gui.textview) self.gui.get_container_widget().add_with_viewport(vbox) vbox.show_all() diff --git a/src/plugins/gramplet/Attributes.py b/src/plugins/gramplet/Attributes.py index 7f98e4dc5..55f43f058 100644 --- a/src/plugins/gramplet/Attributes.py +++ b/src/plugins/gramplet/Attributes.py @@ -23,7 +23,7 @@ from gui.listmodel import ListModel, NOSORT from gui.plug.quick import run_quick_report_by_name from gen.plug import Gramplet from gen.ggettext import gettext as _ -import gtk +from gi.repository import Gtk class Attributes(Gramplet): """ @@ -42,7 +42,7 @@ class Attributes(Gramplet): tip = _('Double-click on a row to view a quick report showing ' 'all people with the selected attribute.') self.set_tooltip(tip) - top = gtk.TreeView() + top = Gtk.TreeView() titles = [(_('Key'), 1, 100), (_('Value'), 2, 100)] self.model = ListModel(top, titles, event_func=self.display_report) diff --git a/src/plugins/gramplet/Backlinks.py b/src/plugins/gramplet/Backlinks.py index d235e4872..3b4d19be7 100644 --- a/src/plugins/gramplet/Backlinks.py +++ b/src/plugins/gramplet/Backlinks.py @@ -24,7 +24,7 @@ from gui.listmodel import ListModel, NOSORT from Utils import navigation_label from gen.plug import Gramplet from gen.ggettext import gettext as _ -import gtk +from gi.repository import Gtk class Backlinks(Gramplet): """ @@ -40,7 +40,7 @@ class Backlinks(Gramplet): """ Build the GUI interface. """ - top = gtk.TreeView() + top = Gtk.TreeView() titles = [(_('Type'), 1, 100), (_('Name'), 2, 100)] self.model = ListModel(top, titles) diff --git a/src/plugins/gramplet/CalendarGramplet.py b/src/plugins/gramplet/CalendarGramplet.py index 877c2e08f..6488e8420 100644 --- a/src/plugins/gramplet/CalendarGramplet.py +++ b/src/plugins/gramplet/CalendarGramplet.py @@ -35,12 +35,12 @@ import gen.lib #------------------------------------------------------------------------ class CalendarGramplet(Gramplet): def init(self): - import gtk + from gi.repository import Gtk self.set_tooltip(_("Double-click a day for details")) - self.gui.calendar = gtk.Calendar() + self.gui.calendar = Gtk.Calendar() self.gui.calendar.connect('day-selected-double-click', self.double_click) if self.uistate.screen_width() <= 1024: - self.gui.calendar.set_display_options(gtk.CALENDAR_SHOW_HEADING) + self.gui.calendar.set_display_options(Gtk.CALENDAR_SHOW_HEADING) self.gui.get_container_widget().remove(self.gui.textview) self.gui.get_container_widget().add_with_viewport(self.gui.calendar) self.gui.calendar.show() diff --git a/src/plugins/gramplet/Children.py b/src/plugins/gramplet/Children.py index 2ffd36c61..9374c65e9 100644 --- a/src/plugins/gramplet/Children.py +++ b/src/plugins/gramplet/Children.py @@ -27,7 +27,7 @@ from gen.display.name import displayer as name_displayer from gen.utils import get_birth_or_fallback, get_death_or_fallback import gen.datehandler from gen.errors import WindowActiveError -import gtk +from gi.repository import Gtk class Children(Gramplet): """ @@ -79,7 +79,7 @@ class PersonChildren(Children): """ tip = _('Double-click on a row to edit the selected child.') self.set_tooltip(tip) - top = gtk.TreeView() + top = Gtk.TreeView() titles = [('', NOSORT, 50,), (_('Child'), 1, 250), (_('Birth Date'), 3, 100), @@ -175,7 +175,7 @@ class FamilyChildren(Children): """ tip = _('Double-click on a row to edit the selected child.') self.set_tooltip(tip) - top = gtk.TreeView() + top = Gtk.TreeView() titles = [('', NOSORT, 50,), (_('Child'), 1, 250), (_('Birth Date'), 3, 100), diff --git a/src/plugins/gramplet/Citations.py b/src/plugins/gramplet/Citations.py index ec1d5c7bc..969510699 100644 --- a/src/plugins/gramplet/Citations.py +++ b/src/plugins/gramplet/Citations.py @@ -25,7 +25,7 @@ from gui.listmodel import ListModel, NOSORT from gen.plug import Gramplet from gen.ggettext import gettext as _ from gen.errors import WindowActiveError -import gtk +from gi.repository import Gtk class Citations(Gramplet): """ @@ -43,7 +43,7 @@ class Citations(Gramplet): """ tip = _('Double-click on a row to edit the selected source/citation.') self.set_tooltip(tip) - top = gtk.TreeView() + top = Gtk.TreeView() titles = [('', NOSORT, 50,), (_('Source/Citation'), 1, 350), (_('Author'), 2, 200), diff --git a/src/plugins/gramplet/EditExifMetadata.py b/src/plugins/gramplet/EditExifMetadata.py index e5c5c72d1..79b28981f 100644 --- a/src/plugins/gramplet/EditExifMetadata.py +++ b/src/plugins/gramplet/EditExifMetadata.py @@ -42,7 +42,7 @@ import subprocess # ----------------------------------------------------------------------------- # GTK modules # ----------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk # ----------------------------------------------------------------------------- # GRAMPS modules @@ -269,43 +269,43 @@ class EditExifMetadata(Gramplet): """ will display all exif metadata and all buttons. """ - main_vbox = gtk.VBox(False, 0) + main_vbox = Gtk.VBox(False, 0) main_vbox.set_border_width(10) # Displays the file name - medialabel = gtk.HBox(False, 0) + medialabel = Gtk.HBox(False, 0) label = self.__create_label("MediaLabel", False, False, False) medialabel.pack_start(label, expand =False) main_vbox.pack_start(medialabel, expand =False, fill =True, padding =0) # Displays mime type information - mimetype = gtk.HBox(False, 0) + mimetype = Gtk.HBox(False, 0) label = self.__create_label("MimeType", False, False, False) mimetype.pack_start(label, expand =False) main_vbox.pack_start(mimetype, expand =False, fill =True, padding =0) # image dimensions - imagesize = gtk.HBox(False, 0) + imagesize = Gtk.HBox(False, 0) label = self.__create_label("ImageSize", False, False, False) imagesize.pack_start(label, expand =False, fill =False, padding =0) main_vbox.pack_start(imagesize, expand =False, fill =True, padding =0) # Displays all plugin messages - messagearea = gtk.HBox(False, 0) + messagearea = Gtk.HBox(False, 0) label = self.__create_label("MessageArea", False, False, False) messagearea.pack_start(label, expand =False) main_vbox.pack_start(messagearea, expand =False, fill =True, padding =0) # Separator line before the buttons - main_vbox.pack_start(gtk.HSeparator(), expand =False, fill =False, padding =0) + main_vbox.pack_start(Gtk.HSeparator(, True, True, 0), expand =False, fill =False, padding =0) # Thumbnail, ImageType, and Convert buttons - new_hbox = gtk.HBox(False, 0) + new_hbox = Gtk.HBox(False, 0) main_vbox.pack_start(new_hbox, expand =False, fill =False, padding =0) new_hbox.show() # Thumbnail button - event_box = gtk.EventBox() + event_box = Gtk.EventBox() new_hbox.pack_start(event_box, expand =False, fill =False, padding =0) event_box.show() @@ -314,11 +314,11 @@ class EditExifMetadata(Gramplet): event_box.add(button) # Image Types - event_box = gtk.EventBox() + event_box = Gtk.EventBox() new_hbox.pack_start(event_box, expand =False, fill =False, padding =0) event_box.show() - combo_box = gtk.combo_box_new_text() + combo_box = Gtk.ComboBoxText() combo_box.append_text(_validconvert[0]) combo_box.set_active(0) combo_box.set_sensitive(False) @@ -327,28 +327,28 @@ class EditExifMetadata(Gramplet): combo_box.show() # Convert button - event_box = gtk.EventBox() + event_box = Gtk.EventBox() new_hbox.pack_start(event_box, expand =False, fill =False, padding =0) event_box.show() button = self.__create_button( - "Convert", False, [self.__convert_dialog], gtk.STOCK_CONVERT) + "Convert", False, [self.__convert_dialog], Gtk.STOCK_CONVERT) event_box.add(button) # Connect the changed signal to ImageType self.exif_widgets["ImageTypes"].connect("changed", self.changed_cb) # Help, Edit, and Delete buttons - new_hbox = gtk.HBox(False, 0) + new_hbox = Gtk.HBox(False, 0) main_vbox.pack_start(new_hbox, expand =False, fill =False, padding =0) new_hbox.show() for (widget, text, callback, icon, is_sensitive) in [ - ("Help", False, [self.__help_page], gtk.STOCK_HELP, True), - ("Edit", False, [self.display_edit], gtk.STOCK_EDIT, False), - ("Delete", False, [self._wipe_dialog], gtk.STOCK_DELETE, False) ]: + ("Help", False, [self.__help_page], Gtk.STOCK_HELP, True), + ("Edit", False, [self.display_edit], Gtk.STOCK_EDIT, False), + ("Delete", False, [self._wipe_dialog], Gtk.STOCK_DELETE, False) ]: - event_box = gtk.EventBox() + event_box = Gtk.EventBox() new_hbox.pack_start(event_box, expand =False, fill =False, padding =0) event_box.show() @@ -361,7 +361,7 @@ class EditExifMetadata(Gramplet): main_vbox.pack_start(self.view, expand =False, fill =True, padding =5) # Separator line before the Total - main_vbox.pack_start(gtk.HSeparator(), expand =False, fill =True, padding =5) + main_vbox.pack_start(Gtk.HSeparator(, True, True, 0), expand =False, fill =True, padding =5) # number of key/ value pairs shown label = self.__create_label("Total", False, False, False) @@ -591,9 +591,9 @@ class EditExifMetadata(Gramplet): creates and returns a button for display """ if (icon and not text): - button = gtk.Button(stock =icon) + button = Gtk.Button(stock =icon) else: - button = gtk.Button(text) + button = Gtk.Button(text) if callback is not []: for call_ in callback: @@ -612,7 +612,7 @@ class EditExifMetadata(Gramplet): """ creates a label for this addon. """ - label = gtk.Label() + label = Gtk.Label() if text: label.set_text(text) @@ -634,7 +634,7 @@ class EditExifMetadata(Gramplet): """ handles the creation of an event_box and entry containers and returns them... """ - evt_box = gtk.EventBox() + evt_box = Gtk.EventBox() if (width and height): evt_box.set_size_request(width, height) @@ -649,7 +649,7 @@ class EditExifMetadata(Gramplet): entry.connect('validate', call_, pos) elif type_ == "Entry": - entry = gtk.Entry(max = length_) + entry = Gtk.Entry(max = length_) if cb_list: for call_ in cb_list: @@ -667,7 +667,7 @@ class EditExifMetadata(Gramplet): """ tip = _("Click Close to close this Thumbnail View Area.") - self.tbarea = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.tbarea = Gtk.Window(Gtk.WindowType.TOPLEVEL) self.tbarea.tooltip = tip self.tbarea.set_title(_("Thumbnail View Area")) @@ -697,7 +697,7 @@ class EditExifMetadata(Gramplet): width, height = tdata.dimensions # Create a GTK pixbuf loader to read the thumbnail data - pbloader = gtk.gdk.PixbufLoader() + pbloader = GdkPixbuf.PixbufLoader() pbloader.write(tdata) except (IOError, OSError): return pbloader, width, height @@ -715,7 +715,7 @@ class EditExifMetadata(Gramplet): return pbloader, width, height # Create a GTK pixbuf loader to read the thumbnail data - pbloader = gtk.gdk.PixbufLoader() + pbloader = GdkPixbuf.PixbufLoader() pbloader.write(preview.data) return pbloader, width, height @@ -724,10 +724,10 @@ class EditExifMetadata(Gramplet): """ builds the thumbnail viewing area. """ - main_vbox = gtk.VBox() + main_vbox = Gtk.VBox() main_vbox.set_size_request((width - 30), (height - 30)) - hbox = gtk.HBox(False, 0) + hbox = Gtk.HBox(False, 0) main_vbox.pack_start(hbox, expand =False, fill =False, padding =5) hbox.show() @@ -735,7 +735,7 @@ class EditExifMetadata(Gramplet): pixbuf = pbloader.get_pixbuf() pbloader.close() - imgwidget = gtk.Image() + imgwidget = Gtk.Image() imgwidget.set_from_pixbuf(pixbuf) hbox.pack_start(imgwidget, expand = False, fill =True, padding =0) imgwidget.show() @@ -919,7 +919,7 @@ class EditExifMetadata(Gramplet): # with a screen height of 600 maximum... width_ = int(main_scr_width * 0.60) - edtarea = gtk.Window(gtk.WINDOW_TOPLEVEL) + edtarea = Gtk.Window(Gtk.WindowType.TOPLEVEL) edtarea.tooltip = tip edtarea.set_title( self.orig_image.get_description()) edtarea.set_size_request((width_ + 45), 550) @@ -928,13 +928,13 @@ class EditExifMetadata(Gramplet): edtarea.connect("destroy", lambda w: edtarea.destroy()) # create a new scrolled window. - scrollwindow = gtk.ScrolledWindow() + scrollwindow = Gtk.ScrolledWindow() scrollwindow.set_size_request(width_, 600) scrollwindow.set_border_width(10) width_ -= 10 # width = 594 # will show scrollbars only when necessary - scrollwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scrollwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) edtarea.add(scrollwindow) scrollwindow.show() @@ -972,7 +972,7 @@ class EditExifMetadata(Gramplet): """ creates the content for the edit window... """ - main_vbox = gtk.VBox() + main_vbox = Gtk.VBox() main_vbox.set_border_width(10) width_ -= 10 # width = 584 @@ -985,19 +985,19 @@ class EditExifMetadata(Gramplet): # Media Title Frame... width_ -= 10 # 574 on a screen width of 1024 - title_frame = gtk.Frame(_("Media Object Title")) + title_frame = Gtk.Frame(_("Media Object Title")) title_frame.set_size_request(width_, 60) # width = 574 main_vbox.pack_start(title_frame, expand =False, fill =True, padding =10) title_frame.show() - new_vbox = gtk.VBox(False, 0) + new_vbox = Gtk.VBox(False, 0) title_frame.add(new_vbox) new_vbox.show() for widget, text in [ ("MediaTitle", _("media Title: ")) ]: - new_hbox = gtk.HBox(False, 0) + new_hbox = Gtk.HBox(False, 0) new_vbox.pack_start(new_hbox, expand =False, fill =False, padding =5) new_hbox.show() @@ -1009,12 +1009,12 @@ class EditExifMetadata(Gramplet): # create the data fields... # ***Description, Artist, and Copyright - gen_frame = gtk.Frame(_("General Data")) + gen_frame = Gtk.Frame(_("General Data")) gen_frame.set_size_request(width_, 155) # width = 574 main_vbox.pack_start(gen_frame, expand =False, fill =True, padding =10) gen_frame.show() - new_vbox = gtk.VBox(False, 0) + new_vbox = Gtk.VBox(False, 0) gen_frame.add(new_vbox) new_vbox.show() @@ -1023,7 +1023,7 @@ class EditExifMetadata(Gramplet): ("Artist", _("Artist: ")), ("Copyright", _("Copyright: ")) ]: - new_hbox = gtk.HBox(False, 0) + new_hbox = Gtk.HBox(False, 0) new_vbox.pack_start(new_hbox, expand =False, fill =False, padding =5) new_hbox.show() @@ -1034,16 +1034,16 @@ class EditExifMetadata(Gramplet): new_hbox.pack_start(event_box, expand =False, fill =False, padding =0) # iso format: Year, Month, Day spinners... - datetime_frame = gtk.Frame(_("Date/ Time")) + datetime_frame = Gtk.Frame(_("Date/ Time")) datetime_frame.set_size_request(width_, 90) # width = 574 main_vbox.pack_start(datetime_frame, expand =False, fill =False, padding =0) datetime_frame.show() - new_vbox = gtk.VBox(False, 0) + new_vbox = Gtk.VBox(False, 0) datetime_frame.add(new_vbox) new_vbox.show() - new_hbox = gtk.HBox(False, 0) + new_hbox = Gtk.HBox(False, 0) new_vbox.pack_start(new_hbox, expand =False, fill =False, padding =0) new_hbox.show() @@ -1051,7 +1051,7 @@ class EditExifMetadata(Gramplet): ("Original", _("Original: ")), ("Modified", _("Modified: ")) ]: - vbox2 = gtk.VBox(False, 0) + vbox2 = Gtk.VBox(False, 0) new_hbox.pack_start(vbox2, expand =False, fill =False, padding =5) vbox2.show() @@ -1066,16 +1066,16 @@ class EditExifMetadata(Gramplet): self.dates[widget] = None # GPS coordinates... - latlong_frame = gtk.Frame(_("Latitude/ Longitude/ Altitude GPS coordinates")) + latlong_frame = Gtk.Frame(_("Latitude/ Longitude/ Altitude GPS coordinates")) latlong_frame.set_size_request(width_, 80) # width = 574 main_vbox.pack_start(latlong_frame, expand =False, fill =False, padding =0) latlong_frame.show() - new_vbox = gtk.VBox(False, 0) + new_vbox = Gtk.VBox(False, 0) latlong_frame.add(new_vbox) new_vbox.show() - new_hbox = gtk.HBox(False, 0) + new_hbox = Gtk.HBox(False, 0) new_vbox.pack_start(new_hbox, expand =False, fill =False, padding =0) new_hbox.show() @@ -1084,7 +1084,7 @@ class EditExifMetadata(Gramplet): ("Longitude", _("Longitude :") ), ("Altitude", _("Altitude :") ) ]: - vbox2 = gtk.VBox(False, 0) + vbox2 = Gtk.VBox(False, 0) new_hbox.pack_start(vbox2, expand =False, fill =False, padding =5) vbox2.show() @@ -1096,18 +1096,18 @@ class EditExifMetadata(Gramplet): vbox2.pack_start(event_box, expand =False, fill =False, padding =0) # Help, Save, Clear, Copy, and Close buttons... - new_hbox = gtk.HBox(False, 0) + new_hbox = Gtk.HBox(False, 0) main_vbox.pack_start(new_hbox, expand =False, fill =True, padding =5) new_hbox.show() for (widget, text, callback, icon, is_sensitive) in [ - ("Help", False, [self.__help_page], gtk.STOCK_HELP, True), - ("Save", False, [self.save_metadata, self.update], gtk.STOCK_SAVE, True), - ("Clear", False, [self.clear_metadata], gtk.STOCK_CLEAR, True), - ("Copy", False, [self.__display_exif_tags], gtk.STOCK_COPY, True), - ("Close", False, [lambda w: edtarea.destroy()], gtk.STOCK_CLOSE, True) ]: + ("Help", False, [self.__help_page], Gtk.STOCK_HELP, True), + ("Save", False, [self.save_metadata, self.update], Gtk.STOCK_SAVE, True), + ("Clear", False, [self.clear_metadata], Gtk.STOCK_CLEAR, True), + ("Copy", False, [self.__display_exif_tags], Gtk.STOCK_COPY, True), + ("Close", False, [lambda w: edtarea.destroy()], Gtk.STOCK_CLOSE, True) ]: - event_box = gtk.EventBox() + event_box = Gtk.EventBox() event_box.set_size_request(112, 30) new_hbox.pack_start(event_box, expand =False, fill =True, padding =1) event_box.show() @@ -1155,7 +1155,7 @@ class EditExifMetadata(Gramplet): Handles the Delete Dialog... """ QuestionDialog(_("Edit Image Exif Metadata"), _("WARNING! You are about to completely " - "delete the Exif metadata from this image?"), gtk.STOCK_DELETE, self.strip_metadata) + "delete the Exif metadata from this image?"), Gtk.STOCK_DELETE, self.strip_metadata) self.update() def clear_metadata(self, object): diff --git a/src/plugins/gramplet/Events.py b/src/plugins/gramplet/Events.py index 459547d95..6bd693c61 100644 --- a/src/plugins/gramplet/Events.py +++ b/src/plugins/gramplet/Events.py @@ -27,7 +27,7 @@ from gen.display.name import displayer as name_displayer import gen.datehandler from gen.utils import get_birth_or_fallback, get_marriage_or_fallback from gen.errors import WindowActiveError -import gtk +from gi.repository import Gtk from gen.config import config age_precision = config.get('preferences.age-display-precision') @@ -48,7 +48,7 @@ class Events(Gramplet): """ tip = _('Double-click on a row to edit the selected event.') self.set_tooltip(tip) - top = gtk.TreeView() + top = Gtk.TreeView() titles = [('', NOSORT, 50,), (_('Type'), 1, 100), (_('Details'), 2, 200), diff --git a/src/plugins/gramplet/FanChartGramplet.py b/src/plugins/gramplet/FanChartGramplet.py index f550d07a6..e0a712aaf 100644 --- a/src/plugins/gramplet/FanChartGramplet.py +++ b/src/plugins/gramplet/FanChartGramplet.py @@ -32,21 +32,18 @@ # Python modules # #------------------------------------------------------------------------- -import pygtk -pygtk.require('2.0') -import pango -import gtk +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Pango +from gi.repository import Gtk import math -from gtk import gdk +from gi.repository import Gdk from cgi import escape try: import cairo except ImportError: pass -if gtk.pygtk_version < (2,3,93): - raise Exception("PyGtk 2.3.93 or later required") - #------------------------------------------------------------------------- # # GRAMPS modules @@ -81,7 +78,7 @@ def gender_code(is_male): # FanChartWidget # #------------------------------------------------------------------------- -class FanChartWidget(gtk.Widget): +class FanChartWidget(Gtk.Widget): """ Interactive Fan Chart Widget. """ @@ -106,16 +103,16 @@ class FanChartWidget(gtk.Widget): Fan Chart Widget. Handles visualization of data in self.data. See main() of FanChartGramplet for example of model format. """ - gtk.Widget.__init__(self) + GObject.GObject.__init__(self) self.translating = False self.last_x, self.last_y = None, None self.connect("button_release_event", self.on_mouse_up) self.connect("motion_notify_event", self.on_mouse_move) self.connect("button-press-event", self.on_mouse_down) self.context_popup_callback = context_popup_callback - self.add_events(gdk.BUTTON_PRESS_MASK | - gdk.BUTTON_RELEASE_MASK | - gdk.POINTER_MOTION_MASK) + self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | + Gdk.EventMask.BUTTON_RELEASE_MASK | + Gdk.EventMask.POINTER_MOTION_MASK) self.pixels_per_generation = 50 # size of radius for generation ## gotten from experiments with "sans serif 8": self.degrees_per_radius = .80 @@ -127,7 +124,7 @@ class FanChartWidget(gtk.Widget): self.set_generations(self.generations) self.center = 50 # pixel radius of center self.layout = self.create_pango_layout('cairo') - self.layout.set_font_description(pango.FontDescription("sans 8")) + self.layout.set_font_description(Pango.FontDescription("sans 8")) def reset_generations(self): """ @@ -159,22 +156,22 @@ class FanChartWidget(gtk.Widget): """ Overriden method to handle the realize event. """ - self.set_flags(self.flags() | gtk.REALIZED) - self.window = gdk.Window(self.get_parent_window(), + self.set_flags(self.flags() | Gtk.REALIZED) + self.window = Gdk.Window(self.get_parent_window(), width=self.allocation.width, height=self.allocation.height, - window_type=gdk.WINDOW_CHILD, - wclass=gdk.INPUT_OUTPUT, - event_mask=self.get_events() | gdk.EXPOSURE_MASK) + window_type=Gdk.WINDOW_CHILD, + wclass=Gdk.INPUT_OUTPUT, + event_mask=self.get_events() | Gdk.EventMask.EXPOSURE_MASK) if not hasattr(self.window, "cairo_create"): - self.draw_gc = gdk.GC(self.window, + self.draw_gc = Gdk.GC(self.window, line_width=5, - line_style=gdk.SOLID, - join_style=gdk.JOIN_ROUND) + line_style=Gdk.SOLID, + join_style=Gdk.JOIN_ROUND) self.window.set_user_data(self) self.style.attach(self.window) - self.style.set_background(self.window, gtk.STATE_NORMAL) + self.style.set_background(self.window, Gtk.StateType.NORMAL) self.window.move_resize(*self.allocation) def do_size_request(self, requisition): @@ -182,15 +179,15 @@ class FanChartWidget(gtk.Widget): Overridden method to handle size request events. """ width, height = self.layout.get_size() - requisition.width = (width // pango.SCALE + self.BORDER_WIDTH*4)* 1.45 - requisition.height = (3 * height // pango.SCALE + self.BORDER_WIDTH*4) * 1.2 + requisition.width = (width // Pango.SCALE + self.BORDER_WIDTH*4)* 1.45 + requisition.height = (3 * height // Pango.SCALE + self.BORDER_WIDTH*4) * 1.2 def do_size_allocate(self, allocation): """ Overridden method to handle size allocation events. """ self.allocation = allocation - if self.flags() & gtk.REALIZED: + if self.get_realized(): self.window.move_resize(*allocation) def _expose_gdk(self, event): @@ -336,14 +333,14 @@ class FanChartWidget(gtk.Widget): for i in range(len(text)): cr.save() layout = self.create_pango_layout(text[i]) - layout.set_font_description(pango.FontDescription("sans 8")) + layout.set_font_description(Pango.FontDescription("sans 8")) angle = 360.0 * i / (radius * self.degrees_per_radius) + pos cr.set_source_rgb(0, 0, 0) # black cr.rotate(angle * (math.pi / 180)); # Inform Pango to re-layout the text with the new transformation cr.update_layout(layout) width, height = layout.get_size() - cr.move_to(- (width / pango.SCALE) / 2.0, - radius) + cr.move_to(- (width / Pango.SCALE) / 2.0, - radius) cr.show_layout(layout) cr.restore() cr.restore() @@ -537,7 +534,7 @@ class FanChartWidget(gtk.Widget): # save the mouse location for movements self.last_x, self.last_y = event.x, event.y return True - # Do things based on state, event.state, or button, event.button + # Do things based on state, event.get_state(), or button, event.button if event.button == 1: # left mouse self.change_slice(generation, selected) elif gui.utils.is_right_click(event): # right mouse @@ -681,7 +678,7 @@ class FanChartGramplet(Gramplet): """Renders the person data into some lines of text and puts that into the clipboard""" person = self.dbstate.db.get_person_from_handle(person_handle) if person: - cb = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD) + cb = Gtk.clipboard_get(Gdk.SELECTION_CLIPBOARD) cb.set_text( self.format_helper.format_person(person,11)) return True return False @@ -692,27 +689,27 @@ class FanChartGramplet(Gramplet): and Parents) with navigation. Copied from PedigreeView. """ - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_('People Menu')) person = self.dbstate.db.get_person_from_handle(person_handle) if not person: return 0 - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - go_item = gtk.ImageMenuItem(name_displayer.display(person)) + go_item = Gtk.ImageMenuItem(name_displayer.display(person)) go_item.set_image(go_image) go_item.connect("activate",self.on_childmenu_changed,person_handle) go_item.show() menu.append(go_item) - edit_item = gtk.ImageMenuItem(gtk.STOCK_EDIT) + edit_item = Gtk.ImageMenuItem(Gtk.STOCK_EDIT) edit_item.connect("activate",self.edit_person_cb,person_handle) edit_item.show() menu.append(edit_item) - clipboard_item = gtk.ImageMenuItem(gtk.STOCK_COPY) + clipboard_item = Gtk.ImageMenuItem(Gtk.STOCK_COPY) clipboard_item.connect("activate",self.copy_person_to_clipboard_cb,person_handle) clipboard_item.show() menu.append(clipboard_item) @@ -721,7 +718,7 @@ class FanChartGramplet(Gramplet): linked_persons = [] # Go over spouses and build their menu - item = gtk.MenuItem(_("Spouses")) + item = Gtk.MenuItem(_("Spouses")) fam_list = person.get_family_handle_list() no_spouses = 1 for fam_id in fam_list: @@ -736,12 +733,12 @@ class FanChartGramplet(Gramplet): if no_spouses: no_spouses = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) sp_menu = item.get_submenu() - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - sp_item = gtk.ImageMenuItem(name_displayer.display(spouse)) + sp_item = Gtk.ImageMenuItem(name_displayer.display(spouse)) sp_item.set_image(go_image) linked_persons.append(sp_id) sp_item.connect("activate",self.on_childmenu_changed,sp_id) @@ -755,7 +752,7 @@ class FanChartGramplet(Gramplet): menu.append(item) # Go over siblings and build their menu - item = gtk.MenuItem(_("Siblings")) + item = Gtk.MenuItem(_("Siblings")) pfam_list = person.get_parent_family_handle_list() no_siblings = 1 for f in pfam_list: @@ -771,17 +768,17 @@ class FanChartGramplet(Gramplet): if no_siblings: no_siblings = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) sib_menu = item.get_submenu() if find_children(self.dbstate.db,sib): - label = gtk.Label('%s' % escape(name_displayer.display(sib))) + label = Gtk.Label(label='%s' % escape(name_displayer.display(sib))) else: - label = gtk.Label(escape(name_displayer.display(sib))) + label = Gtk.Label(label=escape(name_displayer.display(sib))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - sib_item = gtk.ImageMenuItem(None) + sib_item = Gtk.ImageMenuItem(None) sib_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -798,7 +795,7 @@ class FanChartGramplet(Gramplet): menu.append(item) # Go over children and build their menu - item = gtk.MenuItem(_("Children")) + item = Gtk.MenuItem(_("Children")) no_children = 1 childlist = find_children(self.dbstate.db,person) for child_handle in childlist: @@ -808,17 +805,17 @@ class FanChartGramplet(Gramplet): if no_children: no_children = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) child_menu = item.get_submenu() if find_children(self.dbstate.db,child): - label = gtk.Label('%s' % escape(name_displayer.display(child))) + label = Gtk.Label(label='%s' % escape(name_displayer.display(child))) else: - label = gtk.Label(escape(name_displayer.display(child))) + label = Gtk.Label(label=escape(name_displayer.display(child))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - child_item = gtk.ImageMenuItem(None) + child_item = Gtk.ImageMenuItem(None) child_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -835,7 +832,7 @@ class FanChartGramplet(Gramplet): menu.append(item) # Go over parents and build their menu - item = gtk.MenuItem(_("Parents")) + item = Gtk.MenuItem(_("Parents")) no_parents = 1 par_list = find_parents(self.dbstate.db,person) for par_id in par_list: @@ -845,17 +842,17 @@ class FanChartGramplet(Gramplet): if no_parents: no_parents = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) par_menu = item.get_submenu() if find_parents(self.dbstate.db,par): - label = gtk.Label('%s' % escape(name_displayer.display(par))) + label = Gtk.Label(label='%s' % escape(name_displayer.display(par))) else: - label = gtk.Label(escape(name_displayer.display(par))) + label = Gtk.Label(label=escape(name_displayer.display(par))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - par_item = gtk.ImageMenuItem(None) + par_item = Gtk.ImageMenuItem(None) par_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -872,7 +869,7 @@ class FanChartGramplet(Gramplet): menu.append(item) # Go over parents and build their menu - item = gtk.MenuItem(_("Related")) + item = Gtk.MenuItem(_("Related")) no_related = 1 for p_id in find_witnessed_people(self.dbstate.db,person): #if p_id in linked_persons: @@ -884,14 +881,14 @@ class FanChartGramplet(Gramplet): if no_related: no_related = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) per_menu = item.get_submenu() - label = gtk.Label(escape(name_displayer.display(per))) + label = Gtk.Label(label=escape(name_displayer.display(per))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - per_item = gtk.ImageMenuItem(None) + per_item = Gtk.ImageMenuItem(None) per_item.set_image(go_image) label.set_use_markup(True) label.show() diff --git a/src/plugins/gramplet/Gallery.py b/src/plugins/gramplet/Gallery.py index a38c3ced8..81a48802d 100644 --- a/src/plugins/gramplet/Gallery.py +++ b/src/plugins/gramplet/Gallery.py @@ -23,7 +23,7 @@ from gen.plug import Gramplet from gui.widgets import Photo import Utils -import gtk +from gi.repository import Gtk class Gallery(Gramplet): """ @@ -39,7 +39,7 @@ class Gallery(Gramplet): Build the GUI interface. """ self.image_list = [] - self.top = gtk.HBox(False, 3) + self.top = Gtk.HBox(False, 3) return self.top def clear_images(self): diff --git a/src/plugins/gramplet/MediaPreview.py b/src/plugins/gramplet/MediaPreview.py index e76d64aad..d8772aa6b 100644 --- a/src/plugins/gramplet/MediaPreview.py +++ b/src/plugins/gramplet/MediaPreview.py @@ -22,7 +22,7 @@ from gen.plug import Gramplet from gui.widgets import Photo import Utils -import gtk +from gi.repository import Gtk class MediaPreview(Gramplet): """ @@ -37,7 +37,7 @@ class MediaPreview(Gramplet): """ Build the GUI interface. """ - self.top = gtk.HBox() + self.top = Gtk.HBox() self.photo = Photo(self.uistate.screen_height() < 1000) self.top.pack_start(self.photo, fill=True, expand=False, padding=5) self.top.show_all() diff --git a/src/plugins/gramplet/Notes.py b/src/plugins/gramplet/Notes.py index f76a6e084..0522f6ddf 100644 --- a/src/plugins/gramplet/Notes.py +++ b/src/plugins/gramplet/Notes.py @@ -25,7 +25,7 @@ from gui.widgets.styledtexteditor import StyledTextEditor from gui.widgets import SimpleButton from gen.lib import StyledText from gen.ggettext import gettext as _ -import gtk +from gi.repository import Gtk class Notes(Gramplet): """ @@ -41,27 +41,27 @@ class Notes(Gramplet): """ Build the GUI interface. """ - top = gtk.VBox(False) + top = Gtk.VBox(False) - hbox = gtk.HBox() - self.left = SimpleButton(gtk.STOCK_GO_BACK, self.left_clicked) + hbox = Gtk.HBox() + self.left = SimpleButton(Gtk.STOCK_GO_BACK, self.left_clicked) self.left.set_sensitive(False) - hbox.pack_start(self.left, False, False) - self.right = SimpleButton(gtk.STOCK_GO_FORWARD, self.right_clicked) + hbox.pack_start(self.left, False, False, 0) + self.right = SimpleButton(Gtk.STOCK_GO_FORWARD, self.right_clicked) self.right.set_sensitive(False) - hbox.pack_start(self.right, False, False) - self.page = gtk.Label() + hbox.pack_start(self.right, False, False, 0) + self.page = Gtk.Label() hbox.pack_end(self.page, False, False, 10) - scrolledwindow = gtk.ScrolledWindow() - scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scrolledwindow = Gtk.ScrolledWindow() + scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.texteditor = StyledTextEditor() self.texteditor.set_editable(False) - self.texteditor.set_wrap_mode(gtk.WRAP_WORD) + self.texteditor.set_wrap_mode(Gtk.WrapMode.WORD) scrolledwindow.add(self.texteditor) - top.pack_start(hbox, False, False) - top.pack_start(scrolledwindow, True, True) + top.pack_start(hbox, False, False, 0) + top.pack_start(scrolledwindow, True, True, 0) top.show_all() return top diff --git a/src/plugins/gramplet/PersonDetails.py b/src/plugins/gramplet/PersonDetails.py index 89edff4f4..fdf3eef6c 100644 --- a/src/plugins/gramplet/PersonDetails.py +++ b/src/plugins/gramplet/PersonDetails.py @@ -26,8 +26,8 @@ from gen.display.name import displayer as name_displayer from gen.ggettext import gettext as _ import gen.datehandler import Utils -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango class PersonDetails(Gramplet): """ @@ -43,15 +43,15 @@ class PersonDetails(Gramplet): """ Build the GUI interface. """ - self.top = gtk.HBox() - vbox = gtk.VBox() + self.top = Gtk.HBox() + vbox = Gtk.VBox() self.photo = Photo(self.uistate.screen_height() < 1000) self.photo.show() - self.name = gtk.Label() + self.name = Gtk.Label() self.name.set_alignment(0, 0) - self.name.modify_font(pango.FontDescription('sans bold 12')) + self.name.modify_font(Pango.FontDescription('sans bold 12')) vbox.pack_start(self.name, fill=True, expand=False, padding=7) - self.table = gtk.Table(1, 2) + self.table = Gtk.Table(1, 2) vbox.pack_start(self.table, fill=True, expand=False, padding=5) vbox.show_all() self.top.pack_start(self.photo, fill=True, expand=False, padding=5) @@ -62,16 +62,16 @@ class PersonDetails(Gramplet): """ Add a row to the table. """ - label = gtk.Label(title + ':') + label = Gtk.Label(label=title + ':') label.set_alignment(1, 0) label.show() - value = gtk.Label(value) + value = Gtk.Label(label=value) value.set_alignment(0, 0) value.show() rows = self.table.get_property('n-rows') rows += 1 self.table.resize(rows, 2) - self.table.attach(label, 0, 1, rows, rows + 1, xoptions=gtk.FILL, + self.table.attach(label, 0, 1, rows, rows + 1, xoptions=Gtk.AttachOptions.FILL, xpadding=10) self.table.attach(value, 1, 2, rows, rows + 1) @@ -136,13 +136,13 @@ class PersonDetails(Gramplet): """ Display an empty row to separate groupd of entries. """ - label = gtk.Label('') - label.modify_font(pango.FontDescription('sans 4')) + label = Gtk.Label(label='') + label.modify_font(Pango.FontDescription('sans 4')) label.show() rows = self.table.get_property('n-rows') rows += 1 self.table.resize(rows, 2) - self.table.attach(label, 0, 1, rows, rows + 1, xoptions=gtk.FILL) + self.table.attach(label, 0, 1, rows, rows + 1, xoptions=Gtk.AttachOptions.FILL) def display_parents(self, active_person): """ diff --git a/src/plugins/gramplet/PersonResidence.py b/src/plugins/gramplet/PersonResidence.py index 7946ae89a..61e6b9549 100644 --- a/src/plugins/gramplet/PersonResidence.py +++ b/src/plugins/gramplet/PersonResidence.py @@ -26,7 +26,7 @@ from gen.plug import Gramplet from gen.ggettext import gettext as _ import gen.datehandler from gen.errors import WindowActiveError -import gtk +from gi.repository import Gtk class PersonResidence(Gramplet): """ @@ -44,7 +44,7 @@ class PersonResidence(Gramplet): """ tip = _('Double-click on a row to edit the selected event.') self.set_tooltip(tip) - top = gtk.TreeView() + top = Gtk.TreeView() titles = [('', NOSORT, 50,), (_('Date'), 1, 200), (_('Place'), 2, 200)] diff --git a/src/plugins/gramplet/PlaceDetails.py b/src/plugins/gramplet/PlaceDetails.py index 7b68dd023..e27f35429 100644 --- a/src/plugins/gramplet/PlaceDetails.py +++ b/src/plugins/gramplet/PlaceDetails.py @@ -24,8 +24,8 @@ from gui.widgets import Photo from gen.ggettext import gettext as _ from gen.utils.place import conv_lat_lon import Utils -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango class PlaceDetails(Gramplet): """ @@ -40,14 +40,14 @@ class PlaceDetails(Gramplet): """ Build the GUI interface. """ - self.top = gtk.HBox() - vbox = gtk.VBox() + self.top = Gtk.HBox() + vbox = Gtk.VBox() self.photo = Photo(self.uistate.screen_height() < 1000) - self.title = gtk.Label() + self.title = Gtk.Label() self.title.set_alignment(0, 0) - self.title.modify_font(pango.FontDescription('sans bold 12')) + self.title.modify_font(Pango.FontDescription('sans bold 12')) vbox.pack_start(self.title, fill=True, expand=False, padding=7) - self.table = gtk.Table(1, 2) + self.table = Gtk.Table(1, 2) vbox.pack_start(self.table, fill=True, expand=False) self.top.pack_start(self.photo, fill=True, expand=False, padding=5) self.top.pack_start(vbox, fill=True, expand=False, padding=10) @@ -58,16 +58,16 @@ class PlaceDetails(Gramplet): """ Add a row to the table. """ - label = gtk.Label(title + ':') + label = Gtk.Label(label=title + ':') label.set_alignment(1, 0) label.show() - value = gtk.Label(value) + value = Gtk.Label(label=value) value.set_alignment(0, 0) value.show() rows = self.table.get_property('n-rows') rows += 1 self.table.resize(rows, 2) - self.table.attach(label, 0, 1, rows, rows + 1, xoptions=gtk.FILL, + self.table.attach(label, 0, 1, rows, rows + 1, xoptions=Gtk.AttachOptions.FILL, xpadding=10) self.table.attach(value, 1, 2, rows, rows + 1) @@ -136,13 +136,13 @@ class PlaceDetails(Gramplet): """ Display an empty row to separate groupd of entries. """ - label = gtk.Label('') - label.modify_font(pango.FontDescription('sans 4')) + label = Gtk.Label(label='') + label.modify_font(Pango.FontDescription('sans 4')) label.show() rows = self.table.get_property('n-rows') rows += 1 self.table.resize(rows, 2) - self.table.attach(label, 0, 1, rows, rows + 1, xoptions=gtk.FILL) + self.table.attach(label, 0, 1, rows, rows + 1, xoptions=Gtk.AttachOptions.FILL) def load_place_image(self, place): """ diff --git a/src/plugins/gramplet/RepositoryDetails.py b/src/plugins/gramplet/RepositoryDetails.py index 7e44cdd93..6ecfc772b 100644 --- a/src/plugins/gramplet/RepositoryDetails.py +++ b/src/plugins/gramplet/RepositoryDetails.py @@ -22,8 +22,8 @@ from gen.lib import UrlType from gen.plug import Gramplet from gen.ggettext import gettext as _ -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango class RepositoryDetails(Gramplet): """ @@ -38,13 +38,13 @@ class RepositoryDetails(Gramplet): """ Build the GUI interface. """ - self.top = gtk.HBox() - vbox = gtk.VBox() - self.name = gtk.Label() + self.top = Gtk.HBox() + vbox = Gtk.VBox() + self.name = Gtk.Label() self.name.set_alignment(0, 0) - self.name.modify_font(pango.FontDescription('sans bold 12')) + self.name.modify_font(Pango.FontDescription('sans bold 12')) vbox.pack_start(self.name, fill=True, expand=False, padding=7) - self.table = gtk.Table(1, 2) + self.table = Gtk.Table(1, 2) vbox.pack_start(self.table, fill=True, expand=False) self.top.pack_start(vbox, fill=True, expand=False, padding=10) self.top.show_all() @@ -54,16 +54,16 @@ class RepositoryDetails(Gramplet): """ Add a row to the table. """ - label = gtk.Label(title + ':') + label = Gtk.Label(label=title + ':') label.set_alignment(1, 0) label.show() - value = gtk.Label(value) + value = Gtk.Label(label=value) value.set_alignment(0, 0) value.show() rows = self.table.get_property('n-rows') rows += 1 self.table.resize(rows, 2) - self.table.attach(label, 0, 1, rows, rows + 1, xoptions=gtk.FILL, + self.table.attach(label, 0, 1, rows, rows + 1, xoptions=Gtk.AttachOptions.FILL, xpadding=10) self.table.attach(value, 1, 2, rows, rows + 1) @@ -141,10 +141,10 @@ class RepositoryDetails(Gramplet): """ Display an empty row to separate groupd of entries. """ - label = gtk.Label('') - label.modify_font(pango.FontDescription('sans 4')) + label = Gtk.Label(label='') + label.modify_font(Pango.FontDescription('sans 4')) label.show() rows = self.table.get_property('n-rows') rows += 1 self.table.resize(rows, 2) - self.table.attach(label, 0, 1, rows, rows + 1, xoptions=gtk.FILL) + self.table.attach(label, 0, 1, rows, rows + 1, xoptions=Gtk.AttachOptions.FILL) diff --git a/src/plugins/gramplet/WelcomeGramplet.py b/src/plugins/gramplet/WelcomeGramplet.py index 6329051a4..7b7b182c1 100644 --- a/src/plugins/gramplet/WelcomeGramplet.py +++ b/src/plugins/gramplet/WelcomeGramplet.py @@ -24,7 +24,7 @@ # #------------------------------------------------------------------------ -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------ # @@ -82,18 +82,18 @@ class WelcomeGramplet(Gramplet): """ Build the GUI interface. """ - top = gtk.VBox(False) + top = Gtk.VBox(False) - scrolledwindow = gtk.ScrolledWindow() - scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + scrolledwindow = Gtk.ScrolledWindow() + scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.texteditor = StyledTextEditor() self.texteditor.set_editable(False) - self.texteditor.set_wrap_mode(gtk.WRAP_WORD) + self.texteditor.set_wrap_mode(Gtk.WrapMode.WORD) scrolledwindow.add(self.texteditor) self.set_text() - top.pack_start(scrolledwindow, True, True) + top.pack_start(scrolledwindow, True, True, 0) top.show_all() return top diff --git a/src/plugins/lib/libcairodoc.py b/src/plugins/lib/libcairodoc.py index 28c6fae19..55242945d 100644 --- a/src/plugins/lib/libcairodoc.py +++ b/src/plugins/lib/libcairodoc.py @@ -63,7 +63,7 @@ log = logging.getLogger(".libcairodoc") # GTK modules # #------------------------------------------------------------------------- -import pango +from gi.repository import Pango, PangoCairo #------------------------------------------------------------------------ # @@ -102,14 +102,12 @@ font_families = _GNOME_FONT # FIXME debug logging does not work here. def set_font_families(): - import pangocairo -##def set_font_families(pango_context): """Set the used font families depending on availability. """ global font_families ##families = pango_context.list_families() - families = pangocairo.cairo_font_map_get_default().list_families() + families = PangoCairo.font_map_get_default().list_families() family_names = [family.get_name() for family in families] fam = [f for f in _TTF_FREEFONT.itervalues() if f in family_names] @@ -141,37 +139,37 @@ set_font_families() #------------------------------------------------------------------------ def fontstyle_to_fontdescription(font_style): - """Convert a FontStyle instance to a pango.FontDescription one. + """Convert a FontStyle instance to a Pango.FontDescription one. - Font color and underline are not implemented in pango.FontDescription, - and have to be set with pango.Layout.set_attributes(attrlist) method. + Font color and underline are not implemented in Pango.FontDescription, + and have to be set with Pango.Layout.set_attributes(attrlist) method. """ if font_style.get_bold(): - f_weight = pango.WEIGHT_BOLD + f_weight = Pango.Weight.BOLD else: - f_weight = pango.WEIGHT_NORMAL + f_weight = Pango.Weight.NORMAL if font_style.get_italic(): - f_style = pango.STYLE_ITALIC + f_style = Pango.Style.ITALIC else: - f_style = pango.STYLE_NORMAL + f_style = Pango.Style.NORMAL - font_description = pango.FontDescription(font_families[font_style.face]) - font_description.set_size(int(round(font_style.get_size() * pango.SCALE))) + font_description = Pango.FontDescription(font_families[font_style.face]) + font_description.set_size(int(round(font_style.get_size() * Pango.SCALE))) font_description.set_weight(f_weight) font_description.set_style(f_style) return font_description def tabstops_to_tabarray(tab_stops, dpi): - """Convert a list of tabs given in cm to a pango.TabArray. + """Convert a list of tabs given in cm to a Pango.TabArray. """ - tab_array = pango.TabArray(len(tab_stops), False) + tab_array = Pango.TabArray(len(tab_stops), False) for index in range(len(tab_stops)): - location = tab_stops[index] * dpi * pango.SCALE / 2.54 - tab_array.set_tab(index, pango.TAB_LEFT, int(location)) + location = tab_stops[index] * dpi * Pango.SCALE / 2.54 + tab_array.set_tab(index, Pango.TabAlign.LEFT, int(location)) return tab_array @@ -346,7 +344,7 @@ class GtkDocBaseElement(object): """Divide the element into two depending on available space. @param layout: pango layout to write on - @param type: pango.Layout + @param type: Pango.Layout @param width: width of available space for this element @param type: device points @param height: height of available space for this element @@ -368,7 +366,7 @@ class GtkDocBaseElement(object): @param cairo_context: context to draw on @param type: cairo.Context class @param pango_layout: pango layout to write on - @param type: pango.Layout class + @param type: Pango.Layout class @param width: width of available space for this element @param type: device points @param dpi_x: the horizontal resolution @@ -513,7 +511,7 @@ class GtkDocParagraph(GtkDocBaseElement): """ if self._plaintext is None: self._attrlist, self._plaintext, dummy = \ - pango.parse_markup(self._text) + Pango.parse_markup(self._text) def divide(self, layout, width, height, dpi_x, dpi_y): self.__parse_text() @@ -530,20 +528,20 @@ class GtkDocParagraph(GtkDocBaseElement): text_width = width - l_margin - 2 * h_padding - r_margin if f_indent < 0: text_width -= f_indent - layout.set_width(int(text_width * pango.SCALE)) + layout.set_width(int(text_width * Pango.SCALE)) # set paragraph properties - layout.set_wrap(pango.WRAP_WORD_CHAR) - layout.set_indent(int(f_indent * pango.SCALE)) + layout.set_wrap(Pango.WrapMode.WORD_CHAR) + layout.set_indent(int(f_indent * Pango.SCALE)) layout.set_tabs(tabstops_to_tabarray(self._style.get_tabs(), dpi_x)) # align = self._style.get_alignment_text() if align == 'left': - layout.set_alignment(pango.ALIGN_LEFT) + layout.set_alignment(Pango.Alignment.LEFT) elif align == 'right': - layout.set_alignment(pango.ALIGN_RIGHT) + layout.set_alignment(Pango.Alignment.RIGHT) elif align == 'center': - layout.set_alignment(pango.ALIGN_CENTER) + layout.set_alignment(Pango.Alignment.CENTER) elif align == 'justify': layout.set_justify(True) else: @@ -553,7 +551,7 @@ class GtkDocParagraph(GtkDocBaseElement): layout.set_font_description(fontstyle_to_fontdescription(font_style)) #set line spacing based on font: spacing = font_style.get_size() * self.spacingfractionfont - layout.set_spacing(int(round(spacing * pango.SCALE))) + layout.set_spacing(int(round(spacing * Pango.SCALE))) text_height = height - t_margin - 2 * v_padding @@ -562,7 +560,7 @@ class GtkDocParagraph(GtkDocBaseElement): layout.set_attributes(self._attrlist) layout_width, layout_height = layout.get_pixel_size() line_count = layout.get_line_count() - spacing = layout.get_spacing() / pango.SCALE + spacing = layout.get_spacing() / Pango.SCALE # if all paragraph fits we don't need to cut if layout_height - spacing <= text_height: @@ -585,7 +583,7 @@ class GtkDocParagraph(GtkDocBaseElement): # 2. if nothing fits, move to next page without split # there is a spacing above and under the text if linerange[1] - linerange[0] + 2.*spacing \ - > text_height * pango.SCALE: + > text_height * Pango.SCALE: return (None, self), 0 # 3. split the paragraph @@ -602,7 +600,7 @@ class GtkDocParagraph(GtkDocBaseElement): linenr += 1 linerange = lineiter.get_line_yrange() if linerange[1] - startheight + 2.*spacing \ - > text_height * pango.SCALE: + > text_height * Pango.SCALE: splitline = linenr break endheight = linerange[1] @@ -678,20 +676,20 @@ class GtkDocParagraph(GtkDocBaseElement): text_width = width - l_margin - 2 * h_padding - r_margin if f_indent < 0: text_width -= f_indent - layout.set_width(int(text_width * pango.SCALE)) + layout.set_width(int(text_width * Pango.SCALE)) # set paragraph properties - layout.set_wrap(pango.WRAP_WORD_CHAR) - layout.set_indent(int(f_indent * pango.SCALE)) + layout.set_wrap(Pango.WrapMode.WORD_CHAR) + layout.set_indent(int(f_indent * Pango.SCALE)) layout.set_tabs(tabstops_to_tabarray(self._style.get_tabs(), dpi_x)) # align = self._style.get_alignment_text() if align == 'left': - layout.set_alignment(pango.ALIGN_LEFT) + layout.set_alignment(Pango.Alignment.LEFT) elif align == 'right': - layout.set_alignment(pango.ALIGN_RIGHT) + layout.set_alignment(Pango.Alignment.RIGHT) elif align == 'center': - layout.set_alignment(pango.ALIGN_CENTER) + layout.set_alignment(Pango.Alignment.CENTER) elif align == 'justify': layout.set_justify(True) # @@ -699,7 +697,7 @@ class GtkDocParagraph(GtkDocBaseElement): layout.set_font_description(fontstyle_to_fontdescription(font_style)) #set line spacing based on font: spacing = font_style.get_size() * self.spacingfractionfont - layout.set_spacing(int(round(spacing * pango.SCALE))) + layout.set_spacing(int(round(spacing * Pango.SCALE))) # layout the text layout.set_text(self._plaintext) @@ -1003,7 +1001,7 @@ class GtkDocPicture(GtkDocBaseElement): return (None, self), 0 def draw(self, cr, layout, width, dpi_x, dpi_y): - import gtk + from gi.repository import Gtk img_width = self._width * dpi_x / 2.54 img_height = self._height * dpi_y / 2.54 @@ -1028,7 +1026,7 @@ class GtkDocPicture(GtkDocBaseElement): cr.save() cr.translate(l_margin, 0) cr.scale(scale, scale) - gcr = gtk.gdk.CairoContext(cr) + gcr = Gdk.CairoContext(cr) gcr.set_source_pixbuf(pixbuf, (img_width / scale - pixbuf_width) / 2, (img_height / scale - pixbuf_height) / 2) @@ -1246,11 +1244,11 @@ class GtkDocText(GtkDocBaseElement): # set paragraph properties align = self._style.get_alignment_text() if align == 'left': - layout.set_alignment(pango.ALIGN_LEFT) + layout.set_alignment(Pango.Alignment.LEFT) elif align == 'right': - layout.set_alignment(pango.ALIGN_RIGHT) + layout.set_alignment(Pango.Alignment.RIGHT) elif align == 'center': - layout.set_alignment(pango.ALIGN_CENTER) + layout.set_alignment(Pango.Alignment.CENTER) elif align == 'justify': layout.set_justify(True) else: @@ -1260,7 +1258,7 @@ class GtkDocText(GtkDocBaseElement): layout.set_font_description(fontstyle_to_fontdescription(font_style)) #set line spacing based on font: spacing = font_style.get_size() * self.spacingfractionfont - layout.set_spacing(int(round(spacing * pango.SCALE))) + layout.set_spacing(int(round(spacing * Pango.SCALE))) # layout the text layout.set_markup(self._text) @@ -1458,7 +1456,7 @@ links (like ODF) and write PDF from that format. self._links_error = True if not markup: - # We need to escape the text here for later pango.Layout.set_markup + # We need to escape the text here for later Pango.Layout.set_markup # calls. This way we save the markup created by the report # The markup in the note editor is not in the text so is not # considered. It must be added by pango too diff --git a/src/plugins/lib/libmetadata.py b/src/plugins/lib/libmetadata.py index 04869ed58..a345c8795 100644 --- a/src/plugins/lib/libmetadata.py +++ b/src/plugins/lib/libmetadata.py @@ -29,7 +29,7 @@ from fractions import Fraction import gen.lib import gen.datehandler import datetime -import gtk +from gi.repository import Gtk import pyexiv2 # v0.1 has a different API to v0.2 and above @@ -152,10 +152,10 @@ TAGS = [(DESCRIPTION, 'Exif.Image.ImageDescription', None, None), (ADVANCED, 'Exif.Image.GPSTag', None, None), (ADVANCED, 'Exif.Image.BatteryLevel', None, None)] -class MetadataView(gtk.TreeView): +class MetadataView(Gtk.TreeView): def __init__(self): - gtk.TreeView.__init__(self) + GObject.GObject.__init__(self) self.sections = {} titles = [(_('Key'), 1, 235), (_('Value'), 2, 325)] diff --git a/src/plugins/lib/libpersonview.py b/src/plugins/lib/libpersonview.py index 857e42400..2cada6a3d 100644 --- a/src/plugins/lib/libpersonview.py +++ b/src/plugins/lib/libpersonview.py @@ -32,7 +32,7 @@ Provide the base for a list person view. # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -346,13 +346,13 @@ class BasePersonView(ListView): ListView.define_actions(self) - self.all_action = gtk.ActionGroup(self.title + "/PersonAll") - self.edit_action = gtk.ActionGroup(self.title + "/PersonEdit") + self.all_action = Gtk.ActionGroup(self.title + "/PersonAll") + self.edit_action = Gtk.ActionGroup(self.title + "/PersonEdit") self.all_action.add_actions([ ('FilterEdit', None, _('Person Filter Editor'), None, None, self.filter_editor), - ('Edit', gtk.STOCK_EDIT, _("action|_Edit..."), + ('Edit', Gtk.STOCK_EDIT, _("action|_Edit..."), "Return", self.EDIT_MSG, self.edit), ('QuickReport', None, _("Quick View"), None, None, None), ('WebConnect', None, _("Web Connection"), None, None, None), @@ -362,9 +362,9 @@ class BasePersonView(ListView): self.edit_action.add_actions( [ - ('Add', gtk.STOCK_ADD, _("_Add..."), "Insert", + ('Add', Gtk.STOCK_ADD, _("_Add..."), "Insert", self.ADD_MSG, self.add), - ('Remove', gtk.STOCK_REMOVE, _("_Remove"), "Delete", + ('Remove', Gtk.STOCK_REMOVE, _("_Remove"), "Delete", self.DEL_MSG, self.remove), ('Merge', 'gramps-merge', _('_Merge...'), None, self.MERGE_MSG, self.merge), diff --git a/src/plugins/lib/libplaceview.py b/src/plugins/lib/libplaceview.py index b6f70c938..124237032 100644 --- a/src/plugins/lib/libplaceview.py +++ b/src/plugins/lib/libplaceview.py @@ -38,7 +38,7 @@ Base view for Place Views # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -165,7 +165,7 @@ class PlaceBaseView(ListView): "Service (OpenstreetMap, Google Maps, ...)"), self.gotomap, _('Select a Map Service')) - self._add_action('GotoMap', gtk.STOCK_JUMP_TO, + self._add_action('GotoMap', Gtk.STOCK_JUMP_TO, _('_Look up with Map Service'), callback=self.gotomap, tip=_("Attempt to see this location with a Map " @@ -202,26 +202,25 @@ class PlaceBaseView(ListView): #store all gtk labels to be able to update label on selection change for widget in widgets : - if isinstance(widget, gtk.MenuToolButton): + if isinstance(widget, Gtk.MenuToolButton): widget.set_menu(mmenu) - if gtk.pygtk_version >= (2, 12, 0): - widget.set_arrow_tooltip_text(actionservices.arrowtooltip) - lbl = gtk.Label(self.mapservice_label()) + widget.set_arrow_tooltip_text(actionservices.arrowtooltip) + lbl = Gtk.Label(label=self.mapservice_label()) lbl.show() self.mapslistlabel.append(lbl) widget.set_label_widget(self.mapslistlabel[-1]) - widget.set_stock_id(gtk.STOCK_JUMP_TO) + widget.set_stock_id(Gtk.STOCK_JUMP_TO) if self.drag_info(): - self.list.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, + self.list.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [('text/plain', 0, 0), self.drag_info().target()], - gtk.gdk.ACTION_COPY) + Gdk.DragAction.COPY) def __create_maps_menu_actions(self): """ Function creating a menu and actions that are used as dropdown menu from the menutoolbutton """ - menu = gtk.Menu() + menu = Gtk.Menu() #select the map services to show self.mapservicedata = {} diff --git a/src/plugins/lib/maps/datelayer.py b/src/plugins/lib/maps/datelayer.py index f1e998701..e09e72bfe 100644 --- a/src/plugins/lib/maps/datelayer.py +++ b/src/plugins/lib/maps/datelayer.py @@ -28,7 +28,7 @@ # #------------------------------------------------------------------------- import os -import gobject +from gi.repository import GObject import operator from math import * @@ -45,7 +45,7 @@ _LOG = logging.getLogger("maps.datelayer") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -66,7 +66,7 @@ try: except: raise -class DateLayer(gobject.GObject, osmgpsmap.GpsMapLayer): +class DateLayer(GObject.GObject, osmgpsmap.GpsMapLayer): """ This is the layer used to display the two extreme dates on the top left of the view """ @@ -74,7 +74,7 @@ class DateLayer(gobject.GObject, osmgpsmap.GpsMapLayer): """ Initialize the layer """ - gobject.GObject.__init__(self) + GObject.GObject.__init__(self) self.first = " " self.last = " " self.color = "black" @@ -119,7 +119,7 @@ class DateLayer(gobject.GObject, osmgpsmap.GpsMapLayer): cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL) ctx.set_font_size(int(self.size)) - color = gtk.gdk.color_parse(self.color) + color = Gdk.color_parse(self.color) ctx.set_source_rgba(float(color.red / 65535.0), float(color.green / 65535.0), float(color.blue / 65535.0), @@ -150,5 +150,5 @@ class DateLayer(gobject.GObject, osmgpsmap.GpsMapLayer): """ return False -gobject.type_register(DateLayer) +GObject.type_register(DateLayer) diff --git a/src/plugins/lib/maps/dummylayer.py b/src/plugins/lib/maps/dummylayer.py index 65c714758..95e62aa0a 100644 --- a/src/plugins/lib/maps/dummylayer.py +++ b/src/plugins/lib/maps/dummylayer.py @@ -28,7 +28,7 @@ # #------------------------------------------------------------------------- import os -import gobject +from gi.repository import GObject #------------------------------------------------------------------------ # @@ -56,12 +56,12 @@ try: except: raise -class DummyLayer(gobject.GObject, osmgpsmap.GpsMapLayer): +class DummyLayer(GObject.GObject, osmgpsmap.GpsMapLayer): def __init__(self): """ Initialize the dummy layer """ - gobject.GObject.__init__(self) + GObject.GObject.__init__(self) def do_draw(self, gpsmap, gdkdrawable): """ @@ -87,5 +87,5 @@ class DummyLayer(gobject.GObject, osmgpsmap.GpsMapLayer): """ return False -gobject.type_register(DummyLayer) +GObject.type_register(DummyLayer) diff --git a/src/plugins/lib/maps/dummynogps.py b/src/plugins/lib/maps/dummynogps.py index 278ebb356..cec7d9b16 100644 --- a/src/plugins/lib/maps/dummynogps.py +++ b/src/plugins/lib/maps/dummynogps.py @@ -28,7 +28,7 @@ # #------------------------------------------------------------------------- import os -import gobject +from gi.repository import GObject #------------------------------------------------------------------------ # @@ -60,5 +60,5 @@ class DummyMapNoGpsPoint(osmgpsmap.GpsMap): def do_draw_gps_point(self, drawable): pass -gobject.type_register(DummyMapNoGpsPoint) +GObject.type_register(DummyMapNoGpsPoint) diff --git a/src/plugins/lib/maps/geography.py b/src/plugins/lib/maps/geography.py index 9abdbedfb..46c061e05 100644 --- a/src/plugins/lib/maps/geography.py +++ b/src/plugins/lib/maps/geography.py @@ -30,7 +30,7 @@ from gen.ggettext import sgettext as _ import os import re -import gobject +from gi.repository import GObject import time #------------------------------------------------------------------------- @@ -38,7 +38,8 @@ import time # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk +from gi.repository import GdkPixbuf #------------------------------------------------------------------------- # @@ -144,11 +145,11 @@ class GeoGraphyView(OsmGps, NavigationView): self.place_list = [] self.places_found = [] self.select_fct = None - self.geo_mainmap = gtk.gdk.pixbuf_new_from_file_at_size( + self.geo_mainmap = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(const.ROOT_DIR, "images", "48x48", ('gramps-geo-mainmap' + '.png' )), 48, 48) - self.geo_altmap = gtk.gdk.pixbuf_new_from_file_at_size( + self.geo_altmap = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(const.ROOT_DIR, "images", "48x48", ('gramps-geo-altmap' + '.png' )), 48, 48) @@ -161,7 +162,7 @@ class GeoGraphyView(OsmGps, NavigationView): for ident in ( gen.lib.EventType.BIRTH, gen.lib.EventType.DEATH, gen.lib.EventType.MARRIAGE ): - self.geo_othermap[ident] = gtk.gdk.pixbuf_new_from_file_at_size( + self.geo_othermap[ident] = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(const.ROOT_DIR, "images", "48x48", (constants.ICONS.get(int(ident), default_image) + '.png' )), 48, 48) @@ -232,14 +233,14 @@ class GeoGraphyView(OsmGps, NavigationView): """ Builds the menu for actions on the map. """ - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_('Map Menu')) if config.get("geography.show_cross"): title = _('Remove cross hair') else: title = _('Add cross hair') - add_item = gtk.MenuItem(title) + add_item = Gtk.MenuItem(title) add_item.connect("activate", self.config_crosshair, event, lat , lon) add_item.show() menu.append(add_item) @@ -248,23 +249,23 @@ class GeoGraphyView(OsmGps, NavigationView): title = _('Unlock zoom and position') else: title = _('Lock zoom and position') - add_item = gtk.MenuItem(title) + add_item = Gtk.MenuItem(title) add_item.connect("activate", self.config_zoom_and_position, event, lat , lon) add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Add place")) + add_item = Gtk.MenuItem(_("Add place")) add_item.connect("activate", self.add_place, event, lat , lon) add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Link place")) + add_item = Gtk.MenuItem(_("Link place")) add_item.connect("activate", self.link_place, event, lat , lon) add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Center here")) + add_item = Gtk.MenuItem(_("Center here")) add_item.connect("activate", self.set_center, event, lat , lon) add_item.show() menu.append(add_item) @@ -272,7 +273,7 @@ class GeoGraphyView(OsmGps, NavigationView): # Add specific module menu self.add_specific_menu(menu, event, lat, lon) # Add a separator line - add_item = gtk.MenuItem(None) + add_item = Gtk.MenuItem(None) add_item.show() menu.append(add_item) @@ -280,17 +281,17 @@ class GeoGraphyView(OsmGps, NavigationView): title = _("Replace '%(map)s' by =>") % { 'map' : map_name } - add_item = gtk.MenuItem(title) + add_item = Gtk.MenuItem(title) add_item.show() menu.append(add_item) - changemap = gtk.Menu() + changemap = Gtk.Menu() changemap.set_title(title) changemap.show() add_item.set_submenu(changemap) # show in the map menu all available providers for map in constants.map_type: - changemapitem = gtk.MenuItem(constants.map_title[map]) + changemapitem = Gtk.MenuItem(constants.map_title[map]) changemapitem.show() changemapitem.connect("activate", self.change_map, map) changemap.append(changemapitem) @@ -549,10 +550,10 @@ class GeoGraphyView(OsmGps, NavigationView): and lvl < 18 ): lvl += 1 self.osm.set_zoom(lvl) - gobject.timeout_add(50, self._autozoom_in, lvl, + GObject.timeout_add(50, self._autozoom_in, lvl, p1lat, p1lon, p2lat, p2lon) else: - gobject.timeout_add(50, self._autozoom_out, lvl, + GObject.timeout_add(50, self._autozoom_out, lvl, p1lat, p1lon, p2lat, p2lon) def _autozoom_out(self, lvl, p1lat, p1lon, p2lat, p2lon): @@ -564,7 +565,7 @@ class GeoGraphyView(OsmGps, NavigationView): and lvl > 1 ): lvl -= 1 self.osm.set_zoom(lvl) - gobject.timeout_add(50, self._autozoom_out, lvl, + GObject.timeout_add(50, self._autozoom_out, lvl, p1lat, p1lon, p2lat, p2lon) else: layer = self.get_selection_layer() @@ -591,7 +592,7 @@ class GeoGraphyView(OsmGps, NavigationView): p2lat = self.end_selection.rlat p2lon = self.end_selection.rlon # We zoom in until at least one marker missing. - gobject.timeout_add(50, self._autozoom_in, level_start, + GObject.timeout_add(50, self._autozoom_in, level_start, p1lat, p1lon, p2lat, p2lon) def _set_center_and_zoom(self): @@ -694,25 +695,25 @@ class GeoGraphyView(OsmGps, NavigationView): """ Create the place menu of a marker """ - add_item = gtk.MenuItem() + add_item = Gtk.MenuItem() add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Place")) + modify = Gtk.MenuItem(_("Edit Place")) modify.show() modify.connect("activate", self.edit_place, event, lat, lon, mark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, mark) itemoption.append(center) - add_item = gtk.MenuItem() + add_item = Gtk.MenuItem() add_item.show() menu.append(add_item) @@ -901,7 +902,7 @@ class GeoGraphyView(OsmGps, NavigationView): Add specific entry to the preference menu. Must be done in the associated view. """ - table = gtk.Table(2, 2) + table = Gtk.Table(2, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -918,7 +919,7 @@ class GeoGraphyView(OsmGps, NavigationView): config.get('geography.zoom_when_center')) self._config.set('geography.max_places', self._config.get('geography.max_places')) - table = gtk.Table(1, 1) + table = Gtk.Table(1, 1) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) diff --git a/src/plugins/lib/maps/lifewaylayer.py b/src/plugins/lib/maps/lifewaylayer.py index 5cdc4390f..d571651ca 100644 --- a/src/plugins/lib/maps/lifewaylayer.py +++ b/src/plugins/lib/maps/lifewaylayer.py @@ -28,7 +28,7 @@ # #------------------------------------------------------------------------- import os -import gobject +from gi.repository import GObject from math import * #------------------------------------------------------------------------ @@ -44,7 +44,7 @@ _LOG = logging.getLogger("maps.lifeway") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -65,7 +65,7 @@ try: except: raise -class LifeWayLayer(gobject.GObject, osmgpsmap.GpsMapLayer): +class LifeWayLayer(GObject.GObject, osmgpsmap.GpsMapLayer): """ This is the layer used to display tracks or the life way for one or several individuals. @@ -74,7 +74,7 @@ class LifeWayLayer(gobject.GObject, osmgpsmap.GpsMapLayer): """ Initialize the layer """ - gobject.GObject.__init__(self) + GObject.GObject.__init__(self) self.lifeways_ref = [] self.lifeways = [] self.comments = [] @@ -110,7 +110,7 @@ class LifeWayLayer(gobject.GObject, osmgpsmap.GpsMapLayer): ctx.set_line_cap(cairo.LINE_CAP_ROUND) ctx.set_line_join(cairo.LINE_JOIN_ROUND) ctx.set_line_width(3) - color = gtk.gdk.color_parse(lifeway[1]) + color = Gdk.color_parse(lifeway[1]) ctx.set_source_rgba(float(color.red / 65535.0), float(color.green / 65535.0), float(color.blue / 65535.0), @@ -154,7 +154,7 @@ class LifeWayLayer(gobject.GObject, osmgpsmap.GpsMapLayer): conv_pt = osmgpsmap.point_new_degrees(point[0], point[1]) coord_x, coord_y = gpsmap.convert_geographic_to_screen(conv_pt) map_points.append((coord_x, coord_y)) - color = gtk.gdk.color_parse(lifeway[1]) + color = Gdk.color_parse(lifeway[1]) ctx.set_source_rgb(float(color.red / 65535.0), float(color.green / 65535.0), float(color.blue / 65535.0)) @@ -191,5 +191,5 @@ class LifeWayLayer(gobject.GObject, osmgpsmap.GpsMapLayer): """ return False -gobject.type_register(LifeWayLayer) +GObject.type_register(LifeWayLayer) diff --git a/src/plugins/lib/maps/markerlayer.py b/src/plugins/lib/maps/markerlayer.py index 7dfcc4308..72a2f35b0 100644 --- a/src/plugins/lib/maps/markerlayer.py +++ b/src/plugins/lib/maps/markerlayer.py @@ -28,7 +28,7 @@ # #------------------------------------------------------------------------- import os -import gobject +from gi.repository import GObject from math import * #------------------------------------------------------------------------ @@ -44,7 +44,7 @@ _LOG = logging.getLogger("maps.marker") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -73,7 +73,7 @@ try: except: raise -class MarkerLayer(gobject.GObject, osmgpsmap.GpsMapLayer): +class MarkerLayer(GObject.GObject, osmgpsmap.GpsMapLayer): """ This is the layer used to display the markers. """ @@ -81,7 +81,7 @@ class MarkerLayer(gobject.GObject, osmgpsmap.GpsMapLayer): """ Initialize the layer """ - gobject.GObject.__init__(self) + GObject.GObject.__init__(self) self.markers = [] self.max_references = 0 self.max_places = 0 @@ -181,5 +181,5 @@ class MarkerLayer(gobject.GObject, osmgpsmap.GpsMapLayer): """ return False -gobject.type_register(MarkerLayer) +GObject.type_register(MarkerLayer) diff --git a/src/plugins/lib/maps/messagelayer.py b/src/plugins/lib/maps/messagelayer.py index 5190f8fee..8fcb232c6 100644 --- a/src/plugins/lib/maps/messagelayer.py +++ b/src/plugins/lib/maps/messagelayer.py @@ -54,8 +54,6 @@ import gtk #------------------------------------------------------------------------- import const import cairo -import pango -import pangocairo #------------------------------------------------------------------------- # @@ -81,7 +79,6 @@ class MessageLayer(gobject.GObject, osmgpsmap.GpsMapLayer): self.color = "black" self.font = "Arial" self.size = 18 - #font_map = pangocairo.cairo_font_map_get_default() #families = font_map.list_families() def clear_messages(self): diff --git a/src/plugins/lib/maps/osmGps.py b/src/plugins/lib/maps/osmGps.py index 5fdbf72e6..3351bcabe 100644 --- a/src/plugins/lib/maps/osmGps.py +++ b/src/plugins/lib/maps/osmGps.py @@ -28,7 +28,7 @@ # #------------------------------------------------------------------------- import os -import gobject +from gi.repository import GObject #------------------------------------------------------------------------ # @@ -44,7 +44,7 @@ _LOG = logging.getLogger("maps.osmgps") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -100,7 +100,7 @@ class OsmGps(): """ create the vbox """ - self.vbox = gtk.VBox(False, 0) + self.vbox = Gtk.VBox(False, 0) cache_path = config.get('geography.path') if not os.path.isdir(cache_path): try: @@ -157,7 +157,7 @@ class OsmGps(): self.osm.connect("motion-notify-event", self.motion_event) self.osm.connect('changed', self.zoom_changed) self.osm.show() - self.vbox.pack_start(self.osm) + self.vbox.pack_start(self.osm, True, True, 0) self.goto_handle(handle=None) def add_selection_layer(self): @@ -314,11 +314,11 @@ class OsmGps(): else: # do we click on a marker ? self.is_there_a_marker_here(event, lat, lon) - elif event.button == 2 and event.type == gtk.gdk.BUTTON_PRESS: + elif event.button == 2 and event.type == Gdk.EventType.BUTTON_PRESS: self.begin_selection = current self.end_selection = None self.zone_selection = True - elif event.button == 2 and event.type == gtk.gdk.BUTTON_RELEASE: + elif event.button == 2 and event.type == Gdk.EventType.BUTTON_RELEASE: self.end_selection = current self.zone_selection = False elif event.button == 3: diff --git a/src/plugins/lib/maps/placeselection.py b/src/plugins/lib/maps/placeselection.py index 3720cd1ca..de3ef92fb 100644 --- a/src/plugins/lib/maps/placeselection.py +++ b/src/plugins/lib/maps/placeselection.py @@ -29,7 +29,7 @@ #------------------------------------------------------------------------- from gen.ggettext import sgettext as _ import re -import gobject +from gi.repository import GObject import math #------------------------------------------------------------------------ @@ -45,7 +45,7 @@ _LOG = logging.getLogger("maps.placeselection") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -118,51 +118,50 @@ class PlaceSelection(ManagedWindow, OsmGps): self.function = function self.selection_layer = layer self.layer = layer - alignment = gtk.Alignment(0, 1, 0, 0) + alignment = Gtk.Alignment.new(0, 1, 0, 0) self.set_window( - gtk.Dialog(_('Place Selection in a region'), - flags=gtk.DIALOG_NO_SEPARATOR, - buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)), + Gtk.Dialog(_('Place Selection in a region'), + buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)), None, _('Place Selection in a region'), None) - label = gtk.Label(_('Choose the radius of the selection.\n' + label = Gtk.Label(label=_('Choose the radius of the selection.\n' 'On the map you should see a circle or an' ' oval depending on the latitude.')) alignment.add(label) - self.window.vbox.pack_start(alignment, expand=False) - adj = gtk.Adjustment(1.0, 0.1, 3.0, 0.1, 0, 0) + self.window.vbox.pack_start(alignment, False, True, 0) + adj = Gtk.Adjustment(1.0, 0.1, 3.0, 0.1, 0, 0) # default value is 1.0, minimum is 0.1 and max is 3.0 - slider = gtk.HScale(adj) - slider.set_update_policy(gtk.UPDATE_DISCONTINUOUS) + slider = Gtk.HScale(adj) + slider.set_update_policy(Gtk.UPDATE_DISCONTINUOUS) slider.set_digits(1) - slider.set_value_pos(gtk.POS_BOTTOM) + slider.set_value_pos(Gtk.PositionType.BOTTOM) slider.connect('value-changed', self.slider_change, self.lat, self.lon) - self.window.vbox.pack_start(slider, expand=False) - self.vadjust = gtk.Adjustment(page_size=15) - self.scroll = gtk.ScrolledWindow(self.vadjust) - self.scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - self.scroll.set_shadow_type(gtk.SHADOW_IN) - self.plist = gtk.ListStore(str, str, str) - self.choices = gtk.TreeView(self.plist) + self.window.vbox.pack_start(slider, False, True, 0) + self.vadjust = Gtk.Adjustment(page_size=15) + self.scroll = Gtk.ScrolledWindow(self.vadjust) + self.scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + self.scroll.set_shadow_type(Gtk.ShadowType.IN) + self.plist = Gtk.ListStore(str, str, str) + self.choices = Gtk.TreeView(self.plist) self.scroll.add(self.choices) - self.renderer = gtk.CellRendererText() - self.tvcol1 = gtk.TreeViewColumn(_('Country'), self.renderer, markup=0) - self.tvcol2 = gtk.TreeViewColumn(_('State'), self.renderer, markup=1) - self.tvcol3 = gtk.TreeViewColumn(_('County'), self.renderer, markup=2) + self.renderer = Gtk.CellRendererText() + self.tvcol1 = Gtk.TreeViewColumn(_('Country'), self.renderer, markup=0) + self.tvcol2 = Gtk.TreeViewColumn(_('State'), self.renderer, markup=1) + self.tvcol3 = Gtk.TreeViewColumn(_('County'), self.renderer, markup=2) self.tvcol1.set_sort_column_id(0) self.tvcol2.set_sort_column_id(1) self.tvcol3.set_sort_column_id(2) self.choices.append_column(self.tvcol1) self.choices.append_column(self.tvcol2) self.choices.append_column(self.tvcol3) - self.window.vbox.pack_start(self.scroll, expand=True) - self.label2 = gtk.Label() + self.window.vbox.pack_start(self.scroll, True, True, 0) + self.label2 = Gtk.Label() self.label2.set_markup('%s' % _('The green values in the row correspond ' 'to the current place values.')) - alignment = gtk.Alignment(0, 1, 0, 0) + alignment = Gtk.Alignment.new(0, 1, 0, 0) alignment.add(self.label2) - self.window.vbox.pack_start(alignment, expand=False) + self.window.vbox.pack_start(alignment, False, True, 0) self.window.set_default_size(400, 300) self.choices.connect('row-activated', self.selection, function) self.window.connect('response', self.close) diff --git a/src/plugins/lib/maps/selectionlayer.py b/src/plugins/lib/maps/selectionlayer.py index 18847a1a2..58cf80460 100644 --- a/src/plugins/lib/maps/selectionlayer.py +++ b/src/plugins/lib/maps/selectionlayer.py @@ -28,7 +28,7 @@ # #------------------------------------------------------------------------- import os -import gobject +from gi.repository import GObject #------------------------------------------------------------------------ # @@ -56,12 +56,12 @@ try: except: raise -class SelectionLayer(gobject.GObject, osmgpsmap.GpsMapLayer): +class SelectionLayer(GObject.GObject, osmgpsmap.GpsMapLayer): def __init__(self): """ Initialize thz selection layer """ - gobject.GObject.__init__(self) + GObject.GObject.__init__(self) self.circles = [] self.rectangles = [] @@ -129,5 +129,5 @@ class SelectionLayer(gobject.GObject, osmgpsmap.GpsMapLayer): """ return False -gobject.type_register(SelectionLayer) +GObject.type_register(SelectionLayer) diff --git a/src/plugins/sidebar/categorysidebar.py b/src/plugins/sidebar/categorysidebar.py index 263c3539c..40c4b1fcc 100644 --- a/src/plugins/sidebar/categorysidebar.py +++ b/src/plugins/sidebar/categorysidebar.py @@ -28,7 +28,7 @@ # GNOME modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -96,10 +96,10 @@ class CategorySidebar(BaseSidebar): self.cat_view_group = None self.merge_ids = [] - self.window = gtk.ScrolledWindow() - vbox = gtk.VBox() + self.window = Gtk.ScrolledWindow() + vbox = Gtk.VBox() self.window.add_with_viewport(vbox) - self.window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + self.window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.window.show() use_text = config.get('interface.sidebar-text') @@ -118,7 +118,7 @@ class CategorySidebar(BaseSidebar): # create the button and add it to the sidebar button = self.__make_sidebar_button(use_text, cat_num, category, cat_icon) - vbox.pack_start(button, False) + vbox.pack_start(button, False, True, 0) # Enable view switching during DnD button.drag_dest_set(0, [], 0) @@ -166,7 +166,7 @@ class CategorySidebar(BaseSidebar): map(uimanager.remove_ui, self.merge_ids) if cat_num in self.ui_category: - self.cat_view_group = gtk.ActionGroup('categoryviews') + self.cat_view_group = Gtk.ActionGroup('categoryviews') self.cat_view_group.add_radio_actions( self.view_toggle_actions[cat_num], value=view_num, on_change=self.cb_view_clicked, user_data=cat_num) @@ -220,8 +220,8 @@ class CategorySidebar(BaseSidebar): the button. """ # create the button - button = gtk.ToggleButton() - button.set_relief(gtk.RELIEF_NONE) + button = Gtk.ToggleButton() + button.set_relief(Gtk.ReliefStyle.NONE) button.set_alignment(0, 0.5) self.buttons.append(button) @@ -235,22 +235,22 @@ class CategorySidebar(BaseSidebar): # add the image. If we are using text, use the BUTTON (larger) size. # otherwise, use the smaller size - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.show() - image = gtk.Image() + image = Gtk.Image() if use_text: - image.set_from_stock(page_stock, gtk.ICON_SIZE_BUTTON) + image.set_from_stock(page_stock, Gtk.IconSize.BUTTON) else: - image.set_from_stock(page_stock, gtk.ICON_SIZE_DND) + image.set_from_stock(page_stock, Gtk.IconSize.DND) image.show() - hbox.pack_start(image, False, False) + hbox.pack_start(image, False, False, 0) hbox.set_spacing(4) # add text if requested if use_text: - label = gtk.Label(page_title) + label = Gtk.Label(label=page_title) label.show() - hbox.pack_start(label, False, True) + hbox.pack_start(label, False, True, 0) button.add(hbox) return button diff --git a/src/plugins/tool/ChangeNames.py b/src/plugins/tool/ChangeNames.py index 138ea3334..8ed190bd8 100644 --- a/src/plugins/tool/ChangeNames.py +++ b/src/plugins/tool/ChangeNames.py @@ -29,8 +29,8 @@ # gnome/gtk # #------------------------------------------------------------------------- -import gobject -import gtk +from gi.repository import GObject +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -76,7 +76,7 @@ class ChangeNames(tool.BatchTool, ManagedWindow): self.cb = callback ManagedWindow.__init__(self,uistate,[],self.__class__) - self.set_window(gtk.Window(),gtk.Label(),'') + self.set_window(Gtk.Window(),Gtk.Label(),'') tool.BatchTool.__init__(self, dbstate, options_class, name) if self.fail: @@ -186,20 +186,20 @@ class ChangeNames(tool.BatchTool, ManagedWindow): self.list = self.top.get_object("list") self.set_window(window,self.top.get_object('title'),self.label) - self.model = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, - gobject.TYPE_STRING) + self.model = Gtk.ListStore(GObject.TYPE_BOOLEAN, GObject.TYPE_STRING, + GObject.TYPE_STRING) - r = gtk.CellRendererToggle() + r = Gtk.CellRendererToggle() r.connect('toggled',self.toggled) - c = gtk.TreeViewColumn(_('Select'),r,active=0) + c = Gtk.TreeViewColumn(_('Select'),r,active=0) self.list.append_column(c) - c = gtk.TreeViewColumn(_('Original Name'), - gtk.CellRendererText(),text=1) + c = Gtk.TreeViewColumn(_('Original Name'), + Gtk.CellRendererText(),text=1) self.list.append_column(c) - c = gtk.TreeViewColumn(_('Capitalization Change'), - gtk.CellRendererText(),text=2) + c = Gtk.TreeViewColumn(_('Capitalization Change'), + Gtk.CellRendererText(),text=2) self.list.append_column(c) self.list.set_model(self.model) diff --git a/src/plugins/tool/ChangeTypes.py b/src/plugins/tool/ChangeTypes.py index 47da3058f..8697cee56 100644 --- a/src/plugins/tool/ChangeTypes.py +++ b/src/plugins/tool/ChangeTypes.py @@ -84,10 +84,10 @@ class ChangeTypes(tool.BatchTool, ManagedWindow): fill_combo(self.auto2,event_names) etype.set_from_xml_str(self.options.handler.options_dict['fromtype']) - self.auto1.child.set_text(str(etype)) + self.auto1.get_child().set_text(str(etype)) etype.set_from_xml_str(self.options.handler.options_dict['totype']) - self.auto2.child.set_text(str(etype)) + self.auto2.get_child().set_text(str(etype)) window = self.glade.toplevel self.set_window(window,self.glade.get_object('title'),self.title) @@ -144,10 +144,10 @@ class ChangeTypes(tool.BatchTool, ManagedWindow): # Need to store English names for later comparison the_type = EventType() - the_type.set(self.auto1.child.get_text()) + the_type.set(self.auto1.get_child().get_text()) self.options.handler.options_dict['fromtype'] = the_type.xml_str() - the_type.set(self.auto2.child.get_text()) + the_type.set(self.auto2.get_child().get_text()) self.options.handler.options_dict['totype'] = the_type.xml_str() modified,msg = self.run_tool(cli=False) diff --git a/src/plugins/tool/Check.py b/src/plugins/tool/Check.py index 108b2b4f0..d16852be7 100644 --- a/src/plugins/tool/Check.py +++ b/src/plugins/tool/Check.py @@ -55,7 +55,7 @@ LOG_OBJ = logging.getLogger(".CheckRepair") # gtk modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -642,15 +642,15 @@ class CheckIntegrity(object): self.bad_photo.append(ObjectId) LOG(' FAIL: references to missing file kept') - fs_top = gtk.FileChooserDialog("%s - Gramps" % _("Select file"), - buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, - gtk.STOCK_OK, gtk.RESPONSE_OK) + fs_top = Gtk.FileChooserDialog("%s - Gramps" % _("Select file"), + buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + Gtk.STOCK_OK, Gtk.ResponseType.OK) ) fs_top.set_current_folder(self.last_img_dir) response = fs_top.run() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: fs_ok_clicked(fs_top) - elif response == gtk.RESPONSE_CANCEL: + elif response == Gtk.ResponseType.CANCEL: fs_close_window(fs_top) fs_top.destroy() diff --git a/src/plugins/tool/Desbrowser.py b/src/plugins/tool/Desbrowser.py index 66d44a3d4..3052fa595 100644 --- a/src/plugins/tool/Desbrowser.py +++ b/src/plugins/tool/Desbrowser.py @@ -29,7 +29,7 @@ # GTK/GNOME modules # #------------------------------------------------------------------------ -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------ # @@ -84,7 +84,7 @@ class DesBrowse(tool.ActivePersonTool, ManagedWindow): self.active_name) self.tree = self.glade.get_object("tree1") - col = gtk.TreeViewColumn('',gtk.CellRendererText(),text=0) + col = Gtk.TreeViewColumn('',Gtk.CellRendererText(),text=0) self.tree.append_column(col) self.tree.set_rules_hint(True) self.tree.set_headers_visible(False) @@ -97,7 +97,7 @@ class DesBrowse(tool.ActivePersonTool, ManagedWindow): return (self.active_name,_("Descendant Browser tool")) def make_new_model(self): - self.model = gtk.TreeStore(str, object) + self.model = Gtk.TreeStore(str, object) self.tree.set_model(self.model) self.add_to_tree(None, None, self.active.get_handle()) self.tree.expand_all() @@ -120,7 +120,7 @@ class DesBrowse(tool.ActivePersonTool, ManagedWindow): return item_id def button_press_event(self, obj,event): - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: store, node = self.tree.get_selection().get_selected() if node: person_handle = store.get_value(node, 1) diff --git a/src/plugins/tool/DumpGenderStats.py b/src/plugins/tool/DumpGenderStats.py index 9a3c8fcf7..3421a01a4 100644 --- a/src/plugins/tool/DumpGenderStats.py +++ b/src/plugins/tool/DumpGenderStats.py @@ -27,7 +27,7 @@ Tools/Debug/Dump Gender Statistics """ from gen.ggettext import gettext as _ -import gtk +from gi.repository import Gtk from gui.listmodel import ListModel, INTEGER from gui.managedwindow import ManagedWindow @@ -66,14 +66,14 @@ class DumpGenderStats(tool.Tool, ManagedWindow): (_('Guess'),4,70) ] - treeview = gtk.TreeView() + treeview = Gtk.TreeView() model = ListModel(treeview,titles) for entry in stats_list: model.add(entry,entry[0]) - window = gtk.Window() + window = Gtk.Window() window.set_default_size(400,300) - s = gtk.ScrolledWindow() + s = Gtk.ScrolledWindow() s.add(treeview) window.add(s) window.show_all() diff --git a/src/plugins/tool/EventCmp.py b/src/plugins/tool/EventCmp.py index 61e0e6584..ec9b2fd01 100644 --- a/src/plugins/tool/EventCmp.py +++ b/src/plugins/tool/EventCmp.py @@ -37,7 +37,7 @@ from collections import defaultdict # GNOME/GTK modules # #------------------------------------------------------------------------ -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------ # @@ -280,7 +280,7 @@ class DisplayChart(ManagedWindow): model_index = 0 tree_index = 0 mylist = [] - renderer = gtk.CellRendererText() + renderer = Gtk.CellRendererText() for title in self.table_titles: mylist.append(str) if title == 'sort': @@ -288,7 +288,7 @@ class DisplayChart(ManagedWindow): self.eventlist.get_column( tree_index-1).set_sort_column_id(model_index) else: - column = gtk.TreeViewColumn(title,renderer,text=model_index) + column = Gtk.TreeViewColumn(title,renderer,text=model_index) column.set_sort_column_id(model_index) self.eventlist.append_column(column) # This one numbers the tree columns: increment on new column @@ -296,7 +296,7 @@ class DisplayChart(ManagedWindow): # This one numbers the model columns: always increment model_index += 1 - model = gtk.ListStore(*mylist) + model = Gtk.ListStore(*mylist) self.eventlist.set_model(model) self.progress_bar.set_pass(_('Building display'),len(self.row_data)) @@ -388,18 +388,18 @@ class DisplayChart(ManagedWindow): return sort_list def on_write_table(self, obj): - f = gtk.FileChooserDialog(_("Select filename"), - action=gtk.FILE_CHOOSER_ACTION_SAVE, - buttons=(gtk.STOCK_CANCEL, - gtk.RESPONSE_CANCEL, - gtk.STOCK_SAVE, - gtk.RESPONSE_OK)) + f = Gtk.FileChooserDialog(_("Select filename"), + action=Gtk.FileChooserAction.SAVE, + buttons=(Gtk.STOCK_CANCEL, + Gtk.ResponseType.CANCEL, + Gtk.STOCK_SAVE, + Gtk.ResponseType.OK)) f.set_current_folder(os.getcwd()) status = f.run() f.hide() - if status == gtk.RESPONSE_OK: + if status == Gtk.ResponseType.OK: name = Utils.get_unicode_path_from_file_chooser(f.get_filename()) doc = ODSTab(len(self.row_data)) doc.creator(self.db.get_researcher().get_name()) diff --git a/src/plugins/tool/ExtractCity.py b/src/plugins/tool/ExtractCity.py index 25b6c071a..14c344815 100644 --- a/src/plugins/tool/ExtractCity.py +++ b/src/plugins/tool/ExtractCity.py @@ -38,8 +38,8 @@ from gen.ggettext import gettext as _ # gnome/gtk # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -415,7 +415,7 @@ class ExtractCity(tool.BatchTool, ManagedWindow): self.label = _('Extract Place data') ManagedWindow.__init__(self, uistate, [], self.__class__) - self.set_window(gtk.Window(), gtk.Label(), '') + self.set_window(Gtk.Window(), Gtk.Label(), '') tool.BatchTool.__init__(self, dbstate, options_class, name) @@ -530,24 +530,24 @@ class ExtractCity(tool.BatchTool, ManagedWindow): 'be extracted from the place title. Select the places you ' 'wish Gramps to convert.')) - self.model = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING) + self.model = Gtk.ListStore(GObject.TYPE_BOOLEAN, GObject.TYPE_STRING, + GObject.TYPE_STRING, GObject.TYPE_STRING, + GObject.TYPE_STRING, GObject.TYPE_STRING, + GObject.TYPE_STRING) - r = gtk.CellRendererToggle() + r = Gtk.CellRendererToggle() r.connect('toggled', self.toggled) - c = gtk.TreeViewColumn(_('Select'), r, active=0) + c = Gtk.TreeViewColumn(_('Select'), r, active=0) self.list.append_column(c) for (title, col) in COLS: - render = gtk.CellRendererText() + render = Gtk.CellRendererText() if col > 1: render.set_property('editable', True) render.connect('edited', self.__change_name, col) self.list.append_column( - gtk.TreeViewColumn(title, render, text=col)) + Gtk.TreeViewColumn(title, render, text=col)) self.list.set_model(self.model) self.iter_list = [] diff --git a/src/plugins/tool/FindDupes.py b/src/plugins/tool/FindDupes.py index bb55633d1..28b48a187 100644 --- a/src/plugins/tool/FindDupes.py +++ b/src/plugins/tool/FindDupes.py @@ -29,7 +29,7 @@ # GNOME libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -109,7 +109,7 @@ class Merge(tool.Tool,ManagedWindow): threshold = self.options.handler.options_dict['threshold'] use_soundex = self.options.handler.options_dict['soundex'] - my_menu = gtk.ListStore(str, object) + my_menu = Gtk.ListStore(str, object) for val in sorted(_val2label): my_menu.append([_val2label[val], val]) diff --git a/src/plugins/tool/Leak.py b/src/plugins/tool/Leak.py index f4953b534..d20e9124d 100644 --- a/src/plugins/tool/Leak.py +++ b/src/plugins/tool/Leak.py @@ -43,8 +43,8 @@ else: # GNOME/GTK modules # #------------------------------------------------------------------------ -import gtk -import pango +from gi.repository import Gtk +from gi.repository import Pango import gc #------------------------------------------------------------------------ @@ -75,25 +75,25 @@ class Leak(tool.Tool, ManagedWindow): self.window = self.glade.toplevel self.scroll = self.glade.get_object("scrolledwindow1") #add a listview to the scrollable - self.list = gtk.TreeView() + self.list = Gtk.TreeView() self.list.set_headers_visible(True) self.list.connect('button-press-event', self._button_press) self.scroll.add(self.list) #make a model self.modeldata = [] - self.model = gtk.ListStore(int, str) + self.model = Gtk.ListStore(int, str) self.list.set_model(self.model) #set the colums - self.renderer = gtk.CellRendererText() - column = gtk.TreeViewColumn(_('Number'), self.renderer, text=0) + self.renderer = Gtk.CellRendererText() + column = Gtk.TreeViewColumn(_('Number'), self.renderer, text=0) column.set_resizable(True) - column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_sizing(Gtk.TreeViewColumnSizing.FIXED) self.list.append_column(column) - column = gtk.TreeViewColumn(_('Uncollected object'), self.renderer, + column = Gtk.TreeViewColumn(_('Uncollected object'), self.renderer, text=1) column.set_resizable(True) - column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) + column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) self.list.append_column(column) self.selection = self.list.get_selection() @@ -114,7 +114,7 @@ class Leak(tool.Tool, ManagedWindow): return (self.title,None) def _button_press(self, obj, event): - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: self.referenced_in() return True elif gui.utils.is_right_click(event): diff --git a/src/plugins/tool/MediaManager.py b/src/plugins/tool/MediaManager.py index 16fcedc1f..71d9789eb 100644 --- a/src/plugins/tool/MediaManager.py +++ b/src/plugins/tool/MediaManager.py @@ -41,8 +41,9 @@ import os # GNOME/GTK modules # #------------------------------------------------------------------------ -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GdkPixbuf +from gi.repository import GObject #------------------------------------------------------------------------ # @@ -85,9 +86,9 @@ class MediaMan(tool.Tool): self.batch_ops = [] self.build_batch_ops() - self.assistant = gtk.Assistant() - self.logo = gtk.gdk.pixbuf_new_from_file(GRAMPS_PNG) - self.splash = gtk.gdk.pixbuf_new_from_file(SPLASH_JPG) + self.assistant = Gtk.Assistant() + self.logo = GdkPixbuf.Pixbuf.new_from_file(GRAMPS_PNG) + self.splash = GdkPixbuf.Pixbuf.new_from_file(SPLASH_JPG) self.assistant.set_title(_('Gramps Media Manager')) self.assistant.connect('close', self.close) @@ -97,17 +98,17 @@ class MediaMan(tool.Tool): self.assistant.set_forward_page_func(self.forward_page) intro = IntroductionPage() - self.add_page(intro, gtk.ASSISTANT_PAGE_INTRO, _('Introduction')) + self.add_page(intro, Gtk.AssistantPageType.INTRO, _('Introduction')) self.selection = SelectionPage(self.batch_ops) - self.add_page(self.selection, gtk.ASSISTANT_PAGE_CONTENT, + self.add_page(self.selection, Gtk.AssistantPageType.CONTENT, _('Selection')) self.settings = SettingsPage(self.batch_ops, self.assistant) - self.add_page(self.settings, gtk.ASSISTANT_PAGE_CONTENT) + self.add_page(self.settings, Gtk.AssistantPageType.CONTENT) self.confirmation = ConfirmationPage(self.batch_ops) - self.add_page(self.confirmation, gtk.ASSISTANT_PAGE_CONFIRM, + self.add_page(self.confirmation, Gtk.AssistantPageType.CONFIRM, _('Final confirmation')) self.conclusion = ConclusionPage(self.assistant) - self.add_page(self.conclusion, gtk.ASSISTANT_PAGE_SUMMARY) + self.add_page(self.conclusion, Gtk.AssistantPageType.SUMMARY) self.assistant.show() @@ -198,19 +199,19 @@ class MediaMan(tool.Tool): # Assistant pages # #------------------------------------------------------------------------ -class IntroductionPage(gtk.HBox): +class IntroductionPage(Gtk.HBox): """ A page containing introductory text. """ def __init__(self): - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) # Using set_page_side_image causes window sizing problems, so put the # image in the main page instead. - image = gtk.Image() + image = Gtk.Image() image.set_from_file(SPLASH_JPG) - label = gtk.Label(self.__get_intro_text()) + label = Gtk.Label(label=self.__get_intro_text()) label.set_line_wrap(True) label.set_use_markup(True) @@ -240,18 +241,18 @@ class IntroductionPage(gtk.HBox): "Gramps. Then you can adjust the paths using this tool so " "that the media objects store the correct file locations.") -class SelectionPage(gtk.VBox): +class SelectionPage(Gtk.VBox): """ A page with the radio buttons for every available batch op. """ def __init__(self, batch_ops): - gtk.VBox.__init__(self) + GObject.GObject.__init__(self) self.batch_op_buttons = [] self.set_spacing(12) - table = gtk.Table(2 * len(batch_ops), 2) + table = Gtk.Table(2 * len(batch_ops), 2) table.set_row_spacings(6) table.set_col_spacings(6) @@ -260,7 +261,7 @@ class SelectionPage(gtk.VBox): title = batch_ops[index].title description = batch_ops[index].description - button = gtk.RadioButton(group, title) + button = Gtk.RadioButton(group, title) button.set_tooltip_text(description) if not group: group = button @@ -281,12 +282,12 @@ class SelectionPage(gtk.VBox): else: return 0 -class SettingsPage(gtk.VBox): +class SettingsPage(Gtk.VBox): """ An extra page with the settings specific for the chosen batch-op. """ def __init__(self, batch_ops, assistant): - gtk.VBox.__init__(self) + GObject.GObject.__init__(self) self.assistant = assistant self.batch_ops = batch_ops @@ -299,47 +300,47 @@ class SettingsPage(gtk.VBox): title, contents = config self.assistant.set_page_title(self, title) map(self.remove, self.get_children()) - self.pack_start(contents) + self.pack_start(contents, True, True, 0) self.show_all() return True else: return False -class ConfirmationPage(gtk.VBox): +class ConfirmationPage(Gtk.VBox): """ A page to display the summary of the proposed action, as well as the list of affected paths. """ def __init__(self, batch_ops): - gtk.VBox.__init__(self) + GObject.GObject.__init__(self) self.batch_ops = batch_ops self.set_spacing(12) self.set_border_width(12) - self.confirm = gtk.Label() + self.confirm = Gtk.Label() self.confirm.set_line_wrap(True) self.confirm.set_use_markup(True) self.confirm.set_alignment(0, 0.5) - self.pack_start(self.confirm, expand=False) + self.pack_start(self.confirm, False, True, 0) - scrolled_window = gtk.ScrolledWindow() - scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - scrolled_window.set_shadow_type(gtk.SHADOW_IN) - tree = gtk.TreeView() - self.path_model = gtk.ListStore(gobject.TYPE_STRING) + scrolled_window = Gtk.ScrolledWindow() + scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) + scrolled_window.set_shadow_type(Gtk.ShadowType.IN) + tree = Gtk.TreeView() + self.path_model = Gtk.ListStore(GObject.TYPE_STRING) tree.set_model(self.path_model) - tree_view_column = gtk.TreeViewColumn(_('Affected path'), - gtk.CellRendererText(), text=0) + tree_view_column = Gtk.TreeViewColumn(_('Affected path'), + Gtk.CellRendererText(), text=0) tree_view_column.set_sort_column_id(0) tree.append_column(tree_view_column) scrolled_window.add(tree) self.pack_start(scrolled_window, expand=True, fill=True) - label3 = gtk.Label(_('Press Apply to proceed, Cancel to abort, ' + label3 = Gtk.Label(_('Press Apply to proceed, Cancel to abort, ' 'or Back to revisit your options.')) - self.pack_start(label3, expand=False) + self.pack_start(label3, False, True, 0) def prepare(self, index): """ @@ -354,22 +355,22 @@ class ConfirmationPage(gtk.VBox): for path in path_list: self.path_model.append(row=[path]) -class ConclusionPage(gtk.HBox): +class ConclusionPage(Gtk.HBox): """ A page to display the summary of the proposed action, as well as the list of affected paths. """ def __init__(self, assistant): - gtk.HBox.__init__(self) + GObject.GObject.__init__(self) self.assistant = assistant # Using set_page_side_image causes window sizing problems, so put the # image in the main page instead. - image = gtk.Image() + image = Gtk.Image() image.set_from_file(SPLASH_JPG) - self.label = gtk.Label() + self.label = Gtk.Label() self.label.set_line_wrap(True) self.pack_start(image, False, False, 0) @@ -485,26 +486,26 @@ class PathChange(BatchOp): def build_config(self): title = _("Replace substring settings") - box = gtk.VBox() + box = Gtk.VBox() box.set_spacing(12) - table = gtk.Table(2, 2) + table = Gtk.Table(2, 2) table.set_row_spacings(6) table.set_col_spacings(6) - self.from_entry = gtk.Entry() + self.from_entry = Gtk.Entry() table.attach(self.from_entry, 1, 2, 0, 1, yoptions=0) - from_label = gtk.Label(_('_Replace:')) + from_label = Gtk.Label(label=_('_Replace:')) from_label.set_use_underline(True) from_label.set_alignment(0, 0.5) from_label.set_mnemonic_widget(self.from_entry) table.attach(from_label, 0, 1, 0, 1, xoptions=0, yoptions=0) - self.to_entry = gtk.Entry() + self.to_entry = Gtk.Entry() table.attach(self.to_entry, 1, 2, 1, 2, yoptions=0) - to_label = gtk.Label(_('_With:')) + to_label = Gtk.Label(label=_('_With:')) to_label.set_use_underline(True) to_label.set_alignment(0, 0.5) to_label.set_mnemonic_widget(self.to_entry) diff --git a/src/plugins/tool/MergeCitations.py b/src/plugins/tool/MergeCitations.py index ca3962568..a7065f169 100644 --- a/src/plugins/tool/MergeCitations.py +++ b/src/plugins/tool/MergeCitations.py @@ -38,7 +38,7 @@ LOG = logging.getLogger(".citation") # GNOME libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -92,7 +92,7 @@ class MergeCitations(tool.BatchTool,ManagedWindow): ManagedWindow.__init__(self, uistate, [], self.__class__) self.dbstate = dbstate - self.set_window(gtk.Window(), gtk.Label(), '') + self.set_window(Gtk.Window(), Gtk.Label(), '') tool.BatchTool.__init__(self, dbstate, options_class, name) @@ -109,7 +109,7 @@ class MergeCitations(tool.BatchTool,ManagedWindow): fields = self.options.handler.options_dict['fields'] dont_merge_notes = self.options.handler.options_dict['dont_merge_notes'] - my_menu = gtk.ListStore(str, object) + my_menu = Gtk.ListStore(str, object) for val in sorted(_val2label): my_menu.append([_val2label[val], val]) diff --git a/src/plugins/tool/NotRelated.py b/src/plugins/tool/NotRelated.py index a02bf702c..093141c4d 100644 --- a/src/plugins/tool/NotRelated.py +++ b/src/plugins/tool/NotRelated.py @@ -37,8 +37,8 @@ import locale # GNOME/GTK modules # #------------------------------------------------------------------------ -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------ # @@ -102,7 +102,7 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow) : self.set_window(window, title, self.title) self.tagcombo = topDialog.get_object("tagcombo") - tagmodel = gtk.ListStore(str) + tagmodel = Gtk.ListStore(str) self.tagcombo.set_model(tagmodel) self.tagcombo.set_text_column(0) tagmodel.append((_('ToDo'),)) @@ -117,28 +117,28 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow) : self.progress = ProgressMeter(self.title,_('Starting')) # setup the columns - self.model = gtk.TreeStore( - gobject.TYPE_STRING, # 0==name - gobject.TYPE_STRING, # 1==person gid - gobject.TYPE_STRING, # 2==parents - gobject.TYPE_STRING, # 3==tags - gobject.TYPE_STRING) # 4==family gid (not shown to user) + self.model = Gtk.TreeStore( + GObject.TYPE_STRING, # 0==name + GObject.TYPE_STRING, # 1==person gid + GObject.TYPE_STRING, # 2==parents + GObject.TYPE_STRING, # 3==tags + GObject.TYPE_STRING) # 4==family gid (not shown to user) # note -- don't assign the model to the tree until it has been populated, # otherwise the screen updates are terribly slow while names are appended self.treeView = topDialog.get_object("treeview") - col1 = gtk.TreeViewColumn(_('Name'), gtk.CellRendererText(), text=0) - col2 = gtk.TreeViewColumn(_('ID'), gtk.CellRendererText(), text=1) - col3 = gtk.TreeViewColumn(_('Parents'), gtk.CellRendererText(), text=2) - col4 = gtk.TreeViewColumn(_('Tags'), gtk.CellRendererText(), text=3) + col1 = Gtk.TreeViewColumn(_('Name'), Gtk.CellRendererText(), text=0) + col2 = Gtk.TreeViewColumn(_('ID'), Gtk.CellRendererText(), text=1) + col3 = Gtk.TreeViewColumn(_('Parents'), Gtk.CellRendererText(), text=2) + col4 = Gtk.TreeViewColumn(_('Tags'), Gtk.CellRendererText(), text=3) col1.set_resizable(True) col2.set_resizable(True) col3.set_resizable(True) col4.set_resizable(True) - col1.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) - col2.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) - col3.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) - col4.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) + col1.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + col2.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + col3.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) + col4.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE) col1.set_sort_column_id(0) # col2.set_sort_column_id(1) # col3.set_sort_column_id(2) @@ -148,7 +148,7 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow) : self.treeView.append_column(col3) self.treeView.append_column(col4) self.treeSelection = self.treeView.get_selection() - self.treeSelection.set_mode(gtk.SELECTION_MULTIPLE) + self.treeSelection.set_mode(Gtk.SelectionMode.MULTIPLE) self.treeSelection.set_select_function(self.selectIsAllowed, full=True) self.treeSelection.connect('changed', self.rowSelectionChanged) self.treeView.connect('row-activated', self.rowActivated) @@ -177,9 +177,9 @@ class NotRelated(tool.ActivePersonTool, ManagedWindow) : title.set_text(_('Everyone in the database is related to %s') % self.name) else: self.populateModel() - self.model.set_sort_column_id(0, gtk.SORT_ASCENDING) + self.model.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.treeView.set_model(self.model) -# self.treeView.set_row_separator_func(self.iterIsSeparator) +# self.treeView.set_row_separator_func(self.iterIsSeparator, None) self.treeView.expand_all() # done searching through the database, so close the progress bar diff --git a/src/plugins/tool/OwnerEditor.py b/src/plugins/tool/OwnerEditor.py index 8e4bebc1e..b31fd4383 100644 --- a/src/plugins/tool/OwnerEditor.py +++ b/src/plugins/tool/OwnerEditor.py @@ -30,7 +30,7 @@ # gnome/gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # diff --git a/src/plugins/tool/PHPGedViewConnector.py b/src/plugins/tool/PHPGedViewConnector.py index 1ae9447a0..688fe54ca 100644 --- a/src/plugins/tool/PHPGedViewConnector.py +++ b/src/plugins/tool/PHPGedViewConnector.py @@ -25,7 +25,7 @@ import httplib import urllib2 -import gtk +from gi.repository import Gtk import os from tempfile import mkstemp from gen.ggettext import gettext as _ @@ -312,8 +312,8 @@ class phpGedViewImporter(object): self.progressbar.set_fraction( 1.0 * step / max) else: self.progressbar.set_fraction( 0.0) - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() def on_next_pressed_cb(self, widget, event=None, data=None): if event: @@ -413,7 +413,7 @@ def filter_url( url): ## l = f.readline() ## except IOError: ## phpGedViewImporter(None) -## gtk.main() +## Gtk.main() ## else: ## #------------------------------------------------------------------------- diff --git a/src/plugins/tool/PatchNames.py b/src/plugins/tool/PatchNames.py index 4d2277922..3f6e7d3ef 100644 --- a/src/plugins/tool/PatchNames.py +++ b/src/plugins/tool/PatchNames.py @@ -36,8 +36,8 @@ import re # gnome/gtk # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -105,40 +105,40 @@ class PatchNames(tool.BatchTool, ManagedWindow): def __init__(self, dbstate, uistate, options_class, name, callback=None): self.label = _('Name and title extraction tool') ManagedWindow.__init__(self, uistate, [], self.__class__) - self.set_window(gtk.Window(), gtk.Label(), '') + self.set_window(Gtk.Window(), Gtk.Label(), '') tool.BatchTool.__init__(self, dbstate, options_class, name) if self.fail: return - winprefix = gtk.Dialog(_("Default prefix and connector settings"), + winprefix = Gtk.Dialog(_("Default prefix and connector settings"), self.uistate.window, - gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, - (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) + Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT, + (Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT)) winprefix.set_has_separator(False) winprefix.vbox.set_spacing(5) - hboxpref = gtk.HBox() - hboxpref.pack_start(gtk.Label(_('Prefixes to search for:')), + hboxpref = Gtk.HBox() + hboxpref.pack_start(Gtk.Label(_('Prefixes to search for:', True, True, 0)), expand=False, padding=5) - self.prefixbox = gtk.Entry() + self.prefixbox = Gtk.Entry() self.prefixbox.set_text(', '.join(PREFIX_LIST)) - hboxpref.pack_start(self.prefixbox) - winprefix.vbox.pack_start(hboxpref) - hboxcon = gtk.HBox() - hboxcon.pack_start(gtk.Label(_('Connectors splitting surnames:')), + hboxpref.pack_start(self.prefixbox, True, True, 0) + winprefix.vbox.pack_start(hboxpref, True, True, 0) + hboxcon = Gtk.HBox() + hboxcon.pack_start(Gtk.Label(_('Connectors splitting surnames:', True, True, 0)), expand=False, padding=5) - self.conbox = gtk.Entry() + self.conbox = Gtk.Entry() self.conbox.set_text(', '.join(CONNECTOR_LIST)) - hboxcon.pack_start(self.conbox) - winprefix.vbox.pack_start(hboxcon) - hboxconns = gtk.HBox() - hboxconns.pack_start(gtk.Label(_('Connectors not splitting surnames:')), + hboxcon.pack_start(self.conbox, True, True, 0) + winprefix.vbox.pack_start(hboxcon, True, True, 0) + hboxconns = Gtk.HBox() + hboxconns.pack_start(Gtk.Label(_('Connectors not splitting surnames:', True, True, 0)), expand=False, padding=5) - self.connsbox = gtk.Entry() + self.connsbox = Gtk.Entry() self.connsbox.set_text(', '.join(CONNECTOR_LIST_NONSPLIT)) - hboxconns.pack_start(self.connsbox) - winprefix.vbox.pack_start(hboxconns) + hboxconns.pack_start(self.connsbox, True, True, 0) + winprefix.vbox.pack_start(hboxconns, True, True, 0) winprefix.show_all() winprefix.resize(700, 100) @@ -387,25 +387,25 @@ class PatchNames(tool.BatchTool, ManagedWindow): self.list = self.top.get_object("list") self.set_window(window, self.top.get_object('title'), self.label) - self.model = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, - gobject.TYPE_STRING, gobject.TYPE_STRING, - gobject.TYPE_STRING) + self.model = Gtk.ListStore(GObject.TYPE_BOOLEAN, GObject.TYPE_STRING, + GObject.TYPE_STRING, GObject.TYPE_STRING, + GObject.TYPE_STRING) - r = gtk.CellRendererToggle() + r = Gtk.CellRendererToggle() r.connect('toggled', self.toggled) - c = gtk.TreeViewColumn(_('Select'), r, active=0) + c = Gtk.TreeViewColumn(_('Select'), r, active=0) self.list.append_column(c) - c = gtk.TreeViewColumn(_('ID'), gtk.CellRendererText(), text=1) + c = Gtk.TreeViewColumn(_('ID'), Gtk.CellRendererText(), text=1) self.list.append_column(c) - c = gtk.TreeViewColumn(_('Type'), gtk.CellRendererText(), text=2) + c = Gtk.TreeViewColumn(_('Type'), Gtk.CellRendererText(), text=2) self.list.append_column(c) - c = gtk.TreeViewColumn(_('Value'), gtk.CellRendererText(), text=3) + c = Gtk.TreeViewColumn(_('Value'), Gtk.CellRendererText(), text=3) self.list.append_column(c) - c = gtk.TreeViewColumn(_('Current Name'), gtk.CellRendererText(), text=4) + c = Gtk.TreeViewColumn(_('Current Name'), Gtk.CellRendererText(), text=4) self.list.append_column(c) self.list.set_model(self.model) diff --git a/src/plugins/tool/PopulateSources.py b/src/plugins/tool/PopulateSources.py index 8853478f8..d667d6d7a 100644 --- a/src/plugins/tool/PopulateSources.py +++ b/src/plugins/tool/PopulateSources.py @@ -35,7 +35,7 @@ LOG = logging.getLogger(".citation") # gnome/gtk # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -57,14 +57,14 @@ class PopulateSources(tool.Tool, ManagedWindow): def __init__(self, dbstate, uistate, options_class, name, callback=None): self.label = 'Populate sources and citations tool' ManagedWindow.__init__(self, uistate, [], self.__class__) - self.set_window(gtk.Window(), gtk.Label(), '') + self.set_window(Gtk.Window(), Gtk.Label(), '') tool.Tool.__init__(self, dbstate, options_class, name) dialog = self.display() response = dialog.run() dialog.destroy() - if response == gtk.RESPONSE_ACCEPT: + if response == Gtk.ResponseType.ACCEPT: self.on_ok_clicked() OkDialog('Data generated', "The requested sources and citations were generated") @@ -82,38 +82,38 @@ class PopulateSources(tool.Tool, ManagedWindow): num_citations = self.options.handler.options_dict['citations'] # GUI setup: - dialog = gtk.Dialog("Populate sources and citations tool", + dialog = Gtk.Dialog("Populate sources and citations tool", self.uistate.window, - gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, - (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, - gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) - label = gtk.Label("Enter a valid number of sources and citations." + Gtk.DialogFlags.MODAL|Gtk.DialogFlags.DESTROY_WITH_PARENT, + (Gtk.STOCK_CANCEL, Gtk.ResponseType.REJECT, + Gtk.STOCK_OK, Gtk.ResponseType.ACCEPT)) + label = Gtk.Label("Enter a valid number of sources and citations." " This will create the requested number of sources," " and for each source, will create the requested" " number of citations.") label.set_line_wrap(True) - hbox1 = gtk.HBox() - label_sources = gtk.Label("Number of sources" + ":") - self.sources_entry = gtk.Entry() + hbox1 = Gtk.HBox() + label_sources = Gtk.Label(label="Number of sources" + ":") + self.sources_entry = Gtk.Entry() self.sources_entry.set_text("%d" % num_sources) - hbox1.pack_start(label_sources, False) + hbox1.pack_start(label_sources, False, True, 0) hbox1.pack_start(self.sources_entry, True) - hbox2 = gtk.HBox() - label_citations = gtk.Label("Number of citations" + ":") - self.citations_entry = gtk.Entry() + hbox2 = Gtk.HBox() + label_citations = Gtk.Label(label="Number of citations" + ":") + self.citations_entry = Gtk.Entry() self.citations_entry.set_text("%d" % num_citations) - hbox2.pack_start(label_citations, False) + hbox2.pack_start(label_citations, False, True, 0) hbox2.pack_start(self.citations_entry, True) - vbox = gtk.VBox() + vbox = Gtk.VBox() vbox.pack_start(label, True) - vbox.pack_start(hbox1, False) - vbox.pack_start(hbox2, False) + vbox.pack_start(hbox1, False, True, 0) + vbox.pack_start(hbox2, False, True, 0) dialog.vbox.set_spacing(10) - dialog.vbox.pack_start(vbox) + dialog.vbox.pack_start(vbox, True, True, 0) dialog.show_all() return dialog diff --git a/src/plugins/tool/RelCalc.py b/src/plugins/tool/RelCalc.py index efd6e7eeb..aadb09e83 100644 --- a/src/plugins/tool/RelCalc.py +++ b/src/plugins/tool/RelCalc.py @@ -37,7 +37,7 @@ from gen.ggettext import gettext as _ # GNOME libraries # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -113,7 +113,7 @@ class RelCalc(tool.Tool, ManagedWindow): self.tree = self.glade.get_object("peopleList") self.text = self.glade.get_object("text1") - self.textbuffer = gtk.TextBuffer() + self.textbuffer = Gtk.TextBuffer() self.text.set_buffer(self.textbuffer) self.model = PersonTreeModel(self.db) @@ -121,7 +121,7 @@ class RelCalc(tool.Tool, ManagedWindow): self.tree.connect('key-press-event', self._key_press) self.selection = self.tree.get_selection() - self.selection.set_mode(gtk.SELECTION_SINGLE) + self.selection.set_mode(Gtk.SelectionMode.SINGLE) #keep reference of column so garbage collection works self.columns = [] @@ -129,11 +129,11 @@ class RelCalc(tool.Tool, ManagedWindow): if not pair[0]: continue name = column_names[pair[1]] - column = gtk.TreeViewColumn(name, gtk.CellRendererText(), + column = Gtk.TreeViewColumn(name, Gtk.CellRendererText(), markup=pair[1]) column.set_resizable(True) column.set_min_width(60) - column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY) + column.set_sizing(Gtk.TreeViewColumnSizing.GROW_ONLY) self.tree.append_column(column) #keep reference of column so garbage collection works self.columns.append(column) @@ -241,7 +241,7 @@ class RelCalc(tool.Tool, ManagedWindow): self.textbuffer.set_text(textval) def _key_press(self, obj, event): - if event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter): + if event.keyval in (Gdk.KEY_Return, Gdk.KEY_KP_Enter): store, paths = self.selection.get_selected_rows() if paths and len(paths[0]) == 1 : if self.tree.row_expanded(paths[0]): diff --git a/src/plugins/tool/RemoveUnused.py b/src/plugins/tool/RemoveUnused.py index a476d140f..0d42b6da3 100644 --- a/src/plugins/tool/RemoveUnused.py +++ b/src/plugins/tool/RemoveUnused.py @@ -46,8 +46,8 @@ log = logging.getLogger(".RemoveUnused") # gtk modules # #------------------------------------------------------------------------- -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------- # @@ -166,38 +166,38 @@ class RemoveUnused(tool.Tool, ManagedWindow, UpdateCallback): self.invert_button = self.top.get_object('invert_button') self.invert_button.connect('clicked', self.invert_clicked) - self.real_model = gtk.ListStore(gobject.TYPE_BOOLEAN, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING) - self.sort_model = gtk.TreeModelSort(self.real_model) + self.real_model = Gtk.ListStore(GObject.TYPE_BOOLEAN, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING) + self.sort_model = Gtk.TreeModelSort(self.real_model) self.warn_tree.set_model(self.sort_model) - self.renderer = gtk.CellRendererText() - self.img_renderer = gtk.CellRendererPixbuf() - self.bool_renderer = gtk.CellRendererToggle() + self.renderer = Gtk.CellRendererText() + self.img_renderer = Gtk.CellRendererPixbuf() + self.bool_renderer = Gtk.CellRendererToggle() self.bool_renderer.connect('toggled', self.selection_toggled) # Add mark column - mark_column = gtk.TreeViewColumn(_('Mark'), self.bool_renderer, + mark_column = Gtk.TreeViewColumn(_('Mark'), self.bool_renderer, active=RemoveUnused.MARK_COL) mark_column.set_sort_column_id(RemoveUnused.MARK_COL) self.warn_tree.append_column(mark_column) # Add image column - img_column = gtk.TreeViewColumn(None, self.img_renderer ) + img_column = Gtk.TreeViewColumn(None, self.img_renderer ) img_column.set_cell_data_func(self.img_renderer, self.get_image) self.warn_tree.append_column(img_column) # Add column with object gramps_id - id_column = gtk.TreeViewColumn(_('ID'), self.renderer, + id_column = Gtk.TreeViewColumn(_('ID'), self.renderer, text=RemoveUnused.OBJ_ID_COL) id_column.set_sort_column_id(RemoveUnused.OBJ_ID_COL) self.warn_tree.append_column(id_column) # Add column with object name - name_column = gtk.TreeViewColumn(_('Name'), self.renderer, + name_column = Gtk.TreeViewColumn(_('Name'), self.renderer, text=RemoveUnused.OBJ_NAME_COL) name_column.set_sort_column_id(RemoveUnused.OBJ_NAME_COL) self.warn_tree.append_column(name_column) @@ -236,9 +236,9 @@ class RemoveUnused(tool.Tool, ManagedWindow, UpdateCallback): for item in self.sensitive_list: item.set_sensitive(True) - self.uistate.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.uistate.window.window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) self.uistate.progress.show() - self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.window.window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) self.real_model.clear() self.collect_unused() @@ -325,7 +325,7 @@ class RemoveUnused(tool.Tool, ManagedWindow, UpdateCallback): row[RemoveUnused.MARK_COL] = not row[RemoveUnused.MARK_COL] def double_click(self, obj, event): - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: (model, node) = self.selection.get_selected() if not node: return diff --git a/src/plugins/tool/SoundGen.py b/src/plugins/tool/SoundGen.py index 8e64dc582..e00b6b01c 100644 --- a/src/plugins/tool/SoundGen.py +++ b/src/plugins/tool/SoundGen.py @@ -71,7 +71,7 @@ class SoundGen(tool.Tool, ManagedWindow): self.value = self.glade.get_object("value") self.autocomp = self.glade.get_object("name_list") - self.name = self.autocomp.child + self.name = self.autocomp.get_child() self.name.connect('changed',self.on_apply_clicked) diff --git a/src/plugins/tool/TestcaseGenerator.py b/src/plugins/tool/TestcaseGenerator.py index a7bd48705..70c228423 100644 --- a/src/plugins/tool/TestcaseGenerator.py +++ b/src/plugins/tool/TestcaseGenerator.py @@ -165,58 +165,58 @@ class TestcaseGenerator(tool.BatchTool): def init_gui(self,uistate): title = "%s - Gramps" % _("Generate testcases") - self.top = gtk.Dialog(title) + self.top = Gtk.Dialog(title) self.top.set_default_size(400,150) self.top.set_has_separator(False) self.top.vbox.set_spacing(5) - label = gtk.Label('%s' % _("Generate testcases")) + label = Gtk.Label(label='%s' % _("Generate testcases")) label.set_use_markup(True) self.top.vbox.pack_start(label,0,0,5) - self.check_lowlevel = gtk.CheckButton( _("Generate low level database " + self.check_lowlevel = Gtk.CheckButton( _("Generate low level database " "errors\nCorrection needs database reload")) self.check_lowlevel.set_active( self.options.handler.options_dict['lowlevel']) self.top.vbox.pack_start(self.check_lowlevel,0,0,5) - self.check_bugs = gtk.CheckButton( _("Generate database errors")) + self.check_bugs = Gtk.CheckButton( _("Generate database errors")) self.check_bugs.set_active( self.options.handler.options_dict['bugs']) self.top.vbox.pack_start(self.check_bugs,0,0,5) - self.check_persons = gtk.CheckButton( _("Generate dummy data")) + self.check_persons = Gtk.CheckButton( _("Generate dummy data")) self.check_persons.set_active( self.options.handler.options_dict['persons']) self.check_persons.connect('clicked', self.on_dummy_data_clicked) self.top.vbox.pack_start(self.check_persons,0,0,5) - self.check_longnames = gtk.CheckButton( _("Generate long names")) + self.check_longnames = Gtk.CheckButton( _("Generate long names")) self.check_longnames.set_active( self.options.handler.options_dict['long_names']) self.top.vbox.pack_start(self.check_longnames,0,0,5) - self.check_specialchars = gtk.CheckButton( _("Add special characters")) + self.check_specialchars = Gtk.CheckButton( _("Add special characters")) self.check_specialchars.set_active( self.options.handler.options_dict['specialchars']) self.top.vbox.pack_start(self.check_specialchars,0,0,5) - self.check_serial = gtk.CheckButton( _("Add serial number")) + self.check_serial = Gtk.CheckButton( _("Add serial number")) self.check_serial.set_active( self.options.handler.options_dict['add_serial']) self.top.vbox.pack_start(self.check_serial,0,0,5) - self.check_linebreak = gtk.CheckButton( _("Add line break")) + self.check_linebreak = Gtk.CheckButton( _("Add line break")) self.check_linebreak.set_active( self.options.handler.options_dict['add_linebreak']) self.top.vbox.pack_start(self.check_linebreak,0,0,5) - self.label = gtk.Label(_("Number of people to generate\n" + self.label = Gtk.Label(label=_("Number of people to generate\n" "(Number is approximate because families " "are generated)")) self.label.set_alignment(0.0, 0.5) self.top.vbox.pack_start(self.label,0,0,5) - self.entry_count = gtk.Entry() + self.entry_count = Gtk.Entry() self.entry_count.set_text( unicode( self.options.handler.options_dict['person_count'])) self.on_dummy_data_clicked(self.check_persons) self.top.vbox.pack_start(self.entry_count,0,0,5) - self.top.add_button(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL) - self.top.add_button(gtk.STOCK_OK,gtk.RESPONSE_OK) - self.top.add_button(gtk.STOCK_HELP,gtk.RESPONSE_HELP) + self.top.add_button(Gtk.STOCK_CANCEL,Gtk.ResponseType.CANCEL) + self.top.add_button(Gtk.STOCK_OK,Gtk.ResponseType.OK) + self.top.add_button(Gtk.STOCK_HELP,Gtk.ResponseType.HELP) self.top.show_all() response = self.top.run() @@ -238,7 +238,7 @@ class TestcaseGenerator(tool.BatchTool): self.entry_count.get_text()) self.top.destroy() - if response == gtk.RESPONSE_OK: + if response == Gtk.ResponseType.OK: self.run_tool( cli=False) # Save options self.options.handler.save_options() @@ -250,8 +250,8 @@ class TestcaseGenerator(tool.BatchTool): def run_tool(self, cli=False): self.cli = cli if( not cli): - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() self.progress = ProgressMeter(_('Generating testcases'),'') self.transaction_count = 0; @@ -1105,8 +1105,8 @@ class TestcaseGenerator(tool.BatchTool): def generate_person(self,gender=None,lastname=None, note=None, alive_in_year=None): if not self.cli: if self.person_count % 10 == 0: - while gtk.events_pending(): - gtk.main_iteration() + while Gtk.events_pending(): + Gtk.main_iteration() np = gen.lib.Person() self.fill_object(np) diff --git a/src/plugins/tool/Verify.py b/src/plugins/tool/Verify.py index 400cb30f6..e6b255fb2 100644 --- a/src/plugins/tool/Verify.py +++ b/src/plugins/tool/Verify.py @@ -46,8 +46,8 @@ from gen.errors import WindowActiveError # GNOME/GTK modules # #------------------------------------------------------------------------ -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject #------------------------------------------------------------------------ # @@ -320,11 +320,11 @@ class Verify(tool.Tool, ManagedWindow, UpdateCallback): except WindowActiveError: pass - self.uistate.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.uistate.window.window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) self.uistate.progress.show() - self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.window.window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) try: - self.vr.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) + self.vr.window.window.set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) except AttributeError: pass @@ -469,52 +469,52 @@ class VerifyResults(ManagedWindow): self.invert_button = self.top.get_object('invert_all') self.invert_button.connect('clicked',self.invert_clicked) - self.real_model = gtk.ListStore(gobject.TYPE_BOOLEAN, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_STRING, object, - gobject.TYPE_STRING, - gobject.TYPE_STRING, - gobject.TYPE_BOOLEAN, - gobject.TYPE_BOOLEAN) + self.real_model = Gtk.ListStore(GObject.TYPE_BOOLEAN, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_STRING, object, + GObject.TYPE_STRING, + GObject.TYPE_STRING, + GObject.TYPE_BOOLEAN, + GObject.TYPE_BOOLEAN) self.filt_model = self.real_model.filter_new() self.filt_model.set_visible_column(VerifyResults.TRUE_COL) - self.sort_model = gtk.TreeModelSort(self.filt_model) + self.sort_model = Gtk.TreeModelSort(self.filt_model) self.warn_tree.set_model(self.sort_model) - self.renderer = gtk.CellRendererText() - self.img_renderer = gtk.CellRendererPixbuf() - self.bool_renderer = gtk.CellRendererToggle() + self.renderer = Gtk.CellRendererText() + self.img_renderer = Gtk.CellRendererPixbuf() + self.bool_renderer = Gtk.CellRendererToggle() self.bool_renderer.connect('toggled',self.selection_toggled) # Add ignore column - ignore_column = gtk.TreeViewColumn(_('Mark'),self.bool_renderer, + ignore_column = Gtk.TreeViewColumn(_('Mark'),self.bool_renderer, active=VerifyResults.IGNORE_COL) ignore_column.set_sort_column_id(VerifyResults.IGNORE_COL) self.warn_tree.append_column(ignore_column) # Add image column - img_column = gtk.TreeViewColumn(None, self.img_renderer ) + img_column = Gtk.TreeViewColumn(None, self.img_renderer ) img_column.set_cell_data_func(self.img_renderer,self.get_image) self.warn_tree.append_column(img_column) # Add column with the warning text - warn_column = gtk.TreeViewColumn(_('Warning'), self.renderer, + warn_column = Gtk.TreeViewColumn(_('Warning'), self.renderer, text=VerifyResults.WARNING_COL, foreground=VerifyResults.FG_COLOR_COL) warn_column.set_sort_column_id(VerifyResults.WARNING_COL) self.warn_tree.append_column(warn_column) # Add column with object gramps_id - id_column = gtk.TreeViewColumn(_('ID'), self.renderer, + id_column = Gtk.TreeViewColumn(_('ID'), self.renderer, text=VerifyResults.OBJ_ID_COL, foreground=VerifyResults.FG_COLOR_COL) id_column.set_sort_column_id(VerifyResults.OBJ_ID_COL) self.warn_tree.append_column(id_column) # Add column with object name - name_column = gtk.TreeViewColumn(_('Name'), self.renderer, + name_column = Gtk.TreeViewColumn(_('Name'), self.renderer, text=VerifyResults.OBJ_NAME_COL, foreground=VerifyResults.FG_COLOR_COL) name_column.set_sort_column_id(VerifyResults.OBJ_NAME_COL) @@ -589,12 +589,12 @@ class VerifyResults(ManagedWindow): button.set_label(_("_Show all")) self.filt_model = self.real_model.filter_new() self.filt_model.set_visible_column(VerifyResults.SHOW_COL) - self.sort_model = gtk.TreeModelSort(self.filt_model) + self.sort_model = Gtk.TreeModelSort(self.filt_model) self.warn_tree.set_model(self.sort_model) else: self.filt_model = self.real_model.filter_new() self.filt_model.set_visible_column(VerifyResults.TRUE_COL) - self.sort_model = gtk.TreeModelSort(self.filt_model) + self.sort_model = Gtk.TreeModelSort(self.filt_model) self.warn_tree.set_model(self.sort_model) button.set_label(_("_Hide marked")) @@ -632,7 +632,7 @@ class VerifyResults(ManagedWindow): self.filt_model.refilter() def double_click(self, obj,event): - if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1: + if event.type == Gdk.EventType._2BUTTON_PRESS and event.button == 1: (model, node) = self.selection.get_selected() if not node: return diff --git a/src/plugins/view/citationlistview.py b/src/plugins/view/citationlistview.py index 82bca1e06..ff7294320 100644 --- a/src/plugins/view/citationlistview.py +++ b/src/plugins/view/citationlistview.py @@ -38,7 +38,7 @@ LOG = logging.getLogger(".citation") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -175,8 +175,8 @@ class CitationListView(ListView): """ ListView.define_actions(self) - self.all_action = gtk.ActionGroup(self.title + "/CitationAll") - self.edit_action = gtk.ActionGroup(self.title + "/CitationEdit") + self.all_action = Gtk.ActionGroup(self.title + "/CitationAll") + self.edit_action = Gtk.ActionGroup(self.title + "/CitationEdit") self._add_action('FilterEdit', None, _('Citation Filter Editor'), callback=self.filter_editor,) diff --git a/src/plugins/view/citationtreeview.py b/src/plugins/view/citationtreeview.py index 971157894..db23e91aa 100644 --- a/src/plugins/view/citationtreeview.py +++ b/src/plugins/view/citationtreeview.py @@ -38,7 +38,7 @@ _LOG = logging.getLogger('.gui.citationtreeview') # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -288,8 +288,8 @@ class CitationTreeView(ListView): tip=self.ADD_CITATION_MSG, callback=self.share) - self.all_action = gtk.ActionGroup(self.title + "/CitationAll") - self.edit_action = gtk.ActionGroup(self.title + "/CitationEdit") + self.all_action = Gtk.ActionGroup(self.title + "/CitationAll") + self.edit_action = Gtk.ActionGroup(self.title + "/CitationEdit") self._add_action('FilterEdit', None, _('Citation Filter Editor'), callback=self.filter_editor,) diff --git a/src/plugins/view/eventview.py b/src/plugins/view/eventview.py index 52f0372ea..ec1f6652d 100644 --- a/src/plugins/view/eventview.py +++ b/src/plugins/view/eventview.py @@ -39,7 +39,7 @@ _LOG = logging.getLogger(".plugins.eventview") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # diff --git a/src/plugins/view/familyview.py b/src/plugins/view/familyview.py index 485dc4653..b33848f14 100644 --- a/src/plugins/view/familyview.py +++ b/src/plugins/view/familyview.py @@ -38,7 +38,7 @@ _LOG = logging.getLogger(".plugins.eventview") # GNOME/GTK+ modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -205,11 +205,11 @@ class FamilyView(ListView): self._add_action('FilterEdit', None, _('Family Filter Editor'), callback=self.filter_editor,) - self.all_action = gtk.ActionGroup(self.title + "/FamilyAll") + self.all_action = Gtk.ActionGroup(self.title + "/FamilyAll") self.all_action.add_actions([ - ('MakeFatherActive', gtk.STOCK_APPLY, _("Make Father Active Person"), + ('MakeFatherActive', Gtk.STOCK_APPLY, _("Make Father Active Person"), None, None, self._make_father_active), - ('MakeMotherActive', gtk.STOCK_APPLY, _("Make Mother Active Person"), + ('MakeMotherActive', Gtk.STOCK_APPLY, _("Make Mother Active Person"), None, None, self._make_mother_active), ('QuickReport', None, _("Quick View"), None, None, None), ('Dummy', None, ' ', None, None, self.dummy_report), diff --git a/src/plugins/view/fanchartview.py b/src/plugins/view/fanchartview.py index d2151a5be..cac3e9de5 100644 --- a/src/plugins/view/fanchartview.py +++ b/src/plugins/view/fanchartview.py @@ -32,12 +32,13 @@ # Python modules # #------------------------------------------------------------------------- -import pygtk -pygtk.require('2.0') -import pango -import gtk +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Pango +from gi.repository import GObject +from gi.repository import Gdk +from gi.repository import Gtk import math -from gtk import gdk from cgi import escape try: import cairo @@ -45,9 +46,6 @@ except ImportError: pass from gen.ggettext import gettext as _ -if gtk.pygtk_version < (2,3,93): - raise Exception("PyGtk 2.3.93 or later required") - #------------------------------------------------------------------------- # # GRAMPS modules @@ -83,8 +81,8 @@ class AttachList(object): self.max_x = 0 self.max_y = 0 - def attach(self, widget, x0, x1, y0, y1, xoptions=gtk.EXPAND|gtk.FILL, - yoptions=gtk.EXPAND|gtk.FILL): + def attach(self, widget, x0, x1, y0, y1, xoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, + yoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL): assert(widget) assert(x1>x0) self.list.append((widget, x0, x1, y0, y1, xoptions, yoptions)) @@ -96,16 +94,18 @@ class AttachList(object): # FanChartWidget # #------------------------------------------------------------------------- -class FanChartWidget(gtk.Widget): +class FanChartWidget(Gtk.Widget): """ Interactive Fan Chart Widget. """ BORDER_WIDTH = 10 __gsignals__ = { 'realize': 'override', - 'expose-event' : 'override', +##TODO GTK3: no longer expose-event in GTK3, check if this still works +## 'expose-event' : 'override', 'size-allocate': 'override', - 'size-request': 'override', - } +##TODO GTK3: no longer size-request in GTK3, check if this still works +## 'size-request': 'override', + } GENCOLOR = ((229,191,252), (191,191,252), (191,222,252), @@ -121,16 +121,16 @@ class FanChartWidget(gtk.Widget): Fan Chart Widget. Handles visualization of data in self.data. See main() of FanChartGramplet for example of model format. """ - gtk.Widget.__init__(self) + GObject.GObject.__init__(self) self.translating = False self.last_x, self.last_y = None, None self.connect("button_release_event", self.on_mouse_up) self.connect("motion_notify_event", self.on_mouse_move) self.connect("button-press-event", self.on_mouse_down) self.context_popup_callback = context_popup_callback - self.add_events(gdk.BUTTON_PRESS_MASK | - gdk.BUTTON_RELEASE_MASK | - gdk.POINTER_MOTION_MASK) + self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | + Gdk.EventMask.BUTTON_RELEASE_MASK | + Gdk.EventMask.POINTER_MOTION_MASK) self.pixels_per_generation = 50 # size of radius for generation ## gotten from experiments with "sans serif 8": self.degrees_per_radius = .80 @@ -142,7 +142,7 @@ class FanChartWidget(gtk.Widget): self.set_generations(self.generations) self.center = 50 # pixel radius of center self.layout = self.create_pango_layout('cairo') - self.layout.set_font_description(pango.FontDescription("sans 8")) + self.layout.set_font_description(Pango.FontDescription("sans 8")) def reset_generations(self): """ @@ -174,22 +174,22 @@ class FanChartWidget(gtk.Widget): """ Overriden method to handle the realize event. """ - self.set_flags(self.flags() | gtk.REALIZED) - self.window = gdk.Window(self.get_parent_window(), + self.set_flags(self.flags() | Gtk.REALIZED) + self.window = Gdk.Window(self.get_parent_window(), width=self.allocation.width, height=self.allocation.height, - window_type=gdk.WINDOW_CHILD, - wclass=gdk.INPUT_OUTPUT, - event_mask=self.get_events() | gdk.EXPOSURE_MASK) + window_type=Gdk.WINDOW_CHILD, + wclass=Gdk.INPUT_OUTPUT, + event_mask=self.get_events() | Gdk.EventMask.EXPOSURE_MASK) if not hasattr(self.window, "cairo_create"): - self.draw_gc = gdk.GC(self.window, + self.draw_gc = Gdk.GC(self.window, line_width=5, - line_style=gdk.SOLID, - join_style=gdk.JOIN_ROUND) + line_style=Gdk.SOLID, + join_style=Gdk.JOIN_ROUND) self.window.set_user_data(self) self.style.attach(self.window) - self.style.set_background(self.window, gtk.STATE_NORMAL) + self.style.set_background(self.window, Gtk.StateType.NORMAL) self.window.move_resize(*self.allocation) def do_size_request(self, requisition): @@ -197,15 +197,15 @@ class FanChartWidget(gtk.Widget): Overridden method to handle size request events. """ width, height = self.layout.get_size() - requisition.width = (width // pango.SCALE + self.BORDER_WIDTH*4)* 1.45 - requisition.height = (3 * height // pango.SCALE + self.BORDER_WIDTH*4) * 1.2 + requisition.width = (width // Pango.SCALE + self.BORDER_WIDTH*4)* 1.45 + requisition.height = (3 * height // Pango.SCALE + self.BORDER_WIDTH*4) * 1.2 def do_size_allocate(self, allocation): """ Overridden method to handle size allocation events. """ self.allocation = allocation - if self.flags() & gtk.REALIZED: + if self.get_realized(): self.window.move_resize(*allocation) def _expose_gdk(self, event): @@ -350,14 +350,14 @@ class FanChartWidget(gtk.Widget): for i in range(len(text)): cr.save() layout = self.create_pango_layout(text[i]) - layout.set_font_description(pango.FontDescription("sans 8")) + layout.set_font_description(Pango.FontDescription("sans 8")) angle = 360.0 * i / (radius * self.degrees_per_radius) + pos cr.set_source_rgb(0, 0, 0) # black cr.rotate(angle * (math.pi / 180)); # Inform Pango to re-layout the text with the new transformation cr.update_layout(layout) width, height = layout.get_size() - cr.move_to(- (width / pango.SCALE) / 2.0, - radius) + cr.move_to(- (width / Pango.SCALE) / 2.0, - radius) cr.show_layout(layout) cr.restore() cr.restore() @@ -467,6 +467,7 @@ class FanChartWidget(gtk.Widget): self.NORMAL] self.show_parents(generation+1, selected-1, start, slice/2.0) +# TODO GTK3: these should be do_ methods now? def on_mouse_up(self, widget, event): # Done with mouse movement if self.last_x is None or self.last_y is None: return True @@ -552,7 +553,7 @@ class FanChartWidget(gtk.Widget): # save the mouse location for movements self.last_x, self.last_y = event.x, event.y return True - # Do things based on state, event.state, or button, event.button + # Do things based on state, event.get_state(), or button, event.button if event.button == 1: # left mouse self.change_slice(generation, selected) elif gui.utils.is_right_click(event): @@ -749,7 +750,7 @@ class FanChartView(NavigationView): """Renders the person data into some lines of text and puts that into the clipboard""" person = self.dbstate.db.get_person_from_handle(person_handle) if person: - cb = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD) + cb = Gtk.clipboard_get(Gdk.SELECTION_CLIPBOARD) cb.set_text( self.format_helper.format_person(person,11)) return True return False @@ -760,27 +761,27 @@ class FanChartView(NavigationView): and Parents) with navigation. Copied from PedigreeView. """ - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_('People Menu')) person = self.dbstate.db.get_person_from_handle(person_handle) if not person: return 0 - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - go_item = gtk.ImageMenuItem(name_displayer.display(person)) + go_item = Gtk.ImageMenuItem(name_displayer.display(person)) go_item.set_image(go_image) go_item.connect("activate",self.on_childmenu_changed,person_handle) go_item.show() menu.append(go_item) - edit_item = gtk.ImageMenuItem(gtk.STOCK_EDIT) + edit_item = Gtk.ImageMenuItem(Gtk.STOCK_EDIT) edit_item.connect("activate",self.edit_person_cb,person_handle) edit_item.show() menu.append(edit_item) - clipboard_item = gtk.ImageMenuItem(gtk.STOCK_COPY) + clipboard_item = Gtk.ImageMenuItem(Gtk.STOCK_COPY) clipboard_item.connect("activate",self.copy_person_to_clipboard_cb,person_handle) clipboard_item.show() menu.append(clipboard_item) @@ -789,7 +790,7 @@ class FanChartView(NavigationView): linked_persons = [] # Go over spouses and build their menu - item = gtk.MenuItem(_("Spouses")) + item = Gtk.MenuItem(_("Spouses")) fam_list = person.get_family_handle_list() no_spouses = 1 for fam_id in fam_list: @@ -804,12 +805,12 @@ class FanChartView(NavigationView): if no_spouses: no_spouses = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) sp_menu = item.get_submenu() - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - sp_item = gtk.ImageMenuItem(name_displayer.display(spouse)) + sp_item = Gtk.ImageMenuItem(name_displayer.display(spouse)) sp_item.set_image(go_image) linked_persons.append(sp_id) sp_item.connect("activate",self.on_childmenu_changed,sp_id) @@ -823,7 +824,7 @@ class FanChartView(NavigationView): menu.append(item) # Go over siblings and build their menu - item = gtk.MenuItem(_("Siblings")) + item = Gtk.MenuItem(_("Siblings")) pfam_list = person.get_parent_family_handle_list() no_siblings = 1 for f in pfam_list: @@ -839,17 +840,17 @@ class FanChartView(NavigationView): if no_siblings: no_siblings = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) sib_menu = item.get_submenu() if find_children(self.dbstate.db,sib): - label = gtk.Label('%s' % escape(name_displayer.display(sib))) + label = Gtk.Label(label='%s' % escape(name_displayer.display(sib))) else: - label = gtk.Label(escape(name_displayer.display(sib))) + label = Gtk.Label(label=escape(name_displayer.display(sib))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - sib_item = gtk.ImageMenuItem(None) + sib_item = Gtk.ImageMenuItem(None) sib_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -866,7 +867,7 @@ class FanChartView(NavigationView): menu.append(item) # Go over children and build their menu - item = gtk.MenuItem(_("Children")) + item = Gtk.MenuItem(_("Children")) no_children = 1 childlist = find_children(self.dbstate.db,person) for child_handle in childlist: @@ -876,17 +877,17 @@ class FanChartView(NavigationView): if no_children: no_children = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) child_menu = item.get_submenu() if find_children(self.dbstate.db,child): - label = gtk.Label('%s' % escape(name_displayer.display(child))) + label = Gtk.Label(label='%s' % escape(name_displayer.display(child))) else: - label = gtk.Label(escape(name_displayer.display(child))) + label = Gtk.Label(label=escape(name_displayer.display(child))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - child_item = gtk.ImageMenuItem(None) + child_item = Gtk.ImageMenuItem(None) child_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -903,7 +904,7 @@ class FanChartView(NavigationView): menu.append(item) # Go over parents and build their menu - item = gtk.MenuItem(_("Parents")) + item = Gtk.MenuItem(_("Parents")) no_parents = 1 par_list = find_parents(self.dbstate.db,person) for par_id in par_list: @@ -913,17 +914,17 @@ class FanChartView(NavigationView): if no_parents: no_parents = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) par_menu = item.get_submenu() if find_parents(self.dbstate.db,par): - label = gtk.Label('%s' % escape(name_displayer.display(par))) + label = Gtk.Label(label='%s' % escape(name_displayer.display(par))) else: - label = gtk.Label(escape(name_displayer.display(par))) + label = Gtk.Label(label=escape(name_displayer.display(par))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - par_item = gtk.ImageMenuItem(None) + par_item = Gtk.ImageMenuItem(None) par_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -940,7 +941,7 @@ class FanChartView(NavigationView): menu.append(item) # Go over parents and build their menu - item = gtk.MenuItem(_("Related")) + item = Gtk.MenuItem(_("Related")) no_related = 1 for p_id in find_witnessed_people(self.dbstate.db,person): #if p_id in linked_persons: @@ -952,14 +953,14 @@ class FanChartView(NavigationView): if no_related: no_related = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) per_menu = item.get_submenu() - label = gtk.Label(escape(name_displayer.display(per))) + label = Gtk.Label(label=escape(name_displayer.display(per))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO,gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,Gtk.IconSize.MENU) go_image.show() - per_item = gtk.ImageMenuItem(None) + per_item = Gtk.ImageMenuItem(None) per_item.set_image(go_image) label.set_use_markup(True) label.show() diff --git a/src/plugins/view/geoclose.py b/src/plugins/view/geoclose.py index 70a04ace9..3f662547a 100644 --- a/src/plugins/view/geoclose.py +++ b/src/plugins/view/geoclose.py @@ -32,7 +32,7 @@ Geography for two persons #------------------------------------------------------------------------- from gen.ggettext import gettext as _ import operator -import gtk +from gi.repository import Gtk from math import * #------------------------------------------------------------------------- @@ -231,7 +231,7 @@ class GeoClose(GeoGraphyView): """ NavigationView.define_actions(self) - self.ref_person = gtk.ActionGroup(self.title + '/Selection') + self.ref_person = Gtk.ActionGroup(self.title + '/Selection') self.ref_person.add_actions([ ('RefPerson', 'gramps-person', _('reference _Person'), None , _("Select the person which is the reference for life ways"), @@ -419,7 +419,7 @@ class GeoClose(GeoGraphyView): """ Create the menu for the selected marker """ - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title("person") events = [] message = "" @@ -458,19 +458,19 @@ class GeoClose(GeoGraphyView): descr = _('No description') message = "(%s) %s => %s" % ( date, plce[11], descr) prevmark = plce - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) @@ -483,10 +483,10 @@ class GeoClose(GeoGraphyView): """ Add specific entry to the navigation menu. """ - add_item = gtk.MenuItem() + add_item = Gtk.MenuItem() add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Choose the reference person")) + add_item = Gtk.MenuItem(_("Choose the reference person")) add_item.connect("activate", self.selectPerson) add_item.show() menu.append(add_item) @@ -504,7 +504,7 @@ class GeoClose(GeoGraphyView): Add specific entry to the preference menu. Must be done in the associated view. """ - table = gtk.Table(2, 2) + table = Gtk.Table(2, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) diff --git a/src/plugins/view/geoevents.py b/src/plugins/view/geoevents.py index bb52a1d24..4499b118a 100644 --- a/src/plugins/view/geoevents.py +++ b/src/plugins/view/geoevents.py @@ -37,9 +37,9 @@ import urlparse import const import operator import locale -from gtk.keysyms import Tab as KEY_TAB +from Gdk.KEY_import Tab as KEY_TAB import socket -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -305,26 +305,26 @@ class GeoEvents(GeoGraphyView): self._create_markers() def bubble_message(self, event, lat, lon, marks): - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title("events") message = "" oldplace = "" prevmark = None for mark in marks: if message != "": - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) @@ -339,18 +339,18 @@ class GeoEvents(GeoGraphyView): date = gen.datehandler.displayer.display(evt.get_date_object()) message = "(%s) %s : %s" % (date, gen.lib.EventType( mark[7] ), mark[5] ) prevmark = mark - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) itemoption.append(center) @@ -361,17 +361,17 @@ class GeoEvents(GeoGraphyView): """ Add specific entry to the navigation menu. """ - add_item = gtk.MenuItem() + add_item = Gtk.MenuItem() add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Show all events")) + add_item = Gtk.MenuItem(_("Show all events")) add_item.connect("activate", self.show_all_events, event, lat , lon) add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Centering on Place")) + add_item = Gtk.MenuItem(_("Centering on Place")) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(_("Centering on Place")) itemoption.show() add_item.set_submenu(itemoption) @@ -379,7 +379,7 @@ class GeoEvents(GeoGraphyView): for mark in self.sort: if mark[0] != oldplace: oldplace = mark[0] - modify = gtk.MenuItem(mark[0]) + modify = Gtk.MenuItem(mark[0]) modify.show() modify.connect("activate", self.goto_place, float(mark[3]), float(mark[4])) itemoption.append(modify) diff --git a/src/plugins/view/geofamclose.py b/src/plugins/view/geofamclose.py index ca02a1f4d..fe13edf4d 100644 --- a/src/plugins/view/geofamclose.py +++ b/src/plugins/view/geofamclose.py @@ -32,7 +32,7 @@ Geography for two families #------------------------------------------------------------------------- from gen.ggettext import gettext as _ import operator -import gtk +from gi.repository import Gtk from math import * #------------------------------------------------------------------------- @@ -263,7 +263,7 @@ class GeoFamClose(GeoGraphyView): """ NavigationView.define_actions(self) - self.ref_family = gtk.ActionGroup(self.title + '/Selection') + self.ref_family = Gtk.ActionGroup(self.title + '/Selection') self.ref_family.add_actions([ ('RefFamily', 'gramps-family', _('reference _Family'), None , _("Select the family which is the reference for life ways"), @@ -608,7 +608,7 @@ class GeoFamClose(GeoGraphyView): """ Create the menu for the selected marker """ - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title("family") events = [] message = "" @@ -647,19 +647,19 @@ class GeoFamClose(GeoGraphyView): descr = _('No description') message = "(%s) %s => %s" % ( date, plce[11], descr) prevmark = plce - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) @@ -672,10 +672,10 @@ class GeoFamClose(GeoGraphyView): """ Add specific entry to the navigation menu. """ - add_item = gtk.MenuItem() + add_item = Gtk.MenuItem() add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Choose the reference family")) + add_item = Gtk.MenuItem(_("Choose the reference family")) add_item.connect("activate", self.selectFamily) add_item.show() menu.append(add_item) @@ -693,7 +693,7 @@ class GeoFamClose(GeoGraphyView): Add specific entry to the preference menu. Must be done in the associated view. """ - table = gtk.Table(2, 2) + table = Gtk.Table(2, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) diff --git a/src/plugins/view/geofamily.py b/src/plugins/view/geofamily.py index ec3da4dd4..a60e72c44 100644 --- a/src/plugins/view/geofamily.py +++ b/src/plugins/view/geofamily.py @@ -37,9 +37,9 @@ import urlparse import const import operator import locale -from gtk.keysyms import Tab as KEY_TAB +from Gdk.KEY_import Tab as KEY_TAB import socket -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -387,35 +387,35 @@ class GeoFamily(GeoGraphyView): self._create_markers() def add_event_bubble_message(self, event, lat, lon, mark, menu): - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.show() menu.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Family")) + modify = Gtk.MenuItem(_("Edit Family")) modify.show() modify.connect("activate", self.edit_family, event, lat, lon, mark) itemoption.append(modify) - modify = gtk.MenuItem(_("Edit Person")) + modify = Gtk.MenuItem(_("Edit Person")) modify.show() modify.connect("activate", self.edit_person, event, lat, lon, mark) itemoption.append(modify) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, mark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, mark) itemoption.append(center) def bubble_message(self, event, lat, lon, marks): - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title("family") message = "" oldplace = "" prevmark = None for mark in marks: if message != "": - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) self.add_event_bubble_message(event, lat, lon, @@ -443,7 +443,7 @@ class GeoFamily(GeoGraphyView): descr = _('No description') message = "(%s) %s => %s" % ( date, mark[5], descr) prevmark = mark - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) self.add_event_bubble_message(event, lat, lon, prevmark, add_item) diff --git a/src/plugins/view/geomoves.py b/src/plugins/view/geomoves.py index 2a2e6c59f..ce68e31ff 100644 --- a/src/plugins/view/geomoves.py +++ b/src/plugins/view/geomoves.py @@ -32,8 +32,8 @@ Geography for one person and all his descendant #------------------------------------------------------------------------- from gen.ggettext import gettext as _ import operator -import gtk -import gobject +from gi.repository import Gtk +from gi.repository import GObject import time import threading from math import * @@ -368,7 +368,7 @@ class GeoMoves(GeoGraphyView): merge_list = self.sort for the_event in sort1 : if the_event not in merge_list: - merge_list.append(the_event) + merge_list.append(the_event) self.sort = sorted(merge_list, key=operator.itemgetter(6)) def _add_person_to_list(self, person_id, level): @@ -469,8 +469,8 @@ class GeoMoves(GeoGraphyView): if not person: return self.message_layer.add_message(_("All descendance for %s" % _nd.display(person))) - color = gtk.gdk.color_parse(self._config.get('geography.color_base')) - gobject.timeout_add(int(self._config.get("geography.generation_interval")), + color = Gdk.color_parse(self._config.get('geography.color_base')) + GObject.timeout_add(int(self._config.get("geography.generation_interval")), self.animate_moves, 0, person, color) def animate_moves(self, index, person, color): @@ -521,9 +521,9 @@ class GeoMoves(GeoGraphyView): new_list.append([level, plxp, birth, death]) pidx = 0; try: - color = gtk.gdk.color_parse(color) + color = Gdk.color_parse(color) except: - # We have already a gdk.color + # We have already a Gdk.color pass for (level, plxp, birth, death) in sorted(new_list, key=operator.itemgetter(0,2)): if index == int(self._config.get("geography.maximum_generations")): @@ -541,7 +541,7 @@ class GeoMoves(GeoGraphyView): time_to_wait = int(self._config.get("geography.generation_interval")) self._create_markers() # process next generation in a few milliseconds - gobject.timeout_add(time_to_wait, self.animate_moves, + GObject.timeout_add(time_to_wait, self.animate_moves, index+1, person, str(color)) else: self.started = False @@ -551,7 +551,7 @@ class GeoMoves(GeoGraphyView): """ Create the menu for the selected marker """ - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title("descendance") events = [] message = "" @@ -589,19 +589,19 @@ class GeoMoves(GeoGraphyView): descr = _('No description') message = "(%s) %s => %s" % ( date, mark[11], descr) prevmark = mark - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) @@ -628,7 +628,7 @@ class GeoMoves(GeoGraphyView): Add specific entry to the preference menu. Must be done in the associated view. """ - table = gtk.Table(2, 2) + table = Gtk.Table(2, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) diff --git a/src/plugins/view/geoperson.py b/src/plugins/view/geoperson.py index 1c0ed45f5..ca631af6c 100644 --- a/src/plugins/view/geoperson.py +++ b/src/plugins/view/geoperson.py @@ -37,9 +37,9 @@ import urlparse import const import operator import locale -from gtk.keysyms import Tab as KEY_TAB +from Gdk.KEY_import Tab as KEY_TAB import socket -import gtk +from gi.repository import Gtk import glib #------------------------------------------------------------------------- @@ -285,7 +285,7 @@ class GeoPerson(GeoGraphyView): # in this case, stepyear is >= 9000 # large move means longitude or latitude differences greater than geography.maximum_lon_lat # degrees. - glib.timeout_add(self._config.get("geography.speed"), self.animate, + GObject.timeout_add(self._config.get("geography.speed"), self.animate, menu, marks, i, stepyear) return False @@ -400,47 +400,47 @@ class GeoPerson(GeoGraphyView): self._create_markers() def bubble_message(self, event, lat, lon, marks): - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title("person") message = "" oldplace = "" prevmark = None for mark in marks: if oldplace != "": - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() message = "" add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) itemoption.append(center) if mark[0] != oldplace: if message != "": - add_item = gtk.MenuItem() + add_item = Gtk.MenuItem() add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() message = "" add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, mark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, mark) @@ -466,18 +466,18 @@ class GeoPerson(GeoGraphyView): descr = _('No description') message = "(%s) %s => %s" % ( date, mark[11], descr) prevmark = mark - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Event")) + modify = Gtk.MenuItem(_("Edit Event")) modify.show() modify.connect("activate", self.edit_event, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) itemoption.append(center) @@ -489,10 +489,10 @@ class GeoPerson(GeoGraphyView): """ Add specific entry to the navigation menu. """ - add_item = gtk.MenuItem() + add_item = Gtk.MenuItem() add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Animate")) + add_item = Gtk.MenuItem(_("Animate")) add_item.connect("activate", self.animate, self.sort, 0, 0) add_item.show() menu.append(add_item) @@ -510,7 +510,7 @@ class GeoPerson(GeoGraphyView): Add specific entry to the preference menu. Must be done in the associated view. """ - table = gtk.Table(2, 2) + table = Gtk.Table(2, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) diff --git a/src/plugins/view/geoplaces.py b/src/plugins/view/geoplaces.py index abd878942..23a7c3c1c 100644 --- a/src/plugins/view/geoplaces.py +++ b/src/plugins/view/geoplaces.py @@ -38,9 +38,9 @@ import urlparse import const import operator import locale -from gtk.keysyms import Tab as KEY_TAB +from Gdk.KEY_import Tab as KEY_TAB import socket -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -305,43 +305,43 @@ class GeoPlaces(GeoGraphyView): self._create_markers() def bubble_message(self, event, lat, lon, marks): - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title("places") message = "" prevmark = None for mark in marks: if message != "": - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Place")) + modify = Gtk.MenuItem(_("Edit Place")) modify.show() modify.connect("activate", self.edit_place, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) itemoption.append(center) message = "%s" % mark[0] prevmark = mark - add_item = gtk.MenuItem(message) + add_item = Gtk.MenuItem(message) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(message) itemoption.show() add_item.set_submenu(itemoption) - modify = gtk.MenuItem(_("Edit Place")) + modify = Gtk.MenuItem(_("Edit Place")) modify.show() modify.connect("activate", self.edit_place, event, lat, lon, prevmark) itemoption.append(modify) - center = gtk.MenuItem(_("Center on this place")) + center = Gtk.MenuItem(_("Center on this place")) center.show() center.connect("activate", self.center_here, event, lat, lon, prevmark) itemoption.append(center) @@ -352,17 +352,17 @@ class GeoPlaces(GeoGraphyView): """ Add specific entry to the navigation menu. """ - add_item = gtk.MenuItem() + add_item = Gtk.MenuItem() add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Show all places")) + add_item = Gtk.MenuItem(_("Show all places")) add_item.connect("activate", self.show_all_places, event, lat , lon) add_item.show() menu.append(add_item) - add_item = gtk.MenuItem(_("Centering on Place")) + add_item = Gtk.MenuItem(_("Centering on Place")) add_item.show() menu.append(add_item) - itemoption = gtk.Menu() + itemoption = Gtk.Menu() itemoption.set_title(_("Centering on Place")) itemoption.show() add_item.set_submenu(itemoption) @@ -370,7 +370,7 @@ class GeoPlaces(GeoGraphyView): for mark in self.sort: if mark[0] != oldplace: oldplace = mark[0] - modify = gtk.MenuItem(mark[0]) + modify = Gtk.MenuItem(mark[0]) modify.show() modify.connect("activate", self.goto_place, float(mark[3]), float(mark[4])) diff --git a/src/plugins/view/grampletview.py b/src/plugins/view/grampletview.py index 50ca7abc0..869102e21 100644 --- a/src/plugins/view/grampletview.py +++ b/src/plugins/view/grampletview.py @@ -29,7 +29,7 @@ GrampletView interface. # Python modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -92,7 +92,7 @@ class GrampletView(PageView): """ Defines the UIManager actions. """ - self._add_action("AddGramplet", gtk.STOCK_ADD, _("Add a gramplet")) + self._add_action("AddGramplet", Gtk.STOCK_ADD, _("Add a gramplet")) self._add_action("RestoreGramplet", None, _("Restore a gramplet")) def set_inactive(self): diff --git a/src/plugins/view/htmlrenderer.py b/src/plugins/view/htmlrenderer.py index 679ed55de..6ee58920d 100644 --- a/src/plugins/view/htmlrenderer.py +++ b/src/plugins/view/htmlrenderer.py @@ -50,7 +50,7 @@ _LOG = logging.getLogger("HtmlRenderer") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # @@ -454,7 +454,7 @@ class HtmlView(NavigationView): self.renderer = None self.urlfield = "" self.htmlfile = "" - self.filter = gtk.HBox() + self.filter = Gtk.HBox() self.table = "" self.browser = NOWEB self.bootstrap_handler = None @@ -465,16 +465,16 @@ class HtmlView(NavigationView): def build_widget(self): """ - Builds the interface and returns a gtk.Container type that + Builds the interface and returns a Gtk.Container type that contains the interface. This containter will be inserted into - a gtk.Notebook page. + a Gtk.Notebook page. """ - self.box = gtk.VBox(False, 4) + self.box = Gtk.VBox(False, 4) #top widget at the top - self.box.pack_start(self.top_widget(), False, False, 0 ) + self.box.pack_start(self.top_widget(, True, True, 0), False, False, 0 ) #web page under it in a scrolled window - self.table = gtk.Table(1, 1, False) - frames = gtk.HBox(False, 4) + self.table = Gtk.Table(1, 1, False) + frames = Gtk.HBox(False, 4) self.frames = frames self.toolkit = TOOLKIT = get_toolkits() if (get_toolkits() == (WEBKIT+MOZILLA)): @@ -491,18 +491,18 @@ class HtmlView(NavigationView): self.toolkit = "html" if self.toolkit == "html": _LOG.debug("We are native htmlrenderer.") - frame = gtk.ScrolledWindow(None, None) - frame.set_shadow_type(gtk.SHADOW_NONE) - frame.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + frame = Gtk.ScrolledWindow(None, None) + frame.set_shadow_type(Gtk.ShadowType.NONE) + frame.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) frame.add_with_viewport(self.table) else: _LOG.debug("We are called by geoview.") - frame = gtk.Frame() + frame = Gtk.Frame() frame.set_size_request(100,100) frame.add(self.table) self.bootstrap_handler = self.box.connect("size-request", self.init_parent_signals_for_map) - self.table.get_parent().set_shadow_type(gtk.SHADOW_NONE) + self.table.get_parent().set_shadow_type(Gtk.ShadowType.NONE) self.table.set_row_spacings(1) self.table.set_col_spacings(0) if (TOOLKIT == MOZILLA) : @@ -530,12 +530,12 @@ class HtmlView(NavigationView): """ The default class gives a widget where user can type an url """ - hbox = gtk.HBox(False, 4) - self.urlfield = gtk.Entry() + hbox = Gtk.HBox(False, 4) + self.urlfield = Gtk.Entry() self.urlfield.set_text(config.get("htmlview.start-url")) self.urlfield.connect('activate', self._on_activate) hbox.pack_start(self.urlfield, True, True, 4) - button = gtk.Button(stock=gtk.STOCK_APPLY) + button = Gtk.Button(stock=Gtk.STOCK_APPLY) button.connect('clicked', self._on_activate) hbox.pack_start(button, False, False, 4) return hbox @@ -639,23 +639,23 @@ class HtmlView(NavigationView): accel doesn't work in webkit and gtkmozembed ! we must do that ... """ - self.back_action = gtk.ActionGroup(self.title + '/Back') + self.back_action = Gtk.ActionGroup(self.title + '/Back') self.back_action.add_actions([ - ('Back', gtk.STOCK_GO_BACK, _("_Back"), + ('Back', Gtk.STOCK_GO_BACK, _("_Back"), "Left", _("Go to the previous page in the history"), self.go_back) ]) self._add_action_group(self.back_action) # add the Forward action to handle the Forward button - self.forward_action = gtk.ActionGroup(self.title + '/Forward') + self.forward_action = Gtk.ActionGroup(self.title + '/Forward') self.forward_action.add_actions([ - ('Forward', gtk.STOCK_GO_FORWARD, _("_Forward"), + ('Forward', Gtk.STOCK_GO_FORWARD, _("_Forward"), "Right", _("Go to the next page in the history"), self.go_forward) ]) self._add_action_group(self.forward_action) # add the Refresh action to handle the Refresh button - self._add_action('Refresh', gtk.STOCK_REFRESH, _("_Refresh"), + self._add_action('Refresh', Gtk.STOCK_REFRESH, _("_Refresh"), callback=self.refresh, accel="R", tip=_("Stop and reload the page.")) diff --git a/src/plugins/view/mediaview.py b/src/plugins/view/mediaview.py index 343a4e95e..e7bdaeb56 100644 --- a/src/plugins/view/mediaview.py +++ b/src/plugins/view/mediaview.py @@ -42,7 +42,7 @@ import urllib # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # diff --git a/src/plugins/view/noteview.py b/src/plugins/view/noteview.py index 6085a5723..90078cf1b 100644 --- a/src/plugins/view/noteview.py +++ b/src/plugins/view/noteview.py @@ -38,7 +38,7 @@ _LOG = logging.getLogger(".plugins.noteview") # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # diff --git a/src/plugins/view/pedigreeview.py b/src/plugins/view/pedigreeview.py index dda5a553c..89621f810 100644 --- a/src/plugins/view/pedigreeview.py +++ b/src/plugins/view/pedigreeview.py @@ -40,7 +40,12 @@ import sys # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import GObject +from gi.repository import Pango +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import GdkPixbuf +from gi.repository import PangoCairo #------------------------------------------------------------------------- # @@ -89,28 +94,28 @@ _CHRI = _('short for christened|chr.') _BURI = _('short for buried|bur.') _CREM = _('short for cremated|crem.') -class _PersonWidgetBase(gtk.DrawingArea): +class _PersonWidgetBase(Gtk.DrawingArea): """ Defualt set up for person widgets. Set up drag options and button release events. """ def __init__(self, view, format_helper, person): - gtk.DrawingArea.__init__(self) + GObject.GObject.__init__(self) self.view = view self.format_helper = format_helper self.person = person self.force_mouse_over = False if self.person: - self.add_events(gtk.gdk.BUTTON_PRESS_MASK) - self.add_events(gtk.gdk.BUTTON_RELEASE_MASK) + self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) + self.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK) self.connect("button-release-event", self.cb_on_button_release) self.connect("drag_data_get", self.cb_drag_data_get) self.connect("drag_begin", self.cb_drag_begin) # Enable drag - self.drag_source_set(gtk.gdk.BUTTON1_MASK, + self.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, [DdTargets.PERSON_LINK.target()] + list(DdTargets.all_text_targets()), - gtk.gdk.ACTION_COPY) + Gdk.DragAction.COPY) def cb_drag_begin(self, widget, data): """Set up some inital conditions for drag. Set up icon.""" @@ -134,7 +139,7 @@ class _PersonWidgetBase(gtk.DrawingArea): Defualt action for release event from mouse. Change active person to current. """ - if event.button == 1 and event.type == gtk.gdk.BUTTON_RELEASE: + if event.button == 1 and event.type == Gdk.EventType.BUTTON_RELEASE: self.view.cb_childmenu_changed(None, self.person.get_handle()) return True return False @@ -167,16 +172,18 @@ class PersonBoxWidgetCairo(_PersonWidgetBase): image=None): _PersonWidgetBase.__init__(self, view, format_helper, person) # Required for popup menu - self.add_events(gtk.gdk.BUTTON_PRESS_MASK) - self.add_events(gtk.gdk.BUTTON_RELEASE_MASK) + self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) + self.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK) # Required for tooltip and mouse-over - self.add_events(gtk.gdk.ENTER_NOTIFY_MASK) + self.add_events(Gdk.EventMask.ENTER_NOTIFY_MASK) # Required for tooltip and mouse-over - self.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) + self.add_events(Gdk.EventMask.LEAVE_NOTIFY_MASK) self.alive = alive self.maxlines = maxlines self.hightlight = False - self.connect("expose_event", self.expose) +##TODO GTK3: event deprecated , instead if still needed connect to event, +## and check if event is an expose event. +## self.connect("expose_event", self.expose) if not win(): self.connect("realize", self.realize) self.text = "" @@ -210,7 +217,7 @@ class PersonBoxWidgetCairo(_PersonWidgetBase): image_path = self.get_image(dbstate, person) if isinstance(image_path, unicode): image_path = image_path.encode(sys.getfilesystemencoding()) - if image_path: + if image_path and os.path.exists(image_path): self.img_surf = cairo.ImageSurface.create_from_png(image_path) # enable mouse-over @@ -239,8 +246,8 @@ class PersonBoxWidgetCairo(_PersonWidgetBase): display. Print text and resize element. """ # pylint: disable-msg=E1101 - self.context = self.window.cairo_create() - self.textlayout = self.context.create_layout() + self.context = self.get_root_window().cairo_create() + self.textlayout = PangoCairo.create_layout(self.context) self.textlayout.set_font_description(self.get_style().font_desc) self.textlayout.set_markup(self.text) size = self.textlayout.get_pixel_size() @@ -362,12 +369,12 @@ class PersonBoxWidget(_PersonWidgetBase): image=False): _PersonWidgetBase.__init__(self, view, format_helper, person) # Required for popup menu and right mouse button click - self.add_events(gtk.gdk.BUTTON_PRESS_MASK - | gtk.gdk.BUTTON_RELEASE_MASK + self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK + | Gdk.EventMask.BUTTON_RELEASE_MASK # Required for tooltip and mouse-over - | gtk.gdk.ENTER_NOTIFY_MASK + | Gdk.EventMask.ENTER_NOTIFY_MASK # Required for tooltip and mouse-over - | gtk.gdk.LEAVE_NOTIFY_MASK) + | Gdk.EventMask.LEAVE_NOTIFY_MASK) self.maxlines = maxlines self.alive = alive @@ -375,9 +382,11 @@ class PersonBoxWidget(_PersonWidgetBase): if image: image_path = self.get_image(dbstate, person) if image_path: - self.image = gtk.gdk.pixbuf_new_from_file(image_path) + self.image = GdkPixbuf.Pixbuf.new_from_file(image_path) - self.connect("expose_event", self.expose) +##TODO GTK3: event deprecated , instead if still needed connect to event, +## and check if event is an expose event. +## self.connect("expose_event", self.expose) self.connect("realize", self.realize) text = "" if self.person: @@ -419,10 +428,10 @@ class PersonBoxWidget(_PersonWidgetBase): self.bg_gc = self.window.new_gc() self.text_gc = self.window.new_gc() self.border_gc = self.window.new_gc() - self.border_gc.line_style = gtk.gdk.LINE_SOLID + self.border_gc.line_style = Gdk.LINE_SOLID self.border_gc.line_width = 1 self.shadow_gc = self.window.new_gc() - self.shadow_gc.line_style = gtk.gdk.LINE_SOLID + self.shadow_gc.line_style = Gdk.LINE_SOLID self.shadow_gc.line_width = 4 if self.person: if self.alive and self.person.get_gender() == gen.lib.Person.MALE: @@ -495,12 +504,12 @@ class PersonBoxWidget(_PersonWidgetBase): self.window.draw_rectangle(self.border_gc, False, 0, 0, alloc.width-4, alloc.height-4) -class LineWidget(gtk.DrawingArea): +class LineWidget(Gtk.DrawingArea): """ Draw lines linking Person boxes - Types A and C. """ def __init__(self, child, father, frel, mother, mrel, direction): - gtk.DrawingArea.__init__(self) + GObject.GObject.__init__(self) self.child_box = child self.father_box = father @@ -510,7 +519,9 @@ class LineWidget(gtk.DrawingArea): self.direction = direction self.line_gc = None - self.connect("expose_event", self.expose) +##TODO GTK3: event deprecated , instead if still needed connect to event, +## and check if event is an expose event. +## self.connect("expose_event", self.expose) self.connect("realize", self.realize) def realize(self, widget): @@ -520,9 +531,12 @@ class LineWidget(gtk.DrawingArea): """ # pylint: disable-msg=E1101 self.set_size_request(20, 20) - self.line_gc = self.window.new_gc() - self.line_gc.set_foreground( - self.get_colormap().alloc_color("#000000")) +##TODO GTK3:to rewrite in terms of cairo! +## self.line_gc = self.get_root_window().new_gc() +## self.line_gc.set_foreground( +## self.get_colormap().alloc_color("#000000")) + self.cairocontext = self.get_root_window().cairo_create() + self.cairocontext.set_source_rgb(0.,0.,0.) def expose(self, widget, event): """ @@ -575,9 +589,9 @@ class LineWidget(gtk.DrawingArea): Draw a link between parent and child. """ if rela: - self.line_gc.line_style = gtk.gdk.LINE_SOLID + self.line_gc.line_style = Gdk.LINE_SOLID else: - self.line_gc.line_style = gtk.gdk.LINE_ON_OFF_DASH + self.line_gc.line_style = Gdk.LINE_ON_OFF_DASH self.draw_line(centre, side, parent_side, side) self.draw_line(centre, side, centre, middle) @@ -593,19 +607,21 @@ class LineWidget(gtk.DrawingArea): else: self.window.draw_line(self.line_gc, y_from, x_from, y_to, x_to) -class LineWidget2(gtk.DrawingArea): +class LineWidget2(Gtk.DrawingArea): """ Draw lines linking Person boxes - Type B. """ def __init__(self, male, rela, direction): - gtk.DrawingArea.__init__(self) + GObject.GObject.__init__(self) self.male = male self.rela = rela self.direction = direction self.line_gc = None - self.connect("expose_event", self.expose) +##TODO GTK3: event deprecated , instead if still needed connect to event, +## and check if event is an expose event. +## self.connect("expose_event", self.expose) self.connect("realize", self.realize) def realize(self, widget): @@ -642,9 +658,9 @@ class LineWidget2(gtk.DrawingArea): mid_x = alloc.height / 2 if not self.rela: - self.line_gc.line_style = gtk.gdk.LINE_ON_OFF_DASH + self.line_gc.line_style = Gdk.LINE_ON_OFF_DASH else: - self.line_gc.line_style = gtk.gdk.LINE_SOLID + self.line_gc.line_style = Gdk.LINE_SOLID self.line_gc.line_width = 3 @@ -754,20 +770,20 @@ class PedigreeView(NavigationView): def build_widget(self): """ - Builds the interface and returns a gtk.Container type that + Builds the interface and returns a Gtk.Container type that contains the interface. This containter will be inserted into - a gtk.ScrolledWindow page. + a Gtk.ScrolledWindow page. """ - self.scrolledwindow = gtk.ScrolledWindow(None, None) - self.scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, - gtk.POLICY_AUTOMATIC) - self.scrolledwindow.add_events(gtk.gdk.SCROLL_MASK) + self.scrolledwindow = Gtk.ScrolledWindow(None, None) + self.scrolledwindow.set_policy(Gtk.PolicyType.AUTOMATIC, + Gtk.PolicyType.AUTOMATIC) + self.scrolledwindow.add_events(Gdk.EventMask.SCROLL_MASK) self.scrolledwindow.connect("scroll-event", self.cb_bg_scroll_event) - event_box = gtk.EventBox() + event_box = Gtk.EventBox() # Required for drag-scroll events and popup menu - event_box.add_events(gtk.gdk.BUTTON_PRESS_MASK - | gtk.gdk.BUTTON_RELEASE_MASK - | gtk.gdk.BUTTON1_MOTION_MASK) + event_box.add_events(Gdk.EventMask.BUTTON_PRESS_MASK + | Gdk.EventMask.BUTTON_RELEASE_MASK + | Gdk.EventMask.BUTTON1_MOTION_MASK) # Signal begin drag-scroll event_box.connect("button-press-event", self.cb_bg_button_press) # Signal end drag-scroll and popup menu @@ -776,9 +792,9 @@ class PedigreeView(NavigationView): event_box.connect("motion-notify-event", self.cb_bg_motion_notify_event) self.scrolledwindow.add_with_viewport(event_box) - self.table = gtk.Table(1, 1, False) + self.table = Gtk.Table(1, 1, False) event_box.add(self.table) - event_box.get_parent().set_shadow_type(gtk.SHADOW_NONE) + event_box.get_parent().set_shadow_type(Gtk.ShadowType.NONE) self.table.set_row_spacings(1) self.table.set_col_spacings(0) @@ -1036,7 +1052,7 @@ class PedigreeView(NavigationView): def rebuild(self, table_widget, positions, lst, size): """ Function called from rebuild_trees. - For table_widget (gtk.Table) place list of person, use positions array. + For table_widget (Gtk.Table) place list of person, use positions array. For style C position calculated, for others style use static posotins. All display options process in this function. """ @@ -1166,7 +1182,7 @@ class PedigreeView(NavigationView): if lst[i] and lst[i][2]: # Required for popup menu - line.add_events(gtk.gdk.BUTTON_PRESS_MASK) + line.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) line.connect("button-press-event", self.cb_relation_button_press, lst[i][2].get_handle()) @@ -1184,7 +1200,7 @@ class PedigreeView(NavigationView): if lst[i] and lst[i][2]: # Required for popup menu - line.add_events(gtk.gdk.BUTTON_PRESS_MASK) + line.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) line.connect("button-press-event", self.cb_relation_button_press, lst[i][2].get_handle()) @@ -1217,14 +1233,14 @@ class PedigreeView(NavigationView): if lst[i] and lst[i][2]: # Required for popup menu - line.add_events(gtk.gdk.BUTTON_PRESS_MASK) + line.add_events(Gdk.EventMask.BUTTON_PRESS_MASK) line.connect("button-press-event", self.cb_relation_button_press, lst[((i+1)/2)-1][2].get_handle()) # Required for tooltip and mouse-over - line.add_events(gtk.gdk.ENTER_NOTIFY_MASK) + line.add_events(Gdk.EventMask.ENTER_NOTIFY_MASK) # Required for tooltip and mouse-over - line.add_events(gtk.gdk.LEAVE_NOTIFY_MASK) + line.add_events(Gdk.EventMask.LEAVE_NOTIFY_MASK) line.set_tooltip_text( self.format_helper.format_relation( lst[((i+1)/2)-1][2], 11)) @@ -1242,8 +1258,8 @@ class PedigreeView(NavigationView): text = self.format_helper.format_relation(lst[i][2], 1, True) else: text = " " - label = gtk.Label(text) - label.set_justify(gtk.JUSTIFY_LEFT) + label = Gtk.Label(label=text) + label.set_justify(Gtk.Justification.LEFT) label.set_use_markup(True) label.set_line_wrap(True) label.set_alignment(0.1, 0.5) @@ -1270,20 +1286,20 @@ class PedigreeView(NavigationView): ######################################################################## if lst[0]: if self.tree_direction == 2: - child_arrow = gtk.ARROW_LEFT - parent_arrow = gtk.ARROW_RIGHT + child_arrow = Gtk.ArrowType.LEFT + parent_arrow = Gtk.ArrowType.RIGHT elif self.tree_direction == 0: - child_arrow = gtk.ARROW_UP - parent_arrow = gtk.ARROW_DOWN + child_arrow = Gtk.ArrowType.UP + parent_arrow = Gtk.ArrowType.DOWN elif self.tree_direction == 1: - child_arrow = gtk.ARROW_DOWN - parent_arrow = gtk.ARROW_UP + child_arrow = Gtk.ArrowType.DOWN + parent_arrow = Gtk.ArrowType.UP elif self.tree_direction == 3: - child_arrow = gtk.ARROW_RIGHT - parent_arrow = gtk.ARROW_LEFT + child_arrow = Gtk.ArrowType.RIGHT + parent_arrow = Gtk.ArrowType.LEFT - button = gtk.Button() - button.add(gtk.Arrow(child_arrow, gtk.SHADOW_IN)) + button = Gtk.Button() + button.add(Gtk.Arrow.new(child_arrow, Gtk.ShadowType.IN)) childlist = find_children(self.dbstate.db, lst[0][0]) if childlist: button.connect("clicked", self.cb_on_show_child_menu) @@ -1295,8 +1311,8 @@ class PedigreeView(NavigationView): self.attach_widget(table_widget, button, xmax, 0, 1, ymid, ymid +1, fill=False) - button = gtk.Button() - button.add(gtk.Arrow(parent_arrow, gtk.SHADOW_IN)) + button = Gtk.Button() + button.add(Gtk.Arrow.new(parent_arrow, Gtk.ShadowType.IN)) if lst[1]: button.connect("clicked", self.cb_childmenu_changed, lst[1][0].handle) @@ -1308,8 +1324,8 @@ class PedigreeView(NavigationView): self.attach_widget(table_widget, button, xmax, xmax, xmax+1, ymid-1, ymid+2, fill=False) - button = gtk.Button() - button.add(gtk.Arrow(parent_arrow, gtk.SHADOW_IN)) + button = Gtk.Button() + button.add(Gtk.Arrow.new(parent_arrow, Gtk.ShadowType.IN)) if lst[2]: button.connect("clicked", self.cb_childmenu_changed, lst[2][0].handle) @@ -1323,16 +1339,19 @@ class PedigreeView(NavigationView): # add dummy widgets into the corners of the table # to allow the pedigree to be centered - label = gtk.Label("") + label = Gtk.Label(label="") table_widget.attach(label, 0, 1, 0, 1, - gtk.EXPAND|gtk.FILL, gtk.EXPAND|gtk.FILL, 0, 0) - label = gtk.Label("") + Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, + Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, 0, 0) + label = Gtk.Label(label="") if self.tree_direction in [2, 3]: table_widget.attach(label, xmax, xmax+1, ymax, ymax+1, - gtk.EXPAND|gtk.FILL, gtk.EXPAND|gtk.FILL, 0, 0) + Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, + Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, 0, 0) else: table_widget.attach(label, ymax, ymax+1, xmax, xmax+1, - gtk.EXPAND|gtk.FILL, gtk.EXPAND|gtk.FILL, 0, 0) + Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, + Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, 0, 0) debug = False if debug: @@ -1362,14 +1381,15 @@ class PedigreeView(NavigationView): tmp = used_cells[x_pos][y_pos] except KeyError: # fill unused cells - label = gtk.Label("%d,%d"%(x_pos, y_pos)) - frame = gtk.ScrolledWindow(None, None) - frame.set_shadow_type(gtk.SHADOW_NONE) - frame.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER) + label = Gtk.Label(label="%d,%d"%(x_pos, y_pos)) + frame = Gtk.ScrolledWindow(None, None) + frame.set_shadow_type(Gtk.ShadowType.NONE) + frame.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER) frame.add_with_viewport(label) table_widget.attach(frame, x_pos, x_pos+1, y_pos, y_pos+1, - gtk.FILL, gtk.FILL, 0, 0) + Gtk.AttachOptions.FILL, + Gtk.AttachOptions.FILL, 0, 0) table_widget.show_all() # Setup scrollbars for view root person @@ -1377,23 +1397,23 @@ class PedigreeView(NavigationView): hadjustment = window.get_hadjustment() vadjustment = window.get_vadjustment() if self.tree_direction == 2: - self.update_scrollbar_positions(hadjustment, hadjustment.lower) + self.update_scrollbar_positions(hadjustment, hadjustment.get_lower()) self.update_scrollbar_positions(vadjustment, - (vadjustment.upper - vadjustment.page_size) / 2) + (vadjustment.get_upper() - vadjustment.get_page_size()) / 2) elif self.tree_direction == 0: self.update_scrollbar_positions(hadjustment, - (hadjustment.upper - hadjustment.page_size) / 2) + (hadjustment.get_upper() - hadjustment.get_page_size()) / 2) self.update_scrollbar_positions(vadjustment, - vadjustment.upper - vadjustment.page_size) + vadjustment.get_upper() - vadjustment.get_page_size()) elif self.tree_direction == 1: self.update_scrollbar_positions(hadjustment, - (hadjustment.upper - hadjustment.page_size) / 2) - self.update_scrollbar_positions(vadjustment, vadjustment.lower) + (hadjustment.get_upper() - hadjustment.get_page_size()) / 2) + self.update_scrollbar_positions(vadjustment, vadjustment.get_lower()) elif self.tree_direction == 3: self.update_scrollbar_positions(hadjustment, - hadjustment.upper - hadjustment.page_size) + hadjustment.get_upper() - hadjustment.get_page_size()) self.update_scrollbar_positions(vadjustment, - (vadjustment.upper - vadjustment.page_size) / 2) + (vadjustment.get_upper() - vadjustment.get_page_size()) / 2) # Setup mouse wheel scroll direction for style C, # depending of tree direction @@ -1409,7 +1429,7 @@ class PedigreeView(NavigationView): """ xopts = yopts = 0 if fill: - xopts = yopts = gtk.FILL + xopts = yopts = Gtk.AttachOptions.FILL if self.tree_direction == 0: # Vertical (top to bottom) table.attach(widget, top, bottom, right, left, xopts, yopts, 0, 0) @@ -1477,7 +1497,8 @@ class PedigreeView(NavigationView): """ person = self.dbstate.db.get_person_from_handle(person_handle) if person: - clipboard = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD) + clipboard = Gtk.Clipboard.get_for_display(Gdk.Display.get_default(), + Gdk.SELECTION_CLIPBOARD) clipboard.set_text(self.format_helper.format_person(person, 11)) return True return False @@ -1489,17 +1510,18 @@ class PedigreeView(NavigationView): """ family = self.dbstate.db.get_family_from_handle(family_handle) if family: - clipboard = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD) + clipboard = Gtk.Clipboard.get_for_display(Gdk.Display.get_default(), + Gdk.SELECTION_CLIPBOARD) clipboard.set_text(self.format_helper.format_relation(family, 11)) return True return False def cb_on_show_option_menu(self, obj, event, data=None): """Right click option menu.""" - menu = gtk.Menu() + menu = Gtk.Menu() self.add_nav_portion_to_menu(menu) self.add_settings_to_menu(menu) - menu.popup(None, None, None, 0, event.time) + menu.popup(None, None, None, None, 0, event.time) return True def cb_bg_button_press(self, widget, event): @@ -1507,8 +1529,8 @@ class PedigreeView(NavigationView): Enter in scroll mode when mouse button pressed in background or call option menu. """ - if event.button == 1 and event.type == gtk.gdk.BUTTON_PRESS: - widget.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.FLEUR)) + if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS: + widget.get_root_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.FLEUR)) self._last_x = event.x self._last_y = event.y self._in_move = True @@ -1520,31 +1542,31 @@ class PedigreeView(NavigationView): def cb_bg_button_release(self, widget, event): """Exit from scroll mode when button release.""" - if event.button == 1 and event.type == gtk.gdk.BUTTON_RELEASE: + if event.button == 1 and event.type == Gdk.EventType.BUTTON_RELEASE: self.cb_bg_motion_notify_event(widget, event) - widget.window.set_cursor(None) + widget.get_root_window().set_cursor(None) self._in_move = False return True return False def cb_bg_motion_notify_event(self, widget, event): """Function for motion notify events for drag and scroll mode.""" - if self._in_move and (event.type == gtk.gdk.MOTION_NOTIFY or - event.type == gtk.gdk.BUTTON_RELEASE): + if self._in_move and (event.type == Gdk.EventType.MOTION_NOTIFY or + event.type == Gdk.EventType.BUTTON_RELEASE): window = widget.get_parent() hadjustment = window.get_hadjustment() vadjustment = window.get_vadjustment() self.update_scrollbar_positions(vadjustment, - vadjustment.value - (event.y - self._last_y)) + vadjustment.get_value() - (event.y - self._last_y)) self.update_scrollbar_positions(hadjustment, - hadjustment.value - (event.x - self._last_x)) + hadjustment.get_value() - (event.x - self._last_x)) return True return False def update_scrollbar_positions(self, adjustment, value): """Controle value then try setup in scrollbar.""" - if value > (adjustment.upper - adjustment.page_size): - adjustment.set_value(adjustment.upper - adjustment.page_size) + if value > (adjustment.get_upper() - adjustment.get_page_size()): + adjustment.set_value(adjustment.get_upper() - adjustment.get_page_size()) else: adjustment.set_value(value) return True @@ -1554,11 +1576,11 @@ class PedigreeView(NavigationView): Function change scroll direction to horizontally if variable self.scroll_direction setup. """ - if self.scroll_direction and event.type == gtk.gdk.SCROLL: - if event.direction == gtk.gdk.SCROLL_UP: - event.direction = gtk.gdk.SCROLL_LEFT - elif event.direction == gtk.gdk.SCROLL_DOWN: - event.direction = gtk.gdk.SCROLL_RIGHT + if self.scroll_direction and event.type == Gdk.EventType.SCROLL: + if event.direction == Gdk.ScrollDirection.UP: + event.direction = Gdk.ScrollDirection.LEFT + elif event.direction == Gdk.ScrollDirection.DOWN: + event.direction = Gdk.ScrollDirection.RIGHT return False def cb_person_button_press(self, obj, event, person_handle, family_handle): @@ -1571,7 +1593,7 @@ class PedigreeView(NavigationView): self.cb_build_full_nav_menu(obj, event, person_handle, family_handle) return True - elif event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: + elif event.button == 1 and event.type == Gdk.EventType._2BUTTON_PRESS: self.cb_edit_person(obj, person_handle) return True return True @@ -1585,7 +1607,7 @@ class PedigreeView(NavigationView): if gui.utils.is_right_click(event): self.cb_build_relation_nav_menu(obj, event, family_handle) return True - elif event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: + elif event.button == 1 and event.type == Gdk.EventType._2BUTTON_PRESS: self.cb_edit_family(obj, family_handle) return True return True @@ -1596,7 +1618,7 @@ class PedigreeView(NavigationView): Call function for not full family for mouse left button double click on missing persons or call submenu for mouse right click. """ - if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS: + if event.button == 1 and event.type == Gdk.EventType._2BUTTON_PRESS: self.cb_add_parents(obj, person_handle, family_handle) return True elif gui.utils.is_right_click(event): @@ -1619,20 +1641,20 @@ class PedigreeView(NavigationView): if child: self.change_active(childlist[0]) elif len(childlist) > 1: - my_menu = gtk.Menu() + my_menu = Gtk.Menu() for child_handle in childlist: child = self.dbstate.db.get_person_from_handle(child_handle) cname = escape(name_displayer.display(child)) if find_children(self.dbstate.db, child): - label = gtk.Label('%s' % cname) + label = Gtk.Label(label='%s' % cname) else: - label = gtk.Label(cname) + label = Gtk.Label(label=cname) label.set_use_markup(True) label.show() label.set_alignment(0, 0) - menuitem = gtk.ImageMenuItem(None) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, - gtk.ICON_SIZE_MENU) + menuitem = Gtk.ImageMenuItem(None) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO, + Gtk.IconSize.MENU) go_image.show() menuitem.set_image(go_image) menuitem.add(label) @@ -1640,7 +1662,7 @@ class PedigreeView(NavigationView): menuitem.connect("activate", self.cb_childmenu_changed, child_handle) menuitem.show() - my_menu.popup(None, None, None, 0, 0) + my_menu.popup(None, None, None, None, 0, 0) return 1 return 0 @@ -1721,16 +1743,16 @@ class PedigreeView(NavigationView): home_sensitivity = False # bug 4884: need to translate the home label entries = [ - (gtk.STOCK_GO_BACK, self.back_clicked, not hobj.at_front()), - (gtk.STOCK_GO_FORWARD, self.fwd_clicked, not hobj.at_end()), + (Gtk.STOCK_GO_BACK, self.back_clicked, not hobj.at_front()), + (Gtk.STOCK_GO_FORWARD, self.fwd_clicked, not hobj.at_end()), (_("Home"), self.cb_home, home_sensitivity), ] for stock_id, callback, sensitivity in entries: - item = gtk.ImageMenuItem(stock_id) + item = Gtk.ImageMenuItem(stock_id) item.set_sensitive(sensitivity) if stock_id == _("Home"): - im = gtk.image_new_from_stock(gtk.STOCK_HOME,gtk.ICON_SIZE_MENU) + im = Gtk.Image.new_from_stock(Gtk.STOCK_HOME, Gtk.IconSize.MENU) im.show() item.set_image(im) if callback: @@ -1744,27 +1766,27 @@ class PedigreeView(NavigationView): from the configuration dialog. """ # Separator. - item = gtk.MenuItem() + item = Gtk.SeparatorMenuItem() item.show() menu.append(item) # Mouse scroll direction setting. - item = gtk.MenuItem(_("Mouse scroll direction")) - item.set_submenu(gtk.Menu()) + item = Gtk.MenuItem(label=_("Mouse scroll direction")) + item.set_submenu(Gtk.Menu()) scroll_direction_menu = item.get_submenu() - scroll_direction_image = gtk.image_new_from_stock(gtk.STOCK_APPLY, - gtk.ICON_SIZE_MENU) + scroll_direction_image = Gtk.Image.new_from_stock(Gtk.STOCK_APPLY, + Gtk.IconSize.MENU) scroll_direction_image.show() - entry = gtk.ImageMenuItem(_("Top <-> Bottom")) + entry = Gtk.ImageMenuItem(label=_("Top <-> Bottom")) entry.connect("activate", self.cb_change_scroll_direction, False) if self.scroll_direction == False: entry.set_image(scroll_direction_image) entry.show() scroll_direction_menu.append(entry) - entry = gtk.ImageMenuItem(_("Left <-> Right")) + entry = Gtk.ImageMenuItem(_("Left <-> Right")) entry.connect("activate", self.cb_change_scroll_direction, True) if self.scroll_direction == True: entry.set_image(scroll_direction_image) @@ -1778,24 +1800,24 @@ class PedigreeView(NavigationView): def cb_build_missing_parent_nav_menu(self, obj, event, person_handle, family_handle): """Builds the menu for a missing parent.""" - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_('People Menu')) - add_item = gtk.ImageMenuItem(gtk.STOCK_ADD) + add_item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_ADD, None) add_item.connect("activate", self.cb_add_parents, person_handle, family_handle) add_item.show() menu.append(add_item) # Add a separator line - add_item = gtk.MenuItem(None) + add_item = Gtk.SeparatorMenuItem() add_item.show() menu.append(add_item) # Add history-based navigation self.add_nav_portion_to_menu(menu) self.add_settings_to_menu(menu) - menu.popup(None, None, None, 0, event.time) + menu.popup(None, None, None, None, 0, event.time) return 1 def cb_build_full_nav_menu(self, obj, event, person_handle, family_handle): @@ -1804,28 +1826,28 @@ class PedigreeView(NavigationView): and Parents) with navigation. """ - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_('People Menu')) person = self.dbstate.db.get_person_from_handle(person_handle) if not person: return 0 - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, - gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO, + Gtk.IconSize.MENU) go_image.show() - go_item = gtk.ImageMenuItem(name_displayer.display(person)) + go_item = Gtk.ImageMenuItem(label=name_displayer.display(person)) go_item.set_image(go_image) go_item.connect("activate", self.cb_childmenu_changed, person_handle) go_item.show() menu.append(go_item) - edit_item = gtk.ImageMenuItem(gtk.STOCK_EDIT) + edit_item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_EDIT, None) edit_item.connect("activate", self.cb_edit_person, person_handle) edit_item.show() menu.append(edit_item) - clipboard_item = gtk.ImageMenuItem(gtk.STOCK_COPY) + clipboard_item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_COPY, None) clipboard_item.connect("activate", self.cb_copy_person_to_clipboard, person_handle) clipboard_item.show() @@ -1835,7 +1857,7 @@ class PedigreeView(NavigationView): linked_persons = [] # Go over spouses and build their menu - item = gtk.MenuItem(_("Spouses")) + item = Gtk.MenuItem(label=_("Spouses")) fam_list = person.get_family_handle_list() no_spouses = 1 for fam_id in fam_list: @@ -1850,13 +1872,13 @@ class PedigreeView(NavigationView): if no_spouses: no_spouses = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) sp_menu = item.get_submenu() - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, - gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO, + Gtk.IconSize.MENU) go_image.show() - sp_item = gtk.ImageMenuItem(name_displayer.display(spouse)) + sp_item = Gtk.ImageMenuItem(label=name_displayer.display(spouse)) sp_item.set_image(go_image) linked_persons.append(sp_id) sp_item.connect("activate", self.cb_childmenu_changed, sp_id) @@ -1870,7 +1892,7 @@ class PedigreeView(NavigationView): menu.append(item) # Go over siblings and build their menu - item = gtk.MenuItem(_("Siblings")) + item = Gtk.MenuItem(label=_("Siblings")) pfam_list = person.get_parent_family_handle_list() no_siblings = 1 for pfam in pfam_list: @@ -1886,19 +1908,19 @@ class PedigreeView(NavigationView): if no_siblings: no_siblings = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) sib_menu = item.get_submenu() if find_children(self.dbstate.db, sib): - label = gtk.Label('%s' + label = Gtk.Label(label='%s' % escape(name_displayer.display(sib))) else: - label = gtk.Label(escape(name_displayer.display(sib))) + label = Gtk.Label(label=escape(name_displayer.display(sib))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, - gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO, + Gtk.IconSize.MENU) go_image.show() - sib_item = gtk.ImageMenuItem(None) + sib_item = Gtk.ImageMenuItem() sib_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -1915,7 +1937,7 @@ class PedigreeView(NavigationView): menu.append(item) # Go over children and build their menu - item = gtk.MenuItem(_("Children")) + item = Gtk.MenuItem(label=_("Children")) no_children = 1 childlist = find_children(self.dbstate.db, person) for child_handle in childlist: @@ -1925,19 +1947,19 @@ class PedigreeView(NavigationView): if no_children: no_children = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) child_menu = item.get_submenu() if find_children(self.dbstate.db, child): - label = gtk.Label('%s' + label = Gtk.Label(label='%s' % escape(name_displayer.display(child))) else: - label = gtk.Label(escape(name_displayer.display(child))) + label = Gtk.Label(label=escape(name_displayer.display(child))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, - gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO, + Gtk.IconSize.MENU) go_image.show() - child_item = gtk.ImageMenuItem(None) + child_item = Gtk.ImageMenuItem(None) child_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -1955,7 +1977,7 @@ class PedigreeView(NavigationView): menu.append(item) # Go over parents and build their menu - item = gtk.MenuItem(_("Parents")) + item = Gtk.MenuItem(label=_("Parents")) no_parents = 1 par_list = find_parents(self.dbstate.db, person) for par_id in par_list: @@ -1965,19 +1987,19 @@ class PedigreeView(NavigationView): if no_parents: no_parents = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) par_menu = item.get_submenu() if find_parents(self.dbstate.db, par): - label = gtk.Label('%s' + label = Gtk.Label(label='%s' % escape(name_displayer.display(par))) else: - label = gtk.Label(escape(name_displayer.display(par))) + label = Gtk.Label(label=escape(name_displayer.display(par))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, - gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO, + Gtk.IconSize.MENU) go_image.show() - par_item = gtk.ImageMenuItem(None) + par_item = Gtk.ImageMenuItem() par_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -1990,9 +2012,9 @@ class PedigreeView(NavigationView): if no_parents: if self.tree_style == 2 and not self.show_unknown_people: - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) par_menu = item.get_submenu() - par_item = gtk.ImageMenuItem(_("Add New Parents...")) + par_item = Gtk.ImageMenuItem(label=_("Add New Parents...")) par_item.connect("activate", self.cb_add_parents, person_handle, family_handle) par_item.show() @@ -2003,7 +2025,7 @@ class PedigreeView(NavigationView): menu.append(item) # Go over parents and build their menu - item = gtk.MenuItem(_("Related")) + item = Gtk.MenuItem(label=_("Related")) no_related = 1 for p_id in find_witnessed_people(self.dbstate.db, person): #if p_id in linked_persons: @@ -2015,15 +2037,15 @@ class PedigreeView(NavigationView): if no_related: no_related = 0 - item.set_submenu(gtk.Menu()) + item.set_submenu(Gtk.Menu()) per_menu = item.get_submenu() - label = gtk.Label(escape(name_displayer.display(per))) + label = Gtk.Label(label=escape(name_displayer.display(per))) - go_image = gtk.image_new_from_stock(gtk.STOCK_JUMP_TO, - gtk.ICON_SIZE_MENU) + go_image = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO, + Gtk.IconSize.MENU) go_image.show() - per_item = gtk.ImageMenuItem(None) + per_item = Gtk.ImageMenuItem() per_item.set_image(go_image) label.set_use_markup(True) label.show() @@ -2039,45 +2061,45 @@ class PedigreeView(NavigationView): menu.append(item) # Add separator line - item = gtk.MenuItem(None) + item = Gtk.SeparatorMenuItem() item.show() menu.append(item) # Add history-based navigation self.add_nav_portion_to_menu(menu) self.add_settings_to_menu(menu) - menu.popup(None, None, None, 0, event.time) + menu.popup(None, None, None, None, 0, event.time) return 1 def cb_build_relation_nav_menu(self, obj, event, family_handle): """Builds the menu for a parents-child relation line.""" - menu = gtk.Menu() + menu = Gtk.Menu() menu.set_title(_('Family Menu')) family = self.dbstate.db.get_family_from_handle(family_handle) if not family: return 0 - edit_item = gtk.ImageMenuItem(gtk.STOCK_EDIT) + edit_item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_EDIT, None) edit_item.connect("activate", self.cb_edit_family, family_handle) edit_item.show() menu.append(edit_item) - clipboard_item = gtk.ImageMenuItem(gtk.STOCK_COPY) + clipboard_item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_COPY, None) clipboard_item.connect("activate", self.cb_copy_family_to_clipboard, family_handle) clipboard_item.show() menu.append(clipboard_item) # Add separator - item = gtk.MenuItem(None) + item = Gtk.SeparatorMenuItem() item.show() menu.append(item) # Add history-based navigation self.add_nav_portion_to_menu(menu) self.add_settings_to_menu(menu) - menu.popup(None, None, None, 0, event.time) + menu.popup(None, None, None, None, 0, event.time) return 1 def cb_update_show_images(self, client, cnxn_id, entry, data): @@ -2119,12 +2141,12 @@ class PedigreeView(NavigationView): self.tree_style = int(entry) adj = self.config_size_slider.get_adjustment() if entry == 1: # Limit tree size to 5 for the compact style - adj.upper = 5 + adj.set_upper(5) if self.force_size > 5: self.force_size = 5 - adj.value = 5 + adj.set_value(5) else: - adj.upper = 9 + adj.set_upper(9) adj.emit("changed") self.rebuild_trees(self.get_active()) @@ -2172,7 +2194,7 @@ class PedigreeView(NavigationView): """ Function that builds the widget in the configuration dialog """ - table = gtk.Table(7, 2) + table = Gtk.Table(7, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) diff --git a/src/plugins/view/relview.py b/src/plugins/view/relview.py index 07e3e1143..1d27a8747 100644 --- a/src/plugins/view/relview.py +++ b/src/plugins/view/relview.py @@ -38,8 +38,9 @@ import cgi # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk -import pango +from gi.repository import Gdk +from gi.repository import Gtk +from gi.repository import Pango #------------------------------------------------------------------------- # @@ -100,9 +101,9 @@ _ADATA_START = _ALABEL_STOP _ADATA_STOP = _ADATA_START+3 _SDATA_START = 2 _SDATA_STOP = 4 -_RETURN = gtk.gdk.keyval_from_name("Return") -_KP_ENTER = gtk.gdk.keyval_from_name("KP_Enter") -_SPACE = gtk.gdk.keyval_from_name("space") +_RETURN = Gdk.keyval_from_name("Return") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") +_SPACE = Gdk.keyval_from_name("space") _LEFT_BUTTON = 1 _RIGHT_BUTTON = 3 @@ -113,8 +114,8 @@ class AttachList(object): self.max_x = 0 self.max_y = 0 - def attach(self, widget, x0, x1, y0, y1, xoptions=gtk.EXPAND|gtk.FILL, - yoptions=gtk.EXPAND|gtk.FILL): + def attach(self, widget, x0, x1, y0, y1, xoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, + yoptions=Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL): assert(widget) assert(x1>x0) self.list.append((widget, x0, x1, y0, y1, xoptions, yoptions)) @@ -150,7 +151,7 @@ class RelationshipView(NavigationView): uistate.connect('nameformat-changed', self.build_tree) self.redrawing = False - self.color = self.uistate.window.style.light[gtk.STATE_NORMAL] + self.color = self.uistate.window.get_style().light[Gtk.StateType.NORMAL] self.child = None self.old_handle = None @@ -299,31 +300,31 @@ class RelationshipView(NavigationView): Build the widget that contains the view, see :class:`~gui.views.pageview.PageView """ - container = gtk.VBox() + container = Gtk.VBox() container.set_border_width(12) - self.vbox = gtk.VBox() + self.vbox = Gtk.VBox() self.vbox.show() - self.header = gtk.VBox() + self.header = Gtk.VBox() self.header.show() self.child = None - self.scroll = gtk.ScrolledWindow() - self.scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + self.scroll = Gtk.ScrolledWindow() + self.scroll.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.scroll.show() - vp = gtk.Viewport() - vp.set_shadow_type(gtk.SHADOW_NONE) + vp = Gtk.Viewport() + vp.set_shadow_type(Gtk.ShadowType.NONE) vp.add(self.vbox) self.scroll.add(vp) self.scroll.show_all() container.set_spacing(6) - container.pack_start(self.header, False, False) - container.pack_start(gtk.HSeparator(), False, False) + container.pack_start(self.header, False, False, 0) + container.pack_start(Gtk.HSeparator(), False, False, 0) container.add(self.scroll) container.show_all() return container @@ -386,15 +387,15 @@ class RelationshipView(NavigationView): def define_actions(self): NavigationView.define_actions(self) - self.order_action = gtk.ActionGroup(self.title + '/ChangeOrder') + self.order_action = Gtk.ActionGroup(self.title + '/ChangeOrder') self.order_action.add_actions([ - ('ChangeOrder', gtk.STOCK_SORT_ASCENDING, _('_Reorder'), None , + ('ChangeOrder', Gtk.STOCK_SORT_ASCENDING, _('_Reorder'), None , _("Change order of parents and families"), self.reorder), ]) - self.family_action = gtk.ActionGroup(self.title + '/Family') + self.family_action = Gtk.ActionGroup(self.title + '/Family') self.family_action.add_actions([ - ('Edit', gtk.STOCK_EDIT, _('Edit...'), "Return", + ('Edit', Gtk.STOCK_EDIT, _('Edit...'), "Return", _("Edit the active person"), self.edit_active), ('AddSpouse', 'gramps-spouse', _('Partner'), None , _("Add a new family with person as parent"), self.add_spouse), @@ -477,10 +478,10 @@ class RelationshipView(NavigationView): self.old_handle = obj else: #different object, scroll to top - old_vadjust = self.scroll.get_vadjustment().lower + old_vadjust = self.scroll.get_vadjustment().get_lower() self.old_handle = obj self.scroll.get_vadjustment().value = \ - self.scroll.get_vadjustment().lower + self.scroll.get_vadjustment().get_lower() if self.redrawing: return False self.redrawing = True @@ -543,7 +544,7 @@ class RelationshipView(NavigationView): else: cols = self.attach.max_x-1 - self.child = gtk.Table(self.attach.max_y, cols) + self.child = Gtk.Table(self.attach.max_y, cols) self.child.set_border_width(12) self.child.set_col_spacings(12) self.child.set_row_spacings(0) @@ -560,7 +561,7 @@ class RelationshipView(NavigationView): self.child.show_all() - self.vbox.pack_start(self.child, False) + self.vbox.pack_start(self.child, False, True, 0) #reset scroll position as it was before self.scroll.get_vadjustment().value = old_vadjust self.redrawing = False @@ -574,7 +575,7 @@ class RelationshipView(NavigationView): def write_title(self, person): map(self.header.remove, self.header.get_children()) - table = gtk.Table(2, 3) + table = Gtk.Table(2, 3) table.set_col_spacings(12) table.set_row_spacings(0) @@ -594,11 +595,11 @@ class RelationshipView(NavigationView): table.attach(hbox, 0, 2, 0, 1) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() if self.use_shade: - eventbox.modify_bg(gtk.STATE_NORMAL, self.color) + eventbox.modify_bg(Gtk.StateType.NORMAL, self.color) table.attach(eventbox, 1, 2, 1, 2) - subtbl = gtk.Table(3, 3) + subtbl = Gtk.Table(3, 3) subtbl.set_col_spacings(12) subtbl.set_row_spacings(0) eventbox.add(subtbl) @@ -606,7 +607,7 @@ class RelationshipView(NavigationView): # GRAMPS ID subtbl.attach(widgets.BasicLabel("%s:" % _('ID')), - 1, 2, 0, 1, xoptions=gtk.FILL, yoptions=0) + 1, 2, 0, 1, xoptions=Gtk.AttachOptions.FILL, yoptions=0) subtbl.attach(widgets.BasicLabel(person.gramps_id), 2, 3, 0, 1, yoptions=0) @@ -618,7 +619,7 @@ class RelationshipView(NavigationView): birth_title = _("Birth") subtbl.attach(widgets.BasicLabel("%s:" % birth_title), - 1, 2, 1, 2, xoptions=gtk.FILL, yoptions=0) + 1, 2, 1, 2, xoptions=Gtk.AttachOptions.FILL, yoptions=0) subtbl.attach(widgets.BasicLabel(self.format_event(birth)), 2, 3, 1, 2, yoptions=0) @@ -637,34 +638,34 @@ class RelationshipView(NavigationView): if (death_date and death_date.get_valid()): age = death_date - birth_date subtbl.attach(widgets.BasicLabel("%s:" % death_title), - 1, 2, 2, 3, xoptions=gtk.FILL, yoptions=0) + 1, 2, 2, 3, xoptions=Gtk.AttachOptions.FILL, yoptions=0) subtbl.attach(widgets.BasicLabel("%s (%s)" % (self.format_event(death), age), - pango.ELLIPSIZE_END), + Pango.EllipsizeMode.END), 2, 3, 2, 3, yoptions=0) showed_death = True if not showed_death: age = gen.lib.date.Today() - birth_date if probably_alive(person, self.dbstate.db): subtbl.attach(widgets.BasicLabel("%s:" % _("Alive")), - 1, 2, 2, 3, xoptions=gtk.FILL, yoptions=0) - subtbl.attach(widgets.BasicLabel("(%s)" % age, pango.ELLIPSIZE_END), + 1, 2, 2, 3, xoptions=Gtk.AttachOptions.FILL, yoptions=0) + subtbl.attach(widgets.BasicLabel("(%s)" % age, Pango.EllipsizeMode.END), 2, 3, 2, 3, yoptions=0) else: subtbl.attach(widgets.BasicLabel("%s:" % _("Death")), - 1, 2, 2, 3, xoptions=gtk.FILL, yoptions=0) + 1, 2, 2, 3, xoptions=Gtk.AttachOptions.FILL, yoptions=0) subtbl.attach(widgets.BasicLabel("%s (%s)" % (_("unknown"), age), - pango.ELLIPSIZE_END), + Pango.EllipsizeMode.END), 2, 3, 2, 3, yoptions=0) showed_death = True if not showed_death: subtbl.attach(widgets.BasicLabel("%s:" % death_title), - 1, 2, 2, 3, xoptions=gtk.FILL, yoptions=0) + 1, 2, 2, 3, xoptions=Gtk.AttachOptions.FILL, yoptions=0) subtbl.attach(widgets.BasicLabel(self.format_event(death)), 2, 3, 2, 3, yoptions=0) - mbox = gtk.HBox() + mbox = Gtk.HBox() mbox.add(table) # image @@ -676,15 +677,15 @@ class RelationshipView(NavigationView): media_path_full(self.dbstate.db, mobj.get_path()), rectangle=image_list[0].get_rectangle()) - image = gtk.Image() + image = Gtk.Image() image.set_from_pixbuf(pixbuf) - button = gtk.Button() + button = Gtk.Button() button.add(image) button.connect("clicked", lambda obj: self.view_photo(mobj)) - mbox.pack_end(button, False) + mbox.pack_end(button, False, True, 0) mbox.show_all() - self.header.pack_start(mbox, False) + self.header.pack_start(mbox, False, True, 0) def view_photo(self, photo): """ @@ -751,7 +752,7 @@ class RelationshipView(NavigationView): def write_person_data(self, title, data): self.attach.attach(widgets.BasicLabel(title), _ALABEL_START, _ALABEL_STOP, self.row, self.row+1, - xoptions=gtk.FILL|gtk.SHRINK) + xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.SHRINK) self.attach.attach(widgets.BasicLabel(data), _ADATA_START, _ADATA_STOP, self.row, self.row+1) @@ -759,7 +760,7 @@ class RelationshipView(NavigationView): def write_label(self, title, family, is_parent, person = None): msg = '%s' % cgi.escape(title) - hbox = gtk.HBox() + hbox = Gtk.HBox() label = widgets.MarkupLabel(msg, x_align=1) # Draw the collapse/expand button: if family is not None: @@ -772,12 +773,12 @@ class RelationshipView(NavigationView): self.expand_collapse_press, (person, family.handle)) else : - arrow = gtk.Arrow(gtk.ARROW_RIGHT, gtk.SHADOW_OUT) - hbox.pack_start(arrow, False) - hbox.pack_start(label, True) + arrow = Gtk.Arrow(Gtk.ArrowType.RIGHT, Gtk.ShadowType.OUT) + hbox.pack_start(arrow, False, True, 0) + hbox.pack_start(label, True, True, 0) self.attach.attach(hbox, _LABEL_START, _LABEL_STOP, - self.row, self.row+1, gtk.SHRINK|gtk.FILL) + self.row, self.row+1, Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL) if family: value = family.gramps_id @@ -785,13 +786,13 @@ class RelationshipView(NavigationView): value = "" self.attach.attach(widgets.BasicLabel(value), _DATA_START, _DATA_STOP, - self.row, self.row+1, gtk.SHRINK|gtk.FILL) + self.row, self.row+1, Gtk.AttachOptions.SHRINK|Gtk.AttachOptions.FILL) if family and self.check_collapsed(person.handle, family.handle): # show family names later pass else: - hbox = gtk.HBox() + hbox = Gtk.HBox() hbox.set_spacing(12) if is_parent: call_fcn = self.add_parent_family @@ -814,30 +815,30 @@ class RelationshipView(NavigationView): # Show edit-Buttons if toolbar is not visible if self.reorder_sensitive: add = widgets.IconButton(self.reorder_button_press, None, - gtk.STOCK_SORT_ASCENDING) + Gtk.STOCK_SORT_ASCENDING) add.set_tooltip_text(ord_msg) - hbox.pack_start(add, False) + hbox.pack_start(add, False, True, 0) - add = widgets.IconButton(call_fcn, None, gtk.STOCK_ADD) + add = widgets.IconButton(call_fcn, None, Gtk.STOCK_ADD) add.set_tooltip_text(add_msg) - hbox.pack_start(add, False) + hbox.pack_start(add, False, True, 0) if is_parent: add = widgets.IconButton(self.select_family, None, - gtk.STOCK_INDEX) + Gtk.STOCK_INDEX) add.set_tooltip_text(sel_msg) - hbox.pack_start(add, False) + hbox.pack_start(add, False, True, 0) if family: edit = widgets.IconButton(self.edit_family, family.handle, - gtk.STOCK_EDIT) + Gtk.STOCK_EDIT) edit.set_tooltip_text(edit_msg) - hbox.pack_start(edit, False) + hbox.pack_start(edit, False, True, 0) if not self.dbstate.db.readonly: delete = widgets.IconButton(del_fcn, family.handle, - gtk.STOCK_REMOVE) + Gtk.STOCK_REMOVE) delete.set_tooltip_text(del_msg) - hbox.pack_start(delete, False) + hbox.pack_start(delete, False, True, 0) self.attach.attach(hbox, _BTN_START, _BTN_STOP, self.row, self.row+1) self.row += 1 @@ -874,9 +875,9 @@ class RelationshipView(NavigationView): box = self.get_people_box(family.get_father_handle(), family.get_mother_handle(), post_msg=childmsg) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() if self.use_shade: - eventbox.modify_bg(gtk.STATE_NORMAL, self.color) + eventbox.modify_bg(Gtk.StateType.NORMAL, self.color) eventbox.add(box) self.attach.attach( eventbox, _PDATA_START, _PDATA_STOP, @@ -889,7 +890,7 @@ class RelationshipView(NavigationView): if self.show_siblings: active = self.get_active() - hbox = gtk.HBox() + hbox = Gtk.HBox() if self.check_collapsed(person.handle, "SIBLINGS"): arrow = widgets.ExpandCollapseArrow(True, self.expand_collapse_press, @@ -898,16 +899,16 @@ class RelationshipView(NavigationView): arrow = widgets.ExpandCollapseArrow(False, self.expand_collapse_press, (person, "SIBLINGS")) - hbox.pack_start(arrow, False) + hbox.pack_start(arrow, False, True, 0) label_cell = self.build_label_cell(_('Siblings')) - hbox.pack_start(label_cell, True) + hbox.pack_start(label_cell, True, True, 0) self.attach.attach( hbox, _CLABEL_START-1, _CLABEL_STOP-1, self.row, - self.row+1, xoptions=gtk.FILL|gtk.SHRINK, - yoptions=gtk.FILL) + self.row+1, xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.SHRINK, + yoptions=Gtk.AttachOptions.FILL) if self.check_collapsed(person.handle, "SIBLINGS"): - hbox = gtk.HBox() + hbox = Gtk.HBox() child_list = [ref.ref for ref in family.get_child_ref_list() if ref.ref != active] if child_list: @@ -928,43 +929,43 @@ class RelationshipView(NavigationView): else : childmsg = _(" (only child)") box = self.get_people_box(post_msg=childmsg) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() if self.use_shade: - eventbox.modify_bg(gtk.STATE_NORMAL, self.color) + eventbox.modify_bg(Gtk.StateType.NORMAL, self.color) eventbox.add(box) self.attach.attach( eventbox, _PDATA_START, _PDATA_STOP, self.row, self.row+1) self.row += 1 # now advance it else: - hbox = gtk.HBox() + hbox = Gtk.HBox() addchild = widgets.IconButton(self.add_child_to_fam, family.handle, - gtk.STOCK_ADD) + Gtk.STOCK_ADD) addchild.set_tooltip_text(_('Add new child to family')) selchild = widgets.IconButton(self.sel_child_to_fam, family.handle, - gtk.STOCK_INDEX) + Gtk.STOCK_INDEX) selchild.set_tooltip_text(_('Add existing child to family')) - hbox.pack_start(addchild, False) - hbox.pack_start(selchild, False) + hbox.pack_start(addchild, False, True, 0) + hbox.pack_start(selchild, False, True, 0) self.attach.attach( hbox, _CLABEL_START, _CLABEL_STOP, self.row, - self.row+1, xoptions=gtk.FILL|gtk.SHRINK, - yoptions=gtk.FILL) + self.row+1, xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.SHRINK, + yoptions=Gtk.AttachOptions.FILL) self.row += 1 - vbox = gtk.VBox() + vbox = Gtk.VBox() i = 1 child_list = [ref.ref for ref in family.get_child_ref_list()] for child_handle in child_list: child_should_be_linked = (child_handle != active) self.write_child(vbox, child_handle, i, child_should_be_linked) i += 1 - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() if self.use_shade: - eventbox.modify_bg(gtk.STATE_NORMAL, self.color) + eventbox.modify_bg(Gtk.StateType.NORMAL, self.color) eventbox.add(vbox) self.attach.attach( eventbox, _CDATA_START-1, _CDATA_STOP, self.row, @@ -973,20 +974,20 @@ class RelationshipView(NavigationView): self.row += 1 def get_people_box(self, *handles, **kwargs): - vbox = gtk.HBox() + vbox = Gtk.HBox() initial_name = True for handle in handles: if not initial_name: - link_label = gtk.Label(" %s " % _('and')) + link_label = Gtk.Label(label=" %s " % _('and')) link_label.show() - vbox.pack_start(link_label, expand=False) + vbox.pack_start(link_label, False, True, 0) initial_name = False if handle: name = self.get_name(handle, True) link_label = widgets.LinkLabel(name, self._button_press, handle, theme=self.theme) if self.use_shade: - link_label.modify_bg(gtk.STATE_NORMAL, self.color) + link_label.modify_bg(Gtk.StateType.NORMAL, self.color) if self._config.get('preferences.releditbtn'): button = widgets.IconButton(self.edit_button_press, handle) @@ -994,15 +995,15 @@ class RelationshipView(NavigationView): else: button = None vbox.pack_start(widgets.LinkBox(link_label, button), - expand=False) + False, True, 0) else: - link_label = gtk.Label(_('Unknown')) + link_label = Gtk.Label(label=_('Unknown')) link_label.show() - vbox.pack_start(link_label, expand=False) + vbox.pack_start(link_label, False, True, 0) if "post_msg" in kwargs and kwargs["post_msg"]: - link_label = gtk.Label(kwargs["post_msg"]) + link_label = Gtk.Label(label=kwargs["post_msg"]) link_label.show() - vbox.pack_start(link_label, expand=False) + vbox.pack_start(link_label, False, True, 0) return vbox def write_person(self, title, handle): @@ -1016,10 +1017,10 @@ class RelationshipView(NavigationView): if self._config.get('preferences.releditbtn'): label.set_padding(0, 5) self.attach.attach(label, _PLABEL_START, _PLABEL_STOP, self.row, - self.row+1, xoptions=gtk.FILL|gtk.SHRINK, - yoptions=gtk.FILL|gtk.SHRINK) + self.row+1, xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.SHRINK, + yoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.SHRINK) - vbox = gtk.VBox() + vbox = Gtk.VBox() if handle: name = self.get_name(handle, True) @@ -1035,27 +1036,27 @@ class RelationshipView(NavigationView): link_label = widgets.LinkLabel(name, self._button_press, handle, emph, theme=self.theme) if self.use_shade: - link_label.modify_bg(gtk.STATE_NORMAL, self.color) + link_label.modify_bg(Gtk.StateType.NORMAL, self.color) if self._config.get('preferences.releditbtn'): button = widgets.IconButton(self.edit_button_press, handle) button.set_tooltip_text(_('Edit %s') % name[0]) else: button = None - vbox.pack_start(widgets.LinkBox(link_label, button)) + vbox.pack_start(widgets.LinkBox(link_label, button), True, True, 0) else: - link_label = gtk.Label(_('Unknown')) + link_label = Gtk.Label(label=_('Unknown')) link_label.set_alignment(0, 1) link_label.show() - vbox.pack_start(link_label) + vbox.pack_start(link_label, True, True, 0) if self.show_details: value = self.info_string(handle) if value: - vbox.pack_start(widgets.MarkupLabel(value)) + vbox.pack_start(widgets.MarkupLabel(value, True, True, 0)) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() if self.use_shade: - eventbox.modify_bg(gtk.STATE_NORMAL, self.color) + eventbox.modify_bg(Gtk.StateType.NORMAL, self.color) eventbox.add(vbox) self.attach.attach(eventbox, _PDATA_START, _PDATA_STOP, @@ -1078,12 +1079,12 @@ class RelationshipView(NavigationView): def write_child(self, vbox, handle, index, child_should_be_linked): if not child_should_be_linked: original_vbox = vbox - vbox = gtk.VBox() - frame = gtk.Frame() - frame.set_shadow_type(gtk.SHADOW_ETCHED_IN) + vbox = Gtk.VBox() + frame = Gtk.Frame() + frame.set_shadow_type(Gtk.ShadowType.ETCHED_IN) if self.use_shade: - ev = gtk.EventBox() - ev.modify_bg(gtk.STATE_NORMAL, self.color) + ev = Gtk.EventBox() + ev.modify_bg(Gtk.StateType.NORMAL, self.color) ev.add(vbox) frame.add(ev) else: @@ -1114,7 +1115,7 @@ class RelationshipView(NavigationView): theme=self.theme) if self.use_shade: - link_label.modify_bg(gtk.STATE_NORMAL, self.color) + link_label.modify_bg(Gtk.StateType.NORMAL, self.color) link_label.set_padding(3, 0) if child_should_be_linked and self._config.get( 'preferences.releditbtn'): @@ -1123,7 +1124,7 @@ class RelationshipView(NavigationView): else: button = None - hbox = gtk.HBox() + hbox = Gtk.HBox() l = widgets.BasicLabel("%d." % index) l.set_width_chars(3) l.set_alignment(1.0, 0.5) @@ -1131,7 +1132,7 @@ class RelationshipView(NavigationView): hbox.pack_start(widgets.LinkBox(link_label, button), False, False, 4) hbox.show() - vbox.pack_start(hbox) + vbox.pack_start(hbox, True, True, 0) if self.show_details: value = self.info_string(handle) @@ -1214,7 +1215,7 @@ class RelationshipView(NavigationView): if button_activated(event, _LEFT_BUTTON): self.change_active(handle) elif button_activated(event, _RIGHT_BUTTON): - myMenu = gtk.Menu() + myMenu = Gtk.Menu() myMenu.append(self.build_menu_item(handle)) myMenu.popup(None, None, None, event.button, event.time) @@ -1222,10 +1223,10 @@ class RelationshipView(NavigationView): person = self.dbstate.db.get_person_from_handle(handle) name = name_displayer.display(person) - item = gtk.ImageMenuItem(None) - image = gtk.image_new_from_stock(gtk.STOCK_EDIT, gtk.ICON_SIZE_MENU) + item = Gtk.ImageMenuItem(None) + image = Gtk.Image.new_from_stock(Gtk.STOCK_EDIT, Gtk.IconSize.MENU) image.show() - label = gtk.Label(_("Edit %s") % name) + label = Gtk.Label(label=_("Edit %s") % name) label.show() label.set_alignment(0, 0) @@ -1331,9 +1332,9 @@ class RelationshipView(NavigationView): else : childmsg = _(" (no children)") box = self.get_people_box(handle, post_msg=childmsg) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() if self.use_shade: - eventbox.modify_bg(gtk.STATE_NORMAL, self.color) + eventbox.modify_bg(Gtk.StateType.NORMAL, self.color) eventbox.add(box) self.attach.attach( eventbox, _PDATA_START, _PDATA_STOP, @@ -1349,7 +1350,7 @@ class RelationshipView(NavigationView): if not self.write_relationship_events(box, family): self.write_relationship(box, family) - hbox = gtk.HBox() + hbox = Gtk.HBox() if self.check_collapsed(family.handle, "CHILDREN"): arrow = widgets.ExpandCollapseArrow(True, self.expand_collapse_press, @@ -1358,16 +1359,16 @@ class RelationshipView(NavigationView): arrow = widgets.ExpandCollapseArrow(False, self.expand_collapse_press, (family, "CHILDREN")) - hbox.pack_start(arrow, False) + hbox.pack_start(arrow, False, True, 0) label_cell = self.build_label_cell(_('Children')) - hbox.pack_start(label_cell, True) + hbox.pack_start(label_cell, True, True, 0) self.attach.attach( hbox, _CLABEL_START-1, _CLABEL_STOP-1, self.row, - self.row+1, xoptions=gtk.FILL|gtk.SHRINK, - yoptions=gtk.FILL) + self.row+1, xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.SHRINK, + yoptions=Gtk.AttachOptions.FILL) if self.check_collapsed(family.handle, "CHILDREN"): - hbox = gtk.HBox() + hbox = Gtk.HBox() child_list = family.get_child_ref_list() if child_list: count = len(child_list) @@ -1378,32 +1379,32 @@ class RelationshipView(NavigationView): else : childmsg = _(" (no children)") box = self.get_people_box(post_msg=childmsg) - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() if self.use_shade: - eventbox.modify_bg(gtk.STATE_NORMAL, self.color) + eventbox.modify_bg(Gtk.StateType.NORMAL, self.color) eventbox.add(box) self.attach.attach( eventbox, _PDATA_START, _PDATA_STOP, self.row, self.row+1) self.row += 1 # now advance it else: - hbox = gtk.HBox() + hbox = Gtk.HBox() addchild = widgets.IconButton(self.add_child_to_fam, family.handle, - gtk.STOCK_ADD) + Gtk.STOCK_ADD) addchild.set_tooltip_text(_('Add new child to family')) selchild = widgets.IconButton(self.sel_child_to_fam, family.handle, - gtk.STOCK_INDEX) + Gtk.STOCK_INDEX) selchild.set_tooltip_text(_('Add existing child to family')) - hbox.pack_start(addchild, False) - hbox.pack_start(selchild, False) + hbox.pack_start(addchild, False, True, 0) + hbox.pack_start(selchild, False, True, 0) self.attach.attach( hbox, _CLABEL_START, _CLABEL_STOP, self.row, - self.row+1, xoptions=gtk.FILL|gtk.SHRINK, - yoptions=gtk.FILL) + self.row+1, xoptions=Gtk.AttachOptions.FILL|Gtk.AttachOptions.SHRINK, + yoptions=Gtk.AttachOptions.FILL) - vbox = gtk.VBox() + vbox = Gtk.VBox() i = 1 child_list = family.get_child_ref_list() for child_ref in child_list: @@ -1411,9 +1412,9 @@ class RelationshipView(NavigationView): i += 1 self.row += 1 - eventbox = gtk.EventBox() + eventbox = Gtk.EventBox() if self.use_shade: - eventbox.modify_bg(gtk.STATE_NORMAL, self.color) + eventbox.modify_bg(Gtk.StateType.NORMAL, self.color) eventbox.add(vbox) self.attach.attach( eventbox, _CDATA_START-1, _CDATA_STOP, self.row, @@ -1634,7 +1635,7 @@ class RelationshipView(NavigationView): """ Function that builds the widget in the configuration dialog """ - table = gtk.Table(3, 2) + table = Gtk.Table(3, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -1645,7 +1646,7 @@ class RelationshipView(NavigationView): configdialog.add_checkbox(table, _('Display edit buttons'), 1, 'preferences.releditbtn') - checkbox = gtk.CheckButton(_('View links as website links')) + checkbox = Gtk.CheckButton(_('View links as website links')) theme = self._config.get('preferences.relation-display-theme') checkbox.set_active(theme == 'WEBPAGE') checkbox.connect('toggled', self._config_update_theme) @@ -1657,7 +1658,7 @@ class RelationshipView(NavigationView): """ Function that builds the widget in the configuration dialog """ - table = gtk.Table(2, 2) + table = Gtk.Table(2, 2) table.set_border_width(12) table.set_col_spacings(6) table.set_row_spacings(6) @@ -1870,9 +1871,9 @@ def has_children(db,p): return False def button_activated(event, mouse_button): - if (event.type == gtk.gdk.BUTTON_PRESS and + if (event.type == Gdk.EventType.BUTTON_PRESS and event.button == mouse_button) or \ - (event.type == gtk.gdk.KEY_PRESS and + (event.type == Gdk.KEY_PRESS and event.keyval in (_RETURN, _KP_ENTER, _SPACE)): return True else: diff --git a/src/plugins/view/repoview.py b/src/plugins/view/repoview.py index d5ff20337..a937d528c 100644 --- a/src/plugins/view/repoview.py +++ b/src/plugins/view/repoview.py @@ -29,7 +29,7 @@ Repository View # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk #------------------------------------------------------------------------- # diff --git a/src/plugins/view/sourceview.py b/src/plugins/view/sourceview.py index 4889fc8c5..fba02129c 100644 --- a/src/plugins/view/sourceview.py +++ b/src/plugins/view/sourceview.py @@ -30,7 +30,7 @@ Source View # GTK/Gnome modules # #------------------------------------------------------------------------- -import gtk +from gi.repository import Gtk import logging LOG = logging.getLogger(".citation") diff --git a/test/GrampsLogger/GtkHandler_Test.py b/test/GrampsLogger/GtkHandler_Test.py index 36c8f1bcd..500390e78 100644 --- a/test/GrampsLogger/GtkHandler_Test.py +++ b/test/GrampsLogger/GtkHandler_Test.py @@ -1,7 +1,7 @@ import unittest import logging import sys -import gtk +from gi.repository import Gtk sys.path.append('../../src') @@ -41,7 +41,7 @@ class GtkHandlerTest(unittest.TestCase): except: l.error(log_message,exc_info=True) - gtk.main() + Gtk.main() diff --git a/windows/builder/build_GrampsWin32.py b/windows/builder/build_GrampsWin32.py index 2fc3312e1..9abf679d6 100644 --- a/windows/builder/build_GrampsWin32.py +++ b/windows/builder/build_GrampsWin32.py @@ -67,14 +67,14 @@ log = logging.getLogger('BuildApp') log.addHandler(console) -class buildbase(gobject.GObject): +class buildbase(GObject.GObject): __gsignals__={ - "build_progresstext" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_STRING]), - "build_progressfraction" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_FLOAT]), + "build_progresstext" : (GObject.SignalFlags.RUN_LAST, None, [GObject.TYPE_STRING]), + "build_progressfraction" : (GObject.SignalFlags.RUN_LAST, None, [GObject.TYPE_FLOAT]), } def __init(self): - gobject.GObject.__init__(self) + GObject.GObject.__init__(self) self.gramps_version = 'VERSION-UNKNOWN' self.bTarball = bTarball self.build_root = '.' # the directory were the build source is located @@ -636,4 +636,4 @@ Options: #========================== sys.exit(buildGRAMPS(repository_path,out_dir, bTarball)) -gobject.type_register(buildbase) \ No newline at end of file +GObject.type_register(buildbase) \ No newline at end of file diff --git a/windows/builder/check_gtk_install.py b/windows/builder/check_gtk_install.py index fd01f0d87..05bb3d2fd 100644 --- a/windows/builder/check_gtk_install.py +++ b/windows/builder/check_gtk_install.py @@ -170,8 +170,8 @@ def CheckWithDependencyWalker(): exe = os.path.join(scriptpath, 'depends.exe') fout = os.path.join(scriptpath, 'depres.txt') f2check = [ - os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/gtk/_gtk.pyd' ), - os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/gobject/_gobject.pyd' ), + os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/gtk/_Gtk.pyd' ), + os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/gobject/_GObject.pyd' ), os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/pangocairo.pyd' ), ] if os.path.isfile( exe ): @@ -268,10 +268,10 @@ def Import_pyGtkIntoPython(): try: import gtk - PrintVersionResult(' GTK+ ', MIN_GTK_VER, gtk.gtk_version, UNTESTED_GTK_VER ) + PrintVersionResult(' GTK+ ', MIN_GTK_VER, Gtk.gtk_version, UNTESTED_GTK_VER ) #test the pyGTK version (which is in the gtk namespace) - PrintVersionResult(' pyGTK ', MIN_PYGTK_VER, gtk.pygtk_version, UNTESTED_PYGTK_VER ) + PrintVersionResult(' pyGTK ', MIN_PYGTK_VER, Gtk.pygtk_version, UNTESTED_PYGTK_VER ) except ImportError: PrintFailedImport(' GTK+ ', MIN_GTK_VER, NOT_FOUND_STR) @@ -281,7 +281,7 @@ def Import_pyGtkIntoPython(): #test the gobject version try: import gobject - PrintVersionResult(' gobject', MIN_GOBJECT_VER, gobject.pygobject_version, UNTESTED_GOBJECT_VER) + PrintVersionResult(' gobject', MIN_GOBJECT_VER, GObject.pygobject_version, UNTESTED_GOBJECT_VER) except ImportError: PrintFailedImport(' gobject', MIN_GOBJECT_VER, NOT_FOUND_STR) @@ -299,7 +299,7 @@ def Import_pyGtkIntoPython(): log.info( '\n==== See if libglade installed ====') try: - import gtk.glade + import Gtk.glade log.info( ' Glade tesing import of libglade .......\tOK\n' ) except ImportError, e: log.info( ' Glade importError: %s\n' % e ) diff --git a/windows/builder/test_dependencies.py b/windows/builder/test_dependencies.py index 3fc2676d4..6faeb67ed 100644 --- a/windows/builder/test_dependencies.py +++ b/windows/builder/test_dependencies.py @@ -26,11 +26,11 @@ py_str = 'found %d.%d.%d' % sys.version_info[:3] try: import gtk try: - gtkver_str = 'found %d.%d.%d' % gtk.gtk_version + gtkver_str = 'found %d.%d.%d' % Gtk.gtk_version except : # any failure to 'get' the version gtkver_str = 'unknown version' try: - pygtkver_str = 'found %d.%d.%d' % gtk.pygtk_version + pygtkver_str = 'found %d.%d.%d' % Gtk.pygtk_version except :# any failure to 'get' the version pygtkver_str = 'unknown version' except ImportError: @@ -41,7 +41,7 @@ except ImportError: try: import gobject try: - gobjectver_str = 'found %d.%d.%d' % gobject.pygobject_version + gobjectver_str = 'found %d.%d.%d' % GObject.pygobject_version except :# any failure to 'get' the version gobjectver_str = 'unknown version' diff --git a/windows/check_gtk_install.py b/windows/check_gtk_install.py index 016afb767..a6508fe63 100644 --- a/windows/check_gtk_install.py +++ b/windows/check_gtk_install.py @@ -165,8 +165,8 @@ def CheckWithDependencyWalker(): exe = os.path.join(scriptpath, 'depends.exe') fout = os.path.join(scriptpath, 'depres.txt') f2check = [ - os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/gtk/_gtk.pyd' ), - os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/gobject/_gobject.pyd' ), + os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/gtk/_Gtk.pyd' ), + os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/gobject/_GObject.pyd' ), os.path.join(sys.prefix, 'Lib/site-packages/gtk-2.0/pangocairo.pyd' ), ] if os.path.isfile( exe ): @@ -265,10 +265,10 @@ def Import_pyGtkIntoPython(): try: import gtk - PrintVersionResult(' GTK+ ', MIN_GTK_VER, gtk.gtk_version, UNTESTED_GTK_VER ) + PrintVersionResult(' GTK+ ', MIN_GTK_VER, Gtk.gtk_version, UNTESTED_GTK_VER ) #test the pyGTK version (which is in the gtk namespace) - PrintVersionResult(' pyGTK ', MIN_PYGTK_VER, gtk.pygtk_version, UNTESTED_PYGTK_VER ) + PrintVersionResult(' pyGTK ', MIN_PYGTK_VER, Gtk.pygtk_version, UNTESTED_PYGTK_VER ) except ImportError: PrintFailedImport(' GTK+ ', MIN_GTK_VER, NOT_FOUND_STR) @@ -278,7 +278,7 @@ def Import_pyGtkIntoPython(): #test the gobject version try: import gobject - PrintVersionResult(' gobject', MIN_GOBJECT_VER, gobject.pygobject_version, UNTESTED_GOBJECT_VER) + PrintVersionResult(' gobject', MIN_GOBJECT_VER, GObject.pygobject_version, UNTESTED_GOBJECT_VER) except ImportError: PrintFailedImport(' gobject', MIN_GOBJECT_VER, NOT_FOUND_STR) @@ -296,7 +296,7 @@ def Import_pyGtkIntoPython(): print '\n==== See if libglade installed ====' try: - import gtk.glade + import Gtk.glade print ' Glade tesing import of libglade .......\tOK\n' except ImportError, e: print ' Glade importError: %s\n' % e diff --git a/windows/nsis/gcheck.py b/windows/nsis/gcheck.py index 1f8509e4d..088af3403 100644 --- a/windows/nsis/gcheck.py +++ b/windows/nsis/gcheck.py @@ -27,11 +27,11 @@ f = open(fn,"w") f.write('[tests]\n') try: - import gtk + from gi.repository import Gtk f.write('gtk=yes\n') - f.write('gtkver=%d.%d.%d\n' % gtk.gtk_version) + f.write('gtkver=%d.%d.%d\n' % Gtk.gtk_version) f.write('pygtk=yes\n') - f.write('pygtkver=%d.%d.%d\n' % gtk.pygtk_version) + f.write('pygtkver=%d.%d.%d\n' % Gtk.pygtk_version) except ImportError: f.write('gtk=no\n') f.write('gtkver=no\n')