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) get_version)
from calibre.gui2 import config, is_widescreen, gprefs from calibre.gui2 import config, is_widescreen, gprefs
from calibre.gui2.library.views import BooksView, DeviceBooksView 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.tag_browser.ui import TagBrowserWidget
from calibre.gui2.book_details import BookDetails from calibre.gui2.book_details import BookDetails
from calibre.gui2.notify import get_notifier from calibre.gui2.notify import get_notifier
@ -116,7 +117,13 @@ class LibraryWidget(Splitter): # {{{
shortcut=_('Shift+Alt+B')) shortcut=_('Shift+Alt+B'))
parent.library_view = BooksView(parent) parent.library_view = BooksView(parent)
parent.library_view.setObjectName('library_view') 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): # {{{ class Stack(QStackedWidget): # {{{
@ -251,7 +258,7 @@ class LayoutMixin(object): # {{{
self.bd_splitter.addWidget(self.book_details) self.bd_splitter.addWidget(self.book_details)
self.bd_splitter.setCollapsible(self.bd_splitter.other_index, False) self.bd_splitter.setCollapsible(self.bd_splitter.other_index, False)
self.centralwidget.layout().addWidget(self.bd_splitter) self.centralwidget.layout().addWidget(self.bd_splitter)
button_order = ('tb', 'bd', 'cb') button_order = ('tb', 'bd', 'cb', 'gv')
# }}} # }}}
else: # wide {{{ else: # wide {{{
self.bd_splitter = Splitter('book_details_splitter', self.bd_splitter = Splitter('book_details_splitter',
@ -266,13 +273,16 @@ class LayoutMixin(object): # {{{
self.bd_splitter.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, self.bd_splitter.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,
QSizePolicy.Expanding)) QSizePolicy.Expanding))
self.centralwidget.layout().addWidget(self.bd_splitter) self.centralwidget.layout().addWidget(self.bd_splitter)
button_order = ('tb', 'cb', 'bd') button_order = ('tb', 'cb', 'bd', 'gv')
# }}} # }}}
self.status_bar = StatusBar(self) self.status_bar = StatusBar(self)
stylename = unicode(self.style().objectName()) 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: 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)) button.setIconSize(QSize(24, 24))
if isosx and stylename != u'Calibre': if isosx and stylename != u'Calibre':
button.setStyleSheet(''' 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, CcBoolDelegate, CcCommentsDelegate, CcDateDelegate, CcTemplateDelegate,
CcEnumDelegate, CcNumberDelegate, LanguagesDelegate) CcEnumDelegate, CcNumberDelegate, LanguagesDelegate)
from calibre.gui2.library.models import BooksModel, DeviceBooksModel 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.utils.config import tweaks, prefs
from calibre.gui2 import error_dialog, gprefs from calibre.gui2 import error_dialog, gprefs
from calibre.gui2.library import DEFAULT_SORT from calibre.gui2.library import DEFAULT_SORT
@ -141,6 +142,7 @@ class BooksView(QTableView): # {{{
QTableView.__init__(self, parent) QTableView.__init__(self, parent)
self.setProperty('highlight_current_item', 150) self.setProperty('highlight_current_item', 150)
self.row_sizing_done = False self.row_sizing_done = False
self.alternate_views = AlternateViews(self)
if not tweaks['horizontal_scrolling_per_column']: if not tweaks['horizontal_scrolling_per_column']:
self.setHorizontalScrollMode(self.ScrollPerPixel) self.setHorizontalScrollMode(self.ScrollPerPixel)

View File

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