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)
|
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('''
|
||||||
|
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,
|
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)
|
||||||
|
@ -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())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user