X-Git-Url: http://git.maemo.org/git/?p=gc-dialer;a=blobdiff_plain;f=src%2Futil%2Fqui_utils.py;h=0d1fd6a7ef4de015986ef9af2c88fe4e7b2a1010;hp=27ce1ff911f1f03d60c948e21c08dbdcebf5b33b;hb=15b71884d9c5f1aca07719462ed0030b2d62684f;hpb=b55243f194af7c42ed08e7fe7d24b9fbec93b343 diff --git a/src/util/qui_utils.py b/src/util/qui_utils.py index 27ce1ff..0d1fd6a 100644 --- a/src/util/qui_utils.py +++ b/src/util/qui_utils.py @@ -3,8 +3,9 @@ import contextlib import datetime import logging -from PyQt4 import QtCore -from PyQt4 import QtGui +import qt_compat +QtCore = qt_compat.QtCore +QtGui = qt_compat.import_module("QtGui") import misc @@ -54,8 +55,8 @@ class ErrorMessage(object): class QErrorLog(QtCore.QObject): - messagePushed = QtCore.pyqtSignal() - messagePopped = QtCore.pyqtSignal() + messagePushed = qt_compat.Signal() + messagePopped = qt_compat.Signal() def __init__(self): QtCore.QObject.__init__(self) @@ -113,21 +114,7 @@ class ErrorDisplay(object): self._errorLog.messagePushed.connect(self._on_message_pushed) self._errorLog.messagePopped.connect(self._on_message_popped) - self._icons = { - ErrorMessage.LEVEL_BUSY: - get_theme_icon( - #("process-working", "view-refresh", "general_refresh", "gtk-refresh") - ("view-refresh", "general_refresh", "gtk-refresh", ) - ).pixmap(32, 32), - ErrorMessage.LEVEL_INFO: - get_theme_icon( - ("dialog-information", "general_notes", "gtk-info") - ).pixmap(32, 32), - ErrorMessage.LEVEL_ERROR: - get_theme_icon( - ("dialog-error", "app_install_error", "gtk-dialog-error") - ).pixmap(32, 32), - } + self._icons = None self._severityLabel = QtGui.QLabel() self._severityLabel.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) @@ -136,17 +123,11 @@ class ErrorDisplay(object): self._message.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self._message.setWordWrap(True) - closeIcon = get_theme_icon(("window-close", "general_close", "gtk-close"), self._SENTINEL_ICON) - if closeIcon is not self._SENTINEL_ICON: - self._closeLabel = QtGui.QPushButton(closeIcon, "") - else: - self._closeLabel = QtGui.QPushButton("X") - self._closeLabel.clicked.connect(self._on_close) + self._closeLabel = None self._controlLayout = QtGui.QHBoxLayout() self._controlLayout.addWidget(self._severityLabel, 1, QtCore.Qt.AlignCenter) self._controlLayout.addWidget(self._message, 1000) - self._controlLayout.addWidget(self._closeLabel, 1, QtCore.Qt.AlignCenter) self._widget = QtGui.QWidget() self._widget.setLayout(self._controlLayout) @@ -157,23 +138,47 @@ class ErrorDisplay(object): return self._widget def _show_error(self): + if self._icons is None: + self._icons = { + ErrorMessage.LEVEL_BUSY: + get_theme_icon( + #("process-working", "view-refresh", "general_refresh", "gtk-refresh") + ("view-refresh", "general_refresh", "gtk-refresh", ) + ).pixmap(32, 32), + ErrorMessage.LEVEL_INFO: + get_theme_icon( + ("dialog-information", "general_notes", "gtk-info") + ).pixmap(32, 32), + ErrorMessage.LEVEL_ERROR: + get_theme_icon( + ("dialog-error", "app_install_error", "gtk-dialog-error") + ).pixmap(32, 32), + } + if self._closeLabel is None: + closeIcon = get_theme_icon(("window-close", "general_close", "gtk-close"), self._SENTINEL_ICON) + if closeIcon is not self._SENTINEL_ICON: + self._closeLabel = QtGui.QPushButton(closeIcon, "") + else: + self._closeLabel = QtGui.QPushButton("X") + self._closeLabel.clicked.connect(self._on_close) + self._controlLayout.addWidget(self._closeLabel, 1, QtCore.Qt.AlignCenter) error = self._errorLog.peek_message() self._message.setText(error.message) self._severityLabel.setPixmap(self._icons[error.level]) self._widget.show() - @QtCore.pyqtSlot() - @QtCore.pyqtSlot(bool) + @qt_compat.Slot() + @qt_compat.Slot(bool) @misc.log_exception(_moduleLogger) def _on_close(self, checked = False): self._errorLog.pop() - @QtCore.pyqtSlot() + @qt_compat.Slot() @misc.log_exception(_moduleLogger) def _on_message_pushed(self): self._show_error() - @QtCore.pyqtSlot() + @qt_compat.Slot() @misc.log_exception(_moduleLogger) def _on_message_popped(self): if len(self._errorLog) == 0: @@ -231,9 +236,17 @@ class QHtmlDelegate(QtGui.QStyledItemDelegate): doc.documentLayout().draw(painter, ctx) painter.restore() - def setWidth(self, width): - # @bug we need to be emitting sizeHintChanged but it requires an index + def setWidth(self, width, model): + if self._width == width: + return self._width = width + for c in xrange(model.rowCount()): + cItem = model.item(c, 0) + for r in xrange(model.rowCount()): + rItem = cItem.child(r, 0) + rIndex = model.indexFromItem(rItem) + self.sizeHintChanged.emit(rIndex) + return def sizeHint(self, option, index): newOption = QtGui.QStyleOptionViewItemV4(option) @@ -252,24 +265,33 @@ class QHtmlDelegate(QtGui.QStyledItemDelegate): class QSignalingMainWindow(QtGui.QMainWindow): - closed = QtCore.pyqtSignal() - hidden = QtCore.pyqtSignal() - shown = QtCore.pyqtSignal() + closed = qt_compat.Signal() + hidden = qt_compat.Signal() + shown = qt_compat.Signal() + resized = qt_compat.Signal() def __init__(self, *args, **kwd): QtGui.QMainWindow.__init__(*((self, )+args), **kwd) def closeEvent(self, event): - QtGui.QMainWindow.closeEvent(self, event) + val = QtGui.QMainWindow.closeEvent(self, event) self.closed.emit() + return val def hideEvent(self, event): - QtGui.QMainWindow.hideEvent(self, event) + val = QtGui.QMainWindow.hideEvent(self, event) self.hidden.emit() + return val def showEvent(self, event): - QtGui.QMainWindow.showEvent(self, event) + val = QtGui.QMainWindow.showEvent(self, event) self.shown.emit() + return val + + def resizeEvent(self, event): + val = QtGui.QMainWindow.resizeEvent(self, event) + self.resized.emit() + return val def _null_set_stackable(window, isStackable):