/*============================================================================= * * Filename: FRMSplit.hpp * Version: 1.0 * Date: 06/11/96 * Author: V.L. * * Description: definition off following class: * CPaneFrame each pane contain a CPaneView which contain a CPaneFrame * CPaneView each pane contain a CPaneView * CVectorSplitterWnd the Wnd that manage splitters, call by this name * because it could only be a (1,n) or a (n,1) splitter * CSplitFrame a classe derived from FRMBase that contain splitter * *===========================================================================*/ #ifndef __FRMSPLIT_HPP__ #define __FRMSPLIT_HPP__ /****************************************/ #ifndef CPA_EXPORT #if defined(CPA_WANTS_IMPORT) #define CPA_EXPORT __declspec(dllimport) #elif defined(CPA_WANTS_EXPORT) #define CPA_EXPORT __declspec(dllexport) #else #define CPA_EXPORT #endif #endif /****************************************/ #ifdef ACTIVE_EDITOR #include "afxext.h" #include "FRMBase.hpp" #include "CPAMCapt.hpp" /*============================================================================= * Defines =============================================================================*/ /* caption height or width*/ /*#define C_wCaptionHeight 18*/ #define C_wCaptionHeight 11 /* Splitter type*/ #define C_cHorizontalSplitter 0 #define C_cVerticalSplitter 1 /*============================================================================= * CPaneFrame class =============================================================================*/ class CPA_EXPORT CPaneFrame : public CFrameWnd { DECLARE_DYNCREATE(CPaneFrame) private: int m_a_iButton[4]; /* buttons to draw in frame title bar*/ public: CPaneFrame(); protected: void m_fn_vDrawHorizontalCaption( void ); void m_fn_vDrawVerticalCaption( void ); void m_fn_vDrawButton( CWindowDC *pDC, int iX, int iY, UINT nIDResource); int m_fn_iGetButtonFromPoint( CPoint point); afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct ); afx_msg void OnNcPaint( void ); afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp); afx_msg UINT OnNcHitTest(CPoint point); afx_msg void OnNcLButtonUp(UINT HitTest, CPoint point); afx_msg void OnNcLButtonDown(UINT HitTest, CPoint point); afx_msg void OnNcLButtonDblClk( UINT nHitTest, CPoint point ); afx_msg void OnNcRButtonDown( UINT nHitTest, CPoint point ); afx_msg void OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDIS ); afx_msg void OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMIS ); afx_msg void m_fn_vOnTile( void ); afx_msg void m_fn_vOnMaximize( void ); afx_msg void m_fn_vOnReduce( void ); afx_msg void m_fn_vMinimizeUp( void ); afx_msg void m_fn_vMinimizeDown( void ); afx_msg void m_fn_vSavePos( UINT uID ); afx_msg void m_fn_vRestorePos( UINT uID ); DECLARE_MESSAGE_MAP() }; /*============================================================================= * CPaneView class =============================================================================*/ class CPA_EXPORT CPaneView : public CView { DECLARE_DYNCREATE(CPaneView) private: CPaneFrame *m_p_oPaneFrame; /* frame associated with this view*/ public: CPaneView(); CPaneFrame *m_fn_p_oGetFrame() { return m_p_oPaneFrame; } protected: void OnDraw( CDC* pDC ); afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct ); afx_msg void OnSize( UINT nType, int cx, int cy ); DECLARE_MESSAGE_MAP() }; /*============================================================================= * CVectorSplitterWnd class =============================================================================*/ class CPA_EXPORT CVectorSplitterWnd : public CSplitterWnd, public CPA_MouseCapturer { DECLARE_DYNCREATE(CVectorSplitterWnd) private: char m_cType; /* Horizontal or Vertical*/ int m_iMaximizedSize; /* the maximum size for a pane*/ int m_iTileSize; /* the pane size for a tile view*/ int m_iNumberOfPanes; /* number of pane*/ char m_a_cState[16]; /* state of each panel*/ char m_a_cCloseDir[16]; /* the direction the window was closed*/ int m_a_iSize[16]; /* size of each panel, size is the width for an horizontal splitter, height for vertical*/ int m_a_iSizeBeforeMax[16]; /* size of each panel before a maximize operation*/ int m_aa_iSavePosition[4][16]; /* saved position*/ int m_iTrackPane; /* pane that is being sized*/ CPoint m_oBeginPoint; /* point when track begin*/ public: int m_iCaptionDelta; /* used by CPaneFrame*/ int m_iPopupClosed; /* used by CPaneFrame*/ /*any class deriving from CPA_MouseCapturer one must declare this method as is*/ CWnd *m_p_oGrabCapture() { return m_p_oGrabCaptureFor(this); } CVectorSplitterWnd(); ~CVectorSplitterWnd(); BOOL Create( CWnd *_pParentWnd, char _cType, int _iNumberOfPanes ); BOOL CreateView( int _iPane, CRuntimeClass *_pViewClass, char *_szName, int _iSize ); BOOL SetPaneView( int _iPane, CView *_pView, char *_szName, int _iSize); int m_fn_iGetNumberOfPanes( void ) { return m_iNumberOfPanes; } char m_fn_cGetType( void ) { return m_cType; } CWnd *m_fn_p_oGetPane( int _iPane ); void m_fn_vMinimizePane( CWnd *p_xPane, BOOL _bTop = TRUE ); void m_fn_vMaximizePane( CWnd *p_xPane ); void m_fn_vResizePane( CWnd *p_xPane ); void m_fn_vTilePanes( void ); void m_fn_vSavePos( char cSave ); void m_fn_vRestorePos( char cRestore ); BOOL m_fn_bIsSavedUsed( char cSave ); void m_fn_vGetPositionRatio( char cSave, float *p_aRatio16 ); void m_fn_vChangePaneSize( int _iPane, int _iNewSize, BOOL bBottomOrRight = TRUE); void m_fn_vGetButton( CWnd *p_xPane, int *p_a_iButton ); int m_fn_iGetPaneSize( int _iPane ); private: int m_fn_iGetNextOpenPane( int iFromPane, BOOL bBottomOrRight ); int m_fn_iGetNextPane( int iFromPane, BOOL bBottomOrRight ); void m_fn_vPaneToRowCol( int _iPane, int& _iRow,int& _iCol); int m_fn_iRowColToPane( int _iRow,int _iCol); void m_fn_vSetPaneSize( int _iPane, int _iSize ); int HitTest(CPoint pt) const; afx_msg void OnLButtonDown( UINT nFlags, CPoint point ); afx_msg void OnLButtonUp( UINT nFlags, CPoint point ); afx_msg void OnMouseMove( UINT nFlags, CPoint point ); afx_msg void OnSize( UINT nType, int cx, int cy ); afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); DECLARE_MESSAGE_MAP() }; /*============================================================================= * CSplitFrame =============================================================================*/ class CPA_EXPORT CSplitFrame : public FRMBase { DECLARE_DYNCREATE(CSplitFrame) private: CVectorSplitterWnd *m_p_oView; public: CSplitFrame(); BOOL CreateSplitter( char cType, int iNumberOfPanes ); BOOL CreateView( int iPane, CRuntimeClass *pViewClass, char *szName, int iSize); BOOL SetPaneView( int iPane, CView *pView, char *szName, int iSize); void SetPaneSize( int iPane, int iNewSize, BOOL bBottomOrRight = TRUE ); int GetPaneSize( int iPane ) { return m_p_oView->m_fn_iGetPaneSize(iPane); } CWnd *m_fn_p_oGetPane( int _iPane ); protected: afx_msg void OnSysCommand(UINT nID, LPARAM lParam); DECLARE_MESSAGE_MAP() }; #endif /* ACTIVE_EDITOR */ #endif /* __FRMSPLIT_HPP__ */