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 + -
显示快捷键?