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.
968 lines
38 KiB
C
968 lines
38 KiB
C
2 years ago
|
// XTPFlowGraphControl.h: interface for the CXTPFlowGraphControl 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(__XTPFLOWGRAPHCONTROL_H__)
|
||
|
#define __XTPFLOWGRAPHCONTROL_H__
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif // _MSC_VER > 1000
|
||
|
|
||
|
class CXTPFlowGraphPaintManager;
|
||
|
class CXTPFlowGraphPage;
|
||
|
class CXTPFlowGraphPages;
|
||
|
class CXTPFlowGraphDrawContext;
|
||
|
class CXTPFlowGraphNode;
|
||
|
class CXTPPropExchange;
|
||
|
class CXTPFlowGraphSelectedElements;
|
||
|
class CXTPFlowGraphConnection;
|
||
|
class CXTPFlowGraphElement;
|
||
|
class CXTPFlowGraphConnectionPoint;
|
||
|
class CXTPFlowGraphUndoManager;
|
||
|
class CXTPFlowGraphImages;
|
||
|
class CXTPToolTipContext;
|
||
|
class CXTPFlowGraphPageHistory;
|
||
|
class CXTPMarkupContext;
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Node resizing options (drag\\drop size of nodes).
|
||
|
// Remarks:
|
||
|
// To resize a node you must click the border of the node and drag it
|
||
|
// to the desired width\\height.
|
||
|
//
|
||
|
// Set AllowResizeNodes to True to enable resizable nodes. You can
|
||
|
// set the Lock property of a single node if you don't want it moved
|
||
|
// and resized.
|
||
|
// See Also:
|
||
|
// CXTPFlowGraphControl::SetAllowResizeNodes@XTPFlowGraphResize
|
||
|
// ----------------------------------------------------------------------
|
||
|
enum XTPFlowGraphResize
|
||
|
{
|
||
|
xtpFlowGraphResizeNone = 0,
|
||
|
xtpFlowGraphResizeHorizontal = 1, // Nodes can be resized Horizontally only.
|
||
|
xtpFlowGraphResizeVertical = 2, // Nodes can be resized Vertically only.
|
||
|
xtpFlowGraphResizeBoth = 3 // Nodes can be resized both Vertically and Horizontally.
|
||
|
};
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Draw quality options for the Flow Graph.
|
||
|
// Remarks:
|
||
|
// Set SmoothingMode to the setting that best matches your systems
|
||
|
// capabilities.
|
||
|
//
|
||
|
// These option greatly effect the performance of the control and
|
||
|
// will in part be effected by the graphics capability of the machine
|
||
|
// that uses the control. xtpFlowGraphSmoothingModeHighQuality is
|
||
|
// recommended when you don't intend the nodes to be dragged by the
|
||
|
// user, if dragging is enabled then this setting is most effected by
|
||
|
// the systems graphic capabilities.
|
||
|
// See Also:
|
||
|
// CXTPFlowGraphControl::SetSmoothingMode@XTPFlowGraphSmoothingMode
|
||
|
// ----------------------------------------------------------------------
|
||
|
enum XTPFlowGraphSmoothingMode
|
||
|
{
|
||
|
xtpFlowGraphSmoothingModeHighQuality, // Uses GDI+ to draw the Flow Graph for the highest quality picture. This option looks the best, but might be slow when performing drag operations on lower end graphic cards.
|
||
|
xtpFlowGraphSmoothingModeHighSpeed, // Uses GDI+ to draw the Flow Graph with slightly lower quality to improve speed over the High Quality option.
|
||
|
xtpFlowGraphSmoothingModeGDI, // Uses GDI Standard to draw the Flow Graph. Performance will be good on lower end graphic cards, however the quality does not look as good as the GDI+ options.
|
||
|
xtpFlowGraphSmoothingModeAuto, // Will combine the various quality modes to get the best performance and quality. It will draw with a higher quality mode for viewing then switch to a lower quality mode when performing drag operations.
|
||
|
};
|
||
|
|
||
|
// ------------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Flow Graph Control. Used to display relationship graphs.
|
||
|
// Remarks:
|
||
|
// The Flow Graph Control is used to display relationship graphs. This
|
||
|
// can be thought of as a relationship diagram commonly used to
|
||
|
// display the relationships for a relational database.
|
||
|
//
|
||
|
// The control consists of "Nodes" that can be thought of as tables
|
||
|
// in a database. The Nodes contain "connections" (fields of a
|
||
|
// table). The connections can have many "connection points" that can
|
||
|
// be used to link the connections between different nodes (i.e.
|
||
|
// linking an invoice table to a customer table via a connection).
|
||
|
//
|
||
|
// Nodes and connection lines can be dragged around the graph
|
||
|
// allowing the user to fully customize the look of their
|
||
|
// relationship diagram.
|
||
|
//
|
||
|
// The control also supports undo\\redo edit operations in the case
|
||
|
// you allow the nodes to be moved, renamed, connections
|
||
|
// added\\removed, etc.
|
||
|
//
|
||
|
// Several different zoom navigation functions allow the control to
|
||
|
// zoom to a specific node, zoom to a range of nodes, zoom to
|
||
|
// selection and fit ti the window.
|
||
|
//
|
||
|
// Page transitions can be used to transition from one database to
|
||
|
// another.
|
||
|
//
|
||
|
//
|
||
|
// ------------------------------------------------------------------------
|
||
|
class _XTP_EXT_CLASS CXTPFlowGraphControl : public CWnd
|
||
|
{
|
||
|
public:
|
||
|
// ---------------------------------------------
|
||
|
// Summary:
|
||
|
// Constructs a CXTPFlowGraphControl object.
|
||
|
// ---------------------------------------------
|
||
|
CXTPFlowGraphControl();
|
||
|
// ---------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Destroys a CXTPFlowGraphControl object, handles cleanup and
|
||
|
// deallocation.
|
||
|
// ---------------------------------------------------------------
|
||
|
virtual ~CXTPFlowGraphControl();
|
||
|
|
||
|
public:
|
||
|
// ---------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Sets the Active Page.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// The flow graph can contain many pages the each have their own set
|
||
|
// \of nodes\\connections. ActivePage will return a reference to the
|
||
|
// page currently in view. Note only one page can be viewed at a
|
||
|
// time.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// pPage : Reference to the page to make active.
|
||
|
// ---------------------------------------------------------------------
|
||
|
void SetActivePage(CXTPFlowGraphPage* pPage);
|
||
|
// ----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Collection of all pages in the flow graph.
|
||
|
// Remarks:
|
||
|
// A page is what contains all the elements in the flow graph. The
|
||
|
// flow graph can contain many pages, each of which can contain
|
||
|
// nodes, node groups and connections. A page is the first thing that
|
||
|
// you must add to the flow graph, then you can add elements to the
|
||
|
// pages.
|
||
|
// Returns:
|
||
|
// Reference to the collection of all pages in the flow graph.
|
||
|
// ----------------------------------------------------------------------
|
||
|
CXTPFlowGraphPages* GetPages() const;
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method is called whenever the flow graph or any of its
|
||
|
// elements have changed.
|
||
|
// Remarks:
|
||
|
// For example, this is called when the page zoom level, page scroll
|
||
|
// \offset, window\\node size, window handle, node style, node color,
|
||
|
// \or connection style is changed.
|
||
|
// ----------------------------------------------------------------------
|
||
|
virtual void OnGraphChanged();
|
||
|
|
||
|
public:
|
||
|
// -------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// \Returns the FlowGraphPaintManager object used for drawing the
|
||
|
// flow graph.
|
||
|
// Remarks:
|
||
|
// The paintmanager holds many properties to change the various
|
||
|
// colors and other visual properties used in the flow graph.
|
||
|
//
|
||
|
// Returns:
|
||
|
// \Returns the FlowGraphPaintManager object used for drawing the
|
||
|
// flow graph.
|
||
|
// -------------------------------------------------------------------
|
||
|
CXTPFlowGraphPaintManager* GetPaintManager() const;
|
||
|
// ---------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Sets the FlowGraphPaintManager object used for drawing the flow
|
||
|
// graph.
|
||
|
// Remarks:
|
||
|
// The paintmanager holds many properties to change the various
|
||
|
// colors and other visual properties used in the flow graph.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// pPaintManager : Reference to the FlowGraphPaintManager object to
|
||
|
// use for drawing the flow graph.
|
||
|
// ---------------------------------------------------------------------
|
||
|
void SetPaintManager(CXTPFlowGraphPaintManager* pPaintManager);
|
||
|
|
||
|
// ------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Reference to all the images that the flow graph can use.
|
||
|
// Remarks:
|
||
|
// Use this to manage all images for the flow graph.
|
||
|
// Returns:
|
||
|
// Reference to all the images that the flow graph can use.
|
||
|
// ------------------------------------------------------------
|
||
|
CXTPFlowGraphImages* GetImages() const;
|
||
|
|
||
|
public:
|
||
|
// ---------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Exchanges layout and state information to\\from a PropExchange
|
||
|
// \object.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// The PropExchange object provides a universal solution to save the
|
||
|
// layout and state of the Flow Graph to a single file or the system
|
||
|
// registry with support to write/load directly to/from a file or
|
||
|
// registry.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// pPX : PropExhange object to exchange data with.
|
||
|
// ---------------------------------------------------------------------
|
||
|
virtual void DoPropExchange(CXTPPropExchange* pPX);
|
||
|
|
||
|
public:
|
||
|
// ---------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Called by the framework to draw the Flow Graph control.
|
||
|
// Parameters:
|
||
|
// pDC : Pointer to a valid device context.
|
||
|
// Remarks:
|
||
|
// This will redraw the control's background and call OnDraw for the
|
||
|
// active page.
|
||
|
// ---------------------------------------------------------------------
|
||
|
virtual void OnDraw(CXTPFlowGraphDrawContext* pDC);
|
||
|
// ------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Updates the position of elements in the graph.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// Call this method after applying changes in code that require a
|
||
|
// reposition of elements of the flow graph, like adding nodes,
|
||
|
// etc...
|
||
|
//
|
||
|
// ------------------------------------------------------------------
|
||
|
virtual void Reposition();
|
||
|
// ------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Redraws the control.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// Call this method after applying changes in code that require a
|
||
|
// visual redraw such as color, etc...
|
||
|
//
|
||
|
// ------------------------------------------------------------------
|
||
|
virtual void RedrawControl();
|
||
|
|
||
|
// ---------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Reference to the currently active page.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// The flow graph can contain many pages the each have their own set
|
||
|
// \of nodes\\connections. ActivePage will return a reference to the
|
||
|
// page currently in view. Note only one page can be viewed at a
|
||
|
// time.
|
||
|
//
|
||
|
// Returns:
|
||
|
// Reference to the currently active page.
|
||
|
// ---------------------------------------------------------------------
|
||
|
CXTPFlowGraphPage* GetActivePage() const;
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Gets an Object that keeps track of page history and allows the
|
||
|
// \history to be navigated.
|
||
|
//
|
||
|
// Returns:
|
||
|
// \Returns a FlowGraphPageHistory object used to navigate the
|
||
|
// \history of the pages.
|
||
|
// ------------------------------------------------------------------
|
||
|
CXTPFlowGraphPageHistory* GetHistory() const;
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Gets the manager used to Undo and Redo edit operations in the Flow
|
||
|
// Graph.
|
||
|
// Remarks:
|
||
|
// The FlowGraphUndoManager allows certain edit operations to be
|
||
|
// undone and re-done in the Flow Graph. Supported operations are
|
||
|
// Add/Remove/Move/Resize Nodes/Move Connector Lines/Rename
|
||
|
// Nodes/Grouping. If any of these operations are performed they can
|
||
|
// easily be undone\\re-done using the methods of the
|
||
|
// FlowGraphUndoManager.
|
||
|
//
|
||
|
// StartGroup and EndGroup are used to "group" a set of "undoable"
|
||
|
// \operations together. Grouping the operations together is useful
|
||
|
// as grouped operations can be Undone or Re-done with a single call
|
||
|
// to Undo or Redo. If the operations are not grouped you would have
|
||
|
// to call Undo or Redo for each operation performed.
|
||
|
//
|
||
|
// Any "undoable" operations performed between StartGroup and
|
||
|
// EndGroup will be undone\\re-done with a single call to Undo or
|
||
|
// Redo.
|
||
|
//
|
||
|
// Returns:
|
||
|
// Reference to the FlowGraphUndoManager.
|
||
|
// ----------------------------------------------------------------------
|
||
|
CXTPFlowGraphUndoManager* GetUndoManager() const;
|
||
|
|
||
|
// --------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Register the window class if it has not already been registered.
|
||
|
// Parameters:
|
||
|
// hInstance : Instance of resource where control is located.
|
||
|
// Returns:
|
||
|
// TRUE if the window class was successfully registered.
|
||
|
// --------------------------------------------------------------------
|
||
|
BOOL RegisterWindowClass(HINSTANCE hInstance = NULL);
|
||
|
// --------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to create a flow graph control.
|
||
|
// Parameters:
|
||
|
// dwStyle : Styles to use.
|
||
|
// rect : Specifies the size and position of the item.
|
||
|
// pParentWnd : Pointer to the parent window.
|
||
|
// nID : Id to use for this control.
|
||
|
// --------------------------------------------------------------
|
||
|
BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
|
||
|
|
||
|
public:
|
||
|
// -----------------------------------------------
|
||
|
// Summary:
|
||
|
// Gets the current zoom level of the control.
|
||
|
// Remarks:
|
||
|
// 0.0 is 0 zoom and 1.0 is 100% zoom.
|
||
|
// Returns:
|
||
|
// The current zoom level of the control.
|
||
|
// -----------------------------------------------
|
||
|
double GetZoomLevel() const;
|
||
|
// -----------------------------------------------
|
||
|
// Summary:
|
||
|
// Sets the current zoom level of the control.
|
||
|
// Parameters:
|
||
|
// dZoomLevel : New zoom level to use.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// 0.0 is 0 zoom and 1.0 is 100% zoom.
|
||
|
// -----------------------------------------------
|
||
|
void SetZoomLevel(double dZoomLevel);
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Gets the scroll offset (how much the page has been scrolled). This
|
||
|
// \returns the X/Y coordinates - left/right offset.
|
||
|
// Returns:
|
||
|
// The scroll offset (how much the page has been scrolled). This
|
||
|
// \returns a point that contains the X/Y coordinates - left/right
|
||
|
// \offset.
|
||
|
// ----------------------------------------------------------------------
|
||
|
CPoint GetScrollOffset() const;
|
||
|
|
||
|
// ---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Call this to set the minimum and maximum zoom percentages that are
|
||
|
// allowed when using the various zoom methods.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// By default there is no zoom restriction. 0.0 is 0 and 1.0 is 100%.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// dMinZoom : Minimum zoom value (0.0 \- 1.0)
|
||
|
// dMaxZoom : Maximum zoom value (0.0 \- 1.0)
|
||
|
// ---------------------------------------------------------------------------
|
||
|
void SetZoomRange(double dMinZoom, double dMaxZoom);
|
||
|
|
||
|
// -------------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Zooms to the currently selected nodes.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// This will fill the entire view the the currently selected nodes.
|
||
|
//
|
||
|
//
|
||
|
// -------------------------------------------------------------------------
|
||
|
virtual void ZoomToSelection();
|
||
|
// ------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Fits all the nodes in the active page to the window.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// The contents of the active page will zoom in or out to fit all
|
||
|
// content to the full size of the page.
|
||
|
//
|
||
|
// ------------------------------------------------------------------
|
||
|
virtual void ZoomFitToWindow();
|
||
|
// ----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Zooms the view to a specific set of coordinates on the active
|
||
|
// page.
|
||
|
//
|
||
|
//
|
||
|
// Remarks:
|
||
|
// This will zoom the view to the specified coordinates.
|
||
|
//
|
||
|
//
|
||
|
// Parameters:
|
||
|
// lpRect : Specifies the coordinates of the rectangle to zoom to.
|
||
|
// bAnimate : True to use animation wile zooming.
|
||
|
// ----------------------------------------------------------------------
|
||
|
virtual void ZoomToRect(LPCRECT lpRect, BOOL bAnimate = TRUE);
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to use animation to scroll to the specified
|
||
|
// \offset in the control.
|
||
|
// Parameters:
|
||
|
// ptScrollOffset : A point that represents the offset to scroll
|
||
|
// to.
|
||
|
// dZoomLevel : Level of zoom to use.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// 0.0 is 0 zoom and 1.0 is 100% zoom.
|
||
|
// ------------------------------------------------------------------
|
||
|
virtual void AnimateTo(CPoint ptScrollOffset, double dZoomLevel);
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method will transition from a node on one page to a node on
|
||
|
// another page.
|
||
|
// Parameters:
|
||
|
// pNodeFrom : Reference to a node on the current page to transition
|
||
|
// from.
|
||
|
// pNodeTo : Reference to a node on a different page to transition
|
||
|
// to.
|
||
|
// Remarks:
|
||
|
// AnimatePageTransition will transition from a node on the current
|
||
|
// page to a node on a different page. This will cause the active
|
||
|
// page to change to the page that contains the transitioned to node.
|
||
|
// ----------------------------------------------------------------------
|
||
|
virtual void AnimatePageTransition(CXTPFlowGraphNode* pNodeFrom, CXTPFlowGraphNode* pNodeTo);
|
||
|
|
||
|
// -----------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Sets the delay between animation steps when animation is used
|
||
|
// (zooming\\scrolling).
|
||
|
// Parameters:
|
||
|
// nDelay : Delay between animation steps to use.
|
||
|
// -----------------------------------------------------------------
|
||
|
void SetAnimationDelay(int nDelay);
|
||
|
// -----------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Gets the delay between animation steps when animation is used
|
||
|
// (zooming\\scrolling).
|
||
|
// Returns:
|
||
|
// The animation delay.
|
||
|
// -----------------------------------------------------------------
|
||
|
int GetAnimationDelay() const;
|
||
|
|
||
|
public:
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Specifies whether the user can drag\\move nodes.
|
||
|
// Parameters:
|
||
|
// bAllow : True to allow nodes to be moved, False to lock them.
|
||
|
// ------------------------------------------------------------------
|
||
|
void SetAllowMoveNodes(BOOL bAllow);
|
||
|
// --------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Gets whether the user can drag\\move nodes.
|
||
|
// Returns:
|
||
|
// True if nodes are allowed to be moved, False if they are locked.
|
||
|
// --------------------------------------------------------------------
|
||
|
BOOL GetAllowMoveNodes() const;
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Sets Node resizing options (drag\\drop size of nodes).
|
||
|
// Remarks:
|
||
|
// To resize a node you must click the border of the node and drag it
|
||
|
// to the desired width\\height.
|
||
|
//
|
||
|
// Set to True to enable resizable nodes. You can set the Lock
|
||
|
// property of a single node if you don't want it moved and resized.
|
||
|
// Parameters:
|
||
|
// bAllow : True to allow, False to lock.
|
||
|
//
|
||
|
// ----------------------------------------------------------------------
|
||
|
void SetAllowResizeNodes(XTPFlowGraphResize bAllow);
|
||
|
// ----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Gets the Node resizing options (drag\\drop size of nodes).
|
||
|
// Remarks:
|
||
|
// To resize a node you must click the border of the node and drag it
|
||
|
// to the desired width\\height.
|
||
|
// Returns:
|
||
|
// Current resizing options.
|
||
|
// ----------------------------------------------------------------------
|
||
|
XTPFlowGraphResize GetAllowResizeNodes() const;
|
||
|
|
||
|
// -------------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Specifies whether the user can drag\\move\\add\\delete
|
||
|
// connections.
|
||
|
// Parameters:
|
||
|
// bAllowModifyConnections : True to allow the user to
|
||
|
// drag\\move\\add\\delete connections. False
|
||
|
// to lock them.
|
||
|
//
|
||
|
// Returns:
|
||
|
// True if the user is allowed to drag\\move\\add\\delete
|
||
|
// connections. False if they are locked.
|
||
|
//
|
||
|
//
|
||
|
// -------------------------------------------------------------------------
|
||
|
void SetAllowModifyConnections(BOOL bAllowModifyConnections);
|
||
|
// ---------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Gets whether the user is allowed to drag\\move\\add\\delete
|
||
|
// connections.
|
||
|
// Returns:
|
||
|
// True if the user is allowed to drag\\move\\add\\delete
|
||
|
// connections. False is they are locked.
|
||
|
// ---------------------------------------------------------------
|
||
|
BOOL GetAllowModifyConnections() const;
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Sets the draw quality options for the Flow Graph.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// nSmoothingMode : Smoothing mode to use.
|
||
|
// Remarks:
|
||
|
// Set SmoothingMode to the setting that best matches your systems
|
||
|
// capabilities. Use one of the xtpFlowGraphSmoothingMode options for
|
||
|
// the smoothing mode that best suits your needs.
|
||
|
//
|
||
|
// These option greatly effect the performance of the control and
|
||
|
// will in part be effected by the graphics capability of the machine
|
||
|
// that uses the control. xtpFlowGraphSmoothingModeHighQuality is
|
||
|
// recommended when you don't intend the nodes to be dragged by the
|
||
|
// user, if dragging is enabled then this setting is most effected by
|
||
|
// the systems graphic capabilities.
|
||
|
// ----------------------------------------------------------------------
|
||
|
void SetSmoothingMode(XTPFlowGraphSmoothingMode nSmoothingMode);
|
||
|
// ----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Gets the draw quality options used for the Flow Graph.
|
||
|
// Remarks:
|
||
|
// These option greatly effect the performance of the control and
|
||
|
// will in part be effected by the graphics capability of the machine
|
||
|
// that uses the control. xtpFlowGraphSmoothingModeHighQuality is
|
||
|
// recommended when you don't intend the nodes to be dragged by the
|
||
|
// user, if dragging is enabled then this setting is most effected by
|
||
|
// the systems graphic capabilities.
|
||
|
//
|
||
|
// Returns:
|
||
|
// Currently set smoothing mode. Returns an option from
|
||
|
// FlowGraphSmoothingMode.
|
||
|
// ----------------------------------------------------------------------
|
||
|
XTPFlowGraphSmoothingMode GetSmoothingMode() const;
|
||
|
|
||
|
public:
|
||
|
// --------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Selects all nodes in the graph.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// This will select all nodes in the graph, selected nodes have a
|
||
|
// "bluish" color when selected. The current selection is stored in
|
||
|
// the active page's Selection property.
|
||
|
//
|
||
|
// --------------------------------------------------------------------
|
||
|
virtual void SelectAll();
|
||
|
// -----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Auto-Arranges the nodes in the active page.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// This will left-align all nodes in the active page, nodes with
|
||
|
// connections will be placed to the right of the connected node.
|
||
|
//
|
||
|
// -----------------------------------------------------------------------
|
||
|
virtual void Arrange();
|
||
|
// -------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Call this method to place a node into edit mode so the user can
|
||
|
// edit the text.
|
||
|
//
|
||
|
// Remarks:
|
||
|
// Call this method to place a node into edit mode so the user can
|
||
|
// edit the text.
|
||
|
//
|
||
|
// Parameters:
|
||
|
// pNode : Reference to the node to place into edit mode.
|
||
|
// -------------------------------------------------------------------
|
||
|
virtual void RenameNode(CXTPFlowGraphNode* pNode);
|
||
|
// -----------------------------------------------------------------------
|
||
|
//
|
||
|
// Summary:
|
||
|
// Call this method to place a connection point into edit mode so the
|
||
|
// user can edit the text.
|
||
|
// Parameters:
|
||
|
// pConnectionPoint : Reference to the connection point to place into
|
||
|
// edit mode.
|
||
|
// -----------------------------------------------------------------------
|
||
|
virtual void RenameConnectionPoint(CXTPFlowGraphConnectionPoint* pConnectionPoint);
|
||
|
|
||
|
public:
|
||
|
// --------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to determine if there is a CXTPFlowGraphNode at
|
||
|
// the specified point, if True, then a reference to that node will
|
||
|
// be returned.
|
||
|
// Parameters:
|
||
|
// point : Point to test.
|
||
|
//
|
||
|
// Returns:
|
||
|
// Reference to the CXTPFlowGraphNode at the specified point,
|
||
|
// \otherwise null is returned.
|
||
|
// --------------------------------------------------------------------
|
||
|
virtual CXTPFlowGraphNode* HitTestNode(CPoint point) const;
|
||
|
// --------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to determine if there is a
|
||
|
// CXTPFlowGraphConnection at the specified point, if True, then a
|
||
|
// reference to that connection will be returned.
|
||
|
// Parameters:
|
||
|
// point : Point to test.
|
||
|
//
|
||
|
// Returns:
|
||
|
// Reference to the CXTPFlowGraphConnection at the specified point,
|
||
|
// \otherwise null is returned.
|
||
|
// --------------------------------------------------------------------
|
||
|
virtual CXTPFlowGraphConnection* HitTestConnection(CPoint point) const;
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to determine if there is a
|
||
|
// CXTPFlowGraphConnectionPoint at the specified point, if True, then
|
||
|
// a reference to that connection point will be returned.
|
||
|
// Parameters:
|
||
|
// point : Point to test.
|
||
|
//
|
||
|
// Returns:
|
||
|
// Reference to the CXTPFlowGraphConnectionPoint at the specified
|
||
|
// point, otherwise null is returned.
|
||
|
// ----------------------------------------------------------------------
|
||
|
virtual CXTPFlowGraphConnectionPoint* HitTestConnectionArea(CPoint point) const;
|
||
|
|
||
|
public:
|
||
|
// -----------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Called after a label has been edited.
|
||
|
// Parameters:
|
||
|
// pItem : Reference to the element that has finished editing.
|
||
|
// str : New label for the element.
|
||
|
// Remarks:
|
||
|
// This will occur after the label is edited, but before it is
|
||
|
// changed.
|
||
|
// -----------------------------------------------------------------
|
||
|
virtual void OnEndLabelEdit(CXTPFlowGraphElement* pItem, LPCTSTR str);
|
||
|
// ---------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to cancel a label edit.
|
||
|
// Remarks:
|
||
|
// This method is used in the CXTPFlowGraphControl::Reposition
|
||
|
// method.
|
||
|
// ---------------------------------------------------------------
|
||
|
void CancelLabelEdit();
|
||
|
|
||
|
public:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to get tooltip context pointer.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPToolTipContext* GetToolTipContext() const;
|
||
|
|
||
|
public:
|
||
|
//-------------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to enable markup for tab captions
|
||
|
// Parameters:
|
||
|
// bEnable - TRUE to enable markup
|
||
|
//-------------------------------------------------------------------------
|
||
|
void EnableMarkup(BOOL bEnable = TRUE);
|
||
|
|
||
|
//-------------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Returns markup context
|
||
|
//-------------------------------------------------------------------------
|
||
|
CXTPMarkupContext* GetMarkupContext() const;
|
||
|
|
||
|
|
||
|
public:
|
||
|
// --------------------------------------------------
|
||
|
// Summary:
|
||
|
// Sends the specified message to the window.
|
||
|
// Parameters:
|
||
|
// nMessage : The message to be sent.
|
||
|
// pNMHDR : Notify header.
|
||
|
// Returns:
|
||
|
// Nonzero if successful; otherwise returns zero.
|
||
|
// --------------------------------------------------
|
||
|
virtual LRESULT SendNotifyMessage(UINT nMessage, NMHDR* pNMHDR = NULL) const;
|
||
|
|
||
|
protected:
|
||
|
// ---------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Adjusts scroll bars depending on currently visible elements
|
||
|
// (nodes, connections, etc.).
|
||
|
// ---------------------------------------------------------------
|
||
|
virtual void AdjustScrollBars();
|
||
|
|
||
|
protected:
|
||
|
// ------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// \Internal method that is called when nodes are starting to get
|
||
|
// dragged.
|
||
|
// ------------------------------------------------------------------
|
||
|
virtual void StartDragNodes();
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// \Internal method that is called when a node starts to get resized.
|
||
|
// Parameters:
|
||
|
// pNode : Pointer to the node that is being resized.
|
||
|
//
|
||
|
// ----------------------------------------------------------------------
|
||
|
virtual void StartResizeNode(CXTPFlowGraphNode* pNode);
|
||
|
// --------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// \Internal method that is called when the screen has begun to get
|
||
|
// dragged.
|
||
|
// --------------------------------------------------------------------
|
||
|
virtual void StartDragScreen();
|
||
|
// --------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// \Internal method that is called when the selection starts to get
|
||
|
// dragged.
|
||
|
// --------------------------------------------------------------------
|
||
|
virtual void StartDragSelection();
|
||
|
// --------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// \Internal method that is called when a connection stares to get
|
||
|
// dragged.
|
||
|
// Parameters:
|
||
|
// pConnection : Pointer to the connection that is starting to get
|
||
|
// dragged.
|
||
|
//
|
||
|
// --------------------------------------------------------------------
|
||
|
virtual void StartDragConnection(CXTPFlowGraphConnection* pConnection);
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// \Internal method that is called when a connection point starts to
|
||
|
// get dragged.
|
||
|
// Parameters:
|
||
|
// pPoint : Pointers to the connection point that is starting to get
|
||
|
// dragged.
|
||
|
// ----------------------------------------------------------------------
|
||
|
virtual void StartDragConnectionPoint(CXTPFlowGraphConnectionPoint* pPoint);
|
||
|
// --------------------------------------------
|
||
|
// Summary:
|
||
|
// Occurs when the selection has changed.
|
||
|
// Parameters:
|
||
|
// pt : Point where the selection changed.
|
||
|
// --------------------------------------------
|
||
|
virtual void OnMoveSelection(CPoint pt);
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Calculates the correct ScrollOffset and ZoomLevel needed for a
|
||
|
// given rectangle.
|
||
|
// Parameters:
|
||
|
// lpRect : [in] Rectangle within the client rectangle to
|
||
|
// zoom to.
|
||
|
// ptScrollOffset : [out] Will contain the needed scroll offset for
|
||
|
// the specified rectangle to zoom.
|
||
|
// dZoomLevel : [out] Will contain the needed zoom level for the
|
||
|
// specified rectangle to zoom.
|
||
|
// Remarks:
|
||
|
// This is a helper method that calculates the correct ScrollOffset
|
||
|
// and ZoomLevel needed for a given rectangle. You supply the
|
||
|
// rectangle and GetZoomParam will populate ptScrollOffset and
|
||
|
// dZoomLevel with the correct values.<p />
|
||
|
//
|
||
|
// ----------------------------------------------------------------------
|
||
|
virtual void GetZoomParam(LPCRECT lpRect, CPoint& ptScrollOffset, double& dZoomLevel);
|
||
|
|
||
|
// ------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Create a CXTPFlowGraphDrawContext object that will use the
|
||
|
// specified dc to draw.
|
||
|
// Parameters:
|
||
|
// dc : Pointer to a valid device context.
|
||
|
// Remarks:
|
||
|
// This will return CXTPFlowGraphDrawContext or
|
||
|
// CXTPFlowGraphDrawContextGdiPlus depending on the value of
|
||
|
// m_nSmoothingMode.
|
||
|
// Returns:
|
||
|
// Pointer to a CXTPFlowGraphDrawContext object that will use the
|
||
|
// specified dc to draw.
|
||
|
// ------------------------------------------------------------------
|
||
|
virtual CXTPFlowGraphDrawContext* CreateDrawContext(CDC& dc);
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
protected:
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
|
||
|
virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
|
||
|
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
|
||
|
|
||
|
|
||
|
afx_msg void OnPaint();
|
||
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||
|
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||
|
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
|
||
|
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
|
||
|
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
protected:
|
||
|
CBitmap m_bmpCache; // Bitmap Cache.
|
||
|
BOOL m_bReposition; // Specifies whether the control should reposition itself.
|
||
|
CXTPFlowGraphPaintManager* m_pPaintManager; // Pointer to the paint manager used to draw the flow graph.
|
||
|
CXTPFlowGraphPage* m_pActivePage; // Pointer to the currently active page.
|
||
|
CXTPFlowGraphPages* m_pPages; // Pointer to the flow graph's collection of pages.
|
||
|
BOOL m_bAdjustScrollBars; // Specifies whether to adjust the scrollbars.
|
||
|
|
||
|
CPoint m_ptStartDrag; // Point to start dragging.
|
||
|
CPoint m_ptMouse; // Current point the mouse cursor is located.
|
||
|
|
||
|
CRect m_rcSelectedArea; // Bounding rectangle of the currently selected area.
|
||
|
|
||
|
CXTPFlowGraphUndoManager* m_pUndoManager; // The pointer to the undo manager object.
|
||
|
|
||
|
CXTPFlowGraphImages* m_pImages; // Image collection for the flow graph control.
|
||
|
|
||
|
double m_dMinZoom; // Minimum zoom level allowed for the flow graph control.
|
||
|
double m_dMaxZoom; // Maximum zoom level allowed for the flow graph control.
|
||
|
|
||
|
CXTPToolTipContext* m_pToolTipContext; // Tooltip Context.
|
||
|
|
||
|
int m_nAnimationDelay; // Delay between animation steps used when zooming or scrolling.
|
||
|
|
||
|
CXTPFlowGraphPageHistory* m_pHistory; // Object that keeps track of page history and allows the history to be navigated.
|
||
|
|
||
|
BOOL m_bAllowMoveNodes; // Specifies whether the user can drag\\move nodes. True to allow nodes to be moved, False to lock them.
|
||
|
XTPFlowGraphResize m_nAllowResizeNodes; // Node resizing options (drag\\drop size of nodes).
|
||
|
BOOL m_bAllowModifyConnections; // Specifies whether the user can drag\\move\\add\\delete connections. True to allow the user to drag\\move\\add\\delete connections. False to lock them.
|
||
|
|
||
|
BOOL m_bInAction; // Internally used to tell the flow graph it is in animation (scrolling, zooming) or dragging.
|
||
|
|
||
|
XTPFlowGraphSmoothingMode m_nSmoothingMode; // Draw quality options for the Flow Graph.
|
||
|
|
||
|
CXTPMarkupContext* m_pMarkupContext; // Markup context of Flow Graph
|
||
|
|
||
|
private:
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
struct DRAGNODE
|
||
|
{
|
||
|
CPoint ptOrigin;
|
||
|
CXTPFlowGraphElement* pElement;
|
||
|
BOOL bNode;
|
||
|
};
|
||
|
CArray<DRAGNODE, DRAGNODE&> m_arrDragNodes;
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
AFX_INLINE CXTPFlowGraphPaintManager* CXTPFlowGraphControl::GetPaintManager() const {
|
||
|
return m_pPaintManager;
|
||
|
}
|
||
|
AFX_INLINE CXTPFlowGraphPages* CXTPFlowGraphControl::GetPages() const {
|
||
|
return m_pPages;
|
||
|
}
|
||
|
AFX_INLINE CXTPFlowGraphPage* CXTPFlowGraphControl::GetActivePage() const {
|
||
|
return m_pActivePage;
|
||
|
}
|
||
|
AFX_INLINE CXTPFlowGraphUndoManager* CXTPFlowGraphControl::GetUndoManager() const {
|
||
|
return m_pUndoManager;
|
||
|
}
|
||
|
AFX_INLINE void CXTPFlowGraphControl::SetZoomRange(double dMinZoom, double dMaxZoom) {
|
||
|
m_dMinZoom = dMinZoom;
|
||
|
m_dMaxZoom = dMaxZoom;
|
||
|
}
|
||
|
AFX_INLINE CXTPToolTipContext* CXTPFlowGraphControl::GetToolTipContext() const {
|
||
|
return m_pToolTipContext;
|
||
|
}
|
||
|
AFX_INLINE void CXTPFlowGraphControl::SetAnimationDelay(int nDelay) {
|
||
|
m_nAnimationDelay = nDelay;
|
||
|
}
|
||
|
AFX_INLINE int CXTPFlowGraphControl::GetAnimationDelay() const {
|
||
|
return m_nAnimationDelay;
|
||
|
}
|
||
|
AFX_INLINE CXTPFlowGraphImages* CXTPFlowGraphControl::GetImages() const {
|
||
|
return m_pImages;
|
||
|
}
|
||
|
AFX_INLINE CXTPFlowGraphPageHistory* CXTPFlowGraphControl::GetHistory() const {
|
||
|
return m_pHistory;
|
||
|
}
|
||
|
AFX_INLINE void CXTPFlowGraphControl::SetAllowMoveNodes(BOOL bAllow) {
|
||
|
m_bAllowMoveNodes = bAllow;
|
||
|
}
|
||
|
AFX_INLINE BOOL CXTPFlowGraphControl::GetAllowMoveNodes() const {
|
||
|
return m_bAllowMoveNodes;
|
||
|
}
|
||
|
AFX_INLINE void CXTPFlowGraphControl::SetAllowResizeNodes(XTPFlowGraphResize bAllow) {
|
||
|
m_nAllowResizeNodes = bAllow;
|
||
|
}
|
||
|
AFX_INLINE XTPFlowGraphResize CXTPFlowGraphControl::GetAllowResizeNodes() const {
|
||
|
return m_nAllowResizeNodes;
|
||
|
}
|
||
|
AFX_INLINE void CXTPFlowGraphControl::SetAllowModifyConnections(BOOL bAllowModifyConnections) {
|
||
|
m_bAllowModifyConnections = bAllowModifyConnections;
|
||
|
}
|
||
|
AFX_INLINE BOOL CXTPFlowGraphControl::GetAllowModifyConnections() const {
|
||
|
return m_bAllowModifyConnections;
|
||
|
}
|
||
|
|
||
|
AFX_INLINE XTPFlowGraphSmoothingMode CXTPFlowGraphControl::GetSmoothingMode() const {
|
||
|
return m_nSmoothingMode;
|
||
|
}
|
||
|
AFX_INLINE CXTPMarkupContext* CXTPFlowGraphControl::GetMarkupContext() const {
|
||
|
return m_pMarkupContext;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif //#if !defined(__XTPFLOWGRAPHCONTROL_H__)
|