diff --git a/Ccs/ccs_function_lib.py b/Ccs/ccs_function_lib.py index 659283fe6a417fe040e7b2095bb70f558c7809ce..acc1c742252d85c7decd235ff7cc88d35d1d59fc 100644 --- a/Ccs/ccs_function_lib.py +++ b/Ccs/ccs_function_lib.py @@ -103,6 +103,12 @@ def get_scoped_session_idb(idb_version=None): return scoped_session_maker('idb', idb_version=idb_version) +def set_scoped_session_idb_version(idb_version=None): + global scoped_session_idb + scoped_session_idb.close() + scoped_session_idb = scoped_session_maker('idb', idb_version=idb_version) + + def get_scoped_session_storage(): return scoped_session_maker('storage') @@ -2671,7 +2677,7 @@ def get_tc_list(ccf_descr=None): '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 SUBSTRING(ccf_cname, 1, 2), ccf_type, ccf_stype').fetchall() + 'ORDER BY SUBSTRING(ccf_cname, 1, 2), 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, ' @@ -3921,8 +3927,8 @@ class TmDecoderDialog(Gtk.Dialog): self.logger = logger self.cfg = cfg - self.session_factory_idb = scoped_session_maker('idb') - self.session_factory_storage = scoped_session_maker('storage') + self.session_factory_idb = scoped_session_idb + self.session_factory_storage = scoped_session_storage box = self.get_content_area() diff --git a/Tst/tst/data_pool_tab.py b/Tst/tst/data_pool_tab.py index e6a250a09b4515e37bdd964daa49f6a59ca508da..b97f9265ccae068b850d5667627b9ee5862fc8fd 100644 --- a/Tst/tst/data_pool_tab.py +++ b/Tst/tst/data_pool_tab.py @@ -14,10 +14,20 @@ dictionary_of_data_pool = cfl.get_data_pool_items() list_of_data_pool = list(dictionary_of_data_pool.keys()) data_pool_sublist = [] - pid_list = [] +def reload_dp_data(): + global dictionary_of_data_pool + global list_of_data_pool + global data_pool_sublist + global pid_list + + dictionary_of_data_pool = cfl.get_data_pool_items() + list_of_data_pool = list(dictionary_of_data_pool.keys()) + data_pool_sublist, pid_list = get_data_pool_sublist() + + def get_data_pool_sublist(): for counter in list_of_data_pool: pcf_pid = str(counter[0]) diff --git a/Tst/tst/tc_management.py b/Tst/tst/tc_management.py index 0f1f89f1791f2c63e2bfccdd4d5ee80785d7c42f..d544fac0f88dd40bdfeaccde97cb2b43f26ffcf9 100644 --- a/Tst/tst/tc_management.py +++ b/Tst/tst/tc_management.py @@ -39,6 +39,45 @@ subtype_list.sort() dictionary_of_variables = cfl.get_tc_calibration_and_parameters() +def reload_tc_data(): + global tc_type + global dictionary_of_commands + global read_in_list_of_commands + global list_of_commands + global type_list + global subtype_list + global descr_list + global calibrations_list + global dictionary_of_variables + + tc_type = None + + dictionary_of_commands = cfl.get_tc_list() + read_in_list_of_commands = list(dictionary_of_commands.keys()) + list_of_commands = [] + type_list = [] + subtype_list = [] + + descr_list = [] + calibrations_list = [] + + for command in read_in_list_of_commands: + command = list(command) + del command[0] + myorder = [2, 3, 0, 1] + command = [command[i] for i in myorder] + command[0] = int(command[0]) + command[1] = int(command[1]) + list_of_commands.append(command) + 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): cpc_descr = [] diff --git a/Tst/tst/tm_management.py b/Tst/tst/tm_management.py index 108d03c2521e8895eec59d524e89ea9defa19e50..26635eb0015ecc6b63d32f8f153358b3011b7875 100644 --- a/Tst/tst/tm_management.py +++ b/Tst/tst/tm_management.py @@ -25,6 +25,24 @@ for counter in tm_list: pass +def reload_tm_data(): + global dictionary_of_tms + global tm_list + global tm_type_list + global tm_type_sub_list + + 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]) + + def get_tm_type_sublist(tm_descr): tm_type_sub_list.clear() for key in dictionary_of_tms: diff --git a/Tst/tst/tst.py b/Tst/tst/tst.py index 828c57e4438ac9bc16c5b0605f6ed4aae4c8baf7..b253a2d4318e83f84c325d63e5da8c18844a5c6c 100755 --- a/Tst/tst/tst.py +++ b/Tst/tst/tst.py @@ -30,9 +30,6 @@ import json_to_csv import spec_to_json -#print("!!!!!!!") -#dictionary_of_data_pool = cfl.get_data_pool_items -#print(dictionary_of_data_pool.keys()) # creating lists for type and subtype to get rid of duplicate entries, for TC List @@ -52,7 +49,7 @@ file_hdlr = toolbox.create_file_handler(file=log_file) logger.addHandler(hdlr=file_hdlr) -VERSION = '0.9' +VERSION = '0.10' class TstApp(Gtk.Application): @@ -263,25 +260,31 @@ class TstAppWindow(Gtk.ApplicationWindow): self.btn_save.set_icon_name('document-save') self.btn_save.set_tooltip_text('Save') self.btn_save.connect('clicked', self.on_save) - self.btn_show_model_viewer = Gtk.ToolButton() - self.btn_show_model_viewer.set_icon_name('accessories-dictionary-symbolic') - self.btn_show_model_viewer.set_tooltip_text('Show/hide model viewer') - self.btn_show_model_viewer.connect('clicked', self.model_viewer_toggle_hide) + # self.btn_show_model_viewer = Gtk.ToolButton() + # self.btn_show_model_viewer.set_icon_name('accessories-dictionary-symbolic') + # self.btn_show_model_viewer.set_tooltip_text('Show/hide model viewer') + # self.btn_show_model_viewer.connect('clicked', self.model_viewer_toggle_hide) self.btn_generate_products = Gtk.ToolButton() self.btn_generate_products.set_label('Generate scripts') - # self.btn_generate_products.set_icon_name('printer-printing-symbolic') - self.btn_generate_products.set_tooltip_text('Generate the command.py, verification.py and the manually.py') + self.btn_generate_products.set_icon_name('text-x-python') + self.btn_generate_products.set_tooltip_text('Generate command.py, verification.py and manually.py') self.btn_generate_products.connect('clicked', self.on_generate_products) + self.btn_start_ccs_editor = Gtk.ToolButton() - self.btn_start_ccs_editor.set_label('Start CCS-Editor') - # self.btn_start_ccs_editor.set_icon_name('accessories-text-editor') + self.btn_start_ccs_editor.set_label('Start CCS') + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( + confignator.get_option('paths', 'ccs') + '/pixmap/ccs_logo_2.svg', 28, 28) + icon = Gtk.Image.new_from_pixbuf(pixbuf) + self.btn_start_ccs_editor.set_icon_widget(icon) self.btn_start_ccs_editor.set_tooltip_text('Start CCS-Editor') self.btn_start_ccs_editor.connect('clicked', self.on_start_ccs_editor) + self.btn_open_progress_view = Gtk.ToolButton() self.btn_open_progress_view.set_label('Start ProgressView') - # self.btn_open_progress_view.set_icon_name('x-office-presentation') + self.btn_open_progress_view.set_icon_name('utilities-system-monitor') self.btn_open_progress_view.set_tooltip_text('Start ProgressView') self.btn_open_progress_view.connect('clicked', self.on_start_progress_viewer) + self.toolbar = Gtk.Toolbar() self.toolbar.insert(self.btn_new_file, 0) self.toolbar.insert(self.btn_open_file, 1) @@ -291,18 +294,29 @@ class TstAppWindow(Gtk.ApplicationWindow): self.toolbar.insert(self.btn_start_ccs_editor, 4) self.toolbar.insert(self.btn_open_progress_view, 5) - # logo + # IDB chooser + self.idb_chooser = Gtk.ToolButton() + + label = Gtk.Label() + label.set_markup('<b>IDB:</b> {}'.format(cfl.scoped_session_idb.bind.url.database)) + self.idb_chooser.set_label_widget(label) + self.idb_chooser.set_tooltip_text('Select IDB') + self.idb_chooser.connect('clicked', self.on_set_idb_version) + self.toolbar.insert(self.idb_chooser, 6) + + # separator sepa = Gtk.SeparatorToolItem() sepa.set_expand(True) - self.toolbar.insert(sepa, 6) + self.toolbar.insert(sepa, 7) + + # logo self.unilogo = Gtk.ToolButton() pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( - confignator.get_option('paths', 'ccs') + '/pixmap/Icon_Space_blau_en.png', 32, 32) + confignator.get_option('paths', 'ccs') + '/pixmap/Icon_Space_blau_en.png', 32, 32) icon = Gtk.Image.new_from_pixbuf(pixbuf) self.unilogo.set_icon_widget(icon) - #self.unilogo.set_tooltip_text('New test specification') self.unilogo.connect('clicked', self.on_about) - self.toolbar.insert(self.unilogo, 7) + self.toolbar.insert(self.unilogo, 8) self.box.pack_start(self.toolbar, False, True, 0) self.info_bar = None @@ -321,39 +335,39 @@ class TstAppWindow(Gtk.ApplicationWindow): self.codeblockreuse = codeblockreuse.CBRSearch(app_win=self, logger=self.logger) self.label_widget_codeblockreuse = Gtk.Label() - self.label_widget_codeblockreuse.set_text('Code Block Reuse Feature') + self.label_widget_codeblockreuse.set_text('Code Snippets') self.feature_area.append_page(child=self.codeblockreuse, tab_label=self.label_widget_codeblockreuse) - self.json_view = ViewModelAsJson() - self.update_model_viewer() - self.label_widget_json_view = Gtk.Label() - self.label_widget_json_view.set_text('JSON view of the test') - self.feature_area.append_page(child=self.json_view, tab_label=self.label_widget_json_view) - import log_viewer self.log_view = log_viewer.LogView(filename=log_file, app_win=self) self.label_widget_log_view = Gtk.Label() - self.label_widget_log_view.set_text('LogView') + self.label_widget_log_view.set_text('Log View') self.feature_area.append_page(child=self.log_view, tab_label=self.label_widget_log_view) + self.json_view = ViewModelAsJson() + self.update_model_viewer() + self.label_widget_json_view = Gtk.Label() + self.label_widget_json_view.set_text('JSON View') + self.feature_area.append_page(child=self.json_view, tab_label=self.label_widget_json_view) + # command list tab self.tcm = tcm.TcTable() self.label_widget_tcm = Gtk.Label() self.label_widget_tcm.set_text('TC Table') - self.feature_area.append_page(child=self.tcm, tab_label=self.label_widget_tcm) + self.feature_area.insert_page(child=self.tcm, tab_label=self.label_widget_tcm, position=1) # telemetry list tab self.telemetry = tmm.TmTable() self.label_widget_telemetry = Gtk.Label() self.label_widget_telemetry.set_text('TM Table') - self.feature_area.append_page(child=self.telemetry, tab_label=self.label_widget_telemetry) + self.feature_area.insert_page(child=self.telemetry, tab_label=self.label_widget_telemetry, position=2) # data pool list tab self.data_pool_tab = dpt.DataPoolTable() self.label_widget_data_pool = Gtk.Label() self.label_widget_data_pool.set_text('Data Pool') - self.feature_area.append_page(child=self.data_pool_tab, tab_label=self.label_widget_data_pool) + self.feature_area.insert_page(child=self.data_pool_tab, tab_label=self.label_widget_data_pool, position=3) self.box.pack_start(self.work_desk, True, True, 0) @@ -1049,11 +1063,80 @@ class TstAppWindow(Gtk.ApplicationWindow): pixbuf = GdkPixbuf.Pixbuf.new_from_file(style_path + '/tst.png') about_dialog.set_logo(pixbuf) about_dialog.set_program_name('Test Specification Tool') - about_dialog.set_copyright('UVIE 11/2021') + about_dialog.set_copyright('UVIE 08/2022') about_dialog.set_license_type(Gtk.License.MPL_2_0) about_dialog.present() return + def on_set_idb_version(self, *args): + dialog = IDBChooser() + dialog.set_transient_for(self) + + response = dialog.run() + if response == Gtk.ResponseType.OK: + model, it = dialog.selection.get_selected() + idb = model[it][0] + cfl.set_scoped_session_idb_version(idb_version=idb) + label = self.idb_chooser.get_label_widget() + label.set_markup('<b>IDB:</b> {}'.format(cfl.scoped_session_idb.bind.url.database)) + self.feature_area.freeze_child_notify() + page = self.feature_area.get_current_page() + self.reload_tc_table() + self.reload_tm_table() + self.reload_dp_table() + self.feature_area.set_current_page(page) + self.feature_area.thaw_child_notify() + dialog.destroy() + else: + dialog.destroy() + + def reload_tc_table(self): + self.feature_area.remove_page(self.feature_area.page_num(self.tcm)) + tcm.reload_tc_data() + self.tcm = tcm.TcTable() + self.feature_area.insert_page(self.tcm, self.label_widget_tcm, 1) + + def reload_tm_table(self): + self.feature_area.remove_page(self.feature_area.page_num(self.telemetry)) + tmm.reload_tm_data() + self.telemetry = tmm.TmTable() + self.feature_area.insert_page(self.telemetry, self.label_widget_telemetry, 2) + + def reload_dp_table(self): + self.feature_area.remove_page(self.feature_area.page_num(self.data_pool_tab)) + dpt.reload_dp_data() + self.data_pool_tab = dpt.DataPoolTable() + self.feature_area.insert_page(self.data_pool_tab, self.label_widget_data_pool, 3) + + +class IDBChooser(Gtk.Dialog): + def __init__(self): + super(IDBChooser, self).__init__(title='Select MIB') + self.add_buttons(Gtk.STOCK_OK, Gtk.ResponseType.OK, Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) + self.set_size_request(300, 200) + + idb_selection = Gtk.ListStore(str) + mibs = cfl.scoped_session_idb.execute('show databases').fetchall() + + for m, in mibs: + if m.count('mib'): + idb_selection.append([m]) + + tv = Gtk.TreeView(model=idb_selection) + self.selection = tv.get_selection() + self.selection.set_mode(Gtk.SelectionMode.SINGLE) + + col = Gtk.TreeViewColumn('SCHEMA NAME', Gtk.CellRendererText(), text=0) + tv.append_column(col) + + scr = Gtk.ScrolledWindow() + scr.add(tv) + + box = self.get_content_area() + box.pack_start(scr, True, True, 0) + + self.show_all() + class ViewModelAsJson(Gtk.Box): def __init__(self, *args, **kwargs):