forked from M-Labs/artiq
applets: properly name docks to support state save/restore
This commit is contained in:
parent
8844fba4c9
commit
f25b5442e7
|
@ -54,8 +54,8 @@ class AppletIPCServer(AsyncioParentComm):
|
||||||
|
|
||||||
|
|
||||||
class AppletDock(dockarea.Dock):
|
class AppletDock(dockarea.Dock):
|
||||||
def __init__(self, name, command):
|
def __init__(self, uid, name, command):
|
||||||
dockarea.Dock.__init__(self, "applet" + str(id(self)), # TODO
|
dockarea.Dock.__init__(self, "applet" + str(uid),
|
||||||
label="Applet: " + name,
|
label="Applet: " + name,
|
||||||
closable=True)
|
closable=True)
|
||||||
self.setMinimumSize(QtCore.QSize(500, 400))
|
self.setMinimumSize(QtCore.QSize(500, 400))
|
||||||
|
@ -125,6 +125,7 @@ class AppletsDock(dockarea.Dock):
|
||||||
def __init__(self, dock_area):
|
def __init__(self, dock_area):
|
||||||
self.dock_area = dock_area
|
self.dock_area = dock_area
|
||||||
self.dock_to_checkbox = dict()
|
self.dock_to_checkbox = dict()
|
||||||
|
self.applet_uids = set()
|
||||||
self.workaround_pyqtgraph_bug = False
|
self.workaround_pyqtgraph_bug = False
|
||||||
|
|
||||||
dockarea.Dock.__init__(self, "Applets")
|
dockarea.Dock.__init__(self, "Applets")
|
||||||
|
@ -168,8 +169,8 @@ class AppletsDock(dockarea.Dock):
|
||||||
|
|
||||||
self.table.cellChanged.connect(self.cell_changed)
|
self.table.cellChanged.connect(self.cell_changed)
|
||||||
|
|
||||||
def create(self, name, command):
|
def create(self, uid, name, command):
|
||||||
dock = AppletDock(name, command)
|
dock = AppletDock(uid, name, command)
|
||||||
# If a dock is floated and then dock state is restored, pyqtgraph
|
# If a dock is floated and then dock state is restored, pyqtgraph
|
||||||
# leaves a "phantom" window open.
|
# leaves a "phantom" window open.
|
||||||
if self.workaround_pyqtgraph_bug:
|
if self.workaround_pyqtgraph_bug:
|
||||||
|
@ -192,17 +193,17 @@ class AppletsDock(dockarea.Dock):
|
||||||
name = ""
|
name = ""
|
||||||
else:
|
else:
|
||||||
name = name.text()
|
name = name.text()
|
||||||
dock = self.create(name, command)
|
dock = self.create(item.applet_uid, name, command)
|
||||||
item.applet_dock = dock
|
item.applet_dock = dock
|
||||||
self.dock_to_checkbox[dock] = item
|
self.dock_to_checkbox[dock] = item
|
||||||
else:
|
else:
|
||||||
dock = getattr(item, "applet_dock", None)
|
dock = item.applet_dock
|
||||||
if dock is not None:
|
if dock is not None:
|
||||||
# This calls self.on_dock_closed
|
# This calls self.on_dock_closed
|
||||||
dock.close()
|
dock.close()
|
||||||
elif column == 1 or column == 2:
|
elif column == 1 or column == 2:
|
||||||
new_value = self.table.item(row, column).text()
|
new_value = self.table.item(row, column).text()
|
||||||
dock = getattr(self.table.item(row, 0), "applet_dock", None)
|
dock = self.table.item(row, 0).applet_dock
|
||||||
if dock is not None:
|
if dock is not None:
|
||||||
if column == 1:
|
if column == 1:
|
||||||
dock.rename(new_value)
|
dock.rename(new_value)
|
||||||
|
@ -217,6 +218,10 @@ class AppletsDock(dockarea.Dock):
|
||||||
checkbox_item.setCheckState(QtCore.Qt.Unchecked)
|
checkbox_item.setCheckState(QtCore.Qt.Unchecked)
|
||||||
|
|
||||||
def new(self):
|
def new(self):
|
||||||
|
uid = next(iter(set(range(len(self.applet_uids) + 1))
|
||||||
|
- self.applet_uids))
|
||||||
|
self.applet_uids.add(uid)
|
||||||
|
|
||||||
row = self.table.rowCount()
|
row = self.table.rowCount()
|
||||||
self.table.insertRow(row)
|
self.table.insertRow(row)
|
||||||
checkbox = QtWidgets.QTableWidgetItem()
|
checkbox = QtWidgets.QTableWidgetItem()
|
||||||
|
@ -224,6 +229,8 @@ class AppletsDock(dockarea.Dock):
|
||||||
QtCore.Qt.ItemIsUserCheckable |
|
QtCore.Qt.ItemIsUserCheckable |
|
||||||
QtCore.Qt.ItemIsEnabled)
|
QtCore.Qt.ItemIsEnabled)
|
||||||
checkbox.setCheckState(QtCore.Qt.Unchecked)
|
checkbox.setCheckState(QtCore.Qt.Unchecked)
|
||||||
|
checkbox.applet_uid = uid
|
||||||
|
checkbox.applet_dock = None
|
||||||
self.table.setItem(row, 0, checkbox)
|
self.table.setItem(row, 0, checkbox)
|
||||||
self.table.setItem(row, 1, QtWidgets.QTableWidgetItem())
|
self.table.setItem(row, 1, QtWidgets.QTableWidgetItem())
|
||||||
self.table.setItem(row, 2, QtWidgets.QTableWidgetItem())
|
self.table.setItem(row, 2, QtWidgets.QTableWidgetItem())
|
||||||
|
@ -237,7 +244,7 @@ class AppletsDock(dockarea.Dock):
|
||||||
selection = self.table.selectedRanges()
|
selection = self.table.selectedRanges()
|
||||||
if selection:
|
if selection:
|
||||||
row = selection[0].topRow()
|
row = selection[0].topRow()
|
||||||
dock = getattr(self.table.item(row, 0), "applet_dock", None)
|
dock = self.table.item(row, 0).applet_dock
|
||||||
if dock is not None:
|
if dock is not None:
|
||||||
asyncio.ensure_future(dock.restart())
|
asyncio.ensure_future(dock.restart())
|
||||||
|
|
||||||
|
@ -245,15 +252,18 @@ class AppletsDock(dockarea.Dock):
|
||||||
selection = self.table.selectedRanges()
|
selection = self.table.selectedRanges()
|
||||||
if selection:
|
if selection:
|
||||||
row = selection[0].topRow()
|
row = selection[0].topRow()
|
||||||
dock = getattr(self.table.item(row, 0), "applet_dock", None)
|
item = self.table.item(row, 0)
|
||||||
|
dock = item.applet_dock
|
||||||
if dock is not None:
|
if dock is not None:
|
||||||
# This calls self.on_dock_closed
|
# This calls self.on_dock_closed
|
||||||
dock.close()
|
dock.close()
|
||||||
|
self.applet_uids.remove(item.applet_uid)
|
||||||
self.table.removeRow(row)
|
self.table.removeRow(row)
|
||||||
|
|
||||||
|
|
||||||
async def stop(self):
|
async def stop(self):
|
||||||
for row in range(self.table.rowCount()):
|
for row in range(self.table.rowCount()):
|
||||||
dock = getattr(self.table.item(row, 0), "applet_dock", None)
|
dock = self.table.item(row, 0).applet_dock
|
||||||
if dock is not None:
|
if dock is not None:
|
||||||
await dock.terminate()
|
await dock.terminate()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue