id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,platform_version,platform,must_fix,status_info
1622,Implement capability to add tabs in the main window,lynxID,lynxID,"Index: python/gui/qgisinterface.sip
===================================================================
--- python/gui/qgisinterface.sip	(revision 10465)
+++ python/gui/qgisinterface.sip	(working copy)
@@ -70,6 +70,9 @@
     /** Return a pointer to the map canvas */
     virtual QgsMapCanvas * mapCanvas()=0;
 
+    /** Return a pointer to the main tab widget */
+    virtual QTabWidget * tabWidget()=0;
+
     /** Return a pointer to the main window (instance of QgisApp in case of QGIS) */
     virtual QWidget * mainWindow()=0;
 
@@ -90,6 +93,21 @@
 	/** Remove specified dock widget from main window (doesn't delete it). Added in QGIS 1.1. */
 	virtual void removeDockWidget ( QDockWidget * dockwidget )=0;
 
+    /** Add a tab widget to the main window */
+    virtual void addTabWidget( QWidget *page, const QString &label )=0;
+
+    /** Add a tab widget to the main window with icon */
+    virtual void addTabWidget( QWidget *page, const QIcon &icon, const QString &label )=0;
+
+    /** Insert a tab widget to the main window with label */
+    virtual void insertTabWidget( int index, QWidget *page, const QString &label )=0;
+
+    /** Insert a tab widget to the main window with icon and label */
+    virtual void insertTabWidget( int index, QWidget *page, const QIcon &icon, const QString &label )=0;
+
+    /** Remove specified tab widget from main window (doesn't delete it). Added in QGIS 1.1. */
+    virtual void removeTabWidget( int index )=0;
+
     /** refresh legend of a layer */
     virtual void refreshLegend( QgsMapLayer * layer )=0;
 
Index: src/app/qgisappinterface.h
===================================================================
--- src/app/qgisappinterface.h	(revision 10465)
+++ src/app/qgisappinterface.h	(working copy)
@@ -85,6 +85,9 @@
     /** Return a pointer to the map canvas used by qgisapp */
     QgsMapCanvas * mapCanvas();
 
+    /** Return a pointer to the main tab widget that containing map canvas */
+    virtual QTabWidget * tabWidget();
+
     /** Gives access to main QgisApp object
 
         Plugins don't need to know about QgisApp, as we pass it as QWidget,
@@ -105,6 +108,21 @@
     /** Remove specified dock widget from main window (doesn't delete it). Added in QGIS 1.1. */
     void removeDockWidget( QDockWidget * dockwidget );
 
+    /** Add a tab widget to the main window */
+    void addTabWidget( QWidget *page, const QString &label );
+
+    /** Add a tab widget to the main window with icon */
+    void addTabWidget( QWidget *page, const QIcon &icon, const QString &label );
+
+    /** Insert a tab widget to the main window with label */
+    void insertTabWidget( int index, QWidget *page, const QString &label );
+
+    /** Insert a tab widget to the main window with icon and label */
+    void insertTabWidget( int index, QWidget *page, const QIcon &icon, const QString &label );
+
+    /** Remove specified tab widget from main window (doesn't delete it). Added in QGIS 1.1. */
+    void removeTabWidget( int index );
+
     virtual void refreshLegend( QgsMapLayer *l );
 
     /** Add window to Window menu. The action title is the window title
Index: src/app/qgisapp.h
===================================================================
--- src/app/qgisapp.h	(revision 10465)
+++ src/app/qgisapp.h	(working copy)
@@ -59,6 +59,8 @@
 #include <QToolBar>
 #include <QAbstractSocket>
 #include <QPointer>
+#include <QTabWidget>
+#include <QTabBar>
 
 #include ""qgsconfig.h""
 #include ""qgspoint.h""
@@ -137,8 +139,11 @@
     //!Overloaded version of the private function with same name that takes the imagename as a parameter
     void saveMapAsImage( QString, QPixmap * );
     /** Get the mapcanvas object from the app */
-    QgsMapCanvas * mapCanvas() { return mMapCanvas; };
+    QgsMapCanvas * mapCanvas() { return mMapCanvas; }
 
+    /** Get the tabwidget object from the app */
+    QTabWidget * tabWidget() { return mTabWidget; }
+
     QgsComposer* printComposer() {return mComposer;}
 
     //! Set theme (icons)
@@ -180,6 +185,22 @@
      * After adding the dock widget to the ui (by delegating to the QMainWindow
      * parent class, it will also add it to the View menu list of docks.*/
     void addDockWidget( Qt::DockWidgetArea area, QDockWidget * dockwidget );
+
+    /** Add a tab widget to the main window with label */
+    void addTabWidget( QWidget *page, const QString &label );
+
+    /** Add a tab widget to the main window with icon and label */
+    void addTabWidget( QWidget *page, const QIcon &icon, const QString &label );
+
+    /** Insert a tab widget to the main window with label */
+    void insertTabWidget( int index, QWidget *page, const QString &label );
+
+    /** Insert a tab widget to the main window with icon and label */
+    void insertTabWidget( int index, QWidget *page, const QIcon &icon, const QString &label );
+
+    /** Remove specified dock widget from main window (doesn't delete it). Added in QGIS 1.1. */
+    void removeTabWidget( int index );
+
     /** Add a toolbar to the main window. Overloaded from QMainWindow.
      * After adding the toolbar to the ui (by delegating to the QMainWindow
      * parent class, it will also add it to the View menu list of toolbars.*/
@@ -814,6 +835,20 @@
         QgsMapTool* mAddIsland;
     } mMapTools;
 
+//    class QgsTabWidget : public QTabWidget
+//    {
+//      public:
+//      QgsTabWidget(QWidget *parent) {
+//        QgsTabWidget::QTabWidget();
+//        tabBar()->hide();
+//      }
+//      void addTab(QWidget *widget, const QIcon &icon, const QString &label) { QTabWidget::addTab(widget, icon, label); if (count() > 1) tabBar()->show(); }
+//      void addTab(QWidget *widget, const QString &label) { QTabWidget::addTab(widget, label); if (count() > 1) tabBar()->show(); }
+//      void insertTab(int index, QWidget *widget, const QIcon &icon, const QString &label) { QTabWidget::insertTab(index, widget, icon, label); if (count() > 1) tabBar()->show(); }
+//      void insertTab(int index, QWidget *widget, const QString &label) { QTabWidget::insertTab(index, widget, label); if (count() > 1) tabBar()->show(); }
+//      void removeTab(int index) { if (count() != 1) { QTabWidget::removeTab(index); if (count() == 1) tabBar()->hide();  } }
+//    };
+
     QgsMapTool *mNonEditMapTool;
 
     //! Widget that will live on the statusbar to display ""scale 1:""
@@ -846,6 +881,9 @@
     QMenu *toolPopupCapture;
     //! Map canvas
     QgsMapCanvas *mMapCanvas;
+    //! Tab widget
+//    QgsTabWidget *mTabWidget;
+    QTabWidget *mTabWidget;
     //! Table of contents (legend) for the map
     QgsLegend *mMapLegend;
     //! Cursor for the overview map
Index: src/app/qgisapp.cpp
===================================================================
--- src/app/qgisapp.cpp	(revision 10465)
+++ src/app/qgisapp.cpp	(working copy)
@@ -1548,8 +1548,8 @@
   // Connect warning dialog from project reading
   connect( QgsProject::instance(), SIGNAL( oldProjectVersionWarning( QString ) ),
            this, SLOT( oldProjectVersionWarning( QString ) ) );
+}
 
-}
 void QgisApp::createCanvas()
 {
   // ""theMapCanvas"" used to find this canonical instance later
@@ -1557,7 +1557,12 @@
   mMapCanvas->setWhatsThis( tr( ""Map canvas. This is where raster and vector ""
                                 ""layers are displayed when added to the map"" ) );
 
-  setCentralWidget( mMapCanvas );
+  mTabWidget = new QTabWidget(this);
+  mTabWidget->setTabPosition(QTabWidget::East);
+  mTabWidget->addTab(mMapCanvas, tr(""2D view""));  
+
+  setCentralWidget( mTabWidget );
+
   // set the focus to the map canvas
   mMapCanvas->setFocus();
 
@@ -1653,6 +1658,31 @@
   mMapCanvas->refresh();
 }
 
