📄 local_view.py
字号:
def on_updir_action_update(self, obj): obj.set_property('sensitive', self.__current_path != '/') return def on_updir_action_execute(self, obj, *args): """Enter the parent directory of the current directory. If current directory is root, do nothing.""" pos = self.__current_path.rindex(u'/') if pos == 0: pos = 1 self.set_path(self.__current_path[:pos]) return def on_queue_action_execute(self, obj, *args): self.__list.get_selection().selected_foreach(self.add_to_queue, None) return def on_transfer_queue_action_update(self, obj, *args): if self.__selected_count > 0: another_view = self.__main_window.get_another_view(self) obj.set_property('sensitive', another_view.is_ready()) else: obj.set_property('sensitive', FALSE) return def on_transfer_action_execute(self, obj, *args): self.on_queue_action_execute(obj, *args) self.__main_window.transfer_view.start_transfer(obj, *args) return def on_transfer_queue_as_action_update(self, obj, *args): if self.__selected_count == 1: another_view = self.__main_window.get_another_view(self) obj.set_property('sensitive', another_view.is_ready()) else: obj.set_property('sensitive', FALSE) return def on_transfer_as_action_execute(self, obj, *args): def on_dialog_response(dlg, resp, *args): v = utf8_to_unicode(string.strip(dlg.value)) dlg.destroy() if resp == RESPONSE_OK and v != '': self.__list.get_selection().selected_foreach( self.add_to_queue, v) self.__main_window.transfer_view.start_transfer(obj, None) return if len(self.__selections) != 1: return iter = self.__selections[0] info = self.__model.get_value(iter, LocalView.COL_INFO) d = GeneralInputDialog(_("Transfer As"), _("Name"), info.name) d.connect('response', on_dialog_response) resp = d.run() return def on_queue_as_action_execute(self, obj, *args): def on_dialog_response(dlg, resp, *args): v = utf8_to_unicode(string.strip(dlg.value)) dlg.destroy() if resp == RESPONSE_OK and v != '': self.__list.get_selection().selected_foreach( self.add_to_queue, v) return if len(self.__selections) != 1: return iter = self.__selections[0] info = self.__model.get_value(iter, LocalView.COL_INFO) d = GeneralInputDialog(_("Queue As"), _("Name"), info.name) d.connect('response', on_dialog_response) resp = d.run() return def on_delete_action_update(self, obj, *args): obj.set_property('sensitive', self.__selected_count > 0) return def on_delete_action_execute(self, obj, *args): def on_dialog_response(dlg, resp, *args): def delete_each(treemodel, path, iter): name = self.__model.get_value(iter, LocalView.COL_FILENAME) top = os.path.join(self.__current_path, name) if os.path.isdir(top): for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name)) os.rmdir(top) else: os.remove(top) return dlg.destroy() if resp == RESPONSE_YES: self.__list.get_selection().selected_foreach(delete_each) self.refresh() return dlg = MessageDialog(flags=DIALOG_MODAL, type=MESSAGE_QUESTION, buttons=BUTTONS_YES_NO, message_format='Are you sure?') dlg.connect('response', on_dialog_response) dlg.show() dlg.set_modal(TRUE) return def on_rename_action_update(self, obj, *args): obj.set_property('sensitive', self.__selected_count == 1) return def on_rename_action_execute(self, obj, *args): def on_dialog_response(dlg, resp, *args): v = string.strip(dlg.value) dlg.destroy() if resp == RESPONSE_OK and v != filename: src = os.path.join(self.__current_path, filename) dst = os.path.join(self.__current_path, utf8_to_unicode(v)) try: os.rename(src, dst) if os.path.dirname(src) == os.path.dirname(dst): self.__model.set_value(iter, LocalView.COL_FILENAME, v) else: self.__model.remove(iter) except OSError, (errno, errmsg): show_error_message(errmsg) return if len(self.__selections) != 1: return iter = self.__selections[0] filename = self.__model.get_value(iter, LocalView.COL_FILENAME) from general_input import GeneralInputDialog dlg = GeneralInputDialog(_("Rename"), _("Please input new name:"), filename) dlg.connect('response', on_dialog_response) dlg.run() return def on_refresh_action_execute(self, obj, *args): self.refresh() def on_mkdir_action_execute(self, obj, *args): def on_dialog_response(dlg, resp, *args): v = utf8_to_unicode(string.strip(dlg.value)) dlg.destroy() if resp == RESPONSE_OK and len(v) > 0: path = os.path.join(self.__current_path, v) try: os.mkdir(path) self.refresh() except OSError, (errno, errmsg): show_error_message(errmsg) return from general_input import GeneralInputDialog dlg = GeneralInputDialog(_("Make Folder"), _("Please input folder name:"), '') dlg.connect('response', on_dialog_response) resp = dlg.run() return def on_chdir_action_execute(self, obj, *args): def on_dialog_response(dlg, resp, *args): v = utf8_to_unicode(string.strip(dlg.value)) dlg.destroy() if resp == RESPONSE_OK and len(v) > 0: orig = self.__current_path try: self.set_path(v) except OSError, (errno, errmsg): show_error_message(errmsg) self.set_path(orig) from general_input import GeneralInputDialog dlg = GeneralInputDialog(_("Change Folder"), _("Please input folder name:"), self.__current_path) dlg.connect('response', on_dialog_response) resp = dlg.run() return def on_sort_action_execute(self, action, widget, *args): if self.__change_sort_menu_item: self.__change_sort_menu_item = False column, order = self.__model.get_sort_column_id() widget_name = widget.get_name() if widget_name == 'mi_local_arr_by_name': column = LocalView.COL_FILENAME elif widget_name == 'mi_local_arr_by_type': column = LocalView.COL_FILETYPE elif widget_name == 'mi_local_arr_by_size': column = LocalView.COL_FILESIZE elif widget_name == 'mi_local_arr_by_date': column = LocalView.COL_FILEMTIME elif widget_name == 'mi_local_arr_ascending': order = SORT_ASCENDING elif widget_name == 'mi_local_arr_descending': order = SORT_DESCENDING else: raise ValueError, widget_name self.__model.set_sort_column_id(column, order) self.__change_sort_menu_item = True return def on_list_sort_column_changed(self, obj, *args): if self.__change_sort_menu_item: self.__change_sort_menu_item = False column, order = obj.get_sort_column_id() if column == LocalView.COL_FILENAME: widget_name = 'mi_local_arr_by_name' elif column == LocalView.COL_FILETYPE: widget_name = 'mi_local_arr_by_type' elif column == LocalView.COL_FILESIZE: widget_name = 'mi_local_arr_by_size' elif column == LocalView.COL_FILEMTIME: widget_name = 'mi_local_arr_by_date' widget = self.__menu_xml.get_widget(widget_name) widget.set_active(TRUE) if order == SORT_ASCENDING: widget_name = 'mi_local_arr_ascending' elif order == SORT_DESCENDING: widget_name = 'mi_local_arr_descending' widget = self.__menu_xml.get_widget(widget_name) widget.set_active(TRUE) self.__change_sort_menu_item = True return def on_open_action_update(self, obj, *args): obj.set_property('sensitive', self.__selected_count == 1) return def on_open_action_execute(self, obj, *args): if len(self.__selections) != 1: return iter = self.__selections[0] info = self.__model.get_value(iter, LocalView.COL_INFO) if info.is_dir(): return fullpath = os.path.join(self.__current_path, info.name) mime_type = vfs.get_mime_type(fullpath) try: vfs.mime_get_description(mime_type) except ValueError: return app = vfs.mime_get_default_application(mime_type) try: (id, name, command, can_open_multiple_files, expects_uris, supported_uri_schemes, requires_terminal) = app except TypeError: return if expects_uris: fullpath = 'file://' + fullpath if not requires_terminal: os.spawnlp(os.P_NOWAIT, command, command, fullpath) else: terminal = 'gnome_terminal.wrapper' os.spawnlp(os.P_NOWAIT, terminal, terminal, '-e', command, fullpath) return def on_local_dir_entry_activate(self, obj, *args): new_path = self.__cmb_dir.child.get_text() if os.path.isdir(new_path): self.set_path(new_path) else: dlg = MessageDialog(flags=DIALOG_MODAL, type=MESSAGE_ERROR, buttons=BUTTONS_OK, message_format=_("Directory %s not found.") % new_path) dlg.connect('response', lambda obj, *args: obj.destroy()) dlg.show() dlg.set_modal(TRUE) return def is_ready(self): return True def on_auto_size_file_list_columns_change(self, config, id, entry, *args): for column in self.__list.get_columns(): if entry.value.get_bool(): column.set_sizing(TREE_VIEW_COLUMN_AUTOSIZE) else: column.set_sizing(TREE_VIEW_COLUMN_GROW_ONLY) return def on_use_custom_file_listing_font_change(self, config, id, entry, *args): self.__use_custom_file_listing_font = entry.value.get_bool() self.__change_font() return def on_file_listing_font_change(self, config, id, entry, *args): self.__file_listing_font = entry.value.get_string() self.__change_font() return def __change_font(self): for renderer in self.__text_renderers: if self.__use_custom_file_listing_font: renderer.set_property('font', self.__file_listing_font) else: renderer.set_property('font', None) return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -