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.
 
 
 
 
 
 

342 lines
7.9 KiB

//
// cicbtn.cpp
//
// base code: nuibase sample
//
#include "private.h"
#include "globals.h"
#include "cicbtn.h"
#include "helpers.h"
#define CICBTN_ITEMSINK_COOKIE 0x80000003
//////////////////////////////////////////////////////////////////////////////
//
// CCicButton
//
//////////////////////////////////////////////////////////////////////////////
//+---------------------------------------------------------------------------
//
// dtor
//
//----------------------------------------------------------------------------
CCicButton::~CCicButton()
{
SafeRelease(m_plbiSink);
}
//+---------------------------------------------------------------------------
//
// InitInfo
//
//----------------------------------------------------------------------------
void CCicButton::InitInfo(REFCLSID rclsid,
REFGUID rguid,
DWORD dwStyle,
ULONG ulSort,
LPWSTR pszDesc)
{
// init nuiInfo.
m_lbiInfo.clsidService = rclsid;
m_lbiInfo.guidItem = rguid;
m_lbiInfo.dwStyle = dwStyle;
m_lbiInfo.ulSort = ulSort;
StringCchCopyW(m_lbiInfo.szDescription, ARRAYSIZE(m_lbiInfo.szDescription), pszDesc);
}
//+---------------------------------------------------------------------------
//
// GetType
//
//----------------------------------------------------------------------------
STDAPI CCicButton::GetInfo(TF_LANGBARITEMINFO *pInfo)
{
*pInfo = m_lbiInfo;
return S_OK;
}
//+---------------------------------------------------------------------------
//
// GetStatus
//
//----------------------------------------------------------------------------
STDAPI CCicButton::GetStatus(DWORD *pdwStatus)
{
*pdwStatus = m_dwStatus;
if (m_fEnable) // enable?
{
// do nothing
}
else
*pdwStatus |= TF_LBI_STATUS_DISABLED;
return S_OK;
}
//+---------------------------------------------------------------------------
//
// Show
//
//----------------------------------------------------------------------------
STDAPI CCicButton::Show(BOOL fShow)
{
ITfLangBarItemSink* pSink;
ShowInternal(fShow);
pSink = GetSink();
if (pSink)
pSink->OnUpdate(TF_LBI_STATUS);
return S_OK;
}
//+---------------------------------------------------------------------------
//
// AdviseSink
//
//----------------------------------------------------------------------------
HRESULT CCicButton::AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie)
{
HRESULT hr;
if (IsEqualIID(IID_ITfLangBarItemSink, riid))
{
if (m_plbiSink)
hr = CONNECT_E_CANNOTCONNECT;
else
{
hr = punk->QueryInterface(IID_ITfLangBarItemSink, (void **)&m_plbiSink);
if (SUCCEEDED(hr))
*pdwCookie = CICBTN_ITEMSINK_COOKIE;
}
}
else
hr = CONNECT_E_CANNOTCONNECT;
return hr;
}
//+---------------------------------------------------------------------------
//
// UnadviseSink
//
//----------------------------------------------------------------------------
HRESULT CCicButton::UnadviseSink(DWORD dwCookie)
{
if (CICBTN_ITEMSINK_COOKIE != dwCookie)
return E_FAIL;
if (!m_plbiSink)
return E_UNEXPECTED;
m_plbiSink->Release();
m_plbiSink = NULL;
return S_OK;
}
//+---------------------------------------------------------------------------
//
// Show
//
//----------------------------------------------------------------------------
HRESULT CCicButton::ShowInternal(BOOL fShow, BOOL fNotify)
{
m_fShown = fShow;
DWORD dwOldStatus = m_dwStatus;
if (fShow)
m_dwStatus &= ~TF_LBI_STATUS_HIDDEN;
else
m_dwStatus |= TF_LBI_STATUS_HIDDEN;
if (fNotify && (dwOldStatus != m_dwStatus) && m_plbiSink)
m_plbiSink->OnUpdate(TF_LBI_STATUS);
return S_OK;
}
//////////////////////////////////////////////////////////////////////////////
//
// CLBarItemButtonBase
//
//////////////////////////////////////////////////////////////////////////////
//+---------------------------------------------------------------------------
//
// IUnknown
//
//----------------------------------------------------------------------------
STDAPI CCicButton::QueryInterface(REFIID riid, void **ppvObj)
{
*ppvObj = NULL;
if (IsEqualIID(riid, IID_IUnknown) ||
IsEqualIID(riid, IID_ITfLangBarItem))
{
*ppvObj = SAFECAST(this, ITfLangBarItem *);
}
else if (IsEqualIID(riid, IID_ITfLangBarItemButton))
{
*ppvObj = SAFECAST(this, ITfLangBarItemButton *);
}
else if (IsEqualIID(riid, IID_ITfSource))
{
*ppvObj = SAFECAST(this, ITfSource *);
}
if (*ppvObj)
{
AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
STDAPI_(ULONG) CCicButton::AddRef()
{
return ++m_cRef;
}
#ifdef NEVER // each button object has this
STDAPI_(ULONG) CCicButton::Release()
{
long cr;
cr = --m_cRef;
Assert(cr >= 0);
if (cr == 0)
{
delete this;
}
return cr;
}
#endif // NEVER
//+---------------------------------------------------------------------------
//
// OnClick
//
//----------------------------------------------------------------------------
STDAPI CCicButton::OnClick(TfLBIClick click, POINT pt, const RECT *prcArea)
{
switch (click)
{
case TF_LBI_CLK_RIGHT:
return OnRButtonUp(pt, prcArea);
case TF_LBI_CLK_LEFT:
return OnLButtonUp(pt, prcArea);
}
return E_NOTIMPL;
}
//+---------------------------------------------------------------------------
//
// OnLButtonUp
//
//----------------------------------------------------------------------------
HRESULT CCicButton::OnLButtonUp(const POINT pt, const RECT *prcArea)
{
pt, prcArea; // no ref
return E_NOTIMPL;
}
//+---------------------------------------------------------------------------
//
// OnRButtonUp
//
//----------------------------------------------------------------------------
HRESULT CCicButton::OnRButtonUp(const POINT pt, const RECT *prcArea)
{
pt, prcArea; // no ref
return E_NOTIMPL;
}
//+---------------------------------------------------------------------------
//
// InitMenu
//
//----------------------------------------------------------------------------
STDAPI CCicButton::InitMenu(ITfMenu *pMenu)
{
pMenu; // no ref
return E_NOTIMPL;
}
//+---------------------------------------------------------------------------
//
// OnMenuSelect
//
//----------------------------------------------------------------------------
STDAPI CCicButton::OnMenuSelect(UINT uID)
{
uID; // no ref
return E_NOTIMPL;
}
//+---------------------------------------------------------------------------
//
// GetIcon
//
//----------------------------------------------------------------------------
STDAPI CCicButton::GetIcon(HICON *phIcon)
{
phIcon; // no ref
return E_NOTIMPL;
}
//+---------------------------------------------------------------------------
//
// GetText
//
//----------------------------------------------------------------------------
STDAPI CCicButton::GetText(BSTR *pbstrText)
{
if (!pbstrText)
return E_INVALIDARG;
*pbstrText = SysAllocString(m_szText);
return S_OK;
}
//+---------------------------------------------------------------------------
//
// GetTooltipString
//
//----------------------------------------------------------------------------
STDAPI CCicButton::GetTooltipString(BSTR *pbstrToolTip)
{
if (!pbstrToolTip)
return E_INVALIDARG;
*pbstrToolTip = SysAllocString(m_szToolTip);
return S_OK;
}