From 382c52c8ccf325cc994157ef269465c31f054958 Mon Sep 17 00:00:00 2001 From: Marko Mecina <marko.mecina@univie.ac.at> Date: Sat, 24 Sep 2022 12:22:32 +0200 Subject: [PATCH] bugfixes in parameter plotter --- Ccs/plotter.py | 76 ++++++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 33 deletions(-) diff --git a/Ccs/plotter.py b/Ccs/plotter.py index 1193a65..f907ba7 100644 --- a/Ccs/plotter.py +++ b/Ccs/plotter.py @@ -42,7 +42,6 @@ gi.require_version('Notify', '0.7') from gi.repository import Gtk, Gdk, GdkPixbuf, GLib, Notify # NOQA # from event_storm_squasher import delayed -# import logging.handlers ActivePoolInfo = NamedTuple( 'ActivePoolInfo', [ @@ -57,8 +56,7 @@ fmtlist = {'INT8': 'b', 'UINT8': 'B', 'INT16': 'h', 'UINT16': 'H', 'INT32': 'i', class PlotViewer(Gtk.Window): - def __init__(self, loaded_pool=None, parent=None, poolmgr=None, given_cfg=None, refresh_rate=1, parameters={}, - start_live=False, logger=None): + def __init__(self, loaded_pool=None, refresh_rate=1, parameters=None, start_live=False, **kwargs): Gtk.Window.__init__(self) Notify.init('PlotViewer') @@ -84,9 +82,9 @@ class PlotViewer(Gtk.Window): self.refresh_rate = refresh_rate - if not self.cfg.has_section('ccs-plot_parameters'): - self.cfg.add_section('ccs-plot_parameters') - self.user_parameters = self.cfg['ccs-plot_parameters'] + if not self.cfg.has_section(cfl.CFG_SECT_PLOT_PARAMETERS): + self.cfg.add_section(cfl.CFG_SECT_PLOT_PARAMETERS) + self.user_parameters = self.cfg[cfl.CFG_SECT_PLOT_PARAMETERS] self.session_factory_idb = scoped_session_maker('idb') self.session_factory_storage = scoped_session_maker('storage') @@ -119,6 +117,9 @@ class PlotViewer(Gtk.Window): # self.connect('delete-event', self.write_cfg) self.connect('delete-event', self.live_plot_off) + if parameters is None: + parameters = {} + self.plot_parameters = parameters if len(parameters) != 0: for hk in parameters: @@ -366,7 +367,7 @@ class PlotViewer(Gtk.Window): # add user defined PARAMETERS self.useriter = parameter_model.append(None, ['User defined']) - for userpar in self.cfg['ccs-plot_parameters']: + for userpar in self.cfg[cfl.CFG_SECT_PLOT_PARAMETERS]: parameter_model.append(self.useriter, [userpar]) return parameter_model @@ -484,7 +485,7 @@ class PlotViewer(Gtk.Window): def add_user_parameter(self, widget, treeview): parameter_model = treeview.get_model() - param_values = cfl.add_user_parameter(parentwin = self) + param_values = cfl.add_user_parameter(parentwin=self) if param_values: label, apid, st, sst, sid, bytepos, fmt, offbi = param_values @@ -497,45 +498,54 @@ class PlotViewer(Gtk.Window): selection = treeview.get_selection() model, parpath = selection.get_selected_rows() - parameter_model = treeview.get_model() + # parameter_model = treeview.get_model() try: - parent = model[parpath].parent[0] # Check if selection is an object or the parent tab is selected - parname = model[parpath][0] - param_values = cfl.remove_user_parameter(parname) + if model[parpath].parent is not None and model[parpath].parent[0] == 'User defined': # Check if selection is an object or the parent tab is selected + parname = model[parpath][0] + param_values = cfl.remove_user_parameter(parname) + else: + param_values = None - except: - param_values = cfl.remove_user_parameter(parentwin=self) + except Exception as err: + self.logger.warning(err) + # param_values = cfl.remove_user_parameter(parentwin=self) + return if param_values: parameter_model = self.treeview.get_model() self.user_parameters.pop(param_values) parameter_model.remove(self.useriter) self.useriter = self.store.append(None, ['User defined']) - for userpar in self.cfg['ccs-plot_parameters']: + for userpar in self.cfg[cfl.CFG_SECT_PLOT_PARAMETERS]: parameter_model.append(self.useriter, [userpar]) - return - def edit_user_parameter(self, widget, treeview): selection = treeview.get_selection() model, parpath = selection.get_selected_rows() + try: - parent = model[parpath].parent[0] # Check if selection is an object or the parent tab is selected - parname = model[parpath][0] - param_values = cfl.edit_user_parameter(self, parname) - if param_values: - label, apid, st, sst, sid, bytepos, fmt, offbi = param_values - self.user_parameters[label] = json.dumps( - {'APID': apid, 'ST': st, 'SST': sst, 'SID': sid, 'bytepos': bytepos, 'format': fmt, 'offbi': offbi}) - except: - param_values = cfl.edit_user_parameter(self) - if param_values: - label, apid, st, sst, sid, bytepos, fmt, offbi = param_values - self.user_parameters[label] = json.dumps( - {'APID': apid, 'ST': st, 'SST': sst, 'SID': sid, 'bytepos': bytepos, 'format': fmt, 'offbi': offbi}) + if model[parpath].parent is not None and model[parpath].parent[0] == 'User defined': # Check if selection is an object or the parent tab is selected + parname = model[parpath][0] + param_values = cfl.edit_user_parameter(self, parname) + if param_values: + label, apid, st, sst, sid, bytepos, fmt, offbi = param_values + self.user_parameters[label] = json.dumps( + {'APID': apid, 'ST': st, 'SST': sst, 'SID': sid, 'bytepos': bytepos, 'format': fmt, 'offbi': offbi}) - return + model[parpath][0] = label # TODO: update listview when edit changed parname + + else: + return + # param_values = cfl.edit_user_parameter(self) + # if param_values: + # label, apid, st, sst, sid, bytepos, fmt, offbi = param_values + # self.user_parameters[label] = json.dumps( + # {'APID': apid, 'ST': st, 'SST': sst, 'SID': sid, 'bytepos': bytepos, 'format': fmt, 'offbi': offbi}) + + except Exception as err: + self.logger.warning(err) + return def create_univie_box(self): """ @@ -660,7 +670,7 @@ class PlotViewer(Gtk.Window): rows = rows.filter(DbTelemetry.stc == st, DbTelemetry.sst == sst, DbTelemetry.data.like(self.sid_position_query(st, sst, sid))) else: - userpar = json.loads(self.cfg['ccs-plot_parameters'][parameter]) + userpar = json.loads(self.cfg[cfl.CFG_SECT_PLOT_PARAMETERS][parameter]) rows = rows.filter(DbTelemetry.stc == userpar['ST'], DbTelemetry.sst == userpar['SST'], DbTelemetry.apid == userpar['APID']) if 'SID' in userpar and userpar['SID']: @@ -1128,7 +1138,7 @@ class PlotViewer(Gtk.Window): # Both are not in the same project do not change if not conn.Variables('main_instance') == self.main_instance: - self.logger.warning('Application {} is not in the same project as {}: Can not communicate'.format( + self.logger.error('Application {} is not in the same project as {}: Can not communicate'.format( self.my_bus_name, self.cfg['ccs-dbus_names'][application] + str(instance))) return -- GitLab