From 394ffee4145448a0bf7f39aa3c6df06f3a979b5b Mon Sep 17 00:00:00 2001 From: David Aguilar Date: Sun, 9 Dec 2007 14:26:43 -0800 Subject: [PATCH] qobserver subclasses do not need to import SIGNAL - Updated qobserver to override connect() and so that subclasses can pass in the signal string only and thus do not have to import QtCore.SIGNAL. Passing in a QtCore.SIGNAL is still supported. Signed-off by: David Aguilar --- py/controllers.py | 7 +++---- py/qobserver.py | 15 ++++++++++++--- py/repobrowsercontroller.py | 3 +-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/py/controllers.py b/py/controllers.py index 8701ae9..dc1cef4 100644 --- a/py/controllers.py +++ b/py/controllers.py @@ -1,6 +1,5 @@ import os import commands -from PyQt4.QtCore import SIGNAL from PyQt4.QtGui import QDialog from PyQt4.QtGui import QMessageBox from qobserver import QObserver @@ -70,11 +69,11 @@ class GitController (QObserver): # These are vanilla signal/slots since the qobserver # signal routing is already handling these lists' signals. self.connect ( view.unstagedList, - SIGNAL ('itemDoubleClicked(QListWidgetItem*)'), + 'itemDoubleClicked(QListWidgetItem*)', lambda (x): self.cb_stage_selected (model) ) self.connect ( view.stagedList, - SIGNAL ('itemDoubleClicked(QListWidgetItem*)'), + 'itemDoubleClicked(QListWidgetItem*)', lambda (x): self.cb_unstage_selected (model) ) # These callbacks are called in response to the signals @@ -498,7 +497,7 @@ class GitController (QObserver): browser = GitCommitBrowser (self.view) self.connect ( browser.commitList, - SIGNAL ('itemSelectionChanged()'), + 'itemSelectionChanged()', lambda: self.cb_commit_sha1_selected( browser, revs) ) diff --git a/py/qobserver.py b/py/qobserver.py index 43c1f31..753f2f9 100644 --- a/py/qobserver.py +++ b/py/qobserver.py @@ -1,5 +1,6 @@ #!/usr/bin/env python -from PyQt4.QtCore import QObject, SIGNAL +from PyQt4.QtCore import QObject +from PyQt4.QtCore import SIGNAL from PyQt4.QtGui import QSpinBox, QPixmap, QTextEdit from observer import Observer @@ -18,6 +19,14 @@ class QObserver (Observer, QObject): self.__model_to_view = {} self.__view_to_model = {} + def connect (self, obj, signal_str, *args): + '''Convenience function so that subclasses do not have + to import QtCore.SIGNAL.''' + signal = signal_str + if type (signal) is str: + signal = SIGNAL (signal) + return QObject.connect ( obj, signal, *args) + def SLOT (self, *args): '''Default slot to handle all Qt callbacks. This method delegates to callbacks from add_signals.''' @@ -39,10 +48,10 @@ class QObserver (Observer, QObject): else: print "SLOT(): Unknown widget:", sender, widget - def add_signals (self, signal, *objects): + def add_signals (self, signal_str, *objects): '''Connects object's signal to the QObserver.''' for obj in objects: - QObject.connect (obj, SIGNAL (signal), self.SLOT) + self.connect (obj, signal_str, self.SLOT) def add_callbacks (self, model, callbacks): '''Registers callbacks that are called in response to GUI events.''' diff --git a/py/repobrowsercontroller.py b/py/repobrowsercontroller.py index e381c25..ac352ce 100644 --- a/py/repobrowsercontroller.py +++ b/py/repobrowsercontroller.py @@ -1,6 +1,5 @@ #!/usr/bin/env python import os -from PyQt4.QtCore import SIGNAL from PyQt4.QtGui import QFileDialog from qobserver import QObserver import cmds @@ -27,7 +26,7 @@ class GitRepoBrowserController (QObserver): }) self.connect (view.commitList, - SIGNAL ('itemDoubleClicked(QListWidgetItem*)'), + 'itemDoubleClicked(QListWidgetItem*)', lambda(x): self.cb_item_double_clicked (model)) # Collect data for the model -- 2.11.4.GIT