Files
Work/tooltip/TOOLTIP.CPP
2024-08-07 09:16:27 -04:00

169 lines
4.5 KiB
C++

#include <tooltip/tooltip.hpp>
#include <common/winmsg.hpp>
#include <common/guiwnd.hpp>
#include <common/gdipoint.hpp>
#include <tooltip/toolinfo.hpp>
#include <tooltip/hittest.hpp>
ToolTip::ToolTip(GUIWindow &parentWindow,Style style)
: mNotifyHandler(this,&ToolTip::notifyHandler), mParentWindow(parentWindow),
mhControlWnd(0)
{
::InitCommonControls();
mParentWindow.insertHandler(VectorHandler::NotifyHandler,&mNotifyHandler);
createToolTip((int)style);
}
ToolTip::~ToolTip()
{
if(mhControlWnd){::DestroyWindow(mhControlWnd);mhControlWnd=0;}
mParentWindow.removeHandler(VectorHandler::NotifyHandler,&mNotifyHandler);
}
ToolTip &ToolTip::operator=(const ToolTip &/*someToolTip*/)
{ // no implementation
return *this;
}
void ToolTip::createToolTip(int style)
{
mhControlWnd=::CreateWindowEx(0,TOOLTIPS_CLASS,"",WS_VISIBLE|WS_POPUP|style,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
mParentWindow,0,mParentWindow.processInstance(),0);
}
void ToolTip::activate(WORD activate)const
{
if(!isOkay())return;
mParentWindow.sendMessage(mhControlWnd,TTM_ACTIVATE,(WPARAM)activate,(LPARAM)0);
}
WORD ToolTip::addTool(const PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return FALSE;
return mParentWindow.sendMessage(mhControlWnd,TTM_ADDTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
void ToolTip::delTool(const PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return;
mParentWindow.sendMessage(mhControlWnd,TTM_DELTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
WORD ToolTip::enumTools(UINT indexTool,const PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return FALSE;
return mParentWindow.sendMessage(mhControlWnd,TTM_ENUMTOOLS,(WPARAM)indexTool,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
WORD ToolTip::getCurrentTool(PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return FALSE;
return mParentWindow.sendMessage(mhControlWnd,TTM_GETCURRENTTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
void ToolTip::getText(PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return;
mParentWindow.sendMessage(mhControlWnd,TTM_GETTEXT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
DWORD ToolTip::getToolCount(void)const
{
if(!isOkay())return FALSE;
return mParentWindow.sendMessage(mhControlWnd,TTM_GETTOOLCOUNT,0,0L);
}
WORD ToolTip::getToolInfo(PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return FALSE;
return mParentWindow.sendMessage(mhControlWnd,TTM_GETTOOLINFO,0,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
WORD ToolTip::hitTest(const PureHitTestInfo &somePureHitTestInfo)const
{
if(!isOkay())return FALSE;
return mParentWindow.sendMessage(mhControlWnd,TTM_HITTEST,0,(LPARAM)&((TTHITTESTINFO&)((PureHitTestInfo&)somePureHitTestInfo)));
}
void ToolTip::newToolInfo(const PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return;
mParentWindow.sendMessage(mhControlWnd,TTM_NEWTOOLRECT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
void ToolTip::relayEvent(const WinMsg &someWinMsg)const
{
if(!isOkay())return;
mParentWindow.sendMessage(mhControlWnd,TTM_RELAYEVENT,0,(LPARAM)&((MSG&)((WinMsg&)someWinMsg)));
}
void ToolTip::setDelayTime(DelayFlag typeDelay,int timeDelay)const
{
if(!isOkay())return;
mParentWindow.sendMessage(mhControlWnd,TTM_SETDELAYTIME,(WPARAM)typeDelay,(LPARAM)timeDelay);
}
void ToolTip::setToolInfo(const PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return;
mParentWindow.sendMessage(mhControlWnd,TTM_SETTOOLINFO,0,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
void ToolTip::updateTipText(const PureToolInfo &somePureToolInfo)const
{
if(!isOkay())return;
mParentWindow.sendMessage(mhControlWnd,TTM_UPDATETIPTEXT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo));
}
HWND ToolTip::windowFromPoint(const GDIPoint &someGDIPoint)const
{
if(!isOkay())return (HWND)0;
return (HWND)mParentWindow.sendMessage(mhControlWnd,TTM_WINDOWFROMPOINT,0,(LPARAM)&((POINT&)someGDIPoint));
}
WORD ToolTip::isOkay(void)const
{
return (mhControlWnd?TRUE:FALSE);
}
CallbackData::ReturnType ToolTip::notifyHandler(CallbackData &someCallbackData)
{
NMHDR &nmHdr=*((NMHDR*)someCallbackData.lParam());
if(mhControlWnd==nmHdr.hwndFrom)
{
switch(nmHdr.code)
{
case TTN_NEEDTEXT :
ttnNeedText(nmHdr);
break;
case TTN_POP :
ttnPop(nmHdr);
break;
case TTN_SHOW :
ttnShow(nmHdr);
break;
default :
break;
}
}
return (CallbackData::ReturnType)FALSE;
}
// *** virtuals
void ToolTip::ttnNeedText(NMHDR &/*someNMHDR*/)
{
}
void ToolTip::ttnPop(NMHDR &/*someNMHDR*/)
{
}
void ToolTip::ttnShow(NMHDR &/*someNMHDR*/)
{
}