コード例 #1
0
    def __init__(self, template, character, parent=None):
        super(SkillWidget, self).__init__(template, character, parent)

        self.__layout = QVBoxLayout()
        self.setLayout(self.__layout)

        self.__scrollArea = QScrollArea()
        ## Die Auflistung der Fertigkeiten soll auch unter Windows einen transparenten Hintergrund haben.
        self.__scrollArea.setObjectName("transparentWidget")
        ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
        if os.name == "nt":
            self.__scrollArea.setStyleSheet(
                "QWidget#transparentWidget { background: transparent; }")
        self.__layout.addWidget(self.__scrollArea)

        self.__scrollLayout = QVBoxLayout()

        self.__scrollWidget = QWidget()
        ## Die Auflistung der Fertigkeiten soll auch unter Windows einen transparenten Hintergrund haben. Indem ich den selben Namen wie zuvor vergebe, wirkt auch das Stylsheet auf dieses Widget.
        self.__scrollWidget.setObjectName("transparentWidget")
        #self.__scrollWidget.setStyleSheet( "QWidget#transparentWidget { background-color:transparent; }" )
        #scrollWidget.setMinimumSize(this.width(), 400);
        self.__scrollWidget.setLayout(self.__scrollLayout)

        typ = "Skill"

        ## Eine Liste, in der alle Eigenschafts-Widgets aufgelistet werden.
        self.__traitWidgets = []

        for item in Config.CATEGORIES_MAIN:
            #Debug.debug(self._character.traits)

            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetSkillCategory = QGroupBox()
            widgetSkillCategory.setTitle(item)
            widgetSkillCategory.setFlat(True)

            layoutSkillCategory = QVBoxLayout()
            widgetSkillCategory.setLayout(layoutSkillCategory)

            self.__scrollLayout.addWidget(widgetSkillCategory)

            __list = list(self._character.traits[typ][item].items())
            __list.sort()
            for skill in __list:
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = CharaTrait(skill[1], self)
                traitWidget.buttonText = 0
                traitWidget.setDescriptionHidden(True)
                traitWidget.enableButton(
                    0
                )  # Zu Beginn sollen die Spezailisierungen nicht enabled sein.

                # Dieses Widget auch an Liste anhängen, damit ich einfacher darauf zugreifen kann.
                traitListItem = traitWidget
                self.__traitWidgets.append(traitListItem)

                # Es werden nur Fertigkeiten der richtigen Alters- und Zeit-Kategorie angezeigt.
                self.hideReasonChanged.connect(traitWidget.hideOrShowTrait)
                # Fertigkeiten haben Spezialisierungen.
                traitWidget.specialtiesClicked.connect(
                    self.uncheckOtherButtons)
                traitWidget.specialtiesClicked.connect(
                    self.specialtiesActivated.emit)
                ## Wenn sich die Spezialisierungen ändern, sollen die veränderten Spezialisierungen auch angezeigt werden. Das wird so gelöst, als wäre der Knopf für die Spezialisierungen erneut gedrückt worden.
                #skill.specialtiesChanged.connect(self.emitSpecialtiesActivated)

                layoutSkillCategory.addWidget(traitWidget)

                self.maxTraitChanged.connect(traitWidget.setMaximum)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            self.__scrollLayout.addStretch()

        self.__scrollArea.setWidget(self.__scrollWidget)
        self.__scrollArea.setWidgetResizable(True)
        self.__scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.__scrollArea.setMinimumWidth(
            self.__scrollArea.viewport().minimumWidth())
コード例 #2
0
    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)
コード例 #3
0
    def __init__(self,
                 template,
                 character,
                 typ,
                 isCheckable=False,
                 parent=None):
        super(CategoryWidget, self).__init__(parent)

        self.__storage = template
        self.__character = character

        self._layout = QVBoxLayout()
        self.setLayout(self._layout)

        self._toolBox = QToolBox()
        ## Die Auflistung der Widgets 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 = typ
        categories = self.__storage.categories(self._typ)

        # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
        # {
        # 	Index: [Widget, Eigenschaft1, Eigenschaft2, ...]
        # }
        self._toolBoxPageList = {}

        for item in categories:
            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetCategory = QWidget()
            ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
            widgetCategory.setObjectName("transparentWidget")

            layoutCategory = QVBoxLayout()

            widgetCategory.setLayout(layoutCategory)

            ## In dieser Liste sammle ich die Widgets, damit sie später bei Bedarf in die ToolBox eingefügt werden können.
            self._toolBoxPageList[item] = [widgetCategory]

            __list = list(self.__character.traits[self._typ][item].items())
            __list.sort()
            for trait in __list:
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = None
                if isCheckable:
                    traitWidget = CheckTrait(trait[1], self)
                else:
                    traitWidget = CharaTrait(trait[1], self)
                    traitWidget.setSpecialtiesHidden(True)
                if type(trait) != StandardTrait or not trait[1].custom:
                    traitWidget.setDescriptionHidden(True)

                self._toolBoxPageList[item].append(trait[1])

                layoutCategory.addWidget(traitWidget)

                self.__character.traitVisibleReasonChanged.connect(
                    traitWidget.hideOrShowTrait)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            layoutCategory.addStretch()
        #Debug.debug(self._toolBoxPageList)
        self.__character.speciesChanged.connect(self.hideOrShowToolPage)
        self.__character.breedChanged.connect(self.hideOrShowToolPage)
        self.__character.factionChanged.connect(self.hideOrShowToolPage)
コード例 #4
0
    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)