site_manager.py
来自「CoralFTP是一款用Python语言编写的工作在GTK2环境下的FTP客户端」· Python 代码 · 共 920 行 · 第 1/3 页
PY
920 行
def on_sites_tree_button_release_event(self, obj, event): """This method is used to process right mouse double click.""" if event.button == 3: self.__menu.popup(None, None, None, 0, 0) return def on_close_action_execute(self, obj, *args): """Close the window""" self.__dialog.emit('response', gtk.RESPONSE_CLOSE) return def on_cb_anonymous_toggled(self, obj, *args): """This method is used to change username and password inputbox state when anonymous checkbox is changed.""" active = obj.get_property('active') widget = self.__xml.get_widget('entry_username') widget.set_property('sensitive', not active) widget = self.__xml.get_widget('entry_password') widget.set_property('sensitive', not active) return def on_sites_tree_cursor_changed(self, obj, *args): """When user select some site or folder in the sites tree, this method is invoked.""" tree, self.__selected = self.__tree.get_selection().get_selected() self.__parent = self.__model.iter_parent(self.__selected) self.__node = self.__model.get_value(self.__selected, SiteManagerDialog.COL_SITEINFO) self.__parent_node = self.__model.get_value( self.__selected, SiteManagerDialog.COL_SITEINFO) # check if the orignal selected node has been saved if self.__old_selected != None: node = self.__model.get_value(self.__old_selected, SiteManagerDialog.COL_SITEINFO) if isinstance(node, SiteInfo) and self.__check_change(self.__old_selected): dlg = MessageDialog(type=MESSAGE_QUESTION, buttons=BUTTONS_YES_NO, message_format="The site information has not been saved, do you want to save it?") resp = dlg.run() dlg.destroy() if resp == RESPONSE_YES: # check if the new sitename is validate widget = self.__xml.get_widget('entry_sitename') sitename = string.strip(widget.get_text()) node = self.__model.get_value( self.__old_selected, SiteManagerDialog.COL_SITEINFO) parent = self.__model.iter_parent(self.__old_selected) parent_node = self.__model.get_value( parent, SiteManagerDialog.COL_SITEINFO) error_message = self.__validate_node_name( name=sitename, parent=parent_node, node=node) if error_message != None: dlg = MessageDialog(type=MESSAGE_ERROR, buttons=BUTTONS_OK, message_format=error_message) dlg.run() dlg.destroy() # change back to the original selection self.__tree.get_selection().select_iter( self.__old_selected) return # save changes into site_manager.data self.__save_to_data(self.__old_selected) # read new information from site_manager.data widget = self.__xml.get_widget('nb_info') widget.set_property('sensitive', self.__node != None and isinstance(self.__node, SiteInfo)) self.__load_from_data(self.__selected) self.__old_selected = self.__selected return def on_apply_action_update(self, obj, *args): obj.set_property('sensitive', self.__selected != None and isinstance(self.__node, SiteInfo) and self.__check_change(self.__selected)) return def on_apply_action_execute(self, obj, *args): """When button apply is clicked, all the site info should be saved. Only current site is saved now.""" tree, selected = self.__tree.get_selection().get_selected() node = self.__model.get_value(selected, SiteManagerDialog.COL_SITEINFO) parent = self.__model.iter_parent(selected) parent_node = self.__model.get_value(parent, SiteManagerDialog.COL_SITEINFO) # make sure sitename is validate widget = self.__xml.get_widget('entry_sitename') sitename = string.strip(widget.get_text()) if sitename != node['site_name']: error_message = self.__validate_node_name(name=sitename, parent=parent_node, node=node) if error_message != None: dlg = MessageDialog(type=MESSAGE_ERROR, buttons=BUTTONS_OK, message_format=error_message) dlg.run() dlg.destroy() return # change site_name in path information self.__model.set_value(selected, SiteManagerDialog.COL_NAME, sitename) # save changes to site_manager.data self.__save_to_data(selected) return def on_new_site_action_update(self, obj, *args): obj.set_property('sensitive', self.__selected != None) return def on_new_site_action_execute(self, obj, *args): """Popup a dialog and add a new site to the current folder.""" from general_input import GeneralInputDialog dlg = GeneralInputDialog("Site name", "Please input name of the site:", "") resp = dlg.run() v = string.strip(dlg.value) dlg.destroy() if resp == RESPONSE_OK: # Find the folder of the selected node if it's a site. tree, selected = self.__tree.get_selection().get_selected() node = self.__model.get_value(selected, SiteManagerDialog.COL_SITEINFO) if isinstance(node, SiteFolder): folder = node else: folder_node = self.__model.iter_parent(selected) folder = self.__model.get_value( folder_node, SiteManagerDialog.COL_SITEINFO) error_message = self.__validate_node_name(v, folder) if error_message != None: dlg = MessageDialog(type=MESSAGE_ERROR, buttons=BUTTONS_OK, message_format=error_message) dlg.run() dlg.destroy() return # Get which folder is selected first, is a site is selected, # create a new site as the brother of the site. si = SiteInfo() si['site_name'] = v path = self.__site_manager.get_path(folder) self.__site_manager.add_site(path, si); self.__site_manager.save() return def on_new_group_action_update(self, obj, *args): obj.set_property('sensitive', self.__node != None and isinstance(self.__node, SiteFolder)) return def on_new_group_action_execute(self, obj, *args): """Popup a dialog and add a new folder to the current folder.""" from general_input import GeneralInputDialog dlg = GeneralInputDialog("Folder name", "Please input name of the folder:", "") resp = dlg.run() v = string.strip(dlg.value) dlg.destroy() if resp == RESPONSE_OK: tree, selected = self.__tree.get_selection().get_selected() node = self.__model.get_value(selected, SiteManagerDialog.COL_SITEINFO) if not isinstance(node, SiteFolder): raise ValueError, "Selected node should be a folder" # Check if the name contains backslash error_message = self.__validate_node_name(v, node, is_folder=True) if error_message != None: dlg = MessageDialog(type=MESSAGE_ERROR, buttons=BUTTONS_OK, message_format=error_message) dlg.run() dlg.destroy() return path = self.__site_manager.get_path(node) self.__site_manager.add_folder(path + "/" + v) self.__site_manager.save() return def on_delete_action_update(self, obj, *args): obj.set_property('sensitive', self.__parent != None) return def on_delete_action_execute(self, obj, *args): """Delete a site or folder.""" tree, selected = self.__tree.get_selection().get_selected() node = self.__model.get_value( selected, SiteManagerDialog.COL_SITEINFO) if isinstance(node, SiteFolder): child_num = self.__model.iter_n_children(selected) if child_num > 0: dlg = MessageDialog( type=MESSAGE_QUESTION, buttons=BUTTONS_YES_NO, message_format='Are you sure you wan\'t to delete the folder and all its contains?') resp = dlg.run() dlg.destroy() if resp != RESPONSE_YES: return path = self.__site_manager.get_path(node) self.__site_manager.delete_folder(path) self.__site_manager.save() else: dlg = MessageDialog( type=MESSAGE_QUESTION, buttons=BUTTONS_YES_NO, message_format='Are you sure you wan\'t to delete the site?') resp = dlg.run() dlg.destroy() if resp != RESPONSE_YES: return path = self.__site_manager.get_path(node) self.__site_manager.delete_site(path) self.__site_manager.save() return def on_rename_action_update(self, obj, *args): obj.set_property('sensitive', self.__node != None and self.__parent != None and isinstance(self.__node, SiteFolder)) return def on_rename_action_execute(self, obj, *args): "Start to rename a folder or a site." tree, selected = self.__tree.get_selection().get_selected() node = self.__model.get_value(selected, SiteManagerDialog.COL_SITEINFO) if not isinstance(node, SiteFolder): return old_name = node.name parent = self.__model.iter_parent(selected) parent_node = self.__model.get_value( parent, SiteManagerDialog.COL_SITEINFO) from general_input import GeneralInputDialog dlg = GeneralInputDialog("Rename folder", "Please input new name of the folder:", old_name) resp = dlg.run() new_name = string.strip(dlg.value) dlg.destroy() if old_name != new_name: error_message = self.__validate_node_name( new_name, parent_node, node=node, is_folder=True) if error_message != None: dlg = MessageDialog(type=MESSAGE_ERROR, buttons=BUTTONS_OK, message_format=error_message) dlg.run() dlg.destroy() else: node.name del parent_node[old_name] parent_node[new_name] = node self.__model.set_value( selected, SiteManagerDialog.COL_NAME, new_name) self.__site_manager.save() return def on_connect_action_update(self, obj, *args): obj.set_property('sensitive', self.__selected != None \ and isinstance(self.__node, SiteInfo)) return def on_connect_action_execute(self, obj, *args): self.on_apply_action_execute(self, obj) self.__dialog.emit("response", RESPONSE_OK) return def on_drag_drop(self, *args): print 123 def on_drag_data_get(self, widget, context, selection, targetType, eventTime): print targetType, eventTime if self.__selected != None: path = self.__model.get_path(self.__selected) selection.tree_set_row_drag_data(self.__model, path) return def on_drag_data_recv(self, widget, context, x, y, selection, targetType, time): print "recv" model, path = selection.tree_get_row_drag_data() return def get_selected_site(self): return self.__node# TODO:# 1. Connect button# 2. enable/disable button# 3. more options# 4. more right click item
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?