示例#1
0
    def update(self):
        freieNeu = []
        for count in range(0,self.ffCount):
            fert = Fertigkeiten.FreieFertigkeit()
            fert.name = self.editFF[count].text()
            fert.wert = self.comboFF[count].currentIndex()+1
            freieNeu.append(fert)

        #Preserve the position of actual elements but remove any trailing empty elements
        #This is needed for ArrayEqual later to work as intended
        for frei in reversed(freieNeu):
            if frei.name == "":
                freieNeu.pop()
            else:
                break

        if not Hilfsmethoden.ArrayEqual(freieNeu, Wolke.Char.freieFertigkeiten):
            Wolke.Char.freieFertigkeiten = freieNeu
            self.modified.emit()
示例#2
0
    def addFreieFertigkeit(name, wert, overrideEmpty):
        if name == "":
            return

        char = Wolke.Char
        fert = Fertigkeiten.FreieFertigkeit()            
        fert.name = name
        fert.wert = wert

        found = False
        for ff in char.freieFertigkeiten:
            if fert.name == ff.name:
                ff.wert = min(ff.wert + fert.wert, 3)
                found = True
                break
        if not found:
            if len(char.freieFertigkeiten) == 28:
                return
            if overrideEmpty and fert.wert == 3 and len(char.freieFertigkeiten) > 0 and char.freieFertigkeiten[0].name == "":
                char.freieFertigkeiten[0] = fert
            else:
                char.freieFertigkeiten.append(fert)
示例#3
0
 def addUebernatuerlich(self):
     fer = Fertigkeiten.Fertigkeit()
     return self.editUebernatuerlich(fer)
示例#4
0
 def addFertigkeit(self):
     fer = Fertigkeiten.Fertigkeit()
     return self.editFertigkeit(fer)
示例#5
0
 def addVorteil(self):
     vor = Fertigkeiten.Vorteil()
     return self.editVorteil(vor)
示例#6
0
 def addTalent(self):
     tal = Fertigkeiten.Talent()
     return self.editTalent(tal)
