Files
Work/toolbar/TOOLBAR.CPP
2024-08-07 09:16:27 -04:00

289 lines
7.7 KiB
C++

#include <toolbar/toolbar.hpp>
#include <common/comctlex.hpp>
#include <common/rect.hpp>
ToolBar::ToolBar(void)
{
mSizeHandler.setCallback(this,&ToolBar::sizeHandler);
CommonControlsEx commonControlsEx;
commonControlsEx.flags(CommonControlsEx::InitBar);
commonControlsEx.initCommonControlsEx();
}
ToolBar::ToolBar(const ToolBar &someToolBar)
{ // private implementation
*this=someToolBar;
}
ToolBar::~ToolBar()
{
if(mParentWindow.isOkay())mParentWindow->removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
destroy();
}
ToolBar &ToolBar::operator=(const ToolBar &/*someToolBar*/)
{ // private implementation
return *this;
}
CallbackData::ReturnType ToolBar::sizeHandler(CallbackData &someCallbackData)
{
resize();
return (CallbackData::ReturnType)FALSE;
}
BOOL ToolBar::create(GUIWindow &parentWindow,UINT controlID,const Rect &initRect,UINT styles)
{
if(isValid())return FALSE;
mParentWindow=&parentWindow;
mParentWindow->insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
createControl(0L,TOOLBARCLASSNAME,String(),WS_CHILD|WS_BORDER|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|styles,initRect,parentWindow,controlID);
buttonStructSize();
return isValid();
}
BOOL ToolBar::addBitmap(const AddBitmap &addBitmap,UINT imageCount)const
{
if(!isValid())return FALSE;
return !(-1==sendMessage(TB_ADDBITMAP,imageCount,(LPARAM)&((AddBitmap&)addBitmap).getTBADDBITMAP()));
}
BOOL ToolBar::addBitmaps(Block<AddBitmap> &addBitmaps)const
{
TBADDBITMAP *pTBADDBITMAP;
BOOL result;
pTBADDBITMAP=::new TBADDBITMAP[addBitmaps.size()];
for(int bmIndex=0;bmIndex<addBitmaps.size();bmIndex++)
{
pTBADDBITMAP[bmIndex].hInst=addBitmaps[bmIndex].processInstance();
pTBADDBITMAP[bmIndex].nID=addBitmaps[bmIndex].bitmapID();
}
result=!(-1==sendMessage(TB_ADDBITMAP,addBitmaps.size(),(LPARAM)pTBADDBITMAP));
::delete[] pTBADDBITMAP;
return result;
}
BOOL ToolBar::addButton(const ToolBarButton &toolBarButton)const
{
if(!isValid())return FALSE;
return sendMessage(TB_ADDBUTTONS,1,(LPARAM)&((ToolBarButton&)toolBarButton).getTBBUTTON());
}
BOOL ToolBar::addButtons(Block<ToolBarButton> &toolBarButtons)const
{
BOOL result;
TBBUTTON *pTBBUTTONS;
pTBBUTTONS=::new TBBUTTON[toolBarButtons.size()];
for(int bmIndex=0;bmIndex<toolBarButtons.size();bmIndex++)
{
pTBBUTTONS[bmIndex].iBitmap=toolBarButtons[bmIndex].indexBitmap();
pTBBUTTONS[bmIndex].idCommand=toolBarButtons[bmIndex].commandID();
pTBBUTTONS[bmIndex].fsState=toolBarButtons[bmIndex].stateFlags();
pTBBUTTONS[bmIndex].fsStyle=toolBarButtons[bmIndex].style();
pTBBUTTONS[bmIndex].dwData=toolBarButtons[bmIndex].userData();
pTBBUTTONS[bmIndex].iString=toolBarButtons[bmIndex].indexString();
}
result=sendMessage(TB_ADDBUTTONS,toolBarButtons.size(),(LPARAM)pTBBUTTONS);
::delete[] pTBBUTTONS;
return result;
}
void ToolBar::buttonStructSize(void)const
{
if(!isValid())return;
sendMessage(TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0L);
}
void ToolBar::resize(void)const
{
if(!isValid())return;
sendMessage(TB_AUTOSIZE,0,0L);
}
WORD ToolBar::countButtons(void)const
{
if(!isValid())return FALSE;
return sendMessage(TB_BUTTONCOUNT,0,0L);
}
BOOL ToolBar::changeBitmap(WORD indexBitmapFrom,WORD indexBitmapTo)const
{
if(!isValid())return FALSE;
return sendMessage(TB_CHANGEBITMAP,(WPARAM)indexBitmapFrom,(LPARAM)MAKELPARAM(indexBitmapTo,0));
}
BOOL ToolBar::checkButton(UINT buttonID,BOOL checkState)const
{
if(!isValid())return FALSE;
return sendMessage(TB_CHECKBUTTON,(WPARAM)buttonID,(LPARAM)MAKELONG(checkState,0));
}
WORD ToolBar::getButtonIndex(UINT buttonID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_COMMANDTOINDEX,(WPARAM)buttonID,0L);
}
WORD ToolBar::getBitmapIndex(UINT buttonID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_GETBITMAP,(WPARAM)buttonID,0L);
}
void ToolBar::customize(void)const
{
if(!isValid())return;
sendMessage(TB_CUSTOMIZE,0,0L);
}
BOOL ToolBar::deleteButton(WORD indexButton)const
{
if(!isValid())return FALSE;
return sendMessage(TB_DELETEBUTTON,(WPARAM)indexButton,0L);
}
BOOL ToolBar::enableButton(UINT buttonID,BOOL enable)const
{
if(!isValid())return FALSE;
return sendMessage(TB_ENABLEBUTTON,(WPARAM)buttonID,(LPARAM)MAKELONG(enable,0));
}
BOOL ToolBar::setState(UINT buttonID,int state)
{
if(!isValid())return false;
return sendMessage(TB_SETSTATE,buttonID,MAKELONG(state,0L));
}
BOOL ToolBar::canHandleLargeBitmaps(void)const
{
if(!isValid())return FALSE;
return (TBBF_LARGE==sendMessage(TB_GETBITMAPFLAGS,0,0L));
}
BOOL ToolBar::getButtonInfo(WORD indexButton,ToolBarButton &toolBarButton)const
{
if(!isValid())return FALSE;
return sendMessage(TB_GETBUTTON,(WPARAM)indexButton,(LPARAM)&toolBarButton.getTBBUTTON());
}
BOOL ToolBar::getButtonText(WORD buttonID,String &strButtonText)const
{
String strCopyText;
BOOL returnCode(FALSE);
if(!isValid())return returnCode;;
returnCode=!(-1==sendMessage(TB_GETBUTTONTEXT,(WPARAM)buttonID,(LPARAM)(LPSTR)strCopyText));
if(returnCode)strButtonText=strCopyText;
return returnCode;
}
BOOL ToolBar::getItemRect(WORD indexButton,Rect &itemRect)const
{
if(!isValid())return FALSE;
return sendMessage(TB_GETITEMRECT,(WPARAM)indexButton,(LPARAM)(RECT*)itemRect);
}
WORD ToolBar::getRows(void)const
{
if(!isValid())return FALSE;
return sendMessage(TB_GETROWS,0,0L);
}
DWORD ToolBar::getButtonState(UINT buttonID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_GETSTATE,(WPARAM)buttonID,0L);
}
HANDLE ToolBar::getToolTipControl(void)const
{
if(!isValid())return FALSE;
return (HANDLE)sendMessage(TB_GETTOOLTIPS,0,0L);
}
BOOL ToolBar::hideButton(UINT buttonID,BOOL hide)const
{
if(!isValid())return FALSE;
return sendMessage(TB_HIDEBUTTON,(WPARAM)buttonID,(LPARAM)MAKELONG(hide,0));
}
BOOL ToolBar::indeterminate(UINT buttonID,BOOL isIndeterminate)const
{
if(!isValid())return FALSE;
return sendMessage(TB_INDETERMINATE,(WPARAM)buttonID,(LPARAM)MAKELONG(isIndeterminate,0));
}
BOOL ToolBar::insertButton(WORD indexButton,const ToolBarButton &toolBarButton)const
{
if(!isValid())return FALSE;
return sendMessage(TB_INSERTBUTTON,(WPARAM)indexButton,(LPARAM)&((ToolBarButton&)toolBarButton).getTBBUTTON());
}
BOOL ToolBar::isButtonChecked(UINT buttonID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_ISBUTTONCHECKED,(WPARAM)buttonID,0L);
}
BOOL ToolBar::isButtonEnabled(UINT buttonID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_ISBUTTONENABLED,(WPARAM)buttonID,0L);
}
BOOL ToolBar::isButtonHidden(UINT buttonID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_ISBUTTONHIDDEN,(WPARAM)buttonID,0L);
}
BOOL ToolBar::isButtonIndeterminate(UINT buttonID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_ISBUTTONINDETERMINATE,(WPARAM)buttonID,0L);
}
BOOL ToolBar::isButtonPressed(UINT buttonID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_ISBUTTONPRESSED,(WPARAM)buttonID,0L);
}
BOOL ToolBar::pressButton(UINT buttonID,BOOL pressed)const
{
if(!isValid())return FALSE;
return sendMessage(TB_PRESSBUTTON,(WPARAM)buttonID,(LPARAM)MAKELONG(pressed,0));
}
BOOL ToolBar::setBitmapSize(WORD xBitmap,WORD yBitmap)const
{
if(!isValid())return FALSE;
return sendMessage(TB_SETBITMAPSIZE,0,(LPARAM)MAKELONG(xBitmap,yBitmap));
}
BOOL ToolBar::setButtonSize(WORD xButton,WORD yButton)const
{
if(!isValid())return FALSE;
return sendMessage(TB_SETBUTTONSIZE,0,(LPARAM)MAKELONG(xButton,yButton));
}
BOOL ToolBar::setCommandID(WORD indexButton,UINT commandID)const
{
if(!isValid())return FALSE;
return sendMessage(TB_SETCMDID,(WPARAM)indexButton,(LPARAM)commandID);
}
void ToolBar::setParent(GUIWindow &parentWindow)const
{
if(!isValid())return;
sendMessage(TB_SETPARENT,(WPARAM)(HWND)parentWindow,0L);
}
void ToolBar::setToolTips(HANDLE hToolTips)const
{
if(!isValid())return;
sendMessage(TB_SETTOOLTIPS,(WPARAM)(HWND)hToolTips,0L);
}