[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-04-24 21:40:09
Message-ID: 1209073209.081472.12061.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 800813 by apaku:

Implement the 3 types of output's, currently uses a tabwidget for the
multi-output but I have plans to change that soon to a list.


 M  +117 -26   outputwidget.cpp  
 M  +29 -26    outputwidget.h  


--- trunk/KDE/kdevplatform/plugins/standardoutputview/outputwidget.cpp #800812:800813
@@ -28,24 +28,37 @@
 #include <QtGui/QListView>
 #include <QtGui/QToolButton>
 #include <QtGui/QScrollBar>
+#include <QtGui/QVBoxLayout>
+#include <QtGui/QStackedWidget>
 #include <kmenu.h>
 #include <kdebug.h>
 #include <klocale.h>
 #include <kicon.h>
+#include <ktabwidget.h>
 
 #include "toolviewdata.h"
 
 OutputWidget::OutputWidget(QWidget* parent, ToolViewData* tvdata)
-    : KTabWidget( parent ), data(tvdata)
+    : QWidget( parent ), tabwidget(0), data(tvdata)
 {
     setWindowTitle(i18n("Output View"));
-    m_closeButton = new QToolButton( this );
-    connect( m_closeButton, SIGNAL( clicked() ),
-             this, SLOT( closeActiveView() ) );
-    m_closeButton->setIcon( KIcon("tab-close") );
-    m_closeButton->adjustSize();
-    m_closeButton->setToolTip( i18n( "Close the currently active output view") );
-    setCornerWidget( m_closeButton, Qt::TopRightCorner );
+    QVBoxLayout* layout = new QVBoxLayout(this);
+    if( data->type & KDevelop::IOutputView::MultipleView )
+    {
+        tabwidget = new KTabWidget(this);
+        layout->addWidget( tabwidget );
+        m_closeButton = new QToolButton( this );
+        connect( m_closeButton, SIGNAL( clicked() ),
+                 this, SLOT( closeActiveView() ) );
+        m_closeButton->setIcon( KIcon("tab-close") );
+        m_closeButton->adjustSize();
+        m_closeButton->setToolTip( i18n( "Close the currently active output view") \
); +        tabwidget->setCornerWidget( m_closeButton, Qt::TopRightCorner );
+    } else if ( data->type == KDevelop::IOutputView::HistoryView )
+    {
+        stackwidget = new QStackedWidget( this );
+        layout->addWidget( stackwidget );
+    }
 
     connect( data, SIGNAL( outputAdded( int ) ), 
              this, SLOT( addOutput( int ) ) );
@@ -71,6 +84,17 @@
     connect( data->outputdata.value(id), SIGNAL(delegateChanged(int)), this, \
SLOT(changeDelegate(int)));  }
 
+void OutputWidget::setCurrentWidget( QListView* view )
+{
+    if( data->type & KDevelop::IOutputView::MultipleView )
+    {
+        tabwidget->setCurrentWidget( view );
+    } else if( data->type & KDevelop::IOutputView::HistoryView )
+    {
+        stackwidget->setCurrentWidget( view );
+    }
+}
+
 void OutputWidget::changeDelegate( int id )
 {
     kDebug(9500) << "delegate changed for id:" << id;
@@ -104,20 +128,33 @@
 {
     if( data->outputdata.contains( id ) && views.contains( id ) )
     {
-        QListView* w = views.value(id);
-        int idx = indexOf( w );
-        if( idx != -1 )
+        if( data->type & KDevelop::IOutputView::MultipleView || data->type & \
KDevelop::IOutputView::HistoryView )  {
-            removeTab( idx );
+            QListView* w = views.value(id);
+            if( data->type & KDevelop::IOutputView::MultipleView )
+            {
+                int idx = tabwidget->indexOf( w );
+                if( idx != -1 )
+                {
+                    tabwidget->removeTab( idx );
+                }
+            } else
+            {
+                stackwidget->removeWidget( w );
+            }
             delete w;
-            emit outputRemoved( data->toolViewId, id );
+        } else
+        {
+            views.value( id )->setModel( 0 );
+            views.value( id )->setItemDelegate( 0 );
         }
+        emit outputRemoved( data->toolViewId, id );
     }
 }
 
 void OutputWidget::closeActiveView()
 {
-    QWidget* widget = currentWidget();
+    QWidget* widget = tabwidget->currentWidget();
     if( !widget )
         return;
     foreach( int id, views.keys() )
@@ -133,9 +170,26 @@
     }
 }
 
+QWidget* OutputWidget::currentWidget()
+{
+    QWidget* widget;
+    if( data->type & KDevelop::IOutputView::MultipleView )
+    {
+        widget = tabwidget->currentWidget();
+    } else if( data->type & KDevelop::IOutputView::MultipleView )
+    {
+        widget = stackwidget->currentWidget();
+    } else
+    {
+        widget = views.begin().value();
+    }
+    return widget;
+}
+
 void OutputWidget::selectNextItem()
 {
     QWidget* widget = currentWidget();
+
     if( !widget || !widget->isVisible() )
         return;
     QAbstractItemView *view = dynamic_cast<QAbstractItemView*>(widget);
@@ -200,16 +254,43 @@
 {
     if( !views.contains(id) )
     {
-        kDebug(9500) << "creating listview";
-        QListView* listview = new QListView(this);
-        listview->setEditTriggers( QAbstractItemView::NoEditTriggers );
-        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&)));
+        QListView* listview = 0;
+        if( data->type & KDevelop::IOutputView::MultipleView || data->type & \
KDevelop::IOutputView::HistoryView ) +        {
+            kDebug(9500) << "creating listview";
+            listview = new QListView(this);
+            listview->setEditTriggers( QAbstractItemView::NoEditTriggers );
+            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&)));
     
