diff options
Diffstat (limited to 'win/rfb_win32/ToolBar.cxx')
-rw-r--r-- | win/rfb_win32/ToolBar.cxx | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/win/rfb_win32/ToolBar.cxx b/win/rfb_win32/ToolBar.cxx new file mode 100644 index 00000000..6392ebdc --- /dev/null +++ b/win/rfb_win32/ToolBar.cxx @@ -0,0 +1,216 @@ +/* Copyright (C) 2004 TightVNC Team. All Rights Reserved. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +// -=- ToolBar control class. + +#include "ToolBar.h" + +using namespace rfb::win32; + +ToolBar::ToolBar() : hwndToolBar(0), tbID(-1) { + INITCOMMONCONTROLSEX icex; + + // Ensure that the common control DLL is loaded + icex.dwSize = sizeof(INITCOMMONCONTROLSEX); + icex.dwICC = ICC_BAR_CLASSES; + InitCommonControlsEx(&icex); +} + +ToolBar::~ToolBar() { + DestroyWindow(getHandle()); +} + +bool ToolBar::create(int _tbID, HWND _parentHwnd, DWORD dwStyle) { + parentHwnd = _parentHwnd; + dwStyle |= WS_CHILD; + + // Create the ToolBar window + hwndToolBar = CreateWindowEx(0, TOOLBARCLASSNAME, 0, dwStyle, + 0, 0, 25, 25, parentHwnd, (HMENU)_tbID, GetModuleHandle(0), 0); + + if (hwndToolBar) { + tbID = _tbID; + + // It's required for backward compatibility + SendMessage(hwndToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); + } + return (hwndToolBar ? true : false); +}; + +int ToolBar::addBitmap(int nButtons, UINT bitmapID) { + assert(nButtons > 0); + TBADDBITMAP resBitmap; + resBitmap.hInst = GetModuleHandle(0); + resBitmap.nID = bitmapID; + return SendMessage(getHandle(), TB_ADDBITMAP, nButtons, (LPARAM)&resBitmap); +} + +int ToolBar::addSystemBitmap(UINT stdBitmapID) { + TBADDBITMAP resBitmap; + resBitmap.hInst = HINST_COMMCTRL; + resBitmap.nID = stdBitmapID; + return SendMessage(getHandle(), TB_ADDBITMAP, 0, (LPARAM)&resBitmap); +} + +bool ToolBar::setBitmapSize(int width, int height) { + int result = SendMessage(getHandle(), TB_SETBITMAPSIZE, + 0, MAKELONG(width, height)); + return (result ? true : false); +} + +bool ToolBar::addButton(int iBitmap, int idCommand, BYTE state, BYTE style, UINT dwData, int iString) { + TBBUTTON tbb; + tbb.iBitmap = iBitmap; + tbb.idCommand = idCommand; + tbb.fsState = state; + tbb.fsStyle = style; + tbb.dwData = dwData; + tbb.iString = iString; + + int result = SendMessage(getHandle(), TB_ADDBUTTONS, 1, (LPARAM)&tbb); + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } + return (result ? true : false); +} + +bool ToolBar::addNButton(int nButtons, LPTBBUTTON tbb) { + assert(nButtons > 0); + assert(tbb > 0); + int result = SendMessage(getHandle(), TB_ADDBUTTONS, nButtons, (LPARAM)tbb); + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } + return (result ? true : false); +} + +bool ToolBar::deleteButton(int indexButton) { + assert(indexButton >= 0); + int result = SendMessage(getHandle(), TB_DELETEBUTTON, indexButton, 0); + + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } + return (result ? true : false); +} + +bool ToolBar::insertButton(int indexButton, LPTBBUTTON tbb) { + assert(indexButton >= 0); + assert(tbb > 0); + int result = SendMessage(getHandle(), TB_INSERTBUTTON, + indexButton, (LPARAM)tbb); + + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } + return (result ? true : false); +} + +int ToolBar::getButtonInfo(int idButton, TBBUTTONINFO *btnInfo) { + assert(idButton >= 0); + assert(btnInfo > 0); + return SendMessage(getHandle(), TB_GETBUTTONINFO, idButton, (LPARAM)btnInfo); +} + +int ToolBar::getButtonsHeight() { + return HIWORD(SendMessage(getHandle(), TB_GETBUTTONSIZE, 0, 0)); +} + +int ToolBar::getButtonsWidth() { + return LOWORD(SendMessage(getHandle(), TB_GETBUTTONSIZE, 0, 0)); +} + +bool ToolBar::setButtonInfo(int idButton, TBBUTTONINFO* btnInfo) { + assert(idButton >= 0); + assert(btnInfo > 0); + int result = SendMessage(getHandle(), TB_SETBUTTONINFO, + idButton, (LPARAM)(LPTBBUTTONINFO)btnInfo); + return (result ? true : false); +} + +bool ToolBar::checkButton(int idButton, bool check) { + assert(idButton >= 0); + int result = SendMessage(getHandle(), TB_CHECKBUTTON, + idButton, MAKELONG(check, 0)); + return (result ? true : false); +} + +bool ToolBar::enableButton(int idButton, bool enable) { + assert(idButton >= 0); + int result = SendMessage(getHandle(), TB_ENABLEBUTTON, + idButton, MAKELONG(enable, 0)); + return (result ? true : false); +} + +bool ToolBar::pressButton(int idButton, bool press) { + assert(idButton >= 0); + int result = SendMessage(getHandle(), TB_PRESSBUTTON, + idButton, MAKELONG(press, 0)); + return (result ? true : false); +} + +bool ToolBar::getButtonRect(int nIndex, LPRECT buttonRect) { + int result = SendMessage(getHandle(), TB_GETITEMRECT, + nIndex, (LPARAM)buttonRect); + return (result ? true : false); +} + +bool ToolBar::setButtonSize(int width, int height) { + assert(width > 0); + assert(height > 0); + int result = SendMessage(getHandle(), TB_SETBUTTONSIZE, + 0, MAKELONG(width, height)); + if (result) { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + return true; + } + return false; +} + +void ToolBar::autoSize() { + DWORD style = SendMessage(getHandle(), TB_GETSTYLE, 0, 0); + if (style & CCS_NORESIZE) { + RECT r, btnRect; + GetClientRect(parentHwnd, &r); + getButtonRect(0, &btnRect); + int height = getButtonsHeight() + btnRect.top * 2 + 2; + SetWindowPos(getHandle(), HWND_TOP, 0, 0, r.right - r.left, height, + SWP_NOMOVE); + } else { + SendMessage(getHandle(), TB_AUTOSIZE, 0, 0); + } +} + +int ToolBar::getHeight() { + RECT r; + GetWindowRect(getHandle(), &r); + return r.bottom - r.top; +} + +void ToolBar::show() { + ShowWindow(getHandle(), SW_SHOW); +} + +void ToolBar::hide() { + ShowWindow(getHandle(), SW_HIDE); +} + +bool ToolBar::isVisible() { + DWORD style = GetWindowLong(getHandle(), GWL_STYLE); + return (bool)(style & WS_VISIBLE); +} |