From b487189742c8f8ca81e6b64502bca2ab47a2d699 Mon Sep 17 00:00:00 2001 From: hsoft Date: Tue, 15 Dec 2009 14:09:13 +0000 Subject: [PATCH] [#76 state:fixed] Added combobox painting for the selected item in Directories' State column. --HG-- extra : convert_revision : svn%3Ac306627e-7827-47d3-bdf0-9a457c9553a1/trunk%40256 --- base/qt/directories_model.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/base/qt/directories_model.py b/base/qt/directories_model.py index 277ea83a..492a783c 100644 --- a/base/qt/directories_model.py +++ b/base/qt/directories_model.py @@ -10,7 +10,8 @@ import urllib from PyQt4.QtCore import QModelIndex, Qt, QRect, QEvent, QPoint, QUrl -from PyQt4.QtGui import QComboBox, QStyledItemDelegate, QMouseEvent, QApplication, QBrush +from PyQt4.QtGui import (QComboBox, QStyledItemDelegate, QMouseEvent, QApplication, QBrush, QStyle, + QStyleOptionComboBox, QStyleOptionViewItemV4) from qtlib.tree_model import TreeNode, TreeModel @@ -23,6 +24,24 @@ class DirectoriesDelegate(QStyledItemDelegate): editor.addItems(STATES) return editor + def paint(self, painter, option, index): + self.initStyleOption(option, index) + # No idea why, but this cast is required if we want to have access to the V4 valuess + option = QStyleOptionViewItemV4(option) + if (index.column() == 1) and (option.state & QStyle.State_Selected): + cboption = QStyleOptionComboBox() + cboption.rect = option.rect + # On OS X (with Qt4.6.0), adding State_Enabled to the flags causes the whole drawing to + # fail (draw nothing), but it's an OS X only glitch. On Windows, it works alright. + cboption.state |= QStyle.State_Enabled + QApplication.style().drawComplexControl(QStyle.CC_ComboBox, cboption, painter) + painter.setBrush(option.palette.text()) + rect = QRect(option.rect) + rect.setLeft(rect.left()+4) + painter.drawText(rect, Qt.AlignLeft, option.text) + else: + QStyledItemDelegate.paint(self, painter, option, index) + def setEditorData(self, editor, index): value = index.model().data(index, Qt.EditRole) editor.setCurrentIndex(value);