summaryrefslogtreecommitdiffstats
path: root/libkdchart/KDChartParams_frame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libkdchart/KDChartParams_frame.cpp')
-rw-r--r--libkdchart/KDChartParams_frame.cpp288
1 files changed, 288 insertions, 0 deletions
diff --git a/libkdchart/KDChartParams_frame.cpp b/libkdchart/KDChartParams_frame.cpp
new file mode 100644
index 0000000..c873a0a
--- /dev/null
+++ b/libkdchart/KDChartParams_frame.cpp
@@ -0,0 +1,288 @@
+/* -*- Mode: C++ -*-
+ KDChart - a multi-platform charting engine
+ */
+
+/****************************************************************************
+ ** Copyright (C) 2001-2003 Klarälvdalens Datakonsult AB. All rights reserved.
+ **
+ ** This file is part of the KDChart library.
+ **
+ ** This file may be distributed and/or modified under the terms of the
+ ** GNU General Public License version 2 as published by the Free Software
+ ** Foundation and appearing in the file LICENSE.GPL included in the
+ ** packaging of this file.
+ **
+ ** Licensees holding valid commercial KDChart licenses may use this file in
+ ** accordance with the KDChart Commercial License Agreement provided with
+ ** the Software.
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ** See http://www.klaralvdalens-datakonsult.se/?page=products for
+ ** information about KDChart Commercial License Agreements.
+ **
+ ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
+ ** licensing are not clear to you.
+ **
+ **********************************************************************/
+
+#include "KDChartParams.h"
+#include <KDXMLTools.h>
+
+
+/**
+ \class KDChartParams::KDChartFrameSettings KDChartParams.h
+
+ Stores the frame settings for one of the chart areas:
+ \li frame (consisting of edges, corners, background, shadow)
+ \li distance of frame to inner area
+ \li distance of frame to surrounding parts of the chart
+
+ \sa setSimpleFrame, setFrame, frameSettings
+ */
+
+
+/**
+ Constructor. Setting default values.
+ */
+KDChartParams::KDChartFrameSettings::KDChartFrameSettings()
+{
+ _dataRow = 0;
+ _dataCol = 0;
+ _data3rd = 0;
+ _frame = 0;
+ resetFrame();
+ _outerGapX = 0;
+ _outerGapY = 0;
+ _innerGapX = 0;
+ _innerGapY = 0;
+ _addFrameWidthToLayout = true;
+ _addFrameHeightToLayout = true;
+}
+
+
+/**
+ Constructor.
+
+ \param outerGap Distance between the frame and the surrounding parts of the chart.
+ \param innerGap Distance between the frame and inner area.
+ \param addFrameWidthToLayout If true, shrink inner area so the area AND its frame will occupy
+ the same space of the chart as the area would occupy if no frame were drawn.
+ If false, the frame is drawn around the area without taking care not to override other
+ content of the chart.
+ \param frame The frame settings to be used for this area. The values of this parameter
+ will be copied into a KDFrame object stored internally in this KDChartFrameSettings so
+ it is save to use the same KDFrame object for specifying the settings of more than one area.
+ */
+KDChartParams::KDChartFrameSettings::KDChartFrameSettings(
+ uint dataRow,
+ uint dataCol,
+ uint data3rd,
+ const KDFrame& frame,
+ int outerGapX,
+ int outerGapY,
+ int innerGapX,
+ int innerGapY,
+ bool addFrameWidthToLayout,
+ bool addFrameHeightToLayout )
+ : _dataRow( dataRow ),
+ _dataCol( dataCol ),
+ _data3rd( data3rd ),
+ _frame( 0 ),
+ _outerGapX( outerGapX ),
+ _outerGapY( outerGapY ),
+ _innerGapX( innerGapX ),
+ _innerGapY( innerGapY ),
+ _addFrameWidthToLayout( addFrameWidthToLayout ),
+_addFrameHeightToLayout( addFrameHeightToLayout )
+{
+ resetFrame();
+ KDFrame::deepCopy(*_frame, frame);
+}
+
+
+
+/**
+ Destructor. Only defined to have it virtual.
+ */
+KDChartParams::KDChartFrameSettings::~KDChartFrameSettings()
+{
+ delete _frame;
+}
+
+/**
+ Reads data from a DOM element node that represents a frame
+ settings object and fills a KDChartFrameSettings object
+ with the data.
+
+ \param element the DOM element to read from
+ \param settings the frame settings object to read the data into
+ */
+bool KDChartParams::KDChartFrameSettings::readFrameSettingsNode( const QDomElement& element,
+ KDChartFrameSettings& settings,
+ uint& areaId )
+{
+ bool ok = true;
+ KDFrame tempFrame;
+ int tempId = KDChartEnums::AreaUNKNOWN;
+ int tempDataRow = 0; // these 3 need initialization since they were not
+ int tempDataCol = 0;// existent in previous releases of KDChart
+ int tempData3rd = 0;
+
+ int tempOuterGapX, tempOuterGapY, tempInnerGapX, tempInnerGapY;
+ bool tempAddFrameWidthToLayout, tempAddFrameHeightToLayout;
+ QDomNode node = element.firstChild();
+ while( !node.isNull() ) {
+ QDomElement element = node.toElement();
+ if( !element.isNull() ) { // was really an element
+ QString tagName = element.tagName();
+ if( tagName == "Frame" ) {
+ ok = ok & KDFrame::readFrameNode( element, tempFrame );
+ } else if( tagName == "AreaId" ) {
+ ok = ok & KDXML::readIntNode( element, tempId );
+ } else if( tagName == "DataRow" ) {
+ ok = ok & KDXML::readIntNode( element, tempDataRow );
+ } else if( tagName == "DataCol" ) {
+ ok = ok & KDXML::readIntNode( element, tempDataCol );
+ } else if( tagName == "Data3rd" ) {
+ ok = ok & KDXML::readIntNode( element, tempData3rd );
+ } else if( tagName == "OuterGapX" ) {
+ ok = ok & KDXML::readIntNode( element, tempOuterGapX );
+ } else if( tagName == "OuterGapY" ) {
+ ok = ok & KDXML::readIntNode( element, tempOuterGapY );
+ } else if( tagName == "InnerGapX" ) {
+ ok = ok & KDXML::readIntNode( element, tempInnerGapX );
+ } else if( tagName == "InnerGapY" ) {
+ ok = ok & KDXML::readIntNode( element, tempInnerGapY );
+ } else if( tagName == "AddFrameWidthToLayout" ) {
+ ok = ok & KDXML::readBoolNode( element, tempAddFrameWidthToLayout );
+ } else if( tagName == "AddFrameHeightToLayout" ) {
+ ok = ok & KDXML::readBoolNode( element, tempAddFrameHeightToLayout );
+ } else {
+ qDebug( "Unknown tag in frame settings" );
+ }
+ }
+ node = node.nextSibling();
+ }
+
+ if( ok ) {
+ settings.resetFrame();
+ KDFrame::deepCopy(*settings._frame, tempFrame);
+
+ settings._dataRow = tempDataRow;
+ settings._dataCol = tempDataCol;
+ settings._data3rd = tempData3rd;
+ settings._outerGapX = tempOuterGapX;
+ settings._outerGapY = tempOuterGapY;
+ settings._innerGapX = tempInnerGapX;
+ settings._innerGapY = tempInnerGapY;
+ settings._addFrameWidthToLayout = tempAddFrameWidthToLayout;
+ settings._addFrameHeightToLayout = tempAddFrameHeightToLayout;
+ areaId = tempId;
+ }
+
+ return ok;
+}
+
+
+
+/**
+ \fn const KDFrame& KDChartParams::KDChartFrameSettings::frame() const
+
+ Return the KDFrame object used for drawing this areas frame.
+ */
+
+
+/**
+ \fn int KDChartParams::KDChartFrameSettings::innerGapX() const
+
+ Return the X-distance between the frame and the inner area.
+ */
+
+/**
+ \fn int KDChartParams::KDChartFrameSettings::innerGapY() const
+
+ Return the Y-distance between the frame and the inner area.
+ */
+
+/**
+ \fn int KDChartParams::KDChartFrameSettings::outerGapX() const
+
+ Return the X-distance between the frame and the surrounding parts of the chart.
+ */
+
+/**
+ \fn int KDChartParams::KDChartFrameSettings::outerGapY() const
+
+ Return the Y-distance between the frame and the surrounding parts of the chart.
+ */
+
+/**
+ \fn bool KDChartParams::KDChartFrameSettings::addFrameWidthToLayout() const
+
+ Return whether the inner area will shrink the area AND its frame will occupy
+ the same space of the chart as the area would occupy if no frame were drawn.
+ If false, the frame is drawn around the area without taking care not to override other
+ content of the chart.
+
+ \sa addFrameHeightToLayout
+ */
+
+
+/**
+ \fn bool KDChartParams::KDChartFrameSettings::addFrameHeightToLayout() const
+
+ Return whether the inner area will shrink the area AND its frame will occupy
+ the same space of the chart as the area would occupy if no frame were drawn.
+ If false, the frame is drawn around the area without taking care not to override other
+ content of the chart.
+
+ \sa addFrameWidthToLayout
+ */
+
+
+
+/**
+ Creates a DOM element node that represents a frame settings
+ object for use in a DOM document.
+
+ \param document the DOM document to which the node will belong
+ \param parent the parent node to which the new node will be appended
+ \param elementName the name of the new node
+ \param settings the frame settings to be represented
+ */
+void KDChartParams::KDChartFrameSettings::createFrameSettingsNode( QDomDocument& document,
+ QDomNode& parent,
+ const QString& elementName,
+ const KDChartParams::KDChartFrameSettings* settings,
+ uint areaId )
+{
+ QDomElement frameSettingsElement = document.createElement( elementName );
+ parent.appendChild( frameSettingsElement );
+ if( settings->_frame )
+ KDFrame::createFrameNode( document, frameSettingsElement, "Frame",
+ *settings->_frame );
+ KDXML::createIntNode( document, frameSettingsElement, "AreaId",
+ areaId );
+ KDXML::createIntNode( document, frameSettingsElement, "DataRow",
+ settings->_dataRow );
+ KDXML::createIntNode( document, frameSettingsElement, "DataCol",
+ settings->_dataCol );
+ KDXML::createIntNode( document, frameSettingsElement, "Data3rd",
+ settings->_data3rd );
+ KDXML::createIntNode( document, frameSettingsElement, "OuterGapX",
+ settings->_outerGapX );
+ KDXML::createIntNode( document, frameSettingsElement, "OuterGapY",
+ settings->_outerGapY );
+ KDXML::createIntNode( document, frameSettingsElement, "InnerGapX",
+ settings->_innerGapX );
+ KDXML::createIntNode( document, frameSettingsElement, "InnerGapY",
+ settings->_innerGapY );
+ KDXML::createBoolNode( document, frameSettingsElement,
+ "AddFrameWidthToLayout",
+ settings->_addFrameWidthToLayout );
+ KDXML::createBoolNode( document, frameSettingsElement,
+ "AddFrameHeightToLayout",
+ settings->_addFrameHeightToLayout );
+}