<commit_before># -*- coding: utf-8 -*-
"""
Created on Sat Mar 18 11:04:21 2017

@author: Aeolitus
"""
import Fertigkeiten
from Hilfsmethoden import Hilfsmethoden, VoraussetzungException
import DatenbankEditTalent
from PyQt5 import QtWidgets, QtCore

class DatenbankEditTalentWrapper(object):
    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 0 and 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

    def nameChanged(self):
        name = self.ui.nameEdit.text()
        if name == "":
            self.ui.nameEdit.setToolTip("Name darf nicht leer sein.")
            self.ui.nameEdit.setStyleSheet("border: 1px solid red;")
            self.nameValid = False
        elif name != self.talentPicked.name and name in self.datenbank.talente:
            self.ui.nameEdit.setToolTip("Name existiert bereits.")
            self.ui.nameEdit.setStyleSheet("border: 1px solid red;")
            self.nameValid = False
        else:
            self.ui.nameEdit.setToolTip("")
            self.ui.nameEdit.setStyleSheet("")
            self.nameValid = True
        self.updateSaveButtonState()

    def voraussetzungenTextChanged(self):
        try:
            Hilfsmethoden.VorStr2Array(self.ui.voraussetzungenEdit.toPlainText(), self.datenbank)
            self.ui.voraussetzungenEdit.setStyleSheet("")
            self.ui.voraussetzungenEdit.setToolTip("")
            self.voraussetzungenValid = True
        except VoraussetzungException as e:
            self.ui.voraussetzungenEdit.setStyleSheet("border: 1px solid red;")
            self.ui.voraussetzungenEdit.setToolTip(str(e))
            self.voraussetzungenValid = False
        self.updateSaveButtonState()

    def fertigkeitenTextChanged(self):
        fertigkeiten = Hilfsmethoden.FertStr2Array(self.ui.fertigkeitenEdit.text(),None)
        self.fertigkeitenValid = True
        for fertigkeit in fertigkeiten:
            if not fertigkeit in self.datenbank.fertigkeiten and not fertigkeit in self.datenbank.übernatürlicheFertigkeiten:
                self.ui.fertigkeitenEdit.setStyleSheet("border: 1px solid red;")
                self.ui.fertigkeitenEdit.setToolTip("Unbekannte Fertigkeit '" + fertigkeit + "'")
                self.fertigkeitenValid = False
                break
        if self.fertigkeitenValid:
            self.ui.fertigkeitenEdit.setStyleSheet("")
            self.ui.fertigkeitenEdit.setToolTip("")
        self.updateSaveButtonState()

    def updateSaveButtonState(self):
        self.ui.buttonBox.button(QtWidgets.QDialogButtonBox.Save).setEnabled(not self.readonly and self.nameValid and self.voraussetzungenValid and self.fertigkeitenValid)<commit_msg>Added name validation for Gebräuche and Überleben Talente<commit_after># -*- coding: utf-8 -*-
"""
Created on Sat Mar 18 11:04:21 2017

@author: Aeolitus
"""
import Fertigkeiten
from Hilfsmethoden import Hilfsmethoden, VoraussetzungException
import DatenbankEditTalent
from PyQt5 import QtWidgets, QtCore

class DatenbankEditTalentWrapper(object):
    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 0 and 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

    def nameChanged(self):
        name = self.ui.nameEdit.text()
        fertigkeiten = Hilfsmethoden.FertStr2Array(self.ui.fertigkeitenEdit.text(),None)
        if name == "":
            self.ui.nameEdit.setToolTip("Name darf nicht leer sein.")
            self.ui.nameEdit.setStyleSheet("border: 1px solid red;")
            self.nameValid = False
        elif name != self.talentPicked.name and name in self.datenbank.talente:
            self.ui.nameEdit.setToolTip("Name existiert bereits.")
            self.ui.nameEdit.setStyleSheet("border: 1px solid red;")
            self.nameValid = False
        elif "Gebräuche" in fertigkeiten and not name.startswith("Gebräuche: "):
            self.ui.nameEdit.setToolTip("Talentnamen für die Fertigkeit Gebräuche müssen mit 'Gebräuche: ' anfangen.")
            self.ui.nameEdit.setStyleSheet("border: 1px solid red;")
            self.nameValid = False
        elif "Überleben" in fertigkeiten and not name.startswith("Überleben: "):
            self.ui.nameEdit.setToolTip("Talentnamen für die Fertigkeit Überleben müssen mit 'Überleben: ' anfangen.")
            self.ui.nameEdit.setStyleSheet("border: 1px solid red;")
            self.nameValid = False
        else:
            self.ui.nameEdit.setToolTip("")
            self.ui.nameEdit.setStyleSheet("")
            self.nameValid = True
        self.updateSaveButtonState()

    def voraussetzungenTextChanged(self):
        try:
            Hilfsmethoden.VorStr2Array(self.ui.voraussetzungenEdit.toPlainText(), self.datenbank)
            self.ui.voraussetzungenEdit.setStyleSheet("")
            self.ui.voraussetzungenEdit.setToolTip("")
            self.voraussetzungenValid = True
        except VoraussetzungException as e:
            self.ui.voraussetzungenEdit.setStyleSheet("border: 1px solid red;")
            self.ui.voraussetzungenEdit.setToolTip(str(e))
            self.voraussetzungenValid = False
        self.updateSaveButtonState()

    def fertigkeitenTextChanged(self):
        fertigkeiten = Hilfsmethoden.FertStr2Array(self.ui.fertigkeitenEdit.text(),None)
        self.fertigkeitenValid = True
        for fertigkeit in fertigkeiten:
            if not fertigkeit in self.datenbank.fertigkeiten and not fertigkeit in self.datenbank.übernatürlicheFertigkeiten:
                self.ui.fertigkeitenEdit.setStyleSheet("border: 1px solid red;")
                self.ui.fertigkeitenEdit.setToolTip("Unbekannte Fertigkeit '" + fertigkeit + "'")
                self.fertigkeitenValid = False
                break
        if self.fertigkeitenValid:
            self.ui.fertigkeitenEdit.setStyleSheet("")
            self.ui.fertigkeitenEdit.setToolTip("")
        self.nameChanged()

    def updateSaveButtonState(self):
        self.ui.buttonBox.button(QtWidgets.QDialogButtonBox.Save).setEnabled(not self.readonly and self.nameValid and self.voraussetzungenValid and self.fertigkeitenValid)
{'fraction_non_alphanumeric': 0.09311966834090728, 'fraction_numerical': 0.005182173323766244, 'mean_word_length': 2.415191941192486, 'pattern_counts': {'":': 2, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4200906', 'n_tokens_mistral': 3869, 'n_tokens_neox': 3836, 'n_words': 596}