Source code for gui.bases.dockwidget
# -*- coding: utf-8 -*-
# gui/bases/dockwidget.py
from __future__ import absolute_import # PEP328
from gui.qt import QtCore, QtGui
from QtCore import QDir, QSize, Qt
from QtGui import QApplication, QDockWidget, QWidget
from gui.utils.signal import Signal
[docs]class DockWidget(QDockWidget):
"""
Widget for docking in a QMainWindow environment.
"""
def __init__(self, parent, childWidgetType, *args, **kwargs):
QDockWidget.__init__(self, parent)
self.setFeatures(QDockWidget.DockWidgetFloatable|
QDockWidget.DockWidgetMovable)
self.setAllowedAreas(Qt.AllDockWidgetAreas)
childWidget = self._setupChildWidget(childWidgetType, *args, **kwargs)
self.setWidget(childWidget)
self.visibilityChanged.connect(self.onVisibilityChange)
def _setupChildWidget(self, childWidgetType, *args, **kwargs):
childWidget = childWidgetType(*args, parent = self, **kwargs)
self.setObjectName(childWidget.objectName() + "Dock")
self.setWindowTitle(childWidget.windowTitle())
childWidget.title.registerUpdateFunc(self.setWindowTitle)
return childWidget
@property
def child(self):
assert isinstance(self.widget(), QWidget), \
"No child widget added to this DockWidget"
return self.widget()
[docs] def onVisibilityChange(self, visible):
if not visible or not self.isFloating():
return
# enlarge the floating window
size = QSize()
for widget in QApplication.topLevelWidgets():
size = size.expandedTo(widget.size())
self.resize(size)
# vim: set ts=4 sts=4 sw=4 tw=0: