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

@author: Aeolitus
"""
from Wolke import Wolke
import UI.CharakterVorteile
import CharakterMinderpaktWrapper
from Charakter import VariableKosten
from PyQt5 import QtWidgets, QtCore, QtGui
import logging
from EventBus import EventBus

class CharakterVorteileWrapper(QtCore.QObject):
    modified = QtCore.pyqtSignal()
    
    def __init__(self):
        super().__init__()
        logging.debug("Initializing VorteileWrapper...")
        self.formVor = QtWidgets.QWidget()
        self.uiVor = UI.CharakterVorteile.Ui_Form()
        self.uiVor.setupUi(self.formVor)
        
        self.vorteilTypen = Wolke.DB.einstellungen["Vorteile: Typen"].toTextList()
        font = QtWidgets.QApplication.instance().font()
        self.uiVor.treeWidget.itemSelectionChanged.connect(self.vortClicked)
        self.uiVor.treeWidget.itemChanged.connect(self.itemChangeHandler)
        self.uiVor.treeWidget.header().setSectionResizeMode(0,1)
        
        self.uiVor.splitter.adjustSize()
        width = self.uiVor.splitter.size().width()
        self.uiVor.splitter.setSizes([int(width*0.6), int(width*0.4)])

        if len(Wolke.Char.vorteile) > 0:
            self.currentVort = Wolke.Char.vorteile[0]
        else:
            self.currentVort = ""
            
        self.itemWidgets = {}
        
        self.initVorteile()

    def initVorteile(self):
        self.uiVor.treeWidget.blockSignals(True)
        vortList = []
        for vortTyp in self.vorteilTypen:
            vortList.append([])

        for el in Wolke.DB.vorteile:
            idx = min(Wolke.DB.vorteile[el].typ, len(vortList) - 1)
            vortList[idx].append(el)
        
        for vorteile in vortList:
            vorteile.sort()

        rowHeight = 30

        for i in range(len(vortList)):
            parent = QtWidgets.QTreeWidgetItem(self.uiVor.treeWidget)
            parent.setText(0, self.vorteilTypen[i])
            parent.setText(1,"")
            parent.setExpanded(True)
            parent.setSizeHint(0, QtCore.QSize(0, rowHeight))
            font = parent.font(0)
            font.setBold(True)
            font.setCapitalization(QtGui.QFont.SmallCaps)
            font.setPointSize(Wolke.FontHeadingSizeL3)
            parent.setFont(0, font)
            for el in vortList[i]:
                child = QtWidgets.QTreeWidgetItem(parent)
                child.setText(0, Wolke.DB.vorteile[el].name)
                child.setSizeHint(0, QtCore.QSize(0, rowHeight))
                if el in Wolke.Char.vorteile:    
                    child.setCheckState(0, QtCore.Qt.Checked)
                else:
                    child.setCheckState(0, QtCore.Qt.Unchecked)
                if Wolke.DB.vorteile[el].variableKosten:
                    spin = QtWidgets.QSpinBox()
                    spin.setFixedHeight(rowHeight)
                    spin.setMinimum(-9999)
                    spin.setSuffix(" EP")
                    spin.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
                    spin.setMaximum(9999)
                    if el == Wolke.Char.minderpakt:
                        spin.setValue(20)
                        spin.setReadOnly(True)
                    else:
                        if el in Wolke.Char.vorteileVariable:
                            spin.setValue(Wolke.Char.vorteileVariable[el].kosten)
                        else:
                            spin.setValue(Wolke.DB.vorteile[el].kosten)
                    spin.setSingleStep(20)
                    self.itemWidgets[el] = spin
                    spin.valueChanged.connect(lambda state, name=el: self.spinnerChanged(name,state))
                    self.uiVor.treeWidget.setItemWidget(child,1,spin)
                else:
                    child.setText(1, "20 EP" if el == Wolke.Char.minderpakt else str(Wolke.DB.vorteile[el].kosten) + " EP")

                if Wolke.DB.vorteile[el].kommentarErlauben:
                    if child.checkState(0) == QtCore.Qt.Checked:
                        self.handleAddKommentarWidget(el, child)
                else:
                    child.setText(1, "20 EP" if el == Wolke.Char.minderpakt else str(Wolke.DB.vorteile[el].kosten) + " EP")
                if Wolke.Char.voraussetzungenPrüfen(Wolke.DB.vorteile[el].voraussetzungen):
                    child.setHidden(False)
                else:
                    child.setHidden(True)
        self.updateInfo()
        self.uiVor.treeWidget.blockSignals(False)
        
    def load(self):
        self.uiVor.treeWidget.blockSignals(True)
        vortList = []
        for vortTyp in self.vorteilTypen:
            vortList.append([])

        for el in Wolke.DB.vorteile:
            if Wolke.Char.voraussetzungenPrüfen(Wolke.DB.vorteile[el].voraussetzungen):
                idx = min(Wolke.DB.vorteile[el].typ, len(vortList) -1)
                vortList[idx].append(el)

        for i in range(len(vortList)):
            itm = self.uiVor.treeWidget.topLevelItem(i)
            if type(itm) != QtWidgets.QTreeWidgetItem:
                continue
            if itm == 0: 
                continue

            itm.setHidden(len(vortList[i]) == 0)

            for j in range(itm.childCount()):
                chi = itm.child(j)
                if type(chi) != QtWidgets.QTreeWidgetItem:
                    continue
                txt = chi.text(0)
                if txt in Wolke.Char.vorteile or txt == Wolke.Char.minderpakt:    
                    chi.setCheckState(0, QtCore.Qt.Checked)
                    if txt in Wolke.Char.vorteileVariable:
                        if Wolke.DB.vorteile[txt].variableKosten:
                            self.itemWidgets[txt].setValue(Wolke.Char.vorteileVariable[txt].kosten)
                        if Wolke.DB.vorteile[txt].kommentarErlauben:
                            self.handleAddKommentarWidget(txt, chi)
                else:
                    chi.setCheckState(0, QtCore.Qt.Unchecked) 
                if txt not in vortList[i] and txt != Wolke.Char.minderpakt:
                    chi.setHidden(True)
                    chi.setCheckState(0,QtCore.Qt.Unchecked)
                    Wolke.Char.removeVorteil(txt)
                else:
                    chi.setHidden(False)
                if (Wolke.DB.vorteile[txt].variableKosten or Wolke.DB.vorteile[txt].kommentarErlauben) and not txt in Wolke.Char.vorteileVariable:
                    if txt in self.itemWidgets:
                        self.setVariableKosten(txt, self.itemWidgets[txt].value(), "")
                    else:
                        self.setVariableKosten(txt, Wolke.DB.vorteile[txt].kosten, "")
        self.updateInfo()
        self.uiVor.treeWidget.blockSignals(False)
        
    def update(self):
        pass

    def setVariableKosten(self, name, kosten, kommentar):
        if not name in Wolke.Char.vorteileVariable:
            vk = VariableKosten()
            Wolke.Char.vorteileVariable[name] = vk

        if kosten != None:
            Wolke.Char.vorteileVariable[name].kosten = kosten
        if kommentar != None:
            Wolke.Char.vorteileVariable[name].kommentar = kommentar

    def spinnerChanged(self,name,state):
        self.setVariableKosten(name, state, None)
        self.currentVort = name<commit_msg>Vorteile tab: fix chosen minderpakt vorteil not being displayed if it is the only accessible vorteil of that category (i.e. Borbaradianer without Zauberer I).<commit_after># -*- coding: utf-8 -*-
"""
Created on Sat Mar 18 12:21:03 2017

