Author: dquintana Date: Mon Nov 3 16:05:09 2014 New Revision: 65226
URL: http://svn.reactos.org/svn/reactos?rev=65226&view=rev Log: [EXPLORER-NEW] * Move the CToolbar class into rosctrls.h, so we can make use of it in other parts of reactos.
Modified: branches/shell-experiments/base/shell/explorer-new/precomp.h branches/shell-experiments/base/shell/explorer-new/trayntfy.cpp branches/shell-experiments/include/reactos/rosctrls.h
Modified: branches/shell-experiments/base/shell/explorer-new/precomp.h URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/exp... ============================================================================== --- branches/shell-experiments/base/shell/explorer-new/precomp.h [iso-8859-1] (original) +++ branches/shell-experiments/base/shell/explorer-new/precomp.h [iso-8859-1] Mon Nov 3 16:05:09 2014 @@ -30,6 +30,7 @@ #include <strsafe.h> #include <undocuser.h> #include <undocshell.h> +#include <rosctrls.h>
#include "tmschema.h" #include "resource.h"
Modified: branches/shell-experiments/base/shell/explorer-new/trayntfy.cpp URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/exp... ============================================================================== --- branches/shell-experiments/base/shell/explorer-new/trayntfy.cpp [iso-8859-1] (original) +++ branches/shell-experiments/base/shell/explorer-new/trayntfy.cpp [iso-8859-1] Mon Nov 3 16:05:09 2014 @@ -21,8 +21,6 @@ #include "precomp.h" //#include <docobj.h>
-typedef unsigned short USHORT; - /* * SysPagerWnd */ @@ -36,87 +34,6 @@ NOTIFYICONDATA nicon_data; } SYS_PAGER_COPY_DATA, *PSYS_PAGER_COPY_DATA;
-template<typename TItemData> -class CToolbar : - public CWindowImpl < CToolbar<TItemData>, CWindow, CControlWinTraits> -{ - -public: - int GetItemCount() - { - return this->SendMessageW(TB_BUTTONCOUNT); - } - - DWORD GetButton(int index, TBBUTTON * btn) - { - return this->SendMessageW(TB_GETBUTTON, index, (LPARAM) btn); - } - - DWORD AddButton(TBBUTTON * btn) - { - return this->SendMessageW(TB_ADDBUTTONS, 1, (LPARAM) btn); - } - - DWORD AddButtons(int count, TBBUTTON * buttons) - { - return this->SendMessageW(TB_ADDBUTTONS, count, (LPARAM) buttons); - } - - DWORD InsertButton(int insertAt, TBBUTTON * btn) - { - return this->SendMessageW(TB_INSERTBUTTON, insertAt, (LPARAM) btn); - } - - DWORD MoveButton(int oldIndex, int newIndex) - { - return this->SendMessageW(TB_MOVEBUTTON, oldIndex, newIndex); - } - - DWORD DeleteButton(int index) - { - return this->SendMessageW(TB_DELETEBUTTON, index, 0); - } - - DWORD GetButtonInfo(int cmdId, TBBUTTONINFO * info) - { - return this->SendMessageW(TB_GETBUTTONINFO, cmdId, (LPARAM) info); - } - - DWORD SetButtonInfo(int cmdId, TBBUTTONINFO * info) - { - return this->SendMessageW(TB_SETBUTTONINFO, cmdId, (LPARAM) info); - } - -public: - DWORD SetButtonSize(int w, int h) - { - return this->SendMessageW(TB_SETBUTTONSIZE, 0, MAKELONG(w, h)); - } - -public: - DWORD AutoSize() - { - return this->SendMessageW(TB_AUTOSIZE); - } - -public: - TItemData * GetItemData(int index) - { - TBBUTTON btn; - GetButton(index, &btn); - return (TItemData*) btn.dwData; - } - - DWORD SetItemData(int index, TItemData * data) - { - TBBUTTONINFOW info = { 0 }; - info.cbSize = sizeof(info); - info.dwMask = TBIF_BYINDEX | TBIF_LPARAM; - info.lParam = (DWORD_PTR) data; - return SetButtonInfo(index, &info); - } -}; - class CNotifyToolbar : public CToolbar<NOTIFYICONDATA> { @@ -136,14 +53,14 @@ { }
- int GetVisibleItemCount() + int GetVisibleButtonCount() { return VisibleButtonCount; }
int FindItemByIconData(IN CONST NOTIFYICONDATA *iconData, NOTIFYICONDATA ** pdata) { - int count = GetItemCount(); + int count = GetButtonCount();
for (int i = 0; i < count; i++) { @@ -179,7 +96,7 @@ tbBtn.fsStyle = BTNS_NOPREFIX; tbBtn.dwData = (DWORD_PTR)notifyItem; tbBtn.iString = (INT_PTR) text; - tbBtn.idCommand = GetItemCount(); + tbBtn.idCommand = GetButtonCount();
if (iconData->uFlags & NIF_MESSAGE) { @@ -228,9 +145,6 @@ }
tbbi.cbSize = sizeof(tbbi); - tbbi.dwMask = TBIF_BYINDEX | TBIF_STATE; - GetButtonInfo(index, &tbbi); - tbbi.dwMask = TBIF_BYINDEX | TBIF_COMMAND; tbbi.idCommand = index;
@@ -258,19 +172,13 @@ tbbi.dwMask |= TBIF_STATE; if (iconData->dwState & NIS_HIDDEN) { - if ((tbbi.fsState & TBSTATE_HIDDEN) == 0) - { - tbbi.fsState |= TBSTATE_HIDDEN; - VisibleButtonCount--; - } + tbbi.fsState |= TBSTATE_HIDDEN; + VisibleButtonCount--; } else { - if ((tbbi.fsState & TBSTATE_HIDDEN) != 0) - { - tbbi.fsState &= ~TBSTATE_HIDDEN; - VisibleButtonCount++; - } + tbbi.fsState &= ~TBSTATE_HIDDEN; + VisibleButtonCount++; } }
@@ -389,34 +297,15 @@ WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | TBSTYLE_WRAPABLE | TBSTYLE_TRANSPARENT | CCS_TOP | CCS_NORESIZE | CCS_NOPARENTALIGN | CCS_NODIVIDER; - DWORD exStyles = WS_EX_TOOLWINDOW; - - HWND hWndToolbar = CreateWindowEx(exStyles, - TOOLBARCLASSNAME, - NULL, - styles, - 0, - 0, - 0, - 0, - hWndParent, - NULL, - hExplorerInstance, - NULL); - if (hWndToolbar != NULL) - { - SubclassWindow(hWndToolbar); - - SetWindowTheme(hWndToolbar, L"TrayNotify", NULL); - - /* Identify the version we're using */ - SendMessageW(TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); - - SysIcons = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1000); - SendMessageW(TB_SETIMAGELIST, 0, (LPARAM) SysIcons); - - SetButtonSize(ICON_SIZE, ICON_SIZE); - } + + Create(hWndParent, styles); + + SetWindowTheme(m_hWnd, L"TrayNotify", NULL); + + SysIcons = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1000); + SetImageList(SysIcons); + + SetButtonSize(ICON_SIZE, ICON_SIZE); } };
@@ -424,14 +313,11 @@ public CComObjectRootEx<CComMultiThreadModelNoCS>, public CWindowImpl < CSysPagerWnd, CWindow, CControlWinTraits > { - CNotifyToolbar * Toolbar; + CNotifyToolbar Toolbar;
public: - CSysPagerWnd() : - Toolbar(NULL) - { - } - virtual ~CSysPagerWnd() { } + CSysPagerWnd() {} + virtual ~CSysPagerWnd() {}
LRESULT DrawBackground(HDC hdc) { @@ -458,8 +344,7 @@
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { - Toolbar = new CNotifyToolbar(); - Toolbar->Initialize(m_hWnd); + Toolbar.Initialize(m_hWnd); return TRUE; }
@@ -483,17 +368,17 @@ { case NIM_ADD: { - Toolbar->AddButton(iconData); + Toolbar.AddButton(iconData); break; } case NIM_MODIFY: { - Toolbar->UpdateButton(iconData); + Toolbar.UpdateButton(iconData); break; } case NIM_DELETE: { - Toolbar->RemoveButton(iconData); + Toolbar.RemoveButton(iconData); break; } default: @@ -514,7 +399,7 @@ { INT rows = 0; TBMETRICS tbm; - int VisibleButtonCount = Toolbar->GetVisibleItemCount(); + int VisibleButtonCount = Toolbar.GetVisibleButtonCount();
if (wParam) /* horizontal */ { @@ -537,13 +422,13 @@ tbm.cxButtonSpacing = 0; tbm.cyButtonSpacing = 0;
- Toolbar->SendMessageW(TB_SETMETRICS, 0, (LPARAM) &tbm); + Toolbar.SetMetrics(&tbm); }
LRESULT OnGetInfoTip(INT uCode, LPNMHDR hdr, BOOL& bHandled) { NMTBGETINFOTIPW * nmtip = (NMTBGETINFOTIPW *) hdr; - Toolbar->GetTooltip(nmtip->iItem, nmtip->pszText, nmtip->cchTextMax); + Toolbar.GetTooltip(nmtip->iItem, nmtip->pszText, nmtip->cchTextMax); return TRUE; }
@@ -572,19 +457,18 @@
if (Toolbar) { - Toolbar->SetWindowPos(NULL, 0, 0, szClient.cx, szClient.cy, SWP_NOZORDER); - - Toolbar->AutoSize(); + Toolbar.SetWindowPos(NULL, 0, 0, szClient.cx, szClient.cy, SWP_NOZORDER); + Toolbar.AutoSize();
RECT rc; - Toolbar->GetClientRect(&rc); + Toolbar.GetClientRect(&rc);
SIZE szBar = { rc.right - rc.left, rc.bottom - rc.top };
INT xOff = (szClient.cx - szBar.cx) / 2; INT yOff = (szClient.cy - szBar.cy) / 2;
- Toolbar->SetWindowPos(NULL, xOff, yOff, szBar.cx, szBar.cy, SWP_NOZORDER); + Toolbar.SetWindowPos(NULL, xOff, yOff, szBar.cx, szBar.cy, SWP_NOZORDER); } return Ret; }
Modified: branches/shell-experiments/include/reactos/rosctrls.h URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/include/reacto... ============================================================================== --- branches/shell-experiments/include/reactos/rosctrls.h [iso-8859-1] (original) +++ branches/shell-experiments/include/reactos/rosctrls.h [iso-8859-1] Mon Nov 3 16:05:09 2014 @@ -196,3 +196,134 @@ }
}; + +template<typename TItemData> +class CToolbar : + public CWindow +{ +public: // Configuration methods + + HWND Create(HWND hWndParent, DWORD dwStyles = 0, DWORD dwExStyles = 0) + { + if (!dwStyles) + { + dwStyles = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN; + } + + if (!dwExStyles) + { + dwExStyles = WS_EX_TOOLWINDOW; + } + + m_hWnd = CreateWindowEx(dwExStyles, + TOOLBARCLASSNAME, + NULL, + dwStyles, + 0, + 0, + 0, + 0, + hWndParent, + NULL, + _AtlBaseModule.GetModuleInstance(), + NULL); + + if (!m_hWnd) + return NULL; + + /* Identify the version we're using */ + SetButtonStructSize(); + + return m_hWnd; + } + + DWORD SetButtonStructSize() + { + return SendMessageW(TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); + } + +public: // Button list management methods + int GetButtonCount() + { + return SendMessageW(TB_BUTTONCOUNT); + } + + DWORD GetButton(int index, TBBUTTON * btn) + { + return SendMessageW(TB_GETBUTTON, index, (LPARAM) btn); + } + + DWORD AddButton(TBBUTTON * btn) + { + return SendMessageW(TB_ADDBUTTONS, 1, (LPARAM) btn); + } + + DWORD AddButtons(int count, TBBUTTON * buttons) + { + return SendMessageW(TB_ADDBUTTONS, count, (LPARAM) buttons); + } + + DWORD InsertButton(int insertAt, TBBUTTON * btn) + { + return SendMessageW(TB_INSERTBUTTON, insertAt, (LPARAM) btn); + } + + DWORD MoveButton(int oldIndex, int newIndex) + { + return SendMessageW(TB_MOVEBUTTON, oldIndex, newIndex); + } + + DWORD DeleteButton(int index) + { + return SendMessageW(TB_DELETEBUTTON, index, 0); + } + + DWORD GetButtonInfo(int cmdId, TBBUTTONINFO * info) + { + return SendMessageW(TB_GETBUTTONINFO, cmdId, (LPARAM) info); + } + + DWORD SetButtonInfo(int cmdId, TBBUTTONINFO * info) + { + return SendMessageW(TB_SETBUTTONINFO, cmdId, (LPARAM) info); + } + +public: // Layout management methods + DWORD SetButtonSize(int w, int h) + { + return SendMessageW(TB_SETBUTTONSIZE, 0, MAKELONG(w, h)); + } + + DWORD AutoSize() + { + return SendMessageW(TB_AUTOSIZE); + } + +public: // Image list management methods + DWORD SetImageList(HIMAGELIST himl) + { + return SendMessageW(TB_SETIMAGELIST, 0, (LPARAM) himl); + } + + DWORD SetMetrics(TBMETRICS * tbm) + { + return SendMessageW(TB_SETMETRICS, 0, (LPARAM) tbm); + } + +public: // Utility methods + TItemData * GetItemData(int index) + { + TBBUTTON btn; + GetButton(index, &btn); + return (TItemData*) btn.dwData; + } + + DWORD SetItemData(int index, TItemData * data) + { + TBBUTTONINFOW info = { 0 }; + info.cbSize = sizeof(info); + info.dwMask = TBIF_BYINDEX | TBIF_LPARAM; + info.lParam = (DWORD_PTR) data; + return SetButtonInfo(index, &info); + } +};