From a255da8a4fce33d5843608040dc947826527c8ba Mon Sep 17 00:00:00 2001
From: Marko Mecina <marko.mecina@univie.ac.at>
Date: Tue, 28 Nov 2023 18:39:56 +0100
Subject: [PATCH] add selection of monitor parameter set via context menu in
 poolviewer

---
 Ccs/monitor.py      | 18 ------------------
 Ccs/poolview_sql.py | 40 +++++++++++++++++++++++++---------------
 2 files changed, 25 insertions(+), 33 deletions(-)

diff --git a/Ccs/monitor.py b/Ccs/monitor.py
index 9a8999c..2c6ab20 100644
--- a/Ccs/monitor.py
+++ b/Ccs/monitor.py
@@ -94,24 +94,6 @@ class ParameterMonitor(Gtk.Window):
         self.reset_evt_cnt()
         return
 
-    # def check_for_pools(self):
-    #     try:
-    #         # poolmgr = cfl.dbus_connection('poolmanager', cfl.communication['poolmanager'])
-    #         poolmgr = cfl.get_module_handle('poolmanager')
-    #         pools = poolmgr.Functions('loaded_pools_export_func')
-    #         if len(pools) == 1:
-    #             pool_name = pools[0][0]
-    #             if '/' in pools[0][0]:
-    #                 pool_name = pools[0][0].split('/')[-1]
-    #             self.set_pool(pool_name)
-    #             return 1
-    #         else:
-    #             self.logger.error('Failed to open a pool.')
-    #             return 0
-    #     except Exception as err:
-    #         self.logger.error(err)
-    #         return 0
-
     def set_pool(self, pool_name):
         self.pool_name = pool_name
 
diff --git a/Ccs/poolview_sql.py b/Ccs/poolview_sql.py
index 32f2515..3d9d177 100644
--- a/Ccs/poolview_sql.py
+++ b/Ccs/poolview_sql.py
@@ -121,6 +121,8 @@ class TMPoolView(Gtk.Window):
         self.autoscroll = 1
         self.autoselect = 1
 
+        self._selected_mon_par_set = None
+
         self.paned = Gtk.Paned(orientation=Gtk.Orientation.HORIZONTAL, wide_handle=True, position=400)
 
         self.statusbar = Gtk.Statusbar()
@@ -638,9 +640,8 @@ class TMPoolView(Gtk.Window):
             return
         self.offset = int(self.adj.get_value())
         self.limit = int(self.adj.get_page_size())
-        #self.feed_lines_to_view(
-        #    self.fetch_lines_from_db(offset=self.offset, limit=self.limit))
-        self.fetch_lines_from_db(offset=self.offset, limit=self.limit, force_import=True)
+
+        self.feed_lines_to_view(self.fetch_lines_from_db(offset=self.offset, limit=self.limit, force_import=True))
         self.reselect_rows()
 
     def count_current_pool_rows(self, pool_info=None):
@@ -1127,13 +1128,14 @@ class TMPoolView(Gtk.Window):
         icon_path = os.path.join(self.cfg.get('paths', 'ccs'), 'pixmap/func.png')
         pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(icon_path, 32, 32)
         plot_butt = Gtk.Button(image=Gtk.Image.new_from_pixbuf(pixbuf), tooltip_text='Parameter Plotter')
-        plot_butt.connect('button-press-event', self.show_context_menu, self.context_menu())
+        # plot_butt.connect('button-press-event', self.show_context_menu, self.context_menu())
         plot_butt.connect('clicked', self.plot_parameters)
 
         icon_path = os.path.join(self.cfg.get('paths', 'ccs'), 'pixmap/monitor.png')
         pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(icon_path, 32, 32)
-        mon_butt = Gtk.Button(image=Gtk.Image.new_from_pixbuf(pixbuf), tooltip_text='Parameter Monitor')
-        mon_butt.connect('clicked', self.monitor_parameters)
+        self.mon_butt = Gtk.Button(image=Gtk.Image.new_from_pixbuf(pixbuf), tooltip_text='Parameter Monitor')
+        self.mon_butt.connect('clicked', self.monitor_parameters)
+        self.mon_butt.connect('button-press-event', self.show_context_menu, self.context_menu())
 
         dump_butt = Gtk.Button.new_from_icon_name('gtk-save', Gtk.IconSize.LARGE_TOOLBAR)
         dump_butt.set_tooltip_text('Save pool')
@@ -1166,7 +1168,7 @@ class TMPoolView(Gtk.Window):
 
         self.pool_managebar.pack_start(self.pool_selector, 1, 1, 0)
         self.pool_managebar.pack_start(plot_butt, 0, 0, 0)
-        self.pool_managebar.pack_start(mon_butt, 0, 0, 0)
+        self.pool_managebar.pack_start(self.mon_butt, 0, 0, 0)
         self.pool_managebar.pack_end(self.univie_box, 0, 0, 0)
         self.pool_managebar.pack_end(clear_butt, 0, 0, 0)
         self.pool_managebar.pack_end(bigd, 0, 0, 0)
@@ -1425,23 +1427,31 @@ class TMPoolView(Gtk.Window):
 
         self.adj.set_value(self.offset)
 
-        return
     def context_menu(self):
+
         menu = Gtk.Menu()
 
-        item = Gtk.MenuItem(label='TEST')
-        item.connect('activate', self.menu_test)
-        menu.append(item)
+        par_sets = cfg['ccs-monitor_parameter_sets']
+        for parset in par_sets:
+            item = Gtk.MenuItem(label=str(parset))
+            item.connect('activate', self.mon_menu, parset)
+            menu.append(item)
+
         return menu
 
     def show_context_menu(self, widget, event, menu):
+
         if event.button != 3:
             return
+
         menu.show_all()
-        menu.popup(None, None, None, None, 3, event.time)
+        menu.popup_at_pointer()
 
-    def menu_test(self, widget=None):
-        pass
+    def mon_menu(self, widget=None, parset=None):
+
+        if parset is not None:
+            self._selected_mon_par_set = parset
+            self.mon_butt.set_tooltip_text('Parameter Monitor [{}]'.format(parset))
 
     def check_structure_type(self):
 
@@ -2627,7 +2637,7 @@ class TMPoolView(Gtk.Window):
             self.logger.warning('No pool selected')
             return
 
-        cfl.start_monitor(self.active_pool_info.filename)
+        cfl.start_monitor(self.active_pool_info.filename, parameter_set=self._selected_mon_par_set)
 
     def start_recording(self, widget=None):
         if cfl.is_open('poolmanager', cfl.communication['poolmanager']):
-- 
GitLab