123 lines
4.2 KiB
C++
123 lines
4.2 KiB
C++
#include <wave/trackbar.hpp>
|
|
#include <common/instance.hpp>
|
|
|
|
TrackBar::TrackBar(void)
|
|
: mHorizontalScrollHandler(this,&TrackBar::horizontalScrollHandler),
|
|
mVerticalScrollHandler(this,&TrackBar::verticalScrollHandler),
|
|
mSizeHandler(this,&TrackBar::sizeHandler),
|
|
mlpParentWindow(0)
|
|
{
|
|
for(short itemIndex=0;itemIndex<HandlerCount;itemIndex++)
|
|
mNotificationHandlers.insert(&CallbackPointer());
|
|
}
|
|
|
|
TrackBar::~TrackBar()
|
|
{
|
|
if(!mlpParentWindow)return;
|
|
mlpParentWindow->removeHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler);
|
|
mlpParentWindow->removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler);
|
|
mlpParentWindow->removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
|
}
|
|
|
|
WORD TrackBar::createTrackBar(Window &parentWindow,Rect winRect,int itemID,WORD rubberControl)
|
|
{
|
|
String className(String(TRACKBAR_CLASSA));
|
|
|
|
if(mTrackBar.isValid())return FALSE;
|
|
::InitCommonControls();
|
|
mlpParentWindow=&parentWindow;
|
|
mlpParentWindow->insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler);
|
|
mlpParentWindow->insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler);
|
|
if(rubberControl)mlpParentWindow->insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
|
if(!winRect.right()||!winRect.bottom())winRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT);
|
|
mTrackBar=::CreateWindowEx(WS_EX_CLIENTEDGE|WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR,
|
|
className,"",WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_TABSTOP|TBSAutoTicks|TBSBottom|TBSRight|TBSHorz|TBSEnableSelRange,
|
|
winRect.left(),winRect.top(),winRect.right(),winRect.bottom(),
|
|
parentWindow,(HMENU)itemID,parentWindow.processInstance(),0);
|
|
if(!mTrackBar.isValid())return FALSE;
|
|
initControl(parentWindow);
|
|
return TRUE;
|
|
}
|
|
|
|
CallbackData::ReturnType TrackBar::verticalScrollHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(LOWORD(someCallbackData.wParam()))
|
|
{
|
|
case TB_BOTTOM :
|
|
mNotificationHandlers[NotifyBottom].callback(someCallbackData);
|
|
break;
|
|
case TB_ENDTRACK :
|
|
mNotificationHandlers[NotifyEndTrack].callback(someCallbackData);
|
|
break;
|
|
case TB_LINEDOWN :
|
|
mNotificationHandlers[NotifyLineDown].callback(someCallbackData);
|
|
break;
|
|
case TB_LINEUP :
|
|
mNotificationHandlers[NotifyLineUp].callback(someCallbackData);
|
|
break;
|
|
case TB_PAGEDOWN :
|
|
mNotificationHandlers[NotifyPageDown].callback(someCallbackData);
|
|
break;
|
|
case TB_PAGEUP :
|
|
mNotificationHandlers[NotifyPageUp].callback(someCallbackData);
|
|
break;
|
|
case TB_THUMBPOSITION :
|
|
mNotificationHandlers[NotifyThumbPosition].callback(someCallbackData);
|
|
break;
|
|
case TB_THUMBTRACK :
|
|
mNotificationHandlers[NotifyThumbTrack].callback(someCallbackData);
|
|
break;
|
|
case TB_TOP :
|
|
mNotificationHandlers[NotifyTop].callback(someCallbackData);
|
|
break;
|
|
}
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType TrackBar::horizontalScrollHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(LOWORD(someCallbackData.wParam()))
|
|
{
|
|
case TB_BOTTOM :
|
|
mNotificationHandlers[NotifyBottom].callback(someCallbackData);
|
|
break;
|
|
case TB_ENDTRACK :
|
|
mNotificationHandlers[NotifyEndTrack].callback(someCallbackData);
|
|
break;
|
|
case TB_LINEDOWN :
|
|
mNotificationHandlers[NotifyLineDown].callback(someCallbackData);
|
|
break;
|
|
case TB_LINEUP :
|
|
mNotificationHandlers[NotifyLineUp].callback(someCallbackData);
|
|
break;
|
|
case TB_PAGEDOWN :
|
|
mNotificationHandlers[NotifyPageDown].callback(someCallbackData);
|
|
break;
|
|
case TB_PAGEUP :
|
|
mNotificationHandlers[NotifyPageUp].callback(someCallbackData);
|
|
break;
|
|
case TB_THUMBPOSITION :
|
|
mNotificationHandlers[NotifyThumbPosition].callback(someCallbackData);
|
|
break;
|
|
case TB_THUMBTRACK :
|
|
mNotificationHandlers[NotifyThumbTrack].callback(someCallbackData);
|
|
break;
|
|
case TB_TOP :
|
|
mNotificationHandlers[NotifyTop].callback(someCallbackData);
|
|
break;
|
|
}
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType TrackBar::sizeHandler(CallbackData &someCallbackData)
|
|
{
|
|
if(!mlpParentWindow)return (CallbackData::ReturnType)FALSE;
|
|
moveControl(*mlpParentWindow,someCallbackData.loWord(),someCallbackData.hiWord());
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
Window &TrackBar::controlWindow(void)
|
|
{
|
|
return mTrackBar;
|
|
}
|