+void QgisApp::addTabWidget( QWidget *page, const QString &label )
+{
+  mTabWidget->addTab( page, label );
+}
+
+void QgisApp::addTabWidget( QWidget *page, const QIcon &icon, const QString &label )
+{
+  mTabWidget->addTab( page, icon, label );
+}
+
+void QgisApp::insertTabWidget( int index, QWidget *page, const QString &label )
+{
+  mTabWidget->insertTab( index, page, label );
+}
+
+void QgisApp::insertTabWidget( int index, QWidget *page, const QIcon &icon, const QString &label )
+{
+  mTabWidget->insertTab( index, page, icon, label );
+}
+
+void QgisApp::removeTabWidget( int index )
+{
+  mTabWidget->removeTab( index );
+}
+
 QToolBar *QgisApp::addToolBar( QString name )
 {
   QToolBar *toolBar = QMainWindow::addToolBar( name );
Index: src/app/qgisappinterface.cpp
===================================================================
--- src/app/qgisappinterface.cpp	(revision 10465)
+++ src/app/qgisappinterface.cpp	(working copy)
@@ -136,6 +136,11 @@
   return qgis->mapCanvas();
 }
 
+QTabWidget * QgisAppInterface::tabWidget()
+{
+  return qgis->tabWidget();
+}
+
 QWidget * QgisAppInterface::mainWindow()
 {
   return qgis;
@@ -169,6 +174,31 @@
   qgis->removeDockWidget( dockwidget );
 }
 
+void QgisAppInterface::addTabWidget( QWidget *page, const QString &label )
+{
+  qgis->addTabWidget( page, label );
+}
+
+void QgisAppInterface::addTabWidget( QWidget *page, const QIcon &icon, const QString &label )
+{
+  qgis->addTabWidget( page, icon, label );
+}
+
+void QgisAppInterface::insertTabWidget( int index, QWidget *page, const QString &label )
+{
+  qgis->insertTabWidget( index, page, label );
+}
+
+void QgisAppInterface::insertTabWidget( int index, QWidget *page, const QIcon &icon, const QString &label )
+{
+  qgis->insertTabWidget( index, page, icon, label );
+}
+
+void QgisAppInterface::removeTabWidget( int index )
+{
+  qgis->removeTabWidget( index );
+}
+
 void QgisAppInterface::refreshLegend( QgsMapLayer *l )
 {
   if ( l && qgis && qgis->legend() )
===================================================================
--- src/gui/qgisinterface.h	(revision 10465)
+++ src/gui/qgisinterface.h	(working copy)
@@ -25,6 +25,8 @@
 class QDockWidget;
 class QMainWindow;
 class QWidget;
+class QTabWidget;
+class QIcon;
 #include <QObject>
 #include <QPair>
 
@@ -104,6 +106,9 @@
     /** Return a pointer to the map canvas */
     virtual QgsMapCanvas * mapCanvas() = 0;
 
+    /** Return a pointer to the main tab widget */
+    virtual QTabWidget * tabWidget() = 0;
+
     /** Return a pointer to the main window (instance of QgisApp in case of QGIS) */
     virtual QWidget * mainWindow() = 0;
 
@@ -121,6 +126,21 @@
     /** Remove specified dock widget from main window (doesn't delete it). Added in QGIS 1.1. */
     virtual void removeDockWidget( QDockWidget * dockwidget ) = 0;
 
+    /** Add a tab widget to the main window with label */
+    virtual void addTabWidget( QWidget *page, const QString &label ) = 0;
+
+    /** Add a tab widget to the main window with icon and label */
+    virtual void addTabWidget( QWidget *page, const QIcon &icon, const QString &label ) = 0;
+
+    /** Insert a tab widget to the main window with label */
+    virtual void insertTabWidget( int index, QWidget *page, const QString &label ) = 0;
+
+    /** Insert a tab widget to the main window with icon and label */
+    virtual void insertTabWidget( int index, QWidget *page, const QIcon &icon, const QString &label ) = 0;
+
+    /** Remove specified dock widget from main window (doesn't delete it). Added in QGIS 1.1. */
+    virtual void removeTabWidget( int index ) = 0;
+
     /** refresh the legend of a layer */
     virtual void refreshLegend( QgsMapLayer *l ) = 0;
 ",patch,new,minor: annoyance,Version 1.7.0,GUI,Trunk,,tabs,,,Fedora,No,0