示例#7
0
    def __init__(self, datenbank, vorteil=None, readonly=False):
        super().__init__()
        self.datenbank = datenbank
        if vorteil is None:
            vorteil = Fertigkeiten.Vorteil()
        self.vorteilPicked = vorteil
        self.nameValid = True
        self.readonly = readonly
        self.voraussetzungenValid = True
        vorteilDialog = QtWidgets.QDialog()
        self.ui = DatenbankEditVorteil.Ui_talentDialog()
        self.ui.setupUi(vorteilDialog)

        if not vorteil.isUserAdded:
            if readonly:
                self.ui.warning.setText(
                    "Gelöschte Elemente können nicht verändert werden.")
            self.ui.warning.setVisible(True)

        vorteilDialog.setWindowFlags(QtCore.Qt.Window
                                     | QtCore.Qt.CustomizeWindowHint
                                     | QtCore.Qt.WindowTitleHint
                                     | QtCore.Qt.WindowCloseButtonHint)

        self.ui.nameEdit.setText(vorteil.name)
        self.ui.nameEdit.textChanged.connect(self.nameChanged)
        self.nameChanged()
        self.ui.kostenEdit.setValue(vorteil.kosten)
        self.ui.comboNachkauf.setCurrentText(vorteil.nachkauf)
        self.ui.comboTyp.setCurrentIndex(vorteil.typ)

        self.ui.voraussetzungenEdit.setPlainText(
            Hilfsmethoden.VorArray2Str(vorteil.voraussetzungen, None))
        self.ui.voraussetzungenEdit.textChanged.connect(
            self.voraussetzungenTextChanged)

        self.ui.textEdit.setPlainText(vorteil.text)
        self.ui.checkVariable.setChecked(vorteil.variable != -1)

        self.ui.scriptPrioEdit.setValue(vorteil.scriptPrio)

        scriptPrioDoc = [
            "Die Skript-Priorität legt die Reihenfolge der Auswertung fest. 0 ist Standard, negative Werte werden davor,",
            "positive Werte danach ausgewertet. Dies ist relevant, falls bspw. die INI verdoppelt werden soll nachdem",
            "Kampfreflexe eingerechnet wurde. In diesem Fall sollte die Skript-Priorität höher als die von Kampfreflexe sein."
        ]

        self.ui.scriptPrioEdit.setToolTip("\n".join(scriptPrioDoc))

        self.ui.scriptEdit.setText(vorteil.script)

        self.ui.scriptEdit.setToolTip(
            "Siehe ScriptAPI.md im Installationsordner für verfügbare Funktionen und Beispiele."
        )

        vorteilDialog.show()
        ret = vorteilDialog.exec_()
        if ret == QtWidgets.QDialog.Accepted:
            self.vorteil = Fertigkeiten.Vorteil()
            self.vorteil.name = self.ui.nameEdit.text()
            self.vorteil.kosten = self.ui.kostenEdit.value()
            self.vorteil.nachkauf = self.ui.comboNachkauf.currentText()
            self.vorteil.voraussetzungen = Hilfsmethoden.VorStr2Array(
                self.ui.voraussetzungenEdit.toPlainText(), datenbank)
            self.vorteil.typ = self.ui.comboTyp.currentIndex()
            if self.ui.checkVariable.isChecked():
                self.vorteil.variable = 1
            else:
                self.vorteil.variable = -1
            self.vorteil.text = self.ui.textEdit.toPlainText()

            self.vorteil.scriptPrio = self.ui.scriptPrioEdit.value()
            self.vorteil.script = str.strip(self.ui.scriptEdit.text())

            self.vorteil.isUserAdded = False
            if self.vorteil == self.vorteilPicked:
                self.vorteil = None
            else:
                self.vorteil.isUserAdded = True
        else:
            self.vorteil = None
    def __init__(self,
                 datenbank,
                 fertigkeit=None,
                 ueber=False,
                 readonly=False):
        super().__init__()
        self.datenbank = datenbank
        if fertigkeit is None:
            fertigkeit = Fertigkeiten.Fertigkeit()
        self.fertigkeitPicked = fertigkeit
        self.fertigkeitUeber = ueber
        self.nameValid = True
        self.readonly = readonly
        self.voraussetzungenValid = True
        fertDialog = QtWidgets.QDialog()
        self.ui = DatenbankEditFertigkeit.Ui_talentDialog()
        self.ui.setupUi(fertDialog)

        if not fertigkeit.isUserAdded:
            if readonly:
                self.ui.warning.setText(
                    "Gelöschte Elemente können nicht verändert werden.")
            self.ui.warning.setVisible(True)

        fertDialog.setWindowFlags(QtCore.Qt.Window
                                  | QtCore.Qt.CustomizeWindowHint
                                  | QtCore.Qt.WindowTitleHint
                                  | QtCore.Qt.WindowCloseButtonHint)

        self.ui.nameEdit.setText(fertigkeit.name)
        self.ui.nameEdit.textChanged.connect(self.nameChanged)
        self.nameChanged()
        self.ui.steigerungsfaktorEdit.setValue(fertigkeit.steigerungsfaktor)
        self.ui.comboAttribut1.setCurrentText(fertigkeit.attribute[0])
        self.ui.comboAttribut2.setCurrentText(fertigkeit.attribute[1])
        self.ui.comboAttribut3.setCurrentText(fertigkeit.attribute[2])

        if ueber:
            self.ui.labelKampffertigkeit.setVisible(False)
            self.ui.comboKampffertigkeit.setVisible(False)
            self.ui.voraussetzungenEdit.setPlainText(
                Hilfsmethoden.VorArray2Str(fertigkeit.voraussetzungen, None))
            self.ui.voraussetzungenEdit.textChanged.connect(
                self.voraussetzungenTextChanged)
        else:
            self.ui.voraussetzungenEdit.setVisible(False)
            self.ui.labelVoraussetzungen.setVisible(False)
            self.ui.comboKampffertigkeit.setCurrentIndex(
                fertigkeit.kampffertigkeit)

        self.ui.textEdit.setPlainText(fertigkeit.text)
        self.ui.sortierungEdit.setValue(fertigkeit.printclass)
        self.ui.sortierungEdit.setToolTip(
            "Fertigkeiten werden nach dieser Zahl gruppiert und dann alphabetisch sortiert"
        )

        fertDialog.show()
        ret = fertDialog.exec_()
        if ret == QtWidgets.QDialog.Accepted:
            self.fertigkeit = Fertigkeiten.Fertigkeit()
            self.fertigkeit.name = self.ui.nameEdit.text()
            self.fertigkeit.steigerungsfaktor = int(
                self.ui.steigerungsfaktorEdit.value())
            if ueber:
                self.fertigkeit.voraussetzungen = Hilfsmethoden.VorStr2Array(
                    self.ui.voraussetzungenEdit.toPlainText(), datenbank)
            else:
                self.fertigkeit.kampffertigkeit = self.ui.comboKampffertigkeit.currentIndex(
                )
            self.fertigkeit.attribute = [
                self.ui.comboAttribut1.currentText(),
                self.ui.comboAttribut2.currentText(),
                self.ui.comboAttribut3.currentText()
            ]
            self.fertigkeit.text = self.ui.textEdit.toPlainText()
            self.fertigkeit.printclass = self.ui.sortierungEdit.value()

            self.fertigkeit.isUserAdded = False
            if self.fertigkeit == self.fertigkeitPicked:
                self.fertigkeit = None
            else:
                self.fertigkeit.isUserAdded = True
        else:
            self.fertigkeit = None
示例#9
0
 def addManoever(self):
     man = Fertigkeiten.Manoever()
     ret = self.editManoever(man)
     if ret is not None:
         self.datenbank.manöver.update({ret.name: ret})
         self.onDatabaseChange()
示例#10
0
 def addUebernatuerlich(self):
     fer = Fertigkeiten.Fertigkeit()
     ret = self.editUebernatuerlich(fer)
     if ret is not None:
         self.datenbank.übernatürlicheFertigkeiten.update({ret.name: ret})
         self.onDatabaseChange()
示例#11
0
 def addFertigkeit(self):
     fer = Fertigkeiten.Fertigkeit()
     ret = self.editFertigkeit(fer)
     if ret is not None:
         self.datenbank.fertigkeiten.update({ret.name: ret})
         self.onDatabaseChange()
示例#12
0
 def addVorteil(self):
     vor = Fertigkeiten.Vorteil()
     ret = self.editVorteil(vor)
     if ret is not None:
         self.datenbank.vorteile.update({ret.name: ret})
         self.onDatabaseChange()
