Allow creating new folders in the choose folder dialog

This commit is contained in:
Kovid Goyal 2013-12-24 10:15:42 +05:30
parent 4d9c30da56
commit 0616422ee3

View File

@ -14,7 +14,7 @@ from PyQt4.Qt import (
QLabel, QPixmap, QApplication, QSizePolicy, QAbstractListModel, QVariant, QLabel, QPixmap, QApplication, QSizePolicy, QAbstractListModel, QVariant,
Qt, QRect, QPainter, QModelIndex, QSortFilterProxyModel, QLineEdit, Qt, QRect, QPainter, QModelIndex, QSortFilterProxyModel, QLineEdit,
QToolButton, QIcon, QFormLayout, pyqtSignal, QTreeWidget, QTreeWidgetItem, QToolButton, QIcon, QFormLayout, pyqtSignal, QTreeWidget, QTreeWidgetItem,
QVBoxLayout) QVBoxLayout, QMenu, QInputDialog)
from calibre import fit_image from calibre import fit_image
from calibre.constants import plugins from calibre.constants import plugins
@ -340,6 +340,8 @@ class ChooseFolder(Dialog): # {{{
f.setHeaderHidden(True) f.setHeaderHidden(True)
f.itemDoubleClicked.connect(self.accept) f.itemDoubleClicked.connect(self.accept)
l.addWidget(f) l.addWidget(f)
f.setContextMenuPolicy(Qt.CustomContextMenu)
f.customContextMenuRequested.connect(self.show_context_menu)
self.root = QTreeWidgetItem(f, ('/',)) self.root = QTreeWidgetItem(f, ('/',))
def process(node, parent): def process(node, parent):
@ -353,6 +355,24 @@ class ChooseFolder(Dialog): # {{{
l.addWidget(self.bb) 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): def folder_path(self, item):
ans = [] ans = []
while item is not self.root: while item is not self.root: