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

279 lines
6.9 KiB
C++

#ifndef _WAVE_TRACKBAR_HPP_
#define _WAVE_TRACKBAR_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_WINDOW_HPP_
#include <common/window.hpp>
#endif
#ifndef _COMMON_RECTANGLE_HPP_
#include <common/rect.hpp>
#endif
#ifndef _COMMON_COMMCTRL_HPP_
#include <common/commctrl.hpp>
#endif
#ifndef _COMMON_STRING_HPP_
#include <common/string.hpp>
#endif
#ifndef _COMMON_RUBBERCONTROL_HPP_
#include <common/rubber.hpp>
#endif
class TrackBar : private RubberControl
{
public:
enum {TBSAutoTicks=TBS_AUTOTICKS,TBSVert=TBS_VERT,TBSHorz=TBS_HORZ,TBSTop=TBS_TOP,
TBSBottom=TBS_BOTTOM,TBSLeft=TBS_LEFT,TBSRight=TBS_RIGHT,TBSBoth=TBS_BOTH,
TBSNoTicks=TBS_NOTICKS,TBSEnableSelRange=TBS_ENABLESELRANGE,
TBSFixedLength=TBS_FIXEDLENGTH,TBSNoThumb=TBS_NOTHUMB};
enum HandlerType{NotifyBottom,NotifyEndTrack,NotifyLineDown,NotifyLineUp,NotifyTop,
NotifyPageDown,NotifyPageUp,NotifyThumbPosition,NotifyThumbTrack,HandlerCount};
TrackBar(void);
virtual ~TrackBar();
WORD createTrackBar(Window &parentWindow,Rect winRect=Rect(),int itemID=-1,WORD rubberControl=FALSE);
void clearSel(WORD redraw=TRUE)const;
void clearTics(WORD redraw=TRUE)const;
void getChannelRect(Rect &channelRect)const;
DWORD getLineSize(void)const;
DWORD getNumTics(void)const;
DWORD getPageSize(void)const;
DWORD getPos(void)const;
DWORD getPtrTics(void)const;
DWORD getRangeMax(void)const;
DWORD getRangeMin(void)const;
DWORD getSelEnd(void)const;
DWORD getSelStart(void)const;
DWORD getThumbLength(void)const;
void getThumbRect(Rect &thumbRect)const;
int getTic(WORD indexTic)const;
int getTicPos(WORD indexTic)const;
void setLineSize(LONG lineSize)const;
LONG setPageSize(LONG pageSize)const;
void setPos(LONG newPosition,WORD control=TRUE)const;
void setRange(WORD minPos,WORD maxPos,WORD redraw=TRUE)const;
void setRangeMax(LONG maxRange,WORD redraw=TRUE)const;
void setRangeMin(LONG minRange,WORD redraw=TRUE)const;
void setSel(WORD startPos,WORD endPos,WORD redraw=TRUE)const;
void setSelEnd(LONG endPos,WORD redraw=TRUE)const;
void setSelStart(LONG endPos,WORD redraw=TRUE)const;
void setThumbLength(UINT thumbLength)const;
WORD setTic(LONG position)const;
void setTicFreq(WORD frequency,LONG position)const;
WORD isOkay(void)const;
void insertHandler(HandlerType typeHandler,PureCallback *lpCallback);
protected:
Window &controlWindow(void);
private:
TrackBar(const TrackBar &someTrackBar);
TrackBar &operator=(const TrackBar &someTrackBar);
CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData);
CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData);
CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);
Callback<TrackBar> mHorizontalScrollHandler;
Callback<TrackBar> mVerticalScrollHandler;
Callback<TrackBar> mSizeHandler;
Block<CallbackPointer> mNotificationHandlers;
Window mTrackBar;
Window *mlpParentWindow;
};
inline
TrackBar::TrackBar(const TrackBar &/*someTrackBar*/)
{
}
inline
TrackBar &TrackBar::operator=(const TrackBar &/*someTrackBar*/)
{
return *this;
}
inline
void TrackBar::clearSel(WORD redraw)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_CLEARSEL,(WPARAM)redraw,0L);
}
inline
void TrackBar::clearTics(WORD redraw)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_CLEARTICS,(WPARAM)redraw,0L);
}
inline
void TrackBar::getChannelRect(Rect &channelRect)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_GETCHANNELRECT,0,(LPARAM)&((RECT&)channelRect));
}
inline
DWORD TrackBar::getLineSize(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETLINESIZE,0,0L);
}
inline
DWORD TrackBar::getNumTics(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETNUMTICS,0,0L);
}
inline
DWORD TrackBar::getPos(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETPOS,0,0L);
}
inline
DWORD TrackBar::getPtrTics(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETPTICS,0,0L);
}
inline
DWORD TrackBar::getRangeMax(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETRANGEMAX,0,0L);
}
inline
DWORD TrackBar::getRangeMin(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETRANGEMIN,0,0L);
}
inline
DWORD TrackBar::getSelEnd(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETSELEND,0,0L);
}
inline
DWORD TrackBar::getSelStart(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETSELSTART,0,0L);
}
inline
DWORD TrackBar::getThumbLength(void)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_GETTHUMBLENGTH,0,0L);
}
inline
void TrackBar::getThumbRect(Rect &thumbRect)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_GETTHUMBRECT,0,(LPARAM)&((RECT&)thumbRect));
}
inline
int TrackBar::getTic(WORD indexTic)const
{
if(!isOkay())return -1;
return mTrackBar.sendMessage(TBM_GETTIC,(WPARAM)indexTic,0L);
}
inline
int TrackBar::getTicPos(WORD indexTic)const
{
if(!isOkay())return -1;
return mTrackBar.sendMessage(TBM_GETTICPOS,(WPARAM)indexTic,0L);
}
inline
void TrackBar::setLineSize(LONG lineSize)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_SETLINESIZE,0,lineSize);
}
inline
LONG TrackBar::setPageSize(LONG pageSize)const
{
if(!isOkay())return -1;
return mTrackBar.sendMessage(TBM_SETPAGESIZE,0,pageSize);
}
inline
void TrackBar::setPos(LONG newPosition,WORD control)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_SETPOS,(WPARAM)control,(LPARAM)newPosition);
}
inline
void TrackBar::setRange(WORD minPos,WORD maxPos,WORD redraw)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_SETRANGE,(WPARAM)redraw,(LPARAM)MAKELONG(minPos,maxPos));
}
inline
void TrackBar::setRangeMax(LONG maxRange,WORD redraw)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_SETRANGEMAX,(WPARAM)redraw,maxRange);
}
inline
void TrackBar::setSel(WORD startPos,WORD endPos,WORD redraw)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_SETSEL,(WPARAM)redraw,(LPARAM)MAKELONG(startPos,endPos));
}
inline
void TrackBar::setSelEnd(LONG endPos,WORD redraw)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_SETSELEND,(WPARAM)redraw,(LPARAM)endPos);
}
inline
void TrackBar::setSelStart(LONG startPos,WORD redraw)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_SETSELSTART,(WPARAM)redraw,(LPARAM)startPos);
}
inline
void TrackBar::setThumbLength(UINT thumbLength)const
{
if(!isOkay())return;
mTrackBar.sendMessage(TBM_SETTHUMBLENGTH,(WPARAM)thumbLength,0L);
}
inline
WORD TrackBar::setTic(LONG position)const
{
if(!isOkay())return FALSE;
return mTrackBar.sendMessage(TBM_SETTIC,(WPARAM)0,(LPARAM)position);
}
inline
void TrackBar::insertHandler(HandlerType typeHandler,PureCallback *lpCallback)
{
mNotificationHandlers[typeHandler]=CallbackPointer(lpCallback);
}
inline
WORD TrackBar::isOkay(void)const
{
return mTrackBar.isValid();
}
#endif