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()
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)
def addUebernatuerlich(self): fer = Fertigkeiten.Fertigkeit() return self.editUebernatuerlich(fer)
def addFertigkeit(self): fer = Fertigkeiten.Fertigkeit() return self.editFertigkeit(fer)
def addVorteil(self): vor = Fertigkeiten.Vorteil() return self.editVorteil(vor)
def addTalent(self): tal = Fertigkeiten.Talent() return self.editTalent(tal)
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
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()
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()
def addFertigkeit(self): fer = Fertigkeiten.Fertigkeit() ret = self.editFertigkeit(fer) if ret is not None: self.datenbank.fertigkeiten.update({ret.name: ret}) self.onDatabaseChange()
def addVorteil(self): vor = Fertigkeiten.Vorteil() ret = self.editVorteil(vor) if ret is not None: self.datenbank.vorteile.update({ret.name: ret}) self.onDatabaseChange()
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
def addFreieFertigkeit(self): fer = Fertigkeiten.FreieFertigkeitDB() return self.editFreieFertigkeit(fer)
def addManoever(self): man = Fertigkeiten.Manoever() return self.editManoever(man)
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
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
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
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