Start work on cover grid

This commit is contained in:
Kovid Goyal 2013-07-30 14:36:36 +05:30
parent b5f1010d8a
commit 3d7b8b939e
5 changed files with 51 additions and 10 deletions

BIN
resources/images/grid.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -15,7 +15,8 @@ from calibre.constants import (isosx, __appname__, preferred_encoding,
get_version)
from calibre.gui2 import config, is_widescreen, gprefs
from calibre.gui2.library.views import BooksView, DeviceBooksView
from calibre.gui2.widgets import Splitter
from calibre.gui2.library.alternate_views import GridView
from calibre.gui2.widgets import Splitter, LayoutButton
from calibre.gui2.tag_browser.ui import TagBrowserWidget
from calibre.gui2.book_details import BookDetails
from calibre.gui2.notify import get_notifier
@ -116,7 +117,13 @@ class LibraryWidget(Splitter): # {{{
shortcut=_('Shift+Alt+B'))
parent.library_view = BooksView(parent)
parent.library_view.setObjectName('library_view')
self.addWidget(parent.library_view)
stack = QStackedWidget(self)
av = parent.library_view.alternate_views
av.set_stack(stack)
parent.grid_view = GridView(parent)
parent.grid_view.setObjectName('grid_view')
av.add_view('grid', parent.grid_view)
self.addWidget(stack)
# }}}
class Stack(QStackedWidget): # {{{
@ -251,7 +258,7 @@ class LayoutMixin(object): # {{{
self.bd_splitter.addWidget(self.book_details)
self.bd_splitter.setCollapsible(self.bd_splitter.other_index, False)
self.centralwidget.layout().addWidget(self.bd_splitter)
button_order = ('tb', 'bd', 'cb')
button_order = ('tb', 'bd', 'cb', 'gv')
# }}}
else: # wide {{{
self.bd_splitter = Splitter('book_details_splitter',
@ -266,13 +273,16 @@ class LayoutMixin(object): # {{{
self.bd_splitter.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,
QSizePolicy.Expanding))
self.centralwidget.layout().addWidget(self.bd_splitter)
button_order = ('tb', 'cb', 'bd')
button_order = ('tb', 'cb', 'bd', 'gv')
# }}}
self.status_bar = StatusBar(self)
stylename = unicode(self.style().objectName())
self.grid_view_button = LayoutButton(I('grid.png'), _('Cover Grid'), parent=self, shortcut=_('Shift+Alt+G'))
self.grid_view_button.set_state_to_show()
for x in button_order:
button = getattr(self, x+'_splitter').button
button = self.grid_view_button if x == 'gv' else getattr(self, x+'_splitter').button
button.setIconSize(QSize(24, 24))
if isosx and stylename != u'Calibre':
button.setStyleSheet('''

View File

@ -0,0 +1,29 @@
#!/usr/bin/env python
# vim:fileencoding=utf-8
from __future__ import (unicode_literals, division, absolute_import,
print_function)
__license__ = 'GPL v3'
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
from PyQt4.Qt import QListView
class AlternateViews(object):
def __init__(self, main_view):
self.views = {}
self.current_view = self.main_view = main_view
self.stack = None
def set_stack(self, stack):
self.stack = stack
self.stack.addWidget(self.main_view)
def add_view(self, key, view):
self.views[key] = view
self.stack.addWidget(view)
self.stack.setCurrentIndex(0)
class GridView(QListView):
pass

View File

@ -19,6 +19,7 @@ from calibre.gui2.library.delegates import (RatingDelegate, PubDateDelegate,
CcBoolDelegate, CcCommentsDelegate, CcDateDelegate, CcTemplateDelegate,
CcEnumDelegate, CcNumberDelegate, LanguagesDelegate)
from calibre.gui2.library.models import BooksModel, DeviceBooksModel
from calibre.gui2.library.alternate_views import AlternateViews
from calibre.utils.config import tweaks, prefs
from calibre.gui2 import error_dialog, gprefs
from calibre.gui2.library import DEFAULT_SORT
@ -141,6 +142,7 @@ class BooksView(QTableView): # {{{
QTableView.__init__(self, parent)
self.setProperty('highlight_current_item', 150)
self.row_sizing_done = False
self.alternate_views = AlternateViews(self)
if not tweaks['horizontal_scrolling_per_column']:
self.setHorizontalScrollMode(self.ScrollPerPixel)

View File

@ -927,13 +927,14 @@ class SplitterHandle(QSplitterHandle):
class LayoutButton(QToolButton):
def __init__(self, icon, text, splitter, parent=None, shortcut=None):
def __init__(self, icon, text, splitter=None, parent=None, shortcut=None):
QToolButton.__init__(self, parent)
self.label = text
self.setIcon(QIcon(icon))
self.setCheckable(True)
self.splitter = splitter
if splitter is not None:
splitter.state_changed.connect(self.update_state)
self.setCursor(Qt.PointingHandCursor)
self.shortcut = ''
@ -942,14 +943,13 @@ class LayoutButton(QToolButton):
def set_state_to_show(self, *args):
self.setChecked(False)
label =_('Show')
self.setText(label + ' ' + self.label + u' (%s)'%self.shortcut)
self.setText(_('Show %(label)s [%(shortcut)s]')%dict(label=self.label, shortcut=self.shortcut))
self.setToolTip(self.text())
self.setStatusTip(self.text())
def set_state_to_hide(self, *args):
self.setChecked(True)
self.setText(_('Hide %(label)s %(shortcut)s')%dict(
self.setText(_('Hide %(label)s [%(shortcut)s]')%dict(
label=self.label, shortcut=self.shortcut))
self.setToolTip(self.text())
self.setStatusTip(self.text())