def __init__(self, template, character, parent=None): super(MeritWidget, self).__init__(template, character, parent) self.__layout = QVBoxLayout() self.setLayout( self.__layout ) self.__toolBox = QToolBox() ## Die Auflistung der Merits soll auch unter Windows einen transparenten Hintergrund haben. self.__toolBox.setObjectName("transparentWidget") ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen. if os.name == "nt": self.__toolBox.setStyleSheet( "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }" ) self.__layout.addWidget(self.__toolBox) self.__typ = "Merit" categories = [] categories.extend(Config.CATEGORIES_MERITS) categories.extend(self._storage.categories(self.__typ)) # Duplikate werden entfernt. Dadurch wird die in der Config-Klasse vorgegebene Reihenfolge eingehalten und zusätzliche, dort nicht erwähnte Kategorien werden hinterher angehängt. categories = ListTools.uniqify_ordered(categories) # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien self.__categoryIndex = {} # Merits werden in einer Spalte heruntergeschrieben, aber mit vertikalem Platz dazwischen. for item in categories: # Für jede Kategorie wird ein eigener Abschnitt erzeugt. widgetMeritCategory = QWidget() ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets. widgetMeritCategory.setObjectName("transparentWidget") layoutMeritCategory = QVBoxLayout() widgetMeritCategory.setLayout( layoutMeritCategory ) self.__toolBox.addItem( widgetMeritCategory, item ) self.__categoryIndex[item] = self.__toolBox.count() - 1 #Debug.debug(self.__categoryIndex) __list = list( self._character.traits[self.__typ][item].items() ) __list.sort() for merit in __list: #Debug.debug(merit) # Anlegen des Widgets, das diese Eigenschaft repräsentiert. traitWidget = CharaTrait( merit[1], self ) traitWidget.setSpecialtiesHidden(True) if not merit[1].custom: traitWidget.setDescriptionHidden(True) # Bei Merits sind nur bestimmte Werte erlaubt. #Debug.debug(self._storage.traits[self.__typ][item][merit[0]]) traitWidget.setPossibleValues(self._storage.traits[self.__typ][item][merit[1].identifier]["values"]) # Es werden nur Eigenschaften der richtigen Alters- und Zeit-Kategorie angezeigt. self.hideReasonChanged.connect(traitWidget.hideOrShowTrait) layoutMeritCategory.addWidget( traitWidget ) merit[1].valueChanged.connect(self.countMerits) #self._character.speciesChanged.connect(traitWidget.hideOrShowTrait_species) # Stretch einfügen, damit die Eigenschaften besser angeordnet sind. layoutMeritCategory.addStretch() self.setMinimumWidth(Config.TRAIT_WIDTH_MIN) self._character.speciesChanged.connect(self.countMerits)
def __init__(self, template, character, parent=None): super(AttributeWidget, self).__init__(template, character, parent) self.__layout = QVBoxLayout() self.setLayout( self.__layout ) self.__layoutAttributes = QGridLayout() self.__layout.addLayout( self.__layoutAttributes ) self.__labelPower = QLabel( "<b>" + self.tr( "Power" ) + "</b>" ) self.__labelPower.setAlignment( Qt.AlignRight ) self.__labelFinesse = QLabel( "<b>" + self.tr( "Finesse" ) + "</b>" ) self.__labelFinesse.setAlignment( Qt.AlignRight ) self.__labelResistance = QLabel( "<b>" + self.tr( "Resistance" ) + "</b>" ) self.__labelResistance.setAlignment( Qt.AlignRight ) actualRow = 1 actualColumn = 0 self.__layoutAttributes.addWidget( self.__labelPower, actualRow, actualColumn ) actualRow += 1 self.__layoutAttributes.addWidget( self.__labelFinesse, actualRow, actualColumn ) actualRow += 1 self.__layoutAttributes.addWidget( self.__labelResistance, actualRow, actualColumn ) self.__labelStr = QLabel( self ) self.__labelDex = QLabel( self ) self.__labelSta = QLabel( self ) self.__labelMan = QLabel( self ) #connect( self, SIGNAL( speciesChanged( bool ) ), labelStr, SLOT( setHidden( bool ) ) ) #connect( self, SIGNAL( speciesChanged( bool ) ), labelDex, SLOT( setHidden( bool ) ) ) #connect( self, SIGNAL( speciesChanged( bool ) ), labelSta, SLOT( setHidden( bool ) ) ) #connect( self, SIGNAL( speciesChanged( bool ) ), labelMan, SLOT( setHidden( bool ) ) ) for item in Config.ATTRIBUTES: #Debug.debug(self._character.traits) actualColumn += 1 vLine = QFrame( self ) vLine.setFrameStyle( QFrame.VLine) self.__layoutAttributes.addWidget( vLine, 1, actualColumn, len(item[1]), 1, Qt.AlignHCenter ) self.__layoutAttributes.setColumnStretch( actualColumn, 1 ) # Jetzt sind wir in der Spalte für die tatsächlchen Attribute actualColumn += 1 # Aber zuerst kommt die Überschrift für die einzelnen Kategorien. header = QLabel() header.setAlignment( Qt.AlignHCenter ) header.setText( "<b>" + item[0] + "</b>" ) self.__layoutAttributes.addWidget( header, 0, actualColumn ) # Einfügen der tatsächlichen Attribute i = 0 for subitem in item[1]: attrib = self._character.traits["Attribute"][item[0]][subitem] #Debug.debug(attrib) # Anlegen des Widgets, das diese Eigenschaft repräsentiert. traitWidget = CharaTrait( attrib, self ) traitWidget.setSpecialtiesHidden( True ) traitWidget.setDescriptionHidden( True ) # An welcher Position sitzt dieses Attribut in der Config.ATTRIBUTES-Liste? self.__layoutAttributes.addWidget( traitWidget, i + 1, actualColumn ) self.maxTraitChanged.connect(traitWidget.setMaximum) #if ( item == "Physical" ): #if ( attrib["name"] == "Strength" ): #self.__layoutAttributes.addWidget( self.__labelStr, j + 1, actualColumn + 1 ) #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesStr( int ) ) ) #} else if ( trait.name() == "Dexterity" ) { #layoutAttributes.addWidget( self.__labelDex, j + 1, actualColumn + 1 ) #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesDex( int ) ) ) #} else if ( trait.name() == "Stamina" ) { #layoutAttributes.addWidget( self.__labelSta, j + 1, actualColumn + 1 ) #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesSta( int ) ) ) #} else if ( trait.category() == cv_AbstractTrait::Social ) { #if ( self.__trait.name() == "Manipulation" ) { #layoutAttributes.addWidget( labelMan, j + 1, actualColumn + 1 ) #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesMan( int ) ) ) i += 1 # Bei Werwölfen erscheint hier Zusatztext. Und damit der Sparator richtig gesetzt wird, muß die aktuelle Spalte ein weitergezählt werden. actualColumn += 1 self.__layout.addSpacing( Config.SPACE_VERTICAL_STD ) self.__layoutBonus = QGridLayout() self.__layout.addLayout( self.__layoutBonus ) self.__labelBonus = QLabel( self ) self.__labelBonus.setText( self.tr( "Bonus Attribute:" ) ) self.__layoutButtonsBonus = QVBoxLayout() self.__buttonsBonus = QButtonGroup( self ) self.__layoutBonus.addWidget( self.__labelBonus, 0, 0, Qt.AlignTop | Qt.AlignLeft ) self.__layoutBonus.addLayout( self.__layoutButtonsBonus, 0, 1 ) #// layoutBonus.addItem(new QSpacerItem(0,0), 0, 2) self.__layoutBonus.addWidget( QWidget( self ), 0, 2 ) self.__layoutBonus.setColumnStretch( 2, 1 )
def __init__(self, template, character, parent=None): super(AttributeWidget, self).__init__(template, character, parent) self.__layout = QVBoxLayout() self.setLayout(self.__layout) self.__layoutAttributes = QGridLayout() self.__layout.addLayout(self.__layoutAttributes) self.__labelPower = QLabel("<b>" + self.tr("Power") + "</b>") self.__labelPower.setAlignment(Qt.AlignRight) self.__labelFinesse = QLabel("<b>" + self.tr("Finesse") + "</b>") self.__labelFinesse.setAlignment(Qt.AlignRight) self.__labelResistance = QLabel("<b>" + self.tr("Resistance") + "</b>") self.__labelResistance.setAlignment(Qt.AlignRight) actualRow = 1 actualColumn = 0 self.__layoutAttributes.addWidget(self.__labelPower, actualRow, actualColumn) actualRow += 1 self.__layoutAttributes.addWidget(self.__labelFinesse, actualRow, actualColumn) actualRow += 1 self.__layoutAttributes.addWidget(self.__labelResistance, actualRow, actualColumn) self.__labelStr = QLabel(self) self.__labelDex = QLabel(self) self.__labelSta = QLabel(self) self.__labelMan = QLabel(self) #connect( self, SIGNAL( speciesChanged( bool ) ), labelStr, SLOT( setHidden( bool ) ) ) #connect( self, SIGNAL( speciesChanged( bool ) ), labelDex, SLOT( setHidden( bool ) ) ) #connect( self, SIGNAL( speciesChanged( bool ) ), labelSta, SLOT( setHidden( bool ) ) ) #connect( self, SIGNAL( speciesChanged( bool ) ), labelMan, SLOT( setHidden( bool ) ) ) for item in Config.ATTRIBUTES: #Debug.debug(self._character.traits) actualColumn += 1 vLine = QFrame(self) vLine.setFrameStyle(QFrame.VLine) self.__layoutAttributes.addWidget(vLine, 1, actualColumn, len(item[1]), 1, Qt.AlignHCenter) self.__layoutAttributes.setColumnStretch(actualColumn, 1) # Jetzt sind wir in der Spalte für die tatsächlchen Attribute actualColumn += 1 # Aber zuerst kommt die Überschrift für die einzelnen Kategorien. header = QLabel() header.setAlignment(Qt.AlignHCenter) header.setText("<b>" + item[0] + "</b>") self.__layoutAttributes.addWidget(header, 0, actualColumn) # Einfügen der tatsächlichen Attribute i = 0 for subitem in item[1]: attrib = self._character.traits["Attribute"][item[0]][subitem] #Debug.debug(attrib) # Anlegen des Widgets, das diese Eigenschaft repräsentiert. traitWidget = CharaTrait(attrib, self) traitWidget.setSpecialtiesHidden(True) traitWidget.setDescriptionHidden(True) # An welcher Position sitzt dieses Attribut in der Config.ATTRIBUTES-Liste? self.__layoutAttributes.addWidget(traitWidget, i + 1, actualColumn) self.maxTraitChanged.connect(traitWidget.setMaximum) #if ( item == "Physical" ): #if ( attrib["name"] == "Strength" ): #self.__layoutAttributes.addWidget( self.__labelStr, j + 1, actualColumn + 1 ) #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesStr( int ) ) ) #} else if ( trait.name() == "Dexterity" ) { #layoutAttributes.addWidget( self.__labelDex, j + 1, actualColumn + 1 ) #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesDex( int ) ) ) #} else if ( trait.name() == "Stamina" ) { #layoutAttributes.addWidget( self.__labelSta, j + 1, actualColumn + 1 ) #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesSta( int ) ) ) #} else if ( trait.category() == cv_AbstractTrait::Social ) { #if ( self.__trait.name() == "Manipulation" ) { #layoutAttributes.addWidget( labelMan, j + 1, actualColumn + 1 ) #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesMan( int ) ) ) i += 1 # Bei Werwölfen erscheint hier Zusatztext. Und damit der Sparator richtig gesetzt wird, muß die aktuelle Spalte ein weitergezählt werden. actualColumn += 1 self.__layout.addSpacing(Config.SPACE_VERTICAL_STD) self.__layoutBonus = QGridLayout() self.__layout.addLayout(self.__layoutBonus) self.__labelBonus = QLabel(self) self.__labelBonus.setText(self.tr("Bonus Attribute:")) self.__layoutButtonsBonus = QVBoxLayout() self.__buttonsBonus = QButtonGroup(self) self.__layoutBonus.addWidget(self.__labelBonus, 0, 0, Qt.AlignTop | Qt.AlignLeft) self.__layoutBonus.addLayout(self.__layoutButtonsBonus, 0, 1) #// layoutBonus.addItem(new QSpacerItem(0,0), 0, 2) self.__layoutBonus.addWidget(QWidget(self), 0, 2) self.__layoutBonus.setColumnStretch(2, 1)
def __init__(self, template, character, parent=None): super(MeritWidget, self).__init__(template, character, parent) self.__layout = QVBoxLayout() self.setLayout(self.__layout) self.__toolBox = QToolBox() ## Die Auflistung der Merits soll auch unter Windows einen transparenten Hintergrund haben. self.__toolBox.setObjectName("transparentWidget") ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen. if os.name == "nt": self.__toolBox.setStyleSheet( "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }" ) self.__layout.addWidget(self.__toolBox) self.__typ = "Merit" categories = [] categories.extend(Config.CATEGORIES_MERITS) categories.extend(self._storage.categories(self.__typ)) # Duplikate werden entfernt. Dadurch wird die in der Config-Klasse vorgegebene Reihenfolge eingehalten und zusätzliche, dort nicht erwähnte Kategorien werden hinterher angehängt. categories = ListTools.uniqify_ordered(categories) # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien self.__categoryIndex = {} # Merits werden in einer Spalte heruntergeschrieben, aber mit vertikalem Platz dazwischen. for item in categories: # Für jede Kategorie wird ein eigener Abschnitt erzeugt. widgetMeritCategory = QWidget() ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets. widgetMeritCategory.setObjectName("transparentWidget") layoutMeritCategory = QVBoxLayout() widgetMeritCategory.setLayout(layoutMeritCategory) self.__toolBox.addItem(widgetMeritCategory, item) self.__categoryIndex[item] = self.__toolBox.count() - 1 #Debug.debug(self.__categoryIndex) __list = list(self._character.traits[self.__typ][item].items()) __list.sort() for merit in __list: #Debug.debug(merit) # Anlegen des Widgets, das diese Eigenschaft repräsentiert. traitWidget = CharaTrait(merit[1], self) traitWidget.setSpecialtiesHidden(True) if not merit[1].custom: traitWidget.setDescriptionHidden(True) # Bei Merits sind nur bestimmte Werte erlaubt. #Debug.debug(self._storage.traits[self.__typ][item][merit[0]]) traitWidget.setPossibleValues(self._storage.traits[ self.__typ][item][merit[1].identifier]["values"]) # Es werden nur Eigenschaften der richtigen Alters- und Zeit-Kategorie angezeigt. self.hideReasonChanged.connect(traitWidget.hideOrShowTrait) layoutMeritCategory.addWidget(traitWidget) merit[1].valueChanged.connect(self.countMerits) #self._character.speciesChanged.connect(traitWidget.hideOrShowTrait_species) # Stretch einfügen, damit die Eigenschaften besser angeordnet sind. layoutMeritCategory.addStretch() self.setMinimumWidth(Config.TRAIT_WIDTH_MIN) self._character.speciesChanged.connect(self.countMerits)