# Copyright 2006-2007 Nanorex, Inc. See LICENSE file for details. """ PropMgrBaseClass.py @author: Mark @version: $Id$ @copyright: 2006-2007 Nanorex, Inc. All rights reserved. History: mark 2007-05-20: Split PropMgrBaseClass out of PropertyManagerMixin into this file. mark 2007-05-23: New PropMgrBaseClass with support for the following PropMgr widget classes: - PropMgrGroupBox (subclass of Qt's QGroupBox widget) - PropMgrComboBox (subclass of Qt's QComboBox widget) - PropMgrDoubleSpinBox (subclass of Qt's QDoubleSpinBox widget) - PropMgrSpinBox (subclass of Qt's QSpinBox widget) - PropMgrTextEdit (subclass of Qt's QTextEdit widget) mark 2007-05-25: Added PropMgrPushButton mark 2007-05-28: Added PropMgrLineEdit, PropMgrCheckBox and PropMgrListWidget ninad 2007-06-03: Added PropMgrToolButton ninad 2007-06-05: Added PropMgrRadioButton bruce 2007-06-15: partly cleaned up inheritance. """ __author__ = "Mark" # Mark's To Do List (by order of priority): updated 2007-06-21 # - Add new "parentPropMgr" attr for all widget classes. (important) # - Support horizontal resizing using splitter (A9.1 backlog item) # - Finish support for Restore Defaults: # - PropMgrComboBox.setItems() and PropMgrComboBox.setCurrentIndex() # - PropMgrComboBox.setText() # - Add color theme user pref in Preferences dialog. (minor) # - Set title button color via style sheet (see getTitleButtonStyleSheet) # - "range" attr (str) that can be included in What's This text. (minor) # - override setObjectName() in PropMgrWidgetMixin class to create # standard names. # - Add important PropMgr widget classes: # - PropMgrMMKit (needed by BuildAtomsPropertyManager, a future PropMgr) # - PropMgrColorChooser # - PropMgrLabel # - PropMgrGroupAction (needed by PlanePropertyManager) import os from PyQt4 import QtCore from PyQt4.Qt import Qt from PyQt4.Qt import QGroupBox from PyQt4.Qt import QTextEdit from PyQt4.Qt import QDoubleSpinBox from PyQt4.Qt import QSpinBox from PyQt4.Qt import QComboBox from PyQt4.Qt import QPushButton from PyQt4.Qt import QLineEdit from PyQt4.Qt import QCheckBox from PyQt4.Qt import QListWidget from PyQt4.Qt import QToolButton from PyQt4.Qt import QPalette from PyQt4.Qt import QFrame from PyQt4.Qt import QHBoxLayout from PyQt4.Qt import QSpacerItem from PyQt4.Qt import QLabel from PyQt4.Qt import QWidget from PyQt4.Qt import QVBoxLayout from PyQt4.Qt import QGridLayout from PyQt4.Qt import SIGNAL from PyQt4.Qt import QTextOption from PyQt4.Qt import QSizePolicy from PyQt4.Qt import QSize from PyQt4.Qt import QRadioButton from PyQt4.Qt import QTextCursor from utilities import debug_flags from utilities.icon_utilities import geticon, getpixmap from utilities.debug import print_compact_traceback from PM.PropMgr_Constants import pmColor from PM.PropMgr_Constants import pmTitleFrameColor from PM.PropMgr_Constants import pmTitleLabelColor from PM.PropMgr_Constants import pmMinWidth from PM.PropMgr_Constants import pmDefaultWidth from PM.PropMgr_Constants import pmLabelRightAlignment from PM.PropMgr_Constants import pmLabelLeftAlignment from PM.PropMgr_Constants import pmMainVboxLayoutMargin from PM.PropMgr_Constants import pmMainVboxLayoutSpacing from PM.PropMgr_Constants import pmHeaderFrameMargin from PM.PropMgr_Constants import pmHeaderFrameSpacing from PM.PropMgr_Constants import getHeaderFont from PM.PropMgr_Constants import pmSponsorFrameMargin from PM.PropMgr_Constants import pmSponsorFrameSpacing from PM.PropMgr_Constants import pmTopRowBtnsMargin from PM.PropMgr_Constants import pmTopRowBtnsSpacing from PM.PropMgr_Constants import pmGroupBoxSpacing from PM.PropMgr_Constants import pmGrpBoxVboxLayoutMargin from PM.PropMgr_Constants import pmGrpBoxVboxLayoutSpacing from PM.PropMgr_Constants import pmGridLayoutMargin from PM.PropMgr_Constants import pmGridLayoutSpacing from PM.PropMgr_Constants import pmGrpBoxButtonColor from PM.PropMgr_Constants import pmGrpBoxButtonBorderColor from PM.PropMgr_Constants import pmGrpBoxButtonTextColor from PM.PropMgr_Constants import pmGrpBoxExpandedImage from PM.PropMgr_Constants import pmGrpBoxCollapsedImage from PM.PropMgr_Constants import pmGrpBoxGridLayoutMargin from PM.PropMgr_Constants import pmGrpBoxGridLayoutSpacing from PM.PropMgr_Constants import pmGrpBoxColor from PM.PropMgr_Constants import pmGrpBoxBorderColor from PM.PropMgr_Constants import pmMsgGrpBoxMargin from PM.PropMgr_Constants import pmMsgGrpBoxSpacing from PM.PropMgr_Constants import pmMessageTextEditColor from PM.PropMgr_Constants import pmDoneButton from PM.PropMgr_Constants import pmCancelButton from PM.PropMgr_Constants import pmRestoreDefaultsButton from PM.PropMgr_Constants import pmPreviewButton from PM.PropMgr_Constants import pmWhatsThisButton # Special Qt debugging functions written by Mark. 2007-05-24 ############ def getSizePolicyName(sizepolicy): """Returns the formal name of , a QSizePolicy. FYI: QSizePolicy.GrowFlag = 1 QSizePolicy.ExpandFlag = 2 QSizePolicy.ShrinkFlag = 4 QSizePolicy.IgnoreFlag = 8 """ assert isinstance(sizepolicy, QSizePolicy) if sizepolicy == QSizePolicy.Fixed: name = "SizePolicy.Fixed" if sizepolicy == QSizePolicy.GrowFlag: name = "SizePolicy.Minimum" if sizepolicy == QSizePolicy.ShrinkFlag: name = "SizePolicy.Maximum" if sizepolicy == (QSizePolicy.GrowFlag | QSizePolicy.ShrinkFlag): name = "SizePolicy.Preferred" if sizepolicy == (QSizePolicy.GrowFlag | QSizePolicy.ShrinkFlag |QSizePolicy.ExpandFlag): name = "SizePolicy.Expanding" if sizepolicy == (QSizePolicy.GrowFlag | QSizePolicy.ExpandFlag): name = "SizePolicy.MinimumExpanding" if sizepolicy == (QSizePolicy.ShrinkFlag | QSizePolicy.GrowFlag | QSizePolicy.IgnoreFlag): name = "SizePolicy.Ignored" return name def printSizePolicy(widget): """Special method for debugging Qt sizePolicies. Prints the horizontal and vertical policy of . """ sizePolicy = widget.sizePolicy() print "-----------------------------------" print "Widget name =", widget.objectName() print "Horizontal SizePolicy =", getSizePolicyName(sizePolicy.horizontalPolicy()) print "Vertical SizePolicy =", getSizePolicyName(sizePolicy.verticalPolicy() ) def printSizeHints(widget): """Special method for debugging Qt size hints. Prints the minimumSizeHint (width and height) and the sizeHint (width and height) of . """ print "-----------------------------------" print "Widget name =", widget.objectName() print "Current Width, Height =", widget.width(), widget.height() minSize = widget.minimumSizeHint() print "Min Width, Height =", minSize.width(), minSize.height() sizeHint = widget.sizeHint() print "SizeHint Width, Height =", sizeHint.width(), sizeHint.height() # PropMgr helper functions ########################################## def getPalette(palette, obj, color): """ Given a palette, Qt object and a color, return a new palette. If palette is None, create and return a new palette. """ if palette: pass # Make sure palette is QPalette. else: palette = QPalette() palette.setColor(QPalette.Active, obj, color) palette.setColor(QPalette.Inactive, obj, color) palette.setColor(QPalette.Disabled, obj, color) return palette def getWidgetGridLayoutParms(label, row, spanWidth): """PropMgr widget GridLayout helper function. Given