示例#13
0
 def addTalent(self):
     tal = Fertigkeiten.Talent()
     ret = self.editTalent(tal)
     if ret is not None:
         self.datenbank.talente.update({ret.name: ret})
         self.onDatabaseChange()
    def __init__(self,
                 datenbank,
                 fertigkeit=None,
                 ueber=False,
                 readonly=False):
        super().__init__()
        self.datenbank = datenbank
        if fertigkeit is None:
            fertigkeit = Fertigkeiten.Fertigkeit()
        self.fertigkeitPicked = fertigkeit
        self.fertigkeitUeber = ueber
        self.nameValid = True
        self.readonly = readonly
        self.voraussetzungenValid = True
        self.fertDialog = QtWidgets.QDialog()
        self.ui = UI.DatenbankEditFertigkeit.Ui_talentDialog()
        self.ui.setupUi(self.fertDialog)

        if not fertigkeit.isUserAdded:
            if readonly:
                self.ui.warning.setText(
                    "Gelöschte Elemente können nicht verändert werden.")
            self.ui.warning.setVisible(True)

        self.fertDialog.setWindowFlags(QtCore.Qt.Window
                                       | QtCore.Qt.CustomizeWindowHint
                                       | QtCore.Qt.WindowTitleHint
                                       | QtCore.Qt.WindowCloseButtonHint)

        if ueber:
            windowSize = Wolke.Settings["WindowSize-DBFertigkeitUeber"]
            self.fertDialog.resize(windowSize[0], windowSize[1])
        else:
            windowSize = Wolke.Settings["WindowSize-DBFertigkeitProfan"]
            self.fertDialog.resize(windowSize[0], windowSize[1])

        self.ui.nameEdit.setText(fertigkeit.name)
        self.ui.nameEdit.textChanged.connect(self.nameChanged)
        self.nameChanged()
        self.ui.steigerungsfaktorEdit.setValue(fertigkeit.steigerungsfaktor)
        self.ui.comboAttribut1.setCurrentText(fertigkeit.attribute[0])
        self.ui.comboAttribut2.setCurrentText(fertigkeit.attribute[1])
        self.ui.comboAttribut3.setCurrentText(fertigkeit.attribute[2])

        if ueber:
            self.ui.labelKampffertigkeit.setVisible(False)
            self.ui.comboKampffertigkeit.setVisible(False)
            self.ui.voraussetzungenEdit.setPlainText(
                Hilfsmethoden.VorArray2Str(fertigkeit.voraussetzungen, None))
            self.ui.voraussetzungenEdit.textChanged.connect(
                self.voraussetzungenTextChanged)
            self.ui.checkGruppieren.setChecked(fertigkeit.talenteGruppieren)
        else:
            self.ui.voraussetzungenEdit.setVisible(False)
            self.ui.labelVoraussetzungen.setVisible(False)
            self.ui.labelGruppieren.setVisible(False)
            self.ui.checkGruppieren.setVisible(False)
            self.ui.comboKampffertigkeit.setCurrentIndex(
                fertigkeit.kampffertigkeit)

        self.ui.textEdit.setPlainText(fertigkeit.text)

        if ueber:
            fertigkeitsTypen = datenbank.einstellungen[
                "Fertigkeiten: Typen übernatürlich"].toTextList()
        else:
            fertigkeitsTypen = datenbank.einstellungen[
                "Fertigkeiten: Typen profan"].toTextList()
        self.ui.comboTyp.addItems(fertigkeitsTypen)
        self.ui.comboTyp.setCurrentIndex(fertigkeit.printclass)

        self.fertDialog.show()
        ret = self.fertDialog.exec_()

        if ueber:
            Wolke.Settings["WindowSize-DBFertigkeitUeber"] = [
                self.fertDialog.size().width(),
                self.fertDialog.size().height()
            ]
        else:
            Wolke.Settings["WindowSize-DBFertigkeitProfan"] = [
                self.fertDialog.size().width(),
                self.fertDialog.size().height()
            ]

        if ret == QtWidgets.QDialog.Accepted:
            self.fertigkeit = Fertigkeiten.Fertigkeit()
            self.fertigkeit.name = self.ui.nameEdit.text()
            self.fertigkeit.steigerungsfaktor = int(
                self.ui.steigerungsfaktorEdit.value())
            if ueber:
                self.fertigkeit.voraussetzungen = Hilfsmethoden.VorStr2Array(
                    self.ui.voraussetzungenEdit.toPlainText(), datenbank)
            else:
                self.fertigkeit.kampffertigkeit = self.ui.comboKampffertigkeit.currentIndex(
                )
            self.fertigkeit.attribute = [
                self.ui.comboAttribut1.currentText(),
                self.ui.comboAttribut2.currentText(),
                self.ui.comboAttribut3.currentText()
            ]
            self.fertigkeit.text = self.ui.textEdit.toPlainText()
            self.fertigkeit.talenteGruppieren = self.ui.checkGruppieren.isChecked(
            )
            self.fertigkeit.printclass = self.ui.comboTyp.currentIndex()
            self.fertigkeit.isUserAdded = False
            if self.fertigkeit == self.fertigkeitPicked:
                self.fertigkeit = None
            else:
                self.fertigkeit.isUserAdded = True
        else:
            self.fertigkeit = None
    def __init__(self, datenbank, vorteil=None, readonly=False):
        super().__init__()
        self.datenbank = datenbank
        if vorteil is None:
            vorteil = Fertigkeiten.Vorteil()
        self.vorteilPicked = vorteil
        self.nameValid = True
        self.readonly = readonly
        self.voraussetzungenValid = True
        self.vorteilDialog = QtWidgets.QDialog()
        self.ui = UI.DatenbankEditVorteil.Ui_talentDialog()
        self.ui.setupUi(self.vorteilDialog)
        
        if not vorteil.isUserAdded:
            if readonly:
                self.ui.warning.setText("Gelöschte Elemente können nicht verändert werden.")
            self.ui.warning.setVisible(True)

        self.vorteilDialog.setWindowFlags(
                QtCore.Qt.Window |
                QtCore.Qt.CustomizeWindowHint |
                QtCore.Qt.WindowTitleHint |
                QtCore.Qt.WindowCloseButtonHint)
        
        windowSize = Wolke.Settings["WindowSize-DBVorteil"]
        self.vorteilDialog.resize(windowSize[0], windowSize[1])

        self.ui.nameEdit.setText(vorteil.name)
        self.ui.nameEdit.textChanged.connect(self.nameChanged)
        self.nameChanged()
        self.ui.kostenEdit.setValue(vorteil.kosten)
        self.ui.comboNachkauf.setCurrentText(vorteil.nachkauf)

        self.ui.comboTyp.addItems(datenbank.einstellungen["Vorteile: Typen"].toTextList())
        self.ui.comboTyp.setCurrentIndex(vorteil.typ)

        self.ui.voraussetzungenEdit.setPlainText(Hilfsmethoden.VorArray2Str(vorteil.voraussetzungen, None))
        self.ui.voraussetzungenEdit.textChanged.connect(self.voraussetzungenTextChanged)

        self.ui.textEdit.setPlainText(vorteil.text)
        self.ui.checkVariable.setChecked(vorteil.variableKosten)
        self.ui.checkKommentar.setChecked(vorteil.kommentarErlauben)
        self.ui.checkVariable.clicked.connect(self.variableKostenChanged)
        self.variableKostenChanged()

        self.ui.checkCheatsheet.setChecked(vorteil.cheatsheetAuflisten)
        self.ui.checkCheatsheet.clicked.connect(self.cheatsheetChanged)
        self.cheatsheetChanged()
        self.ui.comboLinkKategorie.setCurrentIndex(vorteil.linkKategorie)
        self.ui.comboLinkKategorie.currentIndexChanged.connect(self.linkKategorieChanged)
        self.linkKategorieChanged()
        if vorteil.linkKategorie != VorteilLinkKategorie.NichtVerknüpfen:
            self.ui.comboLinkElement.setCurrentText(vorteil.linkElement)
        self.ui.teCheatsheet.setPlainText(vorteil.cheatsheetBeschreibung)

        self.ui.scriptPrioEdit.setValue(vorteil.scriptPrio)

        scriptPrioDoc = [
            "Die Skript-Priorität legt die Reihenfolge der Auswertung fest. 0 ist Standard, negative Werte werden davor,",
            "positive Werte danach ausgewertet. Dies ist relevant, falls bspw. die INI verdoppelt werden soll nachdem",
            "Kampfreflexe eingerechnet wurde. In diesem Fall sollte die Skript-Priorität höher als die von Kampfreflexe sein."
        ]

        self.ui.scriptPrioEdit.setToolTip("\n".join(scriptPrioDoc))

        self.ui.scriptEdit.setText(vorteil.script)

        self.ui.scriptEdit.setToolTip("Siehe \"Skripte für Vorteile und Waffeneigenschaften\" in der Sephrasto-Hilfe für verfügbare Funktionen und Beispiele.")

        self.vorteilDialog.show()
        ret = self.vorteilDialog.exec_()

        Wolke.Settings["WindowSize-DBVorteil"] = [self.vorteilDialog.size().width(), self.vorteilDialog.size().height()]

        if ret == QtWidgets.QDialog.Accepted:
            self.vorteil = Fertigkeiten.Vorteil()
            self.vorteil.name = self.ui.nameEdit.text()
            self.vorteil.kosten = self.ui.kostenEdit.value()
            self.vorteil.nachkauf = self.ui.comboNachkauf.currentText()
            self.vorteil.voraussetzungen = Hilfsmethoden.VorStr2Array(self.ui.voraussetzungenEdit.toPlainText(), datenbank)
            self.vorteil.typ = self.ui.comboTyp.currentIndex()
            self.vorteil.variableKosten = self.ui.checkVariable.isChecked()
            self.vorteil.kommentarErlauben = self.ui.checkKommentar.isChecked()

            self.vorteil.text = self.ui.textEdit.toPlainText()
            
            self.vorteil.scriptPrio = self.ui.scriptPrioEdit.value()
            self.vorteil.script = str.strip(self.ui.scriptEdit.text())

            self.vorteil.cheatsheetAuflisten = self.ui.checkCheatsheet.isChecked()
            self.vorteil.cheatsheetBeschreibung = self.ui.teCheatsheet.toPlainText()
            self.vorteil.linkKategorie = self.ui.comboLinkKategorie.currentIndex()
            self.vorteil.linkElement = self.ui.comboLinkElement.currentText()

            self.vorteil.isUserAdded = False
            if self.vorteil == self.vorteilPicked:
                self.vorteil = None
            else:
                self.vorteil.isUserAdded = True
        else:
            self.vorteil = None
