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.
237 lines
10 KiB
C++
237 lines
10 KiB
C++
// XTPFlowGraphPaintManager.h: interface for the CXTPFlowGraphPaintManager class.
|
|
//
|
|
// 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
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#if !defined(__XTPFLOWGRAPHPAINTMANAGER_H__)
|
|
#define __XTPFLOWGRAPHPAINTMANAGER_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
class CXTPFlowGraphControl;
|
|
class CXTPFlowGraphDrawContext;
|
|
class CXTPFlowGraphNode;
|
|
class CXTPFlowGraphConnectionPoint;
|
|
class CXTPFlowGraphConnection;
|
|
class CXTPFlowGraphNodeGroup;
|
|
class CXTPFlowGraphElement;
|
|
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
namespace Gdiplus
|
|
{
|
|
class Font;
|
|
};
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
// ------------------------------------------------------------------
|
|
// Summary:
|
|
// Node connector styles.
|
|
// Remarks:
|
|
// The xtpFlowGraphConnectorType specifies the style of the lines
|
|
// that "connect" the connections of a node.
|
|
// See Also:
|
|
// CXTPFlowGraphPaintManager::m_nConnectorType
|
|
// ------------------------------------------------------------------
|
|
enum XTPFlowGraphConnectorType
|
|
{
|
|
xtpFlowGraphConnectorStraight, // Straight line connector.
|
|
xtpFlowGraphConnectorCurved // Curved line connector.
|
|
};
|
|
|
|
|
|
// -------------------------------------------------------------
|
|
//
|
|
// Summary:
|
|
// Handles most of the drawing activities of the Flow Graph.
|
|
// -------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPFlowGraphPaintManager : public CXTPCmdTarget
|
|
{
|
|
public:
|
|
// --------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPFlowGraphPaintManager object.
|
|
// --------------------------------------------------
|
|
CXTPFlowGraphPaintManager();
|
|
// --------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPFlowGraphPaintManager object, handles cleanup and
|
|
// deallocation.
|
|
// --------------------------------------------------------------------
|
|
virtual ~CXTPFlowGraphPaintManager();
|
|
|
|
public:
|
|
// ----------------------------------------------------
|
|
// Summary:
|
|
// Draws the background for the flow graph control.
|
|
// Parameters:
|
|
// pDC : Pointer to a valid device context.
|
|
// pControl : Pointer to the flow graph control.
|
|
// ----------------------------------------------------
|
|
virtual void DrawControlBackground(CXTPFlowGraphDrawContext* pDC, CXTPFlowGraphControl* pControl);
|
|
|
|
// -------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called to refresh the visual metrics of the flow
|
|
// graph.
|
|
// -------------------------------------------------------------------
|
|
virtual void RefreshMetrics();
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Summary:
|
|
// Recalculates the layout of the Node.
|
|
// Remarks:
|
|
// Call this functions to correctly reposition the connections within
|
|
// the node. This also will readjust the layout when the size or
|
|
// caption has changed. It will also handle any color or font
|
|
// changes.
|
|
// ----------------------------------------------------------------------
|
|
virtual void RecalcNodeLayout(CXTPFlowGraphDrawContext* pDC, CXTPFlowGraphNode* pNode);
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Summary:
|
|
// Recalculates the layout of the connection.
|
|
// Remarks:
|
|
// Call this functions to correctly reposition the connection within
|
|
// the node. This will also update any colors, etc that have changed.
|
|
// ----------------------------------------------------------------------
|
|
virtual void RecalcConnectionLayout(CXTPFlowGraphDrawContext* pDC, CXTPFlowGraphConnection* pConnection);
|
|
|
|
|
|
// -----------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called to draw a single Node in the flow graph
|
|
// control.
|
|
// Parameters:
|
|
// pDC : Pointer to a valid device context.
|
|
// pNode : Points to a CXTPFlowGraphNode object to draw.
|
|
// -----------------------------------------------------------------
|
|
virtual void DrawNode(CXTPFlowGraphDrawContext* pDC, CXTPFlowGraphNode* pNode);
|
|
// ----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called to draw a single connection in the flow
|
|
// graph control.
|
|
// Parameters:
|
|
// pDC : Pointer to a valid device context.
|
|
// pConnection : Points to a CXTPFlowGraphConnection object to draw.
|
|
// ----------------------------------------------------------------------
|
|
virtual void DrawConnection(CXTPFlowGraphDrawContext* pDC, CXTPFlowGraphConnection* pConnection);
|
|
|
|
// ------------------------------------------------------------------
|
|
// Summary:
|
|
// Gets the bounding rectangle for the specified node.
|
|
// Parameters:
|
|
// pNode : Reference to the node to get it's bounding rectangle.
|
|
// Returns:
|
|
// The bounding rectangle for the specified node.
|
|
// ------------------------------------------------------------------
|
|
virtual CRect GetNodeBoundingRectangle(CXTPFlowGraphNode* pNode);
|
|
|
|
// --------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called to draw a single node group in the flow
|
|
// graph control.
|
|
// Parameters:
|
|
// pDC : Pointer to a valid device context.
|
|
// pNodeGroup : Points to a CXTPFlowGraphNodeGroup object to draw.
|
|
// --------------------------------------------------------------------
|
|
virtual void DrawNodeGroup(CXTPFlowGraphDrawContext* pDC, CXTPFlowGraphNodeGroup* pNodeGroup);
|
|
|
|
// --------------------------------------------------------------------
|
|
// Summary:
|
|
// Determines if the specified point is within the connection area.
|
|
// Parameters:
|
|
// pPoint : CXTPFlowGraphConnectionPoint to test.
|
|
// point : Point in flow graph to test.
|
|
// Returns:
|
|
// True if the point is located within the connection area, False
|
|
// \otherwise.
|
|
// --------------------------------------------------------------------
|
|
virtual BOOL HitTestConnectionArea(const CXTPFlowGraphConnectionPoint* pPoint, CPoint point);
|
|
|
|
// ------------------------------------------------------------------------
|
|
// Summary:
|
|
// Gets the bounding rectangle for the caption of the specified node.
|
|
// Parameters:
|
|
// pNode : Reference to the element to retrieve the bounding rectangle
|
|
// for the caption.
|
|
// Returns:
|
|
// The bounding rectangle for the caption of the specified node.
|
|
// ------------------------------------------------------------------------
|
|
virtual CRect GetCaptionRect(CXTPFlowGraphElement* pNode);
|
|
|
|
// --------------------------------------------------------------------
|
|
// Summary:
|
|
// Cleans up allocated resources used by the paintmanager that have
|
|
// been allocated during draw routines.
|
|
// --------------------------------------------------------------------
|
|
virtual void Cleanup();
|
|
|
|
protected:
|
|
// ------------------------------------------------------------------
|
|
// Summary:
|
|
// Creates and returns a darker color of the specified color.
|
|
// Parameters:
|
|
// clrBackground : Color to make darker.
|
|
// Remarks:
|
|
// This will take the specified color and make it darker. For
|
|
// \example, it will take blue and make "dark blue". This is also
|
|
// used internally to make the node and group frame colors.
|
|
// Returns:
|
|
// \Returns a darker color of the specified color.
|
|
// ------------------------------------------------------------------
|
|
COLORREF GetDarkColor(COLORREF clrBackground);
|
|
|
|
public:
|
|
COLORREF m_clrBackground; // Specifies the background "canvas" color for the flow graph.
|
|
COLORREF m_clrSelection; // Specifies the color used for selected nodes.
|
|
COLORREF m_clrTextColor; // Specifies the color used for text.
|
|
COLORREF m_clrGridColor; //Specifies the color used for grid lines.
|
|
|
|
COLORREF m_clrNodeBackground; // Gets\sets the background color used for Nodes.
|
|
|
|
LOGFONT m_lfText; // Gets\sets the font used for connection captions.
|
|
LOGFONT m_lfCaption; // Gets\sets the font used for Node captions.
|
|
|
|
int m_nNodeFrameSize; // Gets\sets the size of the border-frame of a node.
|
|
int m_nPointTextMargin; // Specifies the margin to place between a connection's caption text and the connection's connection point (if a connection point is present).
|
|
COLORREF m_clrConnection; // Specifies the color of the connection lines that connect two connection points.
|
|
BOOL m_bDrawArrow; // Specifies whether to draw arrows for connections.
|
|
int m_nEllipseSize; // Specifies the size of Connection Points.
|
|
BOOL m_bShowGrid; // Specifies whether to show the grid for the flow graph.
|
|
|
|
BOOL m_bShowNodeGroupsAlways; // Specifies whether to always show node groups, even if a non-groupped node is selected (or no nodes are selected).
|
|
|
|
XTPFlowGraphConnectorType m_nConnectorType; // Node connector style.
|
|
|
|
double m_dMinZoomLevelBackground; // Specifies the minimum zoom level to stop drawing the background of the flow graph. Default is 20%. Can be used to optimize drawing when a lot of objects are on screen.
|
|
double m_dMinZoomLevelConnectionPoints; // Specifies the minimum zoom level to stop drawing connection points in the flow graph. Default is 30%. Can be used to optimize drawing when a lot of objects are on screen.
|
|
double m_dMinZoomLevelConnections; // Specifies the minimum zoom level to stop drawing connections in the flow graph. Default is 5%. Can be used to optimize drawing when a lot of objects are on screen.
|
|
double m_dMinZoomLevelGDIQuality; // Specifies the minimum zoom level to stop using GDI quality when drawing elements in the flow graph. Default is 40%. Can be used to optimize drawing when a lot of objects are on screen.
|
|
|
|
protected:
|
|
|
|
|
|
};
|
|
|
|
#endif //#if !defined(__XTPFLOWGRAPHPAINTMANAGER_H__)
|