[QGIS Commit] r9042 -
branches/advanced_printing_branch/src/app/composer
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sat Aug 9 08:39:23 EDT 2008
Author: mhugent
Date: 2008-08-09 08:39:21 -0400 (Sat, 09 Aug 2008)
New Revision: 9042
Modified:
branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp
Log:
Fixed crash when loading a project file without composer information
Modified: branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp 2008-08-09 11:28:27 UTC (rev 9041)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp 2008-08-09 12:39:21 UTC (rev 9042)
@@ -255,7 +255,10 @@
void QgsComposer::zoomFull(void)
{
- mView->fitInView(0, 0, mComposition->paperWidth(), mComposition->paperHeight(), Qt::KeepAspectRatio);
+ if(mView)
+ {
+ mView->fitInView(0, 0, mComposition->paperWidth(), mComposition->paperHeight(), Qt::KeepAspectRatio);
+ }
}
void QgsComposer::on_mActionZoomAll_activated(void)
@@ -1157,6 +1160,22 @@
void QgsComposer::readXML(const QDomDocument& doc)
{
+ //look for Composer element
+ QDomNodeList nl = doc.elementsByTagName("Composer");
+ if(nl.size() < 1)
+ {
+ return; //nothing to do...
+ }
+ QDomElement composerElem = nl.at(0).toElement();
+
+ //look for Composition element
+ QDomNodeList cnl = composerElem.elementsByTagName("Composition");
+ if(cnl.size() < 1)
+ {
+ return; //nothing to do
+ }
+
+
//delete composer view and composition
delete mView;
mView = 0;
@@ -1167,102 +1186,87 @@
{
delete (*it);
}
-
//delete composition widget
QgsCompositionWidget* oldCompositionWidget = dynamic_cast<QgsCompositionWidget*>(mCompositionOptionsFrame->children().at(0));
delete oldCompositionWidget;
delete mCompositionOptionsLayout;
mCompositionOptionsLayout = 0;
-
- //look for Composer element
-
- QDomNodeList nl = doc.elementsByTagName("Composer");
- if(nl.size() < 1)
+
+ QDomElement compositionElem = cnl.at(0).toElement();
+
+ //todo: move in function because duplicated code with constructor
+ mView = new QgsComposerView(mViewFrame);
+ connect(mView, SIGNAL(selectedItemChanged(const QgsComposerItem*)), this, SLOT(showItemOptions(const QgsComposerItem*)));
+ connect(mView, SIGNAL(composerLabelAdded(QgsComposerLabel*)), this, SLOT(addComposerLabel(QgsComposerLabel*)));
+ connect(mView, SIGNAL(composerMapAdded(QgsComposerMap*)), this, SLOT(addComposerMap(QgsComposerMap*)));
+ connect(mView, SIGNAL(itemRemoved(QgsComposerItem*)), this, SLOT(deleteItem(QgsComposerItem*)));
+ connect(mView, SIGNAL(composerScaleBarAdded(QgsComposerScaleBar*)), this, SLOT(addComposerScaleBar(QgsComposerScaleBar*)));
+ connect(mView, SIGNAL(composerLegendAdded(QgsComposerLegend*)), this, SLOT(addComposerLegend(QgsComposerLegend*)));
+
+ mComposition = new QgsComposition(mQgis->getMapCanvas());
+ mComposition->readXML(compositionElem, doc);
+
+ QGridLayout *l = new QGridLayout(mViewFrame );
+ l->setMargin(0);
+ l->addWidget( mView, 0, 0 );
+
+ //create compositionwidget
+ QgsCompositionWidget* compositionWidget = new QgsCompositionWidget(mCompositionOptionsFrame, mComposition);
+ 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)
{
- return; //nothing to do...
+ QDomElement currentComposerLabelElem = composerLabelList.at(i).toElement();
+ QgsComposerLabel* newLabel = new QgsComposerLabel(mComposition);
+ newLabel->readXML(currentComposerLabelElem, doc);
+ addComposerLabel(newLabel);
+ mComposition->addItem(newLabel);
+ mComposition->update();
}
- QDomElement composerElem = nl.at(0).toElement();
-
- //look for Composition element
- QDomNodeList cnl = composerElem.elementsByTagName("Composition");
- if(cnl.size() > 0)
+
+ //composer maps
+ QDomNodeList composerMapList = composerElem.elementsByTagName("ComposerMap");
+ for(int i = 0; i < composerMapList.size(); ++i)
{
- QDomElement compositionElem = cnl.at(0).toElement();
-
- //todo: move in function because duplicated code with constructor
- mView = new QgsComposerView(mViewFrame);
- connect(mView, SIGNAL(selectedItemChanged(const QgsComposerItem*)), this, SLOT(showItemOptions(const QgsComposerItem*)));
- connect(mView, SIGNAL(composerLabelAdded(QgsComposerLabel*)), this, SLOT(addComposerLabel(QgsComposerLabel*)));
- connect(mView, SIGNAL(composerMapAdded(QgsComposerMap*)), this, SLOT(addComposerMap(QgsComposerMap*)));
- connect(mView, SIGNAL(itemRemoved(QgsComposerItem*)), this, SLOT(deleteItem(QgsComposerItem*)));
- connect(mView, SIGNAL(composerScaleBarAdded(QgsComposerScaleBar*)), this, SLOT(addComposerScaleBar(QgsComposerScaleBar*)));
- connect(mView, SIGNAL(composerLegendAdded(QgsComposerLegend*)), this, SLOT(addComposerLegend(QgsComposerLegend*)));
-
- mComposition = new QgsComposition(mQgis->getMapCanvas());
- mComposition->readXML(compositionElem, doc);
-
- QGridLayout *l = new QGridLayout(mViewFrame );
- l->setMargin(0);
- l->addWidget( mView, 0, 0 );
-
- //create compositionwidget
- QgsCompositionWidget* compositionWidget = new QgsCompositionWidget(mCompositionOptionsFrame, mComposition);
- 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();
- }
-
- //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();
- }
-
- //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();
- }
-
- //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();
- }
+ QDomElement currentComposerMapElem = composerMapList.at(i).toElement();
+ QgsComposerMap* newMap = new QgsComposerMap(mComposition);
+ newMap->readXML(currentComposerMapElem, doc);
+ addComposerMap(newMap);
+ mComposition->addItem(newMap);
+ mComposition->update();
}
+
+ //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();
+ }
+
+ //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();
+ }
mView->setComposition(mComposition);
}
More information about the QGIS-commit
mailing list