示例#16
0
 def addFreieFertigkeit(self):
     fer = Fertigkeiten.FreieFertigkeitDB()
     return self.editFreieFertigkeit(fer)
示例#17
0
 def addManoever(self):
     man = Fertigkeiten.Manoever()
     return self.editManoever(man)
示例#18
0
    def __init__(self, datenbank, talent=None, readonly=False):
        super().__init__()
        self.datenbank = datenbank
        if talent is None:
            talent = Fertigkeiten.Talent()
        self.talentPicked = talent
        self.nameValid = True
        self.voraussetzungenValid = True
        self.fertigkeitenValid = True
        self.readonly = readonly
        self.talentDialog = QtWidgets.QDialog()
        self.ui = UI.DatenbankEditTalent.Ui_talentDialog()
        self.ui.setupUi(self.talentDialog)

        if not talent.isUserAdded:
            if readonly:
                self.ui.warning.setText(
                    "Gelöschte Elemente können nicht verändert werden.")
            self.ui.warning.setVisible(True)

        self.talentDialog.setWindowFlags(QtCore.Qt.Window
                                         | QtCore.Qt.CustomizeWindowHint
                                         | QtCore.Qt.WindowTitleHint
                                         | QtCore.Qt.WindowCloseButtonHint)

        windowSize = Wolke.Settings["WindowSize-DBTalent"]
        self.talentDialog.resize(windowSize[0], windowSize[1])

        self.ui.nameEdit.setText(talent.name)
        self.ui.nameEdit.textChanged.connect(self.nameChanged)
        self.nameChanged()
        if talent.verbilligt:
            self.ui.buttonVerbilligt.setChecked(True)
        elif talent.kosten != -1:
            self.ui.buttonSpezial.setChecked(True)
            self.ui.spinKosten.setValue(talent.kosten)
            self.ui.checkCheatsheet.setChecked(talent.cheatsheetAuflisten)
        else:
            self.ui.buttonRegulaer.setChecked(True)
        if talent.variableKosten:
            self.ui.checkVariable.setChecked(True)
        else:
            self.ui.checkVariable.setChecked(False)

        if talent.kommentarErlauben:
            self.ui.checkKommentar.setChecked(True)
        else:
            self.ui.checkKommentar.setChecked(False)

        self.fertigkeitenCompleter = TextTagCompleter(self.ui.fertigkeitenEdit,
                                                      [])
        self.ui.fertigkeitenEdit.setText(
            Hilfsmethoden.FertArray2Str(talent.fertigkeiten, None))
        self.ui.fertigkeitenEdit.textChanged.connect(
            self.fertigkeitenTextChanged)

        self.ui.buttonRegulaer.clicked.connect(self.kostenChanged)
        self.ui.buttonVerbilligt.clicked.connect(self.kostenChanged)
        self.ui.buttonSpezial.clicked.connect(self.kostenChanged)
        self.kostenChanged()

        self.ui.checkVariable.clicked.connect(self.variableKostenCheckChanged)
        self.variableKostenCheckChanged()

        self.ui.voraussetzungenEdit.setPlainText(
            Hilfsmethoden.VorArray2Str(talent.voraussetzungen, None))
        self.ui.voraussetzungenEdit.textChanged.connect(
            self.voraussetzungenTextChanged)

        self.ui.textEdit.setPlainText(talent.text)

        bücher = datenbank.einstellungen["Referenzbücher"].toTextList()
        if (len(bücher) > 0):
            self.ui.comboSeite.addItems(bücher)
            self.ui.comboSeite.setCurrentIndex(self.talentPicked.referenzBuch)
        self.ui.spinSeite.setValue(self.talentPicked.referenzSeite)

        self.talentDialog.show()
        ret = self.talentDialog.exec_()

        Wolke.Settings["WindowSize-DBTalent"] = [
            self.talentDialog.size().width(),
            self.talentDialog.size().height()
        ]

        if ret == QtWidgets.QDialog.Accepted:
            self.talent = Fertigkeiten.Talent()
            self.talent.name = self.ui.nameEdit.text()
            self.talent.fertigkeiten = Hilfsmethoden.FertStr2Array(
                self.ui.fertigkeitenEdit.text(), None)
            self.talent.voraussetzungen = Hilfsmethoden.VorStr2Array(
                self.ui.voraussetzungenEdit.toPlainText(), datenbank)
            self.talent.text = self.ui.textEdit.toPlainText()
            self.talent.kosten = -1

            self.talent.kommentarErlauben = self.ui.checkKommentar.isChecked()
            self.talent.variableKosten = self.ui.checkVariable.isChecked()

            if self.ui.buttonSpezial.isChecked():
                self.talent.kosten = self.ui.spinKosten.value()
            elif self.ui.buttonVerbilligt.isChecked():
                self.talent.verbilligt = 1
            self.talent.cheatsheetAuflisten = self.ui.checkCheatsheet.isChecked(
            )

            self.talent.referenzBuch = self.ui.comboSeite.currentIndex()
            self.talent.referenzSeite = self.ui.spinSeite.value()

            self.talent.isUserAdded = False
            if self.talent == self.talentPicked:
                self.talent = None
            else:
                self.talent.isUserAdded = True
        else:
            self.talent = None
