From: <kr_...@us...> - 2003-08-16 00:56:18
|
Update of /cvsroot/htoolkit/port/src/cbits/Win32 In directory sc8-pr-cvs1:/tmp/cvs-serv20786/src/cbits/Win32 Modified Files: Frame.c ToolBar.c Util.c Added Files: DockBar.c DockBar.h Removed Files: ControlBar.c ControlBar.h Log Message: Rename ControlBar to DockBar --- NEW FILE: DockBar.c --- #include "Types.h" #include "Internals.h" #include "DockBar.h" #include "Handlers_stub.h" typedef struct { int nSize; int nOffset; HWND hWnd; } BarData; typedef struct { int nSize; int nOffset; int nBarCount; BarData *pBars; } BandData; typedef struct { int nBandCount; BandData *pBands; } DockBarData; static void RecalcDockBarLayout(DockBarData *pData, BOOL bVert) { int i, j; BarData *pBar; BandData *pBand; int nBarOffset, nBandOffset; SIZE sz; nBandOffset = 0; for (i = 0; i < pData->nBandCount; i++) { pBand = &pData->pBands[i]; pBand->nSize = 0; pBand->nOffset = nBandOffset; nBarOffset = 0; for (j = 0; j < pBand->nBarCount; j++) { pBar = &pBand->pBars[j]; GetToolBarSize(pBar->hWnd, &sz); pBar->nOffset = max(pBar->nOffset, nBarOffset); if (bVert) { pBand->nSize = max(pBand->nSize, sz.cx); pBar->nSize = sz.cy; SetWindowPos(pBar->hWnd,NULL,pBand->nOffset,pBar->nOffset,sz.cx,sz.cy,SWP_NOZORDER); } else { pBand->nSize = max(pBand->nSize, sz.cy); pBar->nSize = sz.cx; SetWindowPos(pBar->hWnd,NULL,pBar->nOffset,pBand->nOffset,sz.cx,sz.cy,SWP_NOZORDER); } nBarOffset = pBar->nOffset + pBar->nSize; } nBandOffset = pBand->nOffset + pBand->nSize; } } static int GetDockBarSize(HWND hDockBar) { int i, nSize; DockBarData *pData; nSize = 0; pData = (DockBarData *) GetWindowLong(hDockBar, GWL_USERDATA); RecalcDockBarLayout(pData, GetWindowLong(hDockBar, GWL_STYLE) & CCS_VERT); for (i = 0; i < pData->nBandCount; i++) nSize += pData->pBands[i].nSize; return nSize; } void RelayoutFrameBars() { RECT rect; FrameData *pData = (FrameData *) GetWindowLong(ghWndFrame,GWL_USERDATA); int nWidth, nHeight, nLeft, nTop, nRight, nBottom; GetClientRect(ghWndFrame, &rect); nWidth = rect.right-rect.left; nHeight = rect.bottom-rect.top; nLeft = GetDockBarSize(pData->hLeftBar); nTop = GetDockBarSize(pData->hTopBar); nRight = GetDockBarSize(pData->hRightBar); nBottom = GetDockBarSize(pData->hBottomBar); SetWindowPos(pData->hLeftBar, NULL,0,nTop,nLeft,nHeight-(nBottom+nTop),SWP_NOZORDER); SetWindowPos(pData->hTopBar, NULL,0,0,nWidth,nTop,SWP_NOZORDER); SetWindowPos(pData->hRightBar, NULL,nWidth-nRight,nTop,nRight,nHeight-(nBottom+nTop),SWP_NOZORDER); SetWindowPos(pData->hBottomBar,NULL,0,nHeight-nBottom,nWidth,nBottom,SWP_NOZORDER); SetWindowPos(pData->hClientWnd,NULL,nLeft,nTop,nWidth-(nRight+nLeft),nHeight-(nBottom+nTop),SWP_NOZORDER); } LRESULT CALLBACK HDockBarFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { DockBarData *pData = (DockBarData *) GetWindowLong(hWnd, GWL_USERDATA); switch (uMsg) { case WM_CREATE: { HMENU hMenu; if (((CREATESTRUCT *) lParam)->style & WS_CHILD) { pData = malloc(sizeof(DockBarData)); if (!pData) return -1; pData->nBandCount = 0; pData->pBands = NULL; SetWindowLong(hWnd, GWL_USERDATA, (LONG) pData); } hMenu = GetSystemMenu(hWnd, FALSE); if (hMenu) { DeleteMenu(hMenu, SC_RESTORE, MF_BYCOMMAND); DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND); DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND); DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND); AppendMenu(hMenu, MF_STRING, SC_CLOSE, "Hide"); } } break; case WM_DESTROY: if (pData) { int i; SetWindowLong(hWnd, GWL_USERDATA, 0); for (i = 0; i < pData->nBandCount; i++) free(pData->pBands[i].pBars); free(pData->pBands); free(pData); } break; case WM_CLOSE: ShowWindow(hWnd, SW_HIDE); return 0; case WM_COMMAND: { TBBUTTONINFO tbbi; HWND hToolBar = (HWND) lParam; tbbi.cbSize = sizeof(tbbi); tbbi.dwMask = TBIF_LPARAM; tbbi.lParam = 0; SendMessage(hToolBar, TB_GETBUTTONINFO, LOWORD(wParam), (LPARAM) &tbbi); handleToolCommand((WindowHandle) tbbi.lParam); } break; case WM_SIZE: if (!pData) { int nWidth = LOWORD(lParam); int nHeight = HIWORD(lParam); SetWindowPos(GetWindow(hWnd, GW_CHILD),NULL,0,0,nWidth,nHeight,SWP_NOZORDER); } break; case WM_NCLBUTTONDOWN: if (wParam == HTCAPTION) SendMessage(GetWindow(hWnd, GW_CHILD), uMsg, wParam, lParam); break; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } void DockToolBarToRect(HWND hDockBar, HWND hWnd, RECT rect) { int nBandNum; int nPosition; int nOffset; int nCentralOffset; DockBarData *pData = (DockBarData *) GetWindowLong(hDockBar, GWL_USERDATA); BOOL bVert = GetWindowLong(hDockBar, GWL_STYLE) & CCS_VERT; BandData *pBand; RecalcDockBarLayout(pData, bVert); if (bVert) { nOffset = rect.top; nCentralOffset = (rect.right-rect.left)/2; } else { nOffset = rect.left; nCentralOffset = (rect.bottom-rect.top)/2; } for (nBandNum = 0; nBandNum < pData->nBandCount; nBandNum++) { if (pData->pBands[nBandNum].nOffset <= nCentralOffset && nCentralOffset <= pData->pBands[nBandNum].nOffset+pData->pBands[nBandNum].nSize) break; } if (nBandNum >= pData->nBandCount) nPosition = 0; else { pBand = &pData->pBands[nBandNum]; if (nOffset < pBand->pBars[0].nOffset) nPosition = 0; else { for (nPosition = 1; nPosition < pBand->nBarCount; nPosition++) { if (nOffset < pBand->pBars[nPosition].nOffset) break; } } } DockToolBar(hDockBar, hWnd, nBandNum, nPosition, nOffset); } void DockToolBar(HWND hDockBar, HWND hWnd, int nBandNum, int nPosition, int nOffset) { BarData *pBar; BandData *pBand; DockBarData *pData = (DockBarData *) GetWindowLong(hDockBar, GWL_USERDATA); SetParent(hWnd, hDockBar); if (pData) { if (nBandNum >= pData->nBandCount) { pData->pBands = realloc(pData->pBands, (pData->nBandCount+1)*sizeof(BandData)); memset(pData->pBands+pData->nBandCount, 0, sizeof(BandData)); nBandNum = pData->nBandCount; pData->nBandCount++; } pBand = &pData->pBands[nBandNum]; if (nPosition >= pBand->nBarCount) nPosition = pBand->nBarCount; pBand->pBars = realloc(pBand->pBars, (pBand->nBarCount+1)*sizeof(BarData)); memmove(pBand->pBars+nPosition+1, pBand->pBars+nPosition, (pBand->nBarCount-nPosition)*sizeof(BarData)); pBand->nBarCount++; pBar = &pBand->pBars[nPosition]; memset(pBar, 0, sizeof(BarData)); pBar->nOffset = nOffset; pBar->hWnd = hWnd; RecalcDockBarLayout(pData, GetWindowLong(hWnd, GWL_STYLE) & CCS_VERT); } } void UndockToolBar(HWND hDockBar, HWND hWnd) { int i, j; BarData *pBar; BandData *pBand; DockBarData *pData = (DockBarData *) GetWindowLong(hDockBar, GWL_USERDATA); SetParent(hWnd, NULL); if (pData) { for (i = 0; i < pData->nBandCount; i++) { pBand = &pData->pBands[i]; for (j = 0; j < pBand->nBarCount; j++) { pBar = &pBand->pBars[j]; if (pBar->hWnd == hWnd) { memmove(pBand->pBars+j, pBand->pBars+j+1, (pBand->nBarCount-j-1)*sizeof(BarData)); pBand->pBars = realloc(pBand->pBars, (pBand->nBarCount-1)*sizeof(BarData)); pBand->nBarCount--; if (pBand->nBarCount == 0) { memmove(pData->pBands+i, pData->pBands+i+1, (pData->nBandCount-i-1)*sizeof(BandData)); pData->pBands = realloc(pData->pBands, (pData->nBandCount-1)*sizeof(BandData)); pData->nBandCount--; } return; } } } } else { DestroyWindow(hDockBar); } } --- NEW FILE: DockBar.h --- #ifndef CONTROLBAR_H #define CONTROLBAR_H void RelayoutFrameBars(); void DockToolBar(HWND hControlBar, HWND hWnd, int nBandNum, int nPosition, int nOffset); void DockToolBarToRect(HWND hControlBar, HWND hWnd, RECT rect); void UndockToolBar(HWND hControlBar, HWND hWnd); void GetToolBarSize(HWND hToolBar, SIZE *pSize); #endif Index: Frame.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/Win32/Frame.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** Frame.c 10 Aug 2003 18:36:04 -0000 1.12 --- Frame.c 15 Aug 2003 16:40:01 -0000 1.13 *************** *** 95,99 **** } ! pData->hLeftBar = CreateWindow("HCONTROLBAR", NULL, WS_CHILD | WS_VISIBLE | CCS_VERT, --- 95,99 ---- } ! pData->hLeftBar = CreateWindow("HDOCKBAR", NULL, WS_CHILD | WS_VISIBLE | CCS_VERT, *************** *** 103,107 **** (HANDLE) ghModule, NULL); ! pData->hTopBar = CreateWindow("HCONTROLBAR", NULL, WS_CHILD | WS_VISIBLE, --- 103,107 ---- (HANDLE) ghModule, NULL); ! pData->hTopBar = CreateWindow("HDOCKBAR", NULL, WS_CHILD | WS_VISIBLE, *************** *** 111,115 **** (HANDLE) ghModule, NULL); ! pData->hRightBar = CreateWindow("HCONTROLBAR", NULL, WS_CHILD | WS_VISIBLE | CCS_VERT, --- 111,115 ---- (HANDLE) ghModule, NULL); ! pData->hRightBar = CreateWindow("HDOCKBAR", NULL, WS_CHILD | WS_VISIBLE | CCS_VERT, *************** *** 119,123 **** (HANDLE) ghModule, NULL); ! pData->hBottomBar= CreateWindow("HCONTROLBAR", NULL, WS_CHILD | WS_VISIBLE, --- 119,123 ---- (HANDLE) ghModule, NULL); ! pData->hBottomBar= CreateWindow("HDOCKBAR", NULL, WS_CHILD | WS_VISIBLE, Index: ToolBar.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/Win32/ToolBar.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ToolBar.c 12 Aug 2003 21:10:08 -0000 1.11 --- ToolBar.c 15 Aug 2003 16:40:01 -0000 1.12 *************** *** 1,4 **** #include "ToolBar.h" ! #include "ControlBar.h" #include "Internals.h" #include "Handlers_stub.h" --- 1,4 ---- #include "ToolBar.h" ! #include "DockBar.h" #include "Internals.h" #include "Handlers_stub.h" *************** *** 366,374 **** } ! static BOOL CanDockBar(HWND hControlBar, RECT *pRect) { RECT rect; ! GetWindowRect(hControlBar, &rect); if (rect.left == rect.right ) rect.right++; if (rect.top == rect.bottom) rect.bottom++; --- 366,374 ---- } ! static BOOL CanDockBar(HWND hDockBar, RECT *pRect) { RECT rect; ! GetWindowRect(hDockBar, &rect); if (rect.left == rect.right ) rect.right++; if (rect.top == rect.bottom) rect.bottom++; *************** *** 377,381 **** } ! static DWORD CanDock(DockContext *pCtxt, HWND *phControlBar) { RECT rect; --- 377,381 ---- } ! static DWORD CanDock(DockContext *pCtxt, HWND *phDockBar) { RECT rect; *************** *** 393,397 **** if (CanDockBar(pData->hLeftBar, &rect)) { ! if (phControlBar) *phControlBar = pData->hLeftBar; return VERT; } --- 393,397 ---- if (CanDockBar(pData->hLeftBar, &rect)) { ! if (phDockBar) *phDockBar = pData->hLeftBar; return VERT; } *************** *** 399,403 **** if (CanDockBar(pData->hTopBar, &rect)) { ! if (phControlBar) *phControlBar = pData->hTopBar; return HORZ; } --- 399,403 ---- if (CanDockBar(pData->hTopBar, &rect)) { ! if (phDockBar) *phDockBar = pData->hTopBar; return HORZ; } *************** *** 405,409 **** if (CanDockBar(pData->hRightBar, &rect)) { ! if (phControlBar) *phControlBar = pData->hRightBar; return VERT; } --- 405,409 ---- if (CanDockBar(pData->hRightBar, &rect)) { ! if (phDockBar) *phDockBar = pData->hRightBar; return VERT; } *************** *** 411,415 **** if (CanDockBar(pData->hBottomBar, &rect)) { ! if (phControlBar) *phControlBar = pData->hBottomBar; return HORZ; } --- 411,415 ---- if (CanDockBar(pData->hBottomBar, &rect)) { ! if (phDockBar) *phDockBar = pData->hBottomBar; return HORZ; } *************** *** 465,469 **** RECT rect; HWND hToolBar; ! HWND hControlBar = NULL; LONG lStyle; char *szCaption; --- 465,469 ---- RECT rect; HWND hToolBar; ! HWND hDockBar = NULL; LONG lStyle; char *szCaption; *************** *** 473,481 **** lStyle = GetWindowLong(hToolBar, GWL_USERDATA); ! CanDock(pCtxt, &hControlBar); // undock the toolbar UndockToolBar(GetParent(hToolBar), hToolBar); ! if (hControlBar) { if (pCtxt->dwOverDockStyle & HORZ) --- 473,481 ---- lStyle = GetWindowLong(hToolBar, GWL_USERDATA); ! CanDock(pCtxt, &hDockBar); // undock the toolbar UndockToolBar(GetParent(hToolBar), hToolBar); ! if (hDockBar) { if (pCtxt->dwOverDockStyle & HORZ) *************** *** 485,493 **** SetWindowLong(hToolBar, GWL_USERDATA, (lStyle & ~(VERT | HORZ | FLOAT)) | pCtxt->dwOverDockStyle); ! ScreenToClient(hControlBar, ((POINT *) &rect)); ! ScreenToClient(hControlBar, ((POINT *) &rect)+1); // dock it at the specified position ! DockToolBarToRect(hControlBar, hToolBar, rect); } else --- 485,493 ---- SetWindowLong(hToolBar, GWL_USERDATA, (lStyle & ~(VERT | HORZ | FLOAT)) | pCtxt->dwOverDockStyle); ! ScreenToClient(hDockBar, ((POINT *) &rect)); ! ScreenToClient(hDockBar, ((POINT *) &rect)+1); // dock it at the specified position ! DockToolBarToRect(hDockBar, hToolBar, rect); } else *************** *** 511,516 **** } ! hControlBar = CreateWindowEx(WS_EX_TOOLWINDOW, ! "HCONTROLBAR", szCaption, WS_CAPTION | WS_POPUP | WS_VISIBLE | WS_SYSMENU | WS_THICKFRAME, --- 511,516 ---- } ! hDockBar = CreateWindowEx(WS_EX_TOOLWINDOW, ! "HDOCKBAR", szCaption, WS_CAPTION | WS_POPUP | WS_VISIBLE | WS_SYSMENU | WS_THICKFRAME, *************** *** 520,525 **** (HANDLE) ghModule, NULL); ! SetParent(hToolBar, hControlBar); ! SetWindowPos(hControlBar, NULL, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, SWP_NOZORDER); free(szCaption); --- 520,525 ---- (HANDLE) ghModule, NULL); ! SetParent(hToolBar, hDockBar); ! SetWindowPos(hDockBar, NULL, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, SWP_NOZORDER); free(szCaption); *************** *** 752,756 **** WindowHandle osCreateToolBar(char *name, DockPlace place, int band_num, int band_position, int offset) { ! HWND hControlBar, hWnd; FrameData *pFrameData = (FrameData *) GetWindowLong(ghWndFrame,GWL_USERDATA); LONG lStyle; --- 752,756 ---- WindowHandle osCreateToolBar(char *name, DockPlace place, int band_num, int band_position, int offset) { ! HWND hDockBar, hWnd; FrameData *pFrameData = (FrameData *) GetWindowLong(ghWndFrame,GWL_USERDATA); LONG lStyle; *************** *** 759,775 **** { case DockLeft: ! hControlBar = pFrameData->hLeftBar; lStyle = VERT; break; case DockTop: ! hControlBar = pFrameData->hTopBar; lStyle = HORZ; break; case DockRight: ! hControlBar = pFrameData->hRightBar; lStyle = VERT; break; case DockBottom: ! hControlBar = pFrameData->hBottomBar; lStyle = HORZ; break; --- 759,775 ---- { case DockLeft: ! hDockBar = pFrameData->hLeftBar; lStyle = VERT; break; case DockTop: ! hDockBar = pFrameData->hTopBar; lStyle = HORZ; break; case DockRight: ! hDockBar = pFrameData->hRightBar; lStyle = VERT; break; case DockBottom: ! hDockBar = pFrameData->hBottomBar; lStyle = HORZ; break; *************** *** 785,789 **** | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE | TBSTYLE_FLAT | TBSTYLE_LIST, 0,0,0,0, ! hControlBar, (HMENU) NULL, (HANDLE) ghModule, --- 785,789 ---- | TBSTYLE_TOOLTIPS | TBSTYLE_AUTOSIZE | TBSTYLE_FLAT | TBSTYLE_LIST, 0,0,0,0, ! hDockBar, (HMENU) NULL, (HANDLE) ghModule, *************** *** 793,797 **** SendMessage(hWnd, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_MIXEDBUTTONS); SetWindowText(hWnd, name); ! DockToolBar(hControlBar, hWnd, band_num, band_position, offset); return hWnd; } --- 793,797 ---- SendMessage(hWnd, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_MIXEDBUTTONS); SetWindowText(hWnd, name); ! DockToolBar(hDockBar, hWnd, band_num, band_position, offset); return hWnd; } Index: Util.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/Win32/Util.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** Util.c 10 Aug 2003 18:36:04 -0000 1.16 --- Util.c 15 Aug 2003 16:40:01 -0000 1.17 *************** *** 33,37 **** extern LRESULT CALLBACK HMDIWindowFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); extern LRESULT CALLBACK HDialogFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); ! extern LRESULT CALLBACK HControlBarFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); extern LRESULT CALLBACK HToolBarFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); --- 33,37 ---- extern LRESULT CALLBACK HMDIWindowFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); extern LRESULT CALLBACK HDialogFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); ! extern LRESULT CALLBACK HDockBarFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); extern LRESULT CALLBACK HToolBarFunction(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); *************** *** 112,118 **** RegisterClass(&wc); ! // ControlBar class wc.style = CS_DBLCLKS; ! wc.lpfnWndProc = HControlBarFunction; wc.cbClsExtra = 0; wc.cbWndExtra = 0; --- 112,118 ---- RegisterClass(&wc); ! // DockBar class wc.style = CS_DBLCLKS; ! wc.lpfnWndProc = HDockBarFunction; wc.cbClsExtra = 0; wc.cbWndExtra = 0; *************** *** 122,126 **** wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1); wc.lpszMenuName = NULL; ! wc.lpszClassName = "HCONTROLBAR"; RegisterClass(&wc); --- 122,126 ---- wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1); wc.lpszMenuName = NULL; ! wc.lpszClassName = "HDOCKBAR"; RegisterClass(&wc); --- ControlBar.c DELETED --- --- ControlBar.h DELETED --- |