Opened 15 years ago
Last modified 14 years ago
#1622 new patch
Implement capability to add tabs in the main window
Reported by: | lynxID | Owned by: | lynxID |
---|---|---|---|
Priority: | minor: annoyance | Milestone: | Version 1.7.0 |
Component: | GUI | Version: | Trunk |
Keywords: | tabs | Cc: | |
Must Fix for Release: | No | Platform: | Fedora |
Platform Version: | Awaiting user input: | no |
Description
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;
Attachments (5)
Change History (10)
by , 15 years ago
Attachment: | addTabWidget.patch added |
---|
comment:1 by , 15 years ago
comment:2 by , 15 years ago
Component: | Build/Install → GUI |
---|
comment:3 by , 15 years ago
I would suggest you to modify the patch. With this patch, users will get a tabbed view with tab "2d view" containing map canvas. However in common use case when not using ossim planet plugin, the user has lost several pixels of canvas on every border, moreover it can create some confusion "if this is a 2d view, where are the other views?".
The best option would be to create the tab view only on request on a new tab and to remove the tab view once there's only one remaining tab.
by , 15 years ago
Attachment: | addTabWidget2.patch added |
---|
by , 15 years ago
Attachment: | qgis_tabs.patch added |
---|
comment:4 by , 14 years ago
this a link to download the add_tabs.patch and relative icons needed by the patch :
http://epifanio@epy.svn.beanstalkapp.com/trunk/icons http://epifanio@epy.svn.beanstalkapp.com/trunk/tabs_patches
copy them in : qgis_trunk/images/themes/default
comment:5 by , 14 years ago
Milestone: | Version 1.5.0 → Version 1.6.0 |
---|
The patch implement an ability to add tabs.