Dock to emit closed signal when closed. Temporary DockArea windows call close method of all docks when they are closed.

This commit is contained in:
dlidstrom 2015-03-14 22:55:16 -06:00
parent b700a1ad3d
commit 76dbdafacc
2 changed files with 17 additions and 4 deletions

View File

@ -7,6 +7,7 @@ from ..python2_3 import asUnicode
class Dock(QtGui.QWidget, DockDrop):
sigStretchChanged = QtCore.Signal()
sigClosed = QtCore.Signal(object)
def __init__(self, name, area=None, size=(10, 10), widget=None, hideTitle=False, autoOrientation=True, closable=False):
QtGui.QWidget.__init__(self)
@ -224,6 +225,7 @@ class Dock(QtGui.QWidget, DockDrop):
self.label.setParent(None)
self._container.apoptose()
self._container = None
self.sigClosed.emit(self)
def __repr__(self):
return "<Dock %s %s>" % (self.name(), self.stretch())

View File

@ -172,8 +172,7 @@ class DockArea(Container, QtGui.QWidget, DockDrop):
if self.home is None:
area = DockArea(temporary=True, home=self)
self.tempAreas.append(area)
win = QtGui.QMainWindow()
win.setCentralWidget(area)
win = TempAreaWindow(area)
area.win = win
win.show()
else:
@ -303,6 +302,11 @@ class DockArea(Container, QtGui.QWidget, DockDrop):
self.home.removeTempArea(self)
#self.close()
def clear(self):
docks = self.findAll()[1]
for dock in docks.values():
dock.close()
## PySide bug: We need to explicitly redefine these methods
## or else drag/drop events will not be delivered.
def dragEnterEvent(self, *args):
@ -318,4 +322,11 @@ class DockArea(Container, QtGui.QWidget, DockDrop):
DockDrop.dropEvent(self, *args)
class TempAreaWindow(QtGui.QMainWindow):
def __init__(self, area, **kwargs):
super().__init__(**kwargs)
self.setCentralWidget(area)
def closeEvent(self, *args, **kwargs):
self.centralWidget().clear()
super().closeEvent(*args, **kwargs)