// // wcand.h // #ifndef WCAND_H #define WCAND_H #include "private.h" #include "mscandui.h" #include "cuilib.h" #include "cuicand.h" #include "cuicand2.h" #include "candmgr.h" #include "candprop.h" #include "candext.h" #include "candacc.h" #include "wpopup.h" class CCandidateUI; class CCandWindowBase; class CCandUIObjectMgr; class CCandUIObjectEventSink; class CCandMenu; // // window class name/title // #define WNDCLASS_CANDWND "MSCandUIWindow_Candidate" #define WNDTITLE_CANDWND "" #define WNDCLASS_POPUPWND "MSCandUIWindow_Comment" #define WNDTITLE_POPUPWND "" #define CANDUIOBJSINK_MAX 10 // // // typedef enum _CANDUIOBJECT { CANDUIOBJ_CANDWINDOW, CANDUIOBJ_POPUPCOMMENTWINDOW, CANDUIOBJ_CANDLISTBOX, CANDUIOBJ_CANDCAPTION, CANDUIOBJ_MENUBUTTON, CANDUIOBJ_EXTRACANDIDATE, CANDUIOBJ_CANDRAWDATA, CANDUIOBJ_CANDTIPWINDOW, CANDUIOBJ_CANDTIPBUTTON, CANDUIOBJ_OPTIONSLISTBOX } CANDUIOBJECT; // // // typedef enum _CANDUIOBJECTEVENT { CANDUIOBJEV_CREATED, CANDUIOBJEV_DESTROYED, CANDUIOBJEV_UPDATED, } CANDUIOBJECTEVENT; // // CCandUIObjectParent // = CandidateUI UI object parent = // class CCandUIObjectParent { public: CCandUIObjectParent( void ); virtual ~CCandUIObjectParent( void ); HRESULT Initialize( CCandUIObjectMgr *pUIObjectMgr ); HRESULT Uninitialize( void ); void NotifyUIObjectEvent( CANDUIOBJECT obj, CANDUIOBJECTEVENT event ); virtual CCandWindowBase *GetCandWindowObj( void ) = 0; /* PURE */ virtual CPopupCommentWindow *GetPopupCommentWindowObj( void ) = 0; /* PURE */ virtual CUIFCandListBase *GetOptionsListBoxObj( void ) = 0; /* PURE */ virtual CUIFCandListBase *GetCandListBoxObj( void ) = 0; /* PURE */ virtual CUIFWndCaption *GetCaptionObj( void ) = 0; /* PURE */ virtual CUIFButton *GetMenuButtonObj( void ) = 0; /* PURE */ virtual CUIFCandListBase *GetExtraCandidateObj( void ) = 0; /* PURE */ virtual CUIFCandRawData *GetCandRawDataObj( void ) = 0; /* PURE */ virtual CUIFBalloonWindow *GetCandTipWindowObj( void ) = 0; /* PURE */ virtual CUIFButton *GetCandTipButtonObj( void ) = 0; /* PURE */ protected: CCandUIObjectMgr *m_pUIObjectMgr; }; // // CCandWindowBase // = candidate window base class = // class CCandWindowBase : public CUIFWindow, public CCandListEventSink, public CCandUIPropertyEventSink, public CCandUIExtensionEventSink, public CCandUIObjectParent, public CCandAccItem { public: CCandWindowBase( CCandidateUI *pCandUI, DWORD dwStyle ); virtual ~CCandWindowBase( void ); // // // ULONG AddRef( void ); ULONG Release( void ); // // CCandListEventSink methods // virtual void OnSetCandidateList( void ); virtual void OnClearCandidateList( void ); virtual void OnCandItemUpdate( void ); virtual void OnSelectionChanged( void ); // // CCandUIPropertyEventSink methods // virtual void OnPropertyUpdated( CANDUIPROPERTY prop, CANDUIPROPERTYEVENT event ); // // CCandUIExtensionEventSink methods // virtual void OnExtensionAdd( LONG iExtension ); virtual void OnExtensionDeleted( LONG iExtension ); virtual void OnExtensionUpdated( LONG iExtension ); // // CUIFWindow methods // virtual LPCTSTR GetClassName( void ); virtual LPCTSTR GetWndTitle( void ); virtual CUIFObject *Initialize( void ); virtual void Show( BOOL fShow ); virtual void OnCreate( HWND hWnd ); virtual void OnDestroy( HWND hWnd ); virtual void OnNCDestroy( HWND hWnd ); virtual void OnSysColorChange( void ); virtual LRESULT OnGetObject( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual LRESULT OnWindowPosChanged( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual LRESULT OnShowWindow( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual LRESULT OnObjectNotify( CUIFObject *pUIObj, DWORD dwCommand, LPARAM lParam ); virtual void OnUser(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); void InitCandidateList( void ); HRESULT ProcessCommand( CANDUICOMMAND cmd, INT iParam ); void DestroyWnd( void ); void OpenCandidateMenu( void ); BOOL FCandMenuOpen( void ); CCandMenu *GetCandMenu( void ); HICON GetIconMenu( void ); HICON GetIconPopupOn( void ); HICON GetIconPopupOff( void ); virtual CUIFCandListBase *GetUIOptionsListObj( void ) = 0; /* PURE */ virtual CUIFCandListBase *GetUIListObj( void ) = 0; /* PURE */ virtual void SetTargetRect( RECT *prc, BOOL fClipped ) = 0; /* PURE */ virtual void SetWindowPos( POINT pt ) = 0; /* PURE */ virtual void PrepareLayout( void ) = 0; /* PURE */ virtual void LayoutWindow( void ) = 0; /* PURE */ virtual void SelectItemNext( void ) = 0; /* PURE */ virtual void SelectItemPrev( void ) = 0; /* PURE */ virtual void SelectPageNext( void ) = 0; /* PURE */ virtual void SelectPagePrev( void ) = 0; /* PURE */ virtual CANDUICOMMAND MapCommand( CANDUICOMMAND cmd ) = 0; /* PURE */ virtual void UpdateAllWindow( void ); int OptionItemFromListItem( int iListItem ); int CandItemFromListItem( int iListItem ); int ListItemFromCandItem( int iCandItem ); virtual void OnMenuOpened( void ); virtual void OnMenuClosed( void ); virtual LRESULT WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { LRESULT lResult; AddRef(); lResult = CUIFWindow::WindowProc( hWnd, uMsg, wParam, lParam ); Release(); return lResult; } HRESULT IsIndexValid( int i, BOOL *pfValid ); protected: ULONG m_cRef; CCandidateUI *m_pCandUI; CCandAccessible *m_pCandAcc; CUIFButton *m_pCandMenuBtn; CCandMenu *m_pCandMenu; CUIFCandRawData *m_pCandRawData; BOOL m_fCandMenuOpen; BOOL m_fHasRawData; LONG m_nExtUIObj; RECT m_rcTarget; BOOL m_fTargetClipped; BOOL m_fOnSelectionChanged; HICON m_hIconMenu; HICON m_hIconPopupOn; HICON m_hIconPopupOff; HICON m_hIconCandTipOn; HICON m_hIconCandTipOff; CUIFObject *FindUIObject( DWORD dwID ); virtual void SetCandidateListProc( void ); virtual void ClearCandidateListProc( void ); virtual void SetSelectionProc( void ); BOOL SelectItemProc( INT iSel ); void SelectItemTop( void ); void SelectItemEnd( void ); HRESULT SelectOptionCandidate( void ); HRESULT SelectCandidate( void ); HRESULT CompleteOptionCandidate( void ); HRESULT CompleteCandidate( void ); HRESULT CancelCandidate( void ); virtual int GetMenuIconSize( void ); virtual void CreateExtensionObjects( void ); virtual void DeleteExtensionObjects( void ); virtual void SetExtensionObjectProps( void ); }; // // CCandWindow // = candidate window class = // class CCandWindow : public CCandWindowBase { public: CCandWindow( CCandidateUI *pCandUIEx, DWORD dwStyle ); virtual ~CCandWindow( void ); // // CUIFWindow methods // virtual HWND CreateWnd( HWND hWndParent ); virtual void Show( BOOL fShow ); virtual CUIFObject *Initialize( void ); virtual DWORD GetWndStyle( void ); virtual void OnTimer( UINT uiTimerID ); virtual void OnSysColorChange( void ); virtual LRESULT OnObjectNotify( CUIFObject *pUIObj, DWORD dwCommand, LPARAM lParam ); // // CCandWindowBase methods // virtual CUIFCandListBase *GetUIOptionsListObj( void ) { return (CUIFCandListBase*)m_pOptionsListUIObj; } virtual CUIFCandListBase *GetUIListObj( void ) { return (CUIFCandListBase*)m_pListUIObj; } virtual void SetTargetRect( RECT *prc, BOOL fClipped ); virtual void SetWindowPos( POINT pt ); virtual void PrepareLayout( void ); virtual void LayoutWindow( void ); virtual void SelectItemNext( void ); virtual void SelectItemPrev( void ); virtual void SelectPageNext( void ); virtual void SelectPagePrev( void ); virtual CANDUICOMMAND MapCommand( CANDUICOMMAND cmd ); virtual void UpdateAllWindow( void ); // // CCandUIObjectParent methods // virtual CCandWindowBase *GetCandWindowObj( void ); virtual CPopupCommentWindow *GetPopupCommentWindowObj( void ); virtual CUIFCandListBase *GetOptionsListBoxObj( void ); virtual CUIFCandListBase *GetCandListBoxObj( void ); virtual CUIFWndCaption *GetCaptionObj( void ); virtual CUIFButton *GetMenuButtonObj( void ); virtual CUIFCandListBase *GetExtraCandidateObj( void ); virtual CUIFCandRawData *GetCandRawDataObj( void ); virtual CUIFBalloonWindow *GetCandTipWindowObj( void ); virtual CUIFButton *GetCandTipButtonObj( void ); void ScrollPageNext( void ); void ScrollPagePrev( void ); void ScrollToTop( void ); void ScrollToEnd( void ); // // popup comment window callbacks // void OnCommentWindowMoved( void ); void OnCommentSelected( int iCandItem ); void OnCommentClose( void ); // // // virtual void OnMenuOpened( void ); virtual void OnMenuClosed( void ); protected: CUIFCandList *m_pOptionsListUIObj; CUIFCandList *m_pListUIObj; CUIFCandList *m_pExtListUIObj; CUIFWndFrame *m_pWndFrame; CUIFWndCaption *m_pCaptionObj; int m_cxWndOffset; int m_cyWndOffset; int m_nOptionsItemShow; int m_nItemShow; CPopupCommentWindow *m_pCommentWnd; BOOL m_fCommentWndOpen; int m_iItemAttensionSelect; int m_iItemAttensionHover; CUIFBalloonWindow *m_pCandTipWnd; CUIFButton *m_pCandTipBtn; BOOL m_fCandTipWndOpen; virtual void SetCandidateListProc( void ); virtual void ClearCandidateListProc( void ); // popup comment functions void SetOptionsAttensionByHover( int iItem ); void SetAttensionBySelect( int iItem ); void SetAttensionByHover( int iItem ); void OpenCommentWindow( int iItem ); void CloseCommentWindow( void ); void SetCommentStatus( int iItem ); void ClearCommentStatus( void ); void OpenCandTipWindow( void ); void CloseCandTipWindow( void ); void MoveCandTipWindow( void ); void ShowCandTipWindow( BOOL fShow ); }; // // // class CChsCandWindow : public CCandWindowBase { public: CChsCandWindow( CCandidateUI *pCandUIEx, DWORD dwStyle ); ~CChsCandWindow(); // // CUIFWindow methods // virtual CUIFObject *Initialize( void ); // // CCandWindowBase methods // virtual CUIFCandListBase *GetUIOptionsListObj( void ) { return (CUIFCandListBase*)m_pOptionsListUIObj; } virtual CUIFCandListBase *GetUIListObj( void ) { return (CUIFCandListBase*)m_pListUIObj; } virtual void SetTargetRect( RECT *prc, BOOL fClipped ); virtual void SetWindowPos( POINT pt ); virtual void PrepareLayout( void ) {} virtual void LayoutWindow( void ); virtual void SelectItemNext( void ); virtual void SelectItemPrev( void ); virtual void SelectPageNext( void ); virtual void SelectPagePrev( void ); virtual CANDUICOMMAND MapCommand( CANDUICOMMAND cmd ); // // CCandUIObjectParent methods // virtual CCandWindowBase *GetCandWindowObj( void ); virtual CPopupCommentWindow *GetPopupCommentWindowObj( void ); virtual CUIFCandListBase *GetOptionsListBoxObj( void ); virtual CUIFCandListBase *GetCandListBoxObj( void ); virtual CUIFWndCaption *GetCaptionObj( void ); virtual CUIFButton *GetMenuButtonObj( void ); virtual CUIFCandListBase *GetExtraCandidateObj( void ); virtual CUIFCandRawData *GetCandRawDataObj( void ); virtual CUIFBalloonWindow *GetCandTipWindowObj( void ); virtual CUIFButton *GetCandTipButtonObj( void ); protected: CUIFRowList *m_pOptionsListUIObj; CUIFRowList *m_pListUIObj; }; // // CCandUIObjectMgr // = CandidateUI UI object manager = // class CCandUIObjectMgr { public: CCandUIObjectMgr( void ); virtual ~CCandUIObjectMgr( void ); HRESULT Initialize( CCandidateUI *pCandUI ); HRESULT Uninitialize( void ); HRESULT AdviseEventSink( CCandUIObjectEventSink *pSink ); HRESULT UnadviseEventSink( CCandUIObjectEventSink *pSink ); void NotifyUIObjectEvent( CANDUIOBJECT obj, CANDUIOBJECTEVENT event ); __inline CCandWindowBase *GetCandWindowObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetCandWindowObj() : NULL; } __inline CPopupCommentWindow *GetPopupCommentWindowObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetPopupCommentWindowObj() : NULL; } __inline CUIFCandListBase *GetOptionsListBoxObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetOptionsListBoxObj() : NULL; } __inline CUIFCandListBase *GetCandListBoxObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetCandListBoxObj() : NULL; } __inline CUIFWndCaption *GetCaptionObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetCaptionObj() : NULL; } __inline CUIFButton *GetMenuButtonObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetMenuButtonObj() : NULL; } __inline CUIFCandListBase *GetExtraCandidateObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetExtraCandidateObj() : NULL; } __inline CUIFCandRawData *GetCandRawDataObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetCandRawDataObj() : NULL; } __inline CUIFBalloonWindow *GetCandTipWindowObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetCandTipWindowObj() : NULL; } __inline CUIFButton *GetCandTipButtonObj( void ) { return (m_pUIObjectParent != NULL) ? m_pUIObjectParent->GetCandTipButtonObj() : NULL; } // // // __inline CCandidateUI *GetCandidateUI( void ) { return m_pCandUI; } __inline SetUIObjectParent( CCandUIObjectParent *pUIObjectParent ) { m_pUIObjectParent = pUIObjectParent; } protected: CCandidateUI *m_pCandUI; CCandUIObjectEventSink *m_rgSink[ CANDUIOBJSINK_MAX ]; CCandUIObjectParent *m_pUIObjectParent; }; #endif // WCAND_H