mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Start work on cover grid
This commit is contained in:
parent
b5f1010d8a
commit
3d7b8b939e
BIN
resources/images/grid.png
Normal file
BIN
resources/images/grid.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
@ -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('''
|
||||
|
29
src/calibre/gui2/library/alternate_views.py
Normal file
29
src/calibre/gui2/library/alternate_views.py
Normal 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
|
||||
|
@ -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)
|
||||
|
@ -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())
|
||||
|
Loading…
x
Reference in New Issue
Block a user