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 # ============================================================================= _______________________________________________ commit-gnue mailing list commit-gnue@gnu.org http://lists.gnu.org/mailman/listinfo/commit-gnue