mirror of https://github.com/m-labs/artiq.git
applets: two column table, remove spurious Qt text editors
This commit is contained in:
parent
6aaf6c8789
commit
ff20ed2710
|
@ -13,7 +13,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
|||
from artiq.protocols.pipe_ipc import AsyncioParentComm
|
||||
from artiq.protocols.logging import LogParser
|
||||
from artiq.protocols import pyon
|
||||
from artiq.gui.tools import QDockWidgetCloseDetect
|
||||
from artiq.gui.tools import QDockWidgetCloseDetect, LayoutWidget
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
@ -325,8 +325,8 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
self.applet_uids = set()
|
||||
|
||||
self.table = QtWidgets.QTreeWidget()
|
||||
self.table.setColumnCount(3)
|
||||
self.table.setHeaderLabels(["Enable", "Name", "Command"])
|
||||
self.table.setColumnCount(2)
|
||||
self.table.setHeaderLabels(["Name", "Command"])
|
||||
self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
|
||||
self.table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
|
||||
|
||||
|
@ -343,7 +343,7 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
self.setWidget(self.table)
|
||||
|
||||
completer_delegate = _CompleterDelegate()
|
||||
self.table.setItemDelegateForColumn(2, completer_delegate)
|
||||
self.table.setItemDelegateForColumn(1, completer_delegate)
|
||||
datasets_sub.add_setmodel_callback(completer_delegate.set_model)
|
||||
|
||||
self.table.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
|
||||
|
@ -378,10 +378,10 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
|
||||
def get_spec(self, item):
|
||||
if item.applet_spec_ty == "command":
|
||||
return {"ty": "command", "command": item.text(2)}
|
||||
return {"ty": "command", "command": item.text(1)}
|
||||
elif item.applet_spec_ty == "code":
|
||||
return {"ty": "code", "code": item.applet_code,
|
||||
"command": item.text(2)}
|
||||
"command": item.text(1)}
|
||||
else:
|
||||
raise ValueError
|
||||
|
||||
|
@ -389,13 +389,13 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
self.table.itemChanged.disconnect()
|
||||
try:
|
||||
item.applet_spec_ty = spec["ty"]
|
||||
item.setText(2, spec["command"])
|
||||
item.setText(1, spec["command"])
|
||||
if spec["ty"] == "command":
|
||||
item.setIcon(2, QtGui.QIcon())
|
||||
item.setIcon(1, QtGui.QIcon())
|
||||
if hasattr(item, "applet_code"):
|
||||
del item.applet_code
|
||||
elif spec["ty"] == "code":
|
||||
item.setIcon(2, QtWidgets.QApplication.style().standardIcon(
|
||||
item.setIcon(1, QtWidgets.QApplication.style().standardIcon(
|
||||
QtWidgets.QStyle.SP_FileIcon))
|
||||
item.applet_code = spec["code"]
|
||||
else:
|
||||
|
@ -416,9 +416,18 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
|
||||
def item_changed(self, item, column):
|
||||
if item.ty == "applet":
|
||||
new_value = item.text(column)
|
||||
dock = item.applet_dock
|
||||
if dock is not None:
|
||||
if column == 0:
|
||||
dock.rename(new_value)
|
||||
else:
|
||||
dock.spec = self.get_spec(item)
|
||||
|
||||
if column == 0:
|
||||
if item.checkState(0) == QtCore.Qt.Checked:
|
||||
name = item.text(1)
|
||||
if item.applet_dock is None:
|
||||
name = item.text(0)
|
||||
spec = self.get_spec(item)
|
||||
dock = self.create(item.applet_uid, name, spec)
|
||||
item.applet_dock = dock
|
||||
|
@ -432,14 +441,6 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
if dock is not None:
|
||||
# This calls self.on_dock_closed
|
||||
dock.close()
|
||||
elif column == 1 or column == 2:
|
||||
new_value = item.text(column)
|
||||
dock = item.applet_dock
|
||||
if dock is not None:
|
||||
if column == 1:
|
||||
dock.rename(new_value)
|
||||
else:
|
||||
dock.spec = self.get_spec(item)
|
||||
elif item.ty == "group":
|
||||
# To Qt's credit, it already does everything for us here.
|
||||
pass
|
||||
|
@ -459,7 +460,7 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
def walk(wi):
|
||||
for i in range(wi.childCount()):
|
||||
cwi = wi.child(i)
|
||||
existing_names.add(cwi.text(1))
|
||||
existing_names.add(cwi.text(0))
|
||||
walk(cwi)
|
||||
walk(self.table.invisibleRootItem())
|
||||
|
||||
|
@ -480,7 +481,7 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
|
||||
if name is None:
|
||||
name = self.get_untitled()
|
||||
item = QtWidgets.QTreeWidgetItem(["", name, ""])
|
||||
item = QtWidgets.QTreeWidgetItem([name, ""])
|
||||
item.ty = "applet"
|
||||
item.setFlags(QtCore.Qt.ItemIsSelectable |
|
||||
QtCore.Qt.ItemIsUserCheckable |
|
||||
|
@ -504,7 +505,7 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
def new_group(self, name=None, parent=None):
|
||||
if name is None:
|
||||
name = self.get_untitled()
|
||||
item = QtWidgets.QTreeWidgetItem(["", name])
|
||||
item = QtWidgets.QTreeWidgetItem([name])
|
||||
item.ty = "group"
|
||||
item.setFlags(QtCore.Qt.ItemIsSelectable |
|
||||
QtCore.Qt.ItemIsEditable |
|
||||
|
@ -519,6 +520,9 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
self.table.addTopLevelItem(item)
|
||||
else:
|
||||
parent.addChild(item)
|
||||
# HACK: make the cell non-editable. Qt doesn't even provide
|
||||
# a clean API for such a basic feature.
|
||||
self.table.setItemWidget(item, 1, QtWidgets.QLabel())
|
||||
return item
|
||||
|
||||
def new_with_parent(self, cb, **kwargs):
|
||||
|
@ -593,14 +597,14 @@ class AppletsDock(QtWidgets.QDockWidget):
|
|||
if cwi.ty == "applet":
|
||||
uid = cwi.applet_uid
|
||||
enabled = cwi.checkState(0) == QtCore.Qt.Checked
|
||||
name = cwi.text(1)
|
||||
name = cwi.text(0)
|
||||
spec = self.get_spec(cwi)
|
||||
geometry = cwi.applet_geometry
|
||||
if geometry is not None:
|
||||
geometry = bytes(geometry)
|
||||
state.append(("applet", uid, enabled, name, spec, geometry))
|
||||
elif cwi.ty == "group":
|
||||
name = cwi.text(1)
|
||||
name = cwi.text(0)
|
||||
expanded = cwi.isExpanded()
|
||||
state_child = self.save_state_item(cwi)
|
||||
state.append(("group", name, expanded, state_child))
|
||||
|
|
Loading…
Reference in New Issue