commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r8982 - trunk/gnue-forms/src/uidrivers/qt3/widgets


From: johannes
Subject: [gnue] r8982 - trunk/gnue-forms/src/uidrivers/qt3/widgets
Date: Tue, 7 Nov 2006 08:57:10 -0600 (CST)

Author: johannes
Date: 2006-11-07 08:57:09 -0600 (Tue, 07 Nov 2006)
New Revision: 8982

Modified:
   trunk/gnue-forms/src/uidrivers/qt3/widgets/form.py
   trunk/gnue-forms/src/uidrivers/qt3/widgets/grid.py
Log:
Grid widgets can add/remove rows on resizing


Modified: trunk/gnue-forms/src/uidrivers/qt3/widgets/form.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/qt3/widgets/form.py  2006-11-06 10:23:29 UTC 
(rev 8981)
+++ trunk/gnue-forms/src/uidrivers/qt3/widgets/form.py  2006-11-07 14:57:09 UTC 
(rev 8982)
@@ -75,6 +75,7 @@
         self._form = None
         self.__status_bar = None
         self.__status_fields = []
+        self.sizing_enabled = False
 
 
     # -------------------------------------------------------------------------
@@ -139,6 +140,7 @@
         Show the form or dialog modeless
         """
 
+        self.sizing_enabled = True
         self.main_window.show()
         self._uiDriver.hide_splash()
 
@@ -153,6 +155,7 @@
         """
 
         self._uiDriver.hide_splash()
+        self.sizing_enabled = True
         if isinstance(self.main_window, qt.QDialog):
             self.main_window.setModal(True)
             self.main_window.exec_loop()
@@ -352,6 +355,7 @@
         """
         Close the window (acutally only hide it)
         """
+        self.sizing_enabled = False
         self.main_window.hide()
 
 # =============================================================================

Modified: trunk/gnue-forms/src/uidrivers/qt3/widgets/grid.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/qt3/widgets/grid.py  2006-11-06 10:23:29 UTC 
(rev 8981)
+++ trunk/gnue-forms/src/uidrivers/qt3/widgets/grid.py  2006-11-07 14:57:09 UTC 
(rev 8982)
@@ -69,7 +69,7 @@
 
         hbox = qt.QHBoxLayout(self.widget, 2)
 
-        self._container = qt.QWidget(self.widget)
+        self._container = ResizeContainer(self.widget, self)
         self.scroll = qt.QScrollBar(qt.Qt.Vertical, self.widget)
 
         hbox.addWidget(self._container, 1)
@@ -142,11 +142,121 @@
         """
         Adjust the thumb-position and the number of rows of the scrollbar
         """
-        # self.scroll.SetScrollbar(position, size, count, size - 1, True)
-        pass
+        self.scroll.setMaxValue(count)
+        self.scroll.setPageStep(size)
+        self.scroll.setValue(position)
 
 
+    # -------------------------------------------------------------------------
+    # Add or remove records from the grid
+    # -------------------------------------------------------------------------
+
+    def update_records(self, num_recs):
+
+        if num_recs > self.__visible:
+            self.__add_new_records(num_recs - self.__visible)
+            self._gfObject._event_rows_changed(self.__visible)
+        else:
+            self.__hide_records(self.__visible - num_recs)
+            self._gfObject._event_rows_changed(self.__visible)
+
+
+    # -------------------------------------------------------------------------
+    # Add new records to the grid (after resizing it)
+    # -------------------------------------------------------------------------
+
+    def __add_new_records(self, num_recs):
+
+        for index in range(num_recs):
+            record = self.__visible + index
+
+            if record >= self.__max:
+                self.walk(self.__child_add_walker, record)
+                self.__change_visibility(record, True)
+                self.__max += 1
+            else:
+                self.__change_visibility(record, True)
+
+        self.__visible += num_recs
+
+        self._uiForm.main_window.updateGeometry()
+
+
+    # -------------------------------------------------------------------------
+    # Create all child-widgets
+    # -------------------------------------------------------------------------
+
+    def __child_add_walker(self, item, spacer):
+
+        if item == self:
+            return
+
+        widget = item.create_widget(item._creationEvent, spacer)
+        item.widgets.append(widget)
+
+
+    # -------------------------------------------------------------------------
+    # Show or hide grid lines
+    # -------------------------------------------------------------------------
+
+    def __change_visibility(self, record, state):
+
+        grid = self._container.layout()
+
+        for item in self._children:
+            for panel in item._columns[record]:
+                if state:
+                    panel.show()
+                else:
+                    panel.hide()
+
+
+    # -------------------------------------------------------------------------
+    # Hide a given number of records
+    # -------------------------------------------------------------------------
+
+    def __hide_records(self, num_recs):
+
+        for index in range(num_recs):
+            self.__change_visibility(self.__visible-1, False)
+            self.__visible -= 1
+
+        self._uiForm.main_window.updateGeometry()
+
+
 # =============================================================================
+# Qt class implementing the grid-container
+# =============================================================================
+
+class ResizeContainer(qt.QWidget):
+    def __init__(self, parent, ui_grid):
+        qt.QWidget.__init__(self, parent)
+        self.ui_grid = ui_grid
+
+    def resizeEvent(self, event):
+        qt.QWidget.resizeEvent(self, event)
+
+        if not self.ui_grid._uiForm.sizing_enabled:
+            return
+
+        saved = self.ui_grid._uiForm.sizing_enabled
+        self.ui_grid._uiForm.sizing_enabled = False
+        try:
+            header = self.layout().cellGeometry(0, 0)
+            rech = 0
+            for item in self.ui_grid._children:
+                rech += max([panel.layout().minimumSize().height() \
+                             for panel in item._columns[0]])
+            available = self.size().height() - header.height()
+            num_recs = available / rech
+
+            self.ui_grid.update_records(num_recs)
+
+        finally:
+            self.ui_grid._uiForm.sizing_enabled = saved
+
+
+# =============================================================================
 # Configuration data
 # =============================================================================
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]