#pragma once #include "kcontrol.hpp" namespace Hxsoft { namespace XFrame {namespace XOffice {namespace XFlowChart{ //this interface all index param start by one typedef int XFODrawState; #define XFOSELECTION 0x0000 #define XFOLINK 0x0001 #define XFOWORKNODE 0x0002 typedef int XFOState; #define XFONORMAL 0x0000 #define XFOSELECTED 0x0001 #define XFOMOVING 0x0002 #define XFORESIZING 0x0004 #define XFOLINKING 0x0008 #define XFOCREATING 0x0010 #define XFOWORKNODING 0x0020 #define XFOREADONLY 0x1000 #define XFORUNSTATE 0x8000 typedef int XFOHitPosition; #define XFOHITNONE 0x0000 #define XFOHITLEFTTOP 0x0001 #define XFOHITRIGHTTOP 0x0002 #define XFOHITRIGHTBOTTOM 0x0004 #define XFOHITLEFTBOTTOM 0x0008 #define XFOHITTOPCENTER 0x0010 #define XFOHITRIGHTCENTER 0x0020 #define XFOHITBOTTOMCENTER 0x0040 #define XFOHITLEFTCENTER 0x0080 class XFlowChartObject { public: typedef int XFlowChartObjectStatus; public: int LoadObject(KXMLDOMElement pElement); int LoadObjectXml(LPTSTR pStrXml); public: void SetFRect(RECT rect); public: XFOHitPosition GetHitResizePat(POINT pt); public: void InvalidatePatRgn(HWND hWnd, POINT& ptOffset); void HitAdjust(XFOHitPosition htpos, int cx, int cy); public: int TestHotHited(POINT pt, RECT& rc); int DrawHoted(HDC hPaintDC, int nIndex); public: LPTSTR GetCaption(); KXMLDOMElement GetElement(); LPTSTR GetShapeType(); RECT& GetRect(); public: bool SetUrl(LPTSTR pUrl); bool SetCaption(LPTSTR pCaption); LPTSTR GetUrl(); LPTSTR GetGuid(); }; #define FXOLineStyle int #define FXOLINENORMAL 0x0000 #define FXOLINEDIRECT 0x0001 #define FXOLINECURVE 0x0002 #define FXOLINEOWNER 0x0100 class XFlowChartLink { public: int DrawHoted(HDC hPaintDC, int nIndex); public: //int AutoCalcPoints(const vector* rects = NULL); //int AutoCalcPoints(POINT ptStart, int paStart, POINT ptEnd, int paEnd, FXOLineStyle dwLineStyle, const vector* rects, vector* pts); public: //int LoadObject(vector& DrawObjects, KXMLDOMElement pElement); bool IsHoted(int x, int y); public: XFlowChartObject* GetStartObject(); XFlowChartObject* GetEndObject(); }; class IFlowChart :public IXFControl { public: XFlowChartObject* GetSelectedObject(); bool SelectedObject(XFlowChartObject* pObject); public: int GetObjectCount(); XFlowChartObject* GetObjectByIndex(int nIndex); int GetLinkCount(); XFlowChartLink* GetLinkbyIndex(int nIndex); public: bool RemoveObject(XFlowChartObject* pObject, bool bDeletedLink = true); XFlowChartObject* AddObject(LPTSTR pShapeType, LPTSTR pCaption, LPTSTR pUrl = NULL, RECT* pRect = NULL); public: bool SetobjectUrl(XFlowChartObject* pObject, LPTSTR pUrl); bool SetobjectCaption(XFlowChartObject* pObject, LPTSTR pCaption); public: XFlowChartLink* AddLink(XFlowChartObject* pFrom, XFlowChartObject* pTo, bool bDoubleArrow = true); public: XFlowChartObject* GetObjectAt(POINT pt); public: int Save(KXMLDOMElement pElement); int Load(KXMLDOMElement pElement); }; }}}}