forked from M-Labs/artiq
applets/simple: add TitleApplet (#376)
This commit is contained in:
parent
f530815305
commit
485f82b53b
|
@ -2,6 +2,7 @@ import logging
|
||||||
import argparse
|
import argparse
|
||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
|
import string
|
||||||
|
|
||||||
from quamash import QEventLoop, QtWidgets, QtGui, QtCore
|
from quamash import QEventLoop, QtWidgets, QtGui, QtCore
|
||||||
|
|
||||||
|
@ -177,8 +178,11 @@ class SimpleApplet:
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def emit_data_changed(self, data, mod_buffer):
|
||||||
|
self.main_widget.data_changed(data, mod_buffer)
|
||||||
|
|
||||||
def flush_mod_buffer(self):
|
def flush_mod_buffer(self):
|
||||||
self.main_widget.data_changed(self.data, self.mod_buffer)
|
self.emit_data_changed(self.data, self.mod_buffer)
|
||||||
del self.mod_buffer
|
del self.mod_buffer
|
||||||
|
|
||||||
def sub_mod(self, mod):
|
def sub_mod(self, mod):
|
||||||
|
@ -193,7 +197,7 @@ class SimpleApplet:
|
||||||
asyncio.get_event_loop().call_later(self.args.update_delay,
|
asyncio.get_event_loop().call_later(self.args.update_delay,
|
||||||
self.flush_mod_buffer)
|
self.flush_mod_buffer)
|
||||||
else:
|
else:
|
||||||
self.main_widget.data_changed(self.data, [mod])
|
self.emit_data_changed(self.data, [mod])
|
||||||
|
|
||||||
def subscribe(self):
|
def subscribe(self):
|
||||||
if self.args.embed is None:
|
if self.args.embed is None:
|
||||||
|
@ -224,3 +228,38 @@ class SimpleApplet:
|
||||||
self.ipc_close()
|
self.ipc_close()
|
||||||
finally:
|
finally:
|
||||||
self.loop.close()
|
self.loop.close()
|
||||||
|
|
||||||
|
|
||||||
|
class TitleApplet(SimpleApplet):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
SimpleApplet.__init__(self, *args, **kwargs)
|
||||||
|
self.argparser.add_argument("--title", default=None,
|
||||||
|
help="set title (can be a Python format "
|
||||||
|
"string where field names are dataset "
|
||||||
|
"names)")
|
||||||
|
|
||||||
|
def args_init(self):
|
||||||
|
SimpleApplet.args_init(self)
|
||||||
|
if self.args.title is not None:
|
||||||
|
self.dataset_title = set()
|
||||||
|
parsed = string.Formatter().parse(self.args.title)
|
||||||
|
for _, format_field, _, _ in parsed:
|
||||||
|
if format_field is None:
|
||||||
|
break
|
||||||
|
if not format_field:
|
||||||
|
raise ValueError("Invalid title format string")
|
||||||
|
self.dataset_title.add(format_field)
|
||||||
|
self.datasets |= self.dataset_title
|
||||||
|
|
||||||
|
def emit_data_changed(self, data, mod_buffer):
|
||||||
|
if self.args.title is not None:
|
||||||
|
title_values = {k: data.get(k, (False, None))[1]
|
||||||
|
for k in self.dataset_title}
|
||||||
|
try:
|
||||||
|
title = self.args.title.format(**title_values)
|
||||||
|
except:
|
||||||
|
logger.warning("failed to format title", exc_info=True)
|
||||||
|
title = self.args.title
|
||||||
|
else:
|
||||||
|
title = None
|
||||||
|
self.main_widget.data_changed(data, mod_buffer, title)
|
||||||
|
|
Loading…
Reference in New Issue