Example #1
0
class Abfrage(WindowAbfrage, QtGui.QWidget):
    """
    Fenster für die Abfrage
    """
    def __init__(self, parent, lektionen_ids, abfrage_haeufigkeit, verzoegerung, verzoegerungRichtig, meintenSie,
                 RichtigeAnzeigen, Richtung, distanz, sonderlektion, speicher='None'):
        super(Abfrage, self).__init__(parent)
        QtGui.QWidget.__init__(self, parent=None)
        self.setupUi(self)

        self.labZeit.setParent(self)
        self.labZeitEinblenden.setParent(self)

        self.datenbank = Datenbank.base("VokabelDatenbank.sqlite")
        self.sonderlektion = sonderlektion

        self.pBFortschritt.hilfsWidgets(self.hilfsWidget1, self.hilfsWidget2)

        self.cBPunkte.setCheckState(QtCore.Qt.Checked)

        self.labWeitereVokabeln.addWidgetToShow(self.pBFortschritt, self.hilfsWidget1, self.hilfsWidget2)

        self.labWeitereVokabeln.hide()
        self.pBFortschritt.addWidgetToShow(self.labWeitereVokabeln)

        self.cBPunkte.stateChanged.connect(self.sichtbarPunkte)

        self.font_dick = QtGui.QFont()
        self.font_dick.setBold(True)
        self.font_normal = QtGui.QFont()

        self.inGame = True

        self.zeit = Zeiten(self.labZeit)
        self.zeit.start()

        self.showTime = self.datenbank.getDataAsList("select zeitZeigen from einstellungen")[0][0]

        self.answer = True
        if self.showTime == "True":
            self.showTime = True

        else:
            self.showTime = False

        if not self.showTime:
            self.zeitSichtbar = False
            self.labZeit.hide()
        else:
            self.zeitSichtbar = True
            self.labZeitEinblenden.hide()


        #initiate hintfield charactercount
        self.labHint.setParent(self)
        self.labHint.setText("")
        self.hintVisible = True


        if speicher is 'None':
            open('zwischenSpeicher.fs', 'w').close()
            self.pBFortschritt.setValue(0)
            self.distance = distanz
            self.treffer = leve.Treffer(distanz)
            zeit = float(verzoegerung)*10**(-3)
            zeitRichtig = float(verzoegerungRichtig)*10**(-3)
            self.thread = ZeitThread(zeit)
            self.threadRichtig = ZeitThread(zeitRichtig)
            self.meinten_sie = meintenSie
            self.lektionsliste = []
            self.verzoegerung = verzoegerung
            self.verzoegerungRichtig = verzoegerungRichtig
            self.id_aktuell = 0
            self.vokabel_fremd = ""
            self.richtige_anzeigen = RichtigeAnzeigen
            self.richtung = Richtung
            self.labPunkte.setText('0')
            self.lektion = ""
            self.buch = ""
            self.vokabel_deutsch = ""
            self.vokabel_ids = self.lektionsid_to_vokid(lektionen_ids, int(abfrage_haeufigkeit))
            #self.abfragenGesamt = int(len(self.vokabel_ids)*int(abfrage_haeufigkeit))
            self.abfragenGesamt = len(self.vokabel_ids)
            self.lektion_ids = lektionen_ids
        else:
            file = open('zwischenSpeicher.fs', 'r')
            speicher = pickle.load(file)
            file.close()

            self.zeit.setTimeInSecouds(speicher.zeit)
            self.sonderlektion = self.sonderlektion

            self.pBFortschritt.setValue(speicher.Fortschritt)
            self.distance = speicher.distance
            self.treffer = leve.Treffer(speicher.distance)
            self.labGrammarHint.setText(speicher.grammarHint)
            zeit = float(speicher.verzoegerung)*10**(-3)
            #print("verz:"+str(speicher.verzoegerungRichtig))
            zeitRichtig = float(speicher.verzoegerungRichtig)*10**(-3)
            self.thread = ZeitThread(zeit)
            self.threadRichtig = ZeitThread(zeitRichtig)
            self.meinten_sie = speicher.meinten_sie
            self.lektionsliste = []
            self.verzoegerung = speicher.verzoegerung
            self.verzoegerungRichtig = speicher.verzoegerungRichtig
            self.id_aktuell = speicher.id_aktuell
            #print "danach: "+str(speicher.id_aktuell)
            self.vokabel_fremd = ""
            self.richtige_anzeigen = speicher.richtige_anzeigen
            self.richtung = speicher.richtung
            self.labPunkte.setText(speicher.labPunkte)
            self.lektion = ""
            self.buch = ""
            self.vokabel_deutsch = ""
            self.vokabel_ids = speicher.vokabel_ids
            self.abfragenGesamt = speicher.abfragenGesamt
            self.lektion_ids = speicher.lektion_ids
            self.vokabel_fremd = speicher.vokabel_fremd
            self.vokabel_deutsch = speicher.vokabel_deutsch
            self.buch = speicher.buch
            self.lektion = speicher.lektion

            self.labLektion.setText(unicode(self.lektion))
            self.labBuch.setText(str(self.buch))
            self.labRichtigFalsch.setText("")
            self.labBitteEingeben.setText("Bitte eingeben")
            self.labWeitereVokabeln.setText("Noch "+str(len(self.vokabel_ids)-self.id_aktuell)+" weitere Vokabeln")
            self.zeit.setRemainVok(len(self.vokabel_ids)-self.id_aktuell+1)

            if self.richtung == 1:
                self.labVokabelMeintenSie.setText(self.vokabel_deutsch)
            else:
                self.labVokabelMeintenSie.setText(self.vokabel_fremd)
            self.labMeintenSie.setText("")
            self.labMeintenSie.setText("")

            self.labHint.setWordWrap(True)

            # speicher.Info()

        spracheid_statement = "select sprache.id from sprache \
            join buecher on (sprache.id=buecher.id_sprache) \
            join lektionen on (lektionen.idBuch = buecher.id) \
            join vokabeln on (vokabeln.idlektion=lektionen.id) where vokabeln.id like " +str(self.vokabel_ids[0]) +" limit 1"
        # print self.spracheid_statement

        self.spracheid = self.datenbank.getDataAsList(spracheid_statement)[0][0]

        self.parent = parent

        self.connect(self.btnSaveExit, QtCore.SIGNAL("clicked()"), self.SaveAndExit)
        self.connect(self.thread, QtCore.SIGNAL("finished()"), self.weitere_vokabel)
        self.connect(self.threadRichtig, QtCore.SIGNAL("finished()"), self.weitere_vokabel)
        self.connect(self.btnWeiter, QtCore.SIGNAL("clicked()"), self.weitereVokabelKlick)
        self.connect(self.tfInput, QtCore.SIGNAL("textChanged(QString)"), self.repaintHint)




        self.btnWeiter.setShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Return))

        if speicher is 'None':
            self.weitere_vokabel()

        self.repaintHint()


        self.WindowAuwertung = None
        self.windowMeintenSie = None

    def hintSwitch(self):
        print("clicked on Hintfield")
        if self.hintVisible:
            self.hintVisible = False
        else:
            self.hintVisible = True

        self.repaintHint()

    def repaintHint(self):
        #print("repaint aufgerufen")

        if self.richtung == 1:
            compareVok = self.vokabel_fremd
        else:
            compareVok = self.vokabel_deutsch

        textHilfe = str(len(self.tfInput.text()))
        if len(compareVok) > len(self.tfInput.text()) and compareVok[len(self.tfInput.text())] == ' ':
            textHilfe = textHilfe+"_"
        if len(compareVok) > len(self.tfInput.text()) and compareVok[len(self.tfInput.text())] == ',':
            textHilfe = textHilfe+","
        if len(compareVok) > len(self.tfInput.text()) and compareVok[len(self.tfInput.text())] == '!':
            textHilfe = textHilfe+"!"
        if len(compareVok) > len(self.tfInput.text()) and compareVok[len(self.tfInput.text())] == '?':
            textHilfe = textHilfe+"?"
        if len(compareVok) > len(self.tfInput.text()) and compareVok[len(self.tfInput.text())] == '.':
            textHilfe = textHilfe+"."
        if len(compareVok) > len(self.tfInput.text()) and compareVok[len(self.tfInput.text())] == ':':
            textHilfe = textHilfe+":"

        textHilfe = textHilfe+"/"+str(len(compareVok))

        if self.hintVisible:
            self.labHint.setText(textHilfe)
        else:
            text = "Hinweis einblenden"
            self.labHint.setText(text)


    def zeitSwitch(self):
        if self.zeitSichtbar:
            # unsichtbar machen

            self.labZeitEinblenden.setVisible(True)
            self.labZeit.hide()
            self.zeitSichtbar = False

        else:
            # zeit einblenden

            self.labZeit.setVisible(True)
            self.labZeitEinblenden.hide()
            self.zeitSichtbar = True

    def sichtbarBar(self):
        if self.cBBar.checkState():
            self.pBFortschritt.setVisible(1)
        else:
            self.pBFortschritt.hide()

    def SaveAndExit(self):
        #self,pBFortschritt, distance, meintenSie, verzoegerung, id_aktuell, richtige_anzeigen, richtung, labPunkte, vokIds, abfragenGesamt, lektionen_ids, lektion, vokabel_deutsch, vokabel_fremd, buch
        #print type(self.distance)
        meinSpeicher = Speicher(self.pBFortschritt.value(), str(self.distance), str(self.meinten_sie), self.verzoegerung,
                                self.verzoegerungRichtig,
                                self.id_aktuell, self.richtige_anzeigen, self.richtung, self.labPunkte.text(), self.vokabel_ids,
                                self.abfragenGesamt, self.lektion_ids, self.lektion, self.vokabel_deutsch, self.vokabel_fremd, self.buch,
                                self.zeit.getTimeInSeconds(), self.sonderlektion, self.labGrammarHint.text())

        f = open("zwischenSpeicher.fs", 'w')
        pickle.dump(meinSpeicher, f)
        self.zeit.killThread()
        f.close()

        self.datenbank.setData("update AbfrageFortsetzen set datum = datetime() where id like 1")

        self.FortsetzenEnable()
        #self.parent.btnFortsetzen.setVisible(True)

        #self.parent.hide()
        self.close()

    def sichtbarPunkte(self):
        if self.cBPunkte.checkState():
            self.labPunkte.setVisible(1)
        else:
            self.labPunkte.hide()

    def weitere_vokabel(self):
        """
        weitere Vokabel ziehen
        """
        try:
            print("Aktuelle id: "+str(self.vokabel_ids[self.id_aktuell]))
        except:
            print("in die hose gegangen")

        if self.id_aktuell < len(self.vokabel_ids):

            daten = self.datenbank.getDataAsList("select lektionen.name, vokabeln.deutsch, vokabeln.fremd, buecher.name, formhinweise.hint from vokabeln "
                                                 "join lektionen on (lektionen.id=vokabeln.idlektion) "
                                                 "join buecher on (buecher.id=lektionen.idBuch) "
                                                 "left join formhinweise on (formhinweise.id = vokabeln.idHint)"
                                                 "where vokabeln.id like "+str(self.vokabel_ids[self.id_aktuell]))
            self.lektion = daten[0][0]
            self.vokabel_deutsch = unicode(daten[0][1])
            self.vokabel_fremd = daten[0][2]
            self.buch = daten[0][3]

            self.grammarHint = daten[0][4]



            if self.richtung == 1:
                self.labVokabelMeintenSie.setText(self.vokabel_deutsch)
            else:
                self.labVokabelMeintenSie.setText(self.vokabel_fremd)
            if daten[0][4] == None:
                self.labGrammarHint.setText("")
            else:
                self.labGrammarHint.setText(self.grammarHint)

            self.labLektion.setText(unicode(self.lektion))
            self.labBuch.setText(unicode(self.buch))
            self.labRichtigFalsch.setText("")
            self.labBitteEingeben.setText("Bitte eingeben")
            self.labWeitereVokabeln.setText("Noch "+str(len(self.vokabel_ids)-self.id_aktuell-1)+" weitere Vokabeln")

            print "id_aktuell: "+ str(self.id_aktuell)
            # print "Vokabelids: "+ str(self.vokabel_ids)

            self.pBFortschritt.setValue(int(round(float(str((self.abfragenGesamt-(len(self.vokabel_ids)-self.id_aktuell)) / self.abfragenGesamt*100)), 0)))

            self.zeit.setRemainVok(self.abfragenGesamt-self.id_aktuell)

            self.tfInput.setText("")
            self.tfInput.setFocus()
            self.labMeintenSie.setText("")

            self.id_aktuell += 1
            self.repaintHint()
        else:
            self.inGame = False
            print "fertig mit Abfragen"
            self.FortsetzenDisable()
            open("zwischenSpeicher.fs", 'w').close()

            Zeit10Voks, gewicht = self.datenbank.getDataAsList("select secPro10Vok, gewichtung from zeit")[0]

            zeit10Neu = (Zeit10Voks * gewicht + self.zeit.getTimeInSeconds()/self.abfragenGesamt *10)/(gewicht + 1)
            zeit10Neu = round(zeit10Neu, 0)
            updateStatement = "update zeit set secPro10Vok="+str(zeit10Neu)+", gewichtung="+str(gewicht+1)+" where id like 1"
            self.datenbank.setData(updateStatement)

            self.close()
            self.WindowAuwertung = Auswertung(self, self.labPunkte.text(), len(self.vokabel_ids), self.lektion_ids,
                                              self.sonderlektion)
            self.WindowAuwertung.show()

    def lektionsid_to_vokid(self, idliste, haeufigkeit):
        """
        zu lektions id gibts die Vokabelid
        """
        vokabelIds = []

        for i in idliste:
            if not self.sonderlektion:
                daten = self.datenbank.getDataAsList("select vokabeln.id from vokabeln "
                                                     "join lektionen on (vokabeln.idlektion=lektionen.id) "
                                                     "where lektionen.id like "+str(i))
            else:
                daten = self.datenbank.getDataAsList("select sondervokabeln.idvokabeln from sondervokabeln "
                                                     "join lektionen on (sondervokabeln.idsonderlektion=lektionen.id) "
                                                     "where lektionen.id like "+str(i)+" and "\
                                                     "sondervokabeln.show like 1")

            for n in daten:
                for k in range(haeufigkeit):
                    vokabelIds.append(n[0])

        zufall(vokabelIds)
        # print vokabelIds
        return vokabelIds

    def FortsetzenDisable(self):
        self.parent.FortsetzenDisable()

    def FortsetzenEnable(self):
        self.parent.FortsetzenEnable()

    def weitereVokabelKlick(self):

        if self.richtung == 1:
            # print type(self.vokabelFremd)
            # print type(str(self.tfInput.text().toUtf8()).decode("utf-8"))
            if self.vokabel_fremd == str(self.tfInput.text().toUtf8()).decode("utf-8"):
                # self.labRichtigFalsch.setText("Richtig")
                self.labBitteEingeben.setText("Richtig")

                updateStatement = "update vokabeln set richtig=richtig+1, zuletztrichtig=1 where id like "+str(self.vokabel_ids[self.id_aktuell-1])
                self.datenbank.setData(updateStatement)
                print("vok with id "+str(self.vokabel_ids[self.id_aktuell-1])+" updated")

                self.answer = True
                self.labPunkte.setText(str(float(self.labPunkte.text()) + 1))
                if not self.sonderlektion:
                    son = SonderFall(self.vokabel_ids[self.id_aktuell-1], 0)
                    son.richtig()
            else:
                if not self.sonderlektion:
                    son = SonderFall(self.vokabel_ids[self.id_aktuell-1], 0)
                    son.falsch()
                # self.labRichtigFalsch.setText("Falsch")
                self.labBitteEingeben.setText("Falsch")

                updateStatement = "update vokabeln set falsch=falsch+1, zuletztrichtig=0 where id like "+str(self.vokabel_ids[self.id_aktuell-1])
                self.datenbank.setData(updateStatement)
                print("vok with id "+str(self.vokabel_ids[self.id_aktuell-1])+" updated")

                self.answer = False
                if self.richtige_anzeigen:
                    self.labVokabelMeintenSie.setText(u"Richtig wäre: "+self.vokabel_fremd)
                if self.meinten_sie:

                    statement = "select vokabeln.fremd, vokabeln.id from sprache \
                                join buecher on (sprache.id=buecher.id_sprache) \
                                join lektionen on (lektionen.idBuch = buecher.id) \
                                join vokabeln on (vokabeln.idlektion=lektionen.id) where sprache.id like " +str(self.spracheid)
                    liste = self.datenbank.getDataAsList(statement)

                    self.treffer.setAktVergleich(liste, unicode(self.tfInput.text()), self.vokabel_ids[self.id_aktuell-1], 1)

                    daten = self.datenbank.getDataAsList("select fremd, deutsch from vokabeln \
                    "+self.ListeZuSql(self.treffer.getTreffer(), " id "))

                    if self.treffer.directStrike():

                        self.labBitteEingeben.setText("fast richtig")
                        self.labPunkte.setText(str(float(self.labPunkte.text()) + 0.5))

                    else:

                        liste = []
                        for i in daten:
                            liste.append(unicode(i[1])+" - "+unicode(i[0]))
                        #print "Fenster auf"
                        
                        if len(liste) > 1:
                            self.windowMeintenSie = MeintenSie(self, liste)
                            self.windowMeintenSie.show()
                        if len(liste) == 1:
                            self.labMeintenSie.setText("Meinten Sie: "+unicode(liste[0]))

        else:
            # Richtung = 2

            if self.Vergeleichsfaehigkeit(self.vokabel_deutsch) == \
                    self.Vergeleichsfaehigkeit(str(self.tfInput.text().toUtf8()).decode('utf-8')):

                self.labBitteEingeben.setText("Richtig")

                updateStatement = "update vokabeln set richtig=richtig+1, zuletztrichtig=1 where id like "+str(self.vokabel_ids[self.id_aktuell-1])
                self.datenbank.setData(updateStatement)
                print("vok with id "+str(self.vokabel_ids[self.id_aktuell-1])+" updated")


                self.answer = True
                self.labPunkte.setText(str(float(self.labPunkte.text()) + 1))
            else:
                self.labBitteEingeben.setText("Falsch")

                updateStatement = "update vokabeln set falsch=falsch+1, zuletztrichtig=0 where id like "+str(self.vokabel_ids[self.id_aktuell-1])
                self.datenbank.setData(updateStatement)
                print("vok with id "+str(self.vokabel_ids[self.id_aktuell-1])+" updated")

                self.answer = False
                if self.richtige_anzeigen:
                    self.labVokabelMeintenSie.setText(unicode(u"Richtig wäre: ")+unicode(self.vokabel_deutsch))
                if self.meinten_sie:

                    statement = "select vokabeln.deutsch, vokabeln.id from sprache \
                                join buecher on (sprache.id=buecher.id_sprache) \
                                join lektionen on (lektionen.idBuch = buecher.id) \
                                join vokabeln on (vokabeln.idlektion=lektionen.id) \
                                where sprache.id like " +str(self.spracheid)
                    liste = self.datenbank.getDataAsList(statement)

                    self.treffer.setAktVergleich(liste, unicode(self.tfInput.text()), self.vokabel_ids[self.id_aktuell-1], 2)

                    daten = self.datenbank.getDataAsList("select fremd, deutsch from vokabeln \
                    "+self.ListeZuSql(self.treffer.getTreffer(), " id "))

                    if self.treffer.directStrike():

                        #self.labRichtigFalsch.setText("fast richtig")
                        self.labBitteEingeben.setText("fast richtig")
                        self.labPunkte.setText(str(float(self.labPunkte.text()) + 0.5))
                    else:
                        #print "das Fensterding"
                        liste = []
                        for i in daten:
                            liste.append(unicode(i[1])+" - "+unicode(i[0]))
                        #print "Fenster auf"
                        if len(liste) > 1:
                            self.windowMeintenSie = MeintenSie(self, liste)
                            self.windowMeintenSie.show()
                        if len(liste) == 1:
                            self.labMeintenSie.setText("Meinten Sie: "+unicode(liste[0]))
        if self.answer:
            self.threadRichtig.start()
            print("Richtig Thread startet")
        else:
            self.thread.start()
            print("Falsche thread startet")

    def closeEvent(self, event):

        if self.inGame:
            box = QtGui.QMessageBox()

            boxText = "Wollen Sie die Abfrage sichern?"

            box.setText(boxText)

            btnJa = box.addButton(QtCore.QString(u"Ja"), QtGui.QMessageBox.AcceptRole)
            btnNein = box.addButton(QtCore.QString(u"Nein"), QtGui.QMessageBox.RejectRole)
            box.exec_()

            if box.clickedButton() == btnJa:
                self.SaveAndExit()
                event.accept()
            elif box.clickedButton() == btnNein:

                event.accept()

        else:
            event.accept()
        self.zeit.killThread()

    def Vergeleichsfaehigkeit(self, kette):
        
        #print "typen type:" + str(type(kette))
        
        if "(" in kette:
            kette = kette[:kette.find("(")]
        kette = kette.replace(",", "")
        kette = kette.replace(".", "")
        kette = kette.replace("!", "")
        kette = kette.replace("?", "")
        kette = kette.lower()
        kette = kette.strip()
        
        return kette
         
    def ListeZuSql(self, liste, args, where=True):
        if where:
            statement = "where "
        else:
            statement = ""
            
        if len(liste) < 1:
            statement += args+" like 'nix'   "
        for i in liste:
            statement += args+" like "+str(i)+" or "
        return statement[:-3]    
