[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdevplatform/plugins/standardoutputview
From:       Andreas Pakulat <apaku () gmx ! de>
Date:       2008-06-08 9:19:32
Message-ID: 1212916772.158761.5702.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 818301 by apaku:

Fix Auto-Scroll-To-Bottom behaviour, so it doesn't scroll automatically once
the scrollbar has been moved manually from the bottom position (just like kdev3
did)

Along the way add some optimizations for the listview, so it knows it displays \
plain-text-list. Should make output a lot faster.


 M  +22 -7     outputwidget.cpp  
 M  +3 -0      outputwidget.h  


--- trunk/KDE/kdevplatform/plugins/standardoutputview/outputwidget.cpp #818300:818301
@@ -23,6 +23,7 @@
 #include "ioutputviewmodel.h"
 
 #include "standardoutputview.h"
+#include <QtCore/QSignalMapper>
 #include <QtGui/QAbstractItemDelegate>
 #include <QtGui/QItemSelectionModel>
 #include <QtGui/QListView>
@@ -43,6 +44,8 @@
     : QWidget( parent ), tabwidget(0), data(tvdata)
 {
     setWindowTitle(i18n("Output View"));
+    scrollModelViewMapper = new QSignalMapper(this);
+    connect(scrollModelViewMapper, SIGNAL(mapped(int)), this, \
SLOT(scrollToBottom(int)));  QVBoxLayout* layout = new QVBoxLayout(this);
     layout->setMargin(0);
     if( data->type & KDevelop::IOutputView::MultipleView )
@@ -69,7 +72,7 @@
         addAction(nextAction);
     }
 
-    connect( data, SIGNAL( outputAdded( int ) ), 
+    connect( data, SIGNAL( outputAdded( int ) ),
              this, SLOT( addOutput( int ) ) );
 
     connect( this, SIGNAL( outputRemoved( int, int ) ),
@@ -108,7 +111,6 @@
 
 void OutputWidget::changeDelegate( int id )
 {
-    kDebug() << "delegate changed for id:" << id;
     if( data->outputdata.contains( id ) && views.contains( id ) )
         views.value(id)->setItemDelegate(data->outputdata.value(id)->delegate);
     else
@@ -117,16 +119,16 @@
 
 void OutputWidget::changeModel( int id )
 {
-    kDebug() << "model changed for id:" << id;
     if( data->outputdata.contains( id ) && views.contains( id ) )
     {
         OutputData* od = data->outputdata.value(id);
-        kDebug() << "output:" << od << "id of output:" << od->id << "title:" << \
od->title  << "tv id" << od->toolView->toolViewId << "tv title:" << \
od->toolView->title; +        scrollModelViewMapper->removeMappings( views.value( id \
)->model() );  views.value( id )->setModel(data->outputdata.value(id)->model);
         if( data->outputdata.value(id)->behaviour & \
KDevelop::IOutputView::AutoScroll )  {
-            connect( data->outputdata.value(id)->model, SIGNAL(rowsInserted(const \
                QModelIndex&, int, int)),
-                     views.value(id), SLOT(scrollToBottom()) );
+             scrollModelViewMapper->setMapping( data->outputdata.value(id)->model, \
id ); +             connect( \
data->outputdata.value(id)->model,SIGNAL(rowsInserted(const QModelIndex&, int, int)), \
 +                      scrollModelViewMapper, SLOT(map()) );
         }
     }
     else
@@ -159,6 +161,7 @@
             views.value( id )->setModel( 0 );
             views.value( id )->setItemDelegate( 0 );
         }
+        scrollModelViewMapper->removeMappings( data->outputdata.value( id )->model \
);  emit outputRemoved( data->toolViewId, id );
     }
     enableActions();
@@ -273,12 +276,14 @@
             kDebug() << "creating listview";
             listview = new QListView(this);
             listview->setEditTriggers( QAbstractItemView::NoEditTriggers );
+            listview->setViewMode( QListView::ListMode );
+            listview->setUniformItemSizes( true );
             views[id] = listview;
             connect( listview, SIGNAL(activated(const QModelIndex&)),
                      this, SLOT(activate(const QModelIndex&)));
             connect( listview, SIGNAL(clicked(const QModelIndex&)),
                      this, SLOT(activate(const QModelIndex&)));
-    
+
             if( data->type & KDevelop::IOutputView::MultipleView )
             {
                 tabwidget->addTab( listview, data->outputdata.value(id)->title );
@@ -293,6 +298,8 @@
             {
                 listview = new QListView(this);
                 listview->setEditTriggers( QAbstractItemView::NoEditTriggers );
+                listview->setViewMode( QListView::ListMode );
+                listview->setUniformItemSizes( true );
                 layout()->addWidget( listview );
                 connect( listview, SIGNAL(activated(const QModelIndex&)),
                          this, SLOT(activate(const QModelIndex&)));
@@ -367,4 +374,12 @@
     }
 }
 
+void OutputWidget::scrollToBottom( int id )
+{
+    if( views.contains( id ) && views.value( id )->verticalScrollBar()->value() == \
views.value( id )->verticalScrollBar()->maximum() )  +    {
+        views.value( id )->scrollToBottom();
+    }
+}
+
 #include "outputwidget.moc"
--- trunk/KDE/kdevplatform/plugins/standardoutputview/outputwidget.h #818300:818301
@@ -26,6 +26,7 @@
 #include <QtCore/QMap>
 class QString;
 class StandardOutputView;
+class QSignalMapper;
 class QStackedWidget;
 class QListView;
 class QToolButton;
@@ -56,6 +57,7 @@
 private slots:
     void nextOutput();
     void previousOutput();
+    void scrollToBottom( int );
 private:
     QListView* createListView(int id);
     void setCurrentWidget( QListView* view );
@@ -69,6 +71,7 @@
     QToolButton* m_closeButton;
     KAction* nextAction;
     KAction* previousAction;
+    QSignalMapper* scrollModelViewMapper;
 };
 
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic