diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui index 6cf7ed077a..68f2b8b6ba 100644 --- a/src/calibre/gui2/main.ui +++ b/src/calibre/gui2/main.ui @@ -288,7 +288,7 @@ - + 0 @@ -311,7 +311,7 @@ - + Qt::Horizontal @@ -826,6 +826,12 @@
calibre/gui2/status.h
1 + + Splitter + QSplitter +
calibre/gui2/widgets.h
+ 1 +
diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 40f5b5b57e..849131b352 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -679,6 +679,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): bi_state = dynamic.get('book_info_state', None) if bi_state is not None: self.vertical_splitter.restoreState(bi_state) + self.horizontal_splitter.initialize() + self.vertical_splitter.initialize() self._add_filesystem_book = Dispatcher(self.__add_filesystem_book) v = self.library_view diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index c48ded1dc2..2259b77076 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -7,9 +7,9 @@ import re, os, traceback from PyQt4.Qt import QListView, QIcon, QFont, QLabel, QListWidget, \ QListWidgetItem, QTextCharFormat, QApplication, \ QSyntaxHighlighter, QCursor, QColor, QWidget, \ - QPixmap, QPalette, QTimer, QDialog, \ + QPixmap, QPalette, QTimer, QDialog, QSplitterHandle, \ QAbstractListModel, QVariant, Qt, SIGNAL, \ - QRegExp, QSettings, QSize, QModelIndex, \ + QRegExp, QSettings, QSize, QModelIndex, QSplitter, \ QAbstractButton, QPainter, QLineEdit, QComboBox, \ QMenu, QStringListModel, QCompleter, QStringList @@ -951,3 +951,35 @@ class PythonHighlighter(QSyntaxHighlighter): QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) QSyntaxHighlighter.rehighlight(self) QApplication.restoreOverrideCursor() + +class SplitterHandle(QSplitterHandle): + + def __init__(self, orientation, splitter): + QSplitterHandle.__init__(self, orientation, splitter) + splitter.splitterMoved.connect(self.splitter_moved, + type=Qt.QueuedConnection) + self.highlight = False + + def splitter_moved(self, *args): + oh = self.highlight + self.highlight = 0 in self.splitter().sizes() + if oh != self.highlight: + self.update() + + def paintEvent(self, ev): + QSplitterHandle.paintEvent(self, ev) + if self.highlight: + painter = QPainter(self) + painter.setClipRect(ev.rect()) + painter.fillRect(self.rect(), Qt.yellow) + +class Splitter(QSplitter): + + def createHandle(self): + return SplitterHandle(self.orientation(), self) + + def initialize(self): + for i in range(self.count()): + h = self.handle(i) + if h is not None: + h.splitter_moved()