mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 18:54:09 -04:00
Add sorting to grid view context menu
This commit is contained in:
parent
f17708760d
commit
0c427b046b
@ -11,11 +11,11 @@ from time import time
|
|||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from threading import Lock, Event, Thread
|
from threading import Lock, Event, Thread
|
||||||
from Queue import Queue
|
from Queue import Queue
|
||||||
from functools import wraps
|
from functools import wraps, partial
|
||||||
|
|
||||||
from PyQt4.Qt import (
|
from PyQt4.Qt import (
|
||||||
QListView, QSize, QStyledItemDelegate, QModelIndex, Qt, QImage, pyqtSignal,
|
QListView, QSize, QStyledItemDelegate, QModelIndex, Qt, QImage, pyqtSignal,
|
||||||
QPalette, QColor, QItemSelection, QPixmap)
|
QPalette, QColor, QItemSelection, QPixmap, QMenu)
|
||||||
|
|
||||||
from calibre import fit_image
|
from calibre import fit_image
|
||||||
|
|
||||||
@ -50,6 +50,7 @@ class AlternateViews(object):
|
|||||||
view.setModel(self.main_view._model)
|
view.setModel(self.main_view._model)
|
||||||
view.selectionModel().currentChanged.connect(self.slave_current_changed)
|
view.selectionModel().currentChanged.connect(self.slave_current_changed)
|
||||||
view.selectionModel().selectionChanged.connect(self.slave_selection_changed)
|
view.selectionModel().selectionChanged.connect(self.slave_selection_changed)
|
||||||
|
view.sort_requested.connect(self.main_view.sort_by_named_field)
|
||||||
|
|
||||||
def show_view(self, key=None):
|
def show_view(self, key=None):
|
||||||
view = self.views[key]
|
view = self.views[key]
|
||||||
@ -194,6 +195,7 @@ def join_with_timeout(q, timeout=2):
|
|||||||
class GridView(QListView):
|
class GridView(QListView):
|
||||||
|
|
||||||
update_item = pyqtSignal(object)
|
update_item = pyqtSignal(object)
|
||||||
|
sort_requested = pyqtSignal(object, object)
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
QListView.__init__(self, parent)
|
QListView.__init__(self, parent)
|
||||||
@ -216,6 +218,7 @@ class GridView(QListView):
|
|||||||
self.render_thread = None
|
self.render_thread = None
|
||||||
self.update_item.connect(self.re_render, type=Qt.QueuedConnection)
|
self.update_item.connect(self.re_render, type=Qt.QueuedConnection)
|
||||||
self.doubleClicked.connect(parent.iactions['View'].view_triggered)
|
self.doubleClicked.connect(parent.iactions['View'].view_triggered)
|
||||||
|
self.gui = parent
|
||||||
self.context_menu = None
|
self.context_menu = None
|
||||||
|
|
||||||
def shown(self):
|
def shown(self):
|
||||||
@ -313,5 +316,25 @@ class GridView(QListView):
|
|||||||
|
|
||||||
def contextMenuEvent(self, event):
|
def contextMenuEvent(self, event):
|
||||||
if self.context_menu is not None:
|
if self.context_menu is not None:
|
||||||
self.context_menu.popup(event.globalPos())
|
lv = self.gui.library_view
|
||||||
|
menu = self._temp_menu = QMenu(self)
|
||||||
|
sm = QMenu(_('Sort by'), menu)
|
||||||
|
db = self.model().db
|
||||||
|
for col in lv.visible_columns:
|
||||||
|
m = db.metadata_for_field(col)
|
||||||
|
last = self.model().sorted_on
|
||||||
|
ascending = True
|
||||||
|
extra = ''
|
||||||
|
if last[0] == col:
|
||||||
|
ascending = not last[1]
|
||||||
|
extra = ' [%s]' % _('reverse')
|
||||||
|
sm.addAction('%s%s' % (m.get('name', col), extra), partial(self.do_sort, col, ascending))
|
||||||
|
|
||||||
|
for ac in self.context_menu.actions():
|
||||||
|
menu.addAction(ac)
|
||||||
|
menu.addMenu(sm)
|
||||||
|
menu.popup(event.globalPos())
|
||||||
event.accept()
|
event.accept()
|
||||||
|
|
||||||
|
def do_sort(self, column, ascending):
|
||||||
|
self.sort_requested.emit(column, ascending)
|
||||||
|
@ -845,6 +845,13 @@ class BooksView(QTableView): # {{{
|
|||||||
def column_map(self):
|
def column_map(self):
|
||||||
return self._model.column_map
|
return self._model.column_map
|
||||||
|
|
||||||
|
@property
|
||||||
|
def visible_columns(self):
|
||||||
|
h = self.horizontalHeader()
|
||||||
|
logical_indices = (x for x in xrange(h.count()) if not h.isSectionHidden(x))
|
||||||
|
rmap = {i:x for i, x in enumerate(self.column_map)}
|
||||||
|
return (rmap[h.visualIndex(x)] for x in logical_indices if h.visualIndex(x) > -1)
|
||||||
|
|
||||||
def refresh_book_details(self):
|
def refresh_book_details(self):
|
||||||
idx = self.currentIndex()
|
idx = self.currentIndex()
|
||||||
if idx.isValid():
|
if idx.isValid():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user