@author: Aeolitus
"""
from Wolke import Wolke
import UI.CharakterVorteile
import CharakterMinderpaktWrapper
from Charakter import VariableKosten
from PyQt5 import QtWidgets, QtCore, QtGui
import logging
from EventBus import EventBus

class CharakterVorteileWrapper(QtCore.QObject):
    modified = QtCore.pyqtSignal()
    
    def __init__(self):
        super().__init__()
        logging.debug("Initializing VorteileWrapper...")
        self.formVor = QtWidgets.QWidget()
        self.uiVor = UI.CharakterVorteile.Ui_Form()
        self.uiVor.setupUi(self.formVor)
        
        self.vorteilTypen = Wolke.DB.einstellungen["Vorteile: Typen"].toTextList()
        font = QtWidgets.QApplication.instance().font()
        self.uiVor.treeWidget.itemSelectionChanged.connect(self.vortClicked)
        self.uiVor.treeWidget.itemChanged.connect(self.itemChangeHandler)
        self.uiVor.treeWidget.header().setSectionResizeMode(0,1)
        
        self.uiVor.splitter.adjustSize()
        width = self.uiVor.splitter.size().width()
        self.uiVor.splitter.setSizes([int(width*0.6), int(width*0.4)])

        if len(Wolke.Char.vorteile) > 0:
            self.currentVort = Wolke.Char.vorteile[0]
        else:
            self.currentVort = ""
            
        self.itemWidgets = {}
        
        self.initVorteile()

    def initVorteile(self):
        self.uiVor.treeWidget.blockSignals(True)
        vortList = []
        for vortTyp in self.vorteilTypen:
            vortList.append([])

        for el in Wolke.DB.vorteile:
            idx = min(Wolke.DB.vorteile[el].typ, len(vortList) - 1)
            vortList[idx].append(el)
        
        for vorteile in vortList:
            vorteile.sort()

        rowHeight = 30

        for i in range(len(vortList)):
            parent = QtWidgets.QTreeWidgetItem(self.uiVor.treeWidget)
            parent.setText(0, self.vorteilTypen[i])
            parent.setText(1,"")
            parent.setExpanded(True)
            parent.setSizeHint(0, QtCore.QSize(0, rowHeight))
            font = parent.font(0)
            font.setBold(True)
            font.setCapitalization(QtGui.QFont.SmallCaps)
            font.setPointSize(Wolke.FontHeadingSizeL3)
            parent.setFont(0, font)
            for el in vortList[i]:
                child = QtWidgets.QTreeWidgetItem(parent)
                child.setText(0, Wolke.DB.vorteile[el].name)
                child.setSizeHint(0, QtCore.QSize(0, rowHeight))
                if el in Wolke.Char.vorteile:    
                    child.setCheckState(0, QtCore.Qt.Checked)
                else:
                    child.setCheckState(0, QtCore.Qt.Unchecked)
                if Wolke.DB.vorteile[el].variableKosten:
                    spin = QtWidgets.QSpinBox()
                    spin.setFixedHeight(rowHeight)
                    spin.setMinimum(-9999)
                    spin.setSuffix(" EP")
                    spin.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
                    spin.setMaximum(9999)
                    if el == Wolke.Char.minderpakt:
                        spin.setValue(20)
                        spin.setReadOnly(True)
                    else:
                        if el in Wolke.Char.vorteileVariable:
                            spin.setValue(Wolke.Char.vorteileVariable[el].kosten)
                        else:
                            spin.setValue(Wolke.DB.vorteile[el].kosten)
                    spin.setSingleStep(20)
                    self.itemWidgets[el] = spin
                    spin.valueChanged.connect(lambda state, name=el: self.spinnerChanged(name,state))
                    self.uiVor.treeWidget.setItemWidget(child,1,spin)
                else:
                    child.setText(1, "20 EP" if el == Wolke.Char.minderpakt else str(Wolke.DB.vorteile[el].kosten) + " EP")

                if Wolke.DB.vorteile[el].kommentarErlauben:
                    if child.checkState(0) == QtCore.Qt.Checked:
                        self.handleAddKommentarWidget(el, child)
                else:
                    child.setText(1, "20 EP" if el == Wolke.Char.minderpakt else str(Wolke.DB.vorteile[el].kosten) + " EP")
                if Wolke.Char.voraussetzungenPrüfen(Wolke.DB.vorteile[el].voraussetzungen):
                    child.setHidden(False)
                else:
                    child.setHidden(True)
        self.updateInfo()
        self.uiVor.treeWidget.blockSignals(False)
        
    def load(self):
        self.uiVor.treeWidget.blockSignals(True)
        vortList = []
        for vortTyp in self.vorteilTypen:
            vortList.append([])

        for el in Wolke.DB.vorteile:
            if Wolke.Char.voraussetzungenPrüfen(Wolke.DB.vorteile[el].voraussetzungen) or el == Wolke.Char.minderpakt:
                idx = min(Wolke.DB.vorteile[el].typ, len(vortList) -1)
                vortList[idx].append(el)

        for i in range(len(vortList)):
            itm = self.uiVor.treeWidget.topLevelItem(i)
            if type(itm) != QtWidgets.QTreeWidgetItem:
                continue
            if itm == 0: 
                continue

            itm.setHidden(len(vortList[i]) == 0)

            for j in range(itm.childCount()):
                chi = itm.child(j)
                if type(chi) != QtWidgets.QTreeWidgetItem:
                    continue
                txt = chi.text(0)
                if txt in Wolke.Char.vorteile or txt == Wolke.Char.minderpakt:    
                    chi.setCheckState(0, QtCore.Qt.Checked)
                    if txt in Wolke.Char.vorteileVariable:
                        if Wolke.DB.vorteile[txt].variableKosten:
                            self.itemWidgets[txt].setValue(Wolke.Char.vorteileVariable[txt].kosten)
                        if Wolke.DB.vorteile[txt].kommentarErlauben:
                            self.handleAddKommentarWidget(txt, chi)
                else:
                    chi.setCheckState(0, QtCore.Qt.Unchecked) 
                if txt not in vortList[i]:
                    chi.setHidden(True)
                    chi.setCheckState(0,QtCore.Qt.Unchecked)
                    Wolke.Char.removeVorteil(txt)
                else:
                    chi.setHidden(False)
                if (Wolke.DB.vorteile[txt].variableKosten or Wolke.DB.vorteile[txt].kommentarErlauben) and not txt in Wolke.Char.vorteileVariable:
                    if txt in self.itemWidgets:
                        self.setVariableKosten(txt, self.itemWidgets[txt].value(), "")
                    else:
                        self.setVariableKosten(txt, Wolke.DB.vorteile[txt].kosten, "")
        self.updateInfo()
        self.uiVor.treeWidget.blockSignals(False)
        
    def update(self):
        pass

    def setVariableKosten(self, name, kosten, kommentar):
        if not name in Wolke.Char.vorteileVariable:
            vk = VariableKosten()
            Wolke.Char.vorteileVariable[name] = vk

        if kosten != None:
            Wolke.Char.vorteileVariable[name].kosten = kosten
        if kommentar != None:
            Wolke.Char.vorteileVariable[name].kommentar = kommentar

    def spinnerChanged(self,name,state):
        self.setVariableKosten(name, state, None)
        self.currentVort = name
{'fraction_non_alphanumeric': 0.10069421041989621, 'fraction_numerical': 0.008627080946282941, 'mean_word_length': 1.7290785359573293, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, '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': '4614548', 'n_tokens_mistral': 4705, 'n_tokens_neox': 4469, 'n_words': 702}