From 2c6eed28c67d737e8da9877ee95e71825c6ff377 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 18 Feb 2009 22:01:54 +0100 Subject: converted the basic structure to gtkbuilder --- portato/gui/windows/basic.py | 45 ++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) (limited to 'portato/gui/windows/basic.py') diff --git a/portato/gui/windows/basic.py b/portato/gui/windows/basic.py index 1117e5e..330f823 100644 --- a/portato/gui/windows/basic.py +++ b/portato/gui/windows/basic.py @@ -14,7 +14,6 @@ from __future__ import absolute_import # gtk stuff import gtk -import gtk.glade import gobject from functools import wraps @@ -23,9 +22,6 @@ import os.path from ...constants import TEMPLATE_DIR, APP, LOCALE_DIR from ...helper import error -gtk.glade.bindtextdomain (APP, LOCALE_DIR) -gtk.glade.textdomain (APP) - class WrappedTree (object): __slots__ = ("klass", "tree", "get_widget") def __init__ (self, klass, tree): @@ -39,25 +35,35 @@ class WrappedTree (object): return getattr(self.tree, name) def get_widget(self, name): - w = self.tree.get_widget(name) + w = self.tree.get_object(name) if w is None: error("Widget '%s' could not be found in class '%s'.", name, self.klass) return w -class Window (object): +class UIBuilder (object): + + def __init__ (self, connector = None): + if not hasattr(self, "__file__"): + self.__file__ = self.__class__.__name__ + + self._builder = gtk.Builder() + self._builder.add_from_file(os.path.join(TEMPLATE_DIR, self.__file__+".ui")) + self._builder.set_translation_domain(APP) + + if connector is None: connector = self + + self._builder.connect_signals(connector) + + self.tree = WrappedTree(self.__class__.__name__, self._builder) + +class Window (UIBuilder): def __init__ (self): - if not hasattr(self, "__tree__"): - self.__tree__ = self.__class__.__name__ + UIBuilder.__init__(self) if not hasattr(self, "__window__"): self.__window__ = self.__class__.__name__ - if not hasattr(self, "__file__"): - self.__file__ = self.__class__.__name__ - - self.tree = self.get_tree(self.__tree__) - self.tree.signal_autoconnect(self) self.window = self.tree.get_widget(self.__window__) @staticmethod @@ -82,9 +88,6 @@ class Window (object): return wrapper - def get_tree (self, name): - return WrappedTree(self.__class__.__name__, gtk.glade.XML(os.path.join(TEMPLATE_DIR, self.__file__+".glade"), name)) - class AbstractDialog (Window): """A class all our dialogs get derived from. It sets useful default vars and automatically handles the ESC-Button.""" @@ -115,11 +118,13 @@ class AbstractDialog (Window): def close (self, *args): self.window.destroy() -class Popup (object): +class Popup (UIBuilder): + + __file__ = "popups" + + def __init__ (self, name, parent): - def __init__ (self, name, parent, file = "popups"): - self.tree = WrappedTree(self.__class__.__name__, gtk.glade.XML(os.path.join(TEMPLATE_DIR, file+".glade"), root = name)) - self.tree.signal_autoconnect(parent) + UIBuilder.__init__(self, connector = parent) self._popup = self.tree.get_widget(name) def popup (self, *args): -- cgit v1.2.3-54-g00ecf From 1644d262d2c577b1592a60914ec034a1e91171b7 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 18 Feb 2009 22:42:10 +0100 Subject: Add dummy signal handlers for PackageTable -- and so also the error output for not connected signals --- portato/gui/windows/basic.py | 6 +++++- portato/gui/windows/main.py | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'portato/gui/windows/basic.py') diff --git a/portato/gui/windows/basic.py b/portato/gui/windows/basic.py index 330f823..9d1b9ed 100644 --- a/portato/gui/windows/basic.py +++ b/portato/gui/windows/basic.py @@ -52,7 +52,11 @@ class UIBuilder (object): if connector is None: connector = self - self._builder.connect_signals(connector) + unconnected = self._builder.connect_signals(connector) + + if unconnected is not None: + for uc in set(unconnected): + error("Signal '%s' not connected in class '%s'.", uc, self.__class__.__name__) self.tree = WrappedTree(self.__class__.__name__, self._builder) diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index 33a5ee4..b7a5802 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -62,7 +62,6 @@ class PackageTable: self.main = main self.tree = main.tree self.window = main.window - self.main._builder.connect_signals(self) # all the package data is in this one VB self.vb = self.tree.get_widget("packageVB") @@ -1834,6 +1833,18 @@ class MainWindow (Window): else: self.window.iconify() + def cb_testing_toggled (self, *args): + return self.packageTable.cb_testing_toggled(*args) + def cb_masked_toggled (self, *args): + return self.packageTable.cb_masked_toggled(*args) + def cb_button_pressed (self, *args): + return self.packageTable.cb_button_pressed(*args) + def cb_package_revert_clicked (self, *args): + return self.packageTable.cb_package_revert_clicked(*args) + def cb_package_unmerge_clicked (self, *args): + return self.packageTable.cb_package_unmerge_clicked(*args) + def cb_package_emerge_clicked (self, *args): + return self.packageTable.cb_package_emerge_clicked(*args) def cb_use_flag_toggled (self, *args): return self.packageTable.cb_use_flag_toggled(*args) -- cgit v1.2.3-54-g00ecf From 7bf178f343c212aefbba88b74bc0e68e8b87b318 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 18 Feb 2009 22:44:34 +0100 Subject: Remove the 'Popup' class --- portato/gui/windows/basic.py | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'portato/gui/windows/basic.py') diff --git a/portato/gui/windows/basic.py b/portato/gui/windows/basic.py index 9d1b9ed..d7c7940 100644 --- a/portato/gui/windows/basic.py +++ b/portato/gui/windows/basic.py @@ -121,15 +121,3 @@ class AbstractDialog (Window): def close (self, *args): self.window.destroy() - -class Popup (UIBuilder): - - __file__ = "popups" - - def __init__ (self, name, parent): - - UIBuilder.__init__(self, connector = parent) - self._popup = self.tree.get_widget(name) - - def popup (self, *args): - self._popup.popup(*args) -- cgit v1.2.3-54-g00ecf From 6f740cbb6b651dfa73ed6c0e0e2cf4176310e3c8 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 18 Feb 2009 22:51:55 +0100 Subject: Add 'get_ui()' method for convenience --- portato/gui/windows/basic.py | 15 ++++++++++++++- portato/gui/windows/main.py | 8 ++++---- 2 files changed, 18 insertions(+), 5 deletions(-) (limited to 'portato/gui/windows/basic.py') diff --git a/portato/gui/windows/basic.py b/portato/gui/windows/basic.py index d7c7940..a4f8236 100644 --- a/portato/gui/windows/basic.py +++ b/portato/gui/windows/basic.py @@ -23,7 +23,7 @@ from ...constants import TEMPLATE_DIR, APP, LOCALE_DIR from ...helper import error class WrappedTree (object): - __slots__ = ("klass", "tree", "get_widget") + __slots__ = ("klass", "tree", "get_widget", "get_ui") def __init__ (self, klass, tree): self.tree = tree self.klass = klass @@ -40,6 +40,19 @@ class WrappedTree (object): error("Widget '%s' could not be found in class '%s'.", name, self.klass) return w + def get_ui (self, name, ui = "uimanager"): + uiw = self.get_widget(ui) + if uiw is None: + return None + + if not name.startswith("ui/"): + name = "ui/%s" % name + + w = uiw.get_widget(name) + if w is None: + error("UIItem '%s' of UIManager '%s' could not be found in class '%s'.", name, ui, self.klass) + return w + class UIBuilder (object): def __init__ (self, connector = None): diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py index eb4f7b3..437d305 100644 --- a/portato/gui/windows/main.py +++ b/portato/gui/windows/main.py @@ -479,8 +479,8 @@ class MainWindow (Window): plugin.load_plugins() menus = [p.menus for p in plugin.get_plugin_queue().get_plugins()] - #if menus: - # pluginMenu = self.tree.get_widget("pluginMenu") + # if menus: + # pluginMenu = self.tree.get_ui("pluginMenu") # for m in itt.chain(*menus): # item = gtk.MenuItem(m.label) @@ -552,8 +552,8 @@ class MainWindow (Window): self.packageTable = PackageTable(self) # popups - self.consolePopup = self.tree.get_widget("uimanager").get_widget("ui/consolePopup") - self.trayPopup = self.tree.get_widget("uimanager").get_widget("ui/systrayPopup") + self.consolePopup = self.tree.get_ui("consolePopup") + self.trayPopup = self.tree.get_ui("systrayPopup") # pause menu items self.emergePaused = False -- cgit v1.2.3-54-g00ecf From df87ac431080518039d1fb3943b06ec80677c2b7 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Thu, 19 Feb 2009 00:34:17 +0100 Subject: Make translation work correctly --- portato/gui/windows/basic.py | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'portato/gui/windows/basic.py') diff --git a/portato/gui/windows/basic.py b/portato/gui/windows/basic.py index a4f8236..f631376 100644 --- a/portato/gui/windows/basic.py +++ b/portato/gui/windows/basic.py @@ -22,6 +22,16 @@ import os.path from ...constants import TEMPLATE_DIR, APP, LOCALE_DIR from ...helper import error +# for the GtkBuilder to translate correctly :) +import ctypes +try: + getlib = ctypes.cdll.LoadLibrary("libgettextlib.s") +except OSError: + error("'libgettextlib.so' cannot be loaded. Might be, that there are no translations available in the GUI.") +else: + getlib.textdomain(APP) + getlib.bindtextdomain(APP, LOCALE_DIR) + class WrappedTree (object): __slots__ = ("klass", "tree", "get_widget", "get_ui") def __init__ (self, klass, tree): -- cgit v1.2.3-54-g00ecf From 49b36ab957a53cea103fe63e117c3fe244485eaa Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Thu, 19 Feb 2009 23:31:03 +0100 Subject: Fix gettext library name --- portato/gui/windows/basic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'portato/gui/windows/basic.py') diff --git a/portato/gui/windows/basic.py b/portato/gui/windows/basic.py index f631376..b3f210c 100644 --- a/portato/gui/windows/basic.py +++ b/portato/gui/windows/basic.py @@ -25,7 +25,7 @@ from ...helper import error # for the GtkBuilder to translate correctly :) import ctypes try: - getlib = ctypes.cdll.LoadLibrary("libgettextlib.s") + getlib = ctypes.cdll.LoadLibrary("libgettextlib.so") except OSError: error("'libgettextlib.so' cannot be loaded. Might be, that there are no translations available in the GUI.") else: -- cgit v1.2.3-54-g00ecf