[QGIS Commit] r11865 - in trunk/qgis: images/themes/default src/app
src/app/composer src/core/composer src/ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Thu Oct 29 09:17:58 EDT 2009
Author: mhugent
Date: 2009-10-29 09:17:57 -0400 (Thu, 29 Oct 2009)
New Revision: 11865
Added:
trunk/qgis/images/themes/default/mActionNewComposer.png
Modified:
trunk/qgis/src/app/composer/qgscomposer.cpp
trunk/qgis/src/app/composer/qgscomposer.h
trunk/qgis/src/app/composer/qgscomposermapwidget.cpp
trunk/qgis/src/app/qgisapp.cpp
trunk/qgis/src/app/qgisapp.h
trunk/qgis/src/app/qgisappinterface.cpp
trunk/qgis/src/core/composer/qgscomposeritem.cpp
trunk/qgis/src/core/composer/qgscomposition.h
trunk/qgis/src/ui/qgscomposerbase.ui
Log:
[FEATURE]: Possibility to have several composers in one project
Added: trunk/qgis/images/themes/default/mActionNewComposer.png
===================================================================
(Binary files differ)
Property changes on: trunk/qgis/images/themes/default/mActionNewComposer.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/qgis/src/app/composer/qgscomposer.cpp
===================================================================
--- trunk/qgis/src/app/composer/qgscomposer.cpp 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/app/composer/qgscomposer.cpp 2009-10-29 13:17:57 UTC (rev 11865)
@@ -65,9 +65,10 @@
#include <QSizeGrip>
#include "qgslogger.h"
-QgsComposer::QgsComposer( QgisApp *qgis ): QMainWindow(), mFirstPaint( true )
+QgsComposer::QgsComposer( QgisApp *qgis, const QString& id ): QMainWindow(), mId( id )
{
setupUi( this );
+ setAttribute( Qt::WA_DeleteOnClose );
setupTheme();
QToolButton* orderingToolButton = new QToolButton( this );
@@ -106,7 +107,7 @@
toggleActionGroup->addAction( mActionSelectMoveItem );
toggleActionGroup->setExclusive( true );
- setWindowTitle( tr( "QGIS - print composer" ) );
+ setWindowTitle( mId );
mActionAddNewMap->setCheckable( true );
mActionAddNewLabel->setCheckable( true );
@@ -116,17 +117,21 @@
mActionAddImage->setCheckable( true );
mActionMoveItemContent->setCheckable( true );
+#ifdef Q_WS_MAC
QMenu *appMenu = menuBar()->addMenu( tr( "QGIS" ) );
appMenu->addAction( QgisApp::instance()->actionAbout() );
appMenu->addAction( QgisApp::instance()->actionOptions() );
+#endif
QMenu *fileMenu = menuBar()->addMenu( tr( "File" ) );
- fileMenu->addAction( tr( "Close" ), this, SLOT( close() ), tr( "Ctrl+W" ) );
fileMenu->addAction( mActionExportAsImage );
fileMenu->addAction( mActionExportAsPDF );
fileMenu->addAction( mActionExportAsSVG );
fileMenu->addSeparator();
fileMenu->addAction( mActionPrint );
+ fileMenu->addSeparator();
+ fileMenu->addAction( mActionQuit );
+ QObject::connect( mActionQuit, SIGNAL( triggered() ), this, SLOT( close() ) );
QMenu *viewMenu = menuBar()->addMenu( tr( "View" ) );
viewMenu->addAction( mActionZoomIn );
@@ -159,14 +164,13 @@
#endif
#endif
+ mQgis = qgis;
+ mFirstTime = true;
- // Create action to select this window and add it to Window menu
+ // Create action to select this window
mWindowAction = new QAction( windowTitle(), this );
connect( mWindowAction, SIGNAL( triggered() ), this, SLOT( activate() ) );
- mQgis = qgis;
- mFirstTime = true;
-
QgsDebugMsg( "entered." );
setMouseTracking( true );
@@ -188,8 +192,6 @@
mCompositionOptionsLayout->setMargin( 0 );
mCompositionOptionsLayout->addWidget( compositionWidget );
- mPrinter = 0;
-
QGridLayout *l = new QGridLayout( mViewFrame );
l->setMargin( 0 );
l->addWidget( mView, 0, 0 );
@@ -206,10 +208,9 @@
mView->setFocus();
- //connect with signals from QgsProject to read/write project files
+ //connect with signals from QgsProject to write project files
if ( QgsProject::instance() )
{
- connect( QgsProject::instance(), SIGNAL( readProject( const QDomDocument& ) ), this, SLOT( readXML( const QDomDocument& ) ) );
connect( QgsProject::instance(), SIGNAL( writeProject( QDomDocument& ) ), this, SLOT( writeXML( QDomDocument& ) ) );
}
}
@@ -229,6 +230,7 @@
{
//now set all the icons - getThemeIcon will fall back to default theme if its
//missing from active theme
+ mActionQuit->setIcon( QgisApp::getThemeIcon( "/mActionFileExit.png" ) );
mActionLoadFromTemplate->setIcon( QgisApp::getThemeIcon( "/mActionFileOpen.png" ) );
mActionSaveAsTemplate->setIcon( QgisApp::getThemeIcon( "/mActionFileSaveAs.png" ) );
mActionExportAsImage->setIcon( QgisApp::getThemeIcon( "/mActionSaveMapAsImage.png" ) );
@@ -290,29 +292,6 @@
}
}
-void QgsComposer::paintEvent( QPaintEvent* event )
-{
- QMainWindow::paintEvent( event );
-#if 0 //MH: disabled for now as there are segfaults on some systems
- //The cached content of the composer maps need to be recreated it is the first paint event of the composer after reading from XML file.
- //Otherwise the resolution of the composer map is not suitable for screen
- if ( mFirstPaint )
- {
- QMap<QgsComposerItem*, QWidget*>::iterator it = mItemWidgetMap.begin();
- for ( ; it != mItemWidgetMap.constEnd(); ++it )
- {
- QgsComposerMap* cm = qobject_cast<QgsComposerMap *>( it.key() );
- if ( cm )
- {
- mFirstPaint = false;
- cm->cache();
- cm->update();
- }
- }
- }
-#endif //0
-}
-
void QgsComposer::activate()
{
raise();
@@ -320,6 +299,26 @@
activateWindow();
}
+void QgsComposer::closeEvent( QCloseEvent *event )
+{
+ if ( QMessageBox::warning( 0, tr( "Remove composer?" ), tr( "Do you really want to remove the composer instance '%1'?" ).arg( mId ), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel ) == QMessageBox::Ok )
+ {
+ mQgis->checkOutComposer( this );
+ event->accept();
+ }
+ else
+ {
+ event->ignore();
+ }
+#if 0
+ QMainWindow::closeEvent( event );
+ if ( event->isAccepted() )
+ {
+ QgisApp::instance()->removeWindow( mWindowAction );
+ }
+#endif //0
+}
+
#ifdef Q_WS_MAC
void QgsComposer::changeEvent( QEvent* event )
{
@@ -338,15 +337,6 @@
}
}
-void QgsComposer::closeEvent( QCloseEvent *event )
-{
- QMainWindow::closeEvent( event );
- if ( event->isAccepted() )
- {
- QgisApp::instance()->removeWindow( mWindowAction );
- }
-}
-
void QgsComposer::showEvent( QShowEvent *event )
{
QMainWindow::showEvent( event );
@@ -1031,6 +1021,7 @@
void QgsComposer::writeXML( QDomNode& parentNode, QDomDocument& doc )
{
QDomElement composerElem = doc.createElement( "Composer" );
+ composerElem.setAttribute( "id", mId );
parentNode.appendChild( composerElem );
//store composer items:
@@ -1051,6 +1042,145 @@
void QgsComposer::readXML( const QDomDocument& doc )
{
+ QDomNodeList composerNodeList = doc.elementsByTagName( "Composer" );
+ if ( composerNodeList.size() < 1 )
+ {
+ return;
+ }
+ readXML( composerNodeList.at( 0 ).toElement(), doc );
+}
+
+void QgsComposer::readXML( const QDomElement& composerElem, const QDomDocument& doc )
+{
+ mId = composerElem.attribute( "id", "" );
+ setWindowTitle( mId );
+
+ // Create action to select this window
+ delete mWindowAction;
+ mWindowAction = new QAction( windowTitle(), this );
+ connect( mWindowAction, SIGNAL( triggered() ), this, SLOT( activate() ) );
+
+ //delete composer view and composition
+ delete mView;
+ mView = 0;
+ //delete every child of mViewFrame
+ QObjectList viewFrameChildren = mViewFrame->children();
+ QObjectList::iterator it = viewFrameChildren.begin();
+ for ( ; it != viewFrameChildren.end(); ++it )
+ {
+ delete( *it );
+ }
+ //delete composition widget
+ QgsCompositionWidget* oldCompositionWidget = qobject_cast<QgsCompositionWidget *>( mCompositionOptionsFrame->children().at( 0 ) );
+ delete oldCompositionWidget;
+ delete mCompositionOptionsLayout;
+ mCompositionOptionsLayout = 0;
+
+ mView = new QgsComposerView( mViewFrame );
+ connectSlots();
+
+ mComposition = new QgsComposition( mQgis->mapCanvas()->mapRenderer() );
+ mComposition->readXML( composerElem, doc );
+
+ QGridLayout *l = new QGridLayout( mViewFrame );
+ l->setMargin( 0 );
+ l->addWidget( mView, 0, 0 );
+
+ //create compositionwidget
+ QgsCompositionWidget* compositionWidget = new QgsCompositionWidget( mCompositionOptionsFrame, mComposition );
+ QObject::connect( mComposition, SIGNAL( paperSizeChanged() ), compositionWidget, SLOT( displayCompositionWidthHeight() ) );
+ compositionWidget->show();
+
+ mCompositionOptionsLayout = new QGridLayout( mCompositionOptionsFrame );
+ mCompositionOptionsLayout->setMargin( 0 );
+ mCompositionOptionsLayout->addWidget( compositionWidget );
+
+ //read and restore all the items
+
+ //composer labels
+ QDomNodeList composerLabelList = composerElem.elementsByTagName( "ComposerLabel" );
+ for ( int i = 0; i < composerLabelList.size(); ++i )
+ {
+ QDomElement currentComposerLabelElem = composerLabelList.at( i ).toElement();
+ QgsComposerLabel* newLabel = new QgsComposerLabel( mComposition );
+ newLabel->readXML( currentComposerLabelElem, doc );
+ addComposerLabel( newLabel );
+ mComposition->addItem( newLabel );
+ mComposition->update();
+ mComposition->clearSelection();
+ newLabel->setSelected( true );
+ showItemOptions( newLabel );
+ }
+
+ //composer maps
+ QDomNodeList composerMapList = composerElem.elementsByTagName( "ComposerMap" );
+ for ( int i = 0; i < composerMapList.size(); ++i )
+ {
+ QDomElement currentComposerMapElem = composerMapList.at( i ).toElement();
+ QgsComposerMap* newMap = new QgsComposerMap( mComposition );
+ newMap->readXML( currentComposerMapElem, doc );
+ addComposerMap( newMap );
+ mComposition->addItem( newMap );
+ mComposition->update();
+ mComposition->clearSelection();
+ newMap->setSelected( true );
+ showItemOptions( newMap );
+ }
+
+ //composer scalebars
+ QDomNodeList composerScaleBarList = composerElem.elementsByTagName( "ComposerScaleBar" );
+ for ( int i = 0; i < composerScaleBarList.size(); ++i )
+ {
+ QDomElement currentScaleBarElem = composerScaleBarList.at( i ).toElement();
+ QgsComposerScaleBar* newScaleBar = new QgsComposerScaleBar( mComposition );
+ newScaleBar->readXML( currentScaleBarElem, doc );
+ addComposerScaleBar( newScaleBar );
+ mComposition->addItem( newScaleBar );
+ mComposition->update();
+ mComposition->clearSelection();
+ newScaleBar->setSelected( true );
+ showItemOptions( newScaleBar );
+ }
+
+ //composer legends
+ QDomNodeList composerLegendList = composerElem.elementsByTagName( "ComposerLegend" );
+ for ( int i = 0; i < composerLegendList.size(); ++i )
+ {
+ QDomElement currentLegendElem = composerLegendList.at( i ).toElement();
+ QgsComposerLegend* newLegend = new QgsComposerLegend( mComposition );
+ newLegend->readXML( currentLegendElem, doc );
+ addComposerLegend( newLegend );
+ mComposition->addItem( newLegend );
+ mComposition->update();
+ mComposition->clearSelection();
+ newLegend->setSelected( true );
+ showItemOptions( newLegend );
+ }
+
+ //composer pictures
+ QDomNodeList composerPictureList = composerElem.elementsByTagName( "ComposerPicture" );
+ for ( int i = 0; i < composerPictureList.size(); ++i )
+ {
+ QDomElement currentPictureElem = composerPictureList.at( i ).toElement();
+ QgsComposerPicture* newPicture = new QgsComposerPicture( mComposition );
+ newPicture->readXML( currentPictureElem, doc );
+ addComposerPicture( newPicture );
+ mComposition->addItem( newPicture );
+ mComposition->update();
+ mComposition->clearSelection();
+ newPicture->setSelected( true );
+ showItemOptions( newPicture );
+ }
+
+ mComposition->sortZList();
+ mView->setComposition( mComposition );
+
+ setSelectionTool();
+}
+
+#if 0
+void QgsComposer::readXML( const QDomDocument& doc )
+{
//look for Composer element
QDomNodeList nl = doc.elementsByTagName( "Composer" );
if ( nl.size() < 1 )
@@ -1058,6 +1188,7 @@
return; //nothing to do...
}
QDomElement composerElem = nl.at( 0 ).toElement();
+ mId = composerElem.attribute( "id", "" );
//look for Composition element
QDomNodeList cnl = composerElem.elementsByTagName( "Composition" );
@@ -1187,6 +1318,7 @@
setSelectionTool();
}
+#endif //0
void QgsComposer::addComposerMap( QgsComposerMap* map )
{
Modified: trunk/qgis/src/app/composer/qgscomposer.h
===================================================================
--- trunk/qgis/src/app/composer/qgscomposer.h 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/app/composer/qgscomposer.h 2009-10-29 13:17:57 UTC (rev 11865)
@@ -31,7 +31,6 @@
class QgsMapCanvas;
class QGridLayout;
-class QPrinter;
class QDomNode;
class QDomDocument;
class QMoveEvent;
@@ -47,7 +46,7 @@
Q_OBJECT
public:
- QgsComposer( QgisApp *qgis );
+ QgsComposer( QgisApp *qgis, const QString& id );
~QgsComposer();
//! Set the pixmap / icons on the toolbar buttons
@@ -74,6 +73,10 @@
//! Restore the window and toolbar state
void restoreWindowState();
+ QAction* windowAction() {return mWindowAction;}
+
+ QString id() const {return mId;}
+
protected:
//! Move event
virtual void moveEvent( QMoveEvent * );
@@ -81,13 +84,13 @@
//! Resize event
virtual void resizeEvent( QResizeEvent * );
+ //! Close event (remove window from menu)
+ virtual void closeEvent( QCloseEvent * );
+
#ifdef Q_WS_MAC
//! Change event (update window menu on ActivationChange)
virtual void changeEvent( QEvent * );
- //! Close event (remove window from menu)
- virtual void closeEvent( QCloseEvent * );
-
//! Show event (add window to menu)
virtual void showEvent( QShowEvent * );
#endif
@@ -218,13 +221,10 @@
//! Sets state from Dom document
void readXML( const QDomDocument& doc );
+ void readXML( const QDomElement& composerElem, const QDomDocument& doc );
void setSelectionTool();
- protected:
-
- void paintEvent( QPaintEvent* event );
-
private slots:
//! Raise, unminimize and activate this window
@@ -235,9 +235,6 @@
/**Establishes the signal slot connection for the class*/
void connectSlots();
- //! returns new world matrix for canvas view after zoom with factor scaleChange
- QMatrix updateMatrix( double scaleChange );
-
//! True if a composer map contains a WMS layer
bool containsWMSLayer() const;
@@ -252,15 +249,16 @@
//! Writes state under DOM element
void writeXML( QDomNode& parentNode, QDomDocument& doc );
+
+ /**Identification string*/
+ QString mId;
+
//! Pointer to composer view
QgsComposerView *mView;
//! Current composition
QgsComposition *mComposition;
- //! Printer
- QPrinter *mPrinter;
-
//! Pointer to QGIS application
QgisApp *mQgis;
@@ -282,9 +280,6 @@
//! Window menu action to select this window
QAction *mWindowAction;
- /**False if first paint already happened (used to create cache of composer maps for screen resolution after reading from project files)*/
- bool mFirstPaint;
-
//! Help context id
static const int context_id = 985715179;
Modified: trunk/qgis/src/app/composer/qgscomposermapwidget.cpp
===================================================================
--- trunk/qgis/src/app/composer/qgscomposermapwidget.cpp 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/app/composer/qgscomposermapwidget.cpp 2009-10-29 13:17:57 UTC (rev 11865)
@@ -702,5 +702,6 @@
return;
}
mComposerMap->setGridAnnotationPrecision( value );
+ mComposerMap->updateBoundingRect();
mComposerMap->update();
}
Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/app/qgisapp.cpp 2009-10-29 13:17:57 UTC (rev 11865)
@@ -327,7 +327,6 @@
QgisApp::QgisApp( QSplashScreen *splash, QWidget * parent, Qt::WFlags fl )
: QMainWindow( parent, fl ),
mSplash( splash ),
- mComposer( 0 ),
mPythonConsole( NULL ),
mPythonUtils( NULL )
{
@@ -372,7 +371,6 @@
readSettings();
updateRecentProjectPaths();
- mComposer = new QgsComposer( this ); // Map composer
mInternalClipboard = new QgsClipboard; // create clipboard
mQgisInterface = new QgisAppInterface( this ); // create the interfce
@@ -464,9 +462,9 @@
qApp->processEvents();
//finally show all the application settings as initialised above
- QgsDebugMsg( "\n\n\nApplication Settings:\n--------------------------\n");
+ QgsDebugMsg( "\n\n\nApplication Settings:\n--------------------------\n" );
QgsDebugMsg( QgsApplication::showSettings() );
- QgsDebugMsg( "\n--------------------------\n\n\n");
+ QgsDebugMsg( "\n--------------------------\n\n\n" );
mMapCanvas->freeze( false );
} // QgisApp ctor
@@ -503,6 +501,8 @@
delete mPythonConsole;
delete mPythonUtils;
+ deletePrintComposers();
+
// delete map layer registry and provider registry
QgsApplication::exitQgis();
}
@@ -591,10 +591,10 @@
mActionSaveMapAsImage->setStatusTip( tr( "Save map as image" ) );
connect( mActionSaveMapAsImage, SIGNAL( triggered() ), this, SLOT( saveMapAsImage() ) );
- mActionPrintComposer = new QAction( getThemeIcon( "mActionFilePrint.png" ), tr( "&Print Composer" ), this );
- shortcuts->registerAction( mActionPrintComposer, tr( "Ctrl+P", "Print Composer" ) );
- mActionPrintComposer->setStatusTip( tr( "Print Composer" ) );
- connect( mActionPrintComposer, SIGNAL( triggered() ), this, SLOT( filePrint() ) );
+ mActionNewPrintComposer = new QAction( getThemeIcon( "mActionFilePrint.png" ), tr( "&New Print Composer" ), this );
+ shortcuts->registerAction( mActionNewPrintComposer, tr( "Ctrl+P", "New Print Composer" ) );
+ mActionNewPrintComposer->setStatusTip( tr( "New Print Composer" ) );
+ connect( mActionNewPrintComposer, SIGNAL( triggered() ), this, SLOT( newPrintComposer() ) );
mActionExit = new QAction( getThemeIcon( "mActionFileExit.png" ), tr( "Exit" ), this );
shortcuts->registerAction( mActionExit, tr( "Ctrl+Q", "Exit QGIS" ) );
@@ -1166,7 +1166,7 @@
mActionFileSeparator3 = mFileMenu->addSeparator();
}
- mFileMenu->addAction( mActionPrintComposer );
+ mFileMenu->addAction( mActionNewPrintComposer );
mActionFileSeparator4 = mFileMenu->addSeparator();
mFileMenu->addAction( mActionExit );
@@ -1332,6 +1332,10 @@
mActionWindowSeparator2 = mWindowMenu->addSeparator();
#endif
+ //Print composers menu
+
+ mPrintComposersMenu = menuBar()->addMenu( tr( "Print Composers" ) );
+
// Help Menu
menuBar()->addSeparator();
@@ -1364,7 +1368,7 @@
mFileToolBar->addAction( mActionOpenProject );
mFileToolBar->addAction( mActionSaveProject );
mFileToolBar->addAction( mActionSaveProjectAs );
- mFileToolBar->addAction( mActionPrintComposer );
+ mFileToolBar->addAction( mActionNewPrintComposer );
mFileToolBar->addAction( mActionAddOgrLayer );
mFileToolBar->addAction( mActionAddRasterLayer );
#ifdef HAVE_POSTGRESQL
@@ -1629,7 +1633,7 @@
mActionOpenProject->setIcon( getThemeIcon( "/mActionFileOpen.png" ) );
mActionSaveProject->setIcon( getThemeIcon( "/mActionFileSave.png" ) );
mActionSaveProjectAs->setIcon( getThemeIcon( "/mActionFileSaveAs.png" ) );
- mActionPrintComposer->setIcon( getThemeIcon( "/mActionFilePrint.png" ) );
+ mActionNewPrintComposer->setIcon( getThemeIcon( "/mActionNewComposer.png" ) );
mActionSaveMapAsImage->setIcon( getThemeIcon( "/mActionSaveMapAsImage.png" ) );
mActionExit->setIcon( getThemeIcon( "/mActionFileExit.png" ) );
mActionAddOgrLayer->setIcon( getThemeIcon( "/mActionAddOgrLayer.png" ) );
@@ -1695,10 +1699,13 @@
mActionAddWmsLayer->setIcon( getThemeIcon( "/mActionAddWmsLayer.png" ) );
mActionAddToOverview->setIcon( getThemeIcon( "/mActionInOverview.png" ) );
- if ( mComposer )
+ //change themes of all composers
+ QMap<QString, QgsComposer*>::iterator composerIt = mPrintComposers.begin();
+ for ( ; composerIt != mPrintComposers.end(); ++composerIt )
{
- mComposer->setupTheme();
+ composerIt.value()->setupTheme();
}
+
emit currentThemeChanged( theThemeName );
}
@@ -3056,9 +3063,7 @@
if ( saveDirty() )
{
- delete mComposer;
- mComposer = 0;
-
+ deletePrintComposers();
mMapCanvas->freeze( true );
removeAllLayers();
qApp->exit( 0 );
@@ -3081,8 +3086,7 @@
return;
}
- delete mComposer;
- mComposer = new QgsComposer( this );
+ deletePrintComposers();
if ( thePromptToSaveFlag )
{
@@ -3299,9 +3303,7 @@
// Persist last used project dir
settings.setValue( "/UI/lastProjectDir", myPath );
- delete mComposer;
- mComposer = new QgsComposer( this );
-
+ deletePrintComposers();
// clear out any stuff from previous project
mMapCanvas->freeze( true );
removeAllLayers();
@@ -3347,6 +3349,9 @@
// project so that they can check any project
// specific plug-in state
+ //load the composers in the project
+ loadComposersFromProject( fullPath );
+
// add this to the list of recently used project files
saveRecentProjectPath( fullPath, settings );
@@ -3367,10 +3372,7 @@
QApplication::setOverrideCursor( Qt::WaitCursor );
- //clear the composer
- delete mComposer;
- mComposer = new QgsComposer( this );
-
+ deletePrintComposers();
// clear the map canvas
removeAllLayers();
@@ -3442,6 +3444,8 @@
// project so that they can check any project
// specific plug-in state
+ loadComposersFromProject( projectFile );
+
// add this to the list of recently used project files
QSettings settings;
saveRecentProjectPath( projectFile, settings );
@@ -3680,13 +3684,41 @@
return ok;
}
-void QgisApp::filePrint()
+void QgisApp::newPrintComposer()
{
if ( mMapCanvas && mMapCanvas->isDrawing() )
{
return;
}
- mComposer->open();
+
+ //ask user about name
+ bool composerExists = true;
+ QString composerId;
+ while ( composerExists )
+ {
+ composerId = QInputDialog::getText( 0, tr( "Enter id string for composer" ), tr( "id:" ) );
+ if ( composerId.isNull() )
+ {
+ return;
+ }
+
+ if ( mPrintComposers.contains( composerId ) )
+ {
+ QMessageBox::critical( 0, tr( "Composer id already exists" ), tr( "The entered composer id '%1' already exists. Please enter a different id" ).arg( composerId ) );
+ }
+ else
+ {
+ composerExists = false;
+ }
+ }
+
+ //create new composer object
+ QgsComposer* newComposerObject = new QgsComposer( this, composerId );
+ //add it to the map of existing print composers
+ mPrintComposers.insert( composerId, newComposerObject );
+ //and place action into print composers menu
+ mPrintComposersMenu->addAction( newComposerObject->windowAction() );
+ newComposerObject->open();
}
void QgisApp::saveMapAsImage()
@@ -4167,6 +4199,65 @@
return unionGeom;
}
+QList<QgsComposer*> QgisApp::printComposers()
+{
+ QList<QgsComposer*> composerList;
+ QMap<QString, QgsComposer*>::iterator it = mPrintComposers.begin();
+ for ( ; it != mPrintComposers.end(); ++it )
+ {
+ composerList.push_back( it.value() );
+ }
+ return composerList;
+}
+
+void QgisApp::checkOutComposer( QgsComposer* c )
+{
+ if ( !c )
+ {
+ return;
+ }
+ mPrintComposers.remove( c->id() );
+ mPrintComposersMenu->removeAction( c->windowAction() );
+}
+
+bool QgisApp::loadComposersFromProject( const QString& projectFilePath )
+{
+ //create dom document from file
+ QDomDocument projectDom;
+ QFile projectFile( projectFilePath );
+ if ( !projectFile.open( QIODevice::ReadOnly ) )
+ {
+ return false;
+ }
+
+ if ( !projectDom.setContent( &projectFile, false ) )
+ {
+ return false;
+ }
+
+ //restore each composer
+ QDomNodeList composerNodes = projectDom.elementsByTagName( "Composer" );
+ for ( int i = 0; i < composerNodes.size(); ++i )
+ {
+ QgsComposer* composer = new QgsComposer( this, "" );
+ composer->readXML( composerNodes.at( i ).toElement(), projectDom );
+ mPrintComposers.insert( composer->id(), composer );
+ mPrintComposersMenu->addAction( composer->windowAction() );
+ composer->showMinimized();
+ composer->zoomFull();
+ }
+}
+
+void QgisApp::deletePrintComposers()
+{
+ QMap<QString, QgsComposer*>::iterator it = mPrintComposers.begin();
+ for ( ; it != mPrintComposers.end(); ++it )
+ {
+ delete it.value();
+ }
+ mPrintComposers.clear();
+}
+
void QgisApp::mergeSelectedFeatures()
{
//get active layer (hopefully vector)
@@ -5596,9 +5687,9 @@
//merge tool needs editable layer and provider with the capability of adding and deleting features
if ( vlayer->isEditable() &&
- (dprovider->capabilities() & QgsVectorDataProvider::DeleteFeatures) &&
- (dprovider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues) &&
- (dprovider->capabilities() & QgsVectorDataProvider::AddFeatures) )
+ ( dprovider->capabilities() & QgsVectorDataProvider::DeleteFeatures ) &&
+ ( dprovider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues ) &&
+ ( dprovider->capabilities() & QgsVectorDataProvider::AddFeatures ) )
{
mActionMergeFeatures->setEnabled( layerHasSelection );
}
Modified: trunk/qgis/src/app/qgisapp.h
===================================================================
--- trunk/qgis/src/app/qgisapp.h 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/app/qgisapp.h 2009-10-29 13:17:57 UTC (rev 11865)
@@ -143,8 +143,6 @@
/** Get the mapcanvas object from the app */
QgsMapCanvas * mapCanvas() { return mMapCanvas; };
- QgsComposer* printComposer() {return mComposer;}
-
//! Set theme (icons)
void setTheme( QString themeName = "default" );
//! Setup the toolbar popup menus for a given theme
@@ -196,6 +194,12 @@
* windows which are hidden rather than deleted when closed. */
void removeWindow( QAction *action );
+ /**Returns the print composers*/
+ QList<QgsComposer*> printComposers();
+ /**Unregisters a composer instance but does _not_ delete it. This method is usually called from within QgsComposer::closeEvent before
+ the composer deletes itself using the Qt::WA_DeleteOnClose flag*/
+ void checkOutComposer( QgsComposer* c );
+
//! Actions to be inserted in menus and toolbars
QAction *actionNewProject() { return mActionNewProject; }
QAction *actionOpenProject() { return mActionOpenProject; }
@@ -206,7 +210,7 @@
QAction *actionFileSeparator2() { return mActionFileSeparator2; }
QAction *actionProjectProperties() { return mActionProjectProperties; }
QAction *actionFileSeparator3() { return mActionFileSeparator3; }
- QAction *actionPrintComposer() { return mActionPrintComposer; }
+ QAction *actionNewPrintComposer() { return mActionNewPrintComposer; }
QAction *actionFileSeparator4() { return mActionFileSeparator4; }
QAction *actionExit() { return mActionExit; }
@@ -315,6 +319,7 @@
QMenu *firstRightStandardMenu() { return mHelpMenu; }
QMenu *windowMenu() { return NULL; }
#endif
+ QMenu *printComposersMenu() {return mPrintComposersMenu;}
QMenu *helpMenu() { return mHelpMenu; }
//! Toolbars
@@ -443,7 +448,7 @@
//! Create a new empty vector layer
void newVectorLayer();
//! Print the current map view frame
- void filePrint();
+ void newPrintComposer();
//! Add all loaded layers into the overview - overides qgisappbase method
void addAllToOverview();
//! Remove all loaded layers from the overview - overides qgisappbase method
@@ -675,6 +680,11 @@
@return 0 in case of error*/
QgsGeometry* unionGeometries( const QgsVectorLayer* vl, QgsFeatureList& featureList );
+ /**Deletes all the composer objects and clears mPrintComposers*/
+ void deletePrintComposers();
+ /**Creates the composer instances in a project file and adds them to the menu*/
+ bool loadComposersFromProject( const QString& projectFilePath );
+
/// QgisApp aren't copyable
QgisApp( QgisApp const & );
/// QgisApp aren't copyable
@@ -715,7 +725,7 @@
QAction *mActionFileSeparator2;
QAction *mActionProjectProperties;
QAction *mActionFileSeparator3;
- QAction *mActionPrintComposer;
+ QAction *mActionNewPrintComposer;
QAction *mActionFileSeparator4;
QAction *mActionExit;
@@ -831,6 +841,7 @@
#ifdef Q_WS_MAC
QMenu *mWindowMenu;
#endif
+ QMenu *mPrintComposersMenu;
QMenu *mHelpMenu;
// docks ------------------------------------------
@@ -932,8 +943,8 @@
QgsHelpViewer *mHelpViewer;
//! list of recently opened/saved project files
QStringList mRecentProjectPaths;
- //! Map composer
- QgsComposer *mComposer;
+ //! Print composers of this project, accessible by id string
+ QMap<QString, QgsComposer*> mPrintComposers;
//! How to determine the number of decimal places used to
//! display the mouse position
bool mMousePrecisionAutomatic;
Modified: trunk/qgis/src/app/qgisappinterface.cpp
===================================================================
--- trunk/qgis/src/app/qgisappinterface.cpp 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/app/qgisappinterface.cpp 2009-10-29 13:17:57 UTC (rev 11865)
@@ -152,13 +152,17 @@
QList<QgsComposerView*> composerViewList;
if ( qgis )
{
- QgsComposer* c = qgis->printComposer();
- if ( c )
+ QList<QgsComposer*> composerList = qgis->printComposers();
+ QList<QgsComposer*>::iterator it = composerList.begin();
+ for ( ; it != composerList.end(); ++it )
{
- QgsComposerView* v = c->view();
- if ( v )
+ if ( *it )
{
- composerViewList.push_back( v );
+ QgsComposerView* v = ( *it )->view();
+ if ( v )
+ {
+ composerViewList.push_back( v );
+ }
}
}
}
@@ -228,7 +232,7 @@
QAction *QgisAppInterface::actionFileSeparator2() { return qgis->actionFileSeparator2(); }
QAction *QgisAppInterface::actionProjectProperties() { return qgis->actionProjectProperties(); }
QAction *QgisAppInterface::actionFileSeparator3() { return qgis->actionFileSeparator3(); }
-QAction *QgisAppInterface::actionPrintComposer() { return qgis->actionPrintComposer(); }
+QAction *QgisAppInterface::actionPrintComposer() { return qgis->actionNewPrintComposer(); }
QAction *QgisAppInterface::actionFileSeparator4() { return qgis->actionFileSeparator4(); }
QAction *QgisAppInterface::actionExit() { return qgis->actionExit(); }
Modified: trunk/qgis/src/core/composer/qgscomposeritem.cpp
===================================================================
--- trunk/qgis/src/core/composer/qgscomposeritem.cpp 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/core/composer/qgscomposeritem.cpp 2009-10-29 13:17:57 UTC (rev 11865)
@@ -204,11 +204,11 @@
return false;
}
+ mLastValidViewScaleFactor = itemElem.attribute( "lastValidViewScaleFactor", "-1" ).toDouble();
+
setSceneRect( QRectF( x, y, width, height ) );
setZValue( itemElem.attribute( "zValue" ).toDouble() );
- mLastValidViewScaleFactor = itemElem.attribute( "lastValidViewScaleFactor", "-1" ).toDouble();
-
//pen
QDomNodeList frameColorList = itemElem.elementsByTagName( "FrameColor" );
if ( frameColorList.size() > 0 )
Modified: trunk/qgis/src/core/composer/qgscomposition.h
===================================================================
--- trunk/qgis/src/core/composer/qgscomposition.h 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/core/composer/qgscomposition.h 2009-10-29 13:17:57 UTC (rev 11865)
@@ -16,6 +16,7 @@
#ifndef QGSCOMPOSITION_H
#define QGSCOMPOSITION_H
+#include <QDomDocument>
#include <QGraphicsScene>
#include <QLinkedList>
@@ -25,7 +26,6 @@
class QGraphicsRectItem;
class QgsMapRenderer;
-class QDomDocument;
class QDomElement;
/** \ingroup MapComposer
Modified: trunk/qgis/src/ui/qgscomposerbase.ui
===================================================================
--- trunk/qgis/src/ui/qgscomposerbase.ui 2009-10-29 11:48:15 UTC (rev 11864)
+++ trunk/qgis/src/ui/qgscomposerbase.ui 2009-10-29 13:17:57 UTC (rev 11865)
@@ -1,7 +1,8 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
<class>QgsComposerBase</class>
- <widget class="QMainWindow" name="QgsComposerBase" >
- <property name="geometry" >
+ <widget class="QMainWindow" name="QgsComposerBase">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@@ -9,146 +10,122 @@
<height>609</height>
</rect>
</property>
- <property name="mouseTracking" >
+ <property name="mouseTracking">
<bool>true</bool>
</property>
- <property name="windowTitle" >
+ <property name="windowTitle">
<string>MainWindow</string>
</property>
- <widget class="QWidget" name="centralwidget" >
- <property name="mouseTracking" >
+ <widget class="QWidget" name="centralwidget">
+ <property name="mouseTracking">
<bool>true</bool>
</property>
- <layout class="QGridLayout" >
- <item row="0" column="0" >
- <widget class="QSplitter" name="mSplitter" >
- <property name="mouseTracking" >
+ <layout class="QGridLayout">
+ <item row="0" column="0">
+ <widget class="QSplitter" name="mSplitter">
+ <property name="mouseTracking">
<bool>true</bool>
</property>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <widget class="QFrame" name="mViewFrame" >
- <property name="mouseTracking" >
+ <widget class="QFrame" name="mViewFrame">
+ <property name="mouseTracking">
<bool>true</bool>
</property>
- <property name="frameShape" >
+ <property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
- <property name="frameShadow" >
+ <property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
- <widget class="QTabWidget" name="mOptionsTabWidget" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
+ <widget class="QTabWidget" name="mOptionsTabWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
<width>150</width>
<height>10</height>
</size>
</property>
- <property name="maximumSize" >
+ <property name="maximumSize">
<size>
<width>32767</width>
<height>32767</height>
</size>
</property>
- <property name="currentIndex" >
+ <property name="currentIndex">
<number>1</number>
</property>
- <widget class="QWidget" name="tab" >
- <attribute name="title" >
+ <widget class="QWidget" name="tab">
+ <attribute name="title">
<string>General</string>
</attribute>
- <layout class="QGridLayout" >
- <property name="leftMargin" >
+ <layout class="QGridLayout">
+ <property name="margin">
<number>9</number>
</property>
- <property name="topMargin" >
- <number>9</number>
- </property>
- <property name="rightMargin" >
- <number>9</number>
- </property>
- <property name="bottomMargin" >
- <number>9</number>
- </property>
- <property name="horizontalSpacing" >
+ <property name="spacing">
<number>6</number>
</property>
- <property name="verticalSpacing" >
- <number>6</number>
- </property>
- <item row="1" column="0" colspan="2" >
- <widget class="QFrame" name="mCompositionOptionsFrame" >
- <property name="frameShape" >
+ <item row="1" column="0" colspan="2">
+ <widget class="QFrame" name="mCompositionOptionsFrame">
+ <property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
- <property name="frameShadow" >
+ <property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
- <item row="0" column="1" >
- <widget class="QComboBox" name="mCompositionNameComboBox" >
- <property name="enabled" >
+ <item row="0" column="1">
+ <widget class="QComboBox" name="mCompositionNameComboBox">
+ <property name="enabled">
<bool>false</bool>
</property>
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
- <item row="0" column="0" >
- <widget class="QLabel" name="textLabel1" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Preferred" hsizetype="Expanding" >
+ <item row="0" column="0">
+ <widget class="QLabel" name="textLabel1">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="text" >
+ <property name="text">
<string>Composition</string>
</property>
</widget>
</item>
</layout>
</widget>
- <widget class="QWidget" name="tab_2" >
- <attribute name="title" >
+ <widget class="QWidget" name="tab_2">
+ <attribute name="title">
<string>Item</string>
</attribute>
- <layout class="QGridLayout" >
- <property name="leftMargin" >
+ <layout class="QGridLayout">
+ <property name="margin">
<number>9</number>
</property>
- <property name="topMargin" >
- <number>9</number>
- </property>
- <property name="rightMargin" >
- <number>9</number>
- </property>
- <property name="bottomMargin" >
- <number>9</number>
- </property>
- <property name="horizontalSpacing" >
+ <property name="spacing">
<number>6</number>
</property>
- <property name="verticalSpacing" >
- <number>6</number>
- </property>
- <item row="0" column="0" >
- <widget class="QStackedWidget" name="mItemStackedWidget" >
- <widget class="QWidget" name="page" />
- <widget class="QWidget" name="page_2" />
+ <item row="0" column="0">
+ <widget class="QStackedWidget" name="mItemStackedWidget">
+ <widget class="QWidget" name="page"/>
+ <widget class="QWidget" name="page_2"/>
</widget>
</item>
</layout>
@@ -156,291 +133,316 @@
</widget>
</widget>
</item>
- <item row="1" column="0" >
- <widget class="QDialogButtonBox" name="buttonBox" >
- <property name="standardButtons" >
- <set>QDialogButtonBox::Close|QDialogButtonBox::Help|QDialogButtonBox::NoButton</set>
+ <item row="1" column="0">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Help</set>
</property>
</widget>
</item>
</layout>
</widget>
- <widget class="QToolBar" name="toolBar" >
- <property name="orientation" >
+ <widget class="QToolBar" name="toolBar">
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <attribute name="toolBarArea" >
+ <attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
- <attribute name="toolBarBreak" >
+ <attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
- <addaction name="mActionLoadFromTemplate" />
- <addaction name="mActionSaveAsTemplate" />
- <addaction name="mActionExportAsImage" />
- <addaction name="mActionExportAsPDF" />
- <addaction name="mActionExportAsSVG" />
- <addaction name="mActionPrint" />
- <addaction name="separator" />
- <addaction name="mActionZoomAll" />
- <addaction name="mActionZoomIn" />
- <addaction name="mActionZoomOut" />
- <addaction name="mActionRefreshView" />
- <addaction name="separator" />
- <addaction name="mActionAddNewMap" />
- <addaction name="mActionAddImage" />
- <addaction name="mActionAddNewLabel" />
- <addaction name="mActionAddNewLegend" />
- <addaction name="mActionAddNewScalebar" />
- <addaction name="mActionSelectMoveItem" />
- <addaction name="mActionMoveItemContent" />
- <addaction name="mActionGroupItems" />
- <addaction name="mActionUngroupItems" />
+ <addaction name="mActionLoadFromTemplate"/>
+ <addaction name="mActionSaveAsTemplate"/>
+ <addaction name="mActionExportAsImage"/>
+ <addaction name="mActionExportAsPDF"/>
+ <addaction name="mActionExportAsSVG"/>
+ <addaction name="mActionPrint"/>
+ <addaction name="separator"/>
+ <addaction name="mActionZoomAll"/>
+ <addaction name="mActionZoomIn"/>
+ <addaction name="mActionZoomOut"/>
+ <addaction name="mActionRefreshView"/>
+ <addaction name="separator"/>
+ <addaction name="mActionAddNewMap"/>
+ <addaction name="mActionAddImage"/>
+ <addaction name="mActionAddNewLabel"/>
+ <addaction name="mActionAddNewLegend"/>
+ <addaction name="mActionAddNewScalebar"/>
+ <addaction name="mActionSelectMoveItem"/>
+ <addaction name="mActionMoveItemContent"/>
+ <addaction name="mActionGroupItems"/>
+ <addaction name="mActionUngroupItems"/>
</widget>
- <action name="mActionPrint" >
- <property name="icon" >
- <iconset>../themes/default/mActionFilePrint.png</iconset>
+ <action name="mActionPrint">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionFilePrint.png</normaloff>../themes/default/mActionFilePrint.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>&Print...</string>
</property>
</action>
- <action name="mActionZoomAll" >
- <property name="icon" >
- <iconset>../themes/default/mActionZoomFullExtent.png</iconset>
+ <action name="mActionZoomAll">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionZoomFullExtent.png</normaloff>../themes/default/mActionZoomFullExtent.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Zoom Full</string>
</property>
</action>
- <action name="mActionZoomIn" >
- <property name="icon" >
- <iconset>../themes/default/mActionZoomIn.png</iconset>
+ <action name="mActionZoomIn">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionZoomIn.png</normaloff>../themes/default/mActionZoomIn.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Zoom In</string>
</property>
</action>
- <action name="mActionZoomOut" >
- <property name="icon" >
- <iconset>../themes/default/mActionZoomOut.png</iconset>
+ <action name="mActionZoomOut">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionZoomOut.png</normaloff>../themes/default/mActionZoomOut.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Zoom Out</string>
</property>
</action>
- <action name="mActionAddNewMap" >
- <property name="icon" >
- <iconset>../themes/default/mActionAddMap.png</iconset>
+ <action name="mActionAddNewMap">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionAddMap.png</normaloff>../themes/default/mActionAddMap.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Add Map</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Add new map</string>
</property>
</action>
- <action name="mActionAddNewLabel" >
- <property name="icon" >
- <iconset>../themes/default/mActionLabel.png</iconset>
+ <action name="mActionAddNewLabel">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionLabel.png</normaloff>../themes/default/mActionLabel.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Add Label</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Add new label</string>
</property>
</action>
- <action name="mActionAddNewLegend" >
- <property name="icon" >
- <iconset>../themes/default/mActionAddLegend.png</iconset>
+ <action name="mActionAddNewLegend">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionAddLegend.png</normaloff>../themes/default/mActionAddLegend.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Add Vector Legend</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Add new vect legend</string>
</property>
</action>
- <action name="mActionSelectMoveItem" >
- <property name="icon" >
- <iconset>../themes/default/mActionPan.png</iconset>
+ <action name="mActionSelectMoveItem">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionPan.png</normaloff>../themes/default/mActionPan.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Move Item</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Select/Move item</string>
</property>
</action>
- <action name="mActionExportAsImage" >
- <property name="icon" >
- <iconset>../themes/default/mActionSaveMapAsImage.png</iconset>
+ <action name="mActionExportAsImage">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionSaveMapAsImage.png</normaloff>../themes/default/mActionSaveMapAsImage.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Export as Image...</string>
</property>
</action>
- <action name="mActionExportAsPDF" >
- <property name="icon" >
- <iconset>../themes/default/mActionSaveAsPDF.png</iconset>
+ <action name="mActionExportAsPDF">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionSaveAsPDF.png</normaloff>../themes/default/mActionSaveAsPDF.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Export as PDF...</string>
</property>
</action>
- <action name="mActionExportAsSVG" >
- <property name="icon" >
- <iconset>../themes/default/mActionSaveAsSVG.png</iconset>
+ <action name="mActionExportAsSVG">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionSaveAsSVG.png</normaloff>../themes/default/mActionSaveAsSVG.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Export as SVG...</string>
</property>
</action>
- <action name="mActionAddNewScalebar" >
- <property name="icon" >
- <iconset>../../plugins/scale_bar/icon.xpm</iconset>
+ <action name="mActionAddNewScalebar">
+ <property name="icon">
+ <iconset>
+ <normaloff>../../plugins/scale_bar/icon.xpm</normaloff>../../plugins/scale_bar/icon.xpm</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Add Scalebar</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Add new scalebar</string>
</property>
</action>
- <action name="mActionRefreshView" >
- <property name="icon" >
- <iconset>../themes/default/mActionDraw.png</iconset>
+ <action name="mActionRefreshView">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionDraw.png</normaloff>../themes/default/mActionDraw.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Refresh</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Refresh view</string>
</property>
</action>
- <action name="mActionAddImage" >
- <property name="icon" >
- <iconset>../themes/default/mActionAddImage.png</iconset>
+ <action name="mActionAddImage">
+ <property name="icon">
+ <iconset>
+ <normaloff>../themes/default/mActionAddImage.png</normaloff>../themes/default/mActionAddImage.png</iconset>
</property>
- <property name="text" >
+ <property name="text">
<string>Add Image</string>
</property>
</action>
- <action name="mActionMoveItemContent" >
- <property name="text" >
+ <action name="mActionMoveItemContent">
+ <property name="text">
<string>Move Content</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Move item content</string>
</property>
</action>
- <action name="mActionGroupItems" >
- <property name="text" >
+ <action name="mActionGroupItems">
+ <property name="text">
<string>Group</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Group items</string>
</property>
</action>
- <action name="mActionUngroupItems" >
- <property name="text" >
+ <action name="mActionUngroupItems">
+ <property name="text">
<string>Ungroup</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Ungroup items</string>
</property>
</action>
- <action name="mActionRaiseItems" >
- <property name="text" >
+ <action name="mActionRaiseItems">
+ <property name="text">
<string>Raise</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Raise selected items</string>
</property>
</action>
- <action name="mActionLowerItems" >
- <property name="text" >
+ <action name="mActionLowerItems">
+ <property name="text">
<string>Lower</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Lower selected items</string>
</property>
</action>
- <action name="mActionMoveItemsToTop" >
- <property name="text" >
+ <action name="mActionMoveItemsToTop">
+ <property name="text">
<string>Bring to Front</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Move selected items to top</string>
</property>
</action>
- <action name="mActionMoveItemsToBottom" >
- <property name="text" >
+ <action name="mActionMoveItemsToBottom">
+ <property name="text">
<string>Send to Back</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Move selected items to bottom</string>
</property>
</action>
- <action name="mActionLoadFromTemplate" >
- <property name="text" >
+ <action name="mActionLoadFromTemplate">
+ <property name="text">
<string>Load From template</string>
</property>
</action>
- <action name="mActionSaveAsTemplate" >
- <property name="text" >
+ <action name="mActionSaveAsTemplate">
+ <property name="text">
<string>Save as template</string>
</property>
</action>
- <action name="mActionAlignLeft" >
- <property name="text" >
+ <action name="mActionAlignLeft">
+ <property name="text">
<string>Align left</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Align selected items left</string>
</property>
</action>
- <action name="mActionAlignHCenter" >
- <property name="text" >
+ <action name="mActionAlignHCenter">
+ <property name="text">
<string>Align center</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Align center horizontal</string>
</property>
</action>
- <action name="mActionAlignRight" >
- <property name="text" >
+ <action name="mActionAlignRight">
+ <property name="text">
<string>Align right</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Align selected items right</string>
</property>
</action>
- <action name="mActionAlignTop" >
- <property name="text" >
+ <action name="mActionAlignTop">
+ <property name="text">
<string>Align top</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Align selected items to top</string>
</property>
</action>
- <action name="mActionAlignVCenter" >
- <property name="text" >
+ <action name="mActionAlignVCenter">
+ <property name="text">
<string>Align center vertical</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Align center vertical</string>
</property>
</action>
- <action name="mActionAlignBottom" >
- <property name="text" >
+ <action name="mActionAlignBottom">
+ <property name="text">
<string>Align bottom</string>
</property>
- <property name="toolTip" >
+ <property name="toolTip">
<string>Align selected items bottom</string>
</property>
</action>
+ <action name="mActionQuit">
+ <property name="text">
+ <string>&Quit</string>
+ </property>
+ <property name="toolTip">
+ <string>Quit</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+Q</string>
+ </property>
+ </action>
</widget>
<tabstops>
<tabstop>mOptionsTabWidget</tabstop>
@@ -455,11 +457,11 @@
<receiver>QgsComposerBase</receiver>
<slot>close()</slot>
<hints>
- <hint type="sourcelabel" >
+ <hint type="sourcelabel">
<x>612</x>
<y>583</y>
</hint>
- <hint type="destinationlabel" >
+ <hint type="destinationlabel">
<x>735</x>
<y>567</y>
</hint>
More information about the QGIS-commit
mailing list