279 lines
6.9 KiB
C++
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
|