# Klassen zur Modellierung einer Lernkarte
# Autor: KB
# Datum: 16.06.09

# Grafische Benutzeroberfläche

from tkinter import *

class GUILernkartei():
    def __init__(self, kartenstapel, kartenmanager):
        # Referenzattribute zum Datenmodell
        self.kartenstapel = kartenstapel
        self.kartenmanager = kartenmanager

        # Erzeugung der Komponenten
        # Fenster
        self.tkFenster = Tk()
        self.tkFenster.title("Lernkartei")
        self.tkFenster.geometry('430x360')

        # Laden und Speichern
        self.framelernmanager = Frame(master=self.tkFenster, background="gray")
        self.framelernmanager.place(x=10, y=10, width=410, height=40)

        self.buttonLaden = Button(master=self.framelernmanager,
                                  text="Karten laden",
                                  command=self.ButtonLadenClick)
        self.buttonLaden.place(x=10, y=10, width=150, height=20)

        self.buttonSpeichern = Button(master=self.framelernmanager,
                                      text="Karten speichern",
                                      command=self.ButtonSpeichernClick)
        self.buttonSpeichern.place(x=250, y=10, width=150, height=20)

        # AuswahlmÃ¶glichkeiten
        self.frameZustandRand = Frame(master=self.tkFenster, background="gray")
        self.frameZustandRand.place(x=10, y=60, width=410, height=90)
        self.frameZustand = Frame(master=self.frameZustandRand)
        self.frameZustand.place(x=10, y=10, width=390, height=70)

        self.zustand = IntVar()

        self.radiobuttonAnzeigen = Radiobutton(master=self.frameZustand,
                                               text="Karten anzeigen",
                                               value=0,
                                               variable=self.zustand,
                                               command=self.RadioButtonAktalisieren)
        self.radiobuttonAnzeigen.place(x=10, y=10, height=20)
        self.radiobuttonAendern = Radiobutton(master=self.frameZustand,
                                              text="Karten aufnehmen und entfernen",
                                              value=1,
                                              variable=self.zustand,
                                              command=self.RadioButtonAktalisieren)
        self.radiobuttonAendern.place(x=10, y=40, height=20)
        self.radiobuttonAbfragenBedeutung = Radiobutton(master=self.frameZustand,
                                                        text="Stichwort abfragen",
                                                        value=2,
                                                        variable=self.zustand,
                                                        command=self.RadioButtonAktalisieren)
        self.radiobuttonAbfragenBedeutung.place(x=240, y=10, height=20)
        self.radiobuttonAbfragenBezeichner = Radiobutton(master=self.frameZustand,
                                                         text="Erläuterung abfragen",
                                                         value=3,
                                                         variable=self.zustand,
                                                         command=self.RadioButtonAktalisieren)
        self.radiobuttonAbfragenBezeichner.place(x=240, y=40, height=20)

        self.radiobuttonAnzeigen.select()

        # aktuelle Karte

        self.frameKarte = Frame(master=self.tkFenster, background="gray")
        self.frameKarte.place(x=10, y=160, width=410, height=190)

        self.frameKarteStichwort = Frame(master=self.frameKarte, background="#BDE2F3")
        self.frameKarteStichwort.place(x=10, y=40, width=150, height=110)

        self.frameKarteErlaeuterung = Frame(master=self.frameKarte, background="#BDE2F3")

        self.frameKarteErlaeuterung.place(x=250, y=40, width=150, height=110)

        self.entryKarteStichwort = Entry(master=self.frameKarteStichwort, text="")
        self.entryKarteStichwort.place(x=10, y=45, width=130, height=20)

        self.entryKarteErlaeuterung = Entry(master=self.frameKarteErlaeuterung, text="")
        self.entryKarteErlaeuterung.place(x=10, y=45, width=130, height=20)

        self.buttonAnfang = Button(master=self.frameKarte, text="Anfang", command=self.ButtonAnfangClick)
        self.buttonAnfang.place(x=170, y=40, width=70, height=20)

        self.buttonWeiter = Button(master=self.frameKarte, text="weiter", command=self.ButtonWeiterClick)
        self.buttonWeiter.place(x=170, y=70, width=70, height=20)

        self.buttonZurueck = Button(master=self.frameKarte, text="zurück", command=self.ButtonZurueckClick)
        self.buttonZurueck.place(x=170, y=100, width=70, height=20)

        self.buttonEnde = Button(master=self.frameKarte, text="Ende", command=self.ButtonEndeClick)
        self.buttonEnde.place(x=170, y=130, width=70, height=20)

        self.buttonStichwortAufdecken = Button(master=self.frameKarte, text="Stichwort aufdecken", command=self.ButtonBezeichnerAufdeckenClick)
        self.buttonStichwortAufdecken.place(x=10, y=160, width=150, height=20)

        self.buttonErlaeuterungAufdecken = Button(master=self.frameKarte, text="Erläuterung aufdecken", command=self.ButtonBedeutungAufdeckenClick)
        self.buttonErlaeuterungAufdecken.place(x=250, y=160, width=150, height=20)

        self.buttonAufnehmen = Button(master=self.frameKarte, text="Karte aufnehmen", command=self.ButtonAufnehmenClick)
        self.buttonAufnehmen.place(x=10, y=10, width=150, height=20)

        self.buttonLoeschen = Button(master=self.frameKarte, text="Karte entfernen", command=self.ButtonLoeschenClick)
        self.buttonLoeschen.place(x=250, y=10, width=150, height=20)

        self.buttonLeereKarte = Button(master=self.frameKarte, text="neue Karte", command=self.ButtonLeereKarteClick)
        self.buttonLeereKarte.place(x=170, y=10, width=70, height=20)

        self.buttonUmsortieren = Button(master=self.frameKarte, text="umsortieren", command=self.ButtonUmsortierenClick)
        self.buttonUmsortieren.place(x=170, y=160, width=70, height=20)


    def karteAnzeigen(self, z):
        if len(kartenstapel.karten) > 0:
            if z == 0 or z == 1:
                self.gesamteKarteAnzeigen()
        else:
            self.leereKarteAnzeigen()

    def gesamteKarteAnzeigen(self):
        self.entryKarteStichwort.delete(0, END)
        self.entryKarteStichwort.insert(0, self.kartenmanager.getAktuelleKarte().stichwort)
        self.entryKarteErlaeuterung.delete(0, END)
        self.entryKarteErlaeuterung.insert(0, self.kartenmanager.getAktuelleKarte().erlaeuterung)

    def leereKarteAnzeigen(self):
        self.entryKarteStichwort.delete(0, END)
        self.entryKarteErlaeuterung.delete(0, END)

    # Ereignisverarbeitung

    def RadioButtonAktalisieren(self):
        self.kartenmanager.anfangKartenstapel()
        self.karteAnzeigen(self.zustand.get())

    def ButtonAufnehmenClick(self):
        if self.zustand.get() == 1:
            bezeichner = self.entryKarteStichwort.get()
            bedeutungen = self.entryKarteErlaeuterung.get()
            self.kartenmanager.karteHinzufuegen(bezeichner, bedeutungen)
            self.karteAnzeigen(self.zustand.get())

    def ButtonLoeschenClick(self):
        if self.zustand.get() == 1:
            self.kartenmanager.aktuelleKarteLoeschen()
            self.karteAnzeigen(self.zustand.get())

    def ButtonLeereKarteClick(self):
        if self.zustand.get() == 1:
            self.leereKarteAnzeigen()

    def ButtonAnfangClick(self):
        self.kartenmanager.anfangKartenstapel()
        self.karteAnzeigen(self.zustand.get())

    def ButtonEndeClick(self):
        self.kartenmanager.endeKartenstapel()
        self.karteAnzeigen(self.zustand.get())

    def ButtonWeiterClick(self):
        self.kartenmanager.weiterKartenstapel()
        self.karteAnzeigen(self.zustand.get())

    def ButtonZurueckClick(self):
        self.kartenmanager.zurueckKartenstapel()
        self.karteAnzeigen(self.zustand.get())

    def ButtonLadenClick(self):
        pass

    def ButtonSpeichernClick(self):
        pass

    def ButtonUmsortierenClick(self):
        pass

    def ButtonBedeutungAufdeckenClick(self):
        pass

    def ButtonBezeichnerAufdeckenClick(self):
        pass

# Erzeugung der Datenmodell-Objekte
from lernkartei import *
kartenstapel = Kartenstapel()
kartenmanager = Kartenmanager()
kartenmanager.setKartenstapel(kartenstapel)

# Erzeugung des GUI-Objekts
gui_lernkartei = GUILernkartei(kartenstapel, kartenmanager)
gui_lernkartei.tkFenster.mainloop()
