Beispiel #1
0
class Login:
    PORTNO = 10102
    #BACKGROUND = "#c0a9cf"
    BACKGROUND = "#c098af"

    def __init__(self):
        self.window = Tk()
        self.window["bg"] = self.BACKGROUND
        self.window.title(APP_NAME)
        self.window.minsize(700, 550)

        tksupport.install(self.window)
        self.window.protocol("WM_DELETE_WINDOW", self.application_quit)

        self.createMenu()

        selectionGet = self.window.selection_get
        self.client = Client(self, selectionGet)
        self.client.pack()

        self.factory = pb.PBClientFactory()
        self.window.wait_visibility()
        self.logindialog = LoginDialog(self.window, self.loginSuccess, self.application_quit, REMOTE_SERVER, self.PORTNO, self.factory, self.client.cc)
        reactor.callWhenRunning(self.logindialog.run)
        reactor.run()

    def loginSuccess(self, avatar):
        self.client.setAvatar(avatar)
        #self.client.swb.focus_set()
        self.window.bind("<FocusIn>", lambda e: self.client.swb.focus_set())
        df = avatar.callRemote("getWbServer")
        df.addCallback(self.gotRootObject)
        df2 = avatar.callRemote("whoami")
        df2.addCallback(self.updateMenu)
        df3 = avatar.callRemote("myName")
        df3.addCallback(self.client.setName)
        df3.addCallback(lambda a: self.setWindowStatus())

    def setWindowStatus(self, desc=OUT):
        self.window.title(APP_NAME + " - " + self.client.name + " (" + statusMsg[desc] +")")

    def showRoomAdmin(self, event=None):
        self.client.showRooms()

    def showPostAdmin(self, event=None):
        self.client.showPost()

    def showQuestionAdmin(self, event=None):
        self.client.showQuestions()

    def showSubjectAdmin(self, event=None):
        self.client.showSubjects()

    def gotRootObject(self, root):
        self.client.setRoot(root)

    def createMenu(self):
        menubar = Menu(self.window)

        self.fileMenu = Menu(menubar, tearoff=0)
        self.fileMenu.add_command(label=_("Lista de aulas"), command=self.showRoomAdmin)
        self.fileMenu.add_command(label=_("Lista de materias"), command=self.showSubjectAdmin)
        self.fileMenu.add_separator()
        self.fileMenu.add_command(label=_("Imprimir"))
        self.fileMenu.add_separator()
        self.fileMenu.add_command(label=_("Salir"), command=self.application_quit)
        menubar.add_cascade(label=_("Archivo"), menu=self.fileMenu)

        self.editMenu = Menu(menubar, tearoff=0)
        menubar.add_cascade(label=_("Edicion"), menu=self.editMenu)

        self.emoticMenu = Menu(menubar, tearoff=0)
        menubar.add_cascade(label=_("Emoticonos"), menu=self.emoticMenu)

        self.symbolMenu = Menu(menubar, tearoff=0)
        menubar.add_cascade(label=_("Simbolos"), menu=self.symbolMenu)

        self.mathMenu = Menu(self.symbolMenu, tearoff=0)
        self.symbolMenu.add_cascade(label=_("Matematica"), menu=self.mathMenu)

        self.greekMenu = Menu(self.symbolMenu, tearoff=0)
        self.symbolMenu.add_cascade(label=_("Griego"), menu=self.greekMenu)

        self.helpMenu = Menu(menubar, tearoff=0)
        self.helpMenu.add_command(label=_("Manual de instrucciones"), command=self.showHelp)
        self.helpMenu.add_command(label=_("Acerca de..."), command=self.showAbout)
        menubar.add_cascade(label=_("Ayuda"), menu=self.helpMenu)

        self.linksMenu = Menu(menubar, tearoff=0)
        self.linksMenu.add_command(label=_("Links utiles"), command=self.showLinks)
        menubar.add_cascade(label=_("Links"), menu=self.linksMenu)

        self.window.config(menu=menubar)

    def showHelp(self):
        webbrowser.open(APP_URL + '/content/help.html', new=0)

    def showLinks(self):
        webbrowser.open(APP_URL + '/content/links.html', new=0)

    def showAbout(self):
        pass

    def updateMenu(self, whoami):
        if whoami == TUTOR:
            self.fileMenu.insert_command(1, label=_("Preguntas offline"), command=self.showQuestionAdmin)
            self.fileMenu.insert_command(2, label=_("Postprocesado de pizarras"), command=self.showPostAdmin)
        self.editMenu.add_command(label=_("Cortar"), accelerator="Ctrl-X", command=self.client.swb.wb.cutSelection)
        self.editMenu.add_command(label=_("Copiar"), accelerator="Ctrl-C", command=self.client.swb.wb.copySelection)
        self.editMenu.add_command(label=_("Pegar"), accelerator="Ctrl-V", command=self.client.swb.wb.paste)
        self.editMenu.add_separator()
        self.editMenu.add_command(label=_("Importar texto"), accelerator="Ctrl-B", command=self.client.swb.wb.pasteForeign)
        self._loadImgMenu(self.emoticMenu, EMOTIC)
        self._loadImgMenu(self.greekMenu, SYMBOL)
        self._loadImgMenu(self.mathMenu, MATH)

    def _loadImgMenu(self, menu, kind):
        first = self.client.swb.wb.imgs.firstKind(kind)
        q = self.client.swb.wb.imgs.getQKind(kind)
        for x in range(first, first + q):
            self._createImgOption(menu, x)

    def _createImgOption(self, menu, imgNumber):
        menu.add_command(image=self.client.swb.wb.imgs.getImg(imgNumber), command=lambda: self.client.swb.wb.putImg(imgNumber))

    def application_quit(self, widget=None):
        if reactor.running:
            reactor.stop()
        self.logindialog.destroy()
        self.window.quit()