Files
Work/wave/TRACKBAR.CPP
2024-08-07 09:16:27 -04:00

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;
}