示例#19
0
    def __init__(self, datenbank, man=None, readonly=False):
        super().__init__()
        self.datenbank = datenbank
        if man is None:
            man = Fertigkeiten.Manoever()
        self.manöverPicked = man
        self.nameValid = True
        self.readonly = readonly
        self.voraussetzungenValid = True
        self.manDialog = QtWidgets.QDialog()
        self.ui = UI.DatenbankEditManoever.Ui_manDialog()
        self.ui.setupUi(self.manDialog)

        if not man.isUserAdded:
            if readonly:
                self.ui.warning.setText(
                    "Gelöschte Elemente können nicht verändert werden.")
            self.ui.warning.setVisible(True)

        self.manDialog.setWindowFlags(QtCore.Qt.Window
                                      | QtCore.Qt.CustomizeWindowHint
                                      | QtCore.Qt.WindowTitleHint
                                      | QtCore.Qt.WindowCloseButtonHint)

        windowSize = Wolke.Settings["WindowSize-DBManoever"]
        self.manDialog.resize(windowSize[0], windowSize[1])

        self.ui.nameEdit.setText(man.name)
        self.ui.nameEdit.textChanged.connect(self.nameChanged)
        self.nameChanged()
        self.ui.probeEdit.setText(man.probe)
        self.ui.gegenEdit.setText(man.gegenprobe)
        self.ui.comboTyp.clear()
        self.ui.comboTyp.addItems(
            datenbank.einstellungen["Manöver: Typen"].toTextList())
        self.ui.comboTyp.setCurrentIndex(man.typ)

        self.ui.voraussetzungenEdit.setPlainText(
            Hilfsmethoden.VorArray2Str(man.voraussetzungen, None))
        self.ui.voraussetzungenEdit.textChanged.connect(
            self.voraussetzungenTextChanged)

        self.ui.textEdit.setPlainText(man.text)
        self.manDialog.show()
        ret = self.manDialog.exec_()

        Wolke.Settings["WindowSize-DBManoever"] = [
            self.manDialog.size().width(),
            self.manDialog.size().height()
        ]

        if ret == QtWidgets.QDialog.Accepted:
            self.man = Fertigkeiten.Manoever()
            self.man.name = self.ui.nameEdit.text()
            self.man.probe = self.ui.probeEdit.text()
            self.man.gegenprobe = self.ui.gegenEdit.text()
            self.man.typ = self.ui.comboTyp.currentIndex()
            self.man.voraussetzungen = Hilfsmethoden.VorStr2Array(
                self.ui.voraussetzungenEdit.toPlainText(), datenbank)
            self.man.text = self.ui.textEdit.toPlainText()

            self.man.isUserAdded = False
            if self.man == self.manöverPicked:
                self.man = None
            else:
                self.man.isUserAdded = True
        else:
            self.man = None
    def __init__(self, datenbank, fert=None, readonly=False):
        super().__init__()
        self.datenbank = datenbank
        if fert is None:
            fert = Fertigkeiten.FreieFertigkeitDB()
        self.freieFertigkeitPicked = fert
        self.nameValid = True
        self.readonly = readonly
        self.voraussetzungenValid = True
        self.ffDialog = QtWidgets.QDialog()
        self.ui = UI.DatenbankEditFreieFertigkeit.Ui_ffDialog()
        self.ui.setupUi(self.ffDialog)

        if not fert.isUserAdded:
            if readonly:
                self.ui.warning.setText(
                    "Gelöschte Elemente können nicht verändert werden.")
            self.ui.warning.setVisible(True)

        self.ffDialog.setWindowFlags(QtCore.Qt.Window
                                     | QtCore.Qt.CustomizeWindowHint
                                     | QtCore.Qt.WindowTitleHint
                                     | QtCore.Qt.WindowCloseButtonHint)

        windowSize = Wolke.Settings["WindowSize-DBFreieFert"]
        self.ffDialog.resize(windowSize[0], windowSize[1])

        self.ui.leName.setText(fert.name)
        self.ui.leName.textChanged.connect(self.nameChanged)
        self.nameChanged()

        ffTypen = datenbank.einstellungen[
            "FreieFertigkeiten: Typen"].toTextList()
        self.ui.comboTyp.addItems(ffTypen)
        self.ui.comboTyp.setCurrentText(fert.kategorie)
        self.ui.teVoraussetzungen.setPlainText(
            Hilfsmethoden.VorArray2Str(fert.voraussetzungen, None))
        self.ui.teVoraussetzungen.textChanged.connect(
            self.voraussetzungenTextChanged)

        self.ffDialog.show()
        ret = self.ffDialog.exec_()

        Wolke.Settings["WindowSize-DBFreieFert"] = [
            self.ffDialog.size().width(),
            self.ffDialog.size().height()
        ]

        if ret == QtWidgets.QDialog.Accepted:
            self.freieFertigkeit = Fertigkeiten.FreieFertigkeitDB()
            self.freieFertigkeit.name = self.ui.leName.text()
            self.freieFertigkeit.kategorie = self.ui.comboTyp.currentText()
            self.freieFertigkeit.voraussetzungen = Hilfsmethoden.VorStr2Array(
                self.ui.teVoraussetzungen.toPlainText(), datenbank)

            self.freieFertigkeit.isUserAdded = False
            if self.freieFertigkeit == self.freieFertigkeitPicked:
                self.freieFertigkeit = None
            else:
                self.freieFertigkeit.isUserAdded = True
        else:
            self.freieFertigkeit = None
