Hi Agus,
This is something I've recently been experimenting with.
Attached is a patch which modifies the legend and overview panes to be
QDockWidgets. They can be undocked or docked left or right; there is also an
entry on the View menu if they get lost.
This patch does not correctly resize the map content when (un)docking occurs. I
will fix these details next if others like this proposal.
Tom
Agustin Lobo wrote:
I'd like to propose the idea of being able to undock the
legend panel and getting it as an independent window, which
could be even sent to another Desk. In this way the area for the
geographic display could be enlarged. Also, in general, we should
consider that many (most?) users will have 2 monitors and I've
personally found handy having one of them just devoted to the geographic
display.
Also, It would be useful if the grass tools window could be
sent to a different Desk. Currently, if you send the
grass tools window to another Desk, everything goes to that desk.
Agus
Index: src/app/qgisapp.h
===================================================================
--- src/app/qgisapp.h (revision 8410)
+++ src/app/qgisapp.h (working copy)
@@ -35,6 +35,7 @@
class QPixmap;
class QSplashScreen;
class QValidator;
+class QActionGroup;
class QgisAppInterface;
class QgsClipboard;
@@ -52,7 +53,6 @@
class QgsRect;
class QgsVectorLayer;
-#include <ui_qgisappbase.h>
#include <QMainWindow>
#include <QAbstractSocket>
@@ -62,7 +62,7 @@
/*! \class QgisApp
* \brief Main window for the Qgis application
*/
-class QgisApp : public QMainWindow, public Ui::QgisAppBase
+class QgisApp : public QMainWindow
{
Q_OBJECT;
public:
@@ -535,7 +535,10 @@
QMenu *mSettingsMenu;
QMenu *mHelpMenu;
- class Tools
+ QDockWidget *mLegendDock;
+ QDockWidget *mOverviewDock;
+
+class Tools
{
public:
QgsMapTool* mZoomIn;
Index: src/app/qgisapp.cpp
===================================================================
--- src/app/qgisapp.cpp (revision 8410)
+++ src/app/qgisapp.cpp (working copy)
@@ -33,6 +33,7 @@
#include <QDesktopWidget>
#include <QDialog>
#include <QDir>
+#include <QDockWidget>
#include <QEvent>
#include <QFile>
#include <QFileInfo>
@@ -305,7 +306,8 @@
: QMainWindow(parent,fl),
mSplash(splash)
{
- setupUi(this);
+// setupUi(this);
+ resize(640, 480);
mSplash->showMessage(tr("Checking database"), Qt::AlignHCenter |
Qt::AlignBottom);
qApp->processEvents();
@@ -327,8 +329,8 @@
setTheme(mThemeName);
updateRecentProjectPaths();
createCanvas();
+ createLegend();
createOverview();
- createLegend();
createMapTips();
mComposer = new QgsComposer(this); // Map composer
@@ -378,7 +380,7 @@
// now build raster file filter
QgsRasterLayer::buildSupportedRasterFileFilter( mRasterFileFilter );
-
+/*
// Set the background colour for toolbox and overview as they default to
// white instead of the window color
QPalette myPalette = toolBox->palette();
@@ -389,7 +391,7 @@
myPalette.setColor(QPalette::Button, myPalette.window().color());
mMapLegend->setPalette(myPalette);
//and for overview control this is done in createOverView method
-
+*/
// Do this last in the ctor to ensure that all members are instantiated
properly
setupConnections();
//
@@ -493,12 +495,12 @@
// Add the recently accessed project file paths to the File menu
mRecentProjectPaths = settings.readListEntry("/UI/recentProjectsList");
-
+/*
// Set the behaviour when the map splitters are resized
bool splitterRedraw = settings.value("/qgis/splitterRedraw", true).toBool();
canvasLegendSplit->setOpaqueResize(splitterRedraw);
legendOverviewSplit->setOpaqueResize(splitterRedraw);
-}
+*/}
//////////////////////////////////////////////////////////////////////
@@ -1314,10 +1316,11 @@
mMapCanvas = new QgsMapCanvas(this, "theMapCanvas" );
mMapCanvas->setWhatsThis(tr("Map canvas. This is where raster and vector
layers are displayed when added to the map"));
- mMapCanvas->setMinimumWidth(10);
- QVBoxLayout *myCanvasLayout = new QVBoxLayout;
- myCanvasLayout->addWidget(mMapCanvas);
- tabWidget->widget(0)->setLayout(myCanvasLayout);
+// mMapCanvas->setMinimumWidth(10);
+// QVBoxLayout *myCanvasLayout = new QVBoxLayout;
+// myCanvasLayout->addWidget(mMapCanvas);
+// tabWidget->widget(0)->setLayout(myCanvasLayout);
+ setCentralWidget(mMapCanvas);
// set the focus to the map canvas
mMapCanvas->setFocus();
@@ -1367,10 +1370,16 @@
QBitmap overviewPanBmpMask = QBitmap::fromData(QSize(16, 16), pan_mask_bits);
mOverviewMapCursor = new QCursor(overviewPanBmp, overviewPanBmpMask, 5, 5);
overviewCanvas->setCursor(*mOverviewMapCursor);
- QVBoxLayout *myOverviewLayout = new QVBoxLayout;
- myOverviewLayout->addWidget(overviewCanvas);
- overviewFrame->setLayout(myOverviewLayout);
-
+// QVBoxLayout *myOverviewLayout = new QVBoxLayout;
+// myOverviewLayout->addWidget(overviewCanvas);
+// overviewFrame->setLayout(myOverviewLayout);
+ mOverviewDock = new QDockWidget(tr("Overview"), this);
+ mOverviewDock->setObjectName("Overview");
+ mOverviewDock->setAllowedAreas(Qt::LeftDockWidgetArea |
Qt::RightDockWidgetArea);
+ mOverviewDock->setWidget(overviewCanvas);
+ addDockWidget(Qt::LeftDockWidgetArea, mOverviewDock);
+ mViewMenu->addAction(mOverviewDock->toggleViewAction());
+
mMapCanvas->setOverview(overviewCanvas);
// moved here to set anti aliasing to both map canvas and overview
@@ -1395,9 +1404,16 @@
mMapLegend->setToggleEditingAction(mActionToggleEditing);
mMapLegend->setWhatsThis(tr("Map legend that displays all the layers
currently on the map canvas. Click on the check box to turn a layer on or off.
Double click on a layer in the legend to customize its appearance and set other
properties."));
- QVBoxLayout *myLegendLayout = new QVBoxLayout;
- myLegendLayout->addWidget(mMapLegend);
- toolBox->widget(0)->setLayout(myLegendLayout);
+// QVBoxLayout *myLegendLayout = new QVBoxLayout;
+// myLegendLayout->addWidget(mMapLegend);
+// toolBox->widget(0)->setLayout(myLegendLayout);
+ mLegendDock = new QDockWidget(tr("Legend"), this);
+ mLegendDock->setObjectName("Legend");
+ mLegendDock->setAllowedAreas(Qt::LeftDockWidgetArea |
Qt::RightDockWidgetArea);
+// mLegendDock->setFeatures(mLegendDock->features() &
~QDockWidget::DockWidgetClosable);
+ mLegendDock->setWidget(mMapLegend);
+ addDockWidget(Qt::LeftDockWidgetArea, mLegendDock);
+ mViewMenu->addAction(mLegendDock->toggleViewAction());
return;
}
@@ -1503,8 +1519,8 @@
// store window geometry
settings.setValue("/UI/geometry", saveGeometry());
- settings.setValue("/UI/canvasSplitterState", canvasLegendSplit->saveState());
- settings.setValue("/UI/legendSplitterState",
legendOverviewSplit->saveState());
+// settings.setValue("/UI/canvasSplitterState",
canvasLegendSplit->saveState());
+// settings.setValue("/UI/legendSplitterState",
legendOverviewSplit->saveState());
}
void QgisApp::restoreWindowState()
@@ -1516,8 +1532,8 @@
// restore window geometry
restoreGeometry(settings.value("/UI/geometry").toByteArray());
-
canvasLegendSplit->restoreState(settings.value("/UI/canvasSplitterState").toByteArray());
-
legendOverviewSplit->restoreState(settings.value("/UI/legendSplitterState").toByteArray());
+//
canvasLegendSplit->restoreState(settings.value("/UI/canvasSplitterState").toByteArray());
+//
legendOverviewSplit->restoreState(settings.value("/UI/legendSplitterState").toByteArray());
}
///////////// END OF GUI SETUP ROUTINES ///////////////
@@ -4264,9 +4280,9 @@
double zoomFactor = mySettings.value("/qgis/zoom_factor", 2).toDouble();
mMapCanvas->setWheelAction((QgsMapCanvas::WheelAction) action, zoomFactor);
- bool splitterRedraw = mySettings.value("/qgis/splitterRedraw",
true).toBool();
- canvasLegendSplit->setOpaqueResize(splitterRedraw);
- legendOverviewSplit->setOpaqueResize(splitterRedraw);
+// bool splitterRedraw = mySettings.value("/qgis/splitterRedraw",
true).toBool();
+// canvasLegendSplit->setOpaqueResize(splitterRedraw);
+// legendOverviewSplit->setOpaqueResize(splitterRedraw);
}
}
Index: src/app/qgisappinterface.cpp
===================================================================
--- src/app/qgisappinterface.cpp (revision 8410)
+++ src/app/qgisappinterface.cpp (working copy)
@@ -133,7 +133,7 @@
QToolBox* QgisAppInterface::getToolBox()
{
- return qgis->toolBox;
+ return NULL;
}
void QgisAppInterface::refreshLegend(QgsMapLayer *l)
_______________________________________________
Qgis-user mailing list
[email protected]
http://lists.qgis.org/cgi-bin/mailman/listinfo/qgis-user