-        addTab( listview, data->outputdata.value(id)->title );
+            if( data->type & KDevelop::IOutputView::MultipleView )
+            {
+                tabwidget->addTab( listview, data->outputdata.value(id)->title );
+            } else
+            {
+                stackwidget->addWidget( listview );
+                stackwidget->setCurrentWidget( listview );
+            }
+        } else
+        {
+            if( views.isEmpty() )
+            {
+                listview = new QListView(this);
+                listview->setEditTriggers( QAbstractItemView::NoEditTriggers );
+                layout()->addWidget( listview );
+                connect( listview, SIGNAL(activated(const QModelIndex&)),
+                         this, SLOT(activate(const QModelIndex&)));
+                connect( listview, SIGNAL(clicked(const QModelIndex&)),
+                         this, SLOT(activate(const QModelIndex&)));
+            } else
+            {
+                listview = views.begin().value();
+            }
+            views[id] = listview;
+        }
         changeModel( id );
         changeDelegate( id );
         return listview;
@@ -223,10 +304,20 @@
 {
     if( views.contains(id) )
     {
-        int idx = indexOf( views.value(id) );
-        if( idx >= 0 )
+        if( data->type & KDevelop::IOutputView::MultipleView )
         {
-            setCurrentIndex( idx );
+            int idx = tabwidget->indexOf( views.value(id) );
+            if( idx >= 0 )
+            {
+                tabwidget->setCurrentIndex( idx );
+            }
+        } else if( data->type & KDevelop::IOutputView::HistoryView )
+        {
+            int idx = stackwidget->indexOf( views.value(id) );
+            if( idx >= 0 )
+            {
+                tabwidget->setCurrentIndex( idx );
+            }
         }
     }
 }
--- trunk/KDE/kdevplatform/plugins/standardoutputview/outputwidget.h #800812:800813
@@ -22,42 +22,45 @@
 #ifndef OUTPUTWIDGET_H
 #define OUTPUTWIDGET_H
 
-#include <ktabwidget.h>
+#include <QtGui/QWidget>
 #include <QtCore/QMap>
-class QAbstractItemModel;
 class QString;
 class StandardOutputView;
-class OutputViewCommand;
-class QModelIndex;
+class QStackedWidget;
 class QListView;
 class QToolButton;
-class QScrollBar;
 class ToolViewData;
+class KTabWidget;
+class QModelIndex;
 
-class OutputWidget : public KTabWidget
+class OutputWidget : public QWidget
 {
-    Q_OBJECT
-    public:
-        OutputWidget(QWidget* parent, ToolViewData* data);
-        void removeOutput( int id );
-        void raiseOutput( int id );
-    public Q_SLOTS:
-        void addOutput( int id );
-        void changeModel( int id );
-        void changeDelegate( int id );
-        void closeActiveView();
-        void selectNextItem();
-        void selectPrevItem();
-        void activate(const QModelIndex&);
+Q_OBJECT
+public:
+    OutputWidget(QWidget* parent, ToolViewData* data);
+    void removeOutput( int id );
+    void raiseOutput( int id );
+public Q_SLOTS:
+    void addOutput( int id );
+    void changeModel( int id );
+    void changeDelegate( int id );
+    void closeActiveView();
+    void selectNextItem();
+    void selectPrevItem();
+    void activate(const QModelIndex&);
 
-    Q_SIGNALS:
-        void outputRemoved( int, int );
-    private:
-        QListView* createListView(int id);
+Q_SIGNALS:
+    void outputRemoved( int, int );
+private:
+    QListView* createListView(int id);
+    void setCurrentWidget( QListView* view );
+    QWidget* currentWidget();
 
-        QMap<int, QListView*> views;
-        ToolViewData* data;
-        QToolButton* m_closeButton;
+    QMap<int, QListView*> views;
+    KTabWidget* tabwidget;
+    QStackedWidget* stackwidget;
+    ToolViewData* data;
+    QToolButton* m_closeButton;
 };
 
 #endif


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

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