示例#21
0
    def xmlLadenInternal(self, file, refDB):
        Wolke.Fehlercode = -20
        root = etree.parse(file).getroot()

        if root.tag != 'Datenbank':
            raise DatabaseException('Not a valid database file')

        if not refDB:
            self.userDbXml = root

            #Versionierung
            versionXml = root.find('Version')
            userDBVersion = 0
            if versionXml is not None:
                logging.debug("User DB: VersionXML found")
                userDBVersion = int(versionXml.text)

            logging.debug("Starting User DB Migration")
            self.userDBMigrieren(root, userDBVersion, self.datenbankCodeVersion)

        numLoaded = 0
        
        #Remove existing entries (should be used in database_user only)
        #Also check if the entries exist at all (might have been removed/renamed due to a ref db update)
        for rem in root.findall('Remove'):
            typ = rem.get('typ')
            name = rem.get('name')
            removed = None
            if typ == 'Vorteil' and name in self.vorteile:
                removed = self.vorteile.pop(name)
            elif typ == 'Fertigkeit' and name in self.fertigkeiten:
                removed = self.fertigkeiten.pop(name)
            elif typ == 'Talent' and name in self.talente:
                removed = self.talente.pop(name)
            elif typ == 'Übernatürliche Fertigkeit' and name in self.übernatürlicheFertigkeiten:
                removed = self.übernatürlicheFertigkeiten.pop(name)
            elif typ == 'Waffeneigenschaft' and name in self.waffeneigenschaften:
                removed = self.waffeneigenschaften.pop(name)
            elif typ == 'Waffe' and name in self.waffen:
                removed = self.waffen.pop(name)
            elif typ == 'Manöver / Modifikation' and name in self.manöver:
                removed = self.manöver.pop(name)
            if removed:
                self.removeList.append((name, typ, removed))

        #Vorteile
        Wolke.Fehlercode = -21
        vorteilNodes = root.findall('Vorteil')
        for vort in vorteilNodes:
            numLoaded += 1
            V = Fertigkeiten.Vorteil()
            V.name = vort.get('name')
            V.kosten = int(vort.get('kosten'))
            V.nachkauf = vort.get('nachkauf')
            V.typ = int(vort.get('typ'))
            V.text = vort.text or ''
            V.script = vort.get('script')
            prio = vort.get('scriptPrio')
            if prio:
                V.scriptPrio = int(prio)

            V.isUserAdded = not refDB
            try:
                V.variable = int(vort.get('variable'))
            except:
                V.variable = -1
            self.vorteile.update({V.name: V})
            
        #Talente
        Wolke.Fehlercode = -22
        talentNodes = root.findall('Talent')
        for tal in talentNodes:
            numLoaded += 1
            T = Fertigkeiten.Talent()
            T.name = tal.get('name')
            T.kosten = int(tal.get('kosten'))
            T.verbilligt = int(tal.get('verbilligt'))
            T.text = tal.text or ''
            T.fertigkeiten = Hilfsmethoden.FertStr2Array(tal.get('fertigkeiten'), None)
            T.variable = int(tal.get('variable'))
            T.isUserAdded = not refDB

            printClass = tal.get('printclass')
            if printClass:
                T.printclass = int(printClass)
            else:
                T.printclass = -1
            self.talente.update({T.name: T})
            
        #Fertigkeiten
        Wolke.Fehlercode = -23
        fertigkeitNodes = root.findall('Fertigkeit')
        for fer in fertigkeitNodes:
            numLoaded += 1
            F = Fertigkeiten.Fertigkeit()
            F.name = fer.get('name')
            F.steigerungsfaktor = int(fer.get('steigerungsfaktor'))
            F.text = fer.text or ''
            F.attribute = Hilfsmethoden.AttrStr2Array(fer.get('attribute'))
            F.kampffertigkeit = int(fer.get('kampffertigkeit'))
            F.isUserAdded = not refDB

            printClass = fer.get('printclass')
            if printClass:
                F.printclass = int(printClass)
            else:
                F.printclass = -1
            self.fertigkeiten.update({F.name: F})

        Wolke.Fehlercode = -24
        überFertigkeitNodes = root.findall('Übernatürliche-Fertigkeit')
        for fer in überFertigkeitNodes:
            numLoaded += 1
            F = Fertigkeiten.Fertigkeit()
            F.name = fer.get('name')
            F.steigerungsfaktor = int(fer.get('steigerungsfaktor'))
            F.text = fer.text or ''
            F.attribute = Hilfsmethoden.AttrStr2Array(fer.get('attribute'))
            F.isUserAdded = not refDB

            printClass = fer.get('printclass')
            if printClass:
                F.printclass = int(printClass)
            else:
                F.printclass = -1
            self.übernatürlicheFertigkeiten.update({F.name: F})
          
        #Waffeneigenschaften
        eigenschaftNodes = root.findall('Waffeneigenschaft')
        for eigenschaft in eigenschaftNodes:
            numLoaded += 1
            W = Objekte.Waffeneigenschaft()
            W.name = eigenschaft.get('name')
            W.text = eigenschaft.text or ''
            W.script = eigenschaft.get('script')
            prio = eigenschaft.get('scriptPrio')
            if prio:
                W.scriptPrio = int(prio)

            W.isUserAdded = not refDB
            self.waffeneigenschaften.update({W.name: W})

        #Waffen
        Wolke.Fehlercode = -25
        for wa in root.findall('Waffe'):
            numLoaded += 1
            if wa.get('fk') == '1':
                w = Objekte.Fernkampfwaffe()
                w.lz = int(wa.get('lz'))
            else:
                w = Objekte.Nahkampfwaffe()
                w.wm = int(wa.get('wm'))
            w.name = wa.get('name')
            w.rw = int(wa.get('rw'))
            w.W6 = int(wa.get('W6'))
            w.plus = int(wa.get('plus'))
            w.haerte = int(wa.get('haerte'))
            if wa.text:
                w.eigenschaften = list(map(str.strip, wa.text.split(",")))
            w.fertigkeit = wa.get('fertigkeit')
            w.talent = wa.get('talent')
            if w.name and w.talent:
                w.anzeigename = w.name.replace(" (" + w.talent + ")", "")
            kampfstile = wa.get('kampfstile')
            if kampfstile:
                w.kampfstile = list(map(str.strip, kampfstile.split(",")))
            w.isUserAdded = not refDB
            self.waffen.update({w.name: w})
        
        #Manöver
        Wolke.Fehlercode = -26
        manöverNodes = root.findall('Manöver')
        for ma in manöverNodes:
            numLoaded += 1
            m = Fertigkeiten.Manoever()
            m.name = ma.get('name')
            m.probe = ma.get('probe')
            m.gegenprobe = ma.get('gegenprobe')
            m.typ = int(ma.get('typ'))
            m.text = ma.text or ''
            m.isUserAdded = not refDB
            self.manöver.update({m.name: m})

        # Step 2: Voraussetzungen - requires everything else to be loaded for cross validation
        notifyError = False # For testing of manual db changes

        #Vorteile
        Wolke.Fehlercode = -21
        for vort in vorteilNodes:
            V = self.vorteile[vort.get('name')]
            try:
                V.voraussetzungen = Hilfsmethoden.VorStr2Array(vort.get('voraussetzungen'), self)
            except VoraussetzungException as e:
                errorStr = "Error in Voraussetzungen of Vorteil " + V.name + ": " + str(e)
                if notifyError:
                    assert False, errorStr
                logging.warning(errorStr)
            
        #Talente
        Wolke.Fehlercode = -22
        for tal in talentNodes:
            T = self.talente[tal.get('name')] 
            try:
                T.voraussetzungen = Hilfsmethoden.VorStr2Array(tal.get('voraussetzungen'), self)
            except VoraussetzungException as e:
                errorStr = "Error in Voraussetzungen of Talent " + T.name + ": " + str(e)
                if notifyError:
                    assert False, errorStr
                logging.warning(errorStr)

            if len(T.fertigkeiten) == 0:
                errorStr = "Talent " + T.name + " has no Fertigkeiten."
                if notifyError:
                    assert False, errorStr
                logging.warning("Talent " + T.name + " has no Fertigkeiten.")
            for fert in T.fertigkeiten:
                if not fert in self.fertigkeiten and not fert in self.übernatürlicheFertigkeiten:
                    errorStr = "Talent is referencing non-existing Fertigkeit " + T.name + ": " + fert
                    if notifyError:
                        assert False, errorStr
                    logging.warning(errorStr)

        #Fertigkeiten
        Wolke.Fehlercode = -23
        for fer in fertigkeitNodes:
            F = self.fertigkeiten[fer.get('name')]
            try:
                F.voraussetzungen = Hilfsmethoden.VorStr2Array(fer.get('voraussetzungen'), self)
            except VoraussetzungException as e:
                errorStr = "Error in Voraussetzungen of Fertigkeit " + F.name + ": " + str(e)
                if notifyError:
                    assert False, errorStr
                logging.warning(errorStr)

        Wolke.Fehlercode = -24
        for fer in überFertigkeitNodes:
            F = self.übernatürlicheFertigkeiten[fer.get('name')]
            try:
                F.voraussetzungen = Hilfsmethoden.VorStr2Array(fer.get('voraussetzungen'), self)
            except VoraussetzungException as e:
                errorStr = "Error in Voraussetzungen of Übernatürliche Fertigkeit " + F.name + ": " + str(e)
                if notifyError:
                    assert False, errorStr
                logging.warning(errorStr)
      
        #Manöver
        Wolke.Fehlercode = -26
        for ma in manöverNodes:
            m = self.manöver[ma.get('name')]
            try:
                m.voraussetzungen = Hilfsmethoden.VorStr2Array(ma.get('voraussetzungen'), self)
            except VoraussetzungException as e:
                errorStr = "Error in Voraussetzungen of Manöver " + m.name + ": " + str(e)
                if notifyError:
                    assert False, errorStr
                logging.warning(errorStr)

        #Further verifications
        for wa in self.waffen.values():
            for eig in wa.eigenschaften:
                try:
                    Hilfsmethoden.VerifyWaffeneigenschaft(eig, self)
                except WaffeneigenschaftException as e:
                    errorStr = "Error in Eigenschaften of Waffe " + wa.name + ": " + str(e)
                    if notifyError:
                        assert False, errorStr
                    logging.warning(errorStr)

        if numLoaded <1 and refDB:
            Wolke.Fehlercode = -33
            raise Exception('The selected database file is empty!')
        
        # Reset 
        Wolke.Fehlercode = 0

        return True
