863 lines
29 KiB
C
863 lines
29 KiB
C
|
//****************************************************************************
|
||
|
//
|
||
|
// Copyright (c) 1997-2001, Microsoft Corporation
|
||
|
//
|
||
|
// File: SCHEDMAT.H
|
||
|
//
|
||
|
// Definitions for the schedule matrix classes. These classes provide a basic
|
||
|
// schedule matrix control. The classes defined here are:
|
||
|
//
|
||
|
// CMatrixCell A data structure class for the CScheduleMatrix.
|
||
|
// CHourLegend Support window class that draws the matrix legend.
|
||
|
// CPercentLabel Support window class that draws percentage labels.
|
||
|
// CScheduleMatrix A class that displays daily or weekly schedule data.
|
||
|
//
|
||
|
// History:
|
||
|
//
|
||
|
// Scott Walker, SEA 3/10 Created.
|
||
|
//
|
||
|
//****************************************************************************
|
||
|
#ifndef _SCHEDMAT_H_
|
||
|
#define _SCHEDMAT_H_
|
||
|
|
||
|
#if _MSC_VER >= 1000
|
||
|
#pragma once
|
||
|
#endif // _MSC_VER >= 1000
|
||
|
// schedmat.h : header file
|
||
|
//
|
||
|
|
||
|
#define SCHEDMSG_GETSELDESCRIPTION WM_APP+1
|
||
|
#define SCHEDMSG_GETPERCENTAGE WM_APP+2
|
||
|
|
||
|
|
||
|
#ifndef UITOOLS_CLASS
|
||
|
#define UITOOLS_CLASS
|
||
|
#endif
|
||
|
|
||
|
// Classes defined in this file
|
||
|
class CMatrixCell;
|
||
|
class CScheduleMatrix;
|
||
|
|
||
|
// Schedule matrix types
|
||
|
#define MT_DAILY 1 // 1x24 matrix
|
||
|
#define MT_WEEKLY 2 // 7x24 matrix
|
||
|
|
||
|
// GetMergeState return codes
|
||
|
#define MS_UNMERGED 0
|
||
|
#define MS_MERGED 1
|
||
|
#define MS_MIXEDMERGE 2
|
||
|
|
||
|
// Matrix notification codes
|
||
|
#define MN_SELCHANGE (WM_USER + 175)
|
||
|
#define ON_MN_SELCHANGE(id, memberFxn) ON_CONTROL(MN_SELCHANGE, id, memberFxn)
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CMatrixCell
|
||
|
|
||
|
#define DEFBACKCOLOR RGB(255,255,255) // White
|
||
|
#define DEFFORECOLOR RGB(0,0,128) // Dark blue
|
||
|
#define DEFBLENDCOLOR RGB(255,255,0) // Yellow
|
||
|
|
||
|
// Cell flags
|
||
|
#define MC_MERGELEFT 0x00000001
|
||
|
#define MC_MERGETOP 0x00000002
|
||
|
#define MC_MERGE 0x00000004
|
||
|
#define MC_LEFTEDGE 0x00000010
|
||
|
#define MC_RIGHTEDGE 0x00000020
|
||
|
#define MC_TOPEDGE 0x00000040
|
||
|
#define MC_BOTTOMEDGE 0x00000080
|
||
|
#define MC_BLEND 0x00000100
|
||
|
|
||
|
#define MC_ALLEDGES (MC_LEFTEDGE | MC_RIGHTEDGE | MC_TOPEDGE | MC_BOTTOMEDGE)
|
||
|
|
||
|
class UITOOLS_CLASS CMatrixCell : public CObject
|
||
|
{
|
||
|
DECLARE_DYNAMIC(CMatrixCell)
|
||
|
friend CScheduleMatrix;
|
||
|
|
||
|
// Construction
|
||
|
public:
|
||
|
CMatrixCell();
|
||
|
virtual ~CMatrixCell();
|
||
|
|
||
|
protected:
|
||
|
COLORREF m_crBackColor;
|
||
|
COLORREF m_crForeColor;
|
||
|
UINT m_nPercentage;
|
||
|
|
||
|
COLORREF m_crBlendColor;
|
||
|
|
||
|
DWORD m_dwUserValue;
|
||
|
LPVOID m_pUserDataPtr;
|
||
|
|
||
|
DWORD m_dwFlags;
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CHourLegend window
|
||
|
|
||
|
class UITOOLS_CLASS CHourLegend : public CWnd
|
||
|
{
|
||
|
DECLARE_DYNAMIC(CHourLegend)
|
||
|
friend CScheduleMatrix;
|
||
|
|
||
|
// Construction
|
||
|
public:
|
||
|
CHourLegend();
|
||
|
|
||
|
// Attributes
|
||
|
public:
|
||
|
|
||
|
// Operations
|
||
|
public:
|
||
|
|
||
|
// Overrides
|
||
|
// ClassWizard generated virtual function overrides
|
||
|
//{{AFX_VIRTUAL(CHourLegend)
|
||
|
//}}AFX_VIRTUAL
|
||
|
|
||
|
// Implementation
|
||
|
public:
|
||
|
virtual ~CHourLegend();
|
||
|
|
||
|
protected:
|
||
|
HICON m_hiconSun, m_hiconMoon;
|
||
|
HFONT m_hFont;
|
||
|
int m_nCharHeight, m_nCharWidth;
|
||
|
int m_nCellWidth;
|
||
|
CRect m_rLegend;
|
||
|
|
||
|
// Generated message map functions
|
||
|
protected:
|
||
|
//{{AFX_MSG(CHourLegend)
|
||
|
afx_msg void OnPaint();
|
||
|
//}}AFX_MSG
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CPercentLabel window
|
||
|
|
||
|
class UITOOLS_CLASS CPercentLabel : public CWnd
|
||
|
{
|
||
|
DECLARE_DYNAMIC(CPercentLabel)
|
||
|
friend CScheduleMatrix;
|
||
|
|
||
|
// Construction
|
||
|
public:
|
||
|
CPercentLabel();
|
||
|
|
||
|
// Attributes
|
||
|
public:
|
||
|
|
||
|
// Operations
|
||
|
public:
|
||
|
|
||
|
// Overrides
|
||
|
// ClassWizard generated virtual function overrides
|
||
|
//{{AFX_VIRTUAL(CHourLegend)
|
||
|
//}}AFX_VIRTUAL
|
||
|
|
||
|
// Implementation
|
||
|
public:
|
||
|
virtual ~CPercentLabel();
|
||
|
|
||
|
protected:
|
||
|
CScheduleMatrix *m_pMatrix;
|
||
|
HFONT m_hFont;
|
||
|
int m_nCellWidth;
|
||
|
CRect m_rHeader;
|
||
|
CRect m_rLabels;
|
||
|
|
||
|
// Generated message map functions
|
||
|
protected:
|
||
|
//{{AFX_MSG(CPercentLabel)
|
||
|
afx_msg void OnPaint();
|
||
|
//}}AFX_MSG
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CScheduleMatrix window
|
||
|
|
||
|
// Schedule matrix command IDs
|
||
|
#define SM_ID_DAYBASE 100
|
||
|
|
||
|
#define SM_ID_ALL (SM_ID_DAYBASE + 0)
|
||
|
|
||
|
#define SM_ID_MONDAY (SM_ID_DAYBASE + 1)
|
||
|
#define SM_ID_TUESDAY (SM_ID_DAYBASE + 2)
|
||
|
#define SM_ID_WEDNESDAY (SM_ID_DAYBASE + 3)
|
||
|
#define SM_ID_THURSDAY (SM_ID_DAYBASE + 4)
|
||
|
#define SM_ID_FRIDAY (SM_ID_DAYBASE + 5)
|
||
|
#define SM_ID_SATURDAY (SM_ID_DAYBASE + 6)
|
||
|
#define SM_ID_SUNDAY (SM_ID_DAYBASE + 7)
|
||
|
|
||
|
#define SM_ID_HOURBASE 110
|
||
|
|
||
|
//****************************************************************************
|
||
|
//
|
||
|
// CLASS: CScheduleMatrix
|
||
|
//
|
||
|
// CScheduleMatrix inplements a basic schedule matrix control. This control
|
||
|
// provides the mechanics of a daily or weekly schedule UI but has no knowledge
|
||
|
// about the data it maintains. The matrix is an array of cells representing
|
||
|
// the hours in a day and optionally the days in a week. The cells can be
|
||
|
// rendered in a variety of ways to represent programmer-defined meaning in
|
||
|
// each cell. The following display properties can be set for individual cells
|
||
|
// or for a block of cells at once:
|
||
|
//
|
||
|
// BackColor Background color of the cell (defaults white).
|
||
|
// ForeColor ForeGround color of the cell (defaults dark blue).
|
||
|
// Percentage Percentage of foreground to background color. This is
|
||
|
// rendered as a histogram in the cell.
|
||
|
// BlendColor 50% dither color on a cell to represent some binary state
|
||
|
// of the cell as compared to another cell (defaults yellow).
|
||
|
// BlendState Specifies whether blend color is showing or not.
|
||
|
//
|
||
|
// A block of cells can be "merged" together to form a discreet block of color
|
||
|
// within the matrix grid. This is useful for schedule applications that want
|
||
|
// to assign a schedule function to a time range. It is the responsibility
|
||
|
// of the program to track these blocks and prevent or resolve any confusion
|
||
|
// from overlapping "merged" blocks.
|
||
|
//
|
||
|
// Each cell can contain two kinds of programmer-defined data that are
|
||
|
// maintained with the cell but not touched by the matrix control: a DWORD
|
||
|
// value and a pointer value. These values can be used to hold data representing
|
||
|
// schedule information for each hour in the matrix.
|
||
|
//
|
||
|
// The parent window receives a notification message (MN_SELCHANGE) whenever the
|
||
|
// user modifies the current selection in the matrix.
|
||
|
//
|
||
|
//?? Later: May add Icon and Text properties per cell.
|
||
|
//
|
||
|
// PUBLIC MEMBERS:
|
||
|
//
|
||
|
// CScheduleMatrix Constructor.
|
||
|
// ~CScheduleMatrix Destructor.
|
||
|
// SetType Sets the matrix type to MT_DAILY or MT_WEEKLY.
|
||
|
// Create Creates the control window.
|
||
|
//
|
||
|
// Selection:
|
||
|
//
|
||
|
// DeselectAll Deselects all cells.
|
||
|
// SelectAll Selects all cells.
|
||
|
// SetSel Selects a block of cells.
|
||
|
// GetSel Gets the current selection.
|
||
|
// GetSelDescription Gets text description of selection range
|
||
|
// CellInSel Tests if a cell is in the current selection
|
||
|
//
|
||
|
// GetCellSize Gets the size of a cell in the current matrix
|
||
|
// DrawCell Draws a sample cell in specified DC
|
||
|
//
|
||
|
// Block Data Functions:
|
||
|
//
|
||
|
// SetBackColor Sets color used to paint cell background.
|
||
|
// SetForeColor Sets color used to paint cell percentage.
|
||
|
// SetPercentage Sets percentage of foreground to background.
|
||
|
// SetBlendColor Sets color blended onto cells.
|
||
|
// SetBlendState Turns blend on or off.
|
||
|
// SetUserValue Sets user defined DWORD value.
|
||
|
// SetUserDataPtr Sets user defined data pointer.
|
||
|
// MergeCells Graphically merges cells so they render as a block.
|
||
|
// UnMergeCells Cancels merging for a block of cells.
|
||
|
// GetMergeState Returns merge state for a block of cells
|
||
|
//
|
||
|
// Cell Data Functions:
|
||
|
//
|
||
|
// GetBackColor Gets the back color of a cell.
|
||
|
// GetForeColor Gets the forecolor of a cell.
|
||
|
// GetPercentage Gets the percentage of foreground to background.
|
||
|
// GetBlendColor Gets the blend color of cell.
|
||
|
// GetBlendState Gets the blend state of a cell.
|
||
|
// GetUserValue Gets the user defined DWORD value of the cell.
|
||
|
// GetUserDataPtr Gets the user defined data pointer of the cell.
|
||
|
//
|
||
|
//============================================================================
|
||
|
//
|
||
|
// CScheduleMatrix::CScheduleMatrix
|
||
|
//
|
||
|
// Constructor. The constructor creates the data structure associated with
|
||
|
// the schedule matrix. As with other CWnd objects, the control itself must
|
||
|
// be instantiated with a call to Create.
|
||
|
//
|
||
|
// Parameters I:
|
||
|
//
|
||
|
// void Default constructor. Constructs a MT_WEEKLY
|
||
|
// schedule matrix.
|
||
|
//
|
||
|
// Parameters II:
|
||
|
//
|
||
|
// DWORD dwType Type constructor. CScheduleMatrix with initial
|
||
|
// type: MT_DAILY or MT_WEEKLY
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetType
|
||
|
//
|
||
|
// Sets the type of the matrix to MT_WEEKLY or MT_DAILY. Call this function
|
||
|
// after construction but before Create.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// DWORD dwType Matrix Type: MT_DAILY or MT_WEEKLY
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::Create
|
||
|
//
|
||
|
// Create initializes the control's window and attaches it to the CScheduleMatrix.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// DWORD dwStyle Specifies the window style of the control.
|
||
|
// const RECT& rect Specifies the position and size of the control.
|
||
|
// CWnd* pParentWnd Specifies the parent window of the control.
|
||
|
// UINT nID Specifies the control ID.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// BOOL bResult TRUE if successful.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::DeselectAll
|
||
|
//
|
||
|
// Deselects all cells in the matrix.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// BOOL bChanged TRUE if selection changes.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SelectAll
|
||
|
//
|
||
|
// Selects all cells in the matrix.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// BOOL bChanged TRUE if selection changes.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetSel
|
||
|
//
|
||
|
// Sets the selection to the specified block. The selection is a continuous
|
||
|
// block of cells defined by a starting hour/day pair and extending over a
|
||
|
// range of hours and days.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Starting hour for the selection.
|
||
|
// UINT nDay Starting day for the selection.
|
||
|
// UINT nNumHours Range of selection along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of selection along the day axis. (Default=1).
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// BOOL bChanged TRUE if selection changes.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetSel
|
||
|
//
|
||
|
// Retrieves the current selection.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT &nHour Receiver for starting hour for the selection.
|
||
|
// UINT &nDay Receiver for starting day for the selection.
|
||
|
// UINT &nNumHours Receiver for range of selection along the hour axis.
|
||
|
// UINT &nNumDays Receiver for range of selection along the day axis.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetDescription
|
||
|
//
|
||
|
// Returns a textual description of the specified block of cells. This is useful
|
||
|
// for applications that wish to provide feedback about merged or grouped blocks
|
||
|
// in the matrix.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// CString &sText Receiver for description text.
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetSelDescription
|
||
|
//
|
||
|
// Returns a textual description of the current selection. This is useful for
|
||
|
// applications that wish to provide feedback about the selection.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// CString &sText Receiver for description text.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::CellInSel
|
||
|
//
|
||
|
// Returns TRUE if the specified cell is selected (i.e. is in the block of
|
||
|
// selected cells).
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Hour position of the cell.
|
||
|
// UINT nDay Day position of the cell.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// BOOL bSelected TRUE if cell is selected.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetCellSize
|
||
|
//
|
||
|
// Returns the size of a cell in the current matrix. This function may be used
|
||
|
// in conjunction with DrawCell (below) to render a sample cell for a legend.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// CSize size Size of the cell.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::DrawCell
|
||
|
//
|
||
|
// Renders a cell with the specified properties. Use this function to create
|
||
|
// a legend defining the cell states in the matrix. The cell is drawn as a
|
||
|
// histogram with the specified background and foreground colors in a proportion
|
||
|
// specified by the percentage. If blend state is TRUE, the blend color is
|
||
|
// blended in with a 50% dither on top of the foreground and background.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// CDC *pdc Display context to draw into.
|
||
|
// LPCRECT pRect Cell boundaries in the specified DC.
|
||
|
// UINT nPercent Percentage if foreground to background color.
|
||
|
// BOOL bBlendState Draw blend dither if TRUE (Default = FALSE).
|
||
|
// COLORREF crBackColor Background color (Default = DEFBACKCOLOR).
|
||
|
// COLORREF crForeColor Foreground color (Default = DEFFORECOLOR).
|
||
|
// COLORREF crBlendColor Blend color (Default = DEFBLENDCOLOR).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetBackColor
|
||
|
//
|
||
|
// Sets the background color for the specified block of cells.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// COLORREF crColor New color property for the block of cells.
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetForeColor
|
||
|
//
|
||
|
// Sets the foreground color for the specified block of cells.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// COLORREF crColor New color property for the block of cells.
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetPercentage
|
||
|
//
|
||
|
// Sets the percentage of foreground to background color for the specified block
|
||
|
// of cells. This percentage is rendered as a histogram of one color to the
|
||
|
// other with foreground color on the bottom.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nPercent Percentage of foreground to background color.
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetBlendColor
|
||
|
//
|
||
|
// Sets the blend color for the specified block of cells. Blend color is
|
||
|
// overlayed in a 50% dither pattern on the foreground and background colors
|
||
|
// of the cells.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// COLORREF crColor New color property for the block of cells.
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetBlendState
|
||
|
//
|
||
|
// If blend state is TRUE for a block of cells, then the blend color is applied
|
||
|
// in a 50% dither pattern.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// BOOL bState Apply blend if TRUE.
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetUserValue
|
||
|
//
|
||
|
// Store a user-defined DWORD with each cell in the block.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// DWORD dwValue User-defined value to store.
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::SetUserDataPtr
|
||
|
//
|
||
|
// Store a user-defined pointer with each cell in the block.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// LPVOID lpData User-defined pointer to store.
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::MergeCells
|
||
|
//
|
||
|
// Visually merges the specified block of cells to give them the appearance
|
||
|
// of a contiguous block. A merged block of cells does not contain the grid
|
||
|
// lines that normally separate each cell. Use this function to create
|
||
|
// block areas that represent an event in the schedule. Note that merged
|
||
|
// blocks do not actually become a managed object in the matrix and that it
|
||
|
// is therefore possible to merge a block of cells that intersects a
|
||
|
// previously merged block. It is the application's responsibility to track
|
||
|
// these blocks and prevent or resolve any confusion from overlapping "merged"
|
||
|
// blocks.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::UnMergeCells
|
||
|
//
|
||
|
// Removes the merge effect imposed by MergeCells.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetMergeState
|
||
|
//
|
||
|
// Retrieves the merge state of the specified block of cells. A block can
|
||
|
// have one of the following merge states:
|
||
|
//
|
||
|
// MS_UNMERGED No cell in the specified block is merged.
|
||
|
// MS_MERGED All cells in the specified block have been merged and
|
||
|
// in fact represent a "perfect" merge, i.e. all edges
|
||
|
// of the merged block have been accounted for. An
|
||
|
// incomplete part of a merged block returns MS_MIXEDMERGE.
|
||
|
// MS_MIXEDMERGE The specified block is a mixture of merged and unmerged
|
||
|
// cells or an incomplete portion of a merged block has
|
||
|
// been specified.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Starting hour for the block.
|
||
|
// UINT nDay Starting day for the block.
|
||
|
// UINT nNumHours Range of block along the hour axis. (Default=1).
|
||
|
// UINT nNumDays Range of block along the day axis. (Default=1).
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// UINT nState MS_UNMERGED, MS_MERGED, or MS_MIXEDMERGE.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetBackColor
|
||
|
//
|
||
|
// Retrieves the background color of the specified cell.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Hour position of the cell.
|
||
|
// UINT nDay Day position of the cell.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// COLORREF crColor Current color property for the cell.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetForeColor
|
||
|
//
|
||
|
// Retrieves the foreground color of the specified cell.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Hour position of the cell.
|
||
|
// UINT nDay Day position of the cell.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// COLORREF crColor Current color property for the cell.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetPercentage
|
||
|
//
|
||
|
// Retrieves the percentage of foreground to background color in the specified
|
||
|
// cell.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Hour position of the cell.
|
||
|
// UINT nDay Day position of the cell.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// UINT nPercent Current percentage of foreground to background.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetBlendColor
|
||
|
//
|
||
|
// Retrieves the blend color of the specified cell.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Hour position of the cell.
|
||
|
// UINT nDay Day position of the cell.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// COLORREF crColor Current color property for the cell.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetBlendState
|
||
|
//
|
||
|
// Retrieves the blend state of the specified cell. If blend state is TRUE,
|
||
|
// the cell is currently being rendered with a 50% blend on top of the foreground
|
||
|
// and background colors.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Hour position of the cell.
|
||
|
// UINT nDay Day position of the cell.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// BOOL bState TRUE if blend is turned on for this cell.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetUserValue
|
||
|
//
|
||
|
// Returns the user-defined DWORD value associated with the specified cell.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Hour position of the cell.
|
||
|
// UINT nDay Day position of the cell.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// DWORD dwValue User-defined DWORD value.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::GetUserDataPtr
|
||
|
//
|
||
|
// Returns the user-defined data pointer associated with the specified cell.
|
||
|
//
|
||
|
// Parameters:
|
||
|
//
|
||
|
// UINT nHour Hour position of the cell.
|
||
|
// UINT nDay Day position of the cell.
|
||
|
//
|
||
|
// Returns:
|
||
|
//
|
||
|
// LPVOID lpData User-defined pointer.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// CScheduleMatrix::~CScheduleMatrix
|
||
|
//
|
||
|
// Destructor.
|
||
|
//
|
||
|
//****************************************************************************
|
||
|
|
||
|
class UITOOLS_CLASS CScheduleMatrix : public CWnd
|
||
|
{
|
||
|
DECLARE_DYNAMIC(CScheduleMatrix)
|
||
|
|
||
|
// Construction
|
||
|
public:
|
||
|
CScheduleMatrix();
|
||
|
CScheduleMatrix(UINT nType);
|
||
|
|
||
|
// Attributes
|
||
|
public:
|
||
|
|
||
|
// Operations
|
||
|
public:
|
||
|
|
||
|
// Overrides
|
||
|
// ClassWizard generated virtual function overrides
|
||
|
//{{AFX_VIRTUAL(CScheduleMatrix)
|
||
|
public:
|
||
|
//}}AFX_VIRTUAL
|
||
|
virtual BOOL Create(LPCTSTR lpszWindowName, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
|
||
|
|
||
|
// Implementation
|
||
|
public:
|
||
|
void SetType(UINT nType);
|
||
|
BOOL DeselectAll();
|
||
|
BOOL SelectAll();
|
||
|
BOOL SetSel(UINT nHour, UINT nDay, UINT nNumHours, UINT nNumDays);
|
||
|
void GetSel(UINT& nHour, UINT& nDay, UINT& nNumHours, UINT& nNumDays);
|
||
|
void GetSelDescription(CString &sText);
|
||
|
BOOL CellInSel(UINT nHour, UINT nDay);
|
||
|
CSize GetCellSize();
|
||
|
void DrawCell(CDC *pdc, LPCRECT pRect, UINT nPercent, BOOL bBlendState = FALSE,
|
||
|
COLORREF crBackColor = DEFBACKCOLOR, COLORREF crForeColor = DEFFORECOLOR,
|
||
|
COLORREF crBlendColor = DEFBLENDCOLOR);
|
||
|
void SetBackColor(COLORREF crColor, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
void SetForeColor(COLORREF crColor, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
void SetPercentage(UINT nPercent, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
void SetBlendColor(COLORREF crColor, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
void SetBlendState(BOOL bState, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
void SetUserValue(DWORD dwValue, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
void SetUserDataPtr(LPVOID lpData, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
void MergeCells(UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
void UnMergeCells(UINT nHour, UINT nDay, UINT nNumHours, UINT nNumDays=1);
|
||
|
UINT GetMergeState(UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
COLORREF GetBackColor(UINT nHour, UINT nDay);
|
||
|
COLORREF GetForeColor(UINT nHour, UINT nDay);
|
||
|
UINT GetPercentage(UINT nHour, UINT nDay);
|
||
|
COLORREF GetBlendColor(UINT nHour, UINT nDay);
|
||
|
BOOL GetBlendState(UINT nHour, UINT nDay);
|
||
|
DWORD GetUserValue(UINT nHour, UINT nDay);
|
||
|
LPVOID GetUserDataPtr(UINT nHour, UINT nDay);
|
||
|
void GetDescription(CString &sText, UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1);
|
||
|
virtual ~CScheduleMatrix();
|
||
|
|
||
|
protected:
|
||
|
CHourLegend m_HourLegend;
|
||
|
CPercentLabel m_PercentLabel;
|
||
|
UINT m_nType;
|
||
|
|
||
|
// Data
|
||
|
CMatrixCell m_CellArray[24][7];
|
||
|
|
||
|
// Metrics
|
||
|
UINT m_nCellWidth;
|
||
|
UINT m_nCellHeight;
|
||
|
CRect m_rHourLegend;
|
||
|
CRect m_rAllHeader;
|
||
|
CRect m_rHourHeader;
|
||
|
CRect m_rDayHeader;
|
||
|
CRect m_rCellArray;
|
||
|
CRect m_rPercentLabel;
|
||
|
|
||
|
CString m_DayStrings[8];
|
||
|
|
||
|
// Selection
|
||
|
UINT m_nSelHour, m_nSelDay, m_nNumSelHours, m_nNumSelDays;
|
||
|
UINT m_nSaveHour, m_nSaveDay, m_nNumSaveHours, m_nNumSaveDays;
|
||
|
|
||
|
// Work vars
|
||
|
CBrush m_brBlend, m_brMask;
|
||
|
CBitmap m_bmBlend, m_bmMask;
|
||
|
HFONT m_hFont;
|
||
|
CPoint m_ptDown, m_ptFocus;
|
||
|
BOOL m_bShifted;
|
||
|
|
||
|
// Generated message map functions
|
||
|
protected:
|
||
|
CString FormatTime (UINT nHour) const;
|
||
|
//{{AFX_MSG(CScheduleMatrix)
|
||
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||
|
afx_msg void OnPaint();
|
||
|
afx_msg void OnSetFocus(CWnd* pOldWnd);
|
||
|
afx_msg void OnKillFocus(CWnd* pNewWnd);
|
||
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
||
|
afx_msg UINT OnGetDlgCode();
|
||
|
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
|
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
|
//}}AFX_MSG
|
||
|
|
||
|
afx_msg LRESULT OnSetFont( WPARAM wParam, LPARAM lParam);
|
||
|
afx_msg LRESULT OnGetFont( WPARAM wParam, LPARAM lParam);
|
||
|
afx_msg LRESULT OnGetObject (WPARAM wParam, LPARAM lParam);
|
||
|
afx_msg LRESULT OnGetSelDescription (WPARAM wParam, LPARAM lParam);
|
||
|
afx_msg LRESULT OnGetPercentage (WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
BOOL SetSelValues(UINT nHour, UINT nDay, UINT nNumHours, UINT nNumDays);
|
||
|
void InvalidateCells(UINT nHour, UINT nDay, UINT nNumHours=1, UINT nNumDays=1,
|
||
|
BOOL bErase = TRUE);
|
||
|
void SetMatrixMetrics(int cx, int cy);
|
||
|
void CellToClient(LONG &nX, LONG &nY);
|
||
|
void ClientToCell(LONG &nX, LONG &nY);
|
||
|
void DrawCell(CDC *pdc, CMatrixCell *pCell, int x, int y, int w, int h);
|
||
|
void DrawHeader(CDC *pdc, LPCRECT lpRect, LPCTSTR pszText, BOOL bSelected);
|
||
|
void Press(CPoint pt, BOOL bExtend);
|
||
|
void Extend(CPoint pt);
|
||
|
void Release(CPoint pt);
|
||
|
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
|
||
|
private:
|
||
|
CString GetLocaleDay (LCTYPE lcType) const;
|
||
|
};
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//{{AFX_INSERT_LOCATION}}
|
||
|
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
|
||
|
|
||
|
#endif // _SCHEDMAT_H_
|