You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/kchart/kdchart/KDChartParams_frame.cpp

289 lines
10 KiB

/* -*- 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 );
}