From 66c5a994a2cb782aed38a34ec47e9e9b882b3b7a Mon Sep 17 00:00:00 2001 From: Marko Mecina <marko.mecina@univie.ac.at> Date: Thu, 5 May 2022 16:59:30 +0200 Subject: [PATCH] rearrange content of TST MIB inspection tab --- Ccs/ccs_function_lib.py | 59 +++++++++++----- Tst/tst/data_pool_tab.py | 19 ++--- Tst/tst/tc_management.py | 126 +++++++++++---------------------- Tst/tst/tm_management.py | 148 +++++++++++++++++++-------------------- 4 files changed, 158 insertions(+), 194 deletions(-) diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index cb982c8..38fdff7 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -2660,12 +2660,16 @@ def get_tc_list(ccf_descr=None): if ccf_descr is None: cmds = scoped_session_idb.execute('SELECT ccf_cname, ccf_descr, ccf_descr2, ccf_type, ccf_stype, ccf_npars, ' - 'cpc_descr, cpc_dispfmt, cdf_eltype, cpc_pname, cdf_value, cpc_inter, cpc_radix FROM ccf LEFT JOIN cdf ON cdf.cdf_cname=ccf.ccf_cname ' - 'LEFT JOIN cpc ON cpc.cpc_pname=cdf.cdf_pname').fetchall() + 'cpc_descr, cpc_dispfmt, cdf_eltype, cpc_pname, cdf_value, cpc_inter, ' + 'cpc_radix FROM ccf LEFT JOIN cdf ON cdf.cdf_cname=ccf.ccf_cname ' + 'LEFT JOIN cpc ON cpc.cpc_pname=cdf.cdf_pname ' + 'ORDER BY ccf_type, ccf_stype, ccf_cname').fetchall() else: cmds = scoped_session_idb.execute('SELECT ccf_cname, ccf_descr, ccf_descr2, ccf_type, ccf_stype, ccf_npars, ' - 'cpc_descr, cpc_dispfmt, cdf_eltype, cpc_pname, cdf_value, cpc_inter, cpc_radix FROM ccf LEFT JOIN cdf ON cdf.cdf_cname=ccf.ccf_cname ' - 'LEFT JOIN cpc ON cpc.cpc_pname=cdf.cdf_pname WHERE ccf_descr="{}"'.format(ccf_descr)).fetchall() + 'cpc_descr, cpc_dispfmt, cdf_eltype, cpc_pname, cdf_value, cpc_inter, ' + 'cpc_radix FROM ccf LEFT JOIN cdf ON cdf.cdf_cname=ccf.ccf_cname ' + 'LEFT JOIN cpc ON cpc.cpc_pname=cdf.cdf_pname ' + 'WHERE ccf_descr="{}"'.format(ccf_descr)).fetchall() scoped_session_idb.close() @@ -2676,6 +2680,7 @@ def get_tc_list(ccf_descr=None): return cmd_dict + def get_tc_calibration_and_parameters(ccf_descr=None): if ccf_descr is None: @@ -2685,7 +2690,8 @@ def get_tc_calibration_and_parameters(ccf_descr=None): 'LEFT JOIN cpc ON cdf.cdf_pname=cpc.cpc_pname ' 'LEFT JOIN prv ON cpc.cpc_prfref=prv.prv_numbr ' 'LEFT JOIN pas ON cpc.cpc_pafref=pas.pas_numbr ' - 'WHERE cpc_descr IS NOT NULL').fetchall() + 'WHERE cpc_descr IS NOT NULL ORDER BY ccf_type, ccf_stype, ccf_cname, ' + 'cdf_bit, pas_alval').fetchall() else: calibrations = scoped_session_idb.execute('SELECT ccf_cname, ccf_descr, cdf_pname, cpc_descr, cpc_categ, cpc_ptc, ' @@ -2694,8 +2700,8 @@ def get_tc_calibration_and_parameters(ccf_descr=None): 'LEFT JOIN cpc ON cdf.cdf_pname=cpc.cpc_pname ' 'LEFT JOIN prv ON cpc.cpc_prfref=prv.prv_numbr ' 'LEFT JOIN pas ON cpc.cpc_pafref=pas.pas_numbr ' - 'WHERE cpc_descr IS NOT NULL ' - 'WHERE ccf_descr="{}"'.format(ccf_descr)).fetchall() + 'WHERE cpc_descr IS NOT NULL AND ' + 'ccf_descr="{}"'.format(ccf_descr)).fetchall() scoped_session_idb.close() @@ -2704,9 +2710,30 @@ def get_tc_calibration_and_parameters(ccf_descr=None): for row in calibrations: calibrations_dict.setdefault(row[0:5], []).append(row[5:11]) - return calibrations_dict + +def get_tm_parameter_list(st, sst, apid, pi1val): + que = 'SELECT pid_spid, pid_tpsd FROM pid WHERE pid_type={} AND pid_stype={} AND pid_apid={} AND pid_pi1_val={}'.format(st, sst, apid, pi1val) + spid, tpsd = scoped_session_idb.execute(que).fetchall()[0] + + if tpsd == -1: + que = 'SELECT plf_name, pcf_descr, plf_offby, pcf_ptc, pcf_pfc FROM plf LEFT JOIN pcf ON plf_name=pcf_name WHERE plf_spid={} ORDER BY plf_offby, plf_offbi'.format(spid) + else: + que = 'SELECT vpd_name, pcf_descr, NULL, pcf_ptc, pcf_pfc FROM vpd LEFT JOIN pcf ON vpd_name=pcf_name WHERE vpd_tpsd={} ORDER BY vpd_pos'.format(tpsd) + + res = scoped_session_idb.execute(que).fetchall() + + return res + + +def get_tm_parameter_info(pname): + que = 'SELECT ocp_lvalu, ocp_hvalu, ocp_type, txp_from, txp_altxt FROM pcf LEFT JOIN ocp ON pcf_name=ocp_name LEFT JOIN txp ON pcf_curtx=txp_numbr WHERE pcf_name="{}" ORDER BY txp_from, ocp_pos'.format(pname) + res = scoped_session_idb.execute(que).fetchall() + + return res + + def get_tm_id(pcf_descr=None): if pcf_descr is None: tms = scoped_session_idb.execute('SELECT pid_type, pid_stype, pid_apid, pid_pi1_val, pid_descr, pid_tpsd, ' @@ -2722,7 +2749,8 @@ def get_tm_id(pcf_descr=None): 'LEFT JOIN txf ' 'ON pcf_curtx = txf_numbr ' 'LEFT JOIN txp ' - 'ON txf_numbr = txp.txp_numbr').fetchall() + 'ON txf_numbr = txp.txp_numbr ' + 'ORDER BY pid_type, pid_stype, pid_apid, pid_pi1_val').fetchall() else: tms = scoped_session_idb.execute('SELECT pid_type, pid_stype, pid_apid, pid_pi1_val, pid_descr , pid_tpsd, ' @@ -2748,20 +2776,17 @@ def get_tm_id(pcf_descr=None): for row in tms: tms_dict.setdefault(row[0:5], []).append(row[5:]) - return tms_dict -def get_data_pool_items(pcf_descr = None): + +def get_data_pool_items(pcf_descr=None): if pcf_descr is None: data_pool = scoped_session_idb.execute('SELECT pcf_pid, pcf_descr, pcf_ptc, pcf_pfc ' - 'FROM pcf ' - 'WHERE pcf_pid <> 0').fetchall() + 'FROM pcf WHERE pcf_pid <> 0').fetchall() else: data_pool = scoped_session_idb.execute('SELECT pcf_pid, pcf_descr, pcf_ptc, pcf_pfc ' - 'FROM pcf ' - 'WHERE pcf_pid <> 0 ' - 'WHERE pcf_descr="{}"'.format(pcf_descr)).fetchall() + 'FROM pcf WHERE pcf_pid <> 0 AND pcf_descr="{}"'.format(pcf_descr)).fetchall() scoped_session_idb.close() @@ -2770,11 +2795,9 @@ def get_data_pool_items(pcf_descr = None): for row in data_pool: data_pool_dict.setdefault(row[0:4], []).append(row[5:]) - return data_pool_dict - def get_dp_items(source='mib'): fmt = {3: {4: 'UINT8', 12: 'UINT16', 14: 'UINT32'}, 4: {4: 'INT8', 12: 'INT16', 14: 'INT32'}, 5: {1: 'FLOAT'}, 9: {18: 'CUC'}, 7: {1: '1OCT'}} diff --git a/Tst/tst/data_pool_tab.py b/Tst/tst/data_pool_tab.py index 4e36de9..e6a250a 100644 --- a/Tst/tst/data_pool_tab.py +++ b/Tst/tst/data_pool_tab.py @@ -5,11 +5,11 @@ gi.require_version("GtkSource", "3.0") from gi.repository import Gtk, Gdk, GtkSource import confignator import sys + sys.path.append(confignator.get_option('paths', 'ccs')) import ccs_function_lib as cfl import s2k_partypes as s2k - dictionary_of_data_pool = cfl.get_data_pool_items() list_of_data_pool = list(dictionary_of_data_pool.keys()) @@ -17,6 +17,7 @@ data_pool_sublist = [] pid_list = [] + def get_data_pool_sublist(): for counter in list_of_data_pool: pcf_pid = str(counter[0]) @@ -36,9 +37,8 @@ def get_data_pool_sublist(): return data_pool_sublist, pid_list -data_pool_sublist, pid_list = get_data_pool_sublist() - +data_pool_sublist, pid_list = get_data_pool_sublist() class DataPoolTable(Gtk.Grid): @@ -79,9 +79,7 @@ class DataPoolTable(Gtk.Grid): # creating the treeview, making it use the filter a model, adding columns self.treeview = Gtk.TreeView.new_with_model(Gtk.TreeModelSort(self.data_pool_filter)) - for i, column_title in enumerate( - ["pcf_pid", "pcf_descr", "datatype"] - ): + for i, column_title in enumerate(["PID", "DESCR", "DATATYPE"]): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) column.set_sort_column_id(i) @@ -107,7 +105,6 @@ class DataPoolTable(Gtk.Grid): self.treeview.connect("drag-data-get", self.on_drag_data_get) self.treeview.connect("drag-begin", self.on_drag_begin) - self.show_all() def on_pid_combo_changed(self, combo): @@ -119,12 +116,10 @@ class DataPoolTable(Gtk.Grid): self.data_pool_filter.refilter() - def on_clear_button_clicked(self, widget): self.current_filter_data_pool = None self.data_pool_filter.refilter() - def item_selected(self, selection): model, row = selection.get_selected() if row is not None: @@ -133,8 +128,6 @@ class DataPoolTable(Gtk.Grid): else: pass - - def data_pool_filter_func(self, model, iter, data): if ( @@ -145,14 +138,10 @@ class DataPoolTable(Gtk.Grid): else: return model[iter][0] == self.current_filter_data_pool - - - def on_drag_data_get(self, treeview, drag_context, selection_data, info, time, *args): treeselection = treeview.get_selection() model, my_iter = treeselection.get_selected() selection_data.set_text(pid, -1) - def on_drag_begin(self, *args): pass diff --git a/Tst/tst/tc_management.py b/Tst/tst/tc_management.py index 2dee664..ca5b448 100644 --- a/Tst/tst/tc_management.py +++ b/Tst/tst/tc_management.py @@ -1,20 +1,16 @@ #!/usr/bin/env python3 import gi - gi.require_version("Gtk", "3.0") gi.require_version("GtkSource", "3.0") from gi.repository import Gtk, Gdk, GtkSource import confignator import sys + sys.path.append(confignator.get_option('paths', 'ccs')) import ccs_function_lib as cfl import s2k_partypes as s2k - - - - tc_type = None dictionary_of_commands = cfl.get_tc_list() @@ -26,8 +22,6 @@ subtype_list = [] descr_list = [] calibrations_list = [] - - for command in read_in_list_of_commands: command = list(command) del command[0] @@ -39,33 +33,28 @@ for command in read_in_list_of_commands: if command[0] not in type_list: type_list.append(command[0]) - type_list.sort() subtype_list.sort() - - - - dictionary_of_variables = cfl.get_tc_calibration_and_parameters() def get_cpc_descr(tc_type): - - # read_in_list_of_variables = list(dictionary_of_variables.keys()) cpc_descr = [] for key in dictionary_of_variables: if tc_type in key: - cpc_descr.append(key[3]) - cpc_descr = [[list_element] for list_element in cpc_descr] + ptc, pfc = dictionary_of_variables[key][0][:2] + cpc_descr.append([*key[2:4], s2k.ptt[ptc][pfc]]) + # cpc_descr = [[list_element] for list_element in cpc_descr] return cpc_descr def get_calibrations(tc_type, cpc_descr): treeview_tuple_list = [] + alvals = [] for key in dictionary_of_variables: if tc_type in key and cpc_descr in key: for counter in dictionary_of_variables[key]: @@ -77,41 +66,43 @@ def get_calibrations(tc_type, cpc_descr): pas_altxt = counter[4] pas_alval = counter[5] - if cpc_ptc == None: + if pas_alval is not None: + if pas_alval in alvals: + continue + prv_minval = pas_altxt + alvals.append(pas_alval) + + if cpc_ptc is None: cpc_ptc = "None" - if cpc_pfc == None: + if cpc_pfc is None: cpc_pfc = "None" - if prv_minval == None: + if prv_minval is None: prv_minval = "None" - if prv_maxval == None: + if prv_maxval is None: prv_maxval = "None" - if pas_altxt == None: + if pas_altxt is None: pas_altxt = "None" - if pas_alval == None: + if pas_alval is None: pas_alval = "None" - if cpc_ptc == "None": data_type = "None" - pass else: data_type = s2k.ptt[cpc_ptc][cpc_pfc] - treeview_tuple = tuple([prv_minval, prv_maxval, pas_altxt, pas_alval, data_type]) + treeview_tuple = tuple([prv_minval, prv_maxval, pas_altxt, pas_alval]) treeview_tuple_list.append(treeview_tuple) return treeview_tuple_list - - - class TcTable(Gtk.Grid): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.set_size_request(500,500) + self.set_size_request(500, 500) # self.set_orientation(Gtk.Orientation.VERTICAL) # self.grid = Gtk.Grid + self.set_row_spacing(5) self.telecommand_liststore = Gtk.ListStore(int, int, str, str) for telecommand_ref in list_of_commands: @@ -130,6 +121,7 @@ class TcTable(Gtk.Grid): # self.current_filter_type = None self.type_combo = Gtk.ComboBox.new_with_model(self.type_liststore) + self.type_combo.set_tooltip_text("Service TYPE filter") self.type_combo.connect("changed", self.on_type_combo_changed) renderer_text = Gtk.CellRendererText() self.type_combo.pack_start(renderer_text, True) @@ -138,15 +130,11 @@ class TcTable(Gtk.Grid): self.clear_button = Gtk.Button(label="Clear") self.clear_button.connect("clicked", self.on_clear_button_clicked) - self.attach_next_to( - self.clear_button, self.type_combo, Gtk.PositionType.RIGHT, 1, 1 - ) + self.attach_next_to(self.clear_button, self.type_combo, Gtk.PositionType.RIGHT, 1, 1) # creating the treeview, making it use the filter a model, adding columns self.treeview = Gtk.TreeView.new_with_model(Gtk.TreeModelSort(self.telecommand_filter)) - for i, column_title in enumerate( - ["#TYPE", "SUBTYPE", "DESCR", "LONGDESCR"] - ): + for i, column_title in enumerate(["TYPE", "SUBTYPE", "DESCR", "LONGDESCR"]): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) column.set_sort_column_id(i) @@ -190,10 +178,10 @@ class TcTable(Gtk.Grid): self.telecommand_filter.refilter() - def on_clear_button_clicked(self, widget): self.current_filter_telecommand = None self.telecommand_filter.refilter() + self.type_combo.set_active_id(None) def item_selected(self, selection): model, row = selection.get_selected() @@ -215,10 +203,7 @@ class TcTable(Gtk.Grid): def telecommand_filter_func(self, model, iter, data): - if ( - self.current_filter_telecommand is None - or self.current_filter_telecommand == "None" - ): + if self.current_filter_telecommand is None or self.current_filter_telecommand == "None": return True else: return model[iter][0] == self.current_filter_telecommand @@ -232,8 +217,6 @@ class TcTable(Gtk.Grid): pass - - class CommandDescriptionBox(Gtk.Box): def __init__(self): @@ -242,10 +225,8 @@ class CommandDescriptionBox(Gtk.Box): self.set_vexpand(True) # self.set_hexpand(False) - - # first treeview for commands - self.descr_liststore = Gtk.ListStore(str) + self.descr_liststore = Gtk.ListStore(int, str, str, str) for descr_ref in descr_list: self.descr_liststore.append(list(descr_ref)) self.current_filter_descr = None @@ -257,22 +238,21 @@ class CommandDescriptionBox(Gtk.Box): self.descr_treeview = Gtk.TreeView(model=self.descr_filter) - - for i, column_title in enumerate( - [1] - ): + for i, column_title in enumerate(["POS", "NAME", "PARAMETER", "DATATYPE"]): renderer = Gtk.CellRendererText() + if column_title == "POS": + renderer.set_property('xalign', 1) column = Gtk.TreeViewColumn(column_title, renderer, text=i) + if column_title == "NAME": + column.set_visible(False) column.colnr = i self.descr_treeview.append_column(column) - # item selection # self.treeview.connect("button-press-event", self.on_cell_clicked) self.selected_row = self.descr_treeview.get_selection() self.selected_row.connect("changed", self.item_selected) - self.scrollable_treelist = Gtk.ScrolledWindow() # self.scrollable_treelist.set_vexpand(True) # self.scrollable_treelist.set_hexpand(20) @@ -280,10 +260,8 @@ class CommandDescriptionBox(Gtk.Box): self.scrollable_treelist.add(self.descr_treeview) - - # second treeview for calibrations - self.cal_liststore = Gtk.ListStore(str, str, str, str, str) + self.cal_liststore = Gtk.ListStore(str, str, str, str) for cal_ref in calibrations_list: self.cal_liststore.append(list(cal_ref)) self.current_filter_descr = None @@ -295,68 +273,49 @@ class CommandDescriptionBox(Gtk.Box): self.cal_treeview = Gtk.TreeView(model=self.cal_filter) - for i, column_title in enumerate( - ["prv_minval", "prv_maxval", "pas_altxt", "pas_alval", "data-type"] - ): + for i, column_title in enumerate(["MIN", "MAX", "TEXT", "VAL"]): calibrations_renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, calibrations_renderer, text=i) column.colnumbr = i self.cal_treeview.append_column(column) - self.scrollable_calibrations_treelist = Gtk.ScrolledWindow() # self.scrollable_calibrations_treelist.set_vexpand(True) self.pack_start(self.scrollable_calibrations_treelist, True, True, 0) self.scrollable_calibrations_treelist.add(self.cal_treeview) - - - - def descr_filter_func(self, model, iter, data): - if ( - self.current_filter_descr is None - or self.current_filter_descr == "None" - ): + if self.current_filter_descr is None or self.current_filter_descr == "None": return True else: return model[iter][2] == self.current_filter_descr - def item_selected(self, selection): model, row = selection.get_selected() if row is not None: # print("item_selected") # print(model[row][0]) calibrations_list.clear() - calibrations_list.append(get_calibrations(tc_type, model[row][0])) + calibrations_list.append(get_calibrations(tc_type, model[row][2])) self.refresh_cal_treeview() - - - - def refresh_descr_treeview(self): self.descr_liststore.clear() - self.descr_liststore = Gtk.ListStore(str) - for descr_ref in descr_list: - self.descr_liststore.append(tuple(descr_ref)) - self.descr_treeview.set_model(self.descr_liststore) - + # self.descr_liststore = Gtk.ListStore(str, str, str, str) + for i, descr_ref in enumerate(descr_list): + self.descr_liststore.append([i+1] + list(descr_ref)) + # self.descr_treeview.set_model(self.descr_liststore) def cal_filter_func(self, model, iter, data): - if ( - self.current_filter_descr is None - or self.current_filter_descr == "None" - ): + if (self.current_filter_descr is None or self.current_filter_descr == "None"): return True else: return model[iter][2] == self.current_filter_descr def refresh_cal_treeview(self): - self.cal_liststore = Gtk.ListStore(str, str, str, str, str) + self.cal_liststore = Gtk.ListStore(str, str, str, str) if calibrations_list == [] or calibrations_list == [[]]: pass @@ -364,9 +323,6 @@ class CommandDescriptionBox(Gtk.Box): for cal_ref in calibrations_list[0]: self.cal_liststore.append(list(cal_ref)) - # self.cal_treeview.set_model(self.cal_liststore) - self.cal_treeview.set_model(self.cal_liststore) - diff --git a/Tst/tst/tm_management.py b/Tst/tst/tm_management.py index e7cc4ee..108d03c 100644 --- a/Tst/tst/tm_management.py +++ b/Tst/tst/tm_management.py @@ -1,26 +1,23 @@ #!/usr/bin/env python3 import gi - gi.require_version("Gtk", "3.0") gi.require_version("GtkSource", "3.0") from gi.repository import Gtk, Gdk, GtkSource import confignator import sys + sys.path.append(confignator.get_option('paths', 'ccs')) import ccs_function_lib as cfl import s2k_partypes as s2k dictionary_of_tms = cfl.get_tm_id() - tm_list = list(dictionary_of_tms.keys()) tm_type_list = [] tm_type_sub_list = [] - - for counter in tm_list: if counter[0] not in tm_type_list: tm_type_list.append(counter[0]) @@ -44,8 +41,7 @@ def get_tm_type_sublist(tm_descr): pcf_ptc = counter[8] pcf_pfc = counter[9] - - if pcf_ptc == None: + if pcf_ptc is None: data_type = "None" pass else: @@ -56,13 +52,12 @@ def get_tm_type_sublist(tm_descr): return tm_type_sub_list - - class TmTable(Gtk.Grid): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.set_size_request(500,500) + self.set_size_request(500, 500) + self.set_row_spacing(5) self.telemetry_liststore = Gtk.ListStore(int, int, int, int, str) for telemetry_ref in tm_list: @@ -82,6 +77,7 @@ class TmTable(Gtk.Grid): self.type_combo = Gtk.ComboBox.new_with_model(self.type_liststore) self.type_combo.connect("changed", self.on_type_combo_changed) + self.type_combo.set_tooltip_text("Service TYPE filter") renderer_text = Gtk.CellRendererText() self.type_combo.pack_start(renderer_text, True) self.type_combo.add_attribute(renderer_text, "text", 0) @@ -89,15 +85,11 @@ class TmTable(Gtk.Grid): self.clear_button = Gtk.Button(label="Clear") self.clear_button.connect("clicked", self.on_clear_button_clicked) - self.attach_next_to( - self.clear_button, self.type_combo, Gtk.PositionType.RIGHT, 1, 1 - ) + self.attach_next_to(self.clear_button, self.type_combo, Gtk.PositionType.RIGHT, 1, 1) # creating the treeview, making it use the filter a model, adding columns self.treeview = Gtk.TreeView.new_with_model(Gtk.TreeModelSort(self.telemetry_filter)) - for i, column_title in enumerate( - ["#TYPE", "SUBTYPE", "APID", "PI1_VALUE", "PID DESCR"] - ): + for i, column_title in enumerate(["TYPE", "SUBTYPE", "APID", "PI1_VALUE", "DESCR"]): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) column.set_sort_column_id(i) @@ -115,15 +107,12 @@ class TmTable(Gtk.Grid): self.scrollable_treelist.add(self.treeview) - self.telemetry_entry = Gtk.Entry() - self.telemetry_entry.set_placeholder_text("<Telemetry Variables>") - self.attach_next_to(self.telemetry_entry, self.scrollable_treelist, Gtk.PositionType.BOTTOM, 8, 1) + # self.telemetry_entry = Gtk.Entry() + # self.telemetry_entry.set_placeholder_text("<Telemetry Variables>") + # self.attach_next_to(self.telemetry_entry, self.scrollable_treelist, Gtk.PositionType.BOTTOM, 8, 1) self.secondary_box = TmSecondaryTable() - self.attach_next_to(self.secondary_box, self.telemetry_entry, Gtk.PositionType.BOTTOM, 8, 5) - - - + self.attach_next_to(self.secondary_box, self.scrollable_treelist, Gtk.PositionType.BOTTOM, 8, 5) # Set up Drag and Drop self.treeview.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, [], Gdk.DragAction.COPY) @@ -144,38 +133,24 @@ class TmTable(Gtk.Grid): self.telemetry_filter.refilter() - def on_clear_button_clicked(self, widget): self.current_filter_telemetry = None self.telemetry_filter.refilter() + self.type_combo.set_active_id(None) def item_selected(self, selection): model, row = selection.get_selected() if row is not None: - tm_descr = model[row][4] - global tm_type_sub_list - tm_type_sub_list = get_tm_type_sublist(tm_descr) - self.secondary_box.refresh_secondary_treelist() - - - - - - - - - - - - - + parlist = cfl.get_tm_parameter_list(*model[row][:4]) + self.secondary_box.refresh_parameter_treelist(parlist) + # tm_descr = model[row][4] + # global tm_type_sub_list + # tm_type_sub_list = get_tm_type_sublist(tm_descr) + # self.secondary_box.refresh_secondary_treelist() def telemetry_filter_func(self, model, iter, data): - if ( - self.current_filter_telemetry is None - or self.current_filter_telemetry == "None" - ): + if self.current_filter_telemetry is None or self.current_filter_telemetry == "None": return True else: return model[iter][0] == self.current_filter_telemetry @@ -183,16 +158,13 @@ class TmTable(Gtk.Grid): def on_drag_data_get(self, treeview, drag_context, selection_data, info, time, *args): treeselection = treeview.get_selection() model, my_iter = treeselection.get_selected() - selection_data.set_text(cfl.make_tc_template(descr, comment=False), -1) + # selection_data.set_text(cfl.make_tc_template(descr, comment=False), -1) + selection_data.set_text('', -1) def on_drag_begin(self, *args): pass - - - - class TmSecondaryTable(Gtk.Box): def __init__(self): @@ -201,54 +173,78 @@ class TmSecondaryTable(Gtk.Box): self.set_vexpand(True) # self.set_hexpand(False) + self.parameter_liststore = Gtk.ListStore(int, str, str, int, str) + self.parameter_treeview = Gtk.TreeView(model=self.parameter_liststore) + + for i, column_title in enumerate(["POS", "NAME", "PARAMETER", "OFFBY", "DATATYPE"]): + renderer = Gtk.CellRendererText() + if column_title in ("POS", "OFFBY"): + renderer.set_property('xalign', 1) + column = Gtk.TreeViewColumn(column_title, renderer, text=i) + if column_title == "NAME": + column.set_visible(False) + self.parameter_treeview.append_column(column) + self.parameter_treeview.set_tooltip_column(1) + + # item selection + self.selected_row = self.parameter_treeview.get_selection() + self.selected_row.connect("changed", self.parameter_selected) + + self.scrollable_parameter_treelist = Gtk.ScrolledWindow() + self.pack_start(self.scrollable_parameter_treelist, True, True, 0) - self.secondary_liststore = Gtk.ListStore(str, str, str, str, str, str, str) - for tm_type_sub_ref in tm_type_sub_list: - self.secondary_liststore.append(list(tm_type_sub_ref)) - self.current_filter_secondary = None + self.scrollable_parameter_treelist.add(self.parameter_treeview) + + self.secondary_liststore = Gtk.ListStore(str, str, str, str, str) + # for tm_type_sub_ref in tm_type_sub_list: + # self.secondary_liststore.append(list(tm_type_sub_ref)) + # self.current_filter_secondary = None # Creating filter, feeding it with liststore model self.secondary_filter = self.secondary_liststore.filter_new() # setting the filter function - self.secondary_filter.set_visible_func(self.secondary_filter_func) - + # self.secondary_filter.set_visible_func(self.secondary_filter_func) + self.secondary_treeview = Gtk.TreeView(model=self.secondary_filter) - for i, column_title in enumerate( - ["pcf_name", "pcf_descr", "pcf_curtx", "txp_from", "txp_altxt", "plf_offby", "data_type"] - ): + for i, column_title in enumerate(["LOW", "HIGH", "OCPTYPE", "VAL", "TEXT"]): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) self.secondary_treeview.append_column(column) - self.scrollable_secondary_tm_treelist = Gtk.ScrolledWindow() self.pack_start(self.scrollable_secondary_tm_treelist, True, True, 0) self.scrollable_secondary_tm_treelist.add(self.secondary_treeview) - - - - + def refresh_parameter_treelist(self, parlist): + self.parameter_liststore.clear() + for i, par in enumerate(parlist): + par = list(par) + self.parameter_liststore.append([i+1] + par[:3] + [s2k.ptt[par[3]][par[4]]]) + + def parameter_selected(self, selection): + model, row = selection.get_selected() + if row is not None: + pname = model[row][1] + self.refresh_secondary_treelist(pname) + def secondary_filter_func(self, model, iter, data): - if ( - self.current_filter_secondary is None - or self.current_filter_secondary == "None" - ): + if self.current_filter_secondary is None or self.current_filter_secondary == "None": return True else: return model[iter][2] == self.current_filter_descr - def refresh_secondary_treelist(self): + def refresh_secondary_treelist(self, pname): self.secondary_liststore.clear() - self.secondary_liststore = Gtk.ListStore(str, str, str, str, str, str, str) - for tm_type_sub_ref in tm_type_sub_list: - self.secondary_liststore.append(list(tm_type_sub_ref)) - self.secondary_treeview.set_model(self.secondary_liststore) - - - - + info = cfl.get_tm_parameter_info(pname) + if not info: + return + for cal in info: + self.secondary_liststore.append(list(map(str, cal))) + # self.secondary_liststore = Gtk.ListStore(str, str, str, str, str, str, str) + # for tm_type_sub_ref in tm_type_sub_list: + # self.secondary_liststore.append(list(tm_type_sub_ref)) + # self.secondary_treeview.set_model(self.secondary_liststore) -- GitLab