Author: sh-sh-sh
Date: Thu Oct 16 19:59:12 2008
New Revision: 52314
URL: http://svn.opensuse.org/viewcvs/yast?rev=52314&view=rev
Log:
Fixed massive performance drop when inserting items into YQTable
Modified:
trunk/qt/VERSION.cmake
trunk/qt/package/yast2-qt.changes
trunk/qt/src/YQTable.cc
trunk/qt/src/YQTable.h
Modified: trunk/qt/VERSION.cmake
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/VERSION.cmake?rev=52314&r1=52313&r2=52314&view=diff
==============================================================================
--- trunk/qt/VERSION.cmake (original)
+++ trunk/qt/VERSION.cmake Thu Oct 16 19:59:12 2008
@@ -1,3 +1,3 @@
SET(VERSION_MAJOR "2")
SET(VERSION_MINOR "17")
-SET(VERSION_PATCH "14")
+SET(VERSION_PATCH "15")
Modified: trunk/qt/package/yast2-qt.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/package/yast2-qt.changes?rev=52314&r1=52313&r2=52314&view=diff
==============================================================================
--- trunk/qt/package/yast2-qt.changes (original)
+++ trunk/qt/package/yast2-qt.changes Thu Oct 16 19:59:12 2008
@@ -1,4 +1,11 @@
-------------------------------------------------------------------
+Thu Oct 16 19:57:11 CEST 2008 - sh@suse.de
+
+- Fixed bnc #433130: Poor performance in runlevel editor
+ (Massive performance drop when inserting items into YQTable)
+- V 2.17.15
+
+-------------------------------------------------------------------
Thu Oct 16 15:59:19 CEST 2008 - sh@suse.de
- Prevent segfaults: Converted QY2Styler to a real singleton
Modified: trunk/qt/src/YQTable.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQTable.cc?rev=52314&r1=52313&r2=52314&view=diff
==============================================================================
--- trunk/qt/src/YQTable.cc (original)
+++ trunk/qt/src/YQTable.cc Thu Oct 16 19:59:12 2008
@@ -112,6 +112,14 @@
void
YQTable::addItem( YItem * yitem )
{
+ addItem( yitem,
+ false ); // batchMode
+}
+
+
+void
+YQTable::addItem( YItem * yitem, bool batchMode )
+{
YTableItem * item = dynamic_cast (yitem);
YUI_CHECK_PTR( item );
@@ -120,7 +128,7 @@
YQTableListViewItem * clone = new YQTableListViewItem( this, _qt_listView, item );
YUI_CHECK_NEW( clone );
- if ( item->selected() )
+ if ( ! batchMode && item->selected() )
{
// YTable enforces single selection, if appropriate
@@ -128,28 +136,58 @@
YQTable::selectItem( YSelectionWidget::selectedItem(), true );
}
-
+
//
// Set column alignment
//
-
- for ( int i=0; i < columns(); i++ )
- {
- int qt_alignment = Qt::AlignLeft;
- switch ( alignment( i ) )
+ for ( int col=0; col < columns(); col++ )
+ {
+ switch ( alignment( col ) )
{
- case YAlignBegin: qt_alignment = Qt::AlignLeft; break;
- case YAlignCenter: qt_alignment = Qt::AlignCenter; break;
- case YAlignEnd: qt_alignment = Qt::AlignRight; break;
+ case YAlignBegin: break; // That's default anyway
+ case YAlignCenter: clone->setTextAlignment( col, Qt::AlignCenter ); break;
+ case YAlignEnd: clone->setTextAlignment( col, Qt::AlignRight ); break;
case YAlignUnchanged: break;
}
- clone->setTextAlignment( i, qt_alignment );
}
+
+ if ( ! batchMode )
+ _qt_listView->sortItems( 0, Qt::AscendingOrder);
+}
+
+
+void
+YQTable::addItems( const YItemCollection & itemCollection )
+{
+ YQSignalBlocker sigBlocker( _qt_listView );
+
+ // Leaving our default ResizeToContents mode on means a massive performance
+ // drop when many (>50) are inserted (bnc #433130)
+ QHeaderView::ResizeMode oldResizeMode = _qt_listView->header()->resizeMode(0);
+ _qt_listView->header()->setResizeMode( QHeaderView::Fixed );
+
+ for ( YItemConstIterator it = itemCollection.begin();
+ it != itemCollection.end();
+ ++it )
+ {
+ addItem( *it,
+ true ); // batchMode
+ }
+
+
+ YItem * sel = YSelectionWidget::selectedItem();
- _qt_listView->sortItems ( 0, Qt::AscendingOrder) ;
+ if ( sel )
+ YQTable::selectItem( sel, true );
+
+ _qt_listView->sortItems( 0, Qt::AscendingOrder);
+ _qt_listView->header()->setResizeMode( oldResizeMode );
+
+ for ( int i=0; i < columns(); i++ )
+ _qt_listView->resizeColumnToContents( i );
}
Modified: trunk/qt/src/YQTable.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQTable.h?rev=52314&r1=52313&r2=52314&view=diff
==============================================================================
--- trunk/qt/src/YQTable.h (original)
+++ trunk/qt/src/YQTable.h Thu Oct 16 19:59:12 2008
@@ -61,6 +61,13 @@
virtual void addItem( YItem * item );
/**
+ * Add multiple items.
+ *
+ * Reimplemented for efficiency from YSelectionWidget.
+ **/
+ virtual void addItems( const YItemCollection & itemCollection );
+
+ /**
* Select or deselect an item.
*
* Reimplemented from YSelectionWidget.
@@ -154,6 +161,12 @@
**/
void selectOrigItem( QTreeWidgetItem * listViewItem );
+ /**
+ * Internal addItem() method that will not do expensive operations in batch
+ * mode.
+ **/
+ void addItem( YItem * item, bool batchMode );
+
//
// Data members
//
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org