示例#22
0
    def __init__(self, datenbank, talent=None, readonly=False):
        super().__init__()
        self.datenbank = datenbank
        if talent is None:
            talent = Fertigkeiten.Talent()
        self.talentPicked = talent
        self.nameValid = True
        self.voraussetzungenValid = True
        self.fertigkeitenValid = True
        self.readonly = readonly
        talentDialog = QtWidgets.QDialog()
        self.ui = DatenbankEditTalent.Ui_talentDialog()
        self.ui.setupUi(talentDialog)

        if not talent.isUserAdded:
            if readonly:
                self.ui.warning.setText(
                    "Gelöschte Elemente können nicht verändert werden.")
            self.ui.warning.setVisible(True)

        talentDialog.setWindowFlags(QtCore.Qt.Window
                                    | QtCore.Qt.CustomizeWindowHint
                                    | QtCore.Qt.WindowTitleHint
                                    | QtCore.Qt.WindowCloseButtonHint)

        self.ui.nameEdit.setText(talent.name)
        self.ui.nameEdit.textChanged.connect(self.nameChanged)
        self.nameChanged()
        if talent.verbilligt:
            self.ui.buttonVerbilligt.setChecked(True)
        elif talent.kosten is not -1:
            self.ui.buttonSpezial.setChecked(True)
            self.ui.spinKosten.setValue(talent.kosten)
        else:
            self.ui.buttonRegulaer.setChecked(True)
        if talent.variable != -1:
            self.ui.checkVariable.setChecked(True)
        else:
            self.ui.checkVariable.setChecked(False)
        self.ui.fertigkeitenEdit.setText(
            Hilfsmethoden.FertArray2Str(talent.fertigkeiten, None))
        self.ui.fertigkeitenEdit.textChanged.connect(
            self.fertigkeitenTextChanged)

        self.ui.voraussetzungenEdit.setPlainText(
            Hilfsmethoden.VorArray2Str(talent.voraussetzungen, None))
        self.ui.voraussetzungenEdit.textChanged.connect(
            self.voraussetzungenTextChanged)

        self.ui.textEdit.setPlainText(talent.text)

        self.ui.sortierungEdit.setValue(talent.printclass)
        self.ui.sortierungEdit.setToolTip(
            "Talente werden nach dieser Zahl gruppiert und dann alphabetisch sortiert"
        )

        talentDialog.show()
        ret = talentDialog.exec_()
        if ret == QtWidgets.QDialog.Accepted:
            self.talent = Fertigkeiten.Talent()
            self.talent.name = self.ui.nameEdit.text()
            self.talent.fertigkeiten = Hilfsmethoden.FertStr2Array(
                self.ui.fertigkeitenEdit.text(), None)
            self.talent.voraussetzungen = Hilfsmethoden.VorStr2Array(
                self.ui.voraussetzungenEdit.toPlainText(), datenbank)
            self.talent.text = self.ui.textEdit.toPlainText()
            self.talent.kosten = -1
            if self.ui.checkVariable.isChecked():
                self.talent.variable = 1
            else:
                self.talent.variable = -1
            if self.ui.buttonSpezial.isChecked():
                self.talent.kosten = self.ui.spinKosten.value()
            elif self.ui.buttonVerbilligt.isChecked():
                self.talent.verbilligt = 1
            self.talent.printclass = self.ui.sortierungEdit.value()

            self.talent.isUserAdded = False
            if self.talent == self.talentPicked:
                self.talent = None
            else:
                self.talent.isUserAdded = True
        else:
            self.talent = None