Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

332 lines
7.9 KiB

//
// candext.h
//
#ifndef CANDEXT_H
#define CANDEXT_H
#include "propdata.h"
#include "candutil.h"
#include "mscandui.h"
#include "cuilib.h"
class CCandidateUI;
class CCandUIExtensionMgr;
class CCandUIExtensionEventSink;
#define CANDUIEXTENSIONSINK_MAX 4
//
// CCandUIExtension
// = CandidateUI extension (base class) =
//
class CCandUIExtension
{
public:
CCandUIExtension( CCandUIExtensionMgr *pExtensionMgr, LONG id );
virtual ~CCandUIExtension( void );
HRESULT GetID( LONG *pid );
HRESULT Enable( void );
HRESULT Disable( void );
HRESULT IsEnabled( BOOL *pfEnabled );
HRESULT Show( void );
HRESULT Hide( void );
HRESULT IsVisible( BOOL *pfVisible );
HRESULT SetPosition( POINT *pptPos );
HRESULT GetPosition( POINT *pptPos );
HRESULT SetFont( LOGFONTW *plf );
HRESULT GetFont( LOGFONTW *plf );
HRESULT SetText( BSTR bstr );
HRESULT GetText( BSTR *pbstr );
HRESULT SetToolTipString( BSTR bstr );
HRESULT GetToolTipString( BSTR *pbstr );
HRESULT GetSize( SIZE *psize );
HRESULT SetSize( SIZE *psize );
LONG GetID( void );
BOOL IsEnabled( void );
BOOL IsVisible( void );
HFONT GetFont( void );
LPCWSTR GetText( void );
LPCWSTR GetToolTipString( void );
//
// interface object functions
//
virtual HRESULT CreateInterfaceObject( REFGUID rguid, void **ppvObj ) = 0; /* PURE */
virtual HRESULT NotifyExtensionEvent( DWORD dwCommand, LPARAM lParam ) = 0; /* PURE */
//
// UIObject functions
//
virtual CUIFObject *CreateUIObject( CUIFObject *pParent, DWORD dwID, const RECT *prc ) = 0; /* PURE */
virtual void UpdateObjProp( CUIFObject *pUIObject ) = 0; /* PURE */
virtual void UpdateExtProp( CUIFObject *pUIObject ) = 0; /* PURE */
protected:
CCandUIExtensionMgr *m_pExtensionMgr;
struct
{
BOOL fAllowEnable : 1;
BOOL fAllowDisable : 1;
BOOL fAllowIsEnabled : 1;
BOOL fAllowShow : 1;
BOOL fAllowHide : 1;
BOOL fAllowIsVisible : 1;
BOOL fAllowSetPosition : 1;
BOOL fAllowGetPosition : 1;
BOOL fAllowSetSize : 1;
BOOL fAllowGetSize : 1;
BOOL fAllowSetFont : 1;
BOOL fAllowGetFont : 1;
BOOL fAllowSetText : 1;
BOOL fAllowGetText : 1;
BOOL fAllowSetToolTip : 1;
BOOL fAllowGetToolTip : 1;
BOOL : 0;
} m_flags;
CPropLong m_propID;
CPropBool m_propEnabled;
CPropBool m_propVisible;
CPropPoint m_propPos;
CPropFont m_propFont;
CPropText m_propText;
CPropText m_propToolTip;
CPropSize m_propSize;
__inline CCandUIExtensionMgr *GetExtensionMgr( void )
{
return m_pExtensionMgr;
}
};
//
// CExtensionButton
// = CandidateUI button extension (base class) =
//
class CExtensionButton : public CCandUIExtension
{
public:
CExtensionButton( CCandUIExtensionMgr *pExtMgr, LONG id );
virtual ~CExtensionButton( void );
HRESULT SetIcon( HICON hIcon );
HRESULT SetBitmap( HBITMAP hBitmap );
HRESULT GetToggleState( BOOL *pfToggled );
HRESULT SetToggleState( BOOL fToggle );
HICON GetIcon( void );
HBITMAP GetBitmap( void );
BOOL IsToggled( void );
void SetEventSink( ITfCandUIExtButtonEventSink *pSink )
{
SafeReleaseClear( m_pSink );
m_pSink = pSink;
m_pSink->AddRef();
}
ITfCandUIExtButtonEventSink *GetEventSink( void )
{
return m_pSink;
}
void ReleaseEventSink( void )
{
SafeReleaseClear( m_pSink );
}
protected:
struct
{
BOOL fAllowSetToggleState : 1;
BOOL fAllowGetToggleState : 1;
BOOL fAllowSetIcon : 1;
BOOL fAllowSetBitmap : 1;
BOOL : 0;
} m_flagsEx;
CPropBool m_propToggled;
HICON m_hIcon;
HBITMAP m_hBitmap;
ITfCandUIExtButtonEventSink *m_pSink;
};
//
// CExtensionSpace
// = CandidateUI spac extension =
//
class CExtensionSpace : public CCandUIExtension
{
public:
CExtensionSpace( CCandUIExtensionMgr *pExtMgr, LONG id );
virtual ~CExtensionSpace( void );
//
// interface object functions
//
virtual HRESULT CreateInterfaceObject( REFGUID rguid, void **ppvObj );
virtual HRESULT NotifyExtensionEvent( DWORD dwCommand, LPARAM lParam );
//
// UIObject functions
//
virtual CUIFObject *CreateUIObject( CUIFObject *pParent, DWORD dwID, const RECT *prc );
virtual void UpdateObjProp( CUIFObject *pUIObject );
virtual void UpdateExtProp( CUIFObject *pUIObject );
};
//
// CExtensionPushButton
// = CandidateUI push button extension =
//
class CExtensionPushButton : public CExtensionButton
{
public:
CExtensionPushButton( CCandUIExtensionMgr *pExtMgr, LONG id );
virtual ~CExtensionPushButton( void );
//
// interface object functions
//
virtual HRESULT CreateInterfaceObject( REFGUID rguid, void **ppvObj );
virtual HRESULT NotifyExtensionEvent( DWORD dwCommand, LPARAM lParam );
//
// UIObject functions
//
virtual CUIFObject *CreateUIObject( CUIFObject *pParent, DWORD dwID, const RECT *prc );
virtual void UpdateObjProp( CUIFObject *pUIObject );
virtual void UpdateExtProp( CUIFObject *pUIObject );
};
//
// CExtensionToggleButton
// = CandidateUI toggle button extension =
//
class CExtensionToggleButton : public CExtensionButton
{
public:
CExtensionToggleButton( CCandUIExtensionMgr *pExtMgr, LONG id );
virtual ~CExtensionToggleButton( void );
//
// interface object functions
//
virtual HRESULT CreateInterfaceObject( REFGUID rguid, void **ppvObj );
virtual HRESULT NotifyExtensionEvent( DWORD dwCommand, LPARAM lParam );
//
// UIObject functions
//
virtual CUIFObject *CreateUIObject( CUIFObject *pParent, DWORD dwID, const RECT *prc );
virtual void UpdateObjProp( CUIFObject *pUIObject );
virtual void UpdateExtProp( CUIFObject *pUIObject );
};
//
// CCandUIExtensionMgr
// = CandidateUI extension manager =
//
class CCandUIExtensionMgr
{
public:
CCandUIExtensionMgr( void );
virtual ~CCandUIExtensionMgr( void );
HRESULT Initialize( CCandidateUI *pCandUI );
HRESULT Uninitialize( void );
//
// event sink functions
//
HRESULT AdviseEventSink( CCandUIExtensionEventSink *pSink );
HRESULT UnadviseEventSink( CCandUIExtensionEventSink *pSink );
void NotifyExtensionAdd( LONG iExtension );
void NotifyExtensionDelete( LONG iExtension );
void NotifyExtensionUpdate( CCandUIExtension *pExtension );
//
// extension management functions
//
HRESULT AddExtObject( LONG id, REFIID riid, void **ppvObj );
HRESULT GetExtObject( LONG id, REFIID riid, void **ppvObj );
HRESULT DeleteExtObject( LONG id );
LONG GetExtensionNum( void );
CCandUIExtension *GetExtension( LONG iExtension );
CCandUIExtension *FindExtension( LONG id );
//
// UIObject functions
//
CUIFObject *CreateUIObject( LONG iExtension, CUIFObject *pParent, DWORD dwID, const RECT *prc );
void UpdateObjProp( LONG iExtension, CUIFObject *pUIObject );
void UpdateExtProp( LONG iExtension, CUIFObject *pUIObject );
//
//
//
__inline CCandidateUI *GetCandidateUI( void )
{
return m_pCandUI;
}
protected:
CCandidateUI *m_pCandUI;
CUIFObjectArray<CCandUIExtension> m_pExtensionList;
CCandUIExtensionEventSink *m_rgSink[ CANDUIEXTENSIONSINK_MAX ];
LONG IndexOfExtension( CCandUIExtension *pExtension );
};
//
// CCandUIExtensionEventSink
// = extension event sink =
//
class CCandUIExtensionEventSink
{
public:
CCandUIExtensionEventSink( void );
virtual ~CCandUIExtensionEventSink( void );
HRESULT InitEventSink( CCandUIExtensionMgr *pExtensionMgr );
HRESULT DoneEventSink( void );
//
// callback functions
//
virtual void OnExtensionAdd( LONG iExtension ) = 0; /* PURE */
virtual void OnExtensionDeleted( LONG iExtension ) = 0; /* PURE */
virtual void OnExtensionUpdated( LONG iExtension ) = 0; /* PURE */
protected:
CCandUIExtensionMgr *m_pExtensionMgr;
__inline CCandUIExtensionMgr *GetExtensionMgr( void )
{
return m_pExtensionMgr;
}
};
#endif // CANDEXT_H