From 2dbad8a84053f4ff0a58d3346cc046920f0263fb Mon Sep 17 00:00:00 2001
From: Marko Mecina <marko.mecina@univie.ac.at>
Date: Wed, 23 Feb 2022 14:28:36 +0100
Subject: [PATCH] fix packet selection bug in poolviewer

---
 Ccs/poolview_sql.py | 50 ++++++++++++++++++++++++---------------------
 1 file changed, 27 insertions(+), 23 deletions(-)

diff --git a/Ccs/poolview_sql.py b/Ccs/poolview_sql.py
index 0169fd8..bf6d80d 100644
--- a/Ccs/poolview_sql.py
+++ b/Ccs/poolview_sql.py
@@ -589,7 +589,7 @@ class TMPoolView(Gtk.Window):
 
         self.treeview = Gtk.TreeView()
         self.treeview.set_model(self.pool_liststore)
-        self.treeview.set_rubber_banding(False)
+        self.treeview.set_rubber_banding(True)
         self.treeview.set_activate_on_single_click(True)
         # self.treeview.set_fixed_height_mode(True)
 
@@ -628,7 +628,7 @@ class TMPoolView(Gtk.Window):
         self.scrolled_treelist.get_vscrollbar().set_visible(False)
 
         self.selection = self.treeview.get_selection()
-        self.selection.set_mode(Gtk.SelectionMode.SINGLE)
+        self.selection.set_mode(Gtk.SelectionMode.MULTIPLE)
         # self.selection.connect('changed', self.tree_selection_changed)
         self.selection.connect('changed', self.set_tm_data_view)
         # self.selection.connect('changed', self.unselect_bottom)
@@ -684,7 +684,7 @@ class TMPoolView(Gtk.Window):
         height = self.treeview.get_allocated_height()
         cell = self.treeview.get_columns()[0].cell_get_size()[-1] + 2
         nlines = height // cell
-        self.adj.set_page_size(nlines)
+        self.adj.set_page_size(nlines-4)
         # self._scroll_treeview()
         self.reselect_rows()
 
@@ -1495,7 +1495,7 @@ class TMPoolView(Gtk.Window):
         self.autoscroll = 0
 
     def scroll_child(self, widget, event, data=None):
-        # print('Seems like I do not work')
+        print('Seems like I do not work')
         return
 
     def scroll_event(self, widget, event, data=None):
@@ -1517,6 +1517,7 @@ class TMPoolView(Gtk.Window):
             return
 
         self._scroll_treeview(scroll_lines)
+        self.offset = self.offset - 1 if self.offset > 0 else 0
         self.reselect_rows()
         # Only_scroll is necessary to not launch a second event after the scrollbar is reset to new value
         self.only_scroll = False
@@ -1541,8 +1542,11 @@ class TMPoolView(Gtk.Window):
                     break
 
             try:
-                if scroll_lines <0:
-                    self.offset = self.shown_all_rows[int(position + scroll_lines)][0] if (position + scroll_lines) > 0 else 0
+                if scroll_lines < 0:
+                    if scroll_lines == -int(self.adj.get_page_size()):
+                        self.offset -= int(self.adj.get_page_size())
+                    else:
+                        self.offset = self.shown_all_rows[int(position + scroll_lines)][0] if (position + scroll_lines) > 0 else 0
                 else:
                     if len(self.shown_all_rows) < (self.shown_limit):
                         self.offset = self.shown_all_rows[-self.adj.get_page_size()][0]
@@ -1663,7 +1667,7 @@ class TMPoolView(Gtk.Window):
         for row in model:
             if row[0] in self.currently_selected:
                 try:
-                    self.selection.select_path(model.get_path(model.get_iter(row[0] - self.offset)))
+                    self.selection.select_path(model.get_path(model.get_iter(row[0] - self.offset - 1)))
                 except ValueError:
                     pass
                 except TypeError:
@@ -1975,7 +1979,7 @@ class TMPoolView(Gtk.Window):
         finally:
             widget.set_sensitive(True)
         upper_limit = self.adj.get_upper() - self.adj.get_page_size()
-        self.offset = int(min(upper_limit, goto))
+        self.offset = abs(int(min(upper_limit, goto)))
         self.limit = int(self.adj.get_page_size())
         #self.feed_lines_to_view(
         #    self.fetch_lines_from_db(self.offset, self.limit, sort=None, order='asc'))
@@ -2000,7 +2004,7 @@ class TMPoolView(Gtk.Window):
             return
         finally:
             widget.set_sensitive(True)
-        self.offset = int(min(upper_limit, idx))
+        self.offset = abs(int(min(upper_limit, idx)))
         self.limit = int(self.adj.get_page_size())
         #self.feed_lines_to_view(
         #    self.fetch_lines_from_db(self.offset, self.limit, sort=None, order='asc'))
@@ -3236,20 +3240,20 @@ class TMPoolView(Gtk.Window):
         GLib.timeout_add(self.pool_refresh_rate * 1000, self.refresh_treeview_worker2,
                          pool_name)  # , priority=GLib.PRIORITY_HIGH)
 
-    def refresh_treeview_worker(self, pool_name):
-        poolmgr = cfl.dbus_connection('poolmanager', cfl.communication ['poolmanager'])
-        # while not self.pool.recordingThread.stopRecording:
-        # Get value of dict connections, with key self.active... and key recording, True to get
-        pool_connection_recording = cfl.Dictionaries(poolmgr, 'connections', self.active_pool_info.pool_name, 'recording', True)
-        type = self.decoding_type
-        #while self.pool.connections[self.active_pool_info.pool_name]['recording']:
-        while pool_connection_recording:
-            GLib.idle_add(self.scroll_to_bottom)
-            time.sleep(self.pool_refresh_rate)
-            if pool_name != self.active_pool_info.pool_name or type != self.decoding_type:
-                dbsession.close()
-                return
-        self.stop_recording()
+    # def refresh_treeview_worker(self, pool_name):
+    #     poolmgr = cfl.dbus_connection('poolmanager', cfl.communication ['poolmanager'])
+    #     # while not self.pool.recordingThread.stopRecording:
+    #     # Get value of dict connections, with key self.active... and key recording, True to get
+    #     pool_connection_recording = cfl.Dictionaries(poolmgr, 'connections', self.active_pool_info.pool_name, 'recording', True)
+    #     type = self.decoding_type
+    #     #while self.pool.connections[self.active_pool_info.pool_name]['recording']:
+    #     while pool_connection_recording:
+    #         GLib.idle_add(self.scroll_to_bottom)
+    #         time.sleep(self.pool_refresh_rate)
+    #         if pool_name != self.active_pool_info.pool_name or type != self.decoding_type:
+    #             dbsession.close()
+    #             return
+    #     self.stop_recording()
 
     def refresh_treeview_worker2(self, pool_name):
         if pool_name != self.active_pool_info.pool_name:
-- 
GitLab