Example #2
0
    def weitere_vokabel(self):
        """
        weitere Vokabel ziehen
        """
        try:
            print("Aktuelle id: "+str(self.vokabel_ids[self.id_aktuell]))
        except:
            print("in die hose gegangen")

        if self.id_aktuell < len(self.vokabel_ids):

            daten = self.datenbank.getDataAsList("select lektionen.name, vokabeln.deutsch, vokabeln.fremd, buecher.name, formhinweise.hint from vokabeln "
                                                 "join lektionen on (lektionen.id=vokabeln.idlektion) "
                                                 "join buecher on (buecher.id=lektionen.idBuch) "
                                                 "left join formhinweise on (formhinweise.id = vokabeln.idHint)"
                                                 "where vokabeln.id like "+str(self.vokabel_ids[self.id_aktuell]))
            self.lektion = daten[0][0]
            self.vokabel_deutsch = unicode(daten[0][1])
            self.vokabel_fremd = daten[0][2]
            self.buch = daten[0][3]

            self.grammarHint = daten[0][4]



            if self.richtung == 1:
                self.labVokabelMeintenSie.setText(self.vokabel_deutsch)
            else:
                self.labVokabelMeintenSie.setText(self.vokabel_fremd)
            if daten[0][4] == None:
                self.labGrammarHint.setText("")
            else:
                self.labGrammarHint.setText(self.grammarHint)

            self.labLektion.setText(unicode(self.lektion))
            self.labBuch.setText(unicode(self.buch))
            self.labRichtigFalsch.setText("")
            self.labBitteEingeben.setText("Bitte eingeben")
            self.labWeitereVokabeln.setText("Noch "+str(len(self.vokabel_ids)-self.id_aktuell-1)+" weitere Vokabeln")

            print "id_aktuell: "+ str(self.id_aktuell)
            # print "Vokabelids: "+ str(self.vokabel_ids)

            self.pBFortschritt.setValue(int(round(float(str((self.abfragenGesamt-(len(self.vokabel_ids)-self.id_aktuell)) / self.abfragenGesamt*100)), 0)))

            self.zeit.setRemainVok(self.abfragenGesamt-self.id_aktuell)

            self.tfInput.setText("")
            self.tfInput.setFocus()
            self.labMeintenSie.setText("")

            self.id_aktuell += 1
            self.repaintHint()
        else:
            self.inGame = False
            print "fertig mit Abfragen"
            self.FortsetzenDisable()
            open("zwischenSpeicher.fs", 'w').close()

            Zeit10Voks, gewicht = self.datenbank.getDataAsList("select secPro10Vok, gewichtung from zeit")[0]

            zeit10Neu = (Zeit10Voks * gewicht + self.zeit.getTimeInSeconds()/self.abfragenGesamt *10)/(gewicht + 1)
            zeit10Neu = round(zeit10Neu, 0)
            updateStatement = "update zeit set secPro10Vok="+str(zeit10Neu)+", gewichtung="+str(gewicht+1)+" where id like 1"
            self.datenbank.setData(updateStatement)

            self.close()
            self.WindowAuwertung = Auswertung(self, self.labPunkte.text(), len(self.vokabel_ids), self.lektion_ids,
                                              self.sonderlektion)
            self.WindowAuwertung.show()