def __init__(self): Gtk.Window.__init__(self, title="Cloud Disk") self.set_border_width(10) self.maximize() #Setting up the self.grid in which the elements are to be positionned self.grid = Gtk.Grid() self.grid.set_column_homogeneous(True) self.grid.set_row_homogeneous(True) self.add(self.grid) #box = Gtk.Box(spacing=6) #self.add(box) self.tokens = auth.index() self.bdstoken, self.sign1, self.sign3, self.timestamp = self.tokens #self.connect('activate', self.on_login_dialog_close) #self.connect("delete-event", Gtk.main_quit) if not self.bdstoken: dialog = LoginDialog(self) #dialog.connect("close",self.on_login_dialog_close) response = dialog.run() dialog.destroy() if response == Gtk.ResponseType.DELETE_EVENT: print(response) print("quit") #self.close() self.destroy() return elif response == 11: print("login") else: return self.down_list = [] self.current_path = "/" self.current_selection = None ## num,pix,filename,size,path,isdir,fsid,cate,spath,speed,progress,status # 0 1 2 3 4 5 6 7 8 9 10 11 self.liststore = Gtk.ListStore(int, GdkPixbuf.Pixbuf, str, str, str, int, str, int, str, str, int, str) self.current_list = [] #self.loading_spin = Gtk.Spinner() #self.loading_spin.props.valign = Gtk.Align.CENTER #box.pack_start(self.loading_spin, False, False, 0) #self.grid.add(self.loading_spin) self.init_view(self.current_path) #self.spinn.hide() #list_json = cloudapi.list_path(self.current_path,500,settings.DRY,self.bdstoken) #logger.debug("list json: %s"%str(len(list_json)) #file_list = cloudapi.get_list(list_json) #logger.debug("file_list: %s"%str(file_list)) #self.populate_view(file_list) self.stop_gif = False #creating the treeview, making it use the filter as a model, and adding the columns self.treeview = Gtk.TreeView(model=self.liststore) for i, column_title in enumerate( ["Num", "Thumb", "File", "Size", "Path"]): if column_title != "Thumb": renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) else: renderer_pixbuf = Gtk.CellRendererPixbuf() column = Gtk.TreeViewColumn(column_title, renderer_pixbuf, pixbuf=i) #if not column_title == 'isdir' and not column_title == 'fsid' and not column_title == 'cate' : self.treeview.append_column(column) self.treeview.props.activate_on_single_click = False self.treeview.connect("row-activated", self.on_row_double_click) self.selection = self.treeview.get_selection() self.selection.connect("changed", self.on_tree_selection_changed) self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) #select = selection.get_selected_rows() #creating buttons to filter by programming language, and setting up their events self.buttons = list() for act in [ "Up level", "Refresh View", "Batch Add Task", "Remove File", "Download", "CleanUp", "Search" ]: button = Gtk.Button(act) self.buttons.append(button) funcname = "on_%s_button_clicked" % act.lower().replace(" ", "_") print(funcname) func = getattr(self, funcname) button.connect("clicked", func) #setting up the layout, putting the treeview in a scrollwindow, and the buttons in a row self.scrollable_treelist = Gtk.ScrolledWindow() self.scrollable_treelist.set_vexpand(True) #self.grid.attach(self.loading_spin, 0, 0, 10, 20) #self.grid.attach_next_to(self.scrollable_treelist,self.loading_spin, Gtk.PositionType.BOTTOM, 10, 23) self.grid.attach(self.scrollable_treelist, 0, 0, 8, 20) #box.pack_start(self.scrollable_treelist, True, True, 0) self.grid.attach_next_to(self.buttons[0], self.scrollable_treelist, Gtk.PositionType.BOTTOM, 1, 1) for i, button in enumerate(self.buttons[1:]): self.grid.attach_next_to(button, self.buttons[i], Gtk.PositionType.RIGHT, 1, 1) #self.add_action_widget(self.buttons[i],i+1) #box.pack_start(self.buttons[i], False, False, 0) self.scrollable_treelist.add(self.treeview) #box.show_all() self.grid.show_all()
def __init__(self): Gtk.Window.__init__(self, title="Cloud Disk") self.set_border_width(10) self.maximize() #Setting up the self.grid in which the elements are to be positionned self.grid = Gtk.Grid() self.grid.set_column_homogeneous(True) self.grid.set_row_homogeneous(True) self.add(self.grid) #box = Gtk.Box(spacing=6) #self.add(box) self.tokens = auth.index() self.bdstoken,self.sign1,self.sign3,self.timestamp = self.tokens #self.connect('activate', self.on_login_dialog_close) #self.connect("delete-event", Gtk.main_quit) if not self.bdstoken: dialog = LoginDialog(self) #dialog.connect("close",self.on_login_dialog_close) response = dialog.run() dialog.destroy() if response == Gtk.ResponseType.DELETE_EVENT: print(response) print("quit") #self.close() self.destroy() return elif response == 11: print("login") else: return self.down_list = [] self.current_path = "/" self.current_selection = None ## num,pix,filename,size,path,isdir,fsid,cate,spath,speed,progress,status # 0 1 2 3 4 5 6 7 8 9 10 11 self.liststore = Gtk.ListStore(int,GdkPixbuf.Pixbuf,str, str, str,int,str,int,str,str,int,str) self.current_list = [] #self.loading_spin = Gtk.Spinner() #self.loading_spin.props.valign = Gtk.Align.CENTER #box.pack_start(self.loading_spin, False, False, 0) #self.grid.add(self.loading_spin) self.init_view(self.current_path) #self.spinn.hide() #list_json = cloudapi.list_path(self.current_path,500,settings.DRY,self.bdstoken) #logger.debug("list json: %s"%str(len(list_json)) #file_list = cloudapi.get_list(list_json) #logger.debug("file_list: %s"%str(file_list)) #self.populate_view(file_list) self.stop_gif = False #creating the treeview, making it use the filter as a model, and adding the columns self.treeview = Gtk.TreeView(model=self.liststore) for i, column_title in enumerate(["Num","Thumb","File", "Size", "Path"]): if column_title != "Thumb": renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) else: renderer_pixbuf = Gtk.CellRendererPixbuf() column = Gtk.TreeViewColumn(column_title, renderer_pixbuf,pixbuf=i) #if not column_title == 'isdir' and not column_title == 'fsid' and not column_title == 'cate' : self.treeview.append_column(column) self.treeview.props.activate_on_single_click = False self.treeview.connect("row-activated",self.on_row_double_click) self.selection = self.treeview.get_selection() self.selection.connect("changed", self.on_tree_selection_changed) self.selection.set_mode(Gtk.SelectionMode.MULTIPLE) #select = selection.get_selected_rows() #creating buttons to filter by programming language, and setting up their events self.buttons = list() for act in ["Up level", "Refresh View", "Batch Add Task", "Remove File", "Download","CleanUp","Search"]: button = Gtk.Button(act) self.buttons.append(button) funcname = "on_%s_button_clicked"%act.lower().replace(" ","_") print(funcname) func = getattr(self, funcname) button.connect("clicked", func) #setting up the layout, putting the treeview in a scrollwindow, and the buttons in a row self.scrollable_treelist = Gtk.ScrolledWindow() self.scrollable_treelist.set_vexpand(True) #self.grid.attach(self.loading_spin, 0, 0, 10, 20) #self.grid.attach_next_to(self.scrollable_treelist,self.loading_spin, Gtk.PositionType.BOTTOM, 10, 23) self.grid.attach(self.scrollable_treelist, 0, 0, 8, 20) #box.pack_start(self.scrollable_treelist, True, True, 0) self.grid.attach_next_to(self.buttons[0], self.scrollable_treelist, Gtk.PositionType.BOTTOM, 1, 1) for i, button in enumerate(self.buttons[1:]): self.grid.attach_next_to(button, self.buttons[i], Gtk.PositionType.RIGHT, 1, 1) #self.add_action_widget(self.buttons[i],i+1) #box.pack_start(self.buttons[i], False, False, 0) self.scrollable_treelist.add(self.treeview) #box.show_all() self.grid.show_all()
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()