From 0616422ee3da7790392859d60d2c054d80dba9a9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 24 Dec 2013 10:15:42 +0530 Subject: [PATCH] Allow creating new folders in the choose folder dialog --- .../gui2/tweak_book/editor/insert_resource.py | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/tweak_book/editor/insert_resource.py b/src/calibre/gui2/tweak_book/editor/insert_resource.py index 144cc198cd..855e5ce184 100644 --- a/src/calibre/gui2/tweak_book/editor/insert_resource.py +++ b/src/calibre/gui2/tweak_book/editor/insert_resource.py @@ -14,7 +14,7 @@ from PyQt4.Qt import ( QLabel, QPixmap, QApplication, QSizePolicy, QAbstractListModel, QVariant, Qt, QRect, QPainter, QModelIndex, QSortFilterProxyModel, QLineEdit, QToolButton, QIcon, QFormLayout, pyqtSignal, QTreeWidget, QTreeWidgetItem, - QVBoxLayout) + QVBoxLayout, QMenu, QInputDialog) from calibre import fit_image from calibre.constants import plugins @@ -340,6 +340,8 @@ class ChooseFolder(Dialog): # {{{ f.setHeaderHidden(True) f.itemDoubleClicked.connect(self.accept) l.addWidget(f) + f.setContextMenuPolicy(Qt.CustomContextMenu) + f.customContextMenuRequested.connect(self.show_context_menu) self.root = QTreeWidgetItem(f, ('/',)) def process(node, parent): @@ -353,6 +355,24 @@ class ChooseFolder(Dialog): # {{{ l.addWidget(self.bb) + def show_context_menu(self, point): + item = self.folders.itemAt(point) + if item is None: + return + m = QMenu(self) + m.addAction(QIcon(I('mimetypes/dir.png')), _('Create new folder'), partial(self.create_folder, item)) + m.popup(self.folders.mapToGlobal(point)) + + def create_folder(self, item): + text, ok = QInputDialog.getText(self, _('Folder name'), _('Enter a name for the new folder')) + if ok and unicode(text): + c = QTreeWidgetItem(item, (unicode(text),)) + c.setIcon(0, QIcon(I('mimetypes/dir.png'))) + for item in self.folders.selectedItems(): + item.setSelected(False) + c.setSelected(True) + self.folders.setCurrentItem(c) + def folder_path(self, item): ans = [] while item is not self.root: