[QGIS Commit] r9075 - in branches/advanced_printing_branch/src: app app/composer ui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Aug 19 16:45:19 EDT 2008


Author: mhugent
Date: 2008-08-19 16:45:12 -0400 (Tue, 19 Aug 2008)
New Revision: 9075

Added:
   branches/advanced_printing_branch/src/app/composer/qgscomposeritemwidget.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposeritemwidget.h
   branches/advanced_printing_branch/src/ui/qgscomposeritemwidgetbase.ui
Modified:
   branches/advanced_printing_branch/src/app/CMakeLists.txt
   branches/advanced_printing_branch/src/app/composer/qgscomposeritem.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerlegendwidget.cpp
   branches/advanced_printing_branch/src/app/composer/qgscomposerlegendwidget.h
   branches/advanced_printing_branch/src/ui/CMakeLists.txt
   branches/advanced_printing_branch/src/ui/qgscomposerlegendwidgetbase.ui
Log:
Created a widget for general item properties that can be embedded into the item widgets. Only done for composer legend so far, the other item widgets will follow

Modified: branches/advanced_printing_branch/src/app/CMakeLists.txt
===================================================================
--- branches/advanced_printing_branch/src/app/CMakeLists.txt	2008-08-19 08:36:29 UTC (rev 9074)
+++ branches/advanced_printing_branch/src/app/CMakeLists.txt	2008-08-19 20:45:12 UTC (rev 9075)
@@ -58,6 +58,7 @@
   composer/qgscomposer.cpp
   composer/qgscomposeritem.cpp
   composer/qgscomposeritemgroup.cpp
+  composer/qgscomposeritemwidget.cpp
   composer/qgscomposerlabel.cpp
   composer/qgscomposerlabelwidget.cpp
   composer/qgscomposerpicture.cpp
@@ -134,6 +135,7 @@
   qgsdbtablemodel.h
 
   composer/qgscomposer.h
+  composer/qgscomposeritemwidget.h
   composer/qgscomposerlabelwidget.h
   composer/qgscomposerlegend.h
   composer/qgscomposerlegendwidget.h

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposeritem.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposeritem.cpp	2008-08-19 08:36:29 UTC (rev 9074)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposeritem.cpp	2008-08-19 20:45:12 UTC (rev 9075)
@@ -31,6 +31,12 @@
 {
     setFlag(QGraphicsItem::ItemIsSelectable, true);
     setAcceptsHoverEvents(true);
+
+    //set default pen and brush
+    setBrush(QBrush(QColor(255, 255, 255, 255)));
+    QPen defaultPen(QColor(0, 0, 0));
+    defaultPen.setWidth(1);
+    setPen(defaultPen);
 }
 
 QgsComposerItem::QgsComposerItem(qreal x, qreal y, qreal width, qreal height, QgsComposition* composition): QGraphicsRectItem(0, 0, width, height, 0), mComposition(composition), mBoundingResizeRectangle(0), mFrame(true)
@@ -41,6 +47,12 @@
   QTransform t;
   t.translate(x, y);
   setTransform(t);
+
+  //set default pen and brush
+  setBrush(QBrush(QColor(255, 255, 255, 255)));
+  QPen defaultPen(QColor(0, 0, 0));
+  defaultPen.setWidth(1);
+  setPen(defaultPen);
 }
 
 QgsComposerItem::~QgsComposerItem()
@@ -85,7 +97,26 @@
   composerItemElem.setAttribute("width", rect().width());
   composerItemElem.setAttribute("height", rect().height());
   composerItemElem.setAttribute("zValue", QString::number(zValue()));
+  composerItemElem.setAttribute("outlineWidth", QString::number(pen().widthF()));
 
+  //frame color
+  QDomElement frameColorElem = doc.createElement("FrameColor");
+  QColor frameColor = pen().color();
+  frameColorElem.setAttribute("red", QString::number(frameColor.red()));
+  frameColorElem.setAttribute("green", QString::number(frameColor.green()));
+  frameColorElem.setAttribute("blue", QString::number(frameColor.blue()));
+  frameColorElem.setAttribute("alpha", QString::number(frameColor.alpha()));
+  composerItemElem.appendChild(frameColorElem);
+
+  //background color
+  QDomElement bgColorElem = doc.createElement("BackgroundColor");
+  QColor bgColor = brush().color();
+  bgColorElem.setAttribute("red", QString::number(bgColor.red()));
+  bgColorElem.setAttribute("green", QString::number(bgColor.green()));
+  bgColorElem.setAttribute("blue", QString::number(bgColor.blue()));
+  bgColorElem.setAttribute("alpha", QString::number(bgColor.alpha()));
+  composerItemElem.appendChild(bgColorElem);
+
   itemElem.appendChild(composerItemElem);
 
   return true;
@@ -125,6 +156,44 @@
 
   setSceneRect(QRectF(x, y, width, height));
   setZValue(itemElem.attribute("zValue").toDouble());
+
+  //pen
+  QDomNodeList frameColorList = itemElem.elementsByTagName("FrameColor");
+  if(frameColorList.size() > 0)
+    {
+      QDomElement frameColorElem = frameColorList.at(0).toElement();
+      bool redOk, greenOk, blueOk, alphaOk, widthOk;
+      int penRed, penGreen, penBlue, penAlpha, penWidth;
+      penWidth = itemElem.attribute("outlineWidth").toDouble(&widthOk);
+      penRed = frameColorElem.attribute("red").toDouble(&redOk);
+      penGreen = frameColorElem.attribute("green").toDouble(&greenOk);
+      penBlue = frameColorElem.attribute("blue").toDouble(&blueOk);
+      penAlpha = frameColorElem.attribute("alpha").toDouble(&alphaOk);
+      if(redOk && greenOk && blueOk && alphaOk && widthOk)
+	{
+	  QPen framePen(QColor(penRed, penGreen, penBlue, penAlpha));
+	  framePen.setWidth(penWidth);
+	  setPen(framePen);
+	}
+    }
+
+  //brush
+  QDomNodeList bgColorList = itemElem.elementsByTagName("BackgroundColor");
+  if(bgColorList.size() > 0)
+    {
+      QDomElement bgColorElem = bgColorList.at(0).toElement();
+      bool redOk, greenOk, blueOk, alphaOk;
+      int bgRed, bgGreen, bgBlue, bgAlpha;
+      bgRed = bgColorElem.attribute("red").toDouble(&redOk);
+      bgGreen = bgColorElem.attribute("green").toDouble(&greenOk);
+      bgBlue = bgColorElem.attribute("blue").toDouble(&blueOk);
+      bgAlpha = bgColorElem.attribute("alpha").toDouble(&alphaOk);
+      if(redOk && greenOk && blueOk && alphaOk)
+	{
+	  QColor brushColor(bgRed, bgGreen, bgBlue, bgAlpha);
+	  setBrush(QBrush(brushColor));
+	}
+    }
   return true;
 }
 
@@ -371,7 +440,7 @@
 
 void QgsComposerItem::drawFrame(QPainter* p)
 {
-  if(mFrame)
+  if(mFrame && p)
     {
       p->setPen(pen());
       p->setBrush(Qt::NoBrush);
@@ -419,9 +488,13 @@
 
 void QgsComposerItem::drawBackground(QPainter* p)
 {
-  p->setBrush(brush());
-  p->setRenderHint(QPainter::Antialiasing, true);
-  p->drawRect (QRectF( 0, 0, rect().width(), rect().height()));
+  if(p)
+    {
+      p->setBrush(brush());
+      p->setPen(Qt::NoPen);
+      p->setRenderHint(QPainter::Antialiasing, true);
+      p->drawRect (QRectF( 0, 0, rect().width(), rect().height()));
+    }
 }
 
 void QgsComposerItem::hoverMoveEvent ( QGraphicsSceneHoverEvent * event )

Added: branches/advanced_printing_branch/src/app/composer/qgscomposeritemwidget.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposeritemwidget.cpp	                        (rev 0)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposeritemwidget.cpp	2008-08-19 20:45:12 UTC (rev 9075)
@@ -0,0 +1,149 @@
+/***************************************************************************
+                         qgscomposeritemwidget.cpp 
+                         -------------------------
+    begin                : August 2008
+    copyright            : (C) 2008 by Marco Hugentobler
+    email                : marco dot hugentobler at karto dot baug dot ethz dot ch
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#include "qgscomposeritemwidget.h"
+#include "qgscomposeritem.h"
+#include <QColorDialog>
+
+QgsComposerItemWidget::QgsComposerItemWidget(QWidget* parent, QgsComposerItem* item): QWidget(parent), mItem(item)
+{
+  setupUi(this);
+  setValuesForGuiElements();
+}
+
+QgsComposerItemWidget::QgsComposerItemWidget(): QWidget(0), mItem(0)
+{
+
+}
+
+QgsComposerItemWidget::QgsComposerItemWidget::~QgsComposerItemWidget()
+{
+  
+}
+
+//slots
+void QgsComposerItemWidget::on_mFrameColorButton_clicked()
+{
+  if(!mItem)
+    {
+      return;
+    }
+
+  QColor newFrameColor = QColorDialog::getColor(mItem->pen().color(), 0);
+  if(!newFrameColor.isValid())
+    {
+      return; //dialog canceled
+    }
+
+  QPen thePen;
+  thePen.setColor(newFrameColor);
+  thePen.setWidthF(mOutlineWidthSpinBox->value());
+
+  mItem->setPen(thePen);
+  mItem->update();
+}
+
+void QgsComposerItemWidget::on_mBackgroundColorButton_clicked()
+{
+  if(!mItem)
+    {
+      return;
+    }
+
+  QColor newBackgroundColor = QColorDialog::getColor(mItem->brush().color(), 0);
+  if(!newBackgroundColor.isValid())
+    {
+      return; //dialog canceled
+    }
+
+  newBackgroundColor.setAlpha(mOpacitySlider->value());
+  mItem->setBrush(QBrush(QColor(newBackgroundColor), Qt::SolidPattern));
+  mItem->update();
+}
+
+void QgsComposerItemWidget::on_mOpacitySlider_sliderReleased()
+{
+  if(!mItem)
+    {
+      return;
+    }
+  int value = mOpacitySlider->value();
+
+  QBrush itemBrush = mItem->brush();
+  QColor brushColor = itemBrush.color();
+  brushColor.setAlpha(value);
+  mItem->setBrush(QBrush(brushColor));
+  mItem->update();
+}
+ 
+void QgsComposerItemWidget::on_mOutlineWidthSpinBox_valueChanged(double d)
+{
+  if(!mItem)
+    {
+      return;
+    }
+
+  QPen itemPen = mItem->pen();
+  itemPen.setWidthF(d);
+  mItem->setPen(itemPen);
+}
+
+void QgsComposerItemWidget::on_mFrameCheckBox_stateChanged(int state)
+{
+  if(!mItem)
+    {
+      return;
+    }
+
+  if(state == Qt::Checked)
+    {
+      mItem->setFrame(true);
+    }
+  else
+    {
+      mItem->setFrame(false);
+    }
+  mItem->update();
+}
+
+void QgsComposerItemWidget::setValuesForGuiElements()
+{
+  if(!mItem)
+    {
+      return;
+    }
+
+  mOpacitySlider->blockSignals(true);
+  mOutlineWidthSpinBox->blockSignals(true);
+  mFrameCheckBox->blockSignals(true);
+
+  mOpacitySlider->setValue(mItem->brush().color().alpha());
+  mOutlineWidthSpinBox->setValue(mItem->pen().widthF());
+  if(mItem->frame())
+    {
+      mFrameCheckBox->setCheckState(Qt::Checked);
+    }
+  else
+    {
+      mFrameCheckBox->setCheckState(Qt::Unchecked);
+    }
+
+  mOpacitySlider->blockSignals(false);
+  mOutlineWidthSpinBox->blockSignals(false);
+  mFrameCheckBox->blockSignals(false); 
+  
+}

Added: branches/advanced_printing_branch/src/app/composer/qgscomposeritemwidget.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposeritemwidget.h	                        (rev 0)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposeritemwidget.h	2008-08-19 20:45:12 UTC (rev 9075)
@@ -0,0 +1,48 @@
+/***************************************************************************
+                         qgscomposeritemwidget.h 
+                         -------------------------
+    begin                : August 2008
+    copyright            : (C) 2008 by Marco Hugentobler
+    email                : marco dot hugentobler at karto dot baug dot ethz dot ch
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#ifndef QGSCOMPOSERITEMWIDGET_H
+#define QGSCOMPOSERITEMWIDGET_H
+
+#include "ui_qgscomposeritemwidgetbase.h"
+
+class QgsComposerItem;
+
+/**A class to enter generic properties for composer items (e.g. background, outline, frame).
+ This widget can be embedded into other item widgets*/
+class QgsComposerItemWidget: public QWidget, private Ui::QgsComposerItemWidgetBase
+{
+  Q_OBJECT
+ public:
+  QgsComposerItemWidget(QWidget* parent, QgsComposerItem* item);
+  ~QgsComposerItemWidget();
+
+  public slots:
+  void on_mFrameColorButton_clicked();
+  void on_mBackgroundColorButton_clicked();
+  void on_mOpacitySlider_sliderReleased(); 
+  void on_mOutlineWidthSpinBox_valueChanged(double d);
+  void on_mFrameCheckBox_stateChanged(int state);
+
+ private:
+  QgsComposerItemWidget();
+  void setValuesForGuiElements();
+
+  QgsComposerItem* mItem;
+};
+
+#endif //QGSCOMPOSERITEMWIDGET_H

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp	2008-08-19 08:36:29 UTC (rev 9074)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlegend.cpp	2008-08-19 20:45:12 UTC (rev 9075)
@@ -68,6 +68,8 @@
   QSizeF size;
   double maxXCoord = 0;
 
+  
+
   //go through model...
   QStandardItem* rootItem = mLegendModel.invisibleRootItem();
   if(!rootItem)
@@ -75,9 +77,12 @@
       return size;
     }
 
+
   if(painter)
     {
       painter->save();
+      drawBackground(painter);
+      painter->setPen(QPen(QColor(0, 0, 0))); //draw all text black
     }
 
   int numLayerItems = rootItem->rowCount();

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlegendwidget.cpp
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlegendwidget.cpp	2008-08-19 08:36:29 UTC (rev 9074)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlegendwidget.cpp	2008-08-19 20:45:12 UTC (rev 9075)
@@ -18,12 +18,17 @@
 #include "qgscomposerlegendwidget.h"
 #include "qgscomposerlegend.h"
 #include "qgscomposerlegenditemdialog.h"
+#include "qgscomposeritemwidget.h"
 #include <QFontDialog>
 
 QgsComposerLegendWidget::QgsComposerLegendWidget(QgsComposerLegend* legend): mLegend(legend)
 {
   setupUi(this);
 
+  //add widget for item properties
+  QgsComposerItemWidget* itemPropertiesWidget = new QgsComposerItemWidget(this, legend);
+  gridLayout->addWidget(itemPropertiesWidget, 2, 0, 1, 1);
+
   if(legend)
     {
       mItemTreeView->setModel(legend->model());
@@ -58,14 +63,6 @@
   mIconLabelSpaceSpinBox->setValue(mLegend->iconLabelSpace());
   mBoxSpaceSpinBox->setValue(mLegend->boxSpace());
 
-  if(mLegend->frame())
-    { 
-      mBoxCheckBox->setCheckState(Qt::Checked);
-    }
-  else
-    {
-      mBoxCheckBox->setCheckState(Qt::Unchecked);
-    }
   blockSignals(false);
 }
 
@@ -175,23 +172,7 @@
     }
 }
 
-void QgsComposerLegendWidget::on_mBoxCheckBox_stateChanged(int state)
-{
-  if(mLegend)
-    {
-      if(state == Qt::Checked)
-	{
-	  mLegend->setFrame(true);
-	}
-      else
-	{
-	  mLegend->setFrame(false);
-	}
-      mLegend->update();
-    }
-}
 
-
 void QgsComposerLegendWidget::on_mBoxSpaceSpinBox_valueChanged(double d)
 {
   if(mLegend)

Modified: branches/advanced_printing_branch/src/app/composer/qgscomposerlegendwidget.h
===================================================================
--- branches/advanced_printing_branch/src/app/composer/qgscomposerlegendwidget.h	2008-08-19 08:36:29 UTC (rev 9074)
+++ branches/advanced_printing_branch/src/app/composer/qgscomposerlegendwidget.h	2008-08-19 20:45:12 UTC (rev 9075)
@@ -45,7 +45,6 @@
   void on_mTitleFontButton_clicked();
   void on_mLayerFontButton_clicked();
   void on_mItemFontButton_clicked();
-  void on_mBoxCheckBox_stateChanged(int state);
   void on_mBoxSpaceSpinBox_valueChanged(double d);
 
   //item manipulation

Modified: branches/advanced_printing_branch/src/ui/CMakeLists.txt
===================================================================
--- branches/advanced_printing_branch/src/ui/CMakeLists.txt	2008-08-19 08:36:29 UTC (rev 9074)
+++ branches/advanced_printing_branch/src/ui/CMakeLists.txt	2008-08-19 20:45:12 UTC (rev 9075)
@@ -10,6 +10,7 @@
   qgscomposerlabelwidgetbase.ui
   qgscomposerlegenditemdialogbase.ui
   qgscomposerlegendwidgetbase.ui
+  qgscomposeritemwidgetbase.ui
   qgscomposermapwidgetbase.ui
   qgscomposerpicturewidgetbase.ui
   qgscomposerscalebarwidgetbase.ui

Added: branches/advanced_printing_branch/src/ui/qgscomposeritemwidgetbase.ui
===================================================================
--- branches/advanced_printing_branch/src/ui/qgscomposeritemwidgetbase.ui	                        (rev 0)
+++ branches/advanced_printing_branch/src/ui/qgscomposeritemwidgetbase.ui	2008-08-19 20:45:12 UTC (rev 9075)
@@ -0,0 +1,84 @@
+<ui version="4.0" >
+ <class>QgsComposerItemWidgetBase</class>
+ <widget class="QWidget" name="QgsComposerItemWidgetBase" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>355</width>
+    <height>203</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QGroupBox" name="mComposerItemPropertiesGroupBox" >
+     <property name="title" >
+      <string>Composer item properties</string>
+     </property>
+     <layout class="QGridLayout" >
+      <item row="0" column="0" >
+       <widget class="QLabel" name="mColorLabel" >
+        <property name="text" >
+         <string>Color:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" colspan="2" >
+       <widget class="QPushButton" name="mFrameColorButton" >
+        <property name="text" >
+         <string>Frame...</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3" >
+       <widget class="QPushButton" name="mBackgroundColorButton" >
+        <property name="text" >
+         <string>Background...</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0" colspan="2" >
+       <widget class="QLabel" name="mOpacityLabel" >
+        <property name="text" >
+         <string>Opacity:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2" colspan="2" >
+       <widget class="QSlider" name="mOpacitySlider" >
+        <property name="maximum" >
+         <number>255</number>
+        </property>
+        <property name="orientation" >
+         <enum>Qt::Horizontal</enum>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0" colspan="2" >
+       <widget class="QLabel" name="mOutlineWidthLabel" >
+        <property name="text" >
+         <string>Outline width: </string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="2" colspan="2" >
+       <widget class="QDoubleSpinBox" name="mOutlineWidthSpinBox" />
+      </item>
+      <item row="3" column="0" colspan="2" >
+       <widget class="QCheckBox" name="mFrameCheckBox" >
+        <property name="text" >
+         <string>Frame</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>

Modified: branches/advanced_printing_branch/src/ui/qgscomposerlegendwidgetbase.ui
===================================================================
--- branches/advanced_printing_branch/src/ui/qgscomposerlegendwidgetbase.ui	2008-08-19 08:36:29 UTC (rev 9074)
+++ branches/advanced_printing_branch/src/ui/qgscomposerlegendwidgetbase.ui	2008-08-19 20:45:12 UTC (rev 9075)
@@ -6,7 +6,7 @@
     <x>0</x>
     <y>0</y>
     <width>496</width>
-    <height>575</height>
+    <height>626</height>
    </rect>
   </property>
   <property name="sizePolicy" >
@@ -134,43 +134,6 @@
          <widget class="QDoubleSpinBox" name="mIconLabelSpaceSpinBox" />
         </item>
         <item>
-         <spacer>
-          <property name="orientation" >
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" >
-           <size>
-            <width>141</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-       </layout>
-      </item>
-      <item row="4" column="0" >
-       <layout class="QHBoxLayout" >
-        <item>
-         <widget class="QCheckBox" name="mBoxCheckBox" >
-          <property name="text" >
-           <string>Box</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer>
-          <property name="orientation" >
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" >
-           <size>
-            <width>131</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
          <widget class="QLabel" name="mBoxSpaceLabel" >
           <property name="text" >
            <string>Box space:</string>
@@ -186,9 +149,9 @@
     </widget>
    </item>
    <item row="1" column="0" >
-    <widget class="QGroupBox" name="mItemsGroupBox" >
+    <widget class="QGroupBox" name="mLegendItemsGroupBox" >
      <property name="title" >
-      <string>Items</string>
+      <string>Legend items</string>
      </property>
      <layout class="QGridLayout" >
       <item row="0" column="0" >



More information about the QGIS-commit mailing list