Nicer styling for the ToC panel in the ebook viewer

This commit is contained in:
Kovid Goyal 2012-05-30 15:39:55 +05:30
parent 260e5a9e08
commit 9e51ab957c
2 changed files with 38 additions and 7 deletions

View File

@ -24,7 +24,7 @@
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QTreeView" name="toc"/>
<widget class="TOCView" name="toc"/>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
@ -322,6 +322,11 @@
<header>calibre/gui2/viewer/documentview.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>TOCView</class>
<extends>QTreeView</extends>
<header>calibre/gui2/viewer/toc.h</header>
</customwidget>
</customwidgets>
<resources>
<include location="../../../../resources/images.qrc"/>

View File

@ -9,10 +9,41 @@ __docformat__ = 'restructuredtext en'
import re
from PyQt4.Qt import (QStandardItem, QStandardItemModel, Qt, QFont,
QApplication)
QTreeView)
from calibre.ebooks.metadata.toc import TOC as MTOC
class TOCView(QTreeView):
def __init__(self, *args):
QTreeView.__init__(self, *args)
self.setAttribute(Qt.WA_OpaquePaintEvent, False)
self.setStyleSheet('''
QTreeView {
background-color: palette(window);
color: palette(text);
}
QTreeView::item {
border: none;
padding-top:0.5ex;
padding-bottom:0.5ex;
}
QTreeView::item:hover {
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);
border: 1px solid #bfcde4;
}
QHeaderView::section {
background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
stop:0 #616161, stop: 0.5 #505050,
stop: 0.6 #434343, stop:1 #656565);
color: white;
padding-left: 4px;
border: 1px solid #6c6c6c;
font-weight: bold;
}
''')
class TOCItem(QStandardItem):
def __init__(self, spine, toc, depth, all_items, parent=None):
@ -25,9 +56,6 @@ class TOCItem(QStandardItem):
self.abspath = toc.abspath
self.fragment = toc.fragment
all_items.append(self)
p = QApplication.palette()
self.base = p.base()
self.alternate_base = p.alternateBase()
self.bold_font = QFont(self.font())
self.bold_font.setBold(True)
self.normal_font = self.font()
@ -105,8 +133,6 @@ class TOCItem(QStandardItem):
self.is_being_viewed = is_being_viewed
if changed:
self.setFont(self.bold_font if is_being_viewed else self.normal_font)
self.setBackground(self.alternate_base if is_being_viewed else
self.base)
def __repr__(self):
return 'TOC Item: %s %s#%s'%(self.title, self.abspath, self.fragment)