|
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 ---
|