Implement double click on splitters

This commit is contained in:
Kovid Goyal 2010-05-01 19:34:01 -06:00
parent 7a7c2c898d
commit 82c88f16b6

View File

@ -8,7 +8,7 @@ from PyQt4.Qt import QListView, QIcon, QFont, QLabel, QListWidget, \
QListWidgetItem, QTextCharFormat, QApplication, \ QListWidgetItem, QTextCharFormat, QApplication, \
QSyntaxHighlighter, QCursor, QColor, QWidget, \ QSyntaxHighlighter, QCursor, QColor, QWidget, \
QPixmap, QPalette, QTimer, QDialog, QSplitterHandle, \ QPixmap, QPalette, QTimer, QDialog, QSplitterHandle, \
QAbstractListModel, QVariant, Qt, SIGNAL, \ QAbstractListModel, QVariant, Qt, SIGNAL, pyqtSignal, \
QRegExp, QSettings, QSize, QModelIndex, QSplitter, \ QRegExp, QSettings, QSize, QModelIndex, QSplitter, \
QAbstractButton, QPainter, QLineEdit, QComboBox, \ QAbstractButton, QPainter, QLineEdit, QComboBox, \
QMenu, QStringListModel, QCompleter, QStringList QMenu, QStringListModel, QCompleter, QStringList
@ -954,10 +954,14 @@ class PythonHighlighter(QSyntaxHighlighter):
class SplitterHandle(QSplitterHandle): class SplitterHandle(QSplitterHandle):
double_clicked = pyqtSignal(object)
def __init__(self, orientation, splitter): def __init__(self, orientation, splitter):
QSplitterHandle.__init__(self, orientation, splitter) QSplitterHandle.__init__(self, orientation, splitter)
splitter.splitterMoved.connect(self.splitter_moved, splitter.splitterMoved.connect(self.splitter_moved,
type=Qt.QueuedConnection) type=Qt.QueuedConnection)
self.double_clicked.connect(splitter.double_clicked,
type=Qt.QueuedConnection)
self.highlight = False self.highlight = False
def splitter_moved(self, *args): def splitter_moved(self, *args):
@ -973,6 +977,9 @@ class SplitterHandle(QSplitterHandle):
painter.setClipRect(ev.rect()) painter.setClipRect(ev.rect())
painter.fillRect(self.rect(), Qt.yellow) painter.fillRect(self.rect(), Qt.yellow)
def mouseDoubleClickEvent(self, ev):
self.double_clicked.emit(self)
class Splitter(QSplitter): class Splitter(QSplitter):
def createHandle(self): def createHandle(self):
@ -983,3 +990,18 @@ class Splitter(QSplitter):
h = self.handle(i) h = self.handle(i)
if h is not None: if h is not None:
h.splitter_moved() h.splitter_moved()
def double_clicked(self, handle):
sizes = list(self.sizes())
if 0 in sizes:
idx = sizes.index(0)
sizes[idx] = 80
else:
idx = 0 if self.orientation() == Qt.Horizontal else 1
sizes[idx] = 0
self.setSizes(sizes)
self.initialize()