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

View File

@ -9,10 +9,41 @@ __docformat__ = 'restructuredtext en'
import re import re
from PyQt4.Qt import (QStandardItem, QStandardItemModel, Qt, QFont, from PyQt4.Qt import (QStandardItem, QStandardItemModel, Qt, QFont,
QApplication) QTreeView)
from calibre.ebooks.metadata.toc import TOC as MTOC 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): class TOCItem(QStandardItem):
def __init__(self, spine, toc, depth, all_items, parent=None): def __init__(self, spine, toc, depth, all_items, parent=None):
@ -25,9 +56,6 @@ class TOCItem(QStandardItem):
self.abspath = toc.abspath self.abspath = toc.abspath
self.fragment = toc.fragment self.fragment = toc.fragment
all_items.append(self) 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 = QFont(self.font())
self.bold_font.setBold(True) self.bold_font.setBold(True)
self.normal_font = self.font() self.normal_font = self.font()
@ -105,8 +133,6 @@ class TOCItem(QStandardItem):
self.is_being_viewed = is_being_viewed self.is_being_viewed = is_being_viewed
if changed: if changed:
self.setFont(self.bold_font if is_being_viewed else self.normal_font) 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): def __repr__(self):
return 'TOC Item: %s %s#%s'%(self.title, self.abspath, self.fragment) return 'TOC Item: %s %s#%s'%(self.title, self.abspath, self.fragment)