1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
#------------------------------------------------------------------------------
# Copyright (c) 2007, Riverbank Computing Limited
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD license.
# However, when used with the GPL version of PyQt the additional terms described in the PyQt GPL exception also apply
#
# Author: Riverbank Computing Limited
# Description: <Enthought pyface package component>
#------------------------------------------------------------------------------
""" Mix-in class for split widgets. """
# Major package imports.
from pyface.qt import QtCore, QtGui
# Enthought library imports.
from traits.api import Callable, Enum, Float, HasTraits, provides
# Local imports.
from pyface.i_split_widget import ISplitWidget, MSplitWidget
@provides(ISplitWidget)
class SplitWidget(MSplitWidget, HasTraits):
""" The toolkit specific implementation of a SplitWidget. See the
ISPlitWidget interface for the API documentation.
"""
#### 'ISplitWidget' interface #############################################
direction = Enum('vertical', 'vertical', 'horizontal')
ratio = Float(0.5)
lhs = Callable
rhs = Callable
###########################################################################
# Protected 'ISplitWidget' interface.
###########################################################################
def _create_splitter(self, parent):
""" Create the toolkit-specific control that represents the widget. """
splitter = QtGui.QSplitter(parent)
# Yes, this is correct.
if self.direction == 'horizontal':
splitter.setOrientation(QtCore.Qt.Vertical)
# Only because the wx implementation does the same.
splitter.setChildrenCollapsible(False)
# Left hand side/top.
splitter.addWidget(self._create_lhs(splitter))
# Right hand side/bottom.
splitter.addWidget(self._create_rhs(splitter))
# Set the initial splitter position.
if self.direction == 'horizontal':
pos = splitter.sizeHint().height()
else:
pos = splitter.sizeHint().width()
splitter.setSizes([int(pos * self.ratio), int(pos * (1.0 - self.ratio))])
return splitter
def _create_lhs(self, parent):
""" Creates the left hand/top panel depending on the direction. """
if self.lhs is not None:
lhs = self.lhs(parent)
if not isinstance(lhs, QtGui.QWidget):
lhs = lhs.control
else:
# Dummy implementation - override!
lhs = QtGui.QWidget(parent)
return lhs
def _create_rhs(self, parent):
""" Creates the right hand/bottom panel depending on the direction. """
if self.rhs is not None:
rhs = self.rhs(parent)
if not isinstance(rhs, QtGui.QWidget):
rhs = rhs.control
else:
# Dummy implementation - override!
rhs = QtGui.QWidget(parent)
return rhs
#### EOF ######################################################################
|