forked from M-Labs/artiq
gui/applets: support passing command line arguments to code applets
This commit is contained in:
parent
bf863053b3
commit
b982832ddc
|
@ -49,14 +49,14 @@ class AppletsCCBDock(applets.AppletsDock):
|
||||||
break
|
break
|
||||||
return parent, applet
|
return parent, applet
|
||||||
|
|
||||||
def ccb_create_applet(self, name, command_or_code, group=None, is_code=False):
|
def ccb_create_applet(self, name, command, group=None, code=None):
|
||||||
if not self.listen_action.isChecked():
|
if not self.listen_action.isChecked():
|
||||||
return
|
return
|
||||||
parent, applet = self.locate_applet(name, group, True)
|
parent, applet = self.locate_applet(name, group, True)
|
||||||
if is_code:
|
if code is None:
|
||||||
spec = {"ty": "code", "code": command_or_code}
|
spec = {"ty": "command", "command": command}
|
||||||
else:
|
else:
|
||||||
spec = {"ty": "command", "command": command_or_code}
|
spec = {"ty": "code", "code": code, "command": command}
|
||||||
if applet is None:
|
if applet is None:
|
||||||
applet = self.new(name=name, spec=spec, parent=parent)
|
applet = self.new(name=name, spec=spec, parent=parent)
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -156,7 +156,10 @@ class _AppletDock(QDockWidgetCloseDetect):
|
||||||
logger.debug("starting command %s for %s", command, self.applet_name)
|
logger.debug("starting command %s for %s", command, self.applet_name)
|
||||||
await self.start_process(shlex.split(command), None)
|
await self.start_process(shlex.split(command), None)
|
||||||
elif self.spec["ty"] == "code":
|
elif self.spec["ty"] == "code":
|
||||||
await self.start_process([sys.executable], self.spec["code"])
|
args = [sys.executable, "-"]
|
||||||
|
args += shlex.split(self.spec["command"])
|
||||||
|
logger.debug("starting code applet %s", self.applet_name)
|
||||||
|
await self.start_process(args, self.spec["code"])
|
||||||
else:
|
else:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
|
@ -377,7 +380,8 @@ class AppletsDock(QtWidgets.QDockWidget):
|
||||||
if item.applet_spec_ty == "command":
|
if item.applet_spec_ty == "command":
|
||||||
return {"ty": "command", "command": item.text(2)}
|
return {"ty": "command", "command": item.text(2)}
|
||||||
elif item.applet_spec_ty == "code":
|
elif item.applet_spec_ty == "code":
|
||||||
return {"ty": "code", "code": item.applet_code}
|
return {"ty": "code", "code": item.applet_code,
|
||||||
|
"command": item.text(2)}
|
||||||
else:
|
else:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
|
@ -385,13 +389,12 @@ class AppletsDock(QtWidgets.QDockWidget):
|
||||||
self.table.itemChanged.disconnect()
|
self.table.itemChanged.disconnect()
|
||||||
try:
|
try:
|
||||||
item.applet_spec_ty = spec["ty"]
|
item.applet_spec_ty = spec["ty"]
|
||||||
|
item.setText(2, spec["command"])
|
||||||
if spec["ty"] == "command":
|
if spec["ty"] == "command":
|
||||||
item.setText(2, spec["command"])
|
|
||||||
item.setIcon(2, QtGui.QIcon())
|
item.setIcon(2, QtGui.QIcon())
|
||||||
if hasattr(item, "applet_code"):
|
if hasattr(item, "applet_code"):
|
||||||
del item.applet_code
|
del item.applet_code
|
||||||
elif spec["ty"] == "code":
|
elif spec["ty"] == "code":
|
||||||
item.setText(2, "(code)")
|
|
||||||
item.setIcon(2, QtWidgets.QApplication.style().standardIcon(
|
item.setIcon(2, QtWidgets.QApplication.style().standardIcon(
|
||||||
QtWidgets.QStyle.SP_FileIcon))
|
QtWidgets.QStyle.SP_FileIcon))
|
||||||
item.applet_code = spec["code"]
|
item.applet_code = spec["code"]
|
||||||
|
@ -436,8 +439,7 @@ class AppletsDock(QtWidgets.QDockWidget):
|
||||||
if column == 1:
|
if column == 1:
|
||||||
dock.rename(new_value)
|
dock.rename(new_value)
|
||||||
else:
|
else:
|
||||||
self.set_spec(
|
dock.spec = self.get_spec(item)
|
||||||
item, {"ty": "command", "command": new_value})
|
|
||||||
elif item.ty == "group":
|
elif item.ty == "group":
|
||||||
# To Qt's credit, it already does everything for us here.
|
# To Qt's credit, it already does everything for us here.
|
||||||
pass
|
pass
|
||||||
|
|
Loading…
Reference in New Issue