Release 980913
Fri Sep 11 13:14:35 1998 Andreas Mohr <100.30936@germany.net>
* [files/file.c] [include/file.h]
Fixed SetFilePointer to allow negative positions as in DOS.
* [graphics/ddraw.c]
Added some methods to IDirect3D.
* [ole/compobj.c] [if1632/compobj.spec]
Added/implemented CoCreateStandardMalloc16,
CoGetClassObject, CoCreateInstance,
LookupETask, SetETask, CoGetState16.
* [loader/task.c]
MakeProcInstance: return 0 if func == NULL.
* [*/*] [tools/winapi-check]
Added zillions of missing WINAPI's and __cdecl's.
(oops, several caused by myself)
Wrote script for automated checking.
* [if1632/compobj.spec]
Many stub names.
* [misc/ddeml.c] [ole/compobj.c]
Some stubs.
Tue Sep 9 21:36:48 1998 Anders Carlsson <anders.carlsson@linux.nu>
* [dlls/comctl32/Makefile.in] [dlls/comctl32/commctrl.c]
[dlls/comctl32/tab.c] [include/commctrl.h] [include/tab.h]
Added preliminary tab control support.
Sat Sep 5 16:27:20 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*]
More changes to the PostScript driver:
Implemented pens and solid brushes.
Colour/greyscale for fonts, pens and brushes.
To get coloured output you need to have *ColorDevice set to true
in your PPD, otherwise you'll get greyscale.
Landscape mode now works, as does non-A4 page sizes.
Encoding of fonts to ANSI is better, Symbol works again.
* [objects/dc.c] [include/gdi.h] [*/*]
Moved dc->w.{text,background}Pixel to X11DRV_PDEVICE where they
belong.
Sat Sep 5 05:12:09 1998 Ove Kaaven <ovek@arcticnet.no>
* [include/dosexe.h] [include/miscemu.h] [include/msdos.h]
[loader/dos/dosvm.c] [loader/dos/module.c] [msdos/dpmi.c]
[msdos/int2f.c] [msdos/interrupts.c]
Fixed portability. Adapted some code to make it easier to
integrate the DOS subsystem with the DPMI subsystem, made
the DPMI simulated real-mode interrupts be handled the V86
way. Added support for .COM files. Made int2f DPMI check
fail, to avoid pkunzip crashing in attempting to use DPMI.
Generally moved stuff around a little.
It is now technically possible to load several DOS programs
into the same memory space. Not tested, though.
Fri Sep 4 21:40:45 1998 Marcus Meissner <marcus@jet.franken.de>
* [if1632/kernel.spec]
Changed 500-53x stubnames accordingly to nt3.51 krnl386.exe.
* [win32/except.c]
Fixed one bad program behaviour, (deleting SEH while in
first walk). RtlUnwind is broken too I think (it should unwind
on success, not while walking the exception chain).
* [ole/ole2nls.c]
Get*DefaultLCID returns 0x400|id. expected by one application.
* [if1632/snoop.c]
Handle non-standard SP returns more graceful.
* [windows/class.c]
hinstances are mostly irrelevant for win32.
* [memory/string.c] [misc/registry.c]
lstrcmpi32W: use toupper for characters < 0x100. (speedup hack
for registry.c)
Some small speedup hacks for registry.c
Thu Sep 3 20:40:16 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [Makefile.in][configure][configure.in][dlls/Makefile.in]
[dlls/comctl32/Makefile.in]
Created dlls/comctl32 and moved the common controls stuff to it.
* [misc/version.c]
Removed COMCTL32_DllGetVersion. The fixed function is part
of the common controls stuff.
* [dlls/comctl32/*.c][include/commctrl.h]
Added structure size tests.
* [dlls/comctl32/toolbar.c]
Fixed a bug in TOOLBAR_GetMaxWidth().
* [dlls/comctl32/animate.c][include/animate.h]
[dlls/comctl32/comboex.c][include/comboex.h]
[dlls/comctl32/hotkey.c][include/hotkey.h]
[dlls/comctl32/listview.c][include/listview.h]
[dlls/comctl32/commctrl.c][include/commctrl.h]
New files. Added Animation, ComboBoxEx, Hotkey and
Listview control dummies.
* [dlls/comctl32/tooltips.c]
Fixed a display bug and font selection.
* [dlls/comctl32/comctl32undoc.c][include/commctrl.h]
Added missing DPA functions. Fixed bugs and published the
function prototypes.
* [documentation/common_controls]
Updated.
Wed Sep 2 15:43:45 1998 Patrik Stridvall <ps@leissner.se>
* [AUTHORS] [include/authors.h]
Added myself as a Wine author.
* [memory/virtual.c] [objects/dc.c]
Fixed runtime errors for Solaris.
* [misc/ddeml.c] [objects/gdiobj.c]
Minor fixes.
* [win32/device.c]
Added stubs for IFSMgr VxDCall and
a partial implementation of IFSMgr DeviceIo.
* [relay32/Makefile.in] [relay32/builtin32.c] [relay32/imm32.spec]
[relay32/msnet32.spec] [relay32/oledlg.spec]
Added new spec files for IMM32.DLL, MSNET32.DLL, OLEDLG.DLL.
* [misc/Makefile.in] [misc/imm.c] [include/imm.h]
Added news files for implementation of IMM32.DLL.
All functions return 0 as is correct for all Western Languages.
* [ole/Makefile.in] [ole/oledlg.c] [include/oledlg.h]
Added new files for implementation of OLEDLG.DLL.
Added stubs with FIXME:s for all functions.
Wed Sep 2 10:50:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [dlls/shell32/contmenu.c][dlls/shell32/shellole.c]
[dlls/shell32/shlfolder.c][dlls/shell32/shlview.c]
[documentation/shell32][include/shell.h]
Clean up, bugfixes.
* [dlls/shell32/enumidlist.c]
Fileattributes implemented.
* [dlls/shell32/pidl.c]
Class pidlmgr splited into functions, structures changed,
some functions rewritten.
* [dlls/shell32/shell32_main.c]
Small changes and bugfixes SHGetFileInfoA, SHGetSpecialFolderLocation.
* [dlls/shell32/shellord.c][relay32/shell32.spec]
Parameter documented, implemented SHCloneSpecialIDList.
Stub improved ShellExecuteEx32A.
New stubs SHFind_InitMenuPopup, FileMenu_InitMenuPopup,
FileMenu_Create, FileMenu_TrackPopupMenuEx, SHWinHelp,
SHRunConrolPanel, DAD_ShowDragImage, FileMenu_Destroy,
SHGetDataFromIDListA, SHFileOperationA.
* [include/winnls.h][include/ole2nls.c]
TIME_FORCE24HOURFORMAT, TIME_NOTIMEMARKER implemented
in OLE_GetFormatA, GetTimeFormat32A.
* [win32/code_page.c]
WideCharToMultiByte: parameter checking and returning of strlen
implemented.
* [windows/keyboard.c][windows/defwnd.c]
Debug messages added.
* [windows/win.c]
WIN_SetWindowLong GWL_STYLE and GWL_EXSTYLE implemented.
* [controls/menu.c]
Missing line added.
* [include/winerror.h]
Macros for SUCCEEDED and FAILED added.
Mon Aug 31 00:55:31 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de>
* [loader/module.c]
Bugfix: LoadModule16 should *not* call LoadModule32.
* [files/dos_fs.c]
Bugfix: don't crash if given directory doesn't exist.
Sat Aug 29 15:00:49 1998 Turchanov Sergey <turchanov@usa.net>
* [include/mmsystem.h][multimedia/mmsystem.c][relay32/winmm.spec]
Almost completed implementation of [snd]PlaySound (except
flags SND_ALIAS_ID and SND_APPLICATION).
* [if1632/user.spec][windows/winpos.c]
Added SetWindowRgn16 stub.
Sat Aug 29 02:53:31 1998 Alexander Lukyanov <lav@long.yar.ru>
* [files/drive.c]
GetDriveType32A: return DRIVE_DOESNOTEXIST in case of non
existent drive.
* [msdos/int21.c]
INT21_FindFirstFCB: check drive validity to prevent oops.
* [win32/file.c]
CreateFile32A: duplicate STD_{INPUT,OUTPUT}_HANDLE.
* [files/dos_fs.c]
Make DOSFS_OpenDir treat "" as "/".
DOSFS_OpenDevice: duplicate STD_{INPUT,OUTPUT}_HANDLE.
* [windows/dialog.c]
GetNextDlgTabItem32: use last/first item instead of first/last
when hwndCtrl==0. This fixes initial focus.
Sat Aug 29 02:46:32 1998 Adrian Harvey <adrian@select.com.au>
* [include/process.h] [include/process.c]
Renamed PROCESS_SELF to CURRENT_PROCESS_PSEUDOHANDLE in line
with thread constant, and Win32 documentation (which calls it
a pseudohandle.) Made GetCurrentProcess actually use this
constant instead of the value.
* [include/process.h] [include/thread.h] [scheduler/thread.c]
[scheduler/process.c] [scheduler/handle.c]
Modify HANDLE_GetObjPtr to understand about
CURRENT_THREAD_PSEUDOHANDLE and CURRENT_PROCESS_PSEUDOHANDLE.
This allows DuplicateHandle to do the correct thing with these
handles. Removed now duplicate functionality from THREAD_GetPtr
and PROCESS_GetPtr.
* [loader/ne/segment.c]
Fixed two places where HFILE32s were being created and passed to
16-bit code. This should unbreak NE self-loading code.
Added two casts to remove compile time warnings.
Fri Aug 28 21:04:13 1998 Joseph Pranevich <knight@baltimore.wwaves.com>
* [msdos/dosmem.c] [msdos/int2f.c]
Added beginnings of DOS error table.
* [msdos/int1a.c]
Stub for subfunction 0xb0.
* [msdos/int10.c] [loader/dos/dosvm.c]
INT 10 support completely rewritten and lots of debugging
added. Now, DOS apps that use INT 10 to write to the screen will
work. (Beyond Zork does, at least. Somewhat.)
* [include/miscemu.h] [msdos/dosmem.c] [msdos/int21.c]
Another shot at getting MS's generic error message facility
right.
* [msdos/int21.c]
Command.Com wanted to set its own PSP address. I let it.
Wed Aug 26 12:26:20 1998 Matthew Toseland <Matthew.Toseland@btinternet.com>
* [include/file.h] [misc/lzexpand.c]
Fixed LZCopy16 by fixing HFILE16/HFILE32 convertor macros so don't
convert lzw handles.
Tue Aug 25 22:22:55 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [misc/registry.c]
In RegEnumvalue, ivalue == 0 is a legal request and should
return the first entry.
* [msdos/int21.c]
Add handling for Int21-48/49 in Win16. Makes blinker demo work.
* [windows/winproc.c]
Add Msg32A<->Msg32W translation for LB_ADDSTRING.
Tue Aug 25 21:03:31 1998 Kristian Nielsen <kristian.nielsen@risoe.dk>
* [windows/win.c]
Fix for SetParent(): MS Windows 3.11 does not clear the WS_CHILD
flag when a child window is reparented to the desktop window.
Mon Aug 24 20:55:22 1998 Berend Reitsma <berend at asset-control dot com>
* [controls/menu.c]
Menus created with SetMenuItemInfo and InsertMenuItem should
work now.
Sun Aug 23 23:23:23 1998 Alex Korobka <korobka@ams.sunysb.edu>
* [controls/combo.c]
Added CB_GETITEMHEIGHT.
* [windows/winpos.c]
WM_NCHITTEST, SWP_FRAMECHANGED bugfixes.
Sat Aug 22 21:15:29 1998 Alex Priem <alexp@sci.kun.nl>
* [files/profile.c] [include/windows.h]
Added GetPrivateProfileSectionNames[AW],GetPrivateProfileSectionW,
GetPrivateProfileStructW, GetProfileSectionW,
WriteProfileSection[AW], WritePrivateProfileStructW.
diff --git a/controls/Makefile.in b/controls/Makefile.in
index a49d710..e2369d6 100644
--- a/controls/Makefile.in
+++ b/controls/Makefile.in
@@ -8,27 +8,14 @@
C_SRCS = \
button.c \
combo.c \
- comctl32undoc.c \
- commctrl.c \
desktop.c \
edit.c \
- header.c \
icontitle.c \
listbox.c \
- listview.c \
menu.c \
- pager.c \
- progress.c \
- rebar.c \
scroll.c \
static.c \
- status.c \
- toolbar.c \
- tooltips.c \
- trackbar.c \
- treeview.c \
uitools.c \
- updown.c \
widgets.c
all: $(MODULE).o
diff --git a/controls/combo.c b/controls/combo.c
index 1b8e1d7..b7a44db 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -129,6 +129,7 @@
return 0;
}
+
/***********************************************************************
* CBCalcPlacement
*
@@ -142,22 +143,6 @@
/* get combo height and width */
- if( lphc->editHeight )
- size.cy = lphc->editHeight;
- else
- {
- HDC32 hDC = GetDC32( lphc->self->hwndSelf );
- HFONT32 hPrevFont = 0;
-
- if( lphc->hFont ) hPrevFont = SelectObject32( hDC, lphc->hFont );
-
- GetTextExtentPoint32A( hDC, "0", 1, &size);
-
- size.cy += size.cy / 4 + 4 * SYSMETRICS_CYBORDER;
-
- if( hPrevFont ) SelectObject32( hDC, hPrevFont );
- ReleaseDC32( lphc->self->hwndSelf, hDC );
- }
size.cx = rect.right - rect.left;
if( CB_OWNERDRAWN(lphc) )
@@ -181,6 +166,23 @@
}
size.cy = u;
}
+ else if( lphc->editHeight ) /* explicitly set height */
+ size.cy = lphc->editHeight;
+ else
+ {
+ HDC32 hDC = GetDC32( lphc->self->hwndSelf );
+ HFONT32 hPrevFont = 0;
+
+ if( lphc->hFont ) hPrevFont = SelectObject32( hDC, lphc->hFont );
+
+ GetTextExtentPoint32A( hDC, "0", 1, &size);
+
+ size.cy += size.cy / 4 + 4 * SYSMETRICS_CYBORDER;
+
+ if( hPrevFont ) SelectObject32( hDC, hPrevFont );
+ ReleaseDC32( lphc->self->hwndSelf, hDC );
+ }
+
/* calculate text and button placement */
@@ -1419,10 +1421,17 @@
return SendMessage32A( lphc->hWndLBox, LB_FINDSTRINGEXACT32,
wParam, lParam );
case CB_SETITEMHEIGHT16:
- wParam = (INT32)(INT16)wParam;
+ wParam = (INT32)(INT16)wParam; /* signed integer */
case CB_SETITEMHEIGHT32:
return COMBO_SetItemHeight( lphc, (INT32)wParam, (INT32)lParam);
+ case CB_GETITEMHEIGHT16:
+ wParam = (INT32)(INT16)wParam;
+ case CB_GETITEMHEIGHT32:
+ if( (INT32)wParam >= 0 )
+ return SendMessage32A( lphc->hWndLBox, LB_GETITEMHEIGHT32, wParam, 0);
+ return (lphc->RectEdit.bottom - lphc->RectEdit.top);
+
case CB_RESETCONTENT16:
case CB_RESETCONTENT32:
SendMessage32A( lphc->hWndLBox, LB_RESETCONTENT32, 0, 0 );
diff --git a/controls/comctl32undoc.c b/controls/comctl32undoc.c
deleted file mode 100644
index aa5c83d..0000000
--- a/controls/comctl32undoc.c
+++ /dev/null
@@ -1,586 +0,0 @@
-/*
- * Undocumented functions from COMCTL32.DLL
- *
- * Copyright 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
- * 1998 Juergen Schmied <j.schmied@metronet.de>
- * NOTES
- * All of these functions are UNDOCUMENTED!! And I mean UNDOCUMENTED!!!!
- * Do NOT rely on names or contents of undocumented structures and types!!!
- * These functions are used by EXPLORER.EXE, IEXPLORE.EXE and
- * COMCTL32.DLL (internally).
- *
- * TODO
- * - Fix DSA_InsertItem.
- * - Fix DSA_GetItem.
- * - Write documentation.
- */
-
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include "windows.h"
-#include "heap.h"
-#include "debug.h"
-
-typedef struct _DPA_DATA
-{
- DWORD dwEntryCount;
- DWORD dwMaxCount;
- DWORD dwGrow;
- LPDWORD ptrs;
-} DPA_DATA, *LPDPA_DATA;
-
-
-DWORD WINAPI DPA_Create (DWORD);
-DWORD WINAPI DPA_GetPtr (DWORD, DWORD);
-DWORD WINAPI DPA_InsertPtr (DWORD, DWORD, DWORD);
-
-
-CRITICAL_SECTION cs_comctl_alloc;
-HANDLE32 hComctl32Heap=0;
-/**************************************************************************
- * Alloc [COMCTL32.71]
- *
- */
-
-LPVOID WINAPI COMCTL32_Alloc (DWORD dwParam)
-{ LPVOID lpPtr;
-
- TRACE (commctrl, "(0x%08lx)\n", dwParam);
-
- if (hComctl32Heap==0)
- { EnterCriticalSection((void*)&cs_comctl_alloc);
- hComctl32Heap=HeapCreate(0,1,0x4000000);
- LeaveCriticalSection((void*)&cs_comctl_alloc);
- TRACE (commctrl, "Heap created: 0x%08x\n", hComctl32Heap);
- if (! hComctl32Heap)
- return FALSE;
- }
-
-// lpPtr = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, dwParam);
- lpPtr = HeapAlloc (hComctl32Heap, HEAP_ZERO_MEMORY, dwParam);
- TRACE (commctrl, "-- ret=%p\n", lpPtr);
- return lpPtr;
-}
-
-
-/**************************************************************************
- * ReAlloc [COMCTL32.72]
- *
- */
-
-LPVOID WINAPI
-COMCTL32_ReAlloc (LPVOID dwParam1, DWORD dwParam2)
-{
- LPVOID dwPtr;
- TRACE (commctrl, "(0x%08lx 0x%08lx)\n",(DWORD)dwParam1, dwParam2);
-
- if (dwParam1 == 0)
- dwPtr = HeapAlloc (hComctl32Heap, HEAP_ZERO_MEMORY,
- dwParam2);
- else
- dwPtr = HeapReAlloc (hComctl32Heap, HEAP_ZERO_MEMORY,
- dwParam1, dwParam2);
-
- TRACE (commctrl, "-- ret=0x%08lx\n", (DWORD)dwPtr);
-
- return dwPtr;
-}
-
-
-/**************************************************************************
- * Free [COMCTL32.73]
- *
- */
-
-DWORD WINAPI
-COMCTL32_Free (LPVOID dwParam)
-{
- TRACE (commctrl, "(0x%08lx)\n", (DWORD)dwParam);
- HeapFree (hComctl32Heap, 0, dwParam);
-
- return 0;
-}
-
-
-/**************************************************************************
- * GetSize [COMCTL32.74]
- *
- */
-
-DWORD WINAPI
-COMCTL32_GetSize (LPVOID dwParam)
-{
- TRACE (commctrl, "(0x%08lx)\n", (DWORD)dwParam);
- return (HeapSize (hComctl32Heap, 0, dwParam));
-}
-
-
-
-/**************************************************************************
- * Str_SetPtrA [COMCTL32.234]
- *
- * PARAMS
- * dwParam1 [I]
- * dwParam2 [I]
- */
-
-BOOL32 WINAPI
-COMCTL32_Str_SetPtrA (LPSTR lpStr, LPVOID *lpPtr)
-{
- INT32 len;
- LPSTR ptr;
-
- FIXME (commctrl, "(0x%08lx 0x%08lx)\n", (DWORD)lpStr, (DWORD)lpPtr);
- FIXME (commctrl, "(\"%s\" \"%s\")\n", lpStr, (LPSTR)*lpPtr);
-
- if (lpStr) {
- len = lstrlen32A (lpStr);
- ptr = COMCTL32_ReAlloc (lpPtr, len + 1);
- if (!(ptr))
- return FALSE;
- lstrcpy32A (ptr, lpStr);
- *lpPtr = ptr;
- return TRUE;
- }
-
- if (*lpPtr) {
- COMCTL32_Free (*lpPtr);
- return TRUE;
- }
-
- return FALSE;
-}
-
-/*************************************************************************
-* The DSA-API is a set of functions to create and manipulate arrays of
-* fix sized memory blocks. This arrays can store any kind of data (strings,
-* icons...) so the name "dynamic string array" is a bit misleading.
-*
-* STATUS
-* complete
-*/
-typedef struct _DSA_DATA
-{ DWORD dwEntryCount;
- BYTE * pData;
- DWORD dwMaxCount;
- DWORD dwElementSize;
- DWORD dwGrow;
-} DSA_DATA, *LPDSA_DATA;
-
-/**************************************************************************
- * DSA_Create [COMCTL32.320] Creates a dynamic string array
- *
- * PARAMS
- * dwSize [I] size of the array elements
- * dwGrow [I]
- * RETURNS
- * pointer to a array control structure. use this like a handle.
- */
-
-LPDSA_DATA WINAPI DSA_Create (DWORD dwSize, DWORD dwGrow)
-{ LPDSA_DATA dsaPtr;
-
- TRACE (commctrl, "(size=0x%08lx grow=0x%08lx)\n", dwSize, dwGrow);
-
- if ((dsaPtr=(LPDSA_DATA)COMCTL32_Alloc(sizeof(DSA_DATA))));
- { dsaPtr->dwEntryCount=0x00;
- dsaPtr->pData=NULL;
- dsaPtr->dwMaxCount=0x00;
- dsaPtr->dwElementSize=dwSize;
- if ( dwGrow == 0 )
- dsaPtr->dwGrow=1;
- else
- dsaPtr->dwGrow=dwGrow;
- return dsaPtr;
- }
- return FALSE;
-}
-
-/**************************************************************************
- * DSA_Destroy [COMCTL32.321] Destroys a dynamic string array
- *
- * PARAMS
- * dsaPtr [I] pointer to the array control structure
- * RETURNS
- * TRUE if dsaPtr = NULL or success
- * FALSE if failure
- */
-
-BOOL32 WINAPI DSA_Destroy (const LPDSA_DATA dsaPtr )
-{ TRACE (commctrl, "(%p)\n", dsaPtr);
-
- if (! dsaPtr)
- return FALSE;
-
- if (dsaPtr->pData && (! COMCTL32_Free(dsaPtr->pData)))
- { return FALSE;
- }
- return COMCTL32_Free (dsaPtr);
-}
-
-/**************************************************************************
- * DSA_GetItem [COMCTL32.322]
- *
- * PARAMS
- * dsaPtr [I] pointer to the array control structure
- * dwItem [I] number of the Item to get
-+ * pDest [O] destination buffer. Has to be >= dwElementSize.
- */
-
-BOOL32 WINAPI DSA_GetItem (const LPDSA_DATA dsaPtr, DWORD dwItem, LPBYTE pDest)
-{ BYTE * pSrc;
-
- TRACE (commctrl, "(%p 0x%08lx %p)\n", dsaPtr, dwItem, pDest);
-
- if ( (!dsaPtr) || (dwItem < 0) || (dwItem >= dsaPtr->dwEntryCount))
- return FALSE;
-
- pSrc = dsaPtr->pData + (dsaPtr->dwElementSize * dwItem);
- memmove(pDest,pSrc,dsaPtr->dwElementSize);
- return TRUE;
-}
-
-/**************************************************************************
- * DSA_GetItemPtr [COMCTL32.323]
- *
- * PARAMS
- * dsaPtr [I] pointer to the array control structure
- * dwItem [I] number of the Item to get
- * RETURNS
- * pointer ti a item
- */
-LPBYTE WINAPI DSA_GetItemPtr (const LPDSA_DATA dsaPtr, DWORD dwItem)
-{ BYTE * pSrc;
-
- TRACE (commctrl, "(%p 0x%08lx)\n", dsaPtr, dwItem);
-
- if ((!dsaPtr) || (dwItem < 0) || (dwItem >= dsaPtr->dwEntryCount))
- return FALSE;
- pSrc = dsaPtr->pData + (dsaPtr->dwElementSize * dwItem);
-
- TRACE (commctrl, "-- ret=%p\n", pSrc);
-
- return pSrc;
-}
-
-/**************************************************************************
- * DSA_SetItem [COMCTL32.325]
- *
- * PARAMS
- * dsaPtr [I] pointer to the array control structure
- * dwItem [I] index for the new element
- * pSrc [I] the element
- */
-BOOL32 WINAPI DSA_SetItem (const LPDSA_DATA dsaPtr, DWORD dwItem, LPBYTE pSrc)
-{ LPBYTE pDest;
- DWORD dwSize, dwNewItems;
- LPBYTE lpTemp;
-
- TRACE (commctrl, "(%p 0x%08lx %p)\n", dsaPtr, dwItem, pSrc);
-
- if ((!dsaPtr) || dwItem<0 )
- return FALSE;
-
- if (dsaPtr->dwEntryCount <= dwItem) /* within the old array */
- { if ( dsaPtr->dwMaxCount > dwItem)
- { dsaPtr->dwEntryCount = dwItem; /* within the allocated space, set a new boundary */
- }
- else
- { /* resize the block of memory*/
- dwNewItems = dsaPtr->dwGrow * ( (WORD)((dwItem-1)/dsaPtr->dwGrow) +1);
- dwSize = dsaPtr->dwElementSize * dwNewItems;
- lpTemp = (LPBYTE) COMCTL32_ReAlloc(dsaPtr->pData,dwSize);
- if (! lpTemp )
- { return FALSE;
- }
- dsaPtr->dwMaxCount = dwNewItems;
- dsaPtr->pData = lpTemp;
- }
- }
- /* put the new entry in */
- pDest = dsaPtr->pData + (dsaPtr->dwElementSize * dwItem);
- TRACE (commctrl,"move dest=%p src=%p size=%x",pDest,pSrc,dsaPtr->dwElementSize);
- memmove(pDest,pSrc,dsaPtr->dwElementSize);
- return TRUE;
-}
-
-/**************************************************************************
- * DSA_InsertItem [COMCTL32.325]
- *
- * PARAMS
- * dsaPtr [I] pointer to the array control structure
- * dwItem [I] index for the new element
- * pSrc [I] the element
- *
- * RETURNS
- * the position of the new element
- */
-DWORD WINAPI DSA_InsertItem (const LPDSA_DATA dsaPtr, DWORD dwItem, LPBYTE pSrc)
-{ DWORD dwNewItems, dwSize,i;
- LPBYTE lpTemp, lpDest;
- LPDWORD p;
-
- TRACE(commctrl, "(%p 0x%08lx %p)\n", dsaPtr, dwItem, pSrc);
-
- if ( (!dsaPtr) || dwItem<0 )
- return -1;
-
- for (i=0; i<dsaPtr->dwElementSize;i+=4)
- { p = *(DWORD**)(pSrc+i);
- if ( IsBadStringPtr32A ((char*)p,256))
- { TRACE(commctrl,"-- 0x%04lx=%p\n",i,(DWORD*)p);
- }
- else
- { TRACE(commctrl,"-- 0x%04lx=%p [%s]\n",i,p,debugstr_a((char*)p));
- }
- }
-
- if (dwItem > dsaPtr->dwEntryCount) /* when dwItem > dwEntryCount then append*/
- dwItem = dsaPtr->dwEntryCount+1;
-
- if (dwItem >= dsaPtr->dwMaxCount) /* do we need to resize ? */
- { dwNewItems = dsaPtr->dwMaxCount + dsaPtr->dwGrow;
- dwSize = dsaPtr->dwElementSize * dwNewItems;
- lpTemp = (LPBYTE)COMCTL32_ReAlloc(dsaPtr->pData,dwSize);
- if (!lpTemp)
- { return -1;
- }
- dsaPtr->dwMaxCount = dwNewItems;
- dsaPtr->pData = lpTemp;
- }
-
- if (dwItem < dsaPtr->dwEntryCount) /* do we need to move elements ?*/
- { lpTemp = dsaPtr->pData + (dsaPtr->dwElementSize * dwItem);
- lpDest = lpTemp + dsaPtr->dwElementSize;
- TRACE (commctrl,"-- move dest=%p src=%p size=%x\n",lpDest,lpTemp,dsaPtr->dwElementSize);
- memmove (lpDest,lpTemp,dsaPtr->dwElementSize);
- }
- /* ok, we can put the new Item in*/
- dsaPtr->dwEntryCount++;
- lpDest = dsaPtr->pData + (dsaPtr->dwElementSize * dwItem);
- TRACE (commctrl,"-- move dest=%p src=%p size=%x\n",lpDest,pSrc,dsaPtr->dwElementSize);
- memmove (lpDest,pSrc,dsaPtr->dwElementSize);
- return dsaPtr->dwEntryCount;
-}
-/**************************************************************************
- * DSA_DeleteItem [COMCTL32.326]
- *
- * PARAMS
- * dsaPtr [I] pointer to the array control structure
- * dwItem [I] index for the element to delete
- * RETURNS
- * number of the element deleted
- */
-DWORD WINAPI DSA_DeleteItem (const LPDSA_DATA dsaPtr, DWORD dwItem)
-{ LPBYTE lpDest,lpSrc;
- DWORD dwSize;
-
- TRACE (commctrl, "(%p 0x%08lx)\n", dsaPtr, dwItem);
-
- if ( (! dsaPtr) || dwItem<0 || dwItem>=dsaPtr->dwEntryCount)
- return FALSE;
-
- if ( dwItem < dsaPtr->dwEntryCount-1 ) /* do we need to move ?*/
- { lpDest = dsaPtr->pData + (dsaPtr->dwElementSize * dwItem);
- lpSrc = lpDest + dsaPtr->dwElementSize;
- dwSize = dsaPtr->dwElementSize * (dsaPtr->dwEntryCount-dwItem-1);
- TRACE (commctrl,"-- move dest=%p src=%p size=%x\n",lpDest,lpSrc,dwSize);
- memmove (lpDest,lpSrc,dwSize);
- }
-
- dsaPtr->dwEntryCount--;
-
- if ( (dsaPtr->dwMaxCount-dsaPtr->dwEntryCount) >= dsaPtr->dwGrow) /* free memory ?*/
- { dwSize = dsaPtr->dwElementSize * dsaPtr->dwEntryCount;
- lpDest = (LPBYTE) COMCTL32_ReAlloc(dsaPtr->pData,dwSize);
- if (!lpDest)
- { return FALSE;
- }
- dsaPtr->dwMaxCount = dsaPtr->dwEntryCount;
- dsaPtr->pData = lpDest;
-
- }
- return dwItem;
-}
-
-/**************************************************************************
- * DSA_DeleteAllItems [COMCTL32.326]
- * deletes all elements and initializes array
- *
- * PARAMS
- * dsaPtr [I] pointer to the array control structure
- *
- * RETURNS
- * TRUE/FALSE
- */
-BOOL32 WINAPI DSA_DeleteAllItems (const LPDSA_DATA dsaPtr)
-{ TRACE (commctrl, "(%p)\n", dsaPtr);
-
- if (! dsaPtr)
- return FALSE;
-
- if (dsaPtr->pData && (! COMCTL32_Free(dsaPtr->pData)))
- { return FALSE;
- }
- dsaPtr->dwEntryCount=0x00;
- dsaPtr->pData=NULL;
- dsaPtr->dwMaxCount=0x00;
- return TRUE;
-}
-/**************************************************************************/
-
-
-DWORD WINAPI
-DPA_Create (DWORD dwParam1)
-{
- LPDPA_DATA dpaPtr;
-
- TRACE (commctrl, "(0x%08lx)\n", dwParam1);
-
- dpaPtr = (LPDPA_DATA)HeapAlloc (SystemHeap, HEAP_ZERO_MEMORY, sizeof(DPA_DATA));
- dpaPtr->dwGrow = dwParam1;
-
- TRACE (commctrl, "ret=0x%08lx\n", (DWORD)dpaPtr);
-
- return (DWORD)dpaPtr;
-}
-
-
-
-DWORD WINAPI
-DPA_GetPtr (DWORD dwParam1, DWORD dwParam2)
-{
- LPDPA_DATA dpaPtr = (LPDPA_DATA)dwParam1;
-
- TRACE (commctrl, "(0x%08lx 0x%08lx)\n", dwParam1, dwParam2);
-
- if (dpaPtr == NULL)
- return 0;
- if (dpaPtr->ptrs == NULL)
- return 0;
- if ((dwParam2 < 0) || (dwParam2 >= dpaPtr->dwEntryCount))
- return 0;
-
- TRACE (commctrl, "ret=0x%08lx\n", (DWORD)dpaPtr->ptrs[dwParam2]);
-
- return (DWORD)dpaPtr->ptrs[dwParam2];
-}
-
-
-
-DWORD WINAPI
-DPA_InsertPtr (DWORD dwParam1, DWORD dwParam2, DWORD dwParam3)
-{
- LPDPA_DATA dpaPtr = (LPDPA_DATA)dwParam1;
- DWORD dwIndex;
-
- TRACE (commctrl, "(0x%08lx 0x%08lx 0x%lx)\n",
- dwParam1, dwParam2, dwParam3);
-
- if (dpaPtr->ptrs == NULL) {
- dpaPtr->ptrs = (LPDWORD)HeapAlloc (SystemHeap, HEAP_ZERO_MEMORY,
- dpaPtr->dwGrow * sizeof(LPVOID));
- dpaPtr->dwMaxCount = dpaPtr->dwGrow;
- dwIndex = 0;
- dpaPtr->ptrs[dwIndex] = dwParam3;
- }
- else {
- FIXME (commctrl, "adding to existing array! stub!\n");
-
-
- dwIndex = dwParam2;
- }
-
- dpaPtr->dwEntryCount++;
-
- return (dwIndex);
-}
-
-
-/**************************************************************************
- * DPA_CreateEx [COMCTL32.340]
- *
- */
-
-DWORD WINAPI
-DPA_CreateEx (DWORD dwParam1, DWORD dwParam2)
-{
- FIXME (commctrl, "(0x%08lx 0x%08lx)\n",
- dwParam1, dwParam2);
-
- return 0;
-}
-
-
-/**************************************************************************
- * SendNotify [COMCTL32.341]
- *
- */
-
-DWORD WINAPI
-COMCTL32_SendNotify (DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4)
-{
- FIXME (commctrl, "(0x%08lx 0x%08lx 0x%08lx 0x%08lx)\n",
- dw1, dw2, dw3, dw4);
-
- return 0;
-}
-
-
-
-/**************************************************************************
- * StrChrA [COMCTL32.350]
- *
- */
-
-LPSTR WINAPI
-COMCTL32_StrChrA (LPCSTR lpString, CHAR cChar)
-{
- return strchr (lpString, cChar);
-}
-
-
-/**************************************************************************
- * StrStrIA [COMCTL32.355]
- */
-
-LPSTR WINAPI
-COMCTL32_StrStrIA (LPCSTR lpStr1, LPCSTR lpStr2)
-{
- INT32 len1, len2, i;
- CHAR first;
-
- if (*lpStr2 == 0)
- return ((LPSTR)lpStr1);
- len1 = 0;
- while (lpStr1[len1] != 0) ++len1;
- len2 = 0;
- while (lpStr2[len2] != 0) ++len2;
- if (len2 == 0)
- return ((LPSTR)(lpStr1 + len1));
- first = tolower (*lpStr2);
- while (len1 >= len2) {
- if (tolower(*lpStr1) == first) {
- for (i = 1; i < len2; ++i)
- if (tolower (lpStr1[i]) != tolower(lpStr2[i]))
- break;
- if (i >= len2)
- return ((LPSTR)lpStr1);
- }
- ++lpStr1; --len1;
- }
- return (NULL);
-}
-
-
-/**************************************************************************
- * StrToIntA [COMCTL32.357] Converts a string to a signed integer.
- */
-
-INT32 WINAPI
-COMCTL32_StrToIntA (LPSTR lpString)
-{
- return atoi(lpString);
-}
-
diff --git a/controls/commctrl.c b/controls/commctrl.c
deleted file mode 100644
index 629fc50..0000000
--- a/controls/commctrl.c
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- * Common controls functions
- *
- * Copyright 1997 Dimitrie O. Paun
- * Copyright 1998 Eric Kohl
- *
- */
-
-#include "win.h"
-#include "heap.h"
-#include "commctrl.h"
-#include "header.h"
-#include "listview.h"
-#include "pager.h"
-#include "progress.h"
-#include "rebar.h"
-#include "status.h"
-#include "toolbar.h"
-#include "tooltips.h"
-#include "trackbar.h"
-#include "treeview.h"
-#include "updown.h"
-#include "debug.h"
-
-
-/***********************************************************************
- * ComCtl32LibMain [Internal] Initializes the internal 'COMCTL32.DLL'.
- *
- * PARAMS
- * hinstDLL [I]
- * fdwReason [I]
- * lpvReserved [I]
- *
- */
-
-BOOL32 WINAPI
-ComCtl32LibMain (HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
- TRACE (commctrl, "%x,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
-
- switch (fdwReason) {
- case DLL_PROCESS_ATTACH:
- TRACE (commctrl, "No animation class implemented!\n");
- HEADER_Register ();
- TRACE (commctrl, "No hotkey class implemented!\n");
- LISTVIEW_Register ();
- PROGRESS_Register ();
- STATUS_Register ();
- TRACE (commctrl, "No tab class implemented!\n");
- TOOLBAR_Register ();
- TOOLTIPS_Register ();
- TRACKBAR_Register ();
- TREEVIEW_Register ();
- UPDOWN_Register ();
- break;
- }
-
- return TRUE;
-}
-
-
-/***********************************************************************
- * DrawStatusText32A [COMCTL32.5][COMCTL32.27]
- *
- * Draws text with borders, like in a status bar.
- *
- * PARAMS
- * hdc [I] handle to the window's display context
- * lprc [I] pointer to a rectangle
- * text [I] pointer to the text
- * style [I]
- */
-
-VOID WINAPI
-DrawStatusText32A (HDC32 hdc, LPRECT32 lprc, LPCSTR text, UINT32 style)
-{
- RECT32 r = *lprc;
- UINT32 border = BDR_SUNKENOUTER;
-
- if (style == SBT_POPOUT)
- border = BDR_RAISEDOUTER;
- else if (style == SBT_NOBORDERS)
- border = 0;
-
- DrawEdge32 (hdc, &r, border, BF_RECT|BF_ADJUST|BF_MIDDLE);
-
- /* now draw text */
- if (text) {
- int oldbkmode = SetBkMode32 (hdc, TRANSPARENT);
- r.left += 3;
- DrawText32A (hdc, text, lstrlen32A(text),
- &r, DT_LEFT|DT_VCENTER|DT_SINGLELINE);
- if (oldbkmode != TRANSPARENT)
- SetBkMode32(hdc, oldbkmode);
- }
-}
-
-
-/***********************************************************************
- * DrawStatusText32W [COMCTL32.28]
- *
- * Draws text with borders, like in a status bar.
- *
- * PARAMS
- * hdc [I] handle to the window's display context
- * lprc [I] pointer to a rectangle
- * text [I] pointer to the text
- * style [I]
- */
-
-VOID WINAPI
-DrawStatusText32W (HDC32 hdc, LPRECT32 lprc, LPCWSTR text, UINT32 style)
-{
- LPSTR p = HEAP_strdupWtoA( GetProcessHeap(), 0, text );
- DrawStatusText32A(hdc, lprc, p, style);
- HeapFree( GetProcessHeap(), 0, p );
-}
-
-
-/***********************************************************************
- * CreateStatusWindow32A [COMCTL32.6][COMCTL32.21]
- */
-HWND32 WINAPI CreateStatusWindow32A( INT32 style, LPCSTR text, HWND32 parent,
- UINT32 wid )
-{
- return CreateWindow32A(STATUSCLASSNAME32A, text, style,
- CW_USEDEFAULT32, CW_USEDEFAULT32,
- CW_USEDEFAULT32, CW_USEDEFAULT32,
- parent, wid, 0, 0);
-}
-
-
-/***********************************************************************
- * CreateStatusWindow32W (COMCTL32.22)
- */
-HWND32 WINAPI CreateStatusWindow32W( INT32 style, LPCWSTR text, HWND32 parent,
- UINT32 wid )
-{
- return CreateWindow32W((LPCWSTR)STATUSCLASSNAME32W, text, style,
- CW_USEDEFAULT32, CW_USEDEFAULT32,
- CW_USEDEFAULT32, CW_USEDEFAULT32,
- parent, wid, 0, 0);
-}
-
-/***********************************************************************
- * CreateUpDownControl (COMCTL32.16)
- */
-HWND32 WINAPI CreateUpDownControl( DWORD style, INT32 x, INT32 y,
- INT32 cx, INT32 cy, HWND32 parent,
- INT32 id, HINSTANCE32 inst, HWND32 buddy,
- INT32 maxVal, INT32 minVal, INT32 curVal )
-{
- HWND32 hUD = CreateWindow32A(UPDOWN_CLASS32A, 0, style, x, y, cx, cy,
- parent, id, inst, 0);
- if(hUD){
- SendMessage32A(hUD, UDM_SETBUDDY, buddy, 0);
- SendMessage32A(hUD, UDM_SETRANGE, 0, MAKELONG(maxVal, minVal));
- SendMessage32A(hUD, UDM_SETPOS, 0, MAKELONG(curVal, 0));
- }
-
- return hUD;
-}
-
-
-/***********************************************************************
- * InitCommonControls [COMCTL32.17]
- *
- * Registers the common controls.
- *
- * PARAMS
- * None.
- *
- * NOTES
- * This function is just a dummy.
- * The Win95 controls are registered at the DLL's initialization.
- * To register other controls InitCommonControlsEx must be used.
- */
-
-VOID WINAPI
-InitCommonControls (VOID)
-{
-}
-
-
-/***********************************************************************
- * InitCommonControlsEx [COMCTL32.81]
- *
- * Registers the common controls.
- *
- * PARAMS
- * lpInitCtrls [I] pointer to a INITCOMMONCONTROLS structure.
- *
- * NOTES
- * Only the additinal common controls are registered by this function.
- * The Win95 controls are registered at the DLL's initialization.
- */
-
-BOOL32 WINAPI
-InitCommonControlsEx (LPINITCOMMONCONTROLSEX lpInitCtrls)
-{
- INT32 cCount;
- DWORD dwMask;
-
- TRACE(commctrl,"\n");
-
- if (lpInitCtrls == NULL) return FALSE;
- if (lpInitCtrls->dwSize < sizeof(INITCOMMONCONTROLSEX)) return FALSE;
-
- for (cCount = 0; cCount < 32; cCount++) {
- dwMask = 1 << cCount;
- if (!(lpInitCtrls->dwICC & dwMask))
- continue;
-
- switch (lpInitCtrls->dwICC & dwMask) {
- /* dummy initialization */
- case ICC_ANIMATE_CLASS:
- case ICC_BAR_CLASSES:
- case ICC_LISTVIEW_CLASSES:
- case ICC_TREEVIEW_CLASSES:
- case ICC_TAB_CLASSES:
- case ICC_UPDOWN_CLASS:
- case ICC_PROGRESS_CLASS:
- case ICC_HOTKEY_CLASS:
- break;
-
- /* advanced classes - not included in Win95 */
- case ICC_DATE_CLASSES:
- TRACE (commctrl, "No month calendar class implemented!\n");
- TRACE (commctrl, "No date picker class implemented!\n");
- TRACE (commctrl, "No time picker class implemented!\n");
- UPDOWN_Register ();
- break;
-
- case ICC_USEREX_CLASSES:
- TRACE (commctrl, "No comboex class implemented!\n");
- break;
-
- case ICC_COOL_CLASSES:
- REBAR_Register ();
- break;
-
- case ICC_INTERNET_CLASSES:
- TRACE (commctrl, "No IPAddress class implemented!\n");
- break;
-
- case ICC_PAGESCROLLER_CLASS:
- PAGER_Register ();
- break;
-
- case ICC_NATIVEFNTCTL_CLASS:
- TRACE (commctrl, "No native font class implemented!\n");
- break;
-
- default:
- WARN (commctrl, "Unknown class! dwICC=0x%lX\n", dwMask);
- break;
- }
- }
-
- return TRUE;
-}
-
-
-/***********************************************************************
- * MenuHelp [COMCTL32.2]
- *
- * PARAMS
- * uMsg
- * wParam
- * lParam
- * hMainMenu
- * hInst
- * hwndStatus
- * lpwIDs
- *
- * NOTES
- * Some features are still missing because of incomplete WM_MENUSELECT
- * messages (16->32 bit conversion).
- */
-
-VOID WINAPI
-MenuHelp (UINT32 uMsg, WPARAM32 wParam, LPARAM lParam, HMENU32 hMainMenu,
- HINSTANCE32 hInst, HWND32 hwndStatus, LPUINT32 lpwIDs)
-{
- char szStatusText[128];
-
- if (!IsWindow32 (hwndStatus)) return;
-
- switch (uMsg) {
- case WM_MENUSELECT:
- TRACE (commctrl, "WM_MENUSELECT wParam=0x%X lParam=0x%lX\n",
- wParam, lParam);
-
- if ((HIWORD(wParam) == 0xFFFF) && (lParam == 0)) {
- /* menu was closed */
- SendMessage32A (hwndStatus, SB_SIMPLE, FALSE, 0);
- }
- else {
- if (HIWORD(wParam) & MF_POPUP) {
- FIXME (commctrl, "popup 0x%08x 0x%08lx\n", wParam, lParam);
-
- szStatusText[0] = 0;
- }
- else {
- TRACE (commctrl, "menu item selected!\n");
- if (!LoadString32A (hInst, LOWORD(wParam), szStatusText, 128))
- szStatusText[0] = 0;
- }
- SendMessage32A (hwndStatus, SB_SETTEXT32A, 255 | SBT_NOBORDERS,
- (LPARAM)szStatusText);
- SendMessage32A (hwndStatus, SB_SIMPLE, TRUE, 0);
- }
- break;
-
- default:
- WARN (commctrl, "Invalid Message!\n");
- break;
- }
-}
-
-
-/***********************************************************************
- * CreateToolbarEx [COMCTL32.32]
- *
- *
- *
- */
-
-HWND32 WINAPI
-CreateToolbarEx (HWND32 hwnd, DWORD style, UINT32 wID, INT32 nBitmaps,
- HINSTANCE32 hBMInst, UINT32 wBMID, LPCTBBUTTON lpButtons,
- INT32 iNumButtons, INT32 dxButton, INT32 dyButton,
- INT32 dxBitmap, INT32 dyBitmap, UINT32 uStructSize)
-{
- HWND32 hwndTB =
- CreateWindowEx32A (0, TOOLBARCLASSNAME32A, "", style, 0, 0, 0, 0,
- hwnd, (HMENU32)wID, 0, NULL);
- if(hwndTB) {
- TBADDBITMAP tbab;
-
- SendMessage32A (hwndTB, TB_BUTTONSTRUCTSIZE,
- (WPARAM32)uStructSize, 0);
-
- /* set bitmap and button size */
- if (hBMInst == HINST_COMMCTRL) {
- if (wBMID & 1) {
- SendMessage32A (hwndTB, TB_SETBITMAPSIZE, 0,
- MAKELPARAM(26, 25));
- SendMessage32A (hwndTB, TB_SETBUTTONSIZE, 0,
- MAKELPARAM(33, 32));
- }
- else {
- SendMessage32A (hwndTB, TB_SETBITMAPSIZE, 0,
- MAKELPARAM(16, 15));
- SendMessage32A (hwndTB, TB_SETBUTTONSIZE, 0,
- MAKELPARAM(23, 22));
- }
- }
- else {
- SendMessage32A (hwndTB, TB_SETBITMAPSIZE, 0,
- MAKELPARAM((WORD)dyBitmap, (WORD)dxBitmap));
- SendMessage32A (hwndTB, TB_SETBUTTONSIZE, 0,
- MAKELPARAM((WORD)dyButton, (WORD)dxButton));
- }
-
- /* add bitmaps */
- tbab.hInst = hBMInst;
- tbab.nID = wBMID;
- SendMessage32A (hwndTB, TB_ADDBITMAP,
- (WPARAM32)nBitmaps, (LPARAM)&tbab);
-
- /* add buttons */
- SendMessage32A (hwndTB, TB_ADDBUTTONS32A,
- (WPARAM32)iNumButtons, (LPARAM)lpButtons);
- }
-
- return hwndTB;
-}
-
-
-/***********************************************************************
- * CreateMappedBitmap [COMCTL32.8]
- *
- * PARAMS
- * hInstance
- * idBitmap
- * wFlags
- * lpColorMap
- * iNumMaps
- */
-
-HBITMAP32 WINAPI
-CreateMappedBitmap (HINSTANCE32 hInstance, INT32 idBitmap, UINT32 wFlags,
- LPCOLORMAP lpColorMap, INT32 iNumMaps)
-{
- HGLOBAL32 hglb;
- HRSRC32 hRsrc;
- LPBITMAPINFOHEADER lpBitmap, lpBitmapInfo;
- UINT32 nSize, nColorTableSize;
- DWORD *pColorTable;
- INT32 iColor, i, iMaps, nWidth, nHeight;
- HDC32 hdcScreen;
- HBITMAP32 hbm;
- LPCOLORMAP sysColorMap;
- COLORMAP internalColorMap[4] =
- {{0x000000, 0}, {0x808080, 0}, {0xC0C0C0, 0}, {0xFFFFFF, 0}};
-
- /* initialize pointer to colortable and default color table */
- if (lpColorMap) {
- iMaps = iNumMaps;
- sysColorMap = lpColorMap;
- }
- else {
- internalColorMap[0].to = GetSysColor32 (COLOR_BTNTEXT);
- internalColorMap[1].to = GetSysColor32 (COLOR_BTNSHADOW);
- internalColorMap[2].to = GetSysColor32 (COLOR_BTNFACE);
- internalColorMap[3].to = GetSysColor32 (COLOR_BTNHIGHLIGHT);
- iMaps = 4;
- sysColorMap = (LPCOLORMAP)internalColorMap;
- }
-
- hRsrc = FindResource32A (hInstance, (LPSTR)idBitmap, RT_BITMAP32A);
- if (hRsrc == 0)
- return 0;
- hglb = LoadResource32 (hInstance, hRsrc);
- if (hglb == 0)
- return 0;
- lpBitmap = (LPBITMAPINFOHEADER)LockResource32 (hglb);
- if (lpBitmap == NULL)
- return 0;
-
- nColorTableSize = (1 << lpBitmap->biBitCount);
- nSize = lpBitmap->biSize + nColorTableSize * sizeof(RGBQUAD);
- lpBitmapInfo = (LPBITMAPINFOHEADER)GlobalAlloc32 (GMEM_FIXED, nSize);
- if (lpBitmapInfo == NULL)
- return 0;
- RtlMoveMemory (lpBitmapInfo, lpBitmap, nSize);
-
- pColorTable = (DWORD*)(((LPBYTE)lpBitmapInfo)+(UINT32)lpBitmapInfo->biSize);
-
- for (iColor = 0; iColor < nColorTableSize; iColor++) {
- for (i = 0; i < iMaps; i++) {
- if (pColorTable[iColor] == sysColorMap[i].from) {
-#if 0
- if (wFlags & CBS_MASKED) {
- if (sysColorMap[i].to != COLOR_BTNTEXT)
- pColorTable[iColor] = RGB(255, 255, 255);
- }
- else
-#endif
- pColorTable[iColor] = sysColorMap[i].to;
- break;
- }
- }
- }
-
- nWidth = (INT32)lpBitmapInfo->biWidth;
- nHeight = (INT32)lpBitmapInfo->biHeight;
- hdcScreen = GetDC32 ((HWND32)0);
- hbm = CreateCompatibleBitmap32 (hdcScreen, nWidth, nHeight);
- if (hbm) {
- HDC32 hdcDst = CreateCompatibleDC32 (hdcScreen);
- HBITMAP32 hbmOld = SelectObject32 (hdcDst, hbm);
- LPBYTE lpBits = (LPBYTE)(lpBitmap + 1);
- lpBits += (1 << (lpBitmapInfo->biBitCount)) * sizeof(RGBQUAD);
- StretchDIBits32 (hdcDst, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight,
- lpBits, (LPBITMAPINFO)lpBitmapInfo, DIB_RGB_COLORS,
- SRCCOPY);
- SelectObject32 (hdcDst, hbmOld);
- DeleteDC32 (hdcDst);
- }
- ReleaseDC32 ((HWND32)0, hdcScreen);
- GlobalFree32 ((HGLOBAL32)lpBitmapInfo);
- FreeResource32 (hglb);
-
- return hbm;
-}
-
-
-/***********************************************************************
- * CreateToolbar [COMCTL32.7]
- *
- *
- *
- */
-
-HWND32 WINAPI
-CreateToolbar (HWND32 hwnd, DWORD style, UINT32 wID, INT32 nBitmaps,
- HINSTANCE32 hBMInst, UINT32 wBMID,
- LPCOLDTBBUTTON lpButtons,INT32 iNumButtons)
-{
- return CreateToolbarEx (hwnd, style | CCS_NODIVIDER, wID, nBitmaps,
- hBMInst, wBMID, (LPCTBBUTTON)lpButtons,
- iNumButtons, 0, 0, 0, 0, sizeof (OLDTBBUTTON));
-}
-
-
-/***********************************************************************
- * GetEffectiveClientRect [COMCTL32.4]
- *
- * PARAMS
- * hwnd [I] handle to the client window.
- * lpRect [O] pointer to the rectangle of the client window
- * lpInfo [I] pointer to an array of integers
- *
- * NOTES
- */
-
-VOID WINAPI
-GetEffectiveClientRect (HWND32 hwnd, LPRECT32 lpRect, LPINT32 lpInfo)
-{
- RECT32 rcCtrl;
- INT32 *lpRun;
- HWND32 hwndCtrl;
-
- TRACE (commctrl, "(0x%08lx 0x%08lx 0x%08lx)\n",
- (DWORD)hwnd, (DWORD)lpRect, (DWORD)lpInfo);
-
- GetClientRect32 (hwnd, lpRect);
- lpRun = lpInfo;
-
- do {
- lpRun += 2;
- if (*lpRun == 0)
- return;
- lpRun++;
- hwndCtrl = GetDlgItem32 (hwnd, *lpRun);
- if (GetWindowLong32A (hwndCtrl, GWL_STYLE) & WS_VISIBLE) {
- TRACE (commctrl, "control id 0x%x\n", *lpRun);
- GetWindowRect32 (hwndCtrl, &rcCtrl);
- MapWindowPoints32 ((HWND32)0, hwnd, (LPPOINT32)&rcCtrl, 2);
- SubtractRect32 (lpRect, lpRect, &rcCtrl);
- }
- lpRun++;
- } while (*lpRun);
-}
-
-
-/***********************************************************************
- * ShowHideMenuCtl [COMCTL32.3]
- *
- * Shows or hides controls and updates the corresponding menu item.
- *
- * PARAMS
- * hwnd [I] handle to the client window.
- * uFlags [I] menu command id.
- * lpInfo [I] pointer to an array of integers. (See NOTES.)
- *
- * NOTES
- * The official documentation is incomplete! This has been fixed.
- *
- * lpInfo
- * The array of integers contains pairs of values. BOTH values of
- * the first pair must be the handles to application's main menu.
- * Each subsequent pair consists of a menu id and control id.
- */
-
-BOOL32 WINAPI
-ShowHideMenuCtl (HWND32 hwnd, UINT32 uFlags, LPINT32 lpInfo)
-{
- LPINT32 lpMenuId;
- FIXME (commctrl, "(0x%08x 0x%08x %p): empty stub!\n",
- hwnd, uFlags, lpInfo);
-
- if (lpInfo == NULL)
- return FALSE;
-
- if (!(lpInfo[0]) || !(lpInfo[1]))
- return FALSE;
-
- /* search for control */
- lpMenuId = &lpInfo[2];
- while (*lpMenuId != uFlags)
- lpMenuId += 2;
-
- if (GetMenuState32 (lpInfo[1], uFlags, MF_BYCOMMAND) & MFS_CHECKED) {
- /* uncheck menu item */
- CheckMenuItem32 (lpInfo[0], *lpMenuId, MF_BYCOMMAND | MF_UNCHECKED);
-
- /* hide control */
- lpMenuId++;
- SetWindowPos32 (GetDlgItem32 (hwnd, *lpMenuId), 0, 0, 0, 0, 0,
- SWP_HIDEWINDOW);
- }
- else {
- /* check menu item */
- CheckMenuItem32 (lpInfo[0], *lpMenuId, MF_BYCOMMAND | MF_CHECKED);
-
- /* show control */
- lpMenuId++;
- SetWindowPos32 (GetDlgItem32 (hwnd, *lpMenuId), 0, 0, 0, 0, 0,
- SWP_SHOWWINDOW);
- }
-
- return TRUE;
-}
diff --git a/controls/edit.c b/controls/edit.c
index bfb724a..8a90e01 100644
--- a/controls/edit.c
+++ b/controls/edit.c
@@ -514,6 +514,7 @@
case EM_REPLACESEL32:
DPRINTF_EDIT_MSG32("EM_REPLACESEL");
EDIT_EM_ReplaceSel(wnd, es, (BOOL32)wParam, (LPCSTR)lParam);
+ result = 1;
break;
/* message 0x00c3 missing from specs */
diff --git a/controls/header.c b/controls/header.c
deleted file mode 100644
index 1e7097aa..0000000
--- a/controls/header.c
+++ /dev/null
@@ -1,1328 +0,0 @@
-/*
- * Header control
- *
- * Copyright 1998 Eric Kohl
- *
- * TODO:
- * - Imagelist support (partially).
- * - Callback items.
- * - Order list support.
- * - Control specific cursors (over dividers).
- * - Hottrack support (partially).
- * - Custom draw support (including Notifications).
- * - Drag and Drop support (including Notifications).
- * - Unicode support.
- *
- * FIXME:
- * - Replace DrawText32A by DrawTextEx32A(...|DT_ENDELLIPSIS) in
- * HEADER_DrawItem.
- * - Little flaw when drawing a bitmap on the right side of the text.
- */
-
-#include "windows.h"
-#include "commctrl.h"
-#include "header.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-#define __HDM_LAYOUT_HACK__
-
-
-#define VERT_BORDER 4
-#define DIVIDER_WIDTH 10
-
-#define HEADER_GetInfoPtr(wndPtr) ((HEADER_INFO *)wndPtr->wExtra[0])
-
-
-static INT32
-HEADER_DrawItem (WND *wndPtr, HDC32 hdc, INT32 iItem, BOOL32 bHotTrack)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HEADER_ITEM *phdi = &infoPtr->items[iItem];
- RECT32 r;
- INT32 oldBkMode;
-
- r = phdi->rect;
- if (r.right - r.left == 0)
- return phdi->rect.right;
-
- if (wndPtr->dwStyle & HDS_BUTTONS) {
- if (phdi->bDown) {
- DrawEdge32 (hdc, &r, BDR_RAISEDOUTER,
- BF_RECT | BF_FLAT | BF_MIDDLE | BF_ADJUST);
- r.left += 2;
- r.top += 2;
- }
- else
- DrawEdge32 (hdc, &r, EDGE_RAISED,
- BF_RECT | BF_SOFT | BF_MIDDLE | BF_ADJUST);
- }
- else
- DrawEdge32 (hdc, &r, EDGE_ETCHED, BF_BOTTOM | BF_RIGHT | BF_ADJUST);
-
- if (phdi->fmt & HDF_OWNERDRAW) {
- DRAWITEMSTRUCT32 dis;
- dis.CtlType = ODT_HEADER;
- dis.CtlID = wndPtr->wIDmenu;
- dis.itemID = iItem;
- dis.itemAction = ODA_DRAWENTIRE;
- dis.itemState = phdi->bDown ? ODS_SELECTED : 0;
- dis.hwndItem = wndPtr->hwndSelf;
- dis.hDC = hdc;
- dis.rcItem = r;
- dis.itemData = phdi->lParam;
- SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_DRAWITEM,
- (WPARAM32)wndPtr->wIDmenu, (LPARAM)&dis);
- }
- else {
- UINT32 uTextJustify = DT_LEFT;
-
- if ((phdi->fmt & HDF_JUSTIFYMASK) == HDF_CENTER)
- uTextJustify = DT_CENTER;
- else if ((phdi->fmt & HDF_JUSTIFYMASK) == HDF_RIGHT)
- uTextJustify = DT_RIGHT;
-
- if ((phdi->fmt & HDF_BITMAP) && (phdi->hbm)) {
- BITMAP32 bmp;
- HDC32 hdcBitmap;
- INT32 yD, yS, cx, cy, rx, ry;
-
- GetObject32A (phdi->hbm, sizeof(BITMAP32), (LPVOID)&bmp);
-
- ry = r.bottom - r.top;
- rx = r.right - r.left;
-
- if (ry >= bmp.bmHeight) {
- cy = bmp.bmHeight;
- yD = r.top + (ry - bmp.bmHeight) / 2;
- yS = 0;
- }
- else {
- cy = ry;
- yD = r.top;
- yS = (bmp.bmHeight - ry) / 2;
-
- }
-
- if (rx >= bmp.bmWidth + 6) {
- cx = bmp.bmWidth;
- }
- else {
- cx = rx - 6;
- }
-
- hdcBitmap = CreateCompatibleDC32 (hdc);
- SelectObject32 (hdcBitmap, phdi->hbm);
- BitBlt32 (hdc, r.left + 3, yD, cx, cy, hdcBitmap, 0, yS, SRCCOPY);
- DeleteDC32 (hdcBitmap);
-
- r.left += (bmp.bmWidth + 3);
- }
-
-
- if ((phdi->fmt & HDF_BITMAP_ON_RIGHT) && (phdi->hbm)) {
- BITMAP32 bmp;
- HDC32 hdcBitmap;
- INT32 xD, yD, yS, cx, cy, rx, ry, tx;
- RECT32 textRect;
-
- GetObject32A (phdi->hbm, sizeof(BITMAP32), (LPVOID)&bmp);
-
- textRect = r;
- DrawText32A(hdc, phdi->pszText, lstrlen32A(phdi->pszText),
- &textRect, DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_CALCRECT);
- tx = textRect.right - textRect.left;
- ry = r.bottom - r.top;
- rx = r.right - r.left;
-
- if (ry >= bmp.bmHeight) {
- cy = bmp.bmHeight;
- yD = r.top + (ry - bmp.bmHeight) / 2;
- yS = 0;
- }
- else {
- cy = ry;
- yD = r.top;
- yS = (bmp.bmHeight - ry) / 2;
-
- }
-
- if (r.left + tx + bmp.bmWidth + 9 <= r.right) {
- cx = bmp.bmWidth;
- xD = r.left + tx + 6;
- }
- else {
- if (rx >= bmp.bmWidth + 6) {
- cx = bmp.bmWidth;
- xD = r.right - bmp.bmWidth - 3;
- r.right = xD - 3;
- }
- else {
- cx = rx - 3;
- xD = r.left;
- r.right = r.left;
- }
- }
-
- hdcBitmap = CreateCompatibleDC32 (hdc);
- SelectObject32 (hdcBitmap, phdi->hbm);
- BitBlt32 (hdc, xD, yD, cx, cy, hdcBitmap, 0, yS, SRCCOPY);
- DeleteDC32 (hdcBitmap);
- }
-
- if (phdi->fmt & HDF_IMAGE) {
-
-
-// ImageList_Draw (infoPtr->himl, phdi->iImage,...);
- }
-
- if ((phdi->fmt & HDF_STRING) && (phdi->pszText)) {
- oldBkMode = SetBkMode32(hdc, TRANSPARENT);
- r.left += 3;
- r.right -= 3;
- SetTextColor32 (hdc, bHotTrack ? COLOR_HIGHLIGHT : COLOR_BTNTEXT);
- DrawText32A(hdc, phdi->pszText, lstrlen32A(phdi->pszText),
- &r, uTextJustify|DT_VCENTER|DT_SINGLELINE);
- if (oldBkMode != TRANSPARENT)
- SetBkMode32(hdc, oldBkMode);
- }
- }
- return phdi->rect.right;
-}
-
-
-static void
-HEADER_Refresh (WND *wndPtr, HDC32 hdc)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HFONT32 hFont, hOldFont;
- RECT32 rect;
- HBRUSH32 hbrBk;
- INT32 i, x;
-
- /* get rect for the bar, adjusted for the border */
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- hFont = infoPtr->hFont ? infoPtr->hFont : GetStockObject32 (SYSTEM_FONT);
- hOldFont = SelectObject32 (hdc, hFont);
-
- /* draw Background */
- hbrBk = GetSysColorBrush32(COLOR_3DFACE);
- FillRect32(hdc, &rect, hbrBk);
-
- x = rect.left;
- for (i = 0; i < infoPtr->uNumItem; i++) {
- x = HEADER_DrawItem (wndPtr, hdc, i, FALSE);
- }
-
- if ((x <= rect.right) && (infoPtr->uNumItem > 0)) {
- rect.left = x;
- if (wndPtr->dwStyle & HDS_BUTTONS)
- DrawEdge32 (hdc, &rect, EDGE_RAISED, BF_TOP|BF_LEFT|BF_BOTTOM|BF_SOFT);
- else
- DrawEdge32 (hdc, &rect, EDGE_ETCHED, BF_BOTTOM);
- }
-
- SelectObject32 (hdc, hOldFont);
-}
-
-
-static void
-HEADER_RefreshItem (WND *wndPtr, HDC32 hdc, INT32 iItem)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HFONT32 hFont, hOldFont;
-
- hFont = infoPtr->hFont ? infoPtr->hFont : GetStockObject32 (SYSTEM_FONT);
- hOldFont = SelectObject32 (hdc, hFont);
- HEADER_DrawItem (wndPtr, hdc, iItem, FALSE);
- SelectObject32 (hdc, hOldFont);
-}
-
-
-static void
-HEADER_SetItemBounds (WND *wndPtr)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HEADER_ITEM *phdi;
- RECT32 rect;
- int i, x;
-
- if (infoPtr->uNumItem == 0)
- return;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- x = rect.left;
- for (i = 0; i < infoPtr->uNumItem; i++) {
- phdi = &infoPtr->items[i];
- phdi->rect.top = rect.top;
- phdi->rect.bottom = rect.bottom;
- phdi->rect.left = x;
- phdi->rect.right = phdi->rect.left + phdi->cxy;
- x = phdi->rect.right;
- }
-}
-
-
-static void
-HEADER_ForceItemBounds (WND *wndPtr, INT32 cy)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HEADER_ITEM *phdi;
- int i, x;
-
- if (infoPtr->uNumItem == 0)
- return;
-
- x = 0;
- for (i = 0; i < infoPtr->uNumItem; i++) {
- phdi = &infoPtr->items[i];
- phdi->rect.top = 0;
- phdi->rect.bottom = cy;
- phdi->rect.left = x;
- phdi->rect.right = phdi->rect.left + phdi->cxy;
- x = phdi->rect.right;
- }
-}
-
-
-static void
-HEADER_InternalHitTest (WND *wndPtr, LPPOINT32 lpPt, UINT32 *pFlags, INT32 *pItem)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- RECT32 rect, rcTest;
- INT32 iCount, width;
- BOOL32 bNoWidth;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- *pFlags = 0;
- bNoWidth = FALSE;
- if (PtInRect32 (&rect, *lpPt))
- {
- if (infoPtr->uNumItem == 0) {
- *pFlags |= HHT_NOWHERE;
- *pItem = 1;
- TRACE (header, "NOWHERE\n");
- return;
- }
- else {
- /* somewhere inside */
- for (iCount = 0; iCount < infoPtr->uNumItem; iCount++) {
- rect = infoPtr->items[iCount].rect;
- width = rect.right - rect.left;
- if (width == 0) {
- bNoWidth = TRUE;
- continue;
- }
- if (PtInRect32 (&rect, *lpPt)) {
- if (width <= 2 * DIVIDER_WIDTH) {
- *pFlags |= HHT_ONHEADER;
- *pItem = iCount;
- TRACE (header, "ON HEADER %d\n", iCount);
- return;
- }
- if (iCount > 0) {
- rcTest = rect;
- rcTest.right = rcTest.left + DIVIDER_WIDTH;
- if (PtInRect32 (&rcTest, *lpPt)) {
- if (bNoWidth) {
- *pFlags |= HHT_ONDIVOPEN;
- *pItem = iCount - 1;
- TRACE (header, "ON DIVOPEN %d\n", *pItem);
- return;
- }
- else {
- *pFlags |= HHT_ONDIVIDER;
- *pItem = iCount - 1;
- TRACE (header, "ON DIVIDER %d\n", *pItem);
- return;
- }
- }
- }
- rcTest = rect;
- rcTest.left = rcTest.right - DIVIDER_WIDTH;
- if (PtInRect32 (&rcTest, *lpPt)) {
- *pFlags |= HHT_ONDIVIDER;
- *pItem = iCount;
- TRACE (header, "ON DIVIDER %d\n", *pItem);
- return;
- }
-
- *pFlags |= HHT_ONHEADER;
- *pItem = iCount;
- TRACE (header, "ON HEADER %d\n", iCount);
- return;
- }
- }
-
- /* check for last divider part (on nowhere) */
- rect = infoPtr->items[infoPtr->uNumItem-1].rect;
- rect.left = rect.right;
- rect.right += DIVIDER_WIDTH;
- if (PtInRect32 (&rect, *lpPt)) {
- if (bNoWidth) {
- *pFlags |= HHT_ONDIVOPEN;
- *pItem = infoPtr->uNumItem - 1;
- TRACE (header, "ON DIVOPEN %d\n", *pItem);
- return;
- }
- else {
- *pFlags |= HHT_ONDIVIDER;
- *pItem = infoPtr->uNumItem-1;
- TRACE (header, "ON DIVIDER %d\n", *pItem);
- return;
- }
- }
-
- *pFlags |= HHT_NOWHERE;
- *pItem = 1;
- TRACE (header, "NOWHERE\n");
- return;
- }
- }
- else {
- if (lpPt->x < rect.left) {
- TRACE (header, "TO LEFT\n");
- *pFlags |= HHT_TOLEFT;
- }
- else if (lpPt->x > rect.right) {
- TRACE (header, "TO LEFT\n");
- *pFlags |= HHT_TORIGHT;
- }
-
- if (lpPt->y < rect.top) {
- TRACE (header, "ABOVE\n");
- *pFlags |= HHT_ABOVE;
- }
- else if (lpPt->y > rect.bottom) {
- TRACE (header, "BELOW\n");
- *pFlags |= HHT_BELOW;
- }
- }
-
- *pItem = 1;
- TRACE (header, "flags=0x%X\n", *pFlags);
- return;
-}
-
-
-static void
-HEADER_DrawTrackLine (WND *wndPtr, HDC32 hdc, INT32 x)
-{
- RECT32 rect;
- HPEN32 hOldPen;
- INT32 oldRop;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- hOldPen = SelectObject32 (hdc, GetStockObject32 (BLACK_PEN));
- oldRop = SetROP232 (hdc, R2_XORPEN);
- MoveToEx32 (hdc, x, rect.top, NULL);
- LineTo32 (hdc, x, rect.bottom);
- SetROP232 (hdc, oldRop);
- SelectObject32 (hdc, hOldPen);
-}
-
-
-static BOOL32
-HEADER_SendSimpleNotify (WND *wndPtr, UINT32 code)
-{
- NMHDR nmhdr;
-
- nmhdr.hwndFrom = wndPtr->hwndSelf;
- nmhdr.idFrom = wndPtr->wIDmenu;
- nmhdr.code = code;
-
- return (BOOL32)SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
- (WPARAM32)nmhdr.idFrom, (LPARAM)&nmhdr);
-}
-
-
-static BOOL32
-HEADER_SendHeaderNotify (WND *wndPtr, UINT32 code, INT32 iItem)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- NMHEADERA nmhdr;
- HD_ITEMA nmitem;
-
- nmhdr.hdr.hwndFrom = wndPtr->hwndSelf;
- nmhdr.hdr.idFrom = wndPtr->wIDmenu;
- nmhdr.hdr.code = code;
- nmhdr.iItem = iItem;
- nmhdr.iButton = 0;
- nmhdr.pitem = &nmitem;
- nmitem.mask = infoPtr->items[iItem].mask;
- nmitem.cxy = infoPtr->items[iItem].cxy;
- nmitem.hbm = infoPtr->items[iItem].hbm;
- nmitem.pszText = infoPtr->items[iItem].pszText;
- nmitem.cchTextMax = infoPtr->items[iItem].cchTextMax;
- nmitem.fmt = infoPtr->items[iItem].fmt;
- nmitem.lParam = infoPtr->items[iItem].lParam;
- nmitem.iOrder = infoPtr->items[iItem].iOrder;
- nmitem.iImage = infoPtr->items[iItem].iImage;
-
- return (BOOL32)SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
- (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmhdr);
-}
-
-
-static BOOL32
-HEADER_SendClickNotify (WND *wndPtr, UINT32 code, INT32 iItem)
-{
- NMHEADERA nmhdr;
-
- nmhdr.hdr.hwndFrom = wndPtr->hwndSelf;
- nmhdr.hdr.idFrom = wndPtr->wIDmenu;
- nmhdr.hdr.code = code;
- nmhdr.iItem = iItem;
- nmhdr.iButton = 0;
- nmhdr.pitem = NULL;
-
- return (BOOL32)SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
- (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmhdr);
-}
-
-
-static LRESULT
-HEADER_CreateDragImage (WND *wndPtr, WPARAM32 wParam)
-{
- FIXME (header, "empty stub!\n");
- return 0;
-}
-
-
-static LRESULT
-HEADER_DeleteItem (WND *wndPtr, WPARAM32 wParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HDC32 hdc;
- INT32 iItem;
-
- iItem = (INT32)wParam;
-
- TRACE(header, "[iItem=%d]\n", iItem);
-
- if ((iItem < 0) || (iItem > infoPtr->uNumItem - 1))
- return FALSE;
-
- if (infoPtr->uNumItem == 1) {
- TRACE(header, "Simple delete!\n");
- if (infoPtr->items[0].pszText)
- HeapFree (GetProcessHeap (), 0, infoPtr->items[0].pszText);
- HeapFree (GetProcessHeap (), 0, infoPtr->items);
- infoPtr->items = 0;
- infoPtr->uNumItem = 0;
- }
- else {
- HEADER_ITEM *oldItems = infoPtr->items;
- TRACE(header, "Complex delete! [iItem=%d]\n", iItem);
-
- if (infoPtr->items[iItem].pszText)
- HeapFree (GetProcessHeap (), 0, infoPtr->items[iItem].pszText);
-
- infoPtr->uNumItem--;
- infoPtr->items = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof (HEADER_ITEM) * infoPtr->uNumItem);
- /* pre delete copy */
- if (iItem > 0) {
- memcpy (&infoPtr->items[0], &oldItems[0],
- iItem * sizeof(HEADER_ITEM));
- }
-
- /* post delete copy */
- if (iItem < infoPtr->uNumItem) {
- memcpy (&infoPtr->items[iItem], &oldItems[iItem+1],
- (infoPtr->uNumItem - iItem) * sizeof(HEADER_ITEM));
- }
-
- HeapFree (GetProcessHeap (), 0, oldItems);
- }
-
- HEADER_SetItemBounds (wndPtr);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-HEADER_GetImageList (WND *wndPtr)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
-
- return (LRESULT)infoPtr->himl;
-}
-
-
-static LRESULT
-HEADER_GetItem32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HD_ITEMA *phdi;
- INT32 iItem;
- UINT32 uMask;
-
- phdi = (HD_ITEMA*)lParam;
- iItem = (INT32)wParam;
-
- if ((iItem < 0) || (iItem > infoPtr->uNumItem - 1))
- return FALSE;
-
- TRACE (header, "[iItem=%d]\n", iItem);
-
- uMask = phdi->mask;
- if (uMask == 0)
- return TRUE;
- phdi->mask = 0;
-
- if (uMask & infoPtr->items[iItem].mask & HDI_BITMAP) {
- phdi->hbm = infoPtr->items[iItem].hbm;
- phdi->mask |= HDI_BITMAP;
- }
-
- if (uMask & infoPtr->items[iItem].mask & HDI_FORMAT) {
- phdi->fmt = infoPtr->items[iItem].fmt;
- phdi->mask |= HDI_FORMAT;
- }
-
- if (uMask & infoPtr->items[iItem].mask & HDI_WIDTH) {
- phdi->cxy = infoPtr->items[iItem].cxy;
- phdi->mask |= HDI_WIDTH;
- }
-
- if (uMask & infoPtr->items[iItem].mask & HDI_LPARAM) {
- phdi->lParam = infoPtr->items[iItem].lParam;
- phdi->mask |= HDI_LPARAM;
- }
-
- if (uMask & infoPtr->items[iItem].mask & HDI_TEXT) {
- phdi->pszText = infoPtr->items[iItem].pszText;
- phdi->cchTextMax = infoPtr->items[iItem].cchTextMax;
- phdi->mask |= HDI_TEXT;
- }
-
- if (uMask & infoPtr->items[iItem].mask & HDI_IMAGE) {
- phdi->iImage = infoPtr->items[iItem].iImage;
- phdi->mask |= HDI_IMAGE;
- }
-
- if (uMask & infoPtr->items[iItem].mask & HDI_ORDER) {
- phdi->iOrder = infoPtr->items[iItem].iOrder;
- phdi->mask |= HDI_ORDER;
- }
-
- return TRUE;
-}
-
-
-static LRESULT
-HEADER_GetItemCount (WND *wndPtr)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
-
- return (infoPtr->uNumItem);
-}
-
-
-static LRESULT
-HEADER_GetItemRect (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- INT32 iItem;
- LPRECT32 lpRect;
-
- iItem = (INT32)wParam;
- lpRect = (LPRECT32)lParam;
-
- if ((iItem < 0) || (iItem > infoPtr->uNumItem - 1))
- return FALSE;
-
- lpRect->left = infoPtr->items[iItem].rect.left;
- lpRect->right = infoPtr->items[iItem].rect.right;
- lpRect->top = infoPtr->items[iItem].rect.top;
- lpRect->bottom = infoPtr->items[iItem].rect.bottom;
-
- return TRUE;
-}
-
-
-static LRESULT
-HEADER_HitTest (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LPHDHITTESTINFO phti = (LPHDHITTESTINFO)lParam;
-
- HEADER_InternalHitTest (wndPtr, &phti->pt, &phti->flags, &phti->iItem);
-
- return phti->flags;
-}
-
-
-static LRESULT
-HEADER_InsertItem32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HD_ITEMA *phdi;
- HDC32 hdc;
- INT32 iItem, len;
-
- phdi = (HD_ITEMA*)lParam;
- iItem = (INT32)wParam;
-
- if (iItem < 0) return -1;
- if (iItem > infoPtr->uNumItem)
- iItem = infoPtr->uNumItem;
-
- if (infoPtr->uNumItem == 0) {
- infoPtr->items = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof (HEADER_ITEM));
- infoPtr->uNumItem++;
- }
- else {
- HEADER_ITEM *oldItems = infoPtr->items;
-
- infoPtr->uNumItem++;
- infoPtr->items = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof (HEADER_ITEM) * infoPtr->uNumItem);
- /* pre insert copy */
- if (iItem > 0) {
- memcpy (&infoPtr->items[0], &oldItems[0],
- iItem * sizeof(HEADER_ITEM));
- }
-
- /* post insert copy */
- if (iItem < infoPtr->uNumItem - 1) {
- memcpy (&infoPtr->items[iItem+1], &oldItems[iItem],
- (infoPtr->uNumItem - iItem) * sizeof(HEADER_ITEM));
- }
-
- HeapFree (GetProcessHeap (), 0, oldItems);
- }
-
- infoPtr->items[iItem].bDown = FALSE;
-
- infoPtr->items[iItem].mask = phdi->mask;
- if (phdi->mask & HDI_WIDTH)
- infoPtr->items[iItem].cxy = phdi->cxy;
-
- if (phdi->mask & HDI_TEXT) {
- len = lstrlen32A (phdi->pszText);
- infoPtr->items[iItem].pszText =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len+1);
- lstrcpy32A (infoPtr->items[iItem].pszText, phdi->pszText);
- infoPtr->items[iItem].cchTextMax = phdi->cchTextMax;
- }
-
- if (phdi->mask & HDI_FORMAT)
- infoPtr->items[iItem].fmt = phdi->fmt;
-
- if (phdi->mask & HDI_BITMAP)
- infoPtr->items[iItem].hbm = phdi->hbm;
-
- if (phdi->mask & HDI_LPARAM)
- infoPtr->items[iItem].lParam = phdi->lParam;
-
- if (phdi->mask & HDI_IMAGE)
- infoPtr->items[iItem].iImage = phdi->iImage;
-
- if (phdi->mask & HDI_ORDER)
- infoPtr->items[iItem].iOrder = phdi->iOrder;
-
- HEADER_SetItemBounds (wndPtr);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return iItem;
-}
-
-
-static LRESULT
-HEADER_Layout (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- LPHDLAYOUT lpLayout = (LPHDLAYOUT)lParam;
-
- lpLayout->pwpos->hwnd = wndPtr->hwndSelf;
- lpLayout->pwpos->hwndInsertAfter = 0;
- lpLayout->pwpos->x = lpLayout->prc->left;
- lpLayout->pwpos->y = lpLayout->prc->top;
- lpLayout->pwpos->cx = lpLayout->prc->right - lpLayout->prc->left;
- if (wndPtr->dwStyle & HDS_HIDDEN)
- lpLayout->pwpos->cy = 0;
- else
- lpLayout->pwpos->cy = infoPtr->nHeight;
- lpLayout->pwpos->flags = SWP_NOZORDER;
-
- TRACE (header, "Layout x=%d y=%d cx=%d cy=%d\n",
- lpLayout->pwpos->x, lpLayout->pwpos->y,
- lpLayout->pwpos->cx, lpLayout->pwpos->cy);
-
- HEADER_ForceItemBounds (wndPtr, lpLayout->pwpos->cy);
-
- /* hack */
-#ifdef __HDM_LAYOUT_HACK__
- MoveWindow32 (lpLayout->pwpos->hwnd, lpLayout->pwpos->x, lpLayout->pwpos->y,
- lpLayout->pwpos->cx, lpLayout->pwpos->cy, TRUE);
-#endif
-
- return TRUE;
-}
-
-
-static LRESULT
-HEADER_SetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HIMAGELIST himlOld;
-
- himlOld = infoPtr->himl;
- infoPtr->himl = (HIMAGELIST)lParam;
-
- /* FIXME: Refresh needed??? */
-
- return (LRESULT)himlOld;
-}
-
-
-static LRESULT
-HEADER_SetItem32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- HD_ITEMA *phdi;
- INT32 iItem;
- HDC32 hdc;
-
- phdi = (HD_ITEMA*)lParam;
- iItem = (INT32)wParam;
-
- if ((iItem < 0) || (iItem > infoPtr->uNumItem - 1))
- return FALSE;
-
- TRACE (header, "[iItem=%d]\n", iItem);
-
- if (HEADER_SendHeaderNotify (wndPtr, HDN_ITEMCHANGING32A, iItem))
- return FALSE;
-
- if (phdi->mask & HDI_BITMAP) {
- infoPtr->items[iItem].hbm = phdi->hbm;
- infoPtr->items[iItem].mask |= HDI_BITMAP;
- }
-
- if (phdi->mask & HDI_FORMAT) {
- infoPtr->items[iItem].fmt = phdi->fmt;
- infoPtr->items[iItem].mask |= HDI_FORMAT;
- }
-
- if (phdi->mask & HDI_LPARAM) {
- infoPtr->items[iItem].lParam = phdi->lParam;
- infoPtr->items[iItem].mask |= HDI_LPARAM;
- }
-
- if (phdi->mask & HDI_TEXT) {
- INT32 len = lstrlen32A (phdi->pszText);
- if (infoPtr->items[iItem].pszText)
- HeapFree (GetProcessHeap (), 0, infoPtr->items[iItem].pszText);
- infoPtr->items[iItem].pszText =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len+1);
- lstrcpy32A (infoPtr->items[iItem].pszText, phdi->pszText);
- infoPtr->items[iItem].cchTextMax = phdi->cchTextMax;
- }
-
- if (phdi->mask & HDI_WIDTH) {
- infoPtr->items[iItem].cxy = phdi->cxy;
- infoPtr->items[iItem].mask |= HDI_WIDTH;
- }
-
- if (phdi->mask & HDI_IMAGE) {
- infoPtr->items[iItem].iImage = phdi->iImage;
- infoPtr->items[iItem].mask |= HDI_IMAGE;
- }
-
- if (phdi->mask & HDI_ORDER) {
- infoPtr->items[iItem].iOrder = phdi->iOrder;
- infoPtr->items[iItem].mask |= HDI_ORDER;
- }
-
- HEADER_SendHeaderNotify (wndPtr, HDN_ITEMCHANGED32A, iItem);
-
- HEADER_SetItemBounds (wndPtr);
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-HEADER_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr;
- TEXTMETRIC32A tm;
- HFONT32 hOldFont;
- HDC32 hdc;
-
- infoPtr = (HEADER_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(HEADER_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- infoPtr->uNumItem = 0;
- infoPtr->nHeight = 20;
- infoPtr->hFont = 0;
- infoPtr->items = 0;
- infoPtr->hcurArrow = LoadCursor32A (0, IDC_ARROW32A);
- infoPtr->hcurDivider = LoadCursor32A (0, IDC_SIZEWE32A);
- infoPtr->hcurDivopen = LoadCursor32A (0, IDC_SIZENS32A);
- infoPtr->bPressed = FALSE;
- infoPtr->bTracking = FALSE;
- infoPtr->iMoveItem = 0;
- infoPtr->himl = 0;
- infoPtr->iHotItem = -1;
-
- hdc = GetDC32 (0);
- hOldFont = SelectObject32 (hdc, GetStockObject32 (SYSTEM_FONT));
- GetTextMetrics32A (hdc, &tm);
- infoPtr->nHeight = tm.tmHeight + VERT_BORDER;
- SelectObject32 (hdc, hOldFont);
- ReleaseDC32 (0, hdc);
-
- return 0;
-}
-
-
-static LRESULT
-HEADER_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- INT32 iItem;
-
- if (infoPtr->items) {
- for (iItem = 0; iItem < infoPtr->uNumItem; iItem++) {
- if (infoPtr->items[iItem].pszText)
- HeapFree (GetProcessHeap (), 0, infoPtr->items[iItem].pszText);
- }
- HeapFree (GetProcessHeap (), 0, infoPtr->items);
- }
-
- if (infoPtr->himl)
- ImageList_Destroy (infoPtr->himl);
-
- HeapFree (GetProcessHeap (), 0, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-HEADER_GetFont (WND *wndPtr)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
-
- return (LRESULT)infoPtr->hFont;
-}
-
-
-static LRESULT
-HEADER_LButtonDblClk (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- POINT32 pt;
- UINT32 flags;
- INT32 iItem;
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- HEADER_InternalHitTest (wndPtr, &pt, &flags, &iItem);
-
- if ((wndPtr->dwStyle & HDS_BUTTONS) && (flags == HHT_ONHEADER))
- HEADER_SendHeaderNotify (wndPtr, HDN_ITEMDBLCLICK32A, iItem);
- else if ((flags == HHT_ONDIVIDER) || (flags == HHT_ONDIVOPEN))
- HEADER_SendHeaderNotify (wndPtr, HDN_DIVIDERDBLCLICK32A, iItem);
-
- return 0;
-}
-
-
-static LRESULT
-HEADER_LButtonDown (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- POINT32 pt;
- UINT32 flags;
- INT32 iItem;
- HDC32 hdc;
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- HEADER_InternalHitTest (wndPtr, &pt, &flags, &iItem);
-
- if ((wndPtr->dwStyle & HDS_BUTTONS) && (flags == HHT_ONHEADER)) {
- SetCapture32 (wndPtr->hwndSelf);
- infoPtr->bCaptured = TRUE;
- infoPtr->bPressed = TRUE;
- infoPtr->iMoveItem = iItem;
-
- infoPtr->items[iItem].bDown = TRUE;
-
- /* Send WM_CUSTOMDRAW */
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_RefreshItem (wndPtr, hdc, iItem);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- TRACE (header, "Pressed item %d!\n", iItem);
- }
- else if ((flags == HHT_ONDIVIDER) || (flags == HHT_ONDIVOPEN)) {
- if (!(HEADER_SendHeaderNotify (wndPtr, HDN_BEGINTRACK32A, iItem))) {
- SetCapture32 (wndPtr->hwndSelf);
- infoPtr->bCaptured = TRUE;
- infoPtr->bTracking = TRUE;
- infoPtr->iMoveItem = iItem;
- infoPtr->nOldWidth = infoPtr->items[iItem].cxy;
- infoPtr->xTrackOffset = infoPtr->items[iItem].rect.right - pt.x;
-
- if (!(wndPtr->dwStyle & HDS_FULLDRAG)) {
- infoPtr->xOldTrack = infoPtr->items[iItem].rect.right;
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_DrawTrackLine (wndPtr, hdc, infoPtr->xOldTrack);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
-
- TRACE (header, "Begin tracking item %d!\n", iItem);
- }
- }
-
- return 0;
-}
-
-
-static LRESULT
-HEADER_LButtonUp (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- POINT32 pt;
- UINT32 flags;
- INT32 iItem, nWidth;
- HDC32 hdc;
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- HEADER_InternalHitTest (wndPtr, &pt, &flags, &iItem);
-
- if (infoPtr->bPressed) {
- if ((iItem == infoPtr->iMoveItem) && (flags == HHT_ONHEADER)) {
- infoPtr->items[infoPtr->iMoveItem].bDown = FALSE;
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_RefreshItem (wndPtr, hdc, infoPtr->iMoveItem);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- HEADER_SendClickNotify (wndPtr, HDN_ITEMCLICK32A, infoPtr->iMoveItem);
- }
- TRACE (header, "Released item %d!\n", infoPtr->iMoveItem);
- infoPtr->bPressed = FALSE;
- }
- else if (infoPtr->bTracking) {
- TRACE (header, "End tracking item %d!\n", infoPtr->iMoveItem);
- infoPtr->bTracking = FALSE;
-
- HEADER_SendHeaderNotify (wndPtr, HDN_ENDTRACK32A, infoPtr->iMoveItem);
-
- if (!(wndPtr->dwStyle & HDS_FULLDRAG)) {
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_DrawTrackLine (wndPtr, hdc, infoPtr->xOldTrack);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- if (HEADER_SendHeaderNotify (wndPtr, HDN_ITEMCHANGING32A, infoPtr->iMoveItem))
- infoPtr->items[infoPtr->iMoveItem].cxy = infoPtr->nOldWidth;
- else {
- nWidth = pt.x - infoPtr->items[infoPtr->iMoveItem].rect.left +
- infoPtr->xTrackOffset;
- if (nWidth < 0)
- nWidth = 0;
- infoPtr->items[infoPtr->iMoveItem].cxy = nWidth;
- HEADER_SendHeaderNotify (wndPtr, HDN_ITEMCHANGED32A, infoPtr->iMoveItem);
- }
-
- HEADER_SetItemBounds (wndPtr);
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
- }
-
- if (infoPtr->bCaptured) {
- infoPtr->bCaptured = FALSE;
- ReleaseCapture ();
- HEADER_SendSimpleNotify (wndPtr, NM_RELEASEDCAPTURE);
- }
-
- return 0;
-}
-
-
-static LRESULT
-HEADER_MouseMove (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- POINT32 pt;
- UINT32 flags;
- INT32 iItem, nWidth;
- HDC32 hdc;
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- HEADER_InternalHitTest (wndPtr, &pt, &flags, &iItem);
-
- if ((wndPtr->dwStyle & HDS_BUTTONS) && (wndPtr->dwStyle & HDS_HOTTRACK)) {
- if (flags & (HHT_ONHEADER | HHT_ONDIVIDER | HHT_ONDIVOPEN))
- infoPtr->iHotItem = iItem;
- else
- infoPtr->iHotItem = -1;
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
-
- if (infoPtr->bCaptured) {
- if (infoPtr->bPressed) {
- if ((iItem == infoPtr->iMoveItem) && (flags == HHT_ONHEADER))
- infoPtr->items[infoPtr->iMoveItem].bDown = TRUE;
- else
- infoPtr->items[infoPtr->iMoveItem].bDown = FALSE;
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_RefreshItem (wndPtr, hdc, infoPtr->iMoveItem);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- TRACE (header, "Moving pressed item %d!\n", infoPtr->iMoveItem);
- }
- else if (infoPtr->bTracking) {
- if (wndPtr->dwStyle & HDS_FULLDRAG) {
- if (HEADER_SendHeaderNotify (wndPtr, HDN_ITEMCHANGING32A, infoPtr->iMoveItem))
- infoPtr->items[infoPtr->iMoveItem].cxy = infoPtr->nOldWidth;
- else {
- nWidth = pt.x - infoPtr->items[infoPtr->iMoveItem].rect.left +
- infoPtr->xTrackOffset;
- if (nWidth < 0)
- nWidth = 0;
- infoPtr->items[infoPtr->iMoveItem].cxy = nWidth;
- HEADER_SendHeaderNotify (wndPtr, HDN_ITEMCHANGED32A,
- infoPtr->iMoveItem);
- }
- HEADER_SetItemBounds (wndPtr);
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
- else {
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_DrawTrackLine (wndPtr, hdc, infoPtr->xOldTrack);
- infoPtr->xOldTrack = pt.x + infoPtr->xTrackOffset;
- if (infoPtr->xOldTrack < infoPtr->items[infoPtr->iMoveItem].rect.left)
- infoPtr->xOldTrack = infoPtr->items[infoPtr->iMoveItem].rect.left;
- infoPtr->items[infoPtr->iMoveItem].cxy =
- infoPtr->xOldTrack - infoPtr->items[infoPtr->iMoveItem].rect.left;
- HEADER_DrawTrackLine (wndPtr, hdc, infoPtr->xOldTrack);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
-
- HEADER_SendHeaderNotify (wndPtr, HDN_TRACK32A, infoPtr->iMoveItem);
- TRACE (header, "Tracking item %d!\n", infoPtr->iMoveItem);
- }
- }
-
- if ((wndPtr->dwStyle & HDS_BUTTONS) && (wndPtr->dwStyle & HDS_HOTTRACK)) {
- FIXME (header, "hot track support!\n");
- }
-
- return 0;
-}
-
-
-static LRESULT
-HEADER_Paint (WND *wndPtr, WPARAM32 wParam)
-{
- HDC32 hdc;
- PAINTSTRUCT32 ps;
-
- hdc = wParam==0 ? BeginPaint32 (wndPtr->hwndSelf, &ps) : (HDC32)wParam;
- HEADER_Refresh (wndPtr, hdc);
- if(!wParam)
- EndPaint32 (wndPtr->hwndSelf, &ps);
- return 0;
-}
-
-
-static LRESULT
-HEADER_RButtonUp (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- return HEADER_SendSimpleNotify (wndPtr, NM_RCLICK);
-}
-
-
-static LRESULT
-HEADER_SetCursor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- POINT32 pt;
- UINT32 flags;
- INT32 iItem;
-
- TRACE (header, "code=0x%X id=0x%X\n", LOWORD(lParam), HIWORD(lParam));
-
- GetCursorPos32 (&pt);
- ScreenToClient32 (wndPtr->hwndSelf, &pt);
-
- HEADER_InternalHitTest (wndPtr, &pt, &flags, &iItem);
-
- if (flags == HHT_ONDIVIDER)
- SetCursor32 (infoPtr->hcurDivider);
- else if (flags == HHT_ONDIVOPEN)
- SetCursor32 (infoPtr->hcurDivopen);
- else
- SetCursor32 (infoPtr->hcurArrow);
-
- return 0;
-}
-
-
-static LRESULT
-HEADER_SetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr(wndPtr);
- TEXTMETRIC32A tm;
- HFONT32 hFont, hOldFont;
- HDC32 hdc;
-
- infoPtr->hFont = (HFONT32)wParam;
-
- hFont = infoPtr->hFont ? infoPtr->hFont : GetStockObject32 (SYSTEM_FONT);
-
- hdc = GetDC32 (0);
- hOldFont = SelectObject32 (hdc, hFont);
- GetTextMetrics32A (hdc, &tm);
- infoPtr->nHeight = tm.tmHeight + VERT_BORDER;
- SelectObject32 (hdc, hOldFont);
- ReleaseDC32 (0, hdc);
-
- if (lParam) {
- HEADER_ForceItemBounds (wndPtr, infoPtr->nHeight);
- hdc = GetDC32 (wndPtr->hwndSelf);
- HEADER_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
-
- return 0;
-}
-
-
-LRESULT WINAPI
-HeaderWindowProc (HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
-
- switch (msg) {
- case HDM_CREATEDRAGIMAGE:
- return HEADER_CreateDragImage (wndPtr, wParam);
-
- case HDM_DELETEITEM:
- return HEADER_DeleteItem (wndPtr, wParam);
-
- case HDM_GETIMAGELIST:
- return HEADER_GetImageList (wndPtr);
-
- case HDM_GETITEM32A:
- return HEADER_GetItem32A (wndPtr, wParam, lParam);
-
- case HDM_GETITEMCOUNT:
- return HEADER_GetItemCount (wndPtr);
-
- case HDM_GETITEMRECT:
- return HEADER_GetItemRect (wndPtr, wParam, lParam);
-
- case HDM_HITTEST:
- return HEADER_HitTest (wndPtr, wParam, lParam);
-
- case HDM_INSERTITEM32A:
- return HEADER_InsertItem32A (wndPtr, wParam, lParam);
-
- case HDM_LAYOUT:
- return HEADER_Layout (wndPtr, wParam, lParam);
-
- case HDM_SETIMAGELIST:
- return HEADER_SetImageList (wndPtr, wParam, lParam);
-
- case HDM_SETITEM32A:
- return HEADER_SetItem32A (wndPtr, wParam, lParam);
-
-
- case WM_CREATE:
- return HEADER_Create (wndPtr, wParam, lParam);
-
- case WM_DESTROY:
- return HEADER_Destroy (wndPtr, wParam, lParam);
-
- case WM_ERASEBKGND:
- return 1;
-
- case WM_GETDLGCODE:
- return DLGC_WANTTAB | DLGC_WANTARROWS;
-
- case WM_GETFONT:
- return HEADER_GetFont (wndPtr);
-
- case WM_LBUTTONDBLCLK:
- return HEADER_LButtonDblClk (wndPtr, wParam, lParam);
-
- case WM_LBUTTONDOWN:
- return HEADER_LButtonDown (wndPtr, wParam, lParam);
-
- case WM_LBUTTONUP:
- return HEADER_LButtonUp (wndPtr, wParam, lParam);
-
- case WM_MOUSEMOVE:
- return HEADER_MouseMove (wndPtr, wParam, lParam);
-
- case WM_PAINT:
- return HEADER_Paint (wndPtr, wParam);
-
- case WM_RBUTTONUP:
- return HEADER_RButtonUp (wndPtr, wParam, lParam);
-
- case WM_SETCURSOR:
- return HEADER_SetCursor (wndPtr, wParam, lParam);
-
- case WM_SETFONT:
- return HEADER_SetFont (wndPtr, wParam, lParam);
-
- default:
- if (msg >= WM_USER)
- ERR (header, "unknown msg %04x wp=%04x lp=%08lx\n",
- msg, wParam, lParam );
- return DefWindowProc32A (hwnd, msg, wParam, lParam);
- }
- return 0;
-}
-
-
-void HEADER_Register( void )
-{
- WNDCLASS32A wndClass;
-
- if (GlobalFindAtom32A (WC_HEADER32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS;
- wndClass.lpfnWndProc = (WNDPROC32)HeaderWindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(HEADER_INFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.lpszClassName = WC_HEADER32A;
-
- RegisterClass32A (&wndClass);
-}
-
diff --git a/controls/listbox.c b/controls/listbox.c
index 25af765..9571034 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -312,7 +312,7 @@
GetClientRect32( wnd->hwndSelf, &rect );
descr->width = rect.right - rect.left;
descr->height = rect.bottom - rect.top;
- if (!(descr->style & LBS_NOINTEGRALHEIGHT))
+ if (!(descr->style & LBS_NOINTEGRALHEIGHT) && !IS_OWNERDRAW(descr))
{
if ((descr->height > descr->item_height) &&
(descr->height % descr->item_height))
diff --git a/controls/listview.c b/controls/listview.c
deleted file mode 100644
index 1c600c5..0000000
--- a/controls/listview.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Listview control
- *
- * Copyright 1998 Eric Kohl
- *
- * NOTES
- * This is just a dummy control. An author is needed! Any volunteers?
- * I will only improve this control once in a while.
- * Eric <ekohl@abo.rhein-zeitung.de>
- *
- * TODO:
- * - All messages.
- * - All notifications.
- */
-
-#include "windows.h"
-#include "commctrl.h"
-#include "listview.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-#define LISTVIEW_GetInfoPtr(wndPtr) ((LISTVIEW_INFO *)wndPtr->wExtra[0])
-
-
-static VOID
-LISTVIEW_Refresh (WND *wndPtr, HDC32 hdc)
-{
- LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
-
-
-
-}
-
-
-
-static LRESULT
-LISTVIEW_SetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
-
- if (!(infoPtr)) return FALSE;
-
- /* set background color */
- infoPtr->clrBk = (COLORREF)lParam;
-
- return TRUE;
-}
-
-
-static LRESULT
-LISTVIEW_SetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
-
- FIXME (listview, "(0x%08x 0x%08lx)\n", wParam, lParam);
-
- return 0;
-}
-
-
-static LRESULT
-LISTVIEW_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
-
- /* initialize info structure */
- infoPtr->clrBk = CLR_NONE;
-
- return 0;
-}
-
-
-static LRESULT
-LISTVIEW_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
-
-
- return 0;
-}
-
-
-static LRESULT
-LISTVIEW_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
-
- if (infoPtr->clrBk == CLR_NONE) {
- return SendMessage32A (GetParent32 (wndPtr->hwndSelf),
- WM_ERASEBKGND, wParam, lParam);
- }
- else {
- RECT32 rect;
- HBRUSH32 hBrush = CreateSolidBrush32 (infoPtr->clrBk);
- GetClientRect32 (wndPtr->hwndSelf, &rect);
- FillRect32 ((HDC32)wParam, &rect, hBrush);
- DeleteObject32 (hBrush);
- return FALSE;
- }
- return FALSE;
-}
-
-
-static LRESULT
-LISTVIEW_NCCreate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LISTVIEW_INFO *infoPtr;
-
- /* allocate memory for info structure */
- infoPtr = (LISTVIEW_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(LISTVIEW_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- if (infoPtr == NULL) {
- ERR (listview, "could not allocate info memory!\n");
- return 0;
- }
-
- if ((LISTVIEW_INFO*)wndPtr->wExtra[0] != infoPtr) {
- ERR (listview, "pointer assignment error!\n");
- return 0;
- }
-
- return DefWindowProc32A (wndPtr->hwndSelf, WM_NCCREATE, wParam, lParam);
-}
-
-
-static LRESULT
-LISTVIEW_NCDestroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LISTVIEW_INFO *infoPtr = LISTVIEW_GetInfoPtr(wndPtr);
-
-
-
-
- /* free list view info data */
- HeapFree (GetProcessHeap (), 0, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-LISTVIEW_Paint (WND *wndPtr, WPARAM32 wParam)
-{
- HDC32 hdc;
- PAINTSTRUCT32 ps;
-
- hdc = wParam==0 ? BeginPaint32 (wndPtr->hwndSelf, &ps) : (HDC32)wParam;
- LISTVIEW_Refresh (wndPtr, hdc);
- if (!wParam)
- EndPaint32 (wndPtr->hwndSelf, &ps);
- return 0;
-}
-
-
-LRESULT WINAPI
-ListviewWindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
-
- switch (uMsg)
- {
-
- case LVM_SETBKCOLOR:
- return LISTVIEW_SetBkColor (wndPtr, wParam, lParam);
-
-
- case LVM_SETIMAGELIST:
- return LISTVIEW_SetImageList (wndPtr, wParam, lParam);
-
-
-
-
-// case WM_CHAR:
-// case WM_COMMAND:
-
- case WM_CREATE:
- return LISTVIEW_Create (wndPtr, wParam, lParam);
-
- case WM_DESTROY:
- return LISTVIEW_Destroy (wndPtr, wParam, lParam);
-
- case WM_ERASEBKGND:
- return LISTVIEW_EraseBackground (wndPtr, wParam, lParam);
-
-// case WM_GETDLGCODE:
-// case WM_GETFONT:
-// case WM_HSCROLL:
-
-// case WM_MOUSEMOVE:
-// return LISTVIEW_MouseMove (wndPtr, wParam, lParam);
-
- case WM_NCCREATE:
- return LISTVIEW_NCCreate (wndPtr, wParam, lParam);
-
- case WM_NCDESTROY:
- return LISTVIEW_NCDestroy (wndPtr, wParam, lParam);
-
-// case WM_NOTIFY:
-
- case WM_PAINT:
- return LISTVIEW_Paint (wndPtr, wParam);
-
-// case WM_RBUTTONDOWN:
-// case WM_SETFOCUS:
-// case WM_SETFONT:
-// case WM_SETREDRAW:
-// case WM_TIMER:
-// case WM_VSCROLL:
-// case WM_WINDOWPOSCHANGED:
-// case WM_WININICHANGE:
-
- default:
- if (uMsg >= WM_USER)
- ERR (listview, "unknown msg %04x wp=%08x lp=%08lx\n",
- uMsg, wParam, lParam);
- return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-
-
-void
-LISTVIEW_Register (void)
-{
- WNDCLASS32A wndClass;
-
- if (GlobalFindAtom32A (WC_LISTVIEW32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS;
- wndClass.lpfnWndProc = (WNDPROC32)ListviewWindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(LISTVIEW_INFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.hbrBackground = (HBRUSH32)(COLOR_WINDOW + 1);
- wndClass.lpszClassName = WC_LISTVIEW32A;
-
- RegisterClass32A (&wndClass);
-}
-
diff --git a/controls/menu.c b/controls/menu.c
index 45a25c6..8940964 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -760,7 +760,7 @@
if ((lprect == NULL) || (lppop == NULL)) return;
if (lppop->nItems == 0) return;
- TRACE(menu,"MENU_MenuBarCalcSize left=%d top=%d right=%d bottom=%d\n",
+ TRACE(menu,"left=%d top=%d right=%d bottom=%d\n",
lprect->left, lprect->top, lprect->right, lprect->bottom);
lppop->Width = lprect->right - lprect->left;
lppop->Height = 0;
@@ -1102,7 +1102,7 @@
SetROP232( hdc, ropPrev );
}
else
- TWEAK_DrawReliefRect95(hdc, &rect);
+ DrawEdge32 (hdc, &rect, EDGE_RAISED, BF_RECT);
/* draw menu items */
@@ -2968,6 +2968,7 @@
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return -1;
if ((nPos < 0) || (nPos >= menu->nItems)) return -1;
+ if (menu->items[nPos].fType & MF_POPUP) return -1;
return menu->items[nPos].wID;
}
@@ -3814,8 +3815,21 @@
if (lpmii->fMask & MIIM_ID)
menu->wID = lpmii->wID;
- if (lpmii->fMask & MIIM_SUBMENU)
+ if (lpmii->fMask & MIIM_SUBMENU) {
menu->hSubMenu = lpmii->hSubMenu;
+ if (menu->hSubMenu) {
+ POPUPMENU *subMenu = (POPUPMENU *)USER_HEAP_LIN_ADDR((UINT16)menu->hSubMenu);
+ if (IS_A_MENU(subMenu)) {
+ subMenu->wFlags |= MF_POPUP;
+ menu->fType |= MF_POPUP;
+ }
+ else
+ /* FIXME: Return an error ? */
+ menu->fType &= ~MF_POPUP;
+ }
+ else
+ menu->fType &= ~MF_POPUP;
+ }
if (lpmii->fMask & MIIM_CHECKMARKS)
{
diff --git a/controls/pager.c b/controls/pager.c
deleted file mode 100644
index 60612c2..0000000
--- a/controls/pager.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Pager control
- *
- * Copyright 1998 Eric Kohl
- *
- * NOTES
- * This is just a dummy control. An author is needed! Any volunteers?
- * I will only improve this control once in a while.
- * Eric <ekohl@abo.rhein-zeitung.de>
- *
- * TODO:
- * - All messages.
- * - All notifications.
- */
-
-#include "windows.h"
-#include "commctrl.h"
-#include "pager.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-#define PAGER_GetInfoPtr(wndPtr) ((PAGER_INFO *)wndPtr->wExtra[0])
-
-
-static __inline__ LRESULT
-PAGER_ForwardMouse (WND *wndPtr, WPARAM32 wParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
- infoPtr->bForward = (BOOL32)wParam;
-
- return 0;
-}
-
-
-static __inline__ LRESULT
-PAGER_GetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
- return (LRESULT)infoPtr->clrBk;
-}
-
-
-static __inline__ LRESULT
-PAGER_GetBorder (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
- return (LRESULT)infoPtr->iBorder;
-}
-
-
-static __inline__ LRESULT
-PAGER_GetButtonSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
- return (LRESULT)infoPtr->iButtonSize;
-}
-
-
-// << PAGER_GetButtonState >>
-// << PAGER_GetDropTarget >>
-
-
-static __inline__ LRESULT
-PAGER_GetPos (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
- return infoPtr->iPos;
-}
-
-
-static LRESULT
-PAGER_RecalcSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
-// PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
- FIXME (pager, "empty stub!\n");
-
- return 0;
-}
-
-
-static __inline__ LRESULT
-PAGER_SetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
- COLORREF clrTemp = infoPtr->clrBk;
-
- infoPtr->clrBk = (COLORREF)lParam;
-
- /* FIXME: redraw */
-
- return (LRESULT)clrTemp;
-}
-
-
-static __inline__ LRESULT
-PAGER_SetBorder (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
- INT32 nTemp = infoPtr->iBorder;
-
- infoPtr->iBorder = (INT32)lParam;
-
- /* FIXME: redraw */
-
- return (LRESULT)nTemp;
-}
-
-
-static __inline__ LRESULT
-PAGER_SetButtonSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
- INT32 nTemp = infoPtr->iButtonSize;
-
- infoPtr->iButtonSize = (INT32)lParam;
-
- /* FIXME: redraw */
-
- return (LRESULT)nTemp;
-}
-
-
-static __inline__ LRESULT
-PAGER_SetChild (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
- infoPtr->hwndChild = (HWND32)lParam;
-
- /* FIXME: redraw */
-
- return 0;
-}
-
-
-static __inline__ LRESULT
-PAGER_SetPos (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
- infoPtr->iPos = (INT32)lParam;
-
- /* FIXME: redraw */
-
- return 0;
-}
-
-
-static LRESULT
-PAGER_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr;
-
- /* allocate memory for info structure */
- infoPtr = (PAGER_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(PAGER_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- if (infoPtr == NULL) {
- ERR (pager, "could not allocate info memory!\n");
- return 0;
- }
-
- if ((PAGER_INFO*)wndPtr->wExtra[0] != infoPtr) {
- ERR (pager, "pointer assignment error!\n");
- return 0;
- }
-
- /* set default settings */
- infoPtr->hwndChild = 0;
- infoPtr->clrBk = GetSysColor32 (COLOR_BTNFACE);
- infoPtr->iBorder = 0;
- infoPtr->iButtonSize = 0;
- infoPtr->iPos = 0;
-
-
- return 0;
-}
-
-
-static LRESULT
-PAGER_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
-
-
-
-
- /* free pager info data */
- HeapFree (GetProcessHeap (), 0, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-PAGER_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PAGER_INFO *infoPtr = PAGER_GetInfoPtr(wndPtr);
- HBRUSH32 hBrush = CreateSolidBrush32 (infoPtr->clrBk);
- RECT32 rect;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
- FillRect32 ((HDC32)wParam, &rect, hBrush);
- DeleteObject32 (hBrush);
- return TRUE;
-}
-
-
-// << PAGER_MouseMove >>
-// << PAGER_Paint >>
-
-
-LRESULT WINAPI
-PAGER_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
-
- switch (uMsg)
- {
- case PGM_FORWARDMOUSE:
- return PAGER_ForwardMouse (wndPtr, wParam);
-
- case PGM_GETBKCOLOR:
- return PAGER_GetBkColor (wndPtr, wParam, lParam);
-
- case PGM_GETBORDER:
- return PAGER_GetBorder (wndPtr, wParam, lParam);
-
- case PGM_GETBUTTONSIZE:
- return PAGER_GetButtonSize (wndPtr, wParam, lParam);
-
-// case PGM_GETBUTTONSTATE:
-// case PGM_GETDROPTARGET:
-
- case PGM_GETPOS:
- return PAGER_SetPos (wndPtr, wParam, lParam);
-
- case PGM_RECALCSIZE:
- return PAGER_RecalcSize (wndPtr, wParam, lParam);
-
- case PGM_SETBKCOLOR:
- return PAGER_SetBkColor (wndPtr, wParam, lParam);
-
- case PGM_SETBORDER:
- return PAGER_SetBorder (wndPtr, wParam, lParam);
-
- case PGM_SETBUTTONSIZE:
- return PAGER_SetButtonSize (wndPtr, wParam, lParam);
-
- case PGM_SETCHILD:
- return PAGER_SetChild (wndPtr, wParam, lParam);
-
- case PGM_SETPOS:
- return PAGER_SetPos (wndPtr, wParam, lParam);
-
- case WM_CREATE:
- return PAGER_Create (wndPtr, wParam, lParam);
-
- case WM_DESTROY:
- return PAGER_Destroy (wndPtr, wParam, lParam);
-
- case WM_ERASEBKGND:
- return PAGER_EraseBackground (wndPtr, wParam, lParam);
-
-// case WM_MOUSEMOVE:
-// return PAGER_MouseMove (wndPtr, wParam, lParam);
-
-// case WM_PAINT:
-// return PAGER_Paint (wndPtr, wParam);
-
-
- default:
- if (uMsg >= WM_USER)
- ERR (pager, "unknown msg %04x wp=%08x lp=%08lx\n",
- uMsg, wParam, lParam);
- return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-
-
-void
-PAGER_Register (void)
-{
- WNDCLASS32A wndClass;
-
- if (GlobalFindAtom32A (WC_PAGESCROLLER32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS;
- wndClass.lpfnWndProc = (WNDPROC32)PAGER_WindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(PAGER_INFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.hbrBackground = 0;
- wndClass.lpszClassName = WC_PAGESCROLLER32A;
-
- RegisterClass32A (&wndClass);
-}
-
diff --git a/controls/progress.c b/controls/progress.c
deleted file mode 100644
index 3acb294..0000000
--- a/controls/progress.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * Progress control
- *
- * Copyright 1997 Dimitrie O. Paun
- *
- * TODO:
- * - I do not know what to to on WM_[SG]ET_FONT
- */
-
-#include "windows.h"
-#include "progress.h"
-#include "commctrl.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-/* Control configuration constants */
-
-#define LED_GAP 2
-
-/* Work constants */
-
-#define UNKNOWN_PARAM(msg, wParam, lParam) WARN(progress, \
- "Unknown parameter(s) for message " #msg \
- "(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
-
-#define PROGRESS_GetInfoPtr(wndPtr) ((PROGRESS_INFO *)wndPtr->wExtra[0])
-
-
-/***********************************************************************
- * PROGRESS_Draw
- * Draws the progress bar.
- */
-static void
-PROGRESS_Draw (WND *wndPtr, HDC32 hdc)
-{
- PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(wndPtr);
- HBRUSH32 hbrBar, hbrBk;
- int rightBar, rightMost, ledWidth;
- RECT32 rect;
-
- TRACE(progress, "refresh pos=%d min=%d, max=%d\n",
- infoPtr->CurVal, infoPtr->MinVal, infoPtr->MaxVal);
-
- /* get the required bar brush */
- if (infoPtr->ColorBar == CLR_DEFAULT)
- hbrBar = GetSysColorBrush32(COLOR_HIGHLIGHT);
- else
- hbrBar = CreateSolidBrush32 (infoPtr->ColorBar);
-
- /* get the required background brush */
- if (infoPtr->ColorBk == CLR_DEFAULT)
- hbrBk = GetSysColorBrush32 (COLOR_3DFACE);
- else
- hbrBk = CreateSolidBrush32 (infoPtr->ColorBk);
-
- /* get client rectangle */
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- /* draw the background */
- FillRect32(hdc, &rect, hbrBk);
-
- rect.left++; rect.right--; rect.top++; rect.bottom--;
-
- /* compute extent of progress bar */
- if (wndPtr->dwStyle & PBS_VERTICAL)
- {
- rightBar = rect.bottom -
- MulDiv32(infoPtr->CurVal-infoPtr->MinVal,
- rect.bottom - rect.top,
- infoPtr->MaxVal-infoPtr->MinVal);
- ledWidth = MulDiv32 ((rect.right - rect.left), 2, 3);
- rightMost = rect.top;
- }
- else
- {
- rightBar = rect.left +
- MulDiv32(infoPtr->CurVal-infoPtr->MinVal,
- rect.right - rect.left,
- infoPtr->MaxVal-infoPtr->MinVal);
- ledWidth = MulDiv32 ((rect.bottom - rect.top), 2, 3);
- rightMost = rect.right;
- }
-
- /* now draw the bar */
- if (wndPtr->dwStyle & PBS_SMOOTH)
- {
- if (wndPtr->dwStyle & PBS_VERTICAL)
- rect.top = rightBar;
- else
- rect.right = rightBar;
- FillRect32(hdc, &rect, hbrBar);
- }
- else
- {
- if (wndPtr->dwStyle & PBS_VERTICAL)
- while(rect.bottom > rightBar) {
- rect.top = rect.bottom-ledWidth;
- if (rect.top < rightMost)
- rect.top = rightMost;
- FillRect32(hdc, &rect, hbrBar);
- rect.bottom = rect.top-LED_GAP;
- }
- else
- while(rect.left < rightBar) {
- rect.right = rect.left+ledWidth;
- if (rect.right > rightMost)
- rect.right = rightMost;
- FillRect32(hdc, &rect, hbrBar);
- rect.left = rect.right+LED_GAP;
- }
- }
-
- /* delete bar brush */
- if (infoPtr->ColorBar != CLR_DEFAULT)
- DeleteObject32 (hbrBar);
-
- /* delete background brush */
- if (infoPtr->ColorBk != CLR_DEFAULT)
- DeleteObject32 (hbrBk);
-}
-
-/***********************************************************************
- * PROGRESS_Refresh
- * Draw the progress bar. The background need not be erased.
- */
-static void
-PROGRESS_Refresh (WND *wndPtr)
-{
- HDC32 hdc;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- PROGRESS_Draw (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-}
-
-/***********************************************************************
- * PROGRESS_Paint
- * Draw the progress bar. The background need not be erased.
- * If dc!=0, it draws on it
- */
-static void
-PROGRESS_Paint (WND *wndPtr)
-{
- PAINTSTRUCT32 ps;
- HDC32 hdc;
-
- hdc = BeginPaint32 (wndPtr->hwndSelf, &ps);
- PROGRESS_Draw (wndPtr, hdc);
- EndPaint32 (wndPtr->hwndSelf, &ps);
-}
-
-
-/***********************************************************************
- * PROGRESS_CoercePos
- * Makes sure the current position (CUrVal) is within bounds.
- */
-static void PROGRESS_CoercePos(WND *wndPtr)
-{
- PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(wndPtr);
-
- if(infoPtr->CurVal < infoPtr->MinVal)
- infoPtr->CurVal = infoPtr->MinVal;
- if(infoPtr->CurVal > infoPtr->MaxVal)
- infoPtr->CurVal = infoPtr->MaxVal;
-}
-
-/***********************************************************************
- * ProgressWindowProc
- */
-LRESULT WINAPI ProgressWindowProc(HWND32 hwnd, UINT32 message,
- WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
- PROGRESS_INFO *infoPtr = PROGRESS_GetInfoPtr(wndPtr);
- UINT32 temp;
-
- switch(message)
- {
- case WM_NCCREATE:
- wndPtr->dwExStyle |= WS_EX_STATICEDGE;
- return TRUE;
-
- case WM_CREATE:
- /* allocate memory for info struct */
- infoPtr =
- (PROGRESS_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(PROGRESS_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- /* initialize the info struct */
- infoPtr->MinVal=0;
- infoPtr->MaxVal=100;
- infoPtr->CurVal=0;
- infoPtr->Step=10;
- infoPtr->ColorBar=CLR_DEFAULT;
- infoPtr->ColorBk=CLR_DEFAULT;
- TRACE(progress, "Progress Ctrl creation, hwnd=%04x\n", hwnd);
- break;
-
- case WM_DESTROY:
- TRACE(progress, "Progress Ctrl destruction, hwnd=%04x\n", hwnd);
- HeapFree (GetProcessHeap (), 0, infoPtr);
- break;
-
- case WM_ERASEBKGND:
- /* pretend to erase it here, but we will do it in the paint
- function to avoid flicker */
- return 1;
-
- case WM_GETFONT:
- FIXME (progress, "WM_GETFONT - empty message!\n");
- /* FIXME: What do we need to do? */
- break;
-
- case WM_SETFONT:
- FIXME (progress, "WM_SETFONT - empty message!\n");
- /* FIXME: What do we need to do? */
- break;
-
- case WM_PAINT:
- PROGRESS_Paint (wndPtr);
- break;
-
- case PBM_DELTAPOS:
- if(lParam)
- UNKNOWN_PARAM(PBM_DELTAPOS, wParam, lParam);
- temp = infoPtr->CurVal;
- if(wParam != 0){
- infoPtr->CurVal += (UINT16)wParam;
- PROGRESS_CoercePos(wndPtr);
- PROGRESS_Refresh (wndPtr);
- }
- return temp;
-
- case PBM_SETPOS:
- if (lParam)
- UNKNOWN_PARAM(PBM_SETPOS, wParam, lParam);
- temp = infoPtr->CurVal;
- if(temp != wParam){
- infoPtr->CurVal = (UINT16)wParam;
- PROGRESS_CoercePos(wndPtr);
- PROGRESS_Refresh (wndPtr);
- }
- return temp;
-
- case PBM_SETRANGE:
- if (wParam)
- UNKNOWN_PARAM(PBM_SETRANGE, wParam, lParam);
- temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal);
- if(temp != lParam){
- infoPtr->MinVal = LOWORD(lParam);
- infoPtr->MaxVal = HIWORD(lParam);
- if(infoPtr->MaxVal <= infoPtr->MinVal)
- infoPtr->MaxVal = infoPtr->MinVal+1;
- PROGRESS_CoercePos(wndPtr);
- PROGRESS_Refresh (wndPtr);
- }
- return temp;
-
- case PBM_SETSTEP:
- if (lParam)
- UNKNOWN_PARAM(PBM_SETSTEP, wParam, lParam);
- temp = infoPtr->Step;
- infoPtr->Step = (UINT16)wParam;
- return temp;
-
- case PBM_STEPIT:
- if (wParam || lParam)
- UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
- temp = infoPtr->CurVal;
- infoPtr->CurVal += infoPtr->Step;
- if(infoPtr->CurVal > infoPtr->MaxVal)
- infoPtr->CurVal = infoPtr->MinVal;
- if(temp != infoPtr->CurVal)
- PROGRESS_Refresh (wndPtr);
- return temp;
-
- case PBM_SETRANGE32:
- temp = MAKELONG(infoPtr->MinVal, infoPtr->MaxVal);
- if((infoPtr->MinVal != (INT32)wParam) ||
- (infoPtr->MaxVal != (INT32)lParam)) {
- infoPtr->MinVal = (INT32)wParam;
- infoPtr->MaxVal = (INT32)lParam;
- if(infoPtr->MaxVal <= infoPtr->MinVal)
- infoPtr->MaxVal = infoPtr->MinVal+1;
- PROGRESS_CoercePos(wndPtr);
- PROGRESS_Refresh (wndPtr);
- }
- return temp;
-
- case PBM_GETRANGE:
- if (lParam){
- ((PPBRANGE)lParam)->iLow = infoPtr->MinVal;
- ((PPBRANGE)lParam)->iHigh = infoPtr->MaxVal;
- }
- return (wParam) ? infoPtr->MinVal : infoPtr->MaxVal;
-
- case PBM_GETPOS:
- if (wParam || lParam)
- UNKNOWN_PARAM(PBM_STEPIT, wParam, lParam);
- return (infoPtr->CurVal);
-
- case PBM_SETBARCOLOR:
- if (wParam)
- UNKNOWN_PARAM(PBM_SETBARCOLOR, wParam, lParam);
- infoPtr->ColorBar = (COLORREF)lParam;
- PROGRESS_Refresh (wndPtr);
- break;
-
- case PBM_SETBKCOLOR:
- if (wParam)
- UNKNOWN_PARAM(PBM_SETBKCOLOR, wParam, lParam);
- infoPtr->ColorBk = (COLORREF)lParam;
- PROGRESS_Refresh (wndPtr);
- break;
-
- default:
- if (message >= WM_USER)
- ERR(progress, "unknown msg %04x wp=%04x lp=%08lx\n",
- message, wParam, lParam );
- return DefWindowProc32A( hwnd, message, wParam, lParam );
- }
-
- return 0;
-}
-
-
-/***********************************************************************
- * PROGRESS_Register [Internal]
- *
- * Registers the progress bar window class.
- *
- */
-void
-PROGRESS_Register(void)
-{
- WNDCLASS32A wndClass;
-
- if( GlobalFindAtom32A( PROGRESS_CLASS32A ) ) return;
-
- ZeroMemory( &wndClass, sizeof( WNDCLASS32A ) );
- wndClass.style = CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW;
- wndClass.lpfnWndProc = (WNDPROC32)ProgressWindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(PROGRESS_INFO *);
- wndClass.hCursor = LoadCursor32A( 0, IDC_ARROW32A );
- wndClass.lpszClassName = PROGRESS_CLASS32A;
-
- RegisterClass32A( &wndClass );
-}
-
diff --git a/controls/rebar.c b/controls/rebar.c
deleted file mode 100644
index a36bbff..0000000
--- a/controls/rebar.c
+++ /dev/null
@@ -1,637 +0,0 @@
-/*
- * Rebar control
- *
- * Copyright 1998 Eric Kohl
- *
- * NOTES
- * This is just a dummy control. An author is needed! Any volunteers?
- * I will only improve this control once in a while.
- * Eric <ekohl@abo.rhein-zeitung.de>
- *
- * TODO:
- * - All messages.
- * - All notifications.
- */
-
-#include "windows.h"
-#include "commctrl.h"
-#include "rebar.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-#define REBAR_GetInfoPtr(wndPtr) ((REBAR_INFO *)wndPtr->wExtra[0])
-
-
-// << REBAR_BeginDrag >>
-// << REBAR_DeleteBand >>
-// << REBAR_DragMove >>
-// << REBAR_EndDrag >>
-// << REBAR_GetBandBorders >>
-
-
-__inline__ static LRESULT
-REBAR_GetBandCount (WND *wndPtr)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
-
- TRACE (rebar, "band count %u!\n", infoPtr->uNumBands);
-
- return infoPtr->uNumBands;
-}
-
-
-static LRESULT
-REBAR_GetBandInfo32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
- LPREBARBANDINFO32A lprbbi = (LPREBARBANDINFO32A)lParam;
- REBAR_BAND *lpBand;
-
- if (lprbbi == NULL)
- return FALSE;
- if (lprbbi->cbSize < sizeof (LPREBARBANDINFO32A))
- return FALSE;
- if ((UINT32)wParam >= infoPtr->uNumBands)
- return FALSE;
-
- TRACE (rebar, "index %u\n", (UINT32)wParam);
-
- /* copy band information */
- lpBand = &infoPtr->bands[(UINT32)wParam];
-
- if (lprbbi->fMask & RBBIM_STYLE)
- lprbbi->fStyle = lpBand->fStyle;
-
- if (lprbbi->fMask & RBBIM_COLORS) {
- lprbbi->clrFore = lpBand->clrFore;
- lprbbi->clrBack = lpBand->clrBack;
- }
-
- if ((lprbbi->fMask & RBBIM_TEXT) &&
- (lprbbi->lpText) && (lpBand->lpText)) {
- lstrcpyn32A (lprbbi->lpText, lpBand->lpText, lprbbi->cch);
- }
-
- if (lprbbi->fMask & RBBIM_IMAGE)
- lprbbi->iImage = lpBand->iImage;
-
- if (lprbbi->fMask & RBBIM_CHILD)
- lprbbi->hwndChild = lpBand->hwndChild;
-
- if (lprbbi->fMask & RBBIM_CHILDSIZE) {
- lprbbi->cxMinChild = lpBand->cxMinChild;
- lprbbi->cyMinChild = lpBand->cyMinChild;
- lprbbi->cyMaxChild = lpBand->cyMaxChild;
- lprbbi->cyChild = lpBand->cyChild;
- lprbbi->cyIntegral = lpBand->cyIntegral;
- }
-
- if (lprbbi->fMask & RBBIM_SIZE)
- lprbbi->cx = lpBand->cx;
-
- if (lprbbi->fMask & RBBIM_BACKGROUND)
- lprbbi->hbmBack = lpBand->hbmBack;
-
- if (lprbbi->fMask & RBBIM_ID)
- lprbbi->wID = lpBand->wID;
-
- /* FIXME: check for size of band info structure */
-
- if (lprbbi->fMask & RBBIM_IDEALSIZE)
- lprbbi->cxIdeal = lpBand->cxIdeal;
-
- if (lprbbi->fMask & RBBIM_LPARAM)
- lprbbi->lParam = lpBand->lParam;
-
- if (lprbbi->fMask & RBBIM_HEADERSIZE)
- lprbbi->cxHeader = lpBand->cxHeader;
-
- return TRUE;
-}
-
-
-// << REBAR_GetBandInfo32W >>
-
-// << REBAR_GetBarHeight >>
-
-
-static LRESULT
-REBAR_GetBarInfo (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
- LPREBARINFO lpInfo = (LPREBARINFO)lParam;
-
- if (lpInfo == NULL)
- return FALSE;
-
- if (lpInfo->cbSize < sizeof (REBARINFO))
- return FALSE;
-
- TRACE (rebar, "getting bar info!\n");
-
- if (infoPtr->himl) {
- lpInfo->himl = infoPtr->himl;
- lpInfo->fMask |= RBIM_IMAGELIST;
- }
-
- return TRUE;
-}
-
-
-__inline__ static LRESULT
-REBAR_GetBkColor (WND *wndPtr)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
-
- TRACE (rebar, "background color 0x%06lx!\n", infoPtr->clrBk);
-
- return infoPtr->clrBk;
-}
-
-
-// << REBAR_GetColorScheme >>
-
-// << REBAR_GetRowHeight >>
-
-
-__inline__ static LRESULT
-REBAR_GetTextColor (WND *wndPtr)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
-
- TRACE (rebar, "text color 0x%06lx!\n", infoPtr->clrText);
-
- return infoPtr->clrText;
-}
-
-
-// << REBAR_GetToolTips >>
-// << REBAR_GetUnicodeFormat >>
-// << REBAR_HitTest >>
-
-
-static LRESULT
-REBAR_IdToIndex (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
- UINT32 i;
-
- if (infoPtr == NULL)
- return -1;
-
- if (infoPtr->uNumBands < 1)
- return -1;
-
- TRACE (rebar, "id %u\n", (UINT32)wParam);
-
- for (i = 0; i < infoPtr->uNumBands; i++) {
- if (infoPtr->bands[i].wID == (UINT32)wParam)
- return i;
- }
-
- return -1;
-}
-
-
-static LRESULT
-REBAR_InsertBand32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
- LPREBARBANDINFO32A lprbbi = (LPREBARBANDINFO32A)lParam;
- UINT32 uIndex = (UINT32)wParam;
- REBAR_BAND *lpBand;
-
- if (infoPtr == NULL)
- return FALSE;
- if (lprbbi == NULL)
- return FALSE;
- if (lprbbi->cbSize < sizeof (REBARBANDINFO32A))
- return FALSE;
-
- if (infoPtr->uNumBands == 0) {
- infoPtr->bands =
- (REBAR_BAND *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof (REBAR_BAND));
- uIndex = 0;
- }
- else {
- REBAR_BAND *oldBands = infoPtr->bands;
- infoPtr->bands =
- (REBAR_BAND *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- (infoPtr->uNumBands+1)*sizeof(REBAR_BAND));
- if ((INT32)uIndex == -1)
- uIndex = infoPtr->uNumBands;
-
- /* pre copy */
-
- /* post copy */
-
- HeapFree (GetProcessHeap (), 0, &oldBands);
- }
-
- infoPtr->uNumBands++;
-
- TRACE (rebar, "index %u!\n", uIndex);
-
- /* initialize band (infoPtr->bands[uIndex])*/
- lpBand = &infoPtr->bands[uIndex];
-
- if (lprbbi->fMask & RBBIM_STYLE)
- lpBand->fStyle = lprbbi->fStyle;
-
- if (lprbbi->fMask & RBBIM_COLORS) {
- lpBand->clrFore = lprbbi->clrFore;
- lpBand->clrBack = lprbbi->clrBack;
- }
-
- if ((lprbbi->fMask & RBBIM_TEXT) && (lprbbi->lpText)) {
- INT32 len = lstrlen32A (lprbbi->lpText);
- if (len > 0) {
- lpBand->lpText =
- (LPSTR)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len + 1);
- lstrcpy32A (lpBand->lpText, lprbbi->lpText);
- }
- }
-
- if (lprbbi->fMask & RBBIM_IMAGE)
- lpBand->iImage = lprbbi->iImage;
-
- if (lprbbi->fMask & RBBIM_CHILD)
- lpBand->hwndChild = lprbbi->hwndChild;
-
- if (lprbbi->fMask & RBBIM_CHILDSIZE) {
- lpBand->cxMinChild = lprbbi->cxMinChild;
- lpBand->cyMinChild = lprbbi->cyMinChild;
- lpBand->cyMaxChild = lprbbi->cyMaxChild;
- lpBand->cyChild = lprbbi->cyChild;
- lpBand->cyIntegral = lprbbi->cyIntegral;
- }
-
- if (lprbbi->fMask & RBBIM_SIZE)
- lpBand->cx = lprbbi->cx;
-
- if (lprbbi->fMask & RBBIM_BACKGROUND)
- lpBand->hbmBack = lprbbi->hbmBack;
-
- if (lprbbi->fMask & RBBIM_ID)
- lpBand->wID = lprbbi->wID;
-
- /* FIXME: check for size of band info structure */
-
- if (lprbbi->fMask & RBBIM_IDEALSIZE)
- lpBand->cxIdeal = lprbbi->cxIdeal;
-
- if (lprbbi->fMask & RBBIM_LPARAM)
- lpBand->lParam = lprbbi->lParam;
-
- if (lprbbi->fMask & RBBIM_HEADERSIZE)
- lpBand->cxHeader = lprbbi->cxHeader;
-
- return TRUE;
-}
-
-
-// << REBAR_InsertBand32W >>
-// << REBAR_MaximizeBand >>
-// << REBAR_MinimizeBand >>
-// << REBAR_MoveBand >>
-
-
-static LRESULT
-REBAR_SetBandInfo32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
- LPREBARBANDINFO32A lprbbi = (LPREBARBANDINFO32A)lParam;
- REBAR_BAND *lpBand;
-
- if (lprbbi == NULL)
- return FALSE;
- if (lprbbi->cbSize < sizeof (LPREBARBANDINFO32A))
- return FALSE;
- if ((UINT32)wParam >= infoPtr->uNumBands)
- return FALSE;
-
- TRACE (rebar, "index %u\n", (UINT32)wParam);
-
- /* set band information */
- lpBand = &infoPtr->bands[(UINT32)wParam];
-
- if (lprbbi->fMask & RBBIM_STYLE)
- lpBand->fStyle = lprbbi->fStyle;
-
- if (lprbbi->fMask & RBBIM_COLORS) {
- lpBand->clrFore = lprbbi->clrFore;
- lpBand->clrBack = lprbbi->clrBack;
- }
-
- if ((lprbbi->fMask & RBBIM_TEXT) && (lprbbi->lpText)) {
-/*
- INT32 len = lstrlen32A (lprbbi->lpText);
- if (len > 0) {
- lpBand->lpText =
- (LPSTR)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len + 1);
- lstrcpy32A (lpBand->lpText, lprbbi->lpText);
- }
-*/
- }
-
- if (lprbbi->fMask & RBBIM_IMAGE)
- lpBand->iImage = lprbbi->iImage;
-
- if (lprbbi->fMask & RBBIM_CHILD)
- lpBand->hwndChild = lprbbi->hwndChild;
-
- if (lprbbi->fMask & RBBIM_CHILDSIZE) {
- lpBand->cxMinChild = lprbbi->cxMinChild;
- lpBand->cyMinChild = lprbbi->cyMinChild;
- lpBand->cyMaxChild = lprbbi->cyMaxChild;
- lpBand->cyChild = lprbbi->cyChild;
- lpBand->cyIntegral = lprbbi->cyIntegral;
- }
-
- if (lprbbi->fMask & RBBIM_SIZE)
- lpBand->cx = lprbbi->cx;
-
- if (lprbbi->fMask & RBBIM_BACKGROUND)
- lpBand->hbmBack = lprbbi->hbmBack;
-
- if (lprbbi->fMask & RBBIM_ID)
- lpBand->wID = lprbbi->wID;
-
- /* FIXME: check for size of band info structure */
-
- if (lprbbi->fMask & RBBIM_IDEALSIZE)
- lpBand->cxIdeal = lprbbi->cxIdeal;
-
- if (lprbbi->fMask & RBBIM_LPARAM)
- lpBand->lParam = lprbbi->lParam;
-
- if (lprbbi->fMask & RBBIM_HEADERSIZE)
- lpBand->cxHeader = lprbbi->cxHeader;
-
- return TRUE;
-}
-
-
-// << REBAR_SetBandInfo32W >>
-
-
-static LRESULT
-REBAR_SetBarInfo (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
- LPREBARINFO lpInfo = (LPREBARINFO)lParam;
-
- if (lpInfo == NULL)
- return FALSE;
-
- if (lpInfo->cbSize < sizeof (REBARINFO))
- return FALSE;
-
- TRACE (rebar, "setting bar info!\n");
-
- if (lpInfo->fMask & RBIM_IMAGELIST)
- infoPtr->himl = lpInfo->himl;
-
- return TRUE;
-}
-
-
-static LRESULT
-REBAR_SetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
- COLORREF clrTemp;
-
- clrTemp = infoPtr->clrBk;
- infoPtr->clrBk = (COLORREF)lParam;
-
- TRACE (rebar, "background color 0x%06lx!\n", infoPtr->clrBk);
-
- return clrTemp;
-}
-
-
-// << REBAR_SetColorScheme >>
-// << REBAR_SetPalette >>
-// << REBAR_SetParent >>
-
-
-static LRESULT
-REBAR_SetTextColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr (wndPtr);
- COLORREF clrTemp;
-
- clrTemp = infoPtr->clrText;
- infoPtr->clrText = (COLORREF)lParam;
-
- TRACE (rebar, "text color 0x%06lx!\n", infoPtr->clrText);
-
- return clrTemp;
-}
-
-
-// << REBAR_SetTooltips >>
-// << REBAR_SetUnicodeFormat >>
-// << REBAR_ShowBand >>
-// << REBAR_SizeToRect >>
-
-
-
-static LRESULT
-REBAR_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr;
-
- /* allocate memory for info structure */
- infoPtr = (REBAR_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(REBAR_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- if (infoPtr == NULL) {
- ERR (rebar, "could not allocate info memory!\n");
- return 0;
- }
-
- if ((REBAR_INFO*)wndPtr->wExtra[0] != infoPtr) {
- ERR (rebar, "pointer assignment error!\n");
- return 0;
- }
-
-
- infoPtr->clrText = CLR_NONE;
- infoPtr->clrText = RGB(0, 0, 0);
-
- TRACE (rebar, "created!\n");
- return 0;
-}
-
-
-static LRESULT
-REBAR_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- REBAR_INFO *infoPtr = REBAR_GetInfoPtr(wndPtr);
- REBAR_BAND *lpBand;
- INT32 i;
-
-
- /* free rebar bands */
- if ((infoPtr->uNumBands > 0) && infoPtr->bands) {
- /* clean up each band */
- for (i = 0; i < infoPtr->uNumBands; i++) {
- lpBand = &infoPtr->bands[i];
-
- /* delete text strings */
- if (lpBand->lpText) {
- HeapFree (GetProcessHeap (), 0, lpBand->lpText);
- lpBand->lpText = NULL;
- }
- }
-
- /* free band array */
- HeapFree (GetProcessHeap (), 0, infoPtr->bands);
- infoPtr->bands = NULL;
- }
-
- /* free rebar info data */
- HeapFree (GetProcessHeap (), 0, infoPtr);
-
- TRACE (rebar, "destroyed!\n");
- return 0;
-}
-
-
-
-
-LRESULT WINAPI
-REBAR_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
-
- switch (uMsg)
- {
-// case RB_BEGINDRAG:
-// case RB_DELETEBAND:
-// case RB_DRAGMOVE:
-// case RB_ENDDRAG:
-// case RB_GETBANDBORDERS:
-
- case RB_GETBANDCOUNT:
- return REBAR_GetBandCount (wndPtr);
-
-// case RB_GETBANDINFO32: /* outdated, just for compatibility */
-
- case RB_GETBANDINFO32A:
- return REBAR_GetBandInfo32A (wndPtr, wParam, lParam);
-
-
-// case RB_GETBANDINFO32W:
-// case RB_GETBARHEIGHT:
-
- case RB_GETBARINFO:
- return REBAR_GetBarInfo (wndPtr, wParam, lParam);
-
- case RB_GETBKCOLOR:
- return REBAR_GetBkColor (wndPtr);
-
-// case RB_GETCOLORSCHEME:
-// case RB_GETDROPTARGET:
-// case RB_GETPALETTE:
-// case RB_GETRECT:
-// case RB_GETROWCOUNT:
-// case RB_GETROWHEIGHT:
-
- case RB_GETTEXTCOLOR:
- return REBAR_GetTextColor (wndPtr);
-
-// case RB_GETTOOLTIPS:
-// case RB_GETUNICODEFORMAT:
-// case RB_HITTEST:
-
- case RB_IDTOINDEX:
- return REBAR_IdToIndex (wndPtr, wParam, lParam);
-
- case RB_INSERTBAND32A:
- return REBAR_InsertBand32A (wndPtr, wParam, lParam);
-
-// case RB_INSERTBAND32W:
-// case RB_MAXIMIZEBAND:
-// case RB_MINIMIZEBAND:
-// case RB_MOVEBAND:
-
- case RB_SETBANDINFO32A:
- return REBAR_SetBandInfo32A (wndPtr, wParam, lParam);
-
-// case RB_SETBANDINFO32W:
-
- case RB_SETBARINFO:
- return REBAR_SetBarInfo (wndPtr, wParam, lParam);
-
- case RB_SETBKCOLOR:
- return REBAR_SetBkColor (wndPtr, wParam, lParam);
-
-// case RB_SETCOLORSCHEME:
-// case RB_SETPALETTE:
-// case RB_SETPARENT:
-
- case RB_SETTEXTCOLOR:
- return REBAR_SetTextColor (wndPtr, wParam, lParam);
-
-// case RB_SETTOOLTIPS:
-// case RB_SETUNICODEFORMAT:
-// case RB_SHOWBAND:
-// case RB_SIZETORECT:
-
-
- case WM_CREATE:
- return REBAR_Create (wndPtr, wParam, lParam);
-
- case WM_DESTROY:
- return REBAR_Destroy (wndPtr, wParam, lParam);
-
-// case WM_GETFONT:
-
-// case WM_MOUSEMOVE:
-// return REBAR_MouseMove (wndPtr, wParam, lParam);
-
-// case WM_PAINT:
-// return REBAR_Paint (wndPtr, wParam);
-
-// case WM_SETFONT:
-
-// case WM_TIMER:
-
-// case WM_WININICHANGE:
-
- default:
- if (uMsg >= WM_USER)
- ERR (rebar, "unknown msg %04x wp=%08x lp=%08lx\n",
- uMsg, wParam, lParam);
- return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-
-
-void
-REBAR_Register (void)
-{
- WNDCLASS32A wndClass;
-
- if (GlobalFindAtom32A (REBARCLASSNAME32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS;
- wndClass.lpfnWndProc = (WNDPROC32)REBAR_WindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(REBAR_INFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.hbrBackground = 0;
- wndClass.lpszClassName = REBARCLASSNAME32A;
-
- RegisterClass32A (&wndClass);
-}
-
diff --git a/controls/static.c b/controls/static.c
index ac53bbd..70c65f0 100644
--- a/controls/static.c
+++ b/controls/static.c
@@ -271,7 +271,6 @@
case WM_GETDLGCODE:
return DLGC_STATIC;
- return infoPtr->hIcon;
case STM_GETIMAGE:
case STM_GETICON16:
case STM_GETICON32:
@@ -283,6 +282,7 @@
InvalidateRect32( hWnd, NULL, FALSE );
UpdateWindow32( hWnd );
break;
+
case STM_SETICON16:
case STM_SETICON32:
lResult = STATIC_SetIcon( wndPtr, (HICON16)wParam );
diff --git a/controls/status.c b/controls/status.c
deleted file mode 100644
index 6536fa9..0000000
--- a/controls/status.c
+++ /dev/null
@@ -1,1150 +0,0 @@
-/*
- * Interface code to StatusWindow widget/control
- *
- * Copyright 1996 Bruce Milner
- * Copyright 1998 Eric Kohl
- */
-
-#include "windows.h"
-#include "status.h"
-#include "commctrl.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-/*
- * Run tests using Waite Group Windows95 API Bible Vol. 1&2
- * The second cdrom contains executables drawstat.exe,gettext.exe,
- * simple.exe, getparts.exe, setparts.exe, statwnd.exe
- */
-
-/*
- * Fixme/Todo
- * 1) Don't hard code bar to bottom of window, allow CCS_TOP also.
- + 2) Tooltip support (almost done).
- */
-
-#define _MAX(a,b) (((a)>(b))?(a):(b))
-#define _MIN(a,b) (((a)>(b))?(b):(a))
-
-#define HORZ_BORDER 0
-#define VERT_BORDER 2
-#define HORZ_GAP 2
-
-#define STATUSBAR_GetInfoPtr(wndPtr) ((STATUSWINDOWINFO *)wndPtr->wExtra[0])
-
-
-static void
-STATUSBAR_DrawSizeGrip (HDC32 hdc, LPRECT32 lpRect)
-{
- HPEN32 hOldPen;
- POINT32 pt;
- INT32 i;
-
- pt.x = lpRect->right - 1;
- pt.y = lpRect->bottom - 1;
-
- hOldPen = SelectObject32 (hdc, GetSysColorPen32 (COLOR_3DFACE));
- MoveToEx32 (hdc, pt.x - 12, pt.y, NULL);
- LineTo32 (hdc, pt.x, pt.y);
- LineTo32 (hdc, pt.x, pt.y - 12);
-
- pt.x--;
- pt.y--;
-
- SelectObject32 (hdc, GetSysColorPen32 (COLOR_3DSHADOW));
- for (i = 1; i < 11; i += 4) {
- MoveToEx32 (hdc, pt.x - i, pt.y, NULL);
- LineTo32 (hdc, pt.x, pt.y - i);
-
- MoveToEx32 (hdc, pt.x - i-1, pt.y, NULL);
- LineTo32 (hdc, pt.x, pt.y - i-1);
- }
-
- SelectObject32 (hdc, GetSysColorPen32 (COLOR_3DHIGHLIGHT));
- for (i = 3; i < 13; i += 4) {
- MoveToEx32 (hdc, pt.x - i, pt.y, NULL);
- LineTo32 (hdc, pt.x, pt.y - i);
- }
-
- SelectObject32 (hdc, hOldPen);
-}
-
-
-static void
-STATUSBAR_DrawPart (HDC32 hdc, STATUSWINDOWPART *part)
-{
- RECT32 r = part->bound;
- UINT32 border = BDR_SUNKENOUTER;
-
- if (part->style==SBT_POPOUT)
- border = BDR_RAISEDOUTER;
- else if (part->style==SBT_NOBORDERS)
- border = 0;
-
- DrawEdge32(hdc, &r, border, BF_RECT|BF_ADJUST);
-
- /* draw the icon */
- if (part->hIcon) {
- INT32 cy = r.bottom - r.top;
-
- r.left += 2;
- DrawIconEx32 (hdc, r.left, r.top, part->hIcon, cy, cy, 0, 0, DI_NORMAL);
- r.left += cy;
- }
-
- /* now draw text */
- if (part->text) {
- int oldbkmode = SetBkMode32(hdc, TRANSPARENT);
- LPSTR p = (LPSTR)part->text;
- UINT32 align = DT_LEFT;
- if (*p == '\t') {
- p++;
- align = DT_CENTER;
-
- if (*p == '\t') {
- p++;
- align = DT_RIGHT;
- }
- }
- r.left += 3;
- DrawText32A(hdc, p, lstrlen32A(p), &r, align|DT_VCENTER|DT_SINGLELINE);
- if (oldbkmode != TRANSPARENT)
- SetBkMode32(hdc, oldbkmode);
- }
-}
-
-
-static VOID
-STATUSBAR_RefreshPart (WND *wndPtr, STATUSWINDOWPART *part, HDC32 hdc)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- HBRUSH32 hbrBk;
- HFONT32 hOldFont;
-
- if (!IsWindowVisible32(wndPtr->hwndSelf))
- return;
-
- if (self->clrBk != CLR_DEFAULT)
- hbrBk = CreateSolidBrush32 (self->clrBk);
- else
- hbrBk = GetSysColorBrush32 (COLOR_3DFACE);
- FillRect32(hdc, &part->bound, hbrBk);
-
- hOldFont = SelectObject32 (hdc, self->hFont ? self->hFont : self->hDefaultFont);
-
- if (part->style == SBT_OWNERDRAW) {
- DRAWITEMSTRUCT32 dis;
-
- dis.CtlID = wndPtr->wIDmenu;
- dis.itemID = -1;
- dis.hwndItem = wndPtr->hwndSelf;
- dis.hDC = hdc;
- dis.rcItem = part->bound;
- dis.itemData = (INT32)part->text;
- SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_DRAWITEM,
- (WPARAM32)wndPtr->wIDmenu, (LPARAM)&dis);
- }
- else
- STATUSBAR_DrawPart (hdc, part);
-
- SelectObject32 (hdc, hOldFont);
-
- if (self->clrBk != CLR_DEFAULT)
- DeleteObject32 (hbrBk);
-
- if (wndPtr->dwStyle & SBARS_SIZEGRIP) {
- RECT32 rect;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
- STATUSBAR_DrawSizeGrip (hdc, &rect);
- }
-}
-
-
-static BOOL32
-STATUSBAR_Refresh (WND *wndPtr, HDC32 hdc)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- int i;
- RECT32 rect;
- HBRUSH32 hbrBk;
- HFONT32 hOldFont;
-
- if (!IsWindowVisible32(wndPtr->hwndSelf))
- return (TRUE);
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- if (self->clrBk != CLR_DEFAULT)
- hbrBk = CreateSolidBrush32 (self->clrBk);
- else
- hbrBk = GetSysColorBrush32 (COLOR_3DFACE);
- FillRect32(hdc, &rect, hbrBk);
-
- hOldFont = SelectObject32 (hdc, self->hFont ? self->hFont : self->hDefaultFont);
-
- if (self->simple) {
- STATUSBAR_DrawPart (hdc, &self->part0);
- }
- else {
- for (i = 0; i < self->numParts; i++) {
- if (self->parts[i].style == SBT_OWNERDRAW) {
- DRAWITEMSTRUCT32 dis;
-
- dis.CtlID = wndPtr->wIDmenu;
- dis.itemID = -1;
- dis.hwndItem = wndPtr->hwndSelf;
- dis.hDC = hdc;
- dis.rcItem = self->parts[i].bound;
- dis.itemData = (INT32)self->parts[i].text;
- SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_DRAWITEM,
- (WPARAM32)wndPtr->wIDmenu, (LPARAM)&dis);
- }
- else
- STATUSBAR_DrawPart (hdc, &self->parts[i]);
- }
- }
-
- SelectObject32 (hdc, hOldFont);
-
- if (self->clrBk != CLR_DEFAULT)
- DeleteObject32 (hbrBk);
-
- if (wndPtr->dwStyle & SBARS_SIZEGRIP)
- STATUSBAR_DrawSizeGrip (hdc, &rect);
-
- return TRUE;
-}
-
-
-static void
-STATUSBAR_SetPartBounds (WND *wndPtr)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- STATUSWINDOWPART *part;
- RECT32 rect, *r;
- int i;
-
- /* get our window size */
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- rect.top += VERT_BORDER;
-
- /* set bounds for simple rectangle */
- self->part0.bound = rect;
-
- /* set bounds for non-simple rectangles */
- for (i = 0; i < self->numParts; i++) {
- part = &self->parts[i];
- r = &self->parts[i].bound;
- r->top = rect.top;
- r->bottom = rect.bottom;
- if (i == 0)
- r->left = 0;
- else
- r->left = self->parts[i-1].bound.right + HORZ_GAP;
- if (part->x == -1)
- r->right = rect.right;
- else
- r->right = part->x;
-
- if (self->hwndToolTip) {
- TTTOOLINFO32A ti;
-
- ti.cbSize = sizeof(TTTOOLINFO32A);
- ti.hwnd = wndPtr->hwndSelf;
- ti.uId = i;
- ti.rect = *r;
- SendMessage32A (self->hwndToolTip, TTM_NEWTOOLRECT32A,
- 0, (LPARAM)&ti);
- }
- }
-}
-
-
-static VOID
-STATUSBAR_RelayEvent (HWND32 hwndTip, HWND32 hwndMsg, UINT32 uMsg,
- WPARAM32 wParam, LPARAM lParam)
-{
- MSG32 msg;
-
- msg.hwnd = hwndMsg;
- msg.message = uMsg;
- msg.wParam = wParam;
- msg.lParam = lParam;
- msg.time = GetMessageTime ();
- msg.pt.x = LOWORD(GetMessagePos ());
- msg.pt.y = HIWORD(GetMessagePos ());
-
- SendMessage32A (hwndTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
-}
-
-
-__inline__ static LRESULT
-STATUSBAR_GetBorders (LPARAM lParam)
-{
- LPINT32 out = (LPINT32) lParam;
-
- out[0] = HORZ_BORDER; /* horizontal border width */
- out[1] = VERT_BORDER; /* vertical border width */
- out[2] = HORZ_GAP; /* width of border between rectangles */
-
- return TRUE;
-}
-
-
-static LRESULT
-STATUSBAR_GetIcon (WND *wndPtr, WPARAM32 wParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- INT32 nPart;
-
- nPart = (INT32)wParam & 0x00ff;
- if ((nPart < -1) || (nPart >= self->numParts)) return 0;
-
- if (nPart == -1)
- return (self->part0.hIcon);
- else
- return (self->parts[nPart].hIcon);
-}
-
-
-static LRESULT
-STATUSBAR_GetParts (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- LPINT32 parts;
- INT32 num_parts;
- int i;
-
- num_parts = (INT32) wParam;
- parts = (LPINT32) lParam;
- if (parts) {
- return (self->numParts);
- for (i = 0; i < num_parts; i++) {
- parts[i] = self->parts[i].x;
- }
- }
- return (self->numParts);
-}
-
-
-static LRESULT
-STATUSBAR_GetRect (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- int part_num;
- LPRECT32 rect;
-
- part_num = ((INT32) wParam) & 0x00ff;
- rect = (LPRECT32) lParam;
- if (self->simple)
- *rect = self->part0.bound;
- else
- *rect = self->parts[part_num].bound;
- return TRUE;
-}
-
-
-static LRESULT
-STATUSBAR_GetText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- STATUSWINDOWPART *part;
- int part_num;
- LRESULT result;
- LPSTR out_text;
-
- part_num = ((INT32) wParam) & 0x00ff;
- out_text = (LPSTR) lParam;
- if (self->simple)
- part = &self->part0;
- else
- part = &self->parts[part_num];
-
- if (part->style == SBT_OWNERDRAW)
- result = (LRESULT) part->text;
- else {
- result = part->text ? lstrlen32A(part->text) : 0;
- result |= (part->style << 16);
- if (out_text) {
- lstrcpy32A(out_text, part->text);
- }
- }
- return result;
-}
-
-
-// << STATUSBAR_GetText32W >>
-
-
-static LRESULT
-STATUSBAR_GetTextLength32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- STATUSWINDOWPART *part;
- int part_num;
- DWORD result;
-
- part_num = ((INT32) wParam) & 0x00ff;
-
- if (self->simple)
- part = &self->part0;
- else
- part = &self->parts[part_num];
-
- if (part->text)
- result = lstrlen32A(part->text);
- else
- result = 0;
-
- result |= (part->style << 16);
- return result;
-}
-
-
-// << STATUSBAR_GetTextLength32W >>
-
-
-static LRESULT
-STATUSBAR_GetTipText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *infoPtr = STATUSBAR_GetInfoPtr (wndPtr);
-
- if (infoPtr->hwndToolTip) {
- TTTOOLINFO32A ti;
-
- ti.cbSize = sizeof(TTTOOLINFO32A);
- ti.hwnd = wndPtr->hwndSelf;
- ti.uId = LOWORD(wParam);
- SendMessage32A (infoPtr->hwndToolTip, TTM_GETTEXT32A, 0, (LPARAM)&ti);
-
- if (ti.lpszText)
- lstrcpyn32A ((LPSTR)lParam, ti.lpszText, HIWORD(wParam));
- }
-
- return 0;
-}
-
-
-// << STATUSBAR_GetTipText32W >>
-// << STATUSBAR_GetUnicodeFormat >>
-
-
-__inline__ static LRESULT
-STATUSBAR_IsSimple (WND *wndPtr)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
-
- return self->simple;
-}
-
-
-static LRESULT
-STATUSBAR_SetBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- COLORREF oldBkColor;
- HDC32 hdc;
-
- oldBkColor = self->clrBk;
- self->clrBk = (COLORREF)lParam;
- hdc = GetDC32 (wndPtr->hwndSelf);
- STATUSBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return oldBkColor;
-}
-
-
-static LRESULT
-STATUSBAR_SetIcon (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- INT32 nPart = (INT32)wParam & 0x00ff;
- HDC32 hdc;
-
- if ((nPart < -1) || (nPart >= self->numParts)) return FALSE;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- if (nPart == -1) {
- self->part0.hIcon = (HICON32)lParam;
- if (self->simple)
- STATUSBAR_RefreshPart (wndPtr, &self->part0, hdc);
- }
- else {
- self->parts[nPart].hIcon = (HICON32)lParam;
- if (!(self->simple))
- STATUSBAR_RefreshPart (wndPtr, &self->parts[nPart], hdc);
- }
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-STATUSBAR_SetMinHeight (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
-
- if (IsWindowVisible32 (wndPtr->hwndSelf)) {
- HWND32 parent = GetParent32 (wndPtr->hwndSelf);
- INT32 width, x, y;
- RECT32 parent_rect;
-
- GetClientRect32 (parent, &parent_rect);
- self->height = (INT32)wParam + VERT_BORDER;
- width = parent_rect.right - parent_rect.left;
- x = parent_rect.left;
- y = parent_rect.bottom - self->height;
- MoveWindow32 (wndPtr->hwndSelf, parent_rect.left,
- parent_rect.bottom - self->height,
- width, self->height, TRUE);
- STATUSBAR_SetPartBounds (wndPtr);
- }
-
- return TRUE;
-}
-
-
-static LRESULT
-STATUSBAR_SetParts (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- HDC32 hdc;
- LPINT32 parts;
- STATUSWINDOWPART * tmp;
- int i;
- int oldNumParts;
-
- if (self->simple)
- self->simple = FALSE;
-
- oldNumParts = self->numParts;
- self->numParts = (INT32) wParam;
- parts = (LPINT32) lParam;
- if (oldNumParts > self->numParts) {
- for (i = self->numParts ; i < oldNumParts; i++) {
- if (self->parts[i].text && (self->parts[i].style != SBT_OWNERDRAW))
- HeapFree(GetProcessHeap (), 0, self->parts[i].text);
- }
- }
- else if (oldNumParts < self->numParts) {
- tmp = HeapAlloc(GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(STATUSWINDOWPART) * self->numParts);
- for (i = 0; i < oldNumParts; i++) {
- tmp[i] = self->parts[i];
- }
- if (self->parts)
- HeapFree(GetProcessHeap (), 0, self->parts);
- self->parts = tmp;
- }
-
- for (i = 0; i < self->numParts; i++) {
- self->parts[i].x = parts[i];
- }
-
- if (self->hwndToolTip) {
- INT32 nTipCount =
- SendMessage32A (self->hwndToolTip, TTM_GETTOOLCOUNT, 0, 0);
-
- if (nTipCount < self->numParts) {
- /* add tools */
- TTTOOLINFO32A ti;
- INT32 i;
-
- ZeroMemory (&ti, sizeof(TTTOOLINFO32A));
- ti.cbSize = sizeof(TTTOOLINFO32A);
- ti.hwnd = wndPtr->hwndSelf;
- for (i = nTipCount; i < self->numParts; i++) {
- TRACE (statusbar, "add tool %d\n", i);
- ti.uId = i;
- SendMessage32A (self->hwndToolTip, TTM_ADDTOOL32A,
- 0, (LPARAM)&ti);
- }
- }
- else if (nTipCount > self->numParts) {
- /* delete tools */
- INT32 i;
-
- for (i = nTipCount - 1; i >= self->numParts; i--) {
-
- TRACE (statusbar, "delete tool %d\n", i);
-
- }
- }
- }
-
- STATUSBAR_SetPartBounds (wndPtr);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- STATUSBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-STATUSBAR_SetText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- STATUSWINDOWPART *part;
- int part_num;
- int style;
- LPSTR text;
- int len;
- HDC32 hdc;
-
- text = (LPSTR) lParam;
- part_num = ((INT32) wParam) & 0x00ff;
- style = ((INT32) wParam) & 0xff00;
-
- if ((self->simple) || (self->parts==NULL) || (part_num==255))
- part = &self->part0;
- else
- part = &self->parts[part_num];
- if (!part) return FALSE;
- part->style = style;
- if (style == SBT_OWNERDRAW) {
- part->text = text;
- }
- else {
- /* duplicate string */
- if (part->text)
- HeapFree (GetProcessHeap (), 0, part->text);
- part->text = 0;
- if (text && (len = lstrlen32A(text))) {
- part->text = HeapAlloc (GetProcessHeap (), 0, len+1);
- lstrcpy32A(part->text, text);
- }
- }
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- STATUSBAR_RefreshPart (wndPtr, part, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-// << STATUSBAR_SetText32W >>
-
-
-static LRESULT
-STATUSBAR_SetTipText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- TTTOOLINFO32A ti;
-
- TRACE (statusbar, "part %d: \"%s\"\n", (INT32)wParam, (LPSTR)lParam);
- if (self->hwndToolTip) {
- ti.cbSize = sizeof(TTTOOLINFO32A);
- ti.hwnd = wndPtr->hwndSelf;
- ti.uId = (INT32)wParam;
- ti.hinst = 0;
- ti.lpszText = (LPSTR)lParam;
- SendMessage32A (self->hwndToolTip, TTM_UPDATETIPTEXT32A,
- 0, (LPARAM)&ti);
- }
-
- return 0;
-}
-
-
-// << STATUSBAR_SetTipText32W >>
-// << STATUSBAR_SetUnicodeFormat >>
-
-
-static LRESULT
-STATUSBAR_Simple (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- BOOL32 simple;
- HDC32 hdc;
- NMHDR nmhdr;
-
- simple = (BOOL32) wParam;
- self->simple = simple;
-
- /* send notification */
- nmhdr.hwndFrom = wndPtr->hwndSelf;
- nmhdr.idFrom = wndPtr->wIDmenu;
- nmhdr.code = SBN_SIMPLEMODECHANGE;
- SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
- 0, (LPARAM)&nmhdr);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- STATUSBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-STATUSBAR_WMCreate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- LPCREATESTRUCT32A lpCreate = (LPCREATESTRUCT32A) lParam;
- NONCLIENTMETRICS32A nclm;
- RECT32 rect;
- int width, len;
- HDC32 hdc;
- STATUSWINDOWINFO *self;
-
- self = (STATUSWINDOWINFO*)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(STATUSWINDOWINFO));
- wndPtr->wExtra[0] = (DWORD)self;
-
- self->numParts = 1;
- self->parts = 0;
- self->simple = FALSE;
- self->clrBk = CLR_DEFAULT;
- self->hFont = 0;
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- nclm.cbSize = sizeof(NONCLIENTMETRICS32A);
- SystemParametersInfo32A (SPI_GETNONCLIENTMETRICS, 0, &nclm, 0);
- self->hDefaultFont = CreateFontIndirect32A (&nclm.lfStatusFont);
-
- /* initialize simple case */
- self->part0.bound = rect;
- self->part0.text = 0;
- self->part0.x = 0;
- self->part0.style = 0;
- self->part0.hIcon = 0;
-
- /* initialize first part */
- self->parts = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(STATUSWINDOWPART));
- self->parts[0].bound = rect;
- self->parts[0].text = 0;
- self->parts[0].x = -1;
- self->parts[0].style = 0;
- self->parts[0].hIcon = 0;
-
- if ((len = lstrlen32A (lpCreate->lpszName))) {
- self->parts[0].text = HeapAlloc (GetProcessHeap (), 0, len + 1);
- lstrcpy32A (self->parts[0].text, lpCreate->lpszName);
- }
-
- if ((hdc = GetDC32 (0))) {
- TEXTMETRIC32A tm;
- HFONT32 hOldFont;
-
- hOldFont = SelectObject32 (hdc,self->hDefaultFont);
- GetTextMetrics32A(hdc, &tm);
- self->textHeight = tm.tmHeight;
- SelectObject32 (hdc, hOldFont);
- ReleaseDC32(0, hdc);
- }
-
- if (wndPtr->dwStyle & SBT_TOOLTIPS) {
- self->hwndToolTip =
- CreateWindowEx32A (0, TOOLTIPS_CLASS32A, NULL, 0,
- CW_USEDEFAULT32, CW_USEDEFAULT32,
- CW_USEDEFAULT32, CW_USEDEFAULT32,
- wndPtr->hwndSelf, 0,
- wndPtr->hInstance, NULL);
-
- if (self->hwndToolTip) {
- NMTOOLTIPSCREATED nmttc;
-
- nmttc.hdr.hwndFrom = wndPtr->hwndSelf;
- nmttc.hdr.idFrom = wndPtr->wIDmenu;
- nmttc.hdr.code = NM_TOOLTIPSCREATED;
- nmttc.hwndToolTips = self->hwndToolTip;
-
- SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
- (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmttc);
- }
- }
-
- GetClientRect32 (GetParent32 (wndPtr->hwndSelf), &rect);
- width = rect.right - rect.left;
- self->height = self->textHeight + 4 + VERT_BORDER;
- MoveWindow32 (wndPtr->hwndSelf, lpCreate->x, lpCreate->y-1,
- width, self->height, FALSE);
- STATUSBAR_SetPartBounds (wndPtr);
-
- return 0;
-}
-
-
-static LRESULT
-STATUSBAR_WMDestroy (WND *wndPtr)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- int i;
-
- for (i = 0; i < self->numParts; i++) {
- if (self->parts[i].text && (self->parts[i].style != SBT_OWNERDRAW))
- HeapFree(GetProcessHeap (), 0, self->parts[i].text);
- }
- if (self->part0.text && (self->part0.style != SBT_OWNERDRAW))
- HeapFree(GetProcessHeap (), 0, self->part0.text);
- HeapFree(GetProcessHeap (), 0, self->parts);
-
- /* delete default font */
- if (self->hDefaultFont)
- DeleteObject32 (self->hDefaultFont);
-
- /* delete tool tip control */
- if (self->hwndToolTip)
- DestroyWindow32 (self->hwndToolTip);
-
- HeapFree(GetProcessHeap (), 0, self);
-
- return 0;
-}
-
-
-static __inline__ LRESULT
-STATUSBAR_WMGetFont (WND *wndPtr)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
-
- return self->hFont;
-}
-
-
-static LRESULT
-STATUSBAR_WMGetText (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- INT32 len;
-
- if (!(self->parts[0].text))
- return 0;
- len = lstrlen32A (self->parts[0].text);
- if (wParam > len) {
- lstrcpy32A ((LPSTR)lParam, self->parts[0].text);
- return len;
- }
- else
- return -1;
-}
-
-
-static LRESULT
-STATUSBAR_WMGetTextLength (WND *wndPtr)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
-
- if (!(self->parts[0].text))
- return 0;
-
- return (lstrlen32A (self->parts[0].text));
-}
-
-
-__inline__ static LRESULT
-STATUSBAR_WMMouseMove (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
-
- if (self->hwndToolTip)
- STATUSBAR_RelayEvent (self->hwndToolTip, wndPtr->hwndSelf,
- WM_MOUSEMOVE, wParam, lParam);
- return 0;
-}
-
-
-static LRESULT
-STATUSBAR_WMNCHitTest (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- if (wndPtr->dwStyle & SBARS_SIZEGRIP) {
- RECT32 rect;
- POINT32 pt;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- ScreenToClient32 (wndPtr->hwndSelf, &pt);
-
- rect.left = rect.right - 13;
- rect.top += 2;
-
- if (PtInRect32 (&rect, pt))
- return HTBOTTOMRIGHT;
- }
-
- return DefWindowProc32A (wndPtr->hwndSelf, WM_NCHITTEST, wParam, lParam);
-}
-
-
-static __inline__ LRESULT
-STATUSBAR_WMNCLButtonDown (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PostMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NCLBUTTONDOWN,
- wParam, lParam);
- return 0;
-}
-
-
-static __inline__ LRESULT
-STATUSBAR_WMNCLButtonUp (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- PostMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NCLBUTTONUP,
- wParam, lParam);
- return 0;
-}
-
-
-static LRESULT
-STATUSBAR_WMPaint (WND *wndPtr, WPARAM32 wParam)
-{
- HDC32 hdc;
- PAINTSTRUCT32 ps;
-
- hdc = wParam==0 ? BeginPaint32 (wndPtr->hwndSelf, &ps) : (HDC32)wParam;
- STATUSBAR_Refresh (wndPtr, hdc);
- if (!wParam)
- EndPaint32 (wndPtr->hwndSelf, &ps);
-
- return 0;
-}
-
-
-static LRESULT
-STATUSBAR_WMSetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
-
- self->hFont = (HFONT32)wParam;
- if (LOWORD(lParam) == TRUE) {
- HDC32 hdc = GetDC32 (wndPtr->hwndSelf);
- STATUSBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
-
- return 0;
-}
-
-
-static LRESULT
-STATUSBAR_WMSetText (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- STATUSWINDOWPART *part;
- int len;
- HDC32 hdc;
-
- if (self->numParts == 0)
- return FALSE;
-
- part = &self->parts[0];
- /* duplicate string */
- if (part->text)
- HeapFree(GetProcessHeap (), 0, part->text);
- part->text = 0;
- if (lParam && (len = lstrlen32A((LPCSTR)lParam))) {
- part->text = HeapAlloc (GetProcessHeap (), 0, len+1);
- lstrcpy32A (part->text, (LPCSTR)lParam);
- }
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- STATUSBAR_RefreshPart (wndPtr, part, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-STATUSBAR_WMSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- STATUSWINDOWINFO *self = STATUSBAR_GetInfoPtr (wndPtr);
- INT32 width, x, y, flags;
- RECT32 parent_rect;
- HWND32 parent;
-
- /* Need to resize width to match parent */
- flags = (INT32) wParam;
-
- /* FIXME for flags =
- * SIZE_MAXIMIZED, SIZE_MAXSHOW, SIZE_MINIMIZED, SIZE_RESTORED
- */
-
- if (flags == SIZE_RESTORED) {
- /* width and height don't apply */
- parent = GetParent32 (wndPtr->hwndSelf);
- GetClientRect32 (parent, &parent_rect);
- width = parent_rect.right - parent_rect.left;
- x = parent_rect.left;
- y = parent_rect.bottom - self->height;
- MoveWindow32 (wndPtr->hwndSelf, parent_rect.left,
- parent_rect.bottom - self->height,
- width, self->height, TRUE);
- STATUSBAR_SetPartBounds (wndPtr);
- }
- return 0;
-}
-
-
-static LRESULT
-STATUSBAR_SendNotify (WND *wndPtr, UINT32 code)
-{
- NMHDR nmhdr;
-
- nmhdr.hwndFrom = wndPtr->hwndSelf;
- nmhdr.idFrom = wndPtr->wIDmenu;
- nmhdr.code = code;
- SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_NOTIFY,
- 0, (LPARAM)&nmhdr);
- return 0;
-}
-
-
-
-LRESULT WINAPI
-StatusWindowProc (HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr (hwnd);
-
- switch (msg) {
- case SB_GETBORDERS:
- return STATUSBAR_GetBorders (lParam);
-
- case SB_GETICON:
- return STATUSBAR_GetIcon (wndPtr, wParam);
-
- case SB_GETPARTS:
- return STATUSBAR_GetParts (wndPtr, wParam, lParam);
-
- case SB_GETRECT:
- return STATUSBAR_GetRect (wndPtr, wParam, lParam);
-
- case SB_GETTEXT32A:
- return STATUSBAR_GetText32A (wndPtr, wParam, lParam);
-
-// case SB_GETTEXT32W:
-
- case SB_GETTEXTLENGTH32A:
- return STATUSBAR_GetTextLength32A (wndPtr, wParam, lParam);
-
-// case SB_GETTEXTLENGHT32W:
-
- case SB_GETTIPTEXT32A:
- return STATUSBAR_GetTipText32A (wndPtr, wParam, lParam);
-
-// case SB_GETTIPTEXT32W:
-// case SB_GETUNICODEFORMAT:
-
- case SB_ISSIMPLE:
- return STATUSBAR_IsSimple (wndPtr);
-
- case SB_SETBKCOLOR:
- return STATUSBAR_SetBkColor (wndPtr, wParam, lParam);
-
- case SB_SETICON:
- return STATUSBAR_SetIcon (wndPtr, wParam, lParam);
-
- case SB_SETMINHEIGHT:
- return STATUSBAR_SetMinHeight (wndPtr, wParam, lParam);
-
- case SB_SETPARTS:
- return STATUSBAR_SetParts (wndPtr, wParam, lParam);
-
- case SB_SETTEXT32A:
- return STATUSBAR_SetText32A (wndPtr, wParam, lParam);
-
-// case SB_SETTEXT32W:
-
- case SB_SETTIPTEXT32A:
- return STATUSBAR_SetTipText32A (wndPtr, wParam, lParam);
-
-// case SB_SETTIPTEXT32W:
-// case SB_SETUNICODEFORMAT:
-
- case SB_SIMPLE:
- return STATUSBAR_Simple (wndPtr, wParam, lParam);
-
-
- case WM_CREATE:
- return STATUSBAR_WMCreate (wndPtr, wParam, lParam);
-
- case WM_DESTROY:
- return STATUSBAR_WMDestroy (wndPtr);
-
- case WM_GETFONT:
- return STATUSBAR_WMGetFont (wndPtr);
-
- case WM_GETTEXT:
- return STATUSBAR_WMGetText (wndPtr, wParam, lParam);
-
- case WM_GETTEXTLENGTH:
- return STATUSBAR_WMGetTextLength (wndPtr);
-
- case WM_LBUTTONDBLCLK:
- return STATUSBAR_SendNotify (wndPtr, NM_DBLCLK);
-
- case WM_LBUTTONUP:
- return STATUSBAR_SendNotify (wndPtr, NM_CLICK);
-
- case WM_MOUSEMOVE:
- return STATUSBAR_WMMouseMove (wndPtr, wParam, lParam);
-
- case WM_NCHITTEST:
- return STATUSBAR_WMNCHitTest (wndPtr, wParam, lParam);
-
- case WM_NCLBUTTONDOWN:
- return STATUSBAR_WMNCLButtonDown (wndPtr, wParam, lParam);
-
- case WM_NCLBUTTONUP:
- return STATUSBAR_WMNCLButtonUp (wndPtr, wParam, lParam);
-
- case WM_PAINT:
- return STATUSBAR_WMPaint (wndPtr, wParam);
-
- case WM_RBUTTONDBLCLK:
- return STATUSBAR_SendNotify (wndPtr, NM_RDBLCLK);
-
- case WM_RBUTTONUP:
- return STATUSBAR_SendNotify (wndPtr, NM_RCLICK);
-
- case WM_SETFONT:
- return STATUSBAR_WMSetFont (wndPtr, wParam, lParam);
-
- case WM_SETTEXT:
- return STATUSBAR_WMSetText (wndPtr, wParam, lParam);
-
- case WM_SIZE:
- return STATUSBAR_WMSize (wndPtr, wParam, lParam);
-
- default:
- if (msg >= WM_USER)
- ERR (statusbar, "unknown msg %04x wp=%04x lp=%08lx\n",
- msg, wParam, lParam);
- return DefWindowProc32A (hwnd, msg, wParam, lParam);
- }
- return 0;
-}
-
-
-/***********************************************************************
- * STATUS_Register [Internal]
- *
- * Registers the status window class.
- */
-void STATUS_Register (void)
-{
- WNDCLASS32A wndClass;
-
- if (GlobalFindAtom32A (STATUSCLASSNAME32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW;
- wndClass.lpfnWndProc = (WNDPROC32)StatusWindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(STATUSWINDOWINFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.hbrBackground = (HBRUSH32)(COLOR_3DFACE + 1);
- wndClass.lpszClassName = STATUSCLASSNAME32A;
-
- RegisterClass32A (&wndClass);
-}
-
diff --git a/controls/toolbar.c b/controls/toolbar.c
deleted file mode 100644
index 142ffb6..0000000
--- a/controls/toolbar.c
+++ /dev/null
@@ -1,2641 +0,0 @@
-/*
- * Toolbar control
- *
- * Copyright 1998 Eric Kohl
- *
- * TODO:
- * - Bitmap drawing.
- * - Button wrapping.
- * - Messages.
- * - Notifications.
- * - Fix TB_GETBITMAPFLAGS.
- * - Fix TB_GETROWS and TB_SETROWS.
- * - Tooltip support (almost complete).
- * - Unicode suppport.
- * - Internal COMMCTL32 bitmaps.
- * - Fix TOOLBAR_Customize. (Customize dialog.)
- *
- * Testing:
- * - Run tests using Waite Group Windows95 API Bible Volume 2.
- * The second cdrom contains executables addstr.exe, btncount.exe,
- * btnstate.exe, butstrsz.exe, chkbtn.exe, chngbmp.exe, customiz.exe,
- * enablebtn.exe, getbmp.exe, getbtn.exe, getflags.exe, hidebtn.exe,
- * indetbtn.exe, insbtn.exe, pressbtn.exe, setbtnsz.exe, setcmdid.exe,
- * setparnt.exe, setrows.exe, toolwnd.exe.
- * - Microsofts controlspy examples.
- */
-
-#include "windows.h"
-#include "commctrl.h"
-#include "cache.h"
-#include "toolbar.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-#define SEPARATOR_WIDTH 8
-#define SEPARATOR_HEIGHT 5
-#define TOP_BORDER 2
-#define BOTTOM_BORDER 2
-
-
-
-#define TOOLBAR_GetInfoPtr(wndPtr) ((TOOLBAR_INFO *)wndPtr->wExtra[0])
-
-
-static void
-TOOLBAR_DrawFlatSeparator (LPRECT32 lpRect, HDC32 hdc)
-{
- INT32 x = (lpRect->left + lpRect->right) / 2 - 1;
- INT32 yBottom = lpRect->bottom - 3;
- INT32 yTop = lpRect->top + 1;
-
- SelectObject32 ( hdc, GetSysColorPen32 (COLOR_3DSHADOW));
- MoveToEx32 (hdc, x, yBottom, NULL);
- LineTo32 (hdc, x, yTop);
- x++;
- SelectObject32 ( hdc, GetSysColorPen32 (COLOR_3DHILIGHT));
- MoveToEx32 (hdc, x, yBottom, NULL);
- LineTo32 (hdc, x, yTop);
-}
-
-
-static void
-TOOLBAR_DrawString (TOOLBAR_INFO *infoPtr, TBUTTON_INFO *btnPtr,
- HDC32 hdc, INT32 nState)
-{
- RECT32 rcText = btnPtr->rect;
- HFONT32 hOldFont;
- INT32 nOldBkMode;
-
- /* draw text */
- if ((btnPtr->iString > -1) && (btnPtr->iString < infoPtr->nNumStrings)) {
-
- InflateRect32 (&rcText, -3, -3);
- rcText.top += infoPtr->nBitmapHeight;
- if (nState & (TBSTATE_PRESSED | TBSTATE_CHECKED))
- OffsetRect32 (&rcText, 1, 1);
-
- hOldFont = SelectObject32 (hdc, infoPtr->hFont);
- nOldBkMode = SetBkMode32 (hdc, TRANSPARENT);
- if (!(nState & TBSTATE_ENABLED)) {
- COLORREF clrOld =
- SetTextColor32 (hdc, GetSysColor32 (COLOR_3DHILIGHT));
- OffsetRect32 (&rcText, 1, 1);
- DrawText32A (hdc, infoPtr->strings[btnPtr->iString], -1, &rcText,
- DT_CENTER);
- SetTextColor32 (hdc, GetSysColor32 (COLOR_3DSHADOW));
- OffsetRect32 (&rcText, -1, -1);
- DrawText32A (hdc, infoPtr->strings[btnPtr->iString], -1, &rcText,
- DT_CENTER);
- SetTextColor32 (hdc, clrOld);
- }
- else if (nState & TBSTATE_INDETERMINATE) {
- COLORREF clrOld =
- SetTextColor32 (hdc, GetSysColor32 (COLOR_3DSHADOW));
- DrawText32A (hdc, infoPtr->strings[btnPtr->iString], -1, &rcText,
- DT_CENTER);
- SetTextColor32 (hdc, clrOld);
- }
- else
- DrawText32A (hdc, infoPtr->strings[btnPtr->iString], -1, &rcText,
- DT_CENTER);
-
- SelectObject32 (hdc, hOldFont);
- if (nOldBkMode != TRANSPARENT)
- SetBkMode32 (hdc, nOldBkMode);
- }
-}
-
-
-static void
-TOOLBAR_DrawButton (WND *wndPtr, TBUTTON_INFO *btnPtr, HDC32 hdc)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- BOOL32 bFlat = (wndPtr->dwStyle & TBSTYLE_FLAT);
- RECT32 rc;
-
- if (btnPtr->fsState & TBSTATE_HIDDEN) return;
-
- rc = btnPtr->rect;
- if (btnPtr->fsStyle & TBSTYLE_SEP) {
- if ((bFlat) && (btnPtr->idCommand == 0))
- TOOLBAR_DrawFlatSeparator (&btnPtr->rect, hdc);
- return;
- }
-
- /* disabled */
- if (!(btnPtr->fsState & TBSTATE_ENABLED)) {
- HICON32 hIcon;
- DrawEdge32 (hdc, &rc, EDGE_RAISED,
- BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
-
-// ImageList_Draw (infoPtr->himlDis, btnPtr->iBitmap, hdc,
-// rc.left+1, rc.top+1, ILD_NORMAL);
- TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
- return;
- }
-
- /* pressed TBSTYLE_BUTTON */
- if (btnPtr->fsState & TBSTATE_PRESSED) {
- DrawEdge32 (hdc, &rc, EDGE_SUNKEN,
- BF_RECT | BF_MIDDLE | BF_ADJUST);
- ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
- rc.left+2, rc.top+2, ILD_NORMAL);
- TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
- return;
- }
-
- /* checked TBSTYLE_CHECK*/
- if ((btnPtr->fsStyle & TBSTYLE_CHECK) &&
- (btnPtr->fsState & TBSTATE_CHECKED)) {
- HBRUSH32 hbr;
- DrawEdge32 (hdc, &rc, EDGE_SUNKEN,
- BF_RECT | BF_MIDDLE | BF_ADJUST);
-
- hbr = SelectObject32 (hdc, CACHE_GetPattern55AABrush ());
- PatBlt32 (hdc, rc.left, rc.top, rc.right - rc.left,
- rc.bottom - rc.top, 0x00FA0089);
- SelectObject32 (hdc, hbr);
- ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
- rc.left+2, rc.top+2, ILD_NORMAL);
- TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
- return;
- }
-
- /* indeterminate */
- if (btnPtr->fsState & TBSTATE_INDETERMINATE) {
- HBRUSH32 hbr;
- DrawEdge32 (hdc, &rc, EDGE_RAISED,
- BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
-
- hbr = SelectObject32 (hdc, CACHE_GetPattern55AABrush ());
- PatBlt32 (hdc, rc.left, rc.top, rc.right - rc.left,
- rc.bottom - rc.top, 0x00FA0089);
- SelectObject32 (hdc, hbr);
-// ImageList_Draw (infoPtr->himlDis, btnPtr->iBitmap, hdc,
-// rc.left+1, rc.top+1, ILD_NORMAL);
- TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
- return;
- }
-
- /* normal state */
- DrawEdge32 (hdc, &rc, EDGE_RAISED,
- BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
- ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
- rc.left+1, rc.top+1, ILD_NORMAL);
- TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState);
-}
-
-
-static void
-TOOLBAR_Refresh (WND *wndPtr, HDC32 hdc)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- INT32 i;
-
- /* draw buttons */
- btnPtr = infoPtr->buttons;
- for (i = 0; i < infoPtr->nNumButtons; i++, btnPtr++)
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
-}
-
-
-static void
-TOOLBAR_CalcStrings (WND *wndPtr, LPSIZE32 lpSize)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- INT32 i;
- HDC32 hdc;
- HFONT32 hOldFont;
- SIZE32 sz;
-
- lpSize->cx = 0;
- lpSize->cy = 0;
- hdc = GetDC32 (0);
- hOldFont = SelectObject32 (hdc, infoPtr->hFont);
-
- btnPtr = infoPtr->buttons;
- for (i = 0; i < infoPtr->nNumButtons; i++, btnPtr++) {
- if (!(btnPtr->fsState & TBSTATE_HIDDEN) &&
- (btnPtr->iString > -1) &&
- (btnPtr->iString < infoPtr->nNumStrings)) {
- LPSTR lpText = infoPtr->strings[btnPtr->iString];
- GetTextExtentPoint32A (hdc, lpText, lstrlen32A(lpText), &sz);
- if (sz.cx > lpSize->cx)
- lpSize->cx = sz.cx;
- if (sz.cy > lpSize->cy)
- lpSize->cy = sz.cy;
- }
- }
-
- SelectObject32 (hdc, hOldFont);
- ReleaseDC32 (0, hdc);
-
- TRACE (toolbar, "string size %d x %d!\n", lpSize->cx, lpSize->cy);
-}
-
-
-static void
-TOOLBAR_CalcToolbar (WND *wndPtr)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- INT32 i, j, nRows;
- INT32 x, y, cx, cy;
- BOOL32 bVertical;
- SIZE32 sizeString;
- RECT32 rect = {0, 0, 0, 0};
-
- TOOLBAR_CalcStrings (wndPtr, &sizeString);
-
- if (sizeString.cy > 0)
- infoPtr->nButtonHeight = sizeString.cy + infoPtr->nBitmapHeight + 6;
- else if (infoPtr->nButtonHeight < infoPtr->nBitmapHeight + 6)
- infoPtr->nButtonHeight = infoPtr->nBitmapHeight + 6;
-
- if (sizeString.cx > infoPtr->nBitmapWidth)
- infoPtr->nButtonWidth = sizeString.cx + 6;
- else if (infoPtr->nButtonWidth < infoPtr->nBitmapWidth + 6)
- infoPtr->nButtonWidth = infoPtr->nBitmapWidth + 6;
-
- x = infoPtr->nIndent;
- y = TOP_BORDER;
- cx = infoPtr->nButtonWidth;
- cy = infoPtr->nButtonHeight;
- nRows = 1;
- rect.top = y;
- rect.left = x;
- rect.bottom = y + cy;
- rect.right = x;
-
- btnPtr = infoPtr->buttons;
- for (i = 0; i < infoPtr->nNumButtons; i++, btnPtr++) {
- bVertical = FALSE;
-
- if (btnPtr->fsState & TBSTATE_HIDDEN)
- continue;
-
- if (btnPtr->fsStyle & TBSTYLE_SEP) {
- /* UNDOCUMENTED: If a separator has a non zero bitmap index, */
- /* it is the actual width of the separator. This is used for */
- /* custom controls in toolbars. */
- if ((wndPtr->dwStyle & TBSTYLE_WRAPABLE) &&
- (btnPtr->fsState & TBSTATE_WRAP)) {
- x = 0;
- y += cy;
- cx = infoPtr->nWidth;
- cy = ((btnPtr->iBitmap > 0) ?
- btnPtr->iBitmap : SEPARATOR_WIDTH) * 2 / 3;
- nRows++;
- bVertical = TRUE;
- }
- else
- cx = (btnPtr->iBitmap > 0) ?
- btnPtr->iBitmap : SEPARATOR_WIDTH;
- }
- else {
- /* this must be a button */
- cx = infoPtr->nButtonWidth;
-
- }
-
- btnPtr->rect.left = x;
- btnPtr->rect.top = y;
- btnPtr->rect.right = x + cx;
- btnPtr->rect.bottom = y + cy;
-
- if (rect.left > x)
- rect.left = x;
- if (rect.right < x + cx)
- rect.right = x + cx;
- if (rect.bottom < y + cy)
- rect.bottom = y + cy;
-
- if (infoPtr->hwndToolTip) {
- TTTOOLINFO32A ti;
-
- ZeroMemory (&ti, sizeof(TTTOOLINFO32A));
- ti.cbSize = sizeof(TTTOOLINFO32A);
- ti.hwnd = wndPtr->hwndSelf;
- ti.uId = btnPtr->idCommand;
- ti.rect = btnPtr->rect;
- SendMessage32A (infoPtr->hwndToolTip, TTM_NEWTOOLRECT32A,
- 0, (LPARAM)&ti);
- }
-
- if (bVertical) {
- x = 0;
- y += cy;
- if (i < infoPtr->nNumButtons)
- nRows++;
- }
- else
- x += cx;
- }
-
- infoPtr->nHeight = y + cy + BOTTOM_BORDER;
- infoPtr->maxSize.cx = rect.right - rect.left;
- infoPtr->maxSize.cy = rect.bottom - rect.top;
- TRACE (toolbar, "toolbar height %d\n", infoPtr->nHeight);
-}
-
-
-static INT32
-TOOLBAR_InternalHitTest (WND *wndPtr, LPPOINT32 lpPt)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- INT32 i;
-
- btnPtr = infoPtr->buttons;
- for (i = 0; i < infoPtr->nNumButtons; i++, btnPtr++) {
- if (btnPtr->fsState & TBSTATE_HIDDEN)
- continue;
-
- if (btnPtr->fsStyle & TBSTYLE_SEP) {
- if (PtInRect32 (&btnPtr->rect, *lpPt)) {
- TRACE (toolbar, " ON SEPARATOR %d!\n", i);
- return -i;
- }
- }
- else {
- if (PtInRect32 (&btnPtr->rect, *lpPt)) {
- TRACE (toolbar, " ON BUTTON %d!\n", i);
- return i;
- }
- }
- }
-
- TRACE (toolbar, " NOWHERE!\n");
- return -1;
-}
-
-
-static INT32
-TOOLBAR_GetButtonIndex (TOOLBAR_INFO *infoPtr, INT32 idCommand)
-{
- TBUTTON_INFO *btnPtr;
- INT32 i;
-
- btnPtr = infoPtr->buttons;
- for (i = 0; i < infoPtr->nNumButtons; i++, btnPtr++) {
- if (btnPtr->idCommand == idCommand) {
- TRACE (toolbar, "command=%d index=%d\n", idCommand, i);
- return i;
- }
- }
- TRACE (toolbar, "no index found for command=%d\n", idCommand);
- return -1;
-}
-
-
-static INT32
-TOOLBAR_GetCheckedGroupButtonIndex (TOOLBAR_INFO *infoPtr, INT32 nIndex)
-{
- TBUTTON_INFO *btnPtr;
- INT32 nRunIndex;
-
- if ((nIndex < 0) || (nIndex > infoPtr->nNumButtons))
- return -1;
-
- /* check index button */
- btnPtr = &infoPtr->buttons[nIndex];
- if ((btnPtr->fsStyle & TBSTYLE_CHECKGROUP) == TBSTYLE_CHECKGROUP) {
- if (btnPtr->fsState & TBSTATE_CHECKED)
- return nIndex;
- }
-
- /* check previous buttons */
- nRunIndex = nIndex - 1;
- while (nRunIndex >= 0) {
- btnPtr = &infoPtr->buttons[nRunIndex];
- if ((btnPtr->fsStyle & TBSTYLE_CHECKGROUP) == TBSTYLE_CHECKGROUP) {
- if (btnPtr->fsState & TBSTATE_CHECKED)
- return nRunIndex;
- }
- else
- break;
- nRunIndex--;
- }
-
- /* check next buttons */
- nRunIndex = nIndex + 1;
- while (nRunIndex < infoPtr->nNumButtons) {
- btnPtr = &infoPtr->buttons[nRunIndex];
- if ((btnPtr->fsStyle & TBSTYLE_CHECKGROUP) == TBSTYLE_CHECKGROUP) {
- if (btnPtr->fsState & TBSTATE_CHECKED)
- return nRunIndex;
- }
- else
- break;
- nRunIndex++;
- }
-
- return -1;
-}
-
-
-static VOID
-TOOLBAR_RelayEvent (HWND32 hwndTip, HWND32 hwndMsg, UINT32 uMsg,
- WPARAM32 wParam, LPARAM lParam)
-{
- MSG32 msg;
-
- msg.hwnd = hwndMsg;
- msg.message = uMsg;
- msg.wParam = wParam;
- msg.lParam = lParam;
- msg.time = GetMessageTime ();
- msg.pt.x = LOWORD(GetMessagePos ());
- msg.pt.y = HIWORD(GetMessagePos ());
-
- SendMessage32A (hwndTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
-}
-
-
-static LRESULT
-TOOLBAR_AddBitmap (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LPTBADDBITMAP lpAddBmp = (LPTBADDBITMAP)lParam;
- INT32 nIndex = 0;
-
- if ((!lpAddBmp) || ((INT32)wParam <= 0))
- return -1;
-
- TRACE (toolbar, "adding %d bitmaps!\n", wParam);
-
- if (!(infoPtr->himlDef)) {
- /* create new default image list */
- TRACE (toolbar, "creating default image list!\n");
- infoPtr->himlDef =
- ImageList_Create (infoPtr->nBitmapWidth, infoPtr->nBitmapHeight,
- ILC_COLOR | ILC_MASK, (INT32)wParam, 2);
- }
-
-#if 0
- if (!(infoPtr->himlDis)) {
- /* create new disabled image list */
- TRACE (toolbar, "creating disabled image list!\n");
- infoPtr->himlDis =
- ImageList_Create (infoPtr->nBitmapWidth,
- infoPtr->nBitmapHeight, ILC_COLOR | ILC_MASK,
- (INT32)wParam, 2);
- }
-#endif
-
- /* Add bitmaps to the default image list */
- if (lpAddBmp->hInst == (HINSTANCE32)0) {
- nIndex =
- ImageList_AddMasked (infoPtr->himlDef, (HBITMAP32)lpAddBmp->nID,
- GetSysColor32 (COLOR_3DFACE));
- }
- else if (lpAddBmp->hInst == HINST_COMMCTRL) {
- /* add internal bitmaps */
- FIXME (toolbar, "internal bitmaps not supported!\n");
-
- /* Hack to "add" some reserved images within the image list
- to get the right image indices */
- nIndex = ImageList_GetImageCount (infoPtr->himlDef);
- ImageList_SetImageCount (infoPtr->himlDef, nIndex + (INT32)wParam);
- }
- else {
- HBITMAP32 hBmp =
- LoadBitmap32A (lpAddBmp->hInst, (LPSTR)lpAddBmp->nID);
-
- nIndex = ImageList_Add (infoPtr->himlDef, hBmp, (HBITMAP32)0);
-
- DeleteObject32 (hBmp);
- }
-
-
- infoPtr->nNumBitmaps += (INT32)wParam;
-
- return nIndex;
-}
-
-
-static LRESULT
-TOOLBAR_AddButtons32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LPTBBUTTON lpTbb = (LPTBBUTTON)lParam;
- INT32 nOldButtons, nNewButtons, nAddButtons, nCount;
- HDC32 hdc;
-
- TRACE (toolbar, "adding %d buttons!\n", wParam);
-
- nAddButtons = (UINT32)wParam;
- nOldButtons = infoPtr->nNumButtons;
- nNewButtons = nOldButtons + nAddButtons;
-
- if (infoPtr->nNumButtons == 0) {
- infoPtr->buttons =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof (TBUTTON_INFO) * nNewButtons);
- }
- else {
- TBUTTON_INFO *oldButtons = infoPtr->buttons;
- infoPtr->buttons =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof (TBUTTON_INFO) * nNewButtons);
- memcpy (&infoPtr->buttons[0], &oldButtons[0],
- nOldButtons * sizeof(TBUTTON_INFO));
- HeapFree (GetProcessHeap (), 0, oldButtons);
- }
-
- infoPtr->nNumButtons = nNewButtons;
-
- /* insert new button data (bad implementation)*/
- for (nCount = 0; nCount < nAddButtons; nCount++) {
- infoPtr->buttons[nOldButtons+nCount].iBitmap = lpTbb[nCount].iBitmap;
- infoPtr->buttons[nOldButtons+nCount].idCommand = lpTbb[nCount].idCommand;
- infoPtr->buttons[nOldButtons+nCount].fsState = lpTbb[nCount].fsState;
- infoPtr->buttons[nOldButtons+nCount].fsStyle = lpTbb[nCount].fsStyle;
- infoPtr->buttons[nOldButtons+nCount].dwData = lpTbb[nCount].dwData;
- infoPtr->buttons[nOldButtons+nCount].iString = lpTbb[nCount].iString;
-
- if ((infoPtr->hwndToolTip) && !(lpTbb[nCount].fsStyle & TBSTYLE_SEP)) {
- TTTOOLINFO32A ti;
-
- ZeroMemory (&ti, sizeof(TTTOOLINFO32A));
- ti.cbSize = sizeof (TTTOOLINFO32A);
- ti.hwnd = wndPtr->hwndSelf;
- ti.uId = lpTbb[nCount].idCommand;
- ti.hinst = 0;
- ti.lpszText = LPSTR_TEXTCALLBACK32A;
-
- SendMessage32A (infoPtr->hwndToolTip, TTM_ADDTOOL32A,
- 0, (LPARAM)&ti);
- }
- }
-
- TOOLBAR_CalcToolbar (wndPtr);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-// << TOOLBAR_AddButtons32W >>
-
-
-static LRESULT
-TOOLBAR_AddString32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- if (wParam) {
- char szString[256];
- INT32 len;
- TRACE (toolbar, "adding string from resource!\n");
-
- len = LoadString32A ((HINSTANCE32)wParam, (UINT32)lParam,
- szString, 256);
-
- TRACE (toolbar, "len=%d \"%s\"\n", len, szString);
- nIndex = infoPtr->nNumStrings;
- if (infoPtr->nNumStrings == 0) {
- infoPtr->strings =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(char *));
- }
- else {
- char **oldStrings = infoPtr->strings;
- infoPtr->strings =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(char *) * (infoPtr->nNumStrings + 1));
- memcpy (&infoPtr->strings[0], &oldStrings[0],
- sizeof(char *) * infoPtr->nNumStrings);
- HeapFree (GetProcessHeap (), 0, oldStrings);
- }
-
- infoPtr->strings[infoPtr->nNumStrings] =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(char)*(len+1));
- lstrcpy32A (infoPtr->strings[infoPtr->nNumStrings], szString);
- infoPtr->nNumStrings++;
- }
- else {
- char *p = (char*)lParam;
- INT32 len;
-
- if (p == NULL) return -1;
- TRACE (toolbar, "adding string(s) from array!\n");
- nIndex = infoPtr->nNumStrings;
- while (*p) {
- len = lstrlen32A (p);
- TRACE (toolbar, "len=%d \"%s\"\n", len, p);
-
- if (infoPtr->nNumStrings == 0) {
- infoPtr->strings =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(char *));
- }
- else {
- char **oldStrings = infoPtr->strings;
- infoPtr->strings =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(char *) * (infoPtr->nNumStrings + 1));
- memcpy (&infoPtr->strings[0], &oldStrings[0],
- sizeof(char *) * infoPtr->nNumStrings);
- HeapFree (GetProcessHeap (), 0, oldStrings);
- }
-
- infoPtr->strings[infoPtr->nNumStrings] =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(char)*(len+1));
- lstrcpy32A (infoPtr->strings[infoPtr->nNumStrings], p);
- infoPtr->nNumStrings++;
-
- p += (len+1);
- }
- }
-
- return nIndex;
-}
-
-
-// << TOOLBAR_AddString32W >>
-
-
-static LRESULT
-TOOLBAR_AutoSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- RECT32 parent_rect;
- HWND32 parent;
- INT32 x, y, cx, cy;
- UINT32 uPosFlags = 0;
-
- TRACE (toolbar, "resizing!\n");
-
- parent = GetParent32 (wndPtr->hwndSelf);
- GetClientRect32(parent, &parent_rect);
-
- if (wndPtr->dwStyle & CCS_NORESIZE) {
- uPosFlags |= SWP_NOSIZE;
- cx = 0;
- cy = 0;
- }
- else {
- infoPtr->nWidth = parent_rect.right - parent_rect.left;
- TOOLBAR_CalcToolbar (wndPtr);
- cy = infoPtr->nHeight;
- cx = infoPtr->nWidth;
- }
-
- if (wndPtr->dwStyle & CCS_NOPARENTALIGN)
- uPosFlags |= SWP_NOMOVE;
-
- if (!(wndPtr->dwStyle & CCS_NODIVIDER))
- cy += 2;
-
- infoPtr->bAutoSize = TRUE;
- SetWindowPos32 (wndPtr->hwndSelf, HWND_TOP, parent_rect.left, parent_rect.top,
- cx, cy, uPosFlags);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_ButtonCount (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nNumButtons;
-}
-
-
-static LRESULT
-TOOLBAR_ButtonStructSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (infoPtr == NULL) {
- ERR (toolbar, "(0x%08lx, 0x%08x, 0x%08lx)\n", (DWORD)wndPtr, wParam, lParam);
- ERR (toolbar, "infoPtr == NULL!\n");
- return 0;
- }
-
- infoPtr->dwStructSize = (DWORD)wParam;
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_ChangeBitmap (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- HDC32 hdc;
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
- btnPtr->iBitmap = LOWORD(lParam);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_CheckButton (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- HDC32 hdc;
- INT32 nIndex;
- INT32 nOldIndex = -1;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
-
- if (!(btnPtr->fsStyle & TBSTYLE_CHECK))
- return FALSE;
-
- if (LOWORD(lParam) == FALSE)
- btnPtr->fsState &= ~TBSTATE_CHECKED;
- else {
- if (btnPtr->fsStyle & TBSTYLE_GROUP) {
- nOldIndex =
- TOOLBAR_GetCheckedGroupButtonIndex (infoPtr, nIndex);
- if (nOldIndex == nIndex)
- return 0;
- if (nOldIndex != -1)
- infoPtr->buttons[nOldIndex].fsState &= ~TBSTATE_CHECKED;
- }
- btnPtr->fsState |= TBSTATE_CHECKED;
- }
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- if (nOldIndex != -1)
- TOOLBAR_DrawButton (wndPtr, &infoPtr->buttons[nOldIndex], hdc);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- /* FIXME: Send a WM_NOTIFY?? */
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_CommandToIndex (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- return TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
-}
-
-
-static LRESULT
-TOOLBAR_Customize (WND *wndPtr)
-{
- FIXME (toolbar, "customization not implemented!\n");
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_DeleteButton (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex = (INT32)wParam;
-
- if ((nIndex < 0) || (nIndex >= infoPtr->nNumButtons))
- return FALSE;
-
- if ((infoPtr->hwndToolTip) &&
- !(infoPtr->buttons[nIndex].fsStyle & TBSTYLE_SEP)) {
- TTTOOLINFO32A ti;
-
- ZeroMemory (&ti, sizeof(TTTOOLINFO32A));
- ti.cbSize = sizeof (TTTOOLINFO32A);
- ti.hwnd = wndPtr->hwndSelf;
- ti.uId = infoPtr->buttons[nIndex].idCommand;
-
- SendMessage32A (infoPtr->hwndToolTip, TTM_DELTOOL32A, 0, (LPARAM)&ti);
- }
-
- if (infoPtr->nNumButtons == 1) {
- TRACE (toolbar, " simple delete!\n");
- HeapFree (GetProcessHeap (), 0, infoPtr->buttons);
- infoPtr->buttons = NULL;
- infoPtr->nNumButtons = 0;
- }
- else {
- TBUTTON_INFO *oldButtons = infoPtr->buttons;
- TRACE(toolbar, "complex delete! [nIndex=%d]\n", nIndex);
-
- infoPtr->nNumButtons--;
- infoPtr->buttons = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof (TBUTTON_INFO) * infoPtr->nNumButtons);
- if (nIndex > 0) {
- memcpy (&infoPtr->buttons[0], &oldButtons[0],
- nIndex * sizeof(TBUTTON_INFO));
- }
-
- if (nIndex < infoPtr->nNumButtons) {
- memcpy (&infoPtr->buttons[nIndex], &oldButtons[nIndex+1],
- (infoPtr->nNumButtons - nIndex) * sizeof(TBUTTON_INFO));
- }
-
- HeapFree (GetProcessHeap (), 0, oldButtons);
- }
-
- TOOLBAR_CalcToolbar (wndPtr);
-
- InvalidateRect32 (wndPtr->hwndSelf, NULL, TRUE);
- UpdateWindow32 (wndPtr->hwndSelf);
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_EnableButton (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- HDC32 hdc;
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
- if (LOWORD(lParam) == FALSE)
- btnPtr->fsState &= ~(TBSTATE_ENABLED | TBSTATE_PRESSED);
- else
- btnPtr->fsState |= TBSTATE_ENABLED;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-// << TOOLBAR_GetAnchorHighlight >>
-
-
-static LRESULT
-TOOLBAR_GetBitmap (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return 0;
-
- return infoPtr->buttons[nIndex].iBitmap;
-}
-
-
-static LRESULT
-TOOLBAR_GetBitmapFlags (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- FIXME (toolbar, "stub!\n");
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_GetButton (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LPTBBUTTON lpTbb = (LPTBBUTTON)lParam;
- INT32 nIndex = (INT32)wParam;
- TBUTTON_INFO *btnPtr;
-
- if (infoPtr == NULL) return FALSE;
- if (lpTbb == NULL) return FALSE;
-
- if ((nIndex < 0) || (nIndex >= infoPtr->nNumButtons))
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
- lpTbb->iBitmap = btnPtr->iBitmap;
- lpTbb->idCommand = btnPtr->idCommand;
- lpTbb->fsState = btnPtr->fsState;
- lpTbb->fsStyle = btnPtr->fsStyle;
- lpTbb->dwData = btnPtr->dwData;
- lpTbb->iString = btnPtr->iString;
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_GetButtonInfo32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LPTBBUTTONINFO32A lpTbInfo = (LPTBBUTTONINFO32A)lParam;
- TBUTTON_INFO *btnPtr;
- INT32 nIndex;
-
- if (infoPtr == NULL) return -1;
- if (lpTbInfo == NULL) return -1;
- if (lpTbInfo->cbSize < sizeof(LPTBBUTTONINFO32A)) return -1;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
-
- if (nIndex == -1)
- return -1;
-
- btnPtr = &infoPtr->buttons[nIndex];
-
- if (lpTbInfo->dwMask & TBIF_COMMAND)
- lpTbInfo->idCommand = btnPtr->idCommand;
-
- if (lpTbInfo->dwMask & TBIF_IMAGE)
- lpTbInfo->iImage = btnPtr->iBitmap;
-
- if (lpTbInfo->dwMask & TBIF_LPARAM)
- lpTbInfo->lParam = btnPtr->dwData;
-
- if (lpTbInfo->dwMask & TBIF_SIZE)
- lpTbInfo->cx = (WORD)(btnPtr->rect.right - btnPtr->rect.left);
-
- if (lpTbInfo->dwMask & TBIF_STATE)
- lpTbInfo->fsState = btnPtr->fsState;
-
- if (lpTbInfo->dwMask & TBIF_STYLE)
- lpTbInfo->fsStyle = btnPtr->fsStyle;
-
- if (lpTbInfo->dwMask & TBIF_TEXT) {
- if ((btnPtr->iString >= 0) || (btnPtr->iString < infoPtr->nNumStrings))
- lstrcpyn32A (lpTbInfo->pszText,
- (LPSTR)infoPtr->strings[btnPtr->iString],
- lpTbInfo->cchText);
- }
-
- return nIndex;
-}
-
-
-// << TOOLBAR_GetButtonInfo32W >>
-
-
-static LRESULT
-TOOLBAR_GetButtonSize (WND *wndPtr)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- return MAKELONG((WORD)infoPtr->nButtonWidth,
- (WORD)infoPtr->nButtonHeight);
-}
-
-
-static LRESULT
-TOOLBAR_GetButtonText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex, nStringIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return -1;
-
- nStringIndex = infoPtr->buttons[nIndex].iString;
-
- TRACE (toolbar, "index=%d stringIndex=%d\n", nIndex, nStringIndex);
-
- if ((nStringIndex < 0) || (nStringIndex >= infoPtr->nNumStrings))
- return -1;
-
- if (lParam == 0) return -1;
-
- lstrcpy32A ((LPSTR)lParam, (LPSTR)infoPtr->strings[nStringIndex]);
-
- return lstrlen32A ((LPSTR)infoPtr->strings[nStringIndex]);
-}
-
-
-// << TOOLBAR_GetButtonText32W >>
-// << TOOLBAR_GetColorScheme >>
-
-
-static LRESULT
-TOOLBAR_GetDisabledImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (wndPtr->dwStyle & TBSTYLE_FLAT)
- return (LRESULT)infoPtr->himlDis;
- else
- return 0;
-}
-
-
-__inline__ static LRESULT
-TOOLBAR_GetExtendedStyle (WND *wndPtr)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->dwExStyle;
-}
-
-
-static LRESULT
-TOOLBAR_GetHotImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (wndPtr->dwStyle & TBSTYLE_FLAT)
- return (LRESULT)infoPtr->himlHot;
- else
- return 0;
-}
-
-
-// << TOOLBAR_GetHotItem >>
-
-
-static LRESULT
-TOOLBAR_GetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (wndPtr->dwStyle & TBSTYLE_FLAT)
- return (LRESULT)infoPtr->himlDef;
- else
- return 0;
-}
-
-
-// << TOOLBAR_GetInsertMark >>
-// << TOOLBAR_GetInsertMarkColor >>
-
-
-static LRESULT
-TOOLBAR_GetItemRect (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- LPRECT32 lpRect;
- INT32 nIndex;
-
- if (infoPtr == NULL) return FALSE;
- nIndex = (INT32)wParam;
- btnPtr = &infoPtr->buttons[nIndex];
- if ((nIndex < 0) || (nIndex >= infoPtr->nNumButtons))
- return FALSE;
- lpRect = (LPRECT32)lParam;
- if (lpRect == NULL) return FALSE;
- if (btnPtr->fsState & TBSTATE_HIDDEN) return FALSE;
-
- lpRect->left = btnPtr->rect.left;
- lpRect->right = btnPtr->rect.right;
- lpRect->bottom = btnPtr->rect.bottom;
- lpRect->top = btnPtr->rect.top;
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_GetMaxSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LPSIZE32 lpSize = (LPSIZE32)lParam;
-
- if (lpSize == NULL)
- return FALSE;
-
- lpSize->cx = infoPtr->maxSize.cx;
- lpSize->cx = infoPtr->maxSize.cy;
-
- TRACE (toolbar, "maximum size %d x %d\n",
- infoPtr->maxSize.cx, infoPtr->maxSize.cy);
-
- return TRUE;
-}
-
-
-// << TOOLBAR_GetObject >>
-// << TOOLBAR_GetPadding >>
-
-
-static LRESULT
-TOOLBAR_GetRect (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- LPRECT32 lpRect;
- INT32 nIndex;
-
- if (infoPtr == NULL) return FALSE;
- nIndex = (INT32)wParam;
- btnPtr = &infoPtr->buttons[nIndex];
- if ((nIndex < 0) || (nIndex >= infoPtr->nNumButtons))
- return FALSE;
- lpRect = (LPRECT32)lParam;
- if (lpRect == NULL) return FALSE;
-
- lpRect->left = btnPtr->rect.left;
- lpRect->right = btnPtr->rect.right;
- lpRect->bottom = btnPtr->rect.bottom;
- lpRect->top = btnPtr->rect.top;
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_GetRows (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (wndPtr->dwStyle & TBSTYLE_WRAPABLE)
- return infoPtr->nMaxRows;
- else
- return 1;
-}
-
-
-static LRESULT
-TOOLBAR_GetState (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1) return -1;
-
- return infoPtr->buttons[nIndex].fsState;
-}
-
-
-static LRESULT
-TOOLBAR_GetStyle (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1) return -1;
-
- return infoPtr->buttons[nIndex].fsStyle;
-}
-
-
-static LRESULT
-TOOLBAR_GetTextRows (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (infoPtr == NULL)
- return 0;
-
- return infoPtr->nMaxTextRows;
-}
-
-
-static LRESULT
-TOOLBAR_GetToolTips (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (infoPtr == NULL) return 0;
- return infoPtr->hwndToolTip;
-}
-
-
-static LRESULT
-TOOLBAR_GetUnicodeFormat (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- TRACE (toolbar, "%s hwnd=0x%04x stub!\n",
- infoPtr->bUnicode ? "TRUE" : "FALSE", wndPtr->hwndSelf);
-
- return infoPtr->bUnicode;
-}
-
-
-static LRESULT
-TOOLBAR_HideButton (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
- if (LOWORD(lParam) == FALSE)
- btnPtr->fsState &= ~TBSTATE_HIDDEN;
- else
- btnPtr->fsState |= TBSTATE_HIDDEN;
-
- TOOLBAR_CalcToolbar (wndPtr);
-
- InvalidateRect32 (wndPtr->hwndSelf, NULL, TRUE);
- UpdateWindow32 (wndPtr->hwndSelf);
-
- return TRUE;
-}
-
-
-__inline__ static LRESULT
-TOOLBAR_HitTest (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- return TOOLBAR_InternalHitTest (wndPtr, (LPPOINT32)lParam);
-}
-
-
-static LRESULT
-TOOLBAR_Indeterminate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- HDC32 hdc;
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
- if (LOWORD(lParam) == FALSE)
- btnPtr->fsState &= ~TBSTATE_INDETERMINATE;
- else
- btnPtr->fsState |= TBSTATE_INDETERMINATE;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_InsertButton32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LPTBBUTTON lpTbb = (LPTBBUTTON)lParam;
- INT32 nIndex = (INT32)wParam;
- TBUTTON_INFO *oldButtons;
- HDC32 hdc;
-
- if (lpTbb == NULL) return FALSE;
- if (nIndex < 0) return FALSE;
-
- TRACE (toolbar, "inserting button index=%d\n", nIndex);
- if (nIndex > infoPtr->nNumButtons) {
- nIndex = infoPtr->nNumButtons;
- TRACE (toolbar, "adjust index=%d\n", nIndex);
- }
-
- oldButtons = infoPtr->buttons;
- infoPtr->nNumButtons++;
- infoPtr->buttons = HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof (TBUTTON_INFO) * infoPtr->nNumButtons);
- /* pre insert copy */
- if (nIndex > 0) {
- memcpy (&infoPtr->buttons[0], &oldButtons[0],
- nIndex * sizeof(TBUTTON_INFO));
- }
-
- /* insert new button */
- infoPtr->buttons[nIndex].iBitmap = lpTbb->iBitmap;
- infoPtr->buttons[nIndex].idCommand = lpTbb->idCommand;
- infoPtr->buttons[nIndex].fsState = lpTbb->fsState;
- infoPtr->buttons[nIndex].fsStyle = lpTbb->fsStyle;
- infoPtr->buttons[nIndex].dwData = lpTbb->dwData;
- infoPtr->buttons[nIndex].iString = lpTbb->iString;
-
- if ((infoPtr->hwndToolTip) && !(lpTbb->fsStyle & TBSTYLE_SEP)) {
- TTTOOLINFO32A ti;
-
- ZeroMemory (&ti, sizeof(TTTOOLINFO32A));
- ti.cbSize = sizeof (TTTOOLINFO32A);
- ti.hwnd = wndPtr->hwndSelf;
- ti.uId = lpTbb->idCommand;
- ti.hinst = 0;
- ti.lpszText = LPSTR_TEXTCALLBACK32A;
-
- SendMessage32A (infoPtr->hwndToolTip, TTM_ADDTOOL32A,
- 0, (LPARAM)&ti);
- }
-
- /* post insert copy */
- if (nIndex < infoPtr->nNumButtons - 1) {
- memcpy (&infoPtr->buttons[nIndex+1], &oldButtons[nIndex],
- (infoPtr->nNumButtons - nIndex - 1) * sizeof(TBUTTON_INFO));
- }
-
- HeapFree (GetProcessHeap (), 0, oldButtons);
-
- TOOLBAR_CalcToolbar (wndPtr);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-// << TOOLBAR_InsertButton32W >>
-// << TOOLBAR_InsertMarkHitTest >>
-
-
-static LRESULT
-TOOLBAR_IsButtonChecked (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- return (infoPtr->buttons[nIndex].fsState & TBSTATE_CHECKED);
-}
-
-
-static LRESULT
-TOOLBAR_IsButtonEnabled (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- return (infoPtr->buttons[nIndex].fsState & TBSTATE_ENABLED);
-}
-
-
-static LRESULT
-TOOLBAR_IsButtonHidden (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- return (infoPtr->buttons[nIndex].fsState & TBSTATE_HIDDEN);
-}
-
-
-static LRESULT
-TOOLBAR_IsButtonHighlighted (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- return (infoPtr->buttons[nIndex].fsState & TBSTATE_MARKED);
-}
-
-
-static LRESULT
-TOOLBAR_IsButtonIndeterminate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- return (infoPtr->buttons[nIndex].fsState & TBSTATE_INDETERMINATE);
-}
-
-
-static LRESULT
-TOOLBAR_IsButtonPressed (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- return (infoPtr->buttons[nIndex].fsState & TBSTATE_PRESSED);
-}
-
-
-// << TOOLBAR_LoadImages >>
-// << TOOLBAR_MapAccelerator >>
-// << TOOLBAR_MarkButton >>
-// << TOOLBAR_MoveButton >>
-
-
-static LRESULT
-TOOLBAR_PressButton (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- HDC32 hdc;
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
- if (LOWORD(lParam) == FALSE)
- btnPtr->fsState &= ~TBSTATE_PRESSED;
- else
- btnPtr->fsState |= TBSTATE_PRESSED;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-// << TOOLBAR_ReplaceBitmap >>
-
-
-static LRESULT
-TOOLBAR_SaveRestore32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LPTBSAVEPARAMS32A lpSave = (LPTBSAVEPARAMS32A)lParam;
-
- if (lpSave == NULL) return 0;
-
- if ((BOOL32)wParam) {
- /* save toolbar information */
- FIXME (toolbar, "save to \"%s\" \"%s\"\n",
- lpSave->pszSubKey, lpSave->pszValueName);
-
-
- }
- else {
- /* restore toolbar information */
-
- FIXME (toolbar, "restore from \"%s\" \"%s\"\n",
- lpSave->pszSubKey, lpSave->pszValueName);
-
-
- }
-
- return 0;
-}
-
-
-// << TOOLBAR_SaveRestore32W >>
-// << TOOLBAR_SetAnchorHighlight >>
-
-
-static LRESULT
-TOOLBAR_SetBitmapSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if ((LOWORD(lParam) <= 0) || (HIWORD(lParam)<=0))
- return FALSE;
-
- infoPtr->nBitmapWidth = (INT32)LOWORD(lParam);
- infoPtr->nBitmapHeight = (INT32)HIWORD(lParam);
-
- return TRUE;
-}
-
-
-// << TOOLBAR_SetButtonInfo >>
-
-
-static LRESULT
-TOOLBAR_SetButtonSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if ((LOWORD(lParam) <= 0) || (HIWORD(lParam)<=0))
- return FALSE;
-
- infoPtr->nButtonWidth = (INT32)LOWORD(lParam);
- infoPtr->nButtonHeight = (INT32)HIWORD(lParam);
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_SetButtonWidth (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (infoPtr == NULL)
- return FALSE;
-
- infoPtr->cxMin = (INT32)LOWORD(lParam);
- infoPtr->cxMax = (INT32)HIWORD(lParam);
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_SetCmdId (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- INT32 nIndex = (INT32)wParam;
-
- if ((nIndex < 0) || (nIndex >= infoPtr->nNumButtons))
- return FALSE;
-
- infoPtr->buttons[nIndex].idCommand = (INT32)lParam;
-
- if (infoPtr->hwndToolTip) {
-
- FIXME (toolbar, "change tool tip!\n");
-
- }
-
- return TRUE;
-}
-
-
-// << TOOLBAR_SetColorScheme >>
-
-
-static LRESULT
-TOOLBAR_SetDisabledImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- HIMAGELIST himlTemp;
-
- if (!(wndPtr->dwStyle & TBSTYLE_FLAT))
- return 0;
-
- himlTemp = infoPtr->himlDis;
- infoPtr->himlDis = (HIMAGELIST)lParam;
-
- /* FIXME: redraw ? */
-
- return (LRESULT)himlTemp;
-}
-
-
-// << TOOLBAR_SetDrawTextFlags >>
-
-
-static LRESULT
-TOOLBAR_SetExtendedStyle (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- DWORD dwTemp;
-
- dwTemp = infoPtr->dwExStyle;
- infoPtr->dwExStyle = (DWORD)lParam;
-
- return (LRESULT)dwTemp;
-}
-
-
-static LRESULT
-TOOLBAR_SetHotImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- HIMAGELIST himlTemp;
-
- if (!(wndPtr->dwStyle & TBSTYLE_FLAT))
- return 0;
-
- himlTemp = infoPtr->himlHot;
- infoPtr->himlHot = (HIMAGELIST)lParam;
-
- /* FIXME: redraw ? */
-
- return (LRESULT)himlTemp;
-}
-
-
-// << TOOLBAR_SetHotItem >>
-
-
-static LRESULT
-TOOLBAR_SetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- HIMAGELIST himlTemp;
-
- if (!(wndPtr->dwStyle & TBSTYLE_FLAT))
- return 0;
-
- himlTemp = infoPtr->himlDef;
- infoPtr->himlDef = (HIMAGELIST)lParam;
-
- /* FIXME: redraw ? */
-
- return (LRESULT)himlTemp;
-}
-
-
-static LRESULT
-TOOLBAR_SetIndent (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- HDC32 hdc;
-
- infoPtr->nIndent = (INT32)wParam;
- TOOLBAR_CalcToolbar (wndPtr);
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-// << TOOLBAR_SetInsertMark >>
-
-
-static LRESULT
-TOOLBAR_SetInsertMarkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- infoPtr->clrInsertMark = (COLORREF)lParam;
-
- /* FIXME : redraw ??*/
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_SetMaxTextRows (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (infoPtr == NULL)
- return FALSE;
-
- infoPtr->nMaxTextRows = (INT32)wParam;
-
- return TRUE;
-}
-
-
-// << TOOLBAR_SetPadding >>
-
-
-static LRESULT
-TOOLBAR_SetParent (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- HWND32 hwndOldNotify;
-
- if (infoPtr == NULL) return 0;
- hwndOldNotify = infoPtr->hwndNotify;
- infoPtr->hwndNotify = (HWND32)wParam;
-
- return hwndOldNotify;
-}
-
-
-static LRESULT
-TOOLBAR_SetRows (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- FIXME (toolbar, "support multiple rows!\n");
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_SetState (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- HDC32 hdc;
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
- btnPtr->fsState = LOWORD(lParam);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_SetStyle (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- HDC32 hdc;
- INT32 nIndex;
-
- nIndex = TOOLBAR_GetButtonIndex (infoPtr, (INT32)wParam);
- if (nIndex == -1)
- return FALSE;
-
- btnPtr = &infoPtr->buttons[nIndex];
- btnPtr->fsStyle = LOWORD(lParam);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- if (infoPtr->hwndToolTip) {
-
- FIXME (toolbar, "change tool tip!\n");
-
- }
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLBAR_SetToolTips (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (infoPtr == NULL) return 0;
- infoPtr->hwndToolTip = (HWND32)wParam;
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_SetUnicodeFormat (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- BOOL32 bTemp;
-
- TRACE (toolbar, "%s hwnd=0x%04x stub!\n",
- ((BOOL32)wParam) ? "TRUE" : "FALSE", wndPtr->hwndSelf);
-
- bTemp = infoPtr->bUnicode;
- infoPtr->bUnicode = (BOOL32)wParam;
-
- return bTemp;
-}
-
-
-static LRESULT
-TOOLBAR_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LOGFONT32A logFont;
-
- /* initialize info structure */
- infoPtr->nButtonHeight = 22;
- infoPtr->nButtonWidth = 23;
- infoPtr->nBitmapHeight = 15;
- infoPtr->nBitmapWidth = 16;
-
- infoPtr->nHeight = infoPtr->nButtonHeight + TOP_BORDER + BOTTOM_BORDER;
- infoPtr->nMaxRows = 1;
- infoPtr->nMaxTextRows = 1;
- infoPtr->cxMin = -1;
- infoPtr->cxMax = -1;
-
- infoPtr->bCaptured = FALSE;
- infoPtr->bUnicode = FALSE;
- infoPtr->nButtonDown = -1;
- infoPtr->nOldHit = -1;
-
- infoPtr->hwndNotify = GetParent32 (wndPtr->hwndSelf);
- infoPtr->bTransparent = (wndPtr->dwStyle & TBSTYLE_FLAT);
- infoPtr->nHotItem = -1;
-
- SystemParametersInfo32A (SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
- infoPtr->hFont = CreateFontIndirect32A (&logFont);
-
- if (wndPtr->dwStyle & TBSTYLE_TOOLTIPS) {
- /* Create tooltip control */
- infoPtr->hwndToolTip =
- CreateWindowEx32A (0, TOOLTIPS_CLASS32A, NULL, TTS_ALWAYSTIP,
- CW_USEDEFAULT32, CW_USEDEFAULT32,
- CW_USEDEFAULT32, CW_USEDEFAULT32,
- wndPtr->hwndSelf, 0, 0, 0);
-
- /* Send NM_TOOLTIPSCREATED notification */
- if (infoPtr->hwndToolTip) {
- NMTOOLTIPSCREATED nmttc;
-
- nmttc.hdr.hwndFrom = wndPtr->hwndSelf;
- nmttc.hdr.idFrom = wndPtr->wIDmenu;
- nmttc.hdr.code = NM_TOOLTIPSCREATED;
- nmttc.hwndToolTips = infoPtr->hwndToolTip;
-
- SendMessage32A (infoPtr->hwndNotify, WM_NOTIFY,
- (WPARAM32)wndPtr->wIDmenu, (LPARAM)&nmttc);
- }
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- /* delete tooltip control */
- if (infoPtr->hwndToolTip)
- DestroyWindow32 (infoPtr->hwndToolTip);
-
- /* delete button data */
- if (infoPtr->buttons)
- HeapFree (GetProcessHeap (), 0, infoPtr->buttons);
-
- /* delete strings */
- if (infoPtr->strings) {
- INT32 i;
- for (i = 0; i < infoPtr->nNumStrings; i++)
- if (infoPtr->strings[i])
- HeapFree (GetProcessHeap (), 0, infoPtr->strings[i]);
-
- HeapFree (GetProcessHeap (), 0, infoPtr->strings);
- }
-
- /* destroy default image list */
- if (infoPtr->himlDef)
- ImageList_Destroy (infoPtr->himlDef);
-
- /* destroy disabled image list */
- if (infoPtr->himlDis)
- ImageList_Destroy (infoPtr->himlDis);
-
- /* destroy hot image list */
- if (infoPtr->himlHot)
- ImageList_Destroy (infoPtr->himlHot);
-
- /* delete default font */
- if (infoPtr->hFont)
- DeleteObject32 (infoPtr->hFont);
-
- /* free toolbar info data */
- HeapFree (GetProcessHeap (), 0, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
-
- if (infoPtr->bTransparent)
- return SendMessage32A (GetParent32 (wndPtr->hwndSelf), WM_ERASEBKGND,
- wParam, lParam);
-
- return DefWindowProc32A (wndPtr->hwndSelf, WM_ERASEBKGND, wParam, lParam);
-}
-
-
-static LRESULT
-TOOLBAR_LButtonDblClk (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- POINT32 pt;
- INT32 nHit;
- HDC32 hdc;
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- nHit = TOOLBAR_InternalHitTest (wndPtr, &pt);
-
- if (nHit >= 0) {
- btnPtr = &infoPtr->buttons[nHit];
- if (!(btnPtr->fsState & TBSTATE_ENABLED))
- return 0;
- SetCapture32 (wndPtr->hwndSelf);
- infoPtr->bCaptured = TRUE;
- infoPtr->nButtonDown = nHit;
-
- btnPtr->fsState |= TBSTATE_PRESSED;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
- else if (wndPtr->dwStyle & CCS_ADJUSTABLE)
- TOOLBAR_Customize (wndPtr);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_LButtonDown (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- POINT32 pt;
- INT32 nHit;
- HDC32 hdc;
-
- if (infoPtr->hwndToolTip)
- TOOLBAR_RelayEvent (infoPtr->hwndToolTip, wndPtr->hwndSelf,
- WM_LBUTTONDOWN, wParam, lParam);
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- nHit = TOOLBAR_InternalHitTest (wndPtr, &pt);
-
- if (nHit >= 0) {
- btnPtr = &infoPtr->buttons[nHit];
- if (!(btnPtr->fsState & TBSTATE_ENABLED))
- return 0;
-
- SetCapture32 (wndPtr->hwndSelf);
- infoPtr->bCaptured = TRUE;
- infoPtr->nButtonDown = nHit;
- infoPtr->nOldHit = nHit;
-
- btnPtr->fsState |= TBSTATE_PRESSED;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
-
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_LButtonUp (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- POINT32 pt;
- INT32 nHit;
- INT32 nOldIndex = -1;
- HDC32 hdc;
- BOOL32 bSendMessage = TRUE;
-
- if (infoPtr->hwndToolTip)
- TOOLBAR_RelayEvent (infoPtr->hwndToolTip, wndPtr->hwndSelf,
- WM_LBUTTONUP, wParam, lParam);
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- nHit = TOOLBAR_InternalHitTest (wndPtr, &pt);
-
- if ((infoPtr->bCaptured) && (infoPtr->nButtonDown >= 0)) {
- infoPtr->bCaptured = FALSE;
- ReleaseCapture ();
- btnPtr = &infoPtr->buttons[infoPtr->nButtonDown];
- btnPtr->fsState &= ~TBSTATE_PRESSED;
-
- if (nHit == infoPtr->nButtonDown) {
- if (btnPtr->fsStyle & TBSTYLE_CHECK) {
- if (btnPtr->fsStyle & TBSTYLE_GROUP) {
- nOldIndex = TOOLBAR_GetCheckedGroupButtonIndex (infoPtr,
- infoPtr->nButtonDown);
- if (nOldIndex == infoPtr->nButtonDown)
- bSendMessage = FALSE;
- if ((nOldIndex != infoPtr->nButtonDown) &&
- (nOldIndex != -1))
- infoPtr->buttons[nOldIndex].fsState &= ~TBSTATE_CHECKED;
- btnPtr->fsState |= TBSTATE_CHECKED;
- }
- else {
- if (btnPtr->fsState & TBSTATE_CHECKED)
- btnPtr->fsState &= ~TBSTATE_CHECKED;
- else
- btnPtr->fsState |= TBSTATE_CHECKED;
- }
- }
- }
- else
- bSendMessage = FALSE;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- if (nOldIndex != -1)
- TOOLBAR_DrawButton (wndPtr, &infoPtr->buttons[nOldIndex], hdc);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- if (bSendMessage)
- SendMessage32A (infoPtr->hwndNotify, WM_COMMAND,
- MAKEWPARAM(btnPtr->idCommand, 0),
- (LPARAM)wndPtr->hwndSelf);
-
- infoPtr->nButtonDown = -1;
- infoPtr->nOldHit = -1;
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_MouseMove (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- TBUTTON_INFO *btnPtr;
- POINT32 pt;
- INT32 nHit;
- HDC32 hdc;
-
- if (infoPtr->hwndToolTip)
- TOOLBAR_RelayEvent (infoPtr->hwndToolTip, wndPtr->hwndSelf,
- WM_MOUSEMOVE, wParam, lParam);
-
- pt.x = (INT32)LOWORD(lParam);
- pt.y = (INT32)HIWORD(lParam);
- nHit = TOOLBAR_InternalHitTest (wndPtr, &pt);
-
- if (infoPtr->bCaptured) {
- if (infoPtr->nOldHit != nHit) {
- btnPtr = &infoPtr->buttons[infoPtr->nButtonDown];
- if (infoPtr->nOldHit == infoPtr->nButtonDown) {
- btnPtr->fsState &= ~TBSTATE_PRESSED;
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
- else if (nHit == infoPtr->nButtonDown) {
- btnPtr->fsState |= TBSTATE_PRESSED;
- hdc = GetDC32 (wndPtr->hwndSelf);
- TOOLBAR_DrawButton (wndPtr, btnPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
- }
- infoPtr->nOldHit = nHit;
- }
-
- return 0;
-}
-
-
-// << TOOLBAR_NCActivate >>
-
-
-static LRESULT
-TOOLBAR_NCCalcSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- if (!(wndPtr->dwStyle & CCS_NODIVIDER)) {
- LPRECT32 winRect = (LPRECT32)lParam;
- winRect->top += 2;
- }
-
- return DefWindowProc32A (wndPtr->hwndSelf, WM_NCCALCSIZE, wParam, lParam);
-}
-
-
-static LRESULT
-TOOLBAR_NCCreate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr;
-
- /* allocate memory for info structure */
- infoPtr = (TOOLBAR_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(TOOLBAR_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- if (infoPtr == NULL) {
- ERR (toolbar, "could not allocate info memory!\n");
- return 0;
- }
-
- if ((TOOLBAR_INFO*)wndPtr->wExtra[0] != infoPtr) {
- ERR (toolbar, "pointer assignment error!\n");
- return 0;
- }
-
- /* paranoid!! */
- infoPtr->dwStructSize = sizeof(TBBUTTON);
-
- /* fix instance handle, if the toolbar was created by CreateToolbarEx() */
- if (!wndPtr->hInstance)
- wndPtr->hInstance = wndPtr->parent->hInstance;
-
- return DefWindowProc32A (wndPtr->hwndSelf, WM_NCCREATE, wParam, lParam);
-}
-
-
-static LRESULT
-TOOLBAR_NCPaint (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HDC32 hdc;
- RECT32 rect;
- HWND32 hwnd = wndPtr->hwndSelf;
-
- if ( wndPtr->dwStyle & WS_MINIMIZE ||
- !WIN_IsWindowDrawable( wndPtr, 0 )) return 0; /* Nothing to do */
-
- DefWindowProc32A (hwnd, WM_NCPAINT, wParam, lParam);
-
- if (!(hdc = GetDCEx32( hwnd, 0, DCX_USESTYLE | DCX_WINDOW ))) return 0;
-
- if (ExcludeVisRect( hdc, wndPtr->rectClient.left-wndPtr->rectWindow.left,
- wndPtr->rectClient.top-wndPtr->rectWindow.top,
- wndPtr->rectClient.right-wndPtr->rectWindow.left,
- wndPtr->rectClient.bottom-wndPtr->rectWindow.top )
- == NULLREGION){
- ReleaseDC32( hwnd, hdc );
- return 0;
- }
-
- if (!(wndPtr->flags & WIN_MANAGED)) {
- if (!(wndPtr->dwStyle & CCS_NODIVIDER)) {
- rect.left = wndPtr->rectClient.left;
- rect.top = wndPtr->rectClient.top - 2;
- rect.right = wndPtr->rectClient.right;
-
- SelectObject32 ( hdc, GetSysColorPen32 (COLOR_3DSHADOW));
- MoveToEx32 (hdc, rect.left, rect.top, NULL);
- LineTo32 (hdc, rect.right, rect.top);
- rect.top++;
- SelectObject32 ( hdc, GetSysColorPen32 (COLOR_3DHILIGHT));
- MoveToEx32 (hdc, rect.left, rect.top, NULL);
- LineTo32 (hdc, rect.right, rect.top);
- }
-
- }
-
- ReleaseDC32( hwnd, hdc );
-
- return 0;
-}
-
-
-__inline__ static LRESULT
-TOOLBAR_Notify (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- LPNMHDR lpnmh = (LPNMHDR)lParam;
-
- TRACE (toolbar, "passing WM_NOTIFY!\n");
-
- if ((infoPtr->hwndToolTip) && (lpnmh->hwndFrom == infoPtr->hwndToolTip)) {
- SendMessage32A (infoPtr->hwndNotify, WM_NOTIFY, wParam, lParam);
-
-#if 0
- if (lpnmh->code == TTN_GETDISPINFO32A) {
- LPNMTTDISPINFO32A lpdi = (LPNMTTDISPINFO32A)lParam;
-
- FIXME (toolbar, "retrieving ASCII string\n");
-
- }
- else if (lpnmh->code == TTN_GETDISPINFO32W) {
- LPNMTTDISPINFO32W lpdi = (LPNMTTDISPINFO32W)lParam;
-
- FIXME (toolbar, "retrieving UNICODE string\n");
-
- }
-#endif
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_Paint (WND *wndPtr, WPARAM32 wParam)
-{
- HDC32 hdc;
- PAINTSTRUCT32 ps;
-
- hdc = wParam==0 ? BeginPaint32 (wndPtr->hwndSelf, &ps) : (HDC32)wParam;
- TOOLBAR_Refresh (wndPtr, hdc);
- if (!wParam)
- EndPaint32 (wndPtr->hwndSelf, &ps);
- return 0;
-}
-
-
-static LRESULT
-TOOLBAR_Size (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(wndPtr);
- RECT32 parent_rect;
- HWND32 parent;
- INT32 x, y, cx, cy;
- INT32 flags;
- UINT32 uPosFlags = 0;
-
- /* Resize deadlock check */
- if (infoPtr->bAutoSize) {
- infoPtr->bAutoSize = FALSE;
- return 0;
- }
-
- flags = (INT32) wParam;
-
- /* FIXME for flags =
- * SIZE_MAXIMIZED, SIZE_MAXSHOW, SIZE_MINIMIZED
- */
-
- TRACE (toolbar, "sizing toolbar!\n");
-
- if (flags == SIZE_RESTORED) {
- /* width and height don't apply */
- parent = GetParent32 (wndPtr->hwndSelf);
- GetClientRect32(parent, &parent_rect);
-
- if (wndPtr->dwStyle & CCS_NORESIZE) {
- uPosFlags |= SWP_NOSIZE;
-
- /* FIXME */
-// infoPtr->nWidth = parent_rect.right - parent_rect.left;
- cy = infoPtr->nHeight;
- cx = infoPtr->nWidth;
- TOOLBAR_CalcToolbar (wndPtr);
- infoPtr->nWidth = cx;
- infoPtr->nHeight = cy;
- }
- else {
- infoPtr->nWidth = parent_rect.right - parent_rect.left;
- TOOLBAR_CalcToolbar (wndPtr);
- cy = infoPtr->nHeight;
- cx = infoPtr->nWidth;
- }
-
- if (wndPtr->dwStyle & CCS_NOPARENTALIGN) {
- uPosFlags |= SWP_NOMOVE;
- cy = infoPtr->nHeight;
- cx = infoPtr->nWidth;
- }
-
- if (!(wndPtr->dwStyle & CCS_NODIVIDER))
- cy += 2;
-
- SetWindowPos32 (wndPtr->hwndSelf, 0, parent_rect.left, parent_rect.top,
- cx, cy, uPosFlags | SWP_NOZORDER);
- }
- return 0;
-}
-
-
-
-
-
-
-
-LRESULT WINAPI
-ToolbarWindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
-
- switch (uMsg)
- {
- case TB_ADDBITMAP:
- return TOOLBAR_AddBitmap (wndPtr, wParam, lParam);
-
- case TB_ADDBUTTONS32A:
- return TOOLBAR_AddButtons32A (wndPtr, wParam, lParam);
-
-// case TB_ADDBUTTONS32W:
-
- case TB_ADDSTRING32A:
- return TOOLBAR_AddString32A (wndPtr, wParam, lParam);
-
-// case TB_ADDSTRING32W:
-
- case TB_AUTOSIZE:
- return TOOLBAR_AutoSize (wndPtr, wParam, lParam);
-
- case TB_BUTTONCOUNT:
- return TOOLBAR_ButtonCount (wndPtr, wParam, lParam);
-
- case TB_BUTTONSTRUCTSIZE:
- return TOOLBAR_ButtonStructSize (wndPtr, wParam, lParam);
-
- case TB_CHANGEBITMAP:
- return TOOLBAR_ChangeBitmap (wndPtr, wParam, lParam);
-
- case TB_CHECKBUTTON:
- return TOOLBAR_CheckButton (wndPtr, wParam, lParam);
-
- case TB_COMMANDTOINDEX:
- return TOOLBAR_CommandToIndex (wndPtr, wParam, lParam);
-
- case TB_CUSTOMIZE:
- return TOOLBAR_Customize (wndPtr);
-
- case TB_DELETEBUTTON:
- return TOOLBAR_DeleteButton (wndPtr, wParam, lParam);
-
- case TB_ENABLEBUTTON:
- return TOOLBAR_EnableButton (wndPtr, wParam, lParam);
-
-// case TB_GETANCHORHIGHLIGHT: /* 4.71 */
-
- case TB_GETBITMAP:
- return TOOLBAR_GetBitmap (wndPtr, wParam, lParam);
-
- case TB_GETBITMAPFLAGS:
- return TOOLBAR_GetBitmapFlags (wndPtr, wParam, lParam);
-
- case TB_GETBUTTON:
- return TOOLBAR_GetButton (wndPtr, wParam, lParam);
-
- case TB_GETBUTTONINFO32A:
- return TOOLBAR_GetButtonInfo32A (wndPtr, wParam, lParam);
-
-// case TB_GETBUTTONINFO32W: /* 4.71 */
-
- case TB_GETBUTTONSIZE:
- return TOOLBAR_GetButtonSize (wndPtr);
-
- case TB_GETBUTTONTEXT32A:
- return TOOLBAR_GetButtonText32A (wndPtr, wParam, lParam);
-
-// case TB_GETBUTTONTEXT32W:
-// case TB_GETCOLORSCHEME: /* 4.71 */
-
- case TB_GETDISABLEDIMAGELIST:
- return TOOLBAR_GetDisabledImageList (wndPtr, wParam, lParam);
-
- case TB_GETEXTENDEDSTYLE:
- return TOOLBAR_GetExtendedStyle (wndPtr);
-
- case TB_GETHOTIMAGELIST:
- return TOOLBAR_GetHotImageList (wndPtr, wParam, lParam);
-
-// case TB_GETHOTITEM: /* 4.71 */
-
- case TB_GETIMAGELIST:
- return TOOLBAR_GetImageList (wndPtr, wParam, lParam);
-
-// case TB_GETINSERTMARK: /* 4.71 */
-// case TB_GETINSERTMARKCOLOR: /* 4.71 */
-
- case TB_GETITEMRECT:
- return TOOLBAR_GetItemRect (wndPtr, wParam, lParam);
-
- case TB_GETMAXSIZE:
- return TOOLBAR_GetMaxSize (wndPtr, wParam, lParam);
-
-// case TB_GETOBJECT: /* 4.71 */
-// case TB_GETPADDING: /* 4.71 */
-
- case TB_GETRECT:
- return TOOLBAR_GetRect (wndPtr, wParam, lParam);
-
- case TB_GETROWS:
- return TOOLBAR_GetRows (wndPtr, wParam, lParam);
-
- case TB_GETSTATE:
- return TOOLBAR_GetState (wndPtr, wParam, lParam);
-
- case TB_GETSTYLE:
- return TOOLBAR_GetStyle (wndPtr, wParam, lParam);
-
- case TB_GETTEXTROWS:
- return TOOLBAR_GetTextRows (wndPtr, wParam, lParam);
-
- case TB_GETTOOLTIPS:
- return TOOLBAR_GetToolTips (wndPtr, wParam, lParam);
-
- case TB_GETUNICODEFORMAT:
- return TOOLBAR_GetUnicodeFormat (wndPtr, wParam, lParam);
-
- case TB_HIDEBUTTON:
- return TOOLBAR_HideButton (wndPtr, wParam, lParam);
-
- case TB_HITTEST:
- return TOOLBAR_HitTest (wndPtr, wParam, lParam);
-
- case TB_INDETERMINATE:
- return TOOLBAR_Indeterminate (wndPtr, wParam, lParam);
-
- case TB_INSERTBUTTON32A:
- return TOOLBAR_InsertButton32A (wndPtr, wParam, lParam);
-
-// case TB_INSERTBUTTON32W:
-// case TB_INSERTMARKHITTEST: /* 4.71 */
-
- case TB_ISBUTTONCHECKED:
- return TOOLBAR_IsButtonChecked (wndPtr, wParam, lParam);
-
- case TB_ISBUTTONENABLED:
- return TOOLBAR_IsButtonEnabled (wndPtr, wParam, lParam);
-
- case TB_ISBUTTONHIDDEN:
- return TOOLBAR_IsButtonHidden (wndPtr, wParam, lParam);
-
- case TB_ISBUTTONHIGHLIGHTED:
- return TOOLBAR_IsButtonHighlighted (wndPtr, wParam, lParam);
-
- case TB_ISBUTTONINDETERMINATE:
- return TOOLBAR_IsButtonIndeterminate (wndPtr, wParam, lParam);
-
- case TB_ISBUTTONPRESSED:
- return TOOLBAR_IsButtonPressed (wndPtr, wParam, lParam);
-
-// case TB_LOADIMAGES: /* 4.70 */
-// case TB_MAPACCELERATOR32A: /* 4.71 */
-// case TB_MAPACCELERATOR32W: /* 4.71 */
-// case TB_MARKBUTTON: /* 4.71 */
-// case TB_MOVEBUTTON: /* 4.71 */
-
- case TB_PRESSBUTTON:
- return TOOLBAR_PressButton (wndPtr, wParam, lParam);
-
-// case TB_REPLACEBITMAP:
-
- case TB_SAVERESTORE32A:
- return TOOLBAR_SaveRestore32A (wndPtr, wParam, lParam);
-
-// case TB_SAVERESTORE32W:
-// case TB_SETANCHORHIGHLIGHT: /* 4.71 */
-
- case TB_SETBITMAPSIZE:
- return TOOLBAR_SetBitmapSize (wndPtr, wParam, lParam);
-
-// case TB_SETBUTTONINFO32A: /* 4.71 */
-// case TB_SETBUTTONINFO32W: /* 4.71 */
-
- case TB_SETBUTTONSIZE:
- return TOOLBAR_SetButtonSize (wndPtr, wParam, lParam);
-
- case TB_SETBUTTONWIDTH:
- return TOOLBAR_SetButtonWidth (wndPtr, wParam, lParam);
-
- case TB_SETCMDID:
- return TOOLBAR_SetCmdId (wndPtr, wParam, lParam);
-
-// case TB_SETCOLORSCHEME: /* 4.71 */
-
- case TB_SETDISABLEDIMAGELIST:
- return TOOLBAR_SetDisabledImageList (wndPtr, wParam, lParam);
-
-// case TB_SETDRAWTEXTFLAGS: /* 4.71 */
-
- case TB_SETEXTENDEDSTYLE:
- return TOOLBAR_SetExtendedStyle (wndPtr, wParam, lParam);
-
- case TB_SETHOTIMAGELIST:
- return TOOLBAR_SetHotImageList (wndPtr, wParam, lParam);
-
-// case TB_SETHOTITEM: /* 4.71 */
-
- case TB_SETIMAGELIST:
- return TOOLBAR_SetImageList (wndPtr, wParam, lParam);
-
- case TB_SETINDENT:
- return TOOLBAR_SetIndent (wndPtr, wParam, lParam);
-
-// case TB_SETINSERTMARK: /* 4.71 */
-
- case TB_SETINSERTMARKCOLOR:
- return TOOLBAR_SetInsertMarkColor (wndPtr, wParam, lParam);
-
- case TB_SETMAXTEXTROWS:
- return TOOLBAR_SetMaxTextRows (wndPtr, wParam, lParam);
-
-// case TB_SETPADDING: /* 4.71 */
-
- case TB_SETPARENT:
- return TOOLBAR_SetParent (wndPtr, wParam, lParam);
-
- case TB_SETROWS:
- return TOOLBAR_SetRows (wndPtr, wParam, lParam);
-
- case TB_SETSTATE:
- return TOOLBAR_SetState (wndPtr, wParam, lParam);
-
- case TB_SETSTYLE:
- return TOOLBAR_SetStyle (wndPtr, wParam, lParam);
-
- case TB_SETTOOLTIPS:
- return TOOLBAR_SetToolTips (wndPtr, wParam, lParam);
-
- case TB_SETUNICODEFORMAT:
- return TOOLBAR_SetUnicodeFormat (wndPtr, wParam, lParam);
-
-
-// case WM_CHAR:
-
- case WM_CREATE:
- return TOOLBAR_Create (wndPtr, wParam, lParam);
-
-// case WM_COMMAND:
-
- case WM_DESTROY:
- return TOOLBAR_Destroy (wndPtr, wParam, lParam);
-
- case WM_ERASEBKGND:
- return TOOLBAR_EraseBackground (wndPtr, wParam, lParam);
-
-// case WM_GETFONT:
-// case WM_KEYDOWN:
-// case WM_KILLFOCUS:
-
- case WM_LBUTTONDBLCLK:
- return TOOLBAR_LButtonDblClk (wndPtr, wParam, lParam);
-
- case WM_LBUTTONDOWN:
- return TOOLBAR_LButtonDown (wndPtr, wParam, lParam);
-
- case WM_LBUTTONUP:
- return TOOLBAR_LButtonUp (wndPtr, wParam, lParam);
-
- case WM_MOUSEMOVE:
- return TOOLBAR_MouseMove (wndPtr, wParam, lParam);
-
-// case WM_NCACTIVATE:
-// return TOOLBAR_NCActivate (wndPtr, wParam, lParam);
-
- case WM_NCCALCSIZE:
- return TOOLBAR_NCCalcSize (wndPtr, wParam, lParam);
-
- case WM_NCCREATE:
- return TOOLBAR_NCCreate (wndPtr, wParam, lParam);
-
- case WM_NCPAINT:
- return TOOLBAR_NCPaint (wndPtr, wParam, lParam);
-
- case WM_NOTIFY:
- return TOOLBAR_Notify (wndPtr, wParam, lParam);
-
-// case WM_NOTIFYFORMAT:
-
- case WM_PAINT:
- return TOOLBAR_Paint (wndPtr, wParam);
-
- case WM_SIZE:
- return TOOLBAR_Size (wndPtr, wParam, lParam);
-
-// case WM_SYSCOLORCHANGE:
-
-// case WM_WININICHANGE:
-
- case WM_CHARTOITEM:
- case WM_COMMAND:
- case WM_DRAWITEM:
- case WM_MEASUREITEM:
- case WM_VKEYTOITEM:
- return SendMessage32A (GetParent32 (hwnd), uMsg, wParam, lParam);
-
- default:
- if (uMsg >= WM_USER)
- ERR (toolbar, "unknown msg %04x wp=%08x lp=%08lx\n",
- uMsg, wParam, lParam);
- return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-
-
-void TOOLBAR_Register (void)
-{
- WNDCLASS32A wndClass;
-
- if (GlobalFindAtom32A (TOOLBARCLASSNAME32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS;
- wndClass.lpfnWndProc = (WNDPROC32)ToolbarWindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(TOOLBAR_INFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.hbrBackground = (HBRUSH32)(COLOR_3DFACE + 1);
- wndClass.lpszClassName = TOOLBARCLASSNAME32A;
-
- RegisterClass32A (&wndClass);
-}
diff --git a/controls/tooltips.c b/controls/tooltips.c
deleted file mode 100644
index baf6971..0000000
--- a/controls/tooltips.c
+++ /dev/null
@@ -1,1596 +0,0 @@
-/*
- * Tool tip control
- *
- * Copyright 1998 Eric Kohl
- *
- * TODO:
- * - Tracking tooltips (under construction).
- * - TTS_ALWAYSTIP (undefined).
- * - Unicode support.
- * - Custom draw support.
- * - The "lParam" variable from NMTTDISPINFO32A is not handled
- * in TOOLTIPS_GetTipText.
- *
- * Testing:
- * - Run tests using Waite Group Windows95 API Bible Volume 2.
- * The second cdrom (chapter 3) contains executables activate.exe,
- * curtool.exe, deltool.exe, enumtools.exe, getinfo.exe, getiptxt.exe,
- * hittest.exe, needtext.exe, newrect.exe, updtext.exe and winfrpt.exe.
- */
-
-#include "windows.h"
-#include "commctrl.h"
-#include "tooltips.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-#define ID_TIMER1 1 /* show delay timer */
-#define ID_TIMER2 2 /* auto pop timer */
-#define ID_TIMER3 3 /* tool leave timer */
-#define TT_SUBCLASS_PROP "CC32SubclassInfo" /* property name of tooltip window handle */
-
-#define TOOLTIPS_GetInfoPtr(wndPtr) ((TOOLTIPS_INFO *)wndPtr->wExtra[0])
-
-
-LRESULT CALLBACK
-TOOLTIPS_SubclassProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam);
-
-
-static VOID
-TOOLTIPS_Refresh (WND *wndPtr, HDC32 hdc)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- RECT32 rc;
- INT32 oldBkMode;
- HFONT32 hOldFont;
- UINT32 uFlags = DT_EXTERNALLEADING;
-
- if (infoPtr->nMaxTipWidth > -1)
- uFlags |= DT_WORDBREAK;
- if (wndPtr->dwStyle & TTS_NOPREFIX)
- uFlags |= DT_NOPREFIX;
- GetClientRect32 (wndPtr->hwndSelf, &rc);
- rc.left += (2 + infoPtr->rcMargin.left);
- rc.top += (2 + infoPtr->rcMargin.top);
- rc.right -= (2 + infoPtr->rcMargin.right);
- rc.bottom -= (2 + infoPtr->rcMargin.bottom);
- oldBkMode = SetBkMode32 (hdc, TRANSPARENT);
- SetTextColor32 (hdc, infoPtr->clrText);
- hOldFont = SelectObject32 (hdc, infoPtr->hFont);
- DrawText32A (hdc, infoPtr->szTipText, -1, &rc, uFlags);
- SelectObject32 (hdc, hOldFont);
- if (oldBkMode != TRANSPARENT)
- SetBkMode32 (hdc, oldBkMode);
-}
-
-
-static VOID
-TOOLTIPS_GetTipText (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
-{
- TTTOOL_INFO *toolPtr = &infoPtr->tools[infoPtr->nCurrentTool];
-
- if (toolPtr->hinst) {
- TRACE (tooltips, "get res string %x %x\n",
- toolPtr->hinst, (int)toolPtr->lpszText);
- LoadString32A (toolPtr->hinst, (UINT32)toolPtr->lpszText,
- infoPtr->szTipText, INFOTIPSIZE);
- }
- else if (toolPtr->lpszText) {
- if (toolPtr->lpszText == LPSTR_TEXTCALLBACK32A) {
- NMTTDISPINFO32A ttnmdi;
-
- /* fill NMHDR struct */
- ZeroMemory (&ttnmdi, sizeof(NMTTDISPINFO32A));
- ttnmdi.hdr.hwndFrom = wndPtr->hwndSelf;
- ttnmdi.hdr.idFrom = toolPtr->uId;
- ttnmdi.hdr.code = TTN_GETDISPINFO32A;
- ttnmdi.uFlags = toolPtr->uFlags;
- ttnmdi.lpszText = infoPtr->szTipText;
-
- TRACE (tooltips, "hdr.idFrom = %x\n", ttnmdi.hdr.idFrom);
- SendMessage32A (toolPtr->hwnd, WM_NOTIFY,
- (WPARAM32)toolPtr->uId, (LPARAM)&ttnmdi);
-
- if (ttnmdi.hinst) {
- LoadString32A (ttnmdi.hinst, (UINT32)ttnmdi.szText,
- infoPtr->szTipText, INFOTIPSIZE);
- if (ttnmdi.uFlags & TTF_DI_SETITEM) {
- toolPtr->hinst = ttnmdi.hinst;
- toolPtr->lpszText = ttnmdi.szText;
- }
- }
- else if (ttnmdi.szText[0]) {
- lstrcpyn32A (infoPtr->szTipText, ttnmdi.szText, 80);
- if (ttnmdi.uFlags & TTF_DI_SETITEM) {
- INT32 len = lstrlen32A (ttnmdi.szText) + 1;
- toolPtr->hinst = 0;
- toolPtr->lpszText =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len);
- lstrcpy32A (toolPtr->lpszText, ttnmdi.szText);
- }
- }
- else if (ttnmdi.lpszText == 0) {
- /* no text available */
- infoPtr->szTipText[0] = '\0';
- }
- else if (ttnmdi.lpszText != LPSTR_TEXTCALLBACK32A) {
- if (ttnmdi.lpszText != infoPtr->szTipText)
- lstrcpyn32A (infoPtr->szTipText, ttnmdi.lpszText,
- INFOTIPSIZE);
- if (ttnmdi.uFlags & TTF_DI_SETITEM) {
- INT32 len = lstrlen32A (ttnmdi.lpszText) + 1;
- toolPtr->hinst = 0;
- toolPtr->lpszText =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len);
- lstrcpy32A (toolPtr->lpszText, ttnmdi.lpszText);
- }
- }
- else
- ERR (tooltips, "recursive text callback!\n");
- }
- else
- lstrcpyn32A (infoPtr->szTipText, toolPtr->lpszText, INFOTIPSIZE);
- }
- else
- /* no text available */
- infoPtr->szTipText[0] = '\0';
-
- TRACE (tooltips, "\"%s\"\n", infoPtr->szTipText);
-}
-
-
-static VOID
-TOOLTIPS_CalcTipSize (WND *wndPtr, TOOLTIPS_INFO *infoPtr, LPSIZE32 lpSize)
-{
- HDC32 hdc;
- HFONT32 hOldFont;
- UINT32 uFlags = DT_EXTERNALLEADING | DT_CALCRECT;
- RECT32 rc = {0, 0, 0, 0};
-
- if (infoPtr->nMaxTipWidth > -1) {
- rc.right = infoPtr->nMaxTipWidth;
- uFlags |= DT_WORDBREAK;
- }
- if (wndPtr->dwStyle & TTS_NOPREFIX)
- uFlags |= DT_NOPREFIX;
- TRACE (tooltips, "\"%s\"\n", infoPtr->szTipText);
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- hOldFont = SelectObject32 (hdc, infoPtr->hFont);
- DrawText32A (hdc, infoPtr->szTipText, -1, &rc, uFlags);
- SelectObject32 (hdc, hOldFont);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- lpSize->cx = rc.right - rc.left + 4 +
- infoPtr->rcMargin.left + infoPtr->rcMargin.right;
- lpSize->cy = rc.bottom - rc.top + 4 +
- infoPtr->rcMargin.bottom + infoPtr->rcMargin.top;
-}
-
-
-static VOID
-TOOLTIPS_Show (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
-{
- TTTOOL_INFO *toolPtr;
- POINT32 pt;
- SIZE32 size;
- NMHDR hdr;
-
- if (infoPtr->nTool == -1) {
- TRACE (tooltips, "invalid tool (-1)!\n");
- return;
- }
-
- infoPtr->nCurrentTool = infoPtr->nTool;
-
- TRACE (tooltips, "Show tooltip pre %d!\n", infoPtr->nTool);
-
- TOOLTIPS_GetTipText (wndPtr, infoPtr);
-
- if (infoPtr->szTipText[0] == '\0') {
- infoPtr->nCurrentTool = -1;
- return;
- }
-
- TRACE (tooltips, "Show tooltip %d!\n", infoPtr->nCurrentTool);
- toolPtr = &infoPtr->tools[infoPtr->nCurrentTool];
-
- hdr.hwndFrom = wndPtr->hwndSelf;
- hdr.idFrom = toolPtr->uId;
- hdr.code = TTN_SHOW;
- SendMessage32A (toolPtr->hwnd, WM_NOTIFY,
- (WPARAM32)toolPtr->uId, (LPARAM)&hdr);
-
- TRACE (tooltips, "\"%s\"\n", infoPtr->szTipText);
-
- TOOLTIPS_CalcTipSize (wndPtr, infoPtr, &size);
- TRACE (tooltips, "size %d - %d\n", size.cx, size.cy);
-
- if ((toolPtr->uFlags & TTF_TRACK) && (toolPtr->uFlags & TTF_ABSOLUTE)) {
- pt.x = infoPtr->xTrackPos;
- pt.y = infoPtr->yTrackPos;
- }
- else if (toolPtr->uFlags & TTF_CENTERTIP) {
- RECT32 rect;
-
- if (toolPtr->uFlags & TTF_IDISHWND)
- GetWindowRect32 ((HWND32)toolPtr->uId, &rect);
- else {
- rect = toolPtr->rect;
- MapWindowPoints32 (toolPtr->hwnd, (HWND32)0, (LPPOINT32)&rect, 2);
- }
- pt.x = (rect.left + rect.right - size.cx) / 2;
- pt.y = rect.bottom + 2;
- }
- else {
- GetCursorPos32 (&pt);
- pt.y += 20;
- }
-
- TRACE (tooltips, "pos %d - %d\n", pt.x, pt.y);
-
-// SetWindowPos32 (wndPtr->hwndSelf, HWND_TOP, 1, 1,
- SetWindowPos32 (wndPtr->hwndSelf, HWND_TOP, pt.x, pt.y,
- size.cx, size.cy, SWP_SHOWWINDOW);
-
- SetTimer32 (wndPtr->hwndSelf, ID_TIMER2, infoPtr->nAutoPopTime, 0);
-}
-
-
-static VOID
-TOOLTIPS_Hide (WND *wndPtr, TOOLTIPS_INFO *infoPtr)
-{
- TTTOOL_INFO *toolPtr;
- NMHDR hdr;
-
- if (infoPtr->nCurrentTool == -1)
- return;
-
- toolPtr = &infoPtr->tools[infoPtr->nCurrentTool];
- TRACE (tooltips, "Hide tooltip %d!\n", infoPtr->nCurrentTool);
- KillTimer32 (wndPtr->hwndSelf, ID_TIMER2);
-
- hdr.hwndFrom = wndPtr->hwndSelf;
- hdr.idFrom = toolPtr->uId;
- hdr.code = TTN_POP;
- SendMessage32A (toolPtr->hwnd, WM_NOTIFY,
- (WPARAM32)toolPtr->uId, (LPARAM)&hdr);
-
- infoPtr->nCurrentTool = -1;
-
- SetWindowPos32 (wndPtr->hwndSelf, HWND_TOP, 0, 0, 0, 0, SWP_HIDEWINDOW);
-}
-
-
-static INT32
-TOOLTIPS_GetToolFromInfoA (TOOLTIPS_INFO *infoPtr, LPTTTOOLINFO32A lpToolInfo)
-{
- TTTOOL_INFO *toolPtr;
- INT32 nTool;
-
- for (nTool = 0; nTool < infoPtr->uNumTools; nTool++) {
- toolPtr = &infoPtr->tools[nTool];
-
- if (!(toolPtr->uFlags & TTF_IDISHWND) &&
- (lpToolInfo->hwnd == toolPtr->hwnd) &&
- (lpToolInfo->uId == toolPtr->uId))
- return nTool;
- }
-
- for (nTool = 0; nTool < infoPtr->uNumTools; nTool++) {
- toolPtr = &infoPtr->tools[nTool];
-
- if ((toolPtr->uFlags & TTF_IDISHWND) &&
- (lpToolInfo->uId == toolPtr->uId))
- return nTool;
- }
-
- return -1;
-}
-
-
-static INT32
-TOOLTIPS_GetToolFromPoint (TOOLTIPS_INFO *infoPtr, HWND32 hwnd, LPPOINT32 lpPt)
-{
- TTTOOL_INFO *toolPtr;
- INT32 nTool;
-
- for (nTool = 0; nTool < infoPtr->uNumTools; nTool++) {
- toolPtr = &infoPtr->tools[nTool];
-
- if (!(toolPtr->uFlags & TTF_IDISHWND)) {
- if (hwnd != toolPtr->hwnd)
- continue;
- if (!PtInRect32 (&toolPtr->rect, *lpPt))
- continue;
- return nTool;
- }
- }
-
- for (nTool = 0; nTool < infoPtr->uNumTools; nTool++) {
- toolPtr = &infoPtr->tools[nTool];
-
- if (toolPtr->uFlags & TTF_IDISHWND) {
- if ((HWND32)toolPtr->uId == hwnd)
- return nTool;
- }
- }
-
- return -1;
-}
-
-
-static INT32
-TOOLTIPS_GetToolFromMessage (TOOLTIPS_INFO *infoPtr, HWND32 hwndTool)
-{
- DWORD dwPos;
- POINT32 pt;
-
- dwPos = GetMessagePos ();
- pt.x = (INT32)LOWORD(dwPos);
- pt.y = (INT32)HIWORD(dwPos);
- ScreenToClient32 (hwndTool, &pt);
-
- return TOOLTIPS_GetToolFromPoint (infoPtr, hwndTool, &pt);
-}
-
-
-static BOOL32
-TOOLTIPS_CheckTool (WND *wndPtr)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- POINT32 pt;
- HWND32 hwndTool;
- INT32 nTool;
-
- GetCursorPos32 (&pt);
- hwndTool =
- SendMessage32A (wndPtr->hwndSelf, TTM_WINDOWFROMPOINT, 0, (LPARAM)&pt);
- if (hwndTool == 0)
- return FALSE;
-
- ScreenToClient32 (hwndTool, &pt);
- nTool = TOOLTIPS_GetToolFromPoint (infoPtr, hwndTool, &pt);
- TRACE (tooltips, "tool %d\n", nTool);
-
- return (nTool != -1);
-}
-
-
-static LRESULT
-TOOLTIPS_Activate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- infoPtr->bActive = (BOOL32)wParam;
-
- if (infoPtr->bActive)
- TRACE (tooltips, "activate!\n");
-
- if (!(infoPtr->bActive) && (infoPtr->nCurrentTool != -1))
- TOOLTIPS_Hide (wndPtr, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_AddTool32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpToolInfo = (LPTTTOOLINFO32A)lParam;
- TTTOOL_INFO *toolPtr;
-
- if (lpToolInfo == NULL) return FALSE;
-
- TRACE (tooltips, "add tool (%x) %x %d%s!\n",
- wndPtr->hwndSelf, lpToolInfo->hwnd, lpToolInfo->uId,
- (lpToolInfo->uFlags & TTF_IDISHWND) ? " TTF_IDISHWND" : "");
-
- if (infoPtr->uNumTools == 0) {
- infoPtr->tools =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(TTTOOL_INFO));
- toolPtr = infoPtr->tools;
- }
- else {
- TTTOOL_INFO *oldTools = infoPtr->tools;
- infoPtr->tools =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(TTTOOL_INFO) * (infoPtr->uNumTools + 1));
- memcpy (infoPtr->tools, oldTools,
- infoPtr->uNumTools * sizeof(TTTOOL_INFO));
- HeapFree (GetProcessHeap (), 0, oldTools);
- toolPtr = &infoPtr->tools[infoPtr->uNumTools];
- }
-
- infoPtr->uNumTools++;
-
- /* copy tool data */
- toolPtr->uFlags = lpToolInfo->uFlags;
- toolPtr->hwnd = lpToolInfo->hwnd;
- toolPtr->uId = lpToolInfo->uId;
- toolPtr->rect = lpToolInfo->rect;
- toolPtr->hinst = lpToolInfo->hinst;
-
- if (lpToolInfo->hinst) {
- TRACE (tooltips, "add string id %x!\n", (int)lpToolInfo->lpszText);
- toolPtr->lpszText = lpToolInfo->lpszText;
- }
- else if (lpToolInfo->lpszText) {
- if (lpToolInfo->lpszText == LPSTR_TEXTCALLBACK32A) {
- TRACE (tooltips, "add CALLBACK!\n");
- toolPtr->lpszText = lpToolInfo->lpszText;
- }
- else {
- INT32 len = lstrlen32A (lpToolInfo->lpszText);
- TRACE (tooltips, "add text \"%s\"!\n", lpToolInfo->lpszText);
- toolPtr->lpszText =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len + 1);
- lstrcpy32A (toolPtr->lpszText, lpToolInfo->lpszText);
- }
- }
-
- if (lpToolInfo->cbSize >= sizeof(TTTOOLINFO32A))
- toolPtr->lParam = lpToolInfo->lParam;
-
- /* install subclassing */
- if (toolPtr->uFlags & TTF_SUBCLASS) {
- if (toolPtr->uFlags & TTF_IDISHWND) {
- LPTT_SUBCLASS_INFO lpttsi =
- (LPTT_SUBCLASS_INFO)GetProp32A ((HWND32)toolPtr->uId, TT_SUBCLASS_PROP);
- if (lpttsi == NULL) {
- lpttsi = (LPTT_SUBCLASS_INFO)HeapAlloc (GetProcessHeap(),
- HEAP_ZERO_MEMORY, sizeof(TT_SUBCLASS_INFO));
- lpttsi->wpOrigProc =
- (WNDPROC32)SetWindowLong32A ((HWND32)toolPtr->uId,
- GWL_WNDPROC,(LONG)TOOLTIPS_SubclassProc);
- lpttsi->hwndToolTip = wndPtr->hwndSelf;
- lpttsi->uRefCount++;
- SetProp32A ((HWND32)toolPtr->uId, TT_SUBCLASS_PROP,
- (HANDLE32)lpttsi);
- }
- else
- ERR (tooltips, "A window tool must only be listed once!\n");
- }
- else {
- LPTT_SUBCLASS_INFO lpttsi =
- (LPTT_SUBCLASS_INFO)GetProp32A (toolPtr->hwnd, TT_SUBCLASS_PROP);
- if (lpttsi == NULL) {
- lpttsi = (LPTT_SUBCLASS_INFO)HeapAlloc (GetProcessHeap(),
- HEAP_ZERO_MEMORY, sizeof(TT_SUBCLASS_INFO));
- lpttsi->wpOrigProc =
- (WNDPROC32)SetWindowLong32A (toolPtr->hwnd,
- GWL_WNDPROC,(LONG)TOOLTIPS_SubclassProc);
- lpttsi->hwndToolTip = wndPtr->hwndSelf;
- lpttsi->uRefCount++;
- SetProp32A (toolPtr->hwnd, TT_SUBCLASS_PROP, (HANDLE32)lpttsi);
- }
- else
- lpttsi->uRefCount++;
- }
- TRACE (tooltips, "subclassing installed!\n");
- }
-
- return TRUE;
-}
-
-
-// << TOOLTIPS_AddTool32W >>
-
-
-static LRESULT
-TOOLTIPS_DelTool32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpToolInfo = (LPTTTOOLINFO32A)lParam;
- TTTOOL_INFO *toolPtr;
- INT32 nTool;
-
- if (lpToolInfo == NULL) return 0;
- if (infoPtr->uNumTools == 0) return 0;
-
- nTool = TOOLTIPS_GetToolFromInfoA (infoPtr, lpToolInfo);
- if (nTool == -1) return 0;
-
- TRACE (tooltips, "tool %d\n", nTool);
-
- /* delete text string */
- toolPtr = &infoPtr->tools[nTool];
- if ((toolPtr->hinst) && (toolPtr->lpszText)) {
- if (toolPtr->lpszText != LPSTR_TEXTCALLBACK32A)
- HeapFree (GetProcessHeap (), 0, toolPtr->lpszText);
- }
-
- /* remove subclassing */
- if (toolPtr->uFlags & TTF_SUBCLASS) {
- if (toolPtr->uFlags & TTF_IDISHWND) {
- LPTT_SUBCLASS_INFO lpttsi =
- (LPTT_SUBCLASS_INFO)GetProp32A ((HWND32)toolPtr->uId, TT_SUBCLASS_PROP);
- if (lpttsi) {
- SetWindowLong32A ((HWND32)toolPtr->uId, GWL_WNDPROC,
- (LONG)lpttsi->wpOrigProc);
- RemoveProp32A ((HWND32)toolPtr->uId, TT_SUBCLASS_PROP);
- HeapFree (GetProcessHeap(), 0, &lpttsi);
- }
- else
- ERR (tooltips, "Invalid data handle!\n");
- }
- else {
- LPTT_SUBCLASS_INFO lpttsi =
- (LPTT_SUBCLASS_INFO)GetProp32A (toolPtr->hwnd, TT_SUBCLASS_PROP);
- if (lpttsi) {
- if (lpttsi->uRefCount == 1) {
- SetWindowLong32A ((HWND32)toolPtr->uId, GWL_WNDPROC,
- (LONG)lpttsi->wpOrigProc);
- RemoveProp32A ((HWND32)toolPtr->uId, TT_SUBCLASS_PROP);
- HeapFree (GetProcessHeap(), 0, &lpttsi);
- }
- else
- lpttsi->uRefCount--;
- }
- else
- ERR (tooltips, "Invalid data handle!\n");
- }
- }
-
- /* delete tool from tool list */
- if (infoPtr->uNumTools == 1) {
- HeapFree (GetProcessHeap (), 0, infoPtr->tools);
- infoPtr->tools = NULL;
- }
- else {
- TTTOOL_INFO *oldTools = infoPtr->tools;
- infoPtr->tools =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(TTTOOL_INFO) * (infoPtr->uNumTools - 1));
-
- if (nTool > 0)
- memcpy (&infoPtr->tools[0], &oldTools[0],
- nTool * sizeof(TTTOOL_INFO));
-
- if (nTool < infoPtr->uNumTools - 1)
- memcpy (&infoPtr->tools[nTool], &oldTools[nTool + 1],
- (infoPtr->uNumTools - nTool - 1) * sizeof(TTTOOL_INFO));
-
- HeapFree (GetProcessHeap (), 0, oldTools);
- }
-
- infoPtr->uNumTools--;
-
- return 0;
-}
-
-
-// << TOOLTIPS_DelTool32W >>
-
-
-static LRESULT
-TOOLTIPS_EnumTools32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- UINT32 uIndex = (UINT32)wParam;
- LPTTTOOLINFO32A lpToolInfo = (LPTTTOOLINFO32A)lParam;
- TTTOOL_INFO *toolPtr;
-
- if (uIndex >= infoPtr->uNumTools) return FALSE;
- if (lpToolInfo == NULL) return FALSE;
-
- TRACE (tooltips, "index=%u\n", uIndex);
-
- toolPtr = &infoPtr->tools[uIndex];
-
- /* copy tool data */
- lpToolInfo->uFlags = toolPtr->uFlags;
- lpToolInfo->hwnd = toolPtr->hwnd;
- lpToolInfo->uId = toolPtr->uId;
- lpToolInfo->rect = toolPtr->rect;
- lpToolInfo->hinst = toolPtr->hinst;
- lpToolInfo->lpszText = toolPtr->lpszText;
-
- if (lpToolInfo->cbSize >= sizeof(TTTOOLINFO32A))
- lpToolInfo->lParam = toolPtr->lParam;
-
- return TRUE;
-}
-
-
-// << TOOLTIPS_EnumTools32W >>
-
-
-static LRESULT
-TOOLTIPS_GetCurrentTool32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpti = (LPTTTOOLINFO32A)lParam;
- TTTOOL_INFO *toolPtr;
-
- if (lpti) {
- if (infoPtr->nCurrentTool > -1) {
- toolPtr = &infoPtr->tools[infoPtr->nCurrentTool];
-
- /* copy tool data */
- lpti->uFlags = toolPtr->uFlags;
- lpti->rect = toolPtr->rect;
- lpti->hinst = toolPtr->hinst;
- lpti->lpszText = toolPtr->lpszText;
-
- if (lpti->cbSize >= sizeof(TTTOOLINFO32A))
- lpti->lParam = toolPtr->lParam;
-
- return TRUE;
- }
- else
- return FALSE;
- }
- else
- return (infoPtr->nCurrentTool != -1);
-
- return FALSE;
-}
-
-
-// << TOOLTIPS_GetCurrentTool32W >>
-
-
-static LRESULT
-TOOLTIPS_GetDelayTime (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- switch (wParam) {
- case TTDT_AUTOMATIC:
- return infoPtr->nAutomaticTime;
-
- case TTDT_RESHOW:
- return infoPtr->nReshowTime;
-
- case TTDT_AUTOPOP:
- return infoPtr->nAutoPopTime;
-
- case TTDT_INITIAL:
- return infoPtr->nInitialTime;
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_GetMargin (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPRECT32 lpRect = (LPRECT32)lParam;
-
- lpRect->left = infoPtr->rcMargin.left;
- lpRect->right = infoPtr->rcMargin.right;
- lpRect->bottom = infoPtr->rcMargin.bottom;
- lpRect->top = infoPtr->rcMargin.top;
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_GetMaxTipWidth (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- return infoPtr->nMaxTipWidth;
-}
-
-
-static LRESULT
-TOOLTIPS_GetText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpti = (LPTTTOOLINFO32A)lParam;
- INT32 nTool;
-
- if (!(lpti)) return 0;
- if (lpti->cbSize < sizeof(TTTOOLINFO32A)) return 0;
-
- nTool = TOOLTIPS_GetToolFromInfoA (infoPtr, lpti);
- if (nTool == -1) return 0;
-
- lstrcpy32A (lpti->lpszText, infoPtr->tools[nTool].lpszText);
-
- return 0;
-}
-
-
-// << TOOLTIPS_GetText32W >>
-
-
-static LRESULT
-TOOLTIPS_GetTipBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- return infoPtr->clrBk;
-}
-
-
-static LRESULT
-TOOLTIPS_GetTipTextColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- return infoPtr->clrText;
-}
-
-
-static LRESULT
-TOOLTIPS_GetToolCount (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- return infoPtr->uNumTools;
-}
-
-
-static LRESULT
-TOOLTIPS_GetToolInfo32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpToolInfo = (LPTTTOOLINFO32A)lParam;
- TTTOOL_INFO *toolPtr;
- INT32 nTool;
-
- if (lpToolInfo == NULL) return FALSE;
- if (infoPtr->uNumTools == 0) return FALSE;
-
- nTool = TOOLTIPS_GetToolFromInfoA (infoPtr, lpToolInfo);
- if (nTool == -1) return FALSE;
-
- TRACE (tooltips, "tool %d\n", nTool);
-
- toolPtr = &infoPtr->tools[nTool];
-
- /* copy tool data */
- lpToolInfo->uFlags = toolPtr->uFlags;
- lpToolInfo->rect = toolPtr->rect;
- lpToolInfo->hinst = toolPtr->hinst;
- lpToolInfo->lpszText = toolPtr->lpszText;
-
- if (lpToolInfo->cbSize >= sizeof(TTTOOLINFO32A))
- lpToolInfo->lParam = toolPtr->lParam;
-
- return TRUE;
-}
-
-
-// << TOOLTIPS_GetToolInfo32W >>
-
-
-static LRESULT
-TOOLTIPS_HitTest32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTHITTESTINFO32A lptthit = (LPTTHITTESTINFO32A)lParam;
- TTTOOL_INFO *toolPtr;
- INT32 nTool;
-
- if (lptthit == 0)
- return FALSE;
-
- nTool = TOOLTIPS_GetToolFromPoint (infoPtr, lptthit->hwnd, &lptthit->pt);
- if (nTool == -1)
- return FALSE;
-
- TRACE (tooltips, "tool %d!\n", nTool);
-
- /* copy tool data */
- toolPtr = &infoPtr->tools[nTool];
- lptthit->ti.cbSize = sizeof(TTTOOLINFO32A);
- lptthit->ti.uFlags = toolPtr->uFlags;
- lptthit->ti.hwnd = toolPtr->hwnd;
- lptthit->ti.uId = toolPtr->uId;
- lptthit->ti.rect = toolPtr->rect;
- lptthit->ti.hinst = toolPtr->hinst;
- lptthit->ti.lpszText = toolPtr->lpszText;
- lptthit->ti.lParam = toolPtr->lParam;
-
- return TRUE;
-}
-
-
-// << TOOLTIPS_HitTest32W >>
-
-
-static LRESULT
-TOOLTIPS_NewToolRect32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpti = (LPTTTOOLINFO32A)lParam;
- INT32 nTool;
-
- if (!(lpti)) return 0;
-#if 0
- if (lpti->cbSize < sizeof(TTTOOLINFO32A)) return 0;
-#endif
-
- nTool = TOOLTIPS_GetToolFromInfoA (infoPtr, lpti);
- if (nTool == -1) return 0;
-
- infoPtr->tools[nTool].rect = lpti->rect;
-
- return 0;
-}
-
-
-// << TOOLTIPS_NewToolRect32W >>
-
-
-static LRESULT
-TOOLTIPS_Pop (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- TOOLTIPS_Hide (wndPtr, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_RelayEvent (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPMSG32 lpMsg = (LPMSG32)lParam;
- POINT32 pt;
-
- if (lParam == NULL) {
- ERR (tooltips, "lpMsg == NULL!\n");
- return 0;
- }
-
- switch (lpMsg->message) {
- case WM_LBUTTONDOWN:
- case WM_LBUTTONUP:
- case WM_MBUTTONDOWN:
- case WM_MBUTTONUP:
- case WM_RBUTTONDOWN:
- case WM_RBUTTONUP:
- pt = lpMsg->pt;
- ScreenToClient32 (lpMsg->hwnd, &pt);
- infoPtr->nOldTool = infoPtr->nTool;
- infoPtr->nTool = TOOLTIPS_GetToolFromPoint (infoPtr, lpMsg->hwnd, &pt);
- TRACE (tooltips, "tool (%x) %d %d\n",
- wndPtr->hwndSelf, infoPtr->nOldTool, infoPtr->nTool);
- TOOLTIPS_Hide (wndPtr, infoPtr);
- break;
-
- case WM_MOUSEMOVE:
- pt = lpMsg->pt;
- ScreenToClient32 (lpMsg->hwnd, &pt);
- infoPtr->nOldTool = infoPtr->nTool;
- infoPtr->nTool = TOOLTIPS_GetToolFromPoint (infoPtr, lpMsg->hwnd, &pt);
- TRACE (tooltips, "tool (%x) %d %d\n",
- wndPtr->hwndSelf, infoPtr->nOldTool, infoPtr->nTool);
- TRACE (tooltips, "WM_MOUSEMOVE (%04x %d %d)\n",
- wndPtr->hwndSelf, pt.x, pt.y);
- if ((infoPtr->bActive) && (infoPtr->nTool != infoPtr->nOldTool)) {
- if (infoPtr->nOldTool == -1) {
- SetTimer32 (wndPtr->hwndSelf, ID_TIMER1,
- infoPtr->nInitialTime, 0);
- TRACE (tooltips, "timer 1 started!\n");
- }
- else {
- TOOLTIPS_Hide (wndPtr, infoPtr);
- SetTimer32 (wndPtr->hwndSelf, ID_TIMER1,
- infoPtr->nReshowTime, 0);
- TRACE (tooltips, "timer 2 started!\n");
- }
- }
- if (infoPtr->nCurrentTool != -1) {
- SetTimer32 (wndPtr->hwndSelf, ID_TIMER3, 100, 0);
- TRACE (tooltips, "timer 3 started!\n");
- }
- break;
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_SetDelayTime (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- INT32 nTime = (INT32)LOWORD(lParam);
-
- switch (wParam) {
- case TTDT_AUTOMATIC:
- if (nTime == 0) {
- infoPtr->nAutomaticTime = 500;
- infoPtr->nReshowTime = 100;
- infoPtr->nAutoPopTime = 5000;
- infoPtr->nInitialTime = 500;
- }
- else {
- infoPtr->nAutomaticTime = nTime;
- infoPtr->nReshowTime = nTime / 5;
- infoPtr->nAutoPopTime = nTime * 10;
- infoPtr->nInitialTime = nTime;
- }
- break;
-
- case TTDT_RESHOW:
- infoPtr->nReshowTime = nTime;
- break;
-
- case TTDT_AUTOPOP:
- infoPtr->nAutoPopTime = nTime;
- break;
-
- case TTDT_INITIAL:
- infoPtr->nInitialTime = nTime;
- break;
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_SetMargin (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPRECT32 lpRect = (LPRECT32)lParam;
-
- infoPtr->rcMargin.left = lpRect->left;
- infoPtr->rcMargin.right = lpRect->right;
- infoPtr->rcMargin.bottom = lpRect->bottom;
- infoPtr->rcMargin.top = lpRect->top;
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_SetMaxTipWidth (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- INT32 nTemp = infoPtr->nMaxTipWidth;
-
- infoPtr->nMaxTipWidth = (INT32)lParam;
-
- return nTemp;
-}
-
-
-static LRESULT
-TOOLTIPS_SetTipBkColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- infoPtr->clrBk = (COLORREF)wParam;
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_SetTipTextColor (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- infoPtr->clrText = (COLORREF)wParam;
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_SetToolInfo32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpToolInfo = (LPTTTOOLINFO32A)lParam;
- TTTOOL_INFO *toolPtr;
- INT32 nTool;
-
- if (lpToolInfo == NULL) return 0;
-
- nTool = TOOLTIPS_GetToolFromInfoA (infoPtr, lpToolInfo);
- if (nTool == -1) return 0;
-
- TRACE (tooltips, "tool %d\n", nTool);
-
- toolPtr = &infoPtr->tools[nTool];
-
- /* copy tool data */
- toolPtr->uFlags = lpToolInfo->uFlags;
- toolPtr->hwnd = lpToolInfo->hwnd;
- toolPtr->uId = lpToolInfo->uId;
- toolPtr->rect = lpToolInfo->rect;
- toolPtr->hinst = lpToolInfo->hinst;
-
- if (lpToolInfo->hinst) {
- toolPtr->lpszText = lpToolInfo->lpszText;
- }
- else if (lpToolInfo->lpszText) {
- if (lpToolInfo->lpszText == LPSTR_TEXTCALLBACK32A)
- toolPtr->lpszText = lpToolInfo->lpszText;
- else {
- INT32 len = lstrlen32A (lpToolInfo->lpszText);
- HeapFree (GetProcessHeap (), 0, toolPtr->lpszText);
- toolPtr->lpszText =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len + 1);
- lstrcpy32A (toolPtr->lpszText, lpToolInfo->lpszText);
- }
- }
-
- if (lpToolInfo->cbSize >= sizeof(TTTOOLINFO32A))
- toolPtr->lParam = lpToolInfo->lParam;
-
- return 0;
-}
-
-
-// << TOOLTIPS_SetToolInfo32W >>
-
-
-static LRESULT
-TOOLTIPS_TrackActivate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpToolInfo = (LPTTTOOLINFO32A)lParam;
-
- if ((BOOL32)wParam) {
- /* activate */
- infoPtr->nTrackTool = TOOLTIPS_GetToolFromInfoA (infoPtr, lpToolInfo);
- if (infoPtr->nTrackTool != -1) {
- infoPtr->bTrackActive = TRUE;
-
- /* FIXME : show tool tip */
- }
- }
- else {
- /* deactivate */
- /* FIXME : hide tool tip */
-
- infoPtr->bTrackActive = FALSE;
- infoPtr->nTrackTool = -1;
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_TrackPosition (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- infoPtr->xTrackPos = (INT32)LOWORD(lParam);
- infoPtr->yTrackPos = (INT32)HIWORD(lParam);
-
- if (infoPtr->bTrackActive) {
-
- FIXME (tooltips, "set position!\n");
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_Update (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- if (infoPtr->nCurrentTool != -1)
- UpdateWindow32 (wndPtr->hwndSelf);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_UpdateTipText32A (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LPTTTOOLINFO32A lpToolInfo = (LPTTTOOLINFO32A)lParam;
- TTTOOL_INFO *toolPtr;
- INT32 nTool;
-
- if (lpToolInfo == NULL) return 0;
-
- nTool = TOOLTIPS_GetToolFromInfoA (infoPtr, lpToolInfo);
- if (nTool == -1) return 0;
-
- TRACE (tooltips, "tool %d\n", nTool);
-
- toolPtr = &infoPtr->tools[nTool];
-
- /* copy tool text */
- toolPtr->hinst = lpToolInfo->hinst;
-
- if (lpToolInfo->hinst) {
- toolPtr->lpszText = lpToolInfo->lpszText;
- }
- else if (lpToolInfo->lpszText) {
- if (lpToolInfo->lpszText == LPSTR_TEXTCALLBACK32A)
- toolPtr->lpszText = lpToolInfo->lpszText;
- else {
- INT32 len = lstrlen32A (lpToolInfo->lpszText);
- HeapFree (GetProcessHeap (), 0, toolPtr->lpszText);
- toolPtr->lpszText =
- HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, len + 1);
- lstrcpy32A (toolPtr->lpszText, lpToolInfo->lpszText);
- }
- }
-
- return 0;
-}
-
-
-// << TOOLTIPS_UpdateTipText32W >>
-
-
-static LRESULT
-TOOLTIPS_WindowFromPoint (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- return WindowFromPoint32 (*((LPPOINT32)lParam));
-}
-
-
-
-static LRESULT
-TOOLTIPS_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr;
- LOGFONT32A logFont;
-
- /* allocate memory for info structure */
- infoPtr = (TOOLTIPS_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(TOOLTIPS_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- if (infoPtr == NULL) {
- ERR (tooltips, "could not allocate info memory!\n");
- return 0;
- }
-
- /* initialize info structure */
- infoPtr->bActive = TRUE;
- infoPtr->bTrackActive = FALSE;
- infoPtr->clrBk = GetSysColor32 (COLOR_INFOBK);
- infoPtr->clrText = GetSysColor32 (COLOR_INFOTEXT);
-
- SystemParametersInfo32A( SPI_GETICONTITLELOGFONT, 0, &logFont, 0 );
- infoPtr->hFont = CreateFontIndirect32A( &logFont );
-
- infoPtr->nMaxTipWidth = -1;
- infoPtr->nTool = -1;
- infoPtr->nOldTool = -1;
- infoPtr->nCurrentTool = -1;
- infoPtr->nTrackTool = -1;
-
- infoPtr->nAutomaticTime = 500;
- infoPtr->nReshowTime = 100;
- infoPtr->nAutoPopTime = 5000;
- infoPtr->nInitialTime = 500;
-
- SetWindowPos32 (wndPtr->hwndSelf, HWND_TOP, 0, 0, 0, 0, SWP_HIDEWINDOW);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- TTTOOL_INFO *toolPtr;
-
- /* free tools */
- if (infoPtr->tools) {
- INT32 i;
- for (i = 0; i < infoPtr->uNumTools; i++) {
- toolPtr = &infoPtr->tools[i];
- if ((toolPtr->hinst) && (toolPtr->lpszText)) {
- if (toolPtr->lpszText != LPSTR_TEXTCALLBACK32A)
- HeapFree (GetProcessHeap (), 0, toolPtr->lpszText);
- }
-
- /* remove subclassing */
- if (toolPtr->uFlags & TTF_SUBCLASS) {
- LPTT_SUBCLASS_INFO lpttsi;
-
- if (toolPtr->uFlags & TTF_IDISHWND)
- lpttsi = (LPTT_SUBCLASS_INFO)GetProp32A ((HWND32)toolPtr->uId, TT_SUBCLASS_PROP);
- else
- lpttsi = (LPTT_SUBCLASS_INFO)GetProp32A (toolPtr->hwnd, TT_SUBCLASS_PROP);
-
- if (lpttsi) {
- SetWindowLong32A ((HWND32)toolPtr->uId, GWL_WNDPROC,
- (LONG)lpttsi->wpOrigProc);
- RemoveProp32A ((HWND32)toolPtr->uId, TT_SUBCLASS_PROP);
- HeapFree (GetProcessHeap(), 0, &lpttsi);
- }
- }
- }
- HeapFree (GetProcessHeap (), 0, infoPtr->tools);
- }
-
- /* delete font */
- DeleteObject32 (infoPtr->hFont);
-
- /* free tool tips info data */
- HeapFree (GetProcessHeap (), 0, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- RECT32 rect;
- HBRUSH32 hBrush;
-
- hBrush = CreateSolidBrush32 (infoPtr->clrBk);
- GetClientRect32 (wndPtr->hwndSelf, &rect);
- FillRect32 ((HDC32)wParam, &rect, hBrush);
- DeleteObject32 (hBrush);
-
- return FALSE;
-}
-
-
-static LRESULT
-TOOLTIPS_GetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- return infoPtr->hFont;
-}
-
-
-static LRESULT
-TOOLTIPS_MouseMove (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- TOOLTIPS_Hide (wndPtr, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_NcCreate (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- wndPtr->dwStyle &= 0x0000FFFF;
- wndPtr->dwStyle |= (WS_POPUP | WS_BORDER);
-
- return TRUE;
-}
-
-
-static LRESULT
-TOOLTIPS_Paint (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- HDC32 hdc;
- PAINTSTRUCT32 ps;
-
- hdc = wParam==0 ? BeginPaint32 (wndPtr->hwndSelf, &ps) : (HDC32)wParam;
- TOOLTIPS_Refresh (wndPtr, hdc);
- if (!wParam)
- EndPaint32 (wndPtr->hwndSelf, &ps);
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_SetFont (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- infoPtr->hFont = (HFONT32)wParam;
-
- if ((LOWORD(lParam)) & (infoPtr->nCurrentTool != -1)) {
- FIXME (tooltips, "full redraw needed!\n");
- }
-
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_Timer (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
-
- TRACE (tooltips, "timer %d (%x) expired!\n", wParam, wndPtr->hwndSelf);
-
- switch (wParam)
- {
- case ID_TIMER1:
- KillTimer32 (wndPtr->hwndSelf, ID_TIMER1);
- TOOLTIPS_Show (wndPtr, infoPtr);
- break;
-
- case ID_TIMER2:
- TOOLTIPS_Hide (wndPtr, infoPtr);
- break;
-
- case ID_TIMER3:
- KillTimer32 (wndPtr->hwndSelf, ID_TIMER3);
- if (TOOLTIPS_CheckTool (wndPtr) == FALSE) {
- infoPtr->nTool = -1;
- infoPtr->nOldTool = -1;
- TOOLTIPS_Hide (wndPtr, infoPtr);
- }
- break;
- }
- return 0;
-}
-
-
-static LRESULT
-TOOLTIPS_WinIniChange (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- LOGFONT32A logFont;
-
- infoPtr->clrBk = GetSysColor32 (COLOR_INFOBK);
- infoPtr->clrText = GetSysColor32 (COLOR_INFOTEXT);
-
- DeleteObject32 (infoPtr->hFont);
- SystemParametersInfo32A( SPI_GETICONTITLELOGFONT, 0, &logFont, 0 );
- infoPtr->hFont = CreateFontIndirect32A( &logFont );
-
- return 0;
-}
-
-
-LRESULT CALLBACK
-TOOLTIPS_SubclassProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
-{
- LPTT_SUBCLASS_INFO lpttsi =
- (LPTT_SUBCLASS_INFO)GetProp32A (hwnd, TT_SUBCLASS_PROP);
- WND *wndPtr;
- TOOLTIPS_INFO *infoPtr;
- UINT32 nTool;
-
- switch (uMsg) {
- case WM_LBUTTONDOWN:
- case WM_LBUTTONUP:
- case WM_MBUTTONDOWN:
- case WM_MBUTTONUP:
- case WM_RBUTTONDOWN:
- case WM_RBUTTONUP:
- {
- wndPtr = WIN_FindWndPtr(lpttsi->hwndToolTip);
- infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- nTool = TOOLTIPS_GetToolFromMessage (infoPtr, hwnd);
-
- TRACE (tooltips, "subclassed mouse message %04x\n", uMsg);
- infoPtr->nOldTool = infoPtr->nTool;
- infoPtr->nTool = nTool;
- TOOLTIPS_Hide (wndPtr, infoPtr);
- }
- break;
-
- case WM_MOUSEMOVE:
- {
- wndPtr = WIN_FindWndPtr(lpttsi->hwndToolTip);
- infoPtr = TOOLTIPS_GetInfoPtr(wndPtr);
- nTool = TOOLTIPS_GetToolFromMessage (infoPtr, hwnd);
-
- TRACE (tooltips, "subclassed WM_MOUSEMOVE\n");
- infoPtr->nOldTool = infoPtr->nTool;
- infoPtr->nTool = nTool;
-
- if ((infoPtr->bActive) &&
- (infoPtr->nTool != infoPtr->nOldTool)) {
- if (infoPtr->nOldTool == -1) {
- SetTimer32 (wndPtr->hwndSelf, ID_TIMER1,
- infoPtr->nInitialTime, 0);
- TRACE (tooltips, "timer 1 started!\n");
- }
- else {
- TOOLTIPS_Hide (wndPtr, infoPtr);
- SetTimer32 (wndPtr->hwndSelf, ID_TIMER1,
- infoPtr->nReshowTime, 0);
- TRACE (tooltips, "timer 2 started!\n");
- }
- }
- if (infoPtr->nCurrentTool != -1) {
- SetTimer32 (wndPtr->hwndSelf, ID_TIMER3, 100, 0);
- TRACE (tooltips, "timer 3 started!\n");
- }
- }
- break;
- }
-
- return CallWindowProc32A (lpttsi->wpOrigProc, hwnd, uMsg, wParam, lParam);
-}
-
-
-LRESULT CALLBACK
-TOOLTIPS_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
-
- switch (uMsg)
- {
- case TTM_ACTIVATE:
- return TOOLTIPS_Activate (wndPtr, wParam, lParam);
-
- case TTM_ADDTOOL32A:
- return TOOLTIPS_AddTool32A (wndPtr, wParam, lParam);
-
-// case TTM_ADDTOOL32W:
-
- case TTM_DELTOOL32A:
- return TOOLTIPS_DelTool32A (wndPtr, wParam, lParam);
-
-// case TTM_DELTOOL32W:
-
- case TTM_ENUMTOOLS32A:
- return TOOLTIPS_EnumTools32A (wndPtr, wParam, lParam);
-
-// case TTM_ENUMTOOLS32W:
-
- case TTM_GETCURRENTTOOL32A:
- return TOOLTIPS_GetCurrentTool32A (wndPtr, wParam, lParam);
-
-// case TTM_GETCURRENTTOOL32W:
-
- case TTM_GETDELAYTIME:
- return TOOLTIPS_GetDelayTime (wndPtr, wParam, lParam);
-
- case TTM_GETMARGIN:
- return TOOLTIPS_GetMargin (wndPtr, wParam, lParam);
-
- case TTM_GETMAXTIPWIDTH:
- return TOOLTIPS_GetMaxTipWidth (wndPtr, wParam, lParam);
-
- case TTM_GETTEXT32A:
- return TOOLTIPS_GetText32A (wndPtr, wParam, lParam);
-
-// case TTM_GETTEXT32W:
-
- case TTM_GETTIPBKCOLOR:
- return TOOLTIPS_GetTipBkColor (wndPtr, wParam, lParam);
-
- case TTM_GETTIPTEXTCOLOR:
- return TOOLTIPS_GetTipTextColor (wndPtr, wParam, lParam);
-
- case TTM_GETTOOLCOUNT:
- return TOOLTIPS_GetToolCount (wndPtr, wParam, lParam);
-
- case TTM_GETTOOLINFO32A:
- return TOOLTIPS_GetToolInfo32A (wndPtr, wParam, lParam);
-
-// case TTM_GETTOOLINFO32W:
-
- case TTM_HITTEST32A:
- return TOOLTIPS_HitTest32A (wndPtr, wParam, lParam);
-
-// case TTM_HITTEST32W:
-
- case TTM_NEWTOOLRECT32A:
- return TOOLTIPS_NewToolRect32A (wndPtr, wParam, lParam);
-
-// case TTM_NEWTOOLRECT32W:
-
- case TTM_POP:
- return TOOLTIPS_Pop (wndPtr, wParam, lParam);
-
- case TTM_RELAYEVENT:
- return TOOLTIPS_RelayEvent (wndPtr, wParam, lParam);
-
- case TTM_SETDELAYTIME:
- return TOOLTIPS_SetDelayTime (wndPtr, wParam, lParam);
-
- case TTM_SETMARGIN:
- return TOOLTIPS_SetMargin (wndPtr, wParam, lParam);
-
- case TTM_SETMAXTIPWIDTH:
- return TOOLTIPS_SetMaxTipWidth (wndPtr, wParam, lParam);
-
- case TTM_SETTIPBKCOLOR:
- return TOOLTIPS_SetTipBkColor (wndPtr, wParam, lParam);
-
- case TTM_SETTIPTEXTCOLOR:
- return TOOLTIPS_SetTipTextColor (wndPtr, wParam, lParam);
-
- case TTM_SETTOOLINFO32A:
- return TOOLTIPS_SetToolInfo32A (wndPtr, wParam, lParam);
-
-// case TTM_SETTOOLINFO32W:
-
- case TTM_TRACKACTIVATE:
- return TOOLTIPS_TrackActivate (wndPtr, wParam, lParam);
-
- case TTM_TRACKPOSITION:
- return TOOLTIPS_TrackPosition (wndPtr, wParam, lParam);
-
- case TTM_UPDATE:
- return TOOLTIPS_Update (wndPtr, wParam, lParam);
-
- case TTM_UPDATETIPTEXT32A:
- return TOOLTIPS_UpdateTipText32A (wndPtr, wParam, lParam);
-
-// case TTM_UPDATETIPTEXT32W:
-
- case TTM_WINDOWFROMPOINT:
- return TOOLTIPS_WindowFromPoint (wndPtr, wParam, lParam);
-
-
- case WM_CREATE:
- return TOOLTIPS_Create (wndPtr, wParam, lParam);
-
- case WM_DESTROY:
- return TOOLTIPS_Destroy (wndPtr, wParam, lParam);
-
- case WM_ERASEBKGND:
- return TOOLTIPS_EraseBackground (wndPtr, wParam, lParam);
-
- case WM_GETFONT:
- return TOOLTIPS_GetFont (wndPtr, wParam, lParam);
-
-// case WM_GETTEXT:
-// case WM_GETTEXTLENGTH:
-// case WM_LBUTTONDOWN:
-// case WM_MBUTTONDOWN:
-
- case WM_MOUSEMOVE:
- return TOOLTIPS_MouseMove (wndPtr, wParam, lParam);
-
- case WM_NCCREATE:
- return TOOLTIPS_NcCreate (wndPtr, wParam, lParam);
-
-// case WM_NCHITTEST:
-// case WM_NOTIFYFORMAT:
-
- case WM_PAINT:
- return TOOLTIPS_Paint (wndPtr, wParam, lParam);
-
-// case WM_PRINTCLIENT:
-// case WM_RBUTTONDOWN:
-
- case WM_SETFONT:
- return TOOLTIPS_SetFont (wndPtr, wParam, lParam);
-
-// case WM_STYLECHANGED:
-
- case WM_TIMER:
- return TOOLTIPS_Timer (wndPtr, wParam, lParam);
-
- case WM_WININICHANGE:
- return TOOLTIPS_WinIniChange (wndPtr, wParam, lParam);
-
- default:
- if (uMsg >= WM_USER)
- ERR (tooltips, "unknown msg %04x wp=%08x lp=%08lx\n",
- uMsg, wParam, lParam);
- return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-
-
-void
-TOOLTIPS_Register (void)
-{
- WNDCLASS32A wndClass;
-
- if (GlobalFindAtom32A (TOOLTIPS_CLASS32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS;
- wndClass.lpfnWndProc = (WNDPROC32)TOOLTIPS_WindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(TOOLTIPS_INFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.hbrBackground = 0;
- wndClass.lpszClassName = TOOLTIPS_CLASS32A;
-
- RegisterClass32A (&wndClass);
-}
diff --git a/controls/trackbar.c b/controls/trackbar.c
deleted file mode 100644
index 48e587b..0000000
--- a/controls/trackbar.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * Trackbar control
- *
- * Copyright 1998 Eric Kohl
- *
- * NOTES
- * This is just a dummy control. An author is needed! Any volunteers?
- * I will only improve this control once in a while.
- * Eric <ekohl@abo.rhein-zeitung.de>
- *
- * TODO:
- * - All messages.
- * - All notifications.
- */
-
-#include "windows.h"
-#include "commctrl.h"
-#include "trackbar.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-#define TRACKBAR_GetInfoPtr(wndPtr) ((TRACKBAR_INFO *)wndPtr->wExtra[0])
-
-
-static VOID
-TRACKBAR_Refresh (WND *wndPtr, HDC32 hdc)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
- RECT32 rect;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- /* draw channel */
- DrawEdge32 (hdc, &infoPtr->rcChannel, EDGE_SUNKEN, BF_RECT);
-
- /* draw thumb */
- if (!(wndPtr->dwStyle & TBS_NOTHUMB)) {
-
- }
-
- /* draw ticks */
- if (!(wndPtr->dwStyle & TBS_NOTICKS)) {
-
- }
-
- if (infoPtr->bFocus)
- DrawFocusRect32 (hdc, &rect);
-}
-
-
-static LRESULT
-TRACKBAR_ClearSel (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- infoPtr->nSelMin = 0;
- infoPtr->nSelMax = 0;
-
- if ((BOOL32)wParam) {
- HDC32 hdc = GetDC32 (wndPtr->hwndSelf);
- TRACKBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
- }
-
- return 0;
-}
-
-
-// << TRACKBAR_ClearTics >>
-// << TRACKBAR_GetChannelRect >>
-
-
-static LRESULT
-TRACKBAR_GetLineSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nLineSize;
-}
-
-
-// << TRACKBAR_GetNumTics >>
-
-
-static LRESULT
-TRACKBAR_GetPageSize (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nPageSize;
-}
-
-
-static LRESULT
-TRACKBAR_GetPos (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nPos;
-}
-
-
-// << TRACKBAR_GetPTics >>
-
-
-static LRESULT
-TRACKBAR_GetRangeMax (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nRangeMax;
-}
-
-
-static LRESULT
-TRACKBAR_GetRangeMin (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nRangeMin;
-}
-
-
-static LRESULT
-TRACKBAR_GetSelEnd (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nSelMax;
-}
-
-
-static LRESULT
-TRACKBAR_GetSelStart (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nSelMin;
-}
-
-
-static LRESULT
-TRACKBAR_GetThumbLength (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- return infoPtr->nThumbLen;
-}
-
-
-
-
-
-
-static LRESULT
-TRACKBAR_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr;
-
- infoPtr = (TRACKBAR_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(TRACKBAR_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
-
- /* default values */
- infoPtr->nRangeMin = 0;
- infoPtr->nRangeMax = 100;
- infoPtr->nLineSize = 1;
- infoPtr->nPageSize = 20;
- infoPtr->nSelMin = 0;
- infoPtr->nSelMax = 0;
- infoPtr->nPos = 0;
- infoPtr->nThumbLen = 23; /* initial thumb length */
-
-
- return 0;
-}
-
-
-static LRESULT
-TRACKBAR_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
-
-
-
- HeapFree (GetProcessHeap (), 0, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-TRACKBAR_KillFocus (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
- HDC32 hdc;
-
- infoPtr->bFocus = FALSE;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TRACKBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return 0;
-}
-
-
-static LRESULT
-TRACKBAR_LButtonDown (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
-
- SetFocus32 (wndPtr->hwndSelf);
-
- return 0;
-}
-
-
-static LRESULT
-TRACKBAR_Paint (WND *wndPtr, WPARAM32 wParam)
-{
- HDC32 hdc;
- PAINTSTRUCT32 ps;
-
- hdc = wParam==0 ? BeginPaint32 (wndPtr->hwndSelf, &ps) : (HDC32)wParam;
- TRACKBAR_Refresh (wndPtr, hdc);
- if(!wParam)
- EndPaint32 (wndPtr->hwndSelf, &ps);
- return 0;
-}
-
-
-static LRESULT
-TRACKBAR_SetFocus (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
- HDC32 hdc;
-
- infoPtr->bFocus = TRUE;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- TRACKBAR_Refresh (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-
- return 0;
-}
-
-
-static LRESULT
-TRACKBAR_Size (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TRACKBAR_INFO *infoPtr = TRACKBAR_GetInfoPtr(wndPtr);
- RECT32 rect;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
-
- /* calculate channel rect */
- if (wndPtr->dwStyle & TBS_VERT) {
- infoPtr->rcChannel.top = rect.top + 8;
- infoPtr->rcChannel.bottom = rect.bottom - 8;
-
- /* FIXME */
- infoPtr->rcChannel.left = rect.left + 10;
- infoPtr->rcChannel.right = rect.left + 14;
-
- }
- else {
- infoPtr->rcChannel.left = rect.left + 8;
- infoPtr->rcChannel.right = rect.right - 8;
-
- /* FIXME */
- if (wndPtr->dwStyle & TBS_BOTH) {
- infoPtr->rcChannel.top = rect.bottom / 2 - 2;
- infoPtr->rcChannel.bottom = rect.bottom / 2 + 2;
-
- }
- else if (wndPtr->dwStyle & TBS_TOP) {
- infoPtr->rcChannel.top = rect.top + 10;
- infoPtr->rcChannel.bottom = rect.top + 14;
-
- }
- else {
- /* TBS_BOTTOM */
- infoPtr->rcChannel.top = rect.bottom - 14;
- infoPtr->rcChannel.bottom = rect.bottom - 10;
- }
- }
-
- return 0;
-}
-
-
-// << TRACKBAR_Timer >>
-// << TRACKBAR_WinIniChange >>
-
-
-LRESULT WINAPI
-TrackbarWindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
-
- switch (uMsg)
- {
- case TBM_CLEARSEL:
- return TRACKBAR_ClearSel (wndPtr, wParam, lParam);
-
-// case TBM_CLEARTICS:
-// case TBM_GETBUDDY:
-// case TBM_GETCHANNELRECT:
-
- case TBM_GETLINESIZE:
- return TRACKBAR_GetLineSize (wndPtr, wParam, lParam);
-
-// case TBM_GETNUMTICS:
-
- case TBM_GETPAGESIZE:
- return TRACKBAR_GetPageSize (wndPtr, wParam, lParam);
-
- case TBM_GETPOS:
- return TRACKBAR_GetPos (wndPtr, wParam, lParam);
-
-// case TBM_GETPTICS:
-
- case TBM_GETRANGEMAX:
- return TRACKBAR_GetRangeMax (wndPtr, wParam, lParam);
-
- case TBM_GETRANGEMIN:
- return TRACKBAR_GetRangeMin (wndPtr, wParam, lParam);
-
- case TBM_GETSELEND:
- return TRACKBAR_GetSelEnd (wndPtr, wParam, lParam);
-
- case TBM_GETSELSTART:
- return TRACKBAR_GetSelStart (wndPtr, wParam, lParam);
-
- case TBM_GETTHUMBLENGTH:
- return TRACKBAR_GetThumbLength (wndPtr, wParam, lParam);
-
-// case TBM_GETTHUMBRECT:
-// case TBM_GETTIC:
-// case TBM_GETTICPOS:
-// case TBM_GETTOOLTIPS:
-// case TBM_GETUNICODEFORMAT:
-// case TBM_SETBUDDY:
-// case TBM_SETPAGESIZE:
-// case TBM_SETPOS:
-// case TBM_SETRANGE:
-// case TBM_SETRANGEMAX:
-// case TBM_SETRANGEMIN:
-// case TBM_SETSEL:
-// case TBM_SETSELEND:
-// case TBM_SETSELSTART:
-// case TBM_SETTHUMBLENGTH:
-// case TBM_SETTIC:
-// case TBM_SETTICFREQ:
-// case TBM_SETTIPSIDE:
-// case TBM_SETTOOLTIPS:
-// case TBM_SETUNICODEFORMAT:
-
-
-// case WM_CAPTURECHANGED:
-
- case WM_CREATE:
- return TRACKBAR_Create (wndPtr, wParam, lParam);
-
- case WM_DESTROY:
- return TRACKBAR_Destroy (wndPtr, wParam, lParam);
-
-// case WM_ENABLE:
-
-// case WM_ERASEBKGND:
-// return 0;
-
- case WM_GETDLGCODE:
- return DLGC_WANTARROWS;
-
-// case WM_KEYDOWN:
-
-// case WM_KEYUP:
-
- case WM_KILLFOCUS:
- return TRACKBAR_KillFocus (wndPtr, wParam, lParam);
-
- case WM_LBUTTONDOWN:
- return TRACKBAR_LButtonDown (wndPtr, wParam, lParam);
-
-// case WM_LBUTTONUP:
-
-// case WM_MOUSEMOVE:
-// return TRACKBAR_MouseMove (wndPtr, wParam, lParam);
-
- case WM_PAINT:
- return TRACKBAR_Paint (wndPtr, wParam);
-
- case WM_SETFOCUS:
- return TRACKBAR_SetFocus (wndPtr, wParam, lParam);
-
- case WM_SIZE:
- return TRACKBAR_Size (wndPtr, wParam, lParam);
-
-// case WM_TIMER:
-
-// case WM_WININICHANGE:
-
- default:
- if (uMsg >= WM_USER)
- ERR (trackbar, "unknown msg %04x wp=%08x lp=%08lx\n",
- uMsg, wParam, lParam);
- return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-
-
-void
-TRACKBAR_Register (void)
-{
- WNDCLASS32A wndClass;
-
- if (GlobalFindAtom32A (TRACKBAR_CLASS32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS;
- wndClass.lpfnWndProc = (WNDPROC32)TrackbarWindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(TRACKBAR_INFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.hbrBackground = (HBRUSH32)(COLOR_3DFACE + 1);
- wndClass.lpszClassName = TRACKBAR_CLASS32A;
-
- RegisterClass32A (&wndClass);
-}
-
diff --git a/controls/treeview.c b/controls/treeview.c
deleted file mode 100644
index 992b5d8..0000000
--- a/controls/treeview.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Treeview control
- *
- * Copyright 1998 Eric Kohl
- *
- * NOTES
- * This is just a dummy control. An author is needed! Any volunteers?
- * I will only improve this control once in a while.
- * Eric <ekohl@abo.rhein-zeitung.de>
- *
- * TODO:
- * - All messages.
- * - All notifications.
- */
-
-#include "windows.h"
-#include "commctrl.h"
-#include "treeview.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-
-#define TREEVIEW_GetInfoPtr(wndPtr) ((TREEVIEW_INFO *)wndPtr->wExtra[0])
-
-
-
-static LRESULT
-TREEVIEW_SetImageList (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(wndPtr);
- HIMAGELIST himlTemp;
-
- if ((INT32)wParam == TVSIL_NORMAL) {
- himlTemp = infoPtr->himlNormal;
- infoPtr->himlNormal = (HIMAGELIST)lParam;
- }
- else if ((INT32)wParam == TVSIL_STATE) {
- himlTemp = infoPtr->himlState;
- infoPtr->himlState = (HIMAGELIST)lParam;
- }
- else
- return 0;
-
- return (LRESULT)himlTemp;
-}
-
-
-
-static LRESULT
-TREEVIEW_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TREEVIEW_INFO *infoPtr;
-
- /* allocate memory for info structure */
- infoPtr = (TREEVIEW_INFO *)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(TREEVIEW_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- if (infoPtr == NULL) {
- ERR (treeview, "could not allocate info memory!\n");
- return 0;
- }
-
- if ((TREEVIEW_INFO*)wndPtr->wExtra[0] != infoPtr) {
- ERR (treeview, "pointer assignment error!\n");
- return 0;
- }
-
- /* set default settings */
- infoPtr->clrBk = GetSysColor32 (COLOR_WINDOW);
- infoPtr->clrText = GetSysColor32 (COLOR_BTNTEXT);
- infoPtr->himlNormal = NULL;
- infoPtr->himlState = NULL;
-
-
- return 0;
-}
-
-
-static LRESULT
-TREEVIEW_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(wndPtr);
-
-
-
-
- /* free tree view info data */
- HeapFree (GetProcessHeap (), 0, infoPtr);
-
- return 0;
-}
-
-
-static LRESULT
-TREEVIEW_EraseBackground (WND *wndPtr, WPARAM32 wParam, LPARAM lParam)
-{
- TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(wndPtr);
- HBRUSH32 hBrush = CreateSolidBrush32 (infoPtr->clrBk);
- RECT32 rect;
-
- GetClientRect32 (wndPtr->hwndSelf, &rect);
- FillRect32 ((HDC32)wParam, &rect, hBrush);
- DeleteObject32 (hBrush);
- return TRUE;
-}
-
-
-
-LRESULT WINAPI
-TREEVIEW_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
-
- switch (uMsg)
- {
-
- case TVM_INSERTITEMA:
- FIXME (treeview, "Unimplemented msg TVM_INSERTITEMA\n");
- return 0;
-
- case TVM_INSERTITEMW:
- FIXME (treeview, "Unimplemented msg TVM_INSERTITEMW\n");
- return 0;
-
- case TVM_DELETEITEM:
- FIXME (treeview, "Unimplemented msg TVM_DELETEITEM\n");
- return 0;
-
- case TVM_EXPAND:
- FIXME (treeview, "Unimplemented msg TVM_EXPAND\n");
- return 0;
-
- case TVM_GETITEMRECT:
- FIXME (treeview, "Unimplemented msg TVM_GETITEMRECT\n");
- return 0;
-
- case TVM_GETCOUNT:
- FIXME (treeview, "Unimplemented msg TVM_GETCOUNT\n");
- return 0;
-
- case TVM_GETINDENT:
- FIXME (treeview, "Unimplemented msg TVM_GETINDENT\n");
- return 0;
-
- case TVM_SETINDENT:
- FIXME (treeview, "Unimplemented msg TVM_SETINDENT\n");
- return 0;
-
- case TVM_GETIMAGELIST:
- FIXME (treeview, "Unimplemented msg TVM_GETIMAGELIST\n");
- return 0;
- //return TREEVIEW_GetImageList (wndPtr, wParam, lParam);
-
- case TVM_SETIMAGELIST:
- return TREEVIEW_SetImageList (wndPtr, wParam, lParam);
-
- case TVM_GETNEXTITEM:
- FIXME (treeview, "Unimplemented msg TVM_GETNEXTITEM\n");
- return 0;
-
- case TVM_SELECTITEM:
- FIXME (treeview, "Unimplemented msg TVM_SELECTITEM \n");
- return 0;
-
- case TVM_GETITEMA:
- FIXME (treeview, "Unimplemented msg TVM_GETITEMA\n");
- return 0;
-
- case TVM_GETITEMW:
- FIXME (treeview, "Unimplemented msg TVM_GETITEMW\n");
- return 0;
-
- case TVM_SETITEMA:
- FIXME (treeview, "Unimplemented msg TVM_SETITEMA\n");
- return 0;
-
- case TVM_SETITEMW:
- FIXME (treeview, "Unimplemented msg TVM_SETITEMW\n");
- return 0;
-
- case TVM_EDITLABELA:
- FIXME (treeview, "Unimplemented msg TVM_EDITLABELA \n");
- return 0;
-
- case TVM_EDITLABELW:
- FIXME (treeview, "Unimplemented msg TVM_EDITLABELW \n");
- return 0;
-
- case TVM_GETEDITCONTROL:
- FIXME (treeview, "Unimplemented msg TVM_GETEDITCONTROL\n");
- return 0;
-
- case TVM_GETVISIBLECOUNT:
- FIXME (treeview, "Unimplemented msg TVM_GETVISIBLECOUNT\n");
- return 0;
-
- case TVM_HITTEST:
- FIXME (treeview, "Unimplemented msg TVM_HITTEST\n");
- return 0;
-
- case TVM_CREATEDRAGIMAGE:
- FIXME (treeview, "Unimplemented msg TVM_CREATEDRAGIMAGE\n");
- return 0;
-
- case TVM_SORTCHILDREN:
- FIXME (treeview, "Unimplemented msg TVM_SORTCHILDREN\n");
- return 0;
-
- case TVM_ENSUREVISIBLE:
- FIXME (treeview, "Unimplemented msg TVM_ENSUREVISIBLE\n");
- return 0;
-
- case TVM_SORTCHILDRENCB:
- FIXME (treeview, "Unimplemented msg TVM_SORTCHILDRENCB\n");
- return 0;
-
- case TVM_ENDEDITLABELNOW:
- FIXME (treeview, "Unimplemented msg TVM_ENDEDITLABELNOW\n");
- return 0;
-
- case TVM_GETISEARCHSTRINGA:
- FIXME (treeview, "Unimplemented msg TVM_GETISEARCHSTRINGA\n");
- return 0;
-
- case TVM_GETISEARCHSTRINGW:
- FIXME (treeview, "Unimplemented msg TVM_GETISEARCHSTRINGW\n");
- return 0;
-
- case TVM_SETTOOLTIPS:
- FIXME (treeview, "Unimplemented msg TVM_SETTOOLTIPS\n");
- return 0;
-
- case TVM_GETTOOLTIPS:
- FIXME (treeview, "Unimplemented msg TVM_GETTOOLTIPS\n");
- return 0;
-
- case WM_CREATE:
- return TREEVIEW_Create (wndPtr, wParam, lParam);
-
- case WM_DESTROY:
- return TREEVIEW_Destroy (wndPtr, wParam, lParam);
-
-// case EM_ENABLE:
-
- case WM_ERASEBKGND:
- return TREEVIEW_EraseBackground (wndPtr, wParam, lParam);
-
- case WM_GETDLGCODE:
- return DLGC_WANTARROWS | DLGC_WANTCHARS;
-
-// case WM_PAINT:
-// return TREEVIEW_Paint (wndPtr, wParam);
-
-// case WM_SETFONT:
-
-// case WM_TIMER:
-
-// case WM_VSCROLL:
-
- default:
- if (uMsg >= WM_USER)
- FIXME (treeview, "Unknown msg %04x wp=%08x lp=%08lx\n",
- uMsg, wParam, lParam);
- return DefWindowProc32A (hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-
-
-void
-TREEVIEW_Register (void)
-{
- WNDCLASS32A wndClass;
-
- TRACE (treeview,"\n");
-
- if (GlobalFindAtom32A (WC_TREEVIEW32A)) return;
-
- ZeroMemory (&wndClass, sizeof(WNDCLASS32A));
- wndClass.style = CS_GLOBALCLASS | CS_DBLCLKS;
- wndClass.lpfnWndProc = (WNDPROC32)TREEVIEW_WindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(TREEVIEW_INFO *);
- wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A);
- wndClass.hbrBackground = 0;
- wndClass.lpszClassName = WC_TREEVIEW32A;
-
- RegisterClass32A (&wndClass);
-}
-
diff --git a/controls/updown.c b/controls/updown.c
deleted file mode 100644
index e93b5ef..0000000
--- a/controls/updown.c
+++ /dev/null
@@ -1,849 +0,0 @@
-/*
- * Updown control
- *
- * Copyright 1997 Dimitrie O. Paun
- *
- * TODO:
- * - subclass the buddy window (in UPDOWN_SetBuddy) to process the
- * arrow keys
- * - I am not sure about the default values for the Min, Max, Pos
- * (in the UPDOWN_INFO the fields: MinVal, MaxVal, CurVal)
- * - I think I do not handle correctly the WS_BORDER style.
- * (Should be fixed. <ekohl@abo.rhein-zeitung.de>)
- *
- * Testing:
- * Not much. The following have not been tested at all:
- * - horizontal arrows
- * - listbox as buddy window
- * - acceleration
- * - base 16
- * - UDS_ALIGNLEFT, ~UDS_WRAP
- * - integers with thousand separators.
- * Even though the above list seems rather large, the control seems to
- * behave very well so I am confident it does work in most (all) of the
- * untested cases.
- * Problems:
- * I do not like the arrows yet, I'll work more on them later on.
- */
-
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include "windows.h"
-#include "winnls.h"
-#include "sysmetrics.h"
-#include "updown.h"
-#include "graphics.h"
-#include "heap.h"
-#include "win.h"
-#include "debug.h"
-
-/* Control configuration constants */
-
-#define INITIAL_DELAY 500 /* initial timer until auto-increment kicks in */
-#define REPEAT_DELAY 50 /* delay between auto-increments */
-
-#define DEFAULT_WIDTH 14 /* default width of the ctrl */
-#define DEFAULT_XSEP 0 /* default separation between buddy and crtl */
-#define DEFAULT_ADDTOP 0 /* amount to extend above the buddy window */
-#define DEFAULT_ADDBOT 0 /* amount to extend below the buddy window */
-
-
-/* Work constants */
-
-#define FLAG_INCR 0x01
-#define FLAG_DECR 0x02
-#define FLAG_MOUSEIN 0x04
-#define FLAG_CLICKED (FLAG_INCR | FLAG_DECR)
-
-#define TIMERID1 1
-#define TIMERID2 2
-
-static int accelIndex = -1;
-
-#define UNKNOWN_PARAM(msg, wParam, lParam) WARN(updown, \
- "UpDown Ctrl: Unknown parameter(s) for message " #msg \
- "(%04x): wp=%04x lp=%08lx\n", msg, wParam, lParam);
-
-#define UPDOWN_GetInfoPtr(wndPtr) ((UPDOWN_INFO *)wndPtr->wExtra[0])
-
-
-/***********************************************************************
- * UPDOWN_InBounds
- * Tests if a given value 'val' is between the Min&Max limits
- */
-static BOOL32 UPDOWN_InBounds(WND *wndPtr, int val)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
-
- if(infoPtr->MaxVal > infoPtr->MinVal)
- return (infoPtr->MinVal <= val) && (val <= infoPtr->MaxVal);
- else
- return (infoPtr->MaxVal <= val) && (val <= infoPtr->MinVal);
-}
-
-/***********************************************************************
- * UPDOWN_OffsetVal
- * Tests if we can change the current value by delta. If so, it changes
- * it and returns TRUE. Else, it leaves it unchanged and returns FALSE.
- */
-static BOOL32 UPDOWN_OffsetVal(WND *wndPtr, int delta)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
-
- /* check if we can do the modification first */
- if(!UPDOWN_InBounds(wndPtr, infoPtr->CurVal+delta)){
- if(wndPtr->dwStyle & UDS_WRAP)
- delta += (delta < 0 ? -1 : 1) *
- (infoPtr->MaxVal < infoPtr->MinVal ? -1 : 1) *
- (infoPtr->MinVal - infoPtr->MaxVal) +
- (delta < 0 ? 1 : -1);
- else
- return FALSE;
- }
-
- infoPtr->CurVal += delta;
- return TRUE;
-}
-
-/***********************************************************************
- * UPDOWN_GetArrowRect
- * wndPtr - pointer to the up-down wnd
- * rect - will hold the rectangle
- * incr - TRUE get the "increment" rect (up or right)
- * FALSE get the "decrement" rect (down or left)
- *
- */
-static void UPDOWN_GetArrowRect(WND *wndPtr, RECT32 *rect, BOOL32 incr)
-{
- int len; /* will hold the width or height */
-
- GetClientRect32(wndPtr->hwndSelf, rect);
-
- if (wndPtr->dwStyle & UDS_HORZ) {
- len = rect->right - rect->left; /* compute the width */
- if (incr)
- rect->left = len/2+1;
- else
- rect->right = len/2;
- }
- else {
- len = rect->bottom - rect->top; /* compute the height */
- if (incr)
- rect->bottom = len/2;
- else
- rect->top = len/2+1;
- }
-}
-
-/***********************************************************************
- * UPDOWN_GetArrowFromPoint
- * Returns the rectagle (for the up or down arrow) that contains pt.
- * If it returns the up rect, it returns TRUE.
- * If it returns the down rect, it returns FALSE.
- */
-static int UPDOWN_GetArrowFromPoint(WND *wndPtr, RECT32 *rect, POINT32 pt)
-{
- UPDOWN_GetArrowRect(wndPtr, rect, TRUE);
- if(PtInRect32(rect, pt))
- return TRUE;
-
- UPDOWN_GetArrowRect(wndPtr, rect, FALSE);
- return FALSE;
-}
-
-
-/***********************************************************************
- * UPDOWN_GetThousandSep
- * Returns the thousand sep. If an error occurs, it returns ','.
- */
-static char UPDOWN_GetThousandSep()
-{
- char sep[2];
-
- if(GetLocaleInfo32A(LOCALE_USER_DEFAULT, LOCALE_STHOUSAND,
- sep, sizeof(sep)) != 1)
- return ',';
-
- return sep[0];
-}
-
-/***********************************************************************
- * UPDOWN_GetBuddyInt
- * Tries to read the pos from the buddy window and if it succeeds,
- * it stores it in the control's CurVal
- * returns:
- * TRUE - if it read the integer from the buddy successfully
- * FALSE - if an error occured
- */
-static BOOL32 UPDOWN_GetBuddyInt(WND *wndPtr)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
- char txt[20], sep, *src, *dst;
- int newVal;
-
- if (!IsWindow32(infoPtr->Buddy))
- return FALSE;
-
- /*if the buddy is a list window, we must set curr index */
- if(WIDGETS_IsControl32(WIN_FindWndPtr(infoPtr->Buddy), BIC32_LISTBOX)){
- newVal = SendMessage32A(infoPtr->Buddy, LB_GETCARETINDEX32, 0, 0);
- if(newVal < 0)
- return FALSE;
- }
- else{
- /* we have a regular window, so will get the text */
- if (!GetWindowText32A(infoPtr->Buddy, txt, sizeof(txt)))
- return FALSE;
-
- sep = UPDOWN_GetThousandSep();
-
- /* now get rid of the separators */
- for(src = dst = txt; *src; src++)
- if(*src != sep)
- *dst++ = *src;
- *dst = 0;
-
- /* try to convert the number and validate it */
- newVal = strtol(txt, &src, infoPtr->Base);
- if(*src || !UPDOWN_InBounds(wndPtr, newVal))
- return FALSE;
-
- TRACE(updown, "new value(%d) read from buddy (old=%d)\n",
- newVal, infoPtr->CurVal);
- }
-
- infoPtr->CurVal = newVal;
- return TRUE;
-}
-
-
-/***********************************************************************
- * UPDOWN_SetBuddyInt
- * Tries to set the pos to the buddy window based on current pos
- * returns:
- * TRUE - if it set the caption of the buddy successfully
- * FALSE - if an error occured
- */
-static BOOL32 UPDOWN_SetBuddyInt(WND *wndPtr)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
- char txt1[20], sep;
- int len;
-
- if (!IsWindow32(infoPtr->Buddy))
- return FALSE;
-
- TRACE(updown, "set new value(%d) to buddy.\n",
- infoPtr->CurVal);
-
- /*if the buddy is a list window, we must set curr index */
- if(WIDGETS_IsControl32(WIN_FindWndPtr(infoPtr->Buddy), BIC32_LISTBOX)){
- SendMessage32A(infoPtr->Buddy, LB_SETCURSEL32, infoPtr->CurVal, 0);
- }
- else{ /* Regular window, so set caption to the number */
- len = sprintf(txt1, (infoPtr->Base==16) ? "%X" : "%d", infoPtr->CurVal);
-
- sep = UPDOWN_GetThousandSep();
-
- if (!(wndPtr->dwStyle & UDS_NOTHOUSANDS)) {
- char txt2[20], *src = txt1, *dst = txt2;
- if(len%3 > 0){
- strncpy(dst, src, len%3);
- dst += len%3;
- src += len%3;
- }
- for(len=0; *src; len++,src++){
- if(len%3==0)
- *dst++ = sep;
- *dst++ = *src++;
- }
- *dst = 0; /* null terminate it */
- strcpy(txt1, txt2); /* move it to the proper place */
- }
- SetWindowText32A(infoPtr->Buddy, txt1);
- }
-
- return TRUE;
-}
-
-/***********************************************************************
- * UPDOWN_Draw [Internal]
- *
- * Draw the arrows. The background need not be erased.
- */
-static void UPDOWN_Draw (WND *wndPtr, HDC32 hdc)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
- BOOL32 prssed;
- RECT32 rect;
-
- /* Draw the incr button */
- UPDOWN_GetArrowRect(wndPtr, &rect, TRUE);
- prssed = (infoPtr->Flags & FLAG_INCR) && (infoPtr->Flags & FLAG_MOUSEIN);
- DrawFrameControl32(hdc, &rect, DFC_SCROLL,
- (wndPtr->dwStyle & UDS_HORZ ? DFCS_SCROLLLEFT : DFCS_SCROLLUP) |
- (prssed ? DFCS_PUSHED : 0) |
- (wndPtr->dwStyle&WS_DISABLED ? DFCS_INACTIVE : 0) );
-
- /* Draw the space between the buttons */
- rect.top = rect.bottom; rect.bottom++;
- DrawEdge32(hdc, &rect, 0, BF_MIDDLE);
-
- /* Draw the decr button */
- UPDOWN_GetArrowRect(wndPtr, &rect, FALSE);
- prssed = (infoPtr->Flags & FLAG_DECR) && (infoPtr->Flags & FLAG_MOUSEIN);
- DrawFrameControl32(hdc, &rect, DFC_SCROLL,
- (wndPtr->dwStyle & UDS_HORZ ? DFCS_SCROLLRIGHT : DFCS_SCROLLDOWN) |
- (prssed ? DFCS_PUSHED : 0) |
- (wndPtr->dwStyle&WS_DISABLED ? DFCS_INACTIVE : 0) );
-}
-
-/***********************************************************************
- * UPDOWN_Refresh [Internal]
- *
- * Synchronous drawing (must NOT be used in WM_PAINT).
- * Calls UPDOWN_Draw.
- */
-static void UPDOWN_Refresh (WND *wndPtr)
-{
- HDC32 hdc;
-
- hdc = GetDC32 (wndPtr->hwndSelf);
- UPDOWN_Draw (wndPtr, hdc);
- ReleaseDC32 (wndPtr->hwndSelf, hdc);
-}
-
-
-/***********************************************************************
- * UPDOWN_Paint [Internal]
- *
- * Asynchronous drawing (must ONLY be used in WM_PAINT).
- * Calls UPDOWN_Draw.
- */
-static void UPDOWN_Paint (WND *wndPtr)
-{
- PAINTSTRUCT32 ps;
- HDC32 hdc;
-
- hdc = BeginPaint32 (wndPtr->hwndSelf, &ps);
- UPDOWN_Draw (wndPtr, hdc);
- EndPaint32 (wndPtr->hwndSelf, &ps);
-}
-
-/***********************************************************************
- * UPDOWN_SetBuddy
- * Tests if 'hwndBud' is a valid window handle. If not, returns FALSE.
- * Else, sets it as a new Buddy.
- * Then, it should subclass the buddy
- * If window has the UDS_ARROWKEYS, it subcalsses the buddy window to
- * process the UP/DOWN arrow keys.
- * If window has the UDS_ALIGNLEFT or UDS_ALIGNRIGHT style
- * the size/pos of the buddy and the control are adjusted accordingly.
- */
-static BOOL32 UPDOWN_SetBuddy(WND *wndPtr, HWND32 hwndBud)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
- RECT32 budRect; /* new coord for the buddy */
- int x; /* new x position and width for the up-down */
-
- /* Is is a valid bud? */
- if(!IsWindow32(hwndBud))
- return FALSE;
-
- if(wndPtr->dwStyle & UDS_ARROWKEYS){
- FIXME(updown, "we need to subclass the buddy to process the arrow keys.\n");
- }
-
- /* do we need to do any adjustments? */
- if(!(wndPtr->dwStyle & (UDS_ALIGNLEFT | UDS_ALIGNRIGHT)))
- return TRUE;
-
- /* Get the rect of the buddy relative to its parent */
- GetWindowRect32(infoPtr->Buddy, &budRect);
- MapWindowPoints32(HWND_DESKTOP, GetParent32(infoPtr->Buddy),
- (POINT32 *)(&budRect.left), 2);
-
- /* now do the positioning */
- if(wndPtr->dwStyle & UDS_ALIGNRIGHT){
- budRect.right -= DEFAULT_WIDTH+DEFAULT_XSEP;
- x = budRect.right+DEFAULT_XSEP;
- }
- else{ /* UDS_ALIGNLEFT */
- x = budRect.left;
- budRect.left += DEFAULT_WIDTH+DEFAULT_XSEP;
- }
-
- /* first adjust the buddy to accomodate the up/down */
- SetWindowPos32(infoPtr->Buddy, 0, budRect.left, budRect.top,
- budRect.right - budRect.left, budRect.bottom - budRect.top,
- SWP_NOACTIVATE|SWP_NOZORDER);
-
- /* now position the up/down */
- /* Since the UDS_ALIGN* flags were used, */
- /* we will pick the position and size of the window. */
-
- SetWindowPos32(wndPtr->hwndSelf,0,x,budRect.top-DEFAULT_ADDTOP,DEFAULT_WIDTH,
- (budRect.bottom-budRect.top)+DEFAULT_ADDTOP+DEFAULT_ADDBOT,
- SWP_NOACTIVATE|SWP_NOZORDER);
-
- return TRUE;
-}
-
-/***********************************************************************
- * UPDOWN_DoAction
- *
- * This function increments/decrements the CurVal by the
- * 'delta' amount according to the 'incr' flag
- * It notifies the parent as required.
- * It handles wraping and non-wraping correctly.
- * It is assumed that delta>0
- */
-static void UPDOWN_DoAction(WND *wndPtr, int delta, BOOL32 incr)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
- int old_val = infoPtr->CurVal;
- NM_UPDOWN ni;
-
- TRACE(updown, "%s by %d\n", incr ? "inc" : "dec", delta);
-
- /* check if we can do the modification first */
- delta *= (incr ? 1 : -1) * (infoPtr->MaxVal < infoPtr->MinVal ? -1 : 1);
- if(!UPDOWN_OffsetVal(wndPtr, delta))
- return;
-
- /* so, if we can do the change, recompute delta and restore old value */
- delta = infoPtr->CurVal - old_val;
- infoPtr->CurVal = old_val;
-
- /* We must notify parent now to obtain permission */
- ni.iPos = infoPtr->CurVal;
- ni.iDelta = delta;
- ni.hdr.hwndFrom = wndPtr->hwndSelf;
- ni.hdr.idFrom = wndPtr->wIDmenu;
- ni.hdr.code = UDN_DELTAPOS;
- if(SendMessage32A(wndPtr->parent->hwndSelf,
- WM_NOTIFY, wndPtr->wIDmenu, (LPARAM)&ni))
- return; /* we are not allowed to change */
-
- /* Now adjust value with (maybe new) delta */
- if(!UPDOWN_OffsetVal(wndPtr, ni.iDelta))
- return;
-
- /* Now take care about our buddy */
- if(!IsWindow32(infoPtr->Buddy))
- return; /* Nothing else to do */
-
-
- if(wndPtr->dwStyle & UDS_SETBUDDYINT)
- UPDOWN_SetBuddyInt(wndPtr);
-
- /* Also, notify it */
- /* FIXME: do we need to send the notification only if
- we do not have the UDS_SETBUDDYINT style set? */
-
- SendMessage32A(GetParent32 (wndPtr->hwndSelf),
- wndPtr->dwStyle & UDS_HORZ ? WM_HSCROLL : WM_VSCROLL,
- MAKELONG(incr ? SB_LINEUP : SB_LINEDOWN, infoPtr->CurVal),
- wndPtr->hwndSelf);
-}
-
-/***********************************************************************
- * UPDOWN_IsEnabled
- *
- * Returns TRUE if it is enabled as well as its buddy (if any)
- * FALSE otherwise
- */
-static BOOL32 UPDOWN_IsEnabled(WND *wndPtr)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
-
- if(wndPtr->dwStyle & WS_DISABLED)
- return FALSE;
- return IsWindowEnabled32(infoPtr->Buddy);
-}
-
-/***********************************************************************
- * UPDOWN_CancelMode
- *
- * Deletes any timers, releases the mouse and does redraw if necessary.
- * If the control is not in "capture" mode, it does nothing.
- * If the control was not in cancel mode, it returns FALSE.
- * If the control was in cancel mode, it returns TRUE.
- */
-static BOOL32 UPDOWN_CancelMode(WND *wndPtr)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
-
- /* if not in 'capture' mode, do nothing */
- if(!(infoPtr->Flags & FLAG_CLICKED))
- return FALSE;
-
- KillTimer32(wndPtr->hwndSelf, TIMERID1); /* kill all possible timers */
- KillTimer32(wndPtr->hwndSelf, TIMERID2);
-
- if(GetCapture32() == wndPtr->hwndSelf) /* let the mouse go */
- ReleaseCapture(); /* if we still have it */
-
- infoPtr->Flags = 0; /* get rid of any flags */
- UPDOWN_Refresh (wndPtr); /* redraw the control just in case */
-
- return TRUE;
-}
-
-/***********************************************************************
- * UPDOWN_HandleMouseEvent
- *
- * Handle a mouse event for the updown.
- * 'pt' is the location of the mouse event in client or
- * windows coordinates.
- */
-static void UPDOWN_HandleMouseEvent(WND *wndPtr, UINT32 msg, POINT32 pt)
-{
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
- RECT32 rect;
- int temp;
-
- switch(msg)
- {
- case WM_LBUTTONDOWN: /* Initialise mouse tracking */
- /* If we are already in the 'clicked' mode, then nothing to do */
- if(infoPtr->Flags & FLAG_CLICKED)
- return;
-
- /* If the buddy is an edit, will set focus to it */
- if(WIDGETS_IsControl32(WIN_FindWndPtr(infoPtr->Buddy), BIC32_EDIT))
- SetFocus32(infoPtr->Buddy);
-
- /* Now see which one is the 'active' arrow */
- temp = UPDOWN_GetArrowFromPoint(wndPtr, &rect, pt);
-
- /* Update the CurVal if necessary */
- if(wndPtr->dwStyle & UDS_SETBUDDYINT)
- UPDOWN_GetBuddyInt(wndPtr);
-
- /* Before we proceed, see if we can spin... */
- if(!(wndPtr->dwStyle & UDS_WRAP))
- if(( temp && infoPtr->CurVal==infoPtr->MaxVal) ||
- (!temp && infoPtr->CurVal==infoPtr->MinVal))
- return;
-
- /* Set up the correct flags */
- infoPtr->Flags = 0;
- infoPtr->Flags |= temp ? FLAG_INCR : FLAG_DECR;
- infoPtr->Flags |= FLAG_MOUSEIN;
-
- /* repaint the control */
- UPDOWN_Refresh (wndPtr);
-
- /* process the click */
- UPDOWN_DoAction(wndPtr, 1, infoPtr->Flags & FLAG_INCR);
-
- /* now capture all mouse messages */
- SetCapture32(wndPtr->hwndSelf);
-
- /* and startup the first timer */
- SetTimer32(wndPtr->hwndSelf, TIMERID1, INITIAL_DELAY, 0);
- break;
-
- case WM_MOUSEMOVE:
- /* If we are not in the 'clicked' mode, then nothing to do */
- if(!(infoPtr->Flags & FLAG_CLICKED))
- return;
-
- /* save the flags to see if any got modified */
- temp = infoPtr->Flags;
-
- /* Now get the 'active' arrow rectangle */
- if (infoPtr->Flags & FLAG_INCR)
- UPDOWN_GetArrowRect(wndPtr, &rect, TRUE);
- else
- UPDOWN_GetArrowRect(wndPtr, &rect, FALSE);
-
- /* Update the flags if we are in/out */
- if(PtInRect32(&rect, pt))
- infoPtr->Flags |= FLAG_MOUSEIN;
- else{
- infoPtr->Flags &= ~FLAG_MOUSEIN;
- if(accelIndex != -1) /* if we have accel info */
- accelIndex = 0; /* reset it */
- }
- /* If state changed, redraw the control */
- if(temp != infoPtr->Flags)
- UPDOWN_Refresh (wndPtr);
- break;
-
- default:
- ERR(updown, "Impossible case!\n");
- }
-
-}
-
-/***********************************************************************
- * UpDownWndProc
- */
-LRESULT WINAPI UpDownWindowProc(HWND32 hwnd, UINT32 message, WPARAM32 wParam,
- LPARAM lParam)
-{
- WND *wndPtr = WIN_FindWndPtr(hwnd);
- UPDOWN_INFO *infoPtr = UPDOWN_GetInfoPtr(wndPtr);
- int temp;
-
- switch(message)
- {
- case WM_NCCREATE:
- /* get rid of border, if any */
- wndPtr->dwStyle &= ~WS_BORDER;
- return TRUE;
-
- case WM_CREATE:
- infoPtr =
- (UPDOWN_INFO*)HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
- sizeof(UPDOWN_INFO));
- wndPtr->wExtra[0] = (DWORD)infoPtr;
-
- /* initialize the info struct */
- infoPtr->AccelCount=0; infoPtr->AccelVect=0;
- infoPtr->CurVal=0; infoPtr->MinVal=0; infoPtr->MaxVal=100; /*FIXME*/
- infoPtr->Base = 10; /* Default to base 10 */
- infoPtr->Buddy = 0; /* No buddy window yet */
- infoPtr->Flags = 0; /* And no flags */
-
- /* Do we pick the buddy win ourselves? */
- if(wndPtr->dwStyle & UDS_AUTOBUDDY)
- UPDOWN_SetBuddy(wndPtr, GetWindow32(wndPtr->hwndSelf, GW_HWNDPREV));
-
- TRACE(updown, "UpDown Ctrl creation, hwnd=%04x\n", hwnd);
- break;
-
- case WM_DESTROY:
- if(infoPtr->AccelVect)
- free(infoPtr->AccelVect);
-
- HeapFree (GetProcessHeap (), 0, infoPtr);
- wndPtr->wExtra[0] = 0;
-
- TRACE(updown, "UpDown Ctrl destruction, hwnd=%04x\n", hwnd);
- break;
-
- case WM_ENABLE:
- if(wndPtr->dwStyle & WS_DISABLED)
- UPDOWN_CancelMode(wndPtr);
- UPDOWN_Paint(wndPtr);
- break;
-
- case WM_TIMER:
- /* if initial timer, kill it and start the repeat timer */
- if(wParam == TIMERID1){
- KillTimer32(hwnd, TIMERID1);
- /* if no accel info given, used default timer */
- if(infoPtr->AccelCount==0 || infoPtr->AccelVect==0){
- accelIndex = -1;
- temp = REPEAT_DELAY;
- }
- else{
- accelIndex = 0; /* otherwise, use it */
- temp = infoPtr->AccelVect[accelIndex].nSec * 1000 + 1;
- }
- SetTimer32(hwnd, TIMERID2, temp, 0);
- }
-
- /* now, if the mouse is above us, do the thing...*/
- if(infoPtr->Flags & FLAG_MOUSEIN){
- temp = accelIndex==-1 ? 1 : infoPtr->AccelVect[accelIndex].nInc;
- UPDOWN_DoAction(wndPtr, temp, infoPtr->Flags & FLAG_INCR);
-
- if(accelIndex!=-1 && accelIndex < infoPtr->AccelCount-1){
- KillTimer32(hwnd, TIMERID2);
- accelIndex++; /* move to the next accel info */
- temp = infoPtr->AccelVect[accelIndex].nSec * 1000 + 1;
- /* make sure we have at least 1ms intervals */
- SetTimer32(hwnd, TIMERID2, temp, 0);
- }
- }
- break;
-
- case WM_CANCELMODE:
- UPDOWN_CancelMode(wndPtr);
- break;
-
- case WM_LBUTTONUP:
- if(!UPDOWN_CancelMode(wndPtr))
- break;
- /*If we released the mouse and our buddy is an edit */
- /* we must select all text in it. */
- if(WIDGETS_IsControl32(WIN_FindWndPtr(infoPtr->Buddy), BIC32_EDIT))
- SendMessage32A(infoPtr->Buddy, EM_SETSEL32, 0, MAKELONG(0, -1));
- break;
-
- case WM_LBUTTONDOWN:
- case WM_MOUSEMOVE:
- if(UPDOWN_IsEnabled(wndPtr)){
- POINT32 pt;
- CONV_POINT16TO32( (POINT16 *)&lParam, &pt );
- UPDOWN_HandleMouseEvent( wndPtr, message, pt );
- }
- break;
-
- case WM_KEYDOWN:
- if((wndPtr->dwStyle & UDS_ARROWKEYS) && UPDOWN_IsEnabled(wndPtr)){
- switch(wParam){
- case VK_UP:
- case VK_DOWN:
- UPDOWN_GetBuddyInt(wndPtr);
- UPDOWN_DoAction(wndPtr, 1, wParam==VK_UP);
- break;
- }
- }
- break;
-
- case WM_PAINT:
- UPDOWN_Paint(wndPtr);
- break;
-
- case UDM_GETACCEL:
- if (wParam==0 && lParam==0) /*if both zero, */
- return infoPtr->AccelCount; /*just return the accel count*/
- if (wParam || lParam){
- UNKNOWN_PARAM(UDM_GETACCEL, wParam, lParam);
- return 0;
- }
- temp = MIN(infoPtr->AccelCount, wParam);
- memcpy((void *)lParam, infoPtr->AccelVect, temp*sizeof(UDACCEL));
- return temp;
-
- case UDM_SETACCEL:
- TRACE(updown, "UpDown Ctrl new accel info, hwnd=%04x\n", hwnd);
- if(infoPtr->AccelVect){
- free(infoPtr->AccelVect);
- infoPtr->AccelCount = 0;
- infoPtr->AccelVect = 0;
- }
- if(wParam==0)
- return TRUE;
- infoPtr->AccelVect = malloc(wParam*sizeof(UDACCEL));
- if(infoPtr->AccelVect==0)
- return FALSE;
- memcpy(infoPtr->AccelVect, (void*)lParam, wParam*sizeof(UDACCEL));
- return TRUE;
-
- case UDM_GETBASE:
- if (wParam || lParam)
- UNKNOWN_PARAM(UDM_GETBASE, wParam, lParam);
- return infoPtr->Base;
-
- case UDM_SETBASE:
- TRACE(updown, "UpDown Ctrl new base(%d), hwnd=%04x\n",
- wParam, hwnd);
- if ( !(wParam==10 || wParam==16) || lParam)
- UNKNOWN_PARAM(UDM_SETBASE, wParam, lParam);
- if (wParam==10 || wParam==16){
- temp = infoPtr->Base;
- infoPtr->Base = wParam;
- return temp; /* return the prev base */
- }
- break;
-
- case UDM_GETBUDDY:
- if (wParam || lParam)
- UNKNOWN_PARAM(UDM_GETBUDDY, wParam, lParam);
- return infoPtr->Buddy;
-
- case UDM_SETBUDDY:
- if (lParam)
- UNKNOWN_PARAM(UDM_SETBUDDY, wParam, lParam);
- temp = infoPtr->Buddy;
- infoPtr->Buddy = wParam;
- UPDOWN_SetBuddy(wndPtr, wParam);
- TRACE(updown, "UpDown Ctrl new buddy(%04x), hwnd=%04x\n",
- infoPtr->Buddy, hwnd);
- return temp;
-
- case UDM_GETPOS:
- if (wParam || lParam)
- UNKNOWN_PARAM(UDM_GETPOS, wParam, lParam);
- temp = UPDOWN_GetBuddyInt(wndPtr);
- return MAKELONG(infoPtr->CurVal, temp ? 0 : 1);
-
- case UDM_SETPOS:
- if (wParam || HIWORD(lParam))
- UNKNOWN_PARAM(UDM_GETPOS, wParam, lParam);
- temp = SLOWORD(lParam);
- TRACE(updown, "UpDown Ctrl new value(%d), hwnd=%04x\n",
- temp, hwnd);
- if(!UPDOWN_InBounds(wndPtr, temp)){
- if(temp < infoPtr->MinVal)
- temp = infoPtr->MinVal;
- if(temp > infoPtr->MaxVal)
- temp = infoPtr->MaxVal;
- }
- wParam = infoPtr->CurVal; /* save prev value */
- infoPtr->CurVal = temp; /* set the new value */
- if(wndPtr->dwStyle & UDS_SETBUDDYINT)
- UPDOWN_SetBuddyInt(wndPtr);
- return wParam; /* return prev value */
-
- case UDM_GETRANGE:
- if (wParam || lParam)
- UNKNOWN_PARAM(UDM_GETRANGE, wParam, lParam);
- return MAKELONG(infoPtr->MaxVal, infoPtr->MinVal);
-
- case UDM_SETRANGE:
- if (wParam)
- UNKNOWN_PARAM(UDM_SETRANGE, wParam, lParam); /* we must have: */
- infoPtr->MaxVal = SLOWORD(lParam); /* UD_MINVAL <= Max <= UD_MAXVAL */
- infoPtr->MinVal = SHIWORD(lParam); /* UD_MINVAL <= Min <= UD_MAXVAL */
- /* |Max-Min| <= UD_MAXVAL */
- TRACE(updown, "UpDown Ctrl new range(%d to %d), hwnd=%04x\n",
- infoPtr->MinVal, infoPtr->MaxVal, hwnd);
- break;
-
- case UDM_GETRANGE32:
- if (wParam)
- *(LPINT32)wParam = infoPtr->MinVal;
- if (lParam)
- *(LPINT32)lParam = infoPtr->MaxVal;
- break;
-
- case UDM_SETRANGE32:
- infoPtr->MinVal = (INT32)wParam;
- infoPtr->MaxVal = (INT32)lParam;
- if (infoPtr->MaxVal <= infoPtr->MinVal)
- infoPtr->MaxVal = infoPtr->MinVal + 1;
- TRACE(updown, "UpDown Ctrl new range(%d to %d), hwnd=%04x\n",
- infoPtr->MinVal, infoPtr->MaxVal, hwnd);
- break;
-
- default:
- if (message >= WM_USER)
- WARN(updown, "unknown msg %04x wp=%04x lp=%08lx\n",
- message, wParam, lParam );
- return DefWindowProc32A( hwnd, message, wParam, lParam );
- }
-
- return 0;
-}
-
-/***********************************************************************
- * UPDOWN_Register [Internal]
- *
- * Registers the updown window class.
- */
-void UPDOWN_Register(void)
-{
- WNDCLASS32A wndClass;
-
- if( GlobalFindAtom32A( UPDOWN_CLASS32A ) ) return;
-
- ZeroMemory( &wndClass, sizeof( WNDCLASS32A ) );
- wndClass.style = CS_GLOBALCLASS | CS_VREDRAW;
- wndClass.lpfnWndProc = (WNDPROC32)UpDownWindowProc;
- wndClass.cbClsExtra = 0;
- wndClass.cbWndExtra = sizeof(UPDOWN_INFO*);
- wndClass.hCursor = LoadCursor32A( 0, IDC_ARROW32A );
- wndClass.hbrBackground = (HBRUSH32)(COLOR_3DFACE + 1);
- wndClass.lpszClassName = UPDOWN_CLASS32A;
-
- RegisterClass32A( &wndClass );
-}
-
diff --git a/controls/widgets.c b/controls/widgets.c
index 20ca347..51fe1bc 100644
--- a/controls/widgets.c
+++ b/controls/widgets.c
@@ -7,7 +7,6 @@
#include <assert.h>
#include "win.h"
-#include "commctrl.h"
#include "button.h"
#include "static.h"
#include "scroll.h"