[QGIS Commit] r8918 - branches/advanced_printing_branch/src/app/composer

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat Jul 26 10:24:21 EDT 2008


Author: mhugent
Date: 2008-07-26 10:24:20 -0400 (Sat, 26 Jul 2008)
New Revision: 8918

Modified:
   branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposer.h
   branches/advanced_printing_branch/src/app/composer/qgscomposeritem.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposeritem.h
   branches/advanced_printing_branch/src/app/composer/qgscomposeritemgroup.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposeritemgroup.h
   branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.h
   branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.h
   branches/advanced_printing_branch/src/app/composer/qgscomposermap.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposermap.h
   branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.h
Log:
First code to save items to xml

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposer.cpp	2008-07-26 14:24:20 UTC (rev 8918)
@@ -126,6 +126,7 @@
   mSizeGrip->resize(mSizeGrip->sizeHint());
   mSizeGrip->move(rect().bottomRight() - mSizeGrip->rect().bottomRight());
 
+#if 0 //hopefully not necessary any more
   if ( ! connect( mQgis, SIGNAL( projectRead() ), this, SLOT( projectRead()) ) ) {
     qDebug( "unable to connect to projectRead" );
   } 
@@ -136,10 +137,19 @@
   if ( ! connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(saveWindowState()) ) ) { 
     qDebug( "unable to connect to aboutToQuit" );
   }
+#endif //0
+
   restoreWindowState();
   selectItem(); // Set selection tool
 
   mView->setFocus();
+
+  //connect with signals from QgsProject to read/write project files
+  if(QgsProject::instance())
+    {
+      connect(QgsProject::instance(), SIGNAL(readProject(const QDomDocument&)), this, SLOT(readXML(const QDomDocument& doc)));
+      connect(QgsProject::instance(), SIGNAL(writeProject(QDomDocument&)), this, SLOT(writeXML(QDomDocument&)));
+    }
 }
 
 QgsComposer::~QgsComposer()
@@ -1105,24 +1115,39 @@
   return ok;
 }
 
-bool QgsComposer::writeXML( QDomNode & node, QDomDocument & doc )
+void  QgsComposer::writeXML(QDomDocument& doc)
 {
-#ifdef QGISDEBUG
-  std::cout << "QgsComposer::writeXML" << std::endl;
-#endif
-  QDomElement compositionsNode = doc.createElement("compositions");
+  QDomNodeList nl = doc.elementsByTagName("qgis");
+  if (nl.count() < 1)
+    {
+      return;
+    }
+  QDomElement qgisElem = nl.at(0).toElement();
+  if(qgisElem.isNull())
+    {
+      return;
+    }
+  
+  QDomElement composerNode = doc.createElement("composer");
+  qgisElem.appendChild( composerNode );
 
-  node.appendChild( compositionsNode );
+  //store composer items:
+  QMap<QgsComposerItem*, QWidget*>::const_iterator itemIt = mItemWidgetMap.constBegin();
+  for(; itemIt != mItemWidgetMap.constEnd(); ++itemIt)
+    {
+      itemIt.key()->writeXML(composerNode, doc);
+    }
 
-  return true;
+  //store composer view
+
+  //store composition
+
+  return;
 }
 
-bool QgsComposer::readXML( QDomNode & node )
+void QgsComposer::readXML(const QDomDocument& doc)
 {
-#ifdef QGISDEBUG
-  std::cout << "QgsComposer::readXML" << std::endl;
-#endif
-  return true;
+  //todo...
 }
 
 void QgsComposer::addComposerMap(QgsComposerMap* map)

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposer.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposer.h	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposer.h	2008-07-26 14:24:20 UTC (rev 8918)
@@ -86,12 +86,6 @@
     /** \brief read state from project */
     bool readSettings ( void );
 
-    //! Stores state in DOM node
-    bool writeXML( QDomNode & node, QDomDocument & doc);
-
-    //! Sets state from DOM document
-    bool readXML( QDomNode & node );
-
     //! Restore the window and toolbar state
     void restoreWindowState();
 
@@ -183,6 +177,15 @@
     /**Shows the configuration widget for a composer item*/
     void showItemOptions(const QgsComposerItem* i);
 
+    //XML, usually connected with QgsProject::readProject and QgsProject::writeProject
+
+    //! Stores state in DOM node
+    void writeXML(QDomDocument& doc);
+
+    //! Sets state from DOM document
+    void readXML( const QDomDocument& doc);
+
+
     
 
 private:

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposeritem.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposeritem.cpp	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposeritem.cpp	2008-07-26 14:24:20 UTC (rev 8918)
@@ -58,11 +58,51 @@
 bool QgsComposerItem::readSettings ( void )  { return true; }
 
 bool QgsComposerItem::removeSettings ( void )  { return true; }
-    
-bool QgsComposerItem::writeXML( QDomNode & node, QDomDocument & doc, bool templ ) { return true; }
 
-bool QgsComposerItem::readXML( QDomNode & node ) {  return true; }
+bool QgsComposerItem::_writeXML(QDomElement& itemElem, QDomDocument& doc)
+{
+  //to come
+  return true;
+}
 
+bool QgsComposerItem::readXML( QDomElement& elem) {  return true; }
+
+void QgsComposerItem::writeFontXML(const QFont& font, QDomElement& parent, QDomDocument& doc)
+{
+  if(parent.isNull())
+    {
+      return;
+    }
+
+  QDomElement fontElem = doc.createElement("Font");
+  bool boldValue = font.bold();
+  bool italic = font.italic();
+  double size = font.pointSizeF();
+
+  if(boldValue)
+    {
+      fontElem.setAttribute("bold", "true");
+    }
+  else
+    {
+      fontElem.setAttribute("bold", "false");
+    }
+
+  if(italic)
+    {
+      fontElem.setAttribute("italic", "true");
+    }
+  else
+    {
+      fontElem.setAttribute("italic", "false");
+    }
+
+  fontElem.setAttribute("pointSize", QString::number(size));
+  fontElem.setAttribute("family", font.family());
+
+  parent.appendChild(fontElem);
+}
+
 void QgsComposerItem::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
 {
   qWarning("QgsComposerItem::mouseMoveEvent");

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposeritem.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposeritem.h	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposeritem.h	2008-07-26 14:24:20 UTC (rev 8918)
@@ -21,8 +21,8 @@
 #include <QGraphicsRectItem>
 
 class QWidget;
-class QDomNode;
 class QDomDocument;
+class QDomElement;
 
 class QqsComposition;
 
@@ -75,16 +75,24 @@
     virtual void setSceneRect(const QRectF& rectangle);
 
     /** stores state in DOM node
-     * @param node is DOM node corresponding to '???' tag
+     * @param node is DOM node corresponding to 'Composer' tag
      * @param temp write template file
      */
-    virtual bool writeXML( QDomNode & node, QDomDocument & doc, bool templ = false );
+    virtual bool writeXML(QDomElement& elem, QDomDocument & doc) = 0;
 
+    /**Writes parameter that are not subclass specific in document. Usually called from subclass specific methods*/
+    bool _writeXML(QDomElement& itemElem, QDomDocument& doc);
+
+    /**Creates a font element and appends it to parent*/
+    void writeFontXML(const QFont& font, QDomElement& parent, QDomDocument& doc);
+
     /** sets state from DOM document
-     * @param node is DOM node corresponding to '???' tag
+     * @param node is DOM node corresponding to 'Composer' tag
      */
-    virtual bool readXML( QDomNode & node );
+    virtual bool readXML( QDomElement& elem);
 
+    
+
     bool frame() const {return mFrame;}
     void setFrame(bool drawFrame){mFrame = drawFrame;}
 

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposeritemgroup.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposeritemgroup.cpp	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposeritemgroup.cpp	2008-07-26 14:24:20 UTC (rev 8918)
@@ -164,3 +164,8 @@
       p->drawRect (QRectF( 0, 0, rect().width(), rect().height()));
     }
 }
+
+bool QgsComposerItemGroup::writeXML(QDomElement& elem, QDomDocument & doc)
+{
+  return true;
+}

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposeritemgroup.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposeritemgroup.h	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposeritemgroup.h	2008-07-26 14:24:20 UTC (rev 8918)
@@ -40,6 +40,12 @@
   /** resizes an item in x- and y direction (scene coordinates)*/
   void resize(double dx, double dy);
 
+  /** stores state in DOM node
+     * @param elem is DOM element corresponding to 'Composer' tag
+     * @param temp write template file
+     */
+  bool writeXML(QDomElement& elem, QDomDocument & doc);
+
  signals:
   void childItemDeleted(QgsComposerItem* item);
 

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.cpp	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.cpp	2008-07-26 14:24:20 UTC (rev 8918)
@@ -16,6 +16,7 @@
  ***************************************************************************/
 
 #include "qgscomposerlabel.h"
+#include <QDomElement>
 #include <QPainter>
 
 QgsComposerLabel::QgsComposerLabel( QgsComposition *composition): QgsComposerItem(composition), mMargin(0.0)
@@ -64,4 +65,26 @@
   setSceneRect(QRectF(transform().dx(), transform().dy(), fontInfo.width(mText) + 2 * mMargin, fontInfo.ascent() + 2 * mMargin));
 }
 
+bool QgsComposerLabel::writeXML(QDomElement& elem, QDomDocument & doc)
+{
+  if(elem.isNull())
+    {
+      return false;
+    }
 
+  QDomElement composerLabelElem = doc.createElement("ComposerLabel");
+
+  composerLabelElem.setAttribute("labelText", mText);
+  composerLabelElem.setAttribute("margin", mMargin);
+
+
+  //font
+  QDomElement labelFontElem = doc.createElement("LabelFont");
+  writeFontXML(mFont, labelFontElem, doc);
+  composerLabelElem.appendChild(labelFontElem);
+
+  elem.appendChild(composerLabelElem);
+  return _writeXML(composerLabelElem, doc);
+}
+
+

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.h	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlabel.h	2008-07-26 14:24:20 UTC (rev 8918)
@@ -37,6 +37,12 @@
   void setFont(const QFont& f);
   double margin(){return mMargin;}
   void setMargin(double m){mMargin = m;}
+
+  /** stores state in DOM node
+     * @param node is DOM node corresponding to 'Composer' tag
+     * @param temp write template file
+     */
+  bool writeXML(QDomElement& elem, QDomDocument & doc);
  
  private:
   // Text 

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp	2008-07-26 14:24:20 UTC (rev 8918)
@@ -317,3 +317,8 @@
 
   currentXPosition += mSymbolWidth;
 }
+
+bool QgsComposerLegend::writeXML(QDomElement& elem, QDomDocument & doc)
+{
+  return true;
+}

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.h	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.h	2008-07-26 14:24:20 UTC (rev 8918)
@@ -72,6 +72,12 @@
   double symbolHeight() const {return mSymbolHeight;}
   void setSymbolHeight(double h){mSymbolHeight = h;}
 
+  /** stores state in DOM node
+     * @param elem is DOM element corresponding to 'Composer' tag
+     * @param temp write template file
+     */
+  bool writeXML(QDomElement& elem, QDomDocument & doc);
+
  protected:
   QString mTitle;
 

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposermap.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposermap.cpp	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposermap.cpp	2008-07-26 14:24:20 UTC (rev 8918)
@@ -325,3 +325,8 @@
     }
   return result;
 }
+
+bool QgsComposerMap::writeXML(QDomElement& elem, QDomDocument & doc)
+{
+  return true;
+}

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposermap.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposermap.h	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposermap.h	2008-07-26 14:24:20 UTC (rev 8918)
@@ -104,6 +104,12 @@
 
     const QgsMapCanvas* mapCanvas() const {return mMapCanvas;}
 
+    /** stores state in DOM node
+     * @param elem is DOM element corresponding to 'Composer' tag
+     * @param temp write template file
+     */
+    bool writeXML(QDomElement& elem, QDomDocument & doc);
+
 public slots:
 
     // Called if map canvas has changed

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.cpp	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.cpp	2008-07-26 14:24:20 UTC (rev 8918)
@@ -241,4 +241,9 @@
     }
 }
 
+bool QgsComposerScaleBar::writeXML(QDomElement& elem, QDomDocument & doc)
+{
+  return true;
+}
 
+

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.h	2008-07-26 09:36:31 UTC (rev 8917)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerscalebar.h	2008-07-26 14:24:20 UTC (rev 8918)
@@ -98,6 +98,12 @@
    /**Returns string of first label (important for drawing, labeling, size calculation*/
   QString firstLabelString() const;
 
+  /** stores state in DOM node
+     * @param elem is DOM element corresponding to 'Composer' tag
+     * @param temp write template file
+     */
+  bool writeXML(QDomElement& elem, QDomDocument & doc);
+
  public slots:
   void updateSegmentSize();
   /**Sets mCompositionMap to 0 if the map is deleted*/



More information about the QGIS-commit mailing list