You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

477 lines
13 KiB
C++

2 years ago
// XTPChartAppearance.cpp
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Common/XTPPropExchange.h"
#include "Common/XTPResourceManager.h"
#include "Common/XTPDrawHelpers.h"
#include "../Types/XTPChartTypes.h"
#include "../XTPChartDefines.h"
#include "../XTPChartElement.h"
#include <Chart/XTPChartLegendItem.h>
#include "../XTPChartContent.h"
#include "XTPChartAppearance.h"
#include "XTPChartPalette.h"
#include "XTPChartFillStyle.h"
//////////////////////////////////////////////////////////////////////////
// CXTPChartElementAppearance
CXTPChartElementAppearance::CXTPChartElementAppearance(CXTPChartElement* pOwner)
{
m_pOwner = pOwner;
}
CXTPChartElementAppearance::~CXTPChartElementAppearance()
{
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartAxisAppearance
CXTPChartAxisAppearance::CXTPChartAxisAppearance(CXTPChartElement* pOwner)
: CXTPChartElementAppearance(pOwner)
{
InterlacedFillStyle = new CXTPChartFillStyle(this);
}
CXTPChartAxisAppearance::~CXTPChartAxisAppearance()
{
SAFE_RELEASE(InterlacedFillStyle);
}
void CXTPChartAxisAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
PX_Color(pPX, _T("Color"), Color);
PX_Color(pPX, _T("InterlacedColor"), InterlacedColor);
PX_Color(pPX, _T("InterlacedColor2"), InterlacedColor2);
CXTPPropExchangeSection pxInterlacedFillStyle(pPX->GetSection(_T("InterlacedFillStyle")));
InterlacedFillStyle->DoPropExchange(&pxInterlacedFillStyle);
CXTPPropExchangeSection pxGridLines(pPX->GetSection(_T("GridLines")));
PX_Color(&pxGridLines, _T("Color"), GridLinesColor);
PX_Color(&pxGridLines, _T("MinorColor"), GridLinesMinorColor);
CXTPPropExchangeSection pxAxisLabel(pPX->GetSection(_T("AxisLabel")));
PX_Color(&pxAxisLabel, _T("TextColor"), AxisLabelTextColor);
CXTPPropExchangeSection pxAxisTitle(pPX->GetSection(_T("AxisTitle")));
PX_Color(&pxAxisTitle, _T("TextColor"), AxisTitleTextColor);
CXTPPropExchangeSection pxAxisConstantLine(pPX->GetSection(_T("ConstantLine")));
PX_Color(&pxAxisConstantLine, _T("Color"), ConstantLineColor);
PX_Color(&pxAxisConstantLine, _T("TextColor"), ConstantLineTextColor);
CXTPPropExchangeSection pxAxisStrip(pPX->GetSection(_T("Strip")));
PX_Color(&pxAxisStrip, _T("Color"), StripColor);
PX_Color(&pxAxisStrip, _T("Color2"), StripColor2);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartDiagram2DAppearance
CXTPChartDiagram2DAppearance::CXTPChartDiagram2DAppearance(CXTPChartElement* pOwner)
: CXTPChartElementAppearance(pOwner)
{
m_pAxisAppearance = new CXTPChartAxisAppearance(this);
BackgroundFillStyle = new CXTPChartFillStyle(this);
}
CXTPChartDiagram2DAppearance::~CXTPChartDiagram2DAppearance()
{
SAFE_RELEASE(m_pAxisAppearance);
SAFE_RELEASE(BackgroundFillStyle);
}
void CXTPChartDiagram2DAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
PX_Color(pPX, _T("BackgroundColor"), BackgroundColor);
PX_Color(pPX, _T("BackgroundColor2"), BackgroundColor2);
PX_Color(pPX, _T("BorderColor"), BorderColor);
CXTPPropExchangeSection pxBackgroundFillStyle(pPX->GetSection(_T("BackgroundFillStyle")));
BackgroundFillStyle->DoPropExchange(&pxBackgroundFillStyle);
CXTPPropExchangeSection pxAxis(pPX->GetSection(_T("Axis")));
m_pAxisAppearance->DoPropExchange(&pxAxis);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartSeriesLabelAppearance
CXTPChartSeriesLabelAppearance::CXTPChartSeriesLabelAppearance(CXTPChartElement* pOwner)
: CXTPChartElementAppearance(pOwner)
{
}
CXTPChartSeriesLabelAppearance::~CXTPChartSeriesLabelAppearance()
{
}
void CXTPChartSeriesLabelAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
PX_Color(pPX, _T("BackgroundColor"), BackgroundColor);
PX_Color(pPX, _T("TextColor"), TextColor);
PX_Color(pPX, _T("BorderColor"), BorderColor);
PX_Color(pPX, _T("ConnectorColor"), ConnectorColor);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartSeriesStyleAppearance
CXTPChartSeriesStyleAppearance::CXTPChartSeriesStyleAppearance(CXTPChartElement* pOwner)
: CXTPChartElementAppearance(pOwner)
{
m_pLabelAppearance = new CXTPChartSeriesLabelAppearance(this);
}
CXTPChartSeriesStyleAppearance::~CXTPChartSeriesStyleAppearance()
{
SAFE_RELEASE(m_pLabelAppearance);
}
void CXTPChartSeriesStyleAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
CXTPPropExchangeSection pxTitle(pPX->GetSection(_T("Label")));
m_pLabelAppearance->DoPropExchange(&pxTitle);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartFinanceStyleAppearance
CXTPChartFinanceStyleAppearance::CXTPChartFinanceStyleAppearance(CXTPChartElement* pOwner)
: CXTPChartSeriesStyleAppearance(pOwner)
{
}
CXTPChartFinanceStyleAppearance::~CXTPChartFinanceStyleAppearance()
{
}
void CXTPChartFinanceStyleAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
CXTPChartSeriesStyleAppearance::DoPropExchange(pPX);
PX_Color(pPX, _T("UpColor"), UpColor);
PX_Color(pPX, _T("DownColor"), DownColor);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartPieStyleAppearance
CXTPChartPieStyleAppearance::CXTPChartPieStyleAppearance(CXTPChartElement* pOwner)
: CXTPChartSeriesStyleAppearance(pOwner)
{
}
CXTPChartPieStyleAppearance::~CXTPChartPieStyleAppearance()
{
}
void CXTPChartPieStyleAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
CXTPChartSeriesStyleAppearance::DoPropExchange(pPX);
PX_Color(pPX, _T("BorderColor"), BorderColor);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartTitleAppearance
CXTPChartTitleAppearance::CXTPChartTitleAppearance(CXTPChartElement* pOwner)
: CXTPChartElementAppearance(pOwner)
{
}
void CXTPChartTitleAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
PX_Color(pPX, _T("TextColor"), TextColor);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartLegendAppearance
CXTPChartLegendAppearance::CXTPChartLegendAppearance(CXTPChartElement* pOwner)
: CXTPChartElementAppearance(pOwner)
{
}
void CXTPChartLegendAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
PX_Color(pPX, _T("TextColor"), TextColor);
PX_Color(pPX, _T("BackgroundColor"), BackgroundColor);
PX_Color(pPX, _T("BorderColor"), BorderColor);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartContentAppearance
CXTPChartContentAppearance::CXTPChartContentAppearance(CXTPChartElement* pOwner)
: CXTPChartElementAppearance(pOwner)
{
m_pTitleAppearance = new CXTPChartTitleAppearance(this);
m_pLegendAppearance = new CXTPChartLegendAppearance(this);
}
CXTPChartContentAppearance::~CXTPChartContentAppearance()
{
SAFE_RELEASE(m_pLegendAppearance);
SAFE_RELEASE(m_pTitleAppearance);
}
void CXTPChartContentAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
PX_Color(pPX, _T("BackgroundColor"), BackgroundColor);
PX_Color(pPX, _T("BorderColor"), BorderColor);
CXTPPropExchangeSection pxTitle(pPX->GetSection(_T("ChartTitle")));
m_pTitleAppearance->DoPropExchange(&pxTitle);
CXTPPropExchangeSection pxLegend(pPX->GetSection(_T("Legend")));
m_pLegendAppearance->DoPropExchange(&pxLegend);
}
//////////////////////////////////////////////////////////////////////////
// CXTPChartAppearance
CXTPChartAppearance::CXTPChartAppearance(CXTPChartElement* pOwner)
: CXTPChartElementAppearance(pOwner)
{
m_pDiagram2DAppearance = new CXTPChartDiagram2DAppearance(this);
m_pContentAppearance = new CXTPChartContentAppearance(this);
m_pSeriesStyleAppearance = new CXTPChartSeriesStyleAppearance(this);
m_pFinanceStyleAppearance = new CXTPChartFinanceStyleAppearance(this);
m_pPieStyleAppearance = new CXTPChartPieStyleAppearance(this);
m_pPalette = new CXTPChartPalette(this);
// load default colors.
VERIFY(LoadAppearance(_T("CHART_APPEARANCE_NATURE")));
VERIFY(LoadPalette(_T("CHART_PALETTE_NATURE")));
#ifdef _XTP_ACTIVEX
EnableAutomation();
EnableTypeLib();
#endif
}
CXTPChartAppearance::~CXTPChartAppearance()
{
SAFE_RELEASE(m_pDiagram2DAppearance);
SAFE_RELEASE(m_pContentAppearance);
SAFE_RELEASE(m_pSeriesStyleAppearance);
SAFE_RELEASE(m_pFinanceStyleAppearance);
SAFE_RELEASE(m_pPieStyleAppearance);
SAFE_RELEASE(m_pPalette);
}
void CXTPChartAppearance::DoPropExchange(CXTPPropExchange* pPX)
{
CXTPPropExchangeSection pxContent(pPX->GetSection(_T("Content")));
m_pContentAppearance->DoPropExchange(&pxContent);
CXTPPropExchangeSection pxDiagram2D(pPX->GetSection(_T("Diagram2D")));
m_pDiagram2DAppearance->DoPropExchange(&pxDiagram2D);
CXTPPropExchangeSection pxSeriesStyleAppearance(pPX->GetSection(_T("SeriesStyle")));
m_pSeriesStyleAppearance->DoPropExchange(&pxSeriesStyleAppearance);
CXTPPropExchangeSection pxFinanceSeriesAppearance(pPX->GetSection(_T("FinanceSeriesStyle")));
m_pFinanceStyleAppearance->DoPropExchange(&pxFinanceSeriesAppearance);
CXTPPropExchangeSection pxPieSeriesAppearance(pPX->GetSection(_T("PieSeriesStyle")));
m_pPieStyleAppearance->DoPropExchange(&pxPieSeriesAppearance);
}
BOOL CXTPChartAppearance::LoadAppearance(LPCTSTR lpszAppearance)
{
CXTPPropExchangeXMLNode px(TRUE, NULL, _T("Appearance"));
HMODULE hInstance = NULL;
HRSRC hResource = XTPResourceManager()->FindResource(hInstance, lpszAppearance, RT_HTML);
if (!hResource)
return FALSE;
if (!px.LoadFromResource(hInstance, lpszAppearance , RT_HTML))
return FALSE;
if (!px.OnBeforeExchange())
return FALSE;
px.SetCompactMode(TRUE);
DoPropExchange(&px);
OnChartChanged();
return TRUE;
}
BOOL CXTPChartAppearance::LoadPalette(LPCTSTR lpszPallete)
{
CXTPPropExchangeXMLNode px(TRUE, NULL, _T("Palette"));
HMODULE hInstance = NULL;
HRSRC hResource = XTPResourceManager()->FindResource(hInstance, lpszPallete, RT_HTML);
if (!hResource)
return FALSE;
if (!px.LoadFromResource(hInstance, lpszPallete, RT_HTML))
return FALSE;
if (!px.OnBeforeExchange())
return FALSE;
px.SetCompactMode(TRUE);
m_pPalette->DoPropExchange(&px);
OnChartChanged();
return TRUE;
}
CXTPChartAppearance* CXTPChartAppearance::GetAppearance(const CXTPChartElement* pElement)
{
return pElement->GetContent()->GetAppearance();
}
CXTPChartColor CXTPChartAppearance::GetLightColor(const CXTPChartColor& clr)
{
COLORREF clrBackground = RGB(clr.GetR(), clr.GetG(), clr.GetB());
DWORD dwHSLBackground = CXTPDrawHelpers::RGBtoHSL(clrBackground);
DWORD dwL = GetBValue(dwHSLBackground);
DWORD dwLight = (dwL + 240) / 2;
CXTPChartColor res;
res.SetFromCOLORREF(CXTPDrawHelpers::HSLtoRGB(RGB(GetRValue(dwHSLBackground), GetGValue(dwHSLBackground), dwLight)));
return res;
}
#ifdef _XTP_ACTIVEX
BEGIN_DISPATCH_MAP(CXTPChartAppearance, CXTPChartElementAppearance)
DISP_FUNCTION_ID(CXTPChartAppearance, "SetAppearance", 1, OleSetAppearance, VT_EMPTY, VTS_BSTR)
DISP_FUNCTION_ID(CXTPChartAppearance, "SetPalette", 2, OleSetPalette, VT_EMPTY, VTS_BSTR)
DISP_FUNCTION_ID(CXTPChartAppearance, "LoadAppearance", 3, OleLoadAppearance, VT_EMPTY, VTS_DISPATCH)
DISP_FUNCTION_ID(CXTPChartAppearance, "LoadPalette", 4, OleLoadPalette, VT_EMPTY, VTS_DISPATCH)
DISP_PROPERTY_EX_ID(CXTPChartAppearance, "Palette", 5, OleGetPalette, SetNotSupported, VT_DISPATCH)
END_DISPATCH_MAP()
// {455BCC77-27BF-4cb1-9ABF-4558D9835223}
static const GUID IID_IChartAppearance =
{ 0x455bcc77, 0x27bf, 0x4cb1, { 0x9a, 0xbf, 0x45, 0x58, 0xd9, 0x83, 0x52, 0x23 } };
BEGIN_INTERFACE_MAP(CXTPChartAppearance, CXTPChartElementAppearance)
INTERFACE_PART(CXTPChartAppearance, IID_IChartAppearance, Dispatch)
END_INTERFACE_MAP()
IMPLEMENT_OLETYPELIB_EX(CXTPChartAppearance, IID_IChartAppearance)
void CXTPChartAppearance::OleSetAppearance(LPCTSTR lpszName)
{
CString str(lpszName);
str.MakeUpper();
str.Replace(_T(" "), _T(""));
LoadAppearance(_T("CHART_APPEARANCE_") + str);
}
void CXTPChartAppearance::OleSetPalette(LPCTSTR lpszName)
{
CString str(lpszName);
str.MakeUpper();
str.Replace(_T(" "), _T(""));
LoadPalette(_T("CHART_PALETTE_") + str);
}
void CXTPChartAppearance::OleLoadAppearance(LPDISPATCH lpPropExchage)
{
CXTPPropExchangeSection px(PropExchangeFromControl(lpPropExchage));
if ((CXTPPropExchange*)&px == NULL)
return;
if (px->OnBeforeExchange())
{
if (px->IsKindOf(RUNTIME_CLASS(CXTPPropExchangeXMLNode)))
((CXTPPropExchangeXMLNode*)&px)->SetCompactMode(TRUE);
DoPropExchange(&px);
OnChartChanged();
}
}
void CXTPChartAppearance::OleLoadPalette(LPDISPATCH lpPropExchage)
{
CXTPPropExchangeSection px(PropExchangeFromControl(lpPropExchage));
if ((CXTPPropExchange*)&px == NULL)
return;
if (px->OnBeforeExchange())
{
if (px->IsKindOf(RUNTIME_CLASS(CXTPPropExchangeXMLNode)))
((CXTPPropExchangeXMLNode*)&px)->SetCompactMode(TRUE);
m_pPalette->DoPropExchange(&px);
OnChartChanged();
}
}
LPDISPATCH CXTPChartAppearance::OleGetPalette()
{
return XTPGetDispatch(GetPalette());
}
#endif