Rebar completeness audit.

This commit is contained in:
Robert Shearman 2004-10-19 22:59:14 +00:00 committed by Alexandre Julliard
parent 9ab8fc6fab
commit 5d0c01c4e0

View File

@ -1,3 +1,74 @@
/*
* Rebar control
*
* Copyright 1998, 1999 Eric Kohl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* This code was audited for completeness against the documented features
* of Comctl32.dll version 6.0 on Mar. 14, 2004, by Robert Shearman.
*
* Unless otherwise noted, we believe this code to be complete, as per
* the specification mentioned above.
* If you discover missing features or bugs please note them below.
*
* TODO
* Styles:
* - RBS_DBLCLKTOGGLE
* - RBS_FIXEDORDER
* - RBS_REGISTERDROP
* - RBS_TOOLTIPS
* - CCS_NORESIZE
* - CCS_NOMOVEX
* - CCS_NOMOVEY
* Messages:
* - RB_BEGINDRAG
* - RB_DRAGMOVE
* - RB_ENDDRAG
* - RB_GETBANDMARGINS
* - RB_GETCOLORSCHEME
* - RB_GETDROPTARGET
* - RB_GETPALETTE
* - RB_SETCOLORSCHEME
* - RB_SETPALETTE
* - RB_SETTOOLTIPS
* - WM_CHARTOITEM
* - WM_LBUTTONDBLCLK
* - WM_MEASUREITEM
* - WM_PALETTECHANGED
* - WM_PRINTCLIENT
* - WM_QUERYNEWPALETTE
* - WM_RBUTTONDOWN
* - WM_RBUTTONUP
* - WM_SYSCOLORCHANGE
* - WM_VKEYTOITEM
* - WM_WININICHANGE
* Notifications:
* - NM_HCHITTEST
* - NM_RELEASEDCAPTURE
* - RBN_AUTOBREAK
* - RBN_GETOBJECT
* - RBN_MINMAX
* Band styles:
* - RBBS_FIXEDBMP
* Native uses (on each draw!!) SM_CYBORDER (or SM_CXBORDER for CCS_VERT)
* to set the size of the separator width (the value SEP_WIDTH_SIZE
* in here). Should be fixed!!
*/
/*
* Testing: set to 1 to make background brush *always* green
*/
@ -18,127 +89,6 @@
* at least RB_INSERTBAND
*/
/*
* Rebar control rev 8e
*
* Copyright 1998, 1999 Eric Kohl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* NOTES
* An author is needed! Any volunteers?
* I will only improve this control once in a while.
* Eric <ekohl@abo.rhein-zeitung.de>
*
* TODO:
* - vertical placement
* - ComboBox and ComboBoxEx placement
* - center image
* - Layout code.
* - Display code.
* - Some messages.
* - All notifications.
* Changes Guy Albertelli <galberte@neo.lrun.com>
* rev 2,3,4
* - Implement initial version of row grouping, row separators,
* text and background colors. Support additional messages.
* Support RBBS_BREAK. Implement ERASEBKGND and improve painting.
* rev 5
* - implement support for dragging Gripper left or right in a row. Supports
* WM_LBUTTONDOWN, WM_LBUTTONUP, and WM_MOUSEMOVE. Also support
* RBS_BANDBORDERS.
* rev 6
* - Fix or implement notifications for RBN_HEIGHTCHANGE, RBN_CHILDSIZE.
* - Correct styles RBBS_NOGRIPPER, RBBS_GRIPPERALWAYS, and RBBS_FIXEDSIZE.
* - Fix algorithm for Layout and AdjustBand.
*
* rev 7
* - Fix algorithm for _Layout and _AdjustBand.
* - Fix or implement RBN_ENDDRAG, RB_MOVEBAND, WM_SETREDRAW,
* WM_STYLECHANGED, RB_MINIMIZEBAND, RBBS_VARIABLEHEIGHT, RBS_VARHEIGHT,
* RBBS_HIDDEN, WM_NOTIFYFORMAT, NM_NCHITTEST, WM_SETREDRAW, RBS_AUTOSIZE,
* WM_SETFONT, RBS_BORDERS
* - Create structures in WM_NCCREATE
* - Additional performance enhancements.
*
* rev 8
* 1. Create array of start and end band indexes by row and use.
* 2. Fix problem with REBAR_Layout Phase 2b to process only if only
* band in row.
* 3. Set the Caption Font (Regular) as default font for text.
* 4. Delete font handle on control distruction.
* 5. Add UpdateWindow call in _MoveChildWindows to match repainting done
* by native control
* 6. Improve some traces.
* 7. Invalidate window rectangles after SetBandInfo, InsertBand, ShowBand
* so that repainting is correct.
* 8. Implement RB_MAXIMIZEBAND for the "ideal=TRUE" case.
* 9. Implement item custom draw notifications partially. Only done for
* ITEMPREPAINT and ITEMPOSTPAINT. (Used by IE4 for "Favorites" frame
* to draw the word "Favorites").
* rev 8a
* 10. Handle CCS_NODIVIDER and fix WS_BORDER code.
* 11. Fix logic error in _AdjustBands where flag was set to valid band
* number (0) to indicate *no* band.
* 12. Fix CCS_VERT errors in _ForceResize, _NCCalcSize, and _NCPaint.
* 13. Support some special cases of CCS_TOP (and therefore CCS_LEFT),
* CCS_BOTTOM (and therefore CCS_RIGHT) and CCS_NOPARENTALIGN. Not
* at all sure whether this is all cases.
* 14. Handle returned value for the RBN_CHILDSIZE notify.
* 15. Implement RBBS_CHILDEDGE, and set each bands "offChild" at _Layout
* time.
* 16. Fix REBARSPACE. It should depend on CCS_NODIVIDER.
* rev 8b
* 17. Fix determination of whether Gripper is needed in _ValidateBand.
* 18. Fix _AdjustBand processing of RBBS_FIXEDSIZE.
* rev 8c
* 19. Fix problem in _Layout when all lengths are 0.
* 20. If CLR_NONE specified, we will use default BtnFace color when drawing.
* 21. Fix test in REBAR_Layout.
* rev 8d
* 22. Add support for WM_WINDOWPOSCHANGED to save new origin of window.
* 23. Correct RBN_CHILDSIZE rect value for CCS_VERT rebar.
* 24. Do UpdateWindow only if doing redraws.
* rev 8e
* 25. Adjust setting of offChild.cx based on RBBS_CHILDEDGE.
*
*
* Still to do:
* 2. Following still not handled: RBBS_FIXEDBMP,
* CCS_NORESIZE,
* CCS_NOMOVEX, CCS_NOMOVEY
* 3. Following are only partially handled:
* RBS_AUTOSIZE, RBBS_VARIABLEHEIGHT
* 5. Native uses (on each draw!!) SM_CYBORDER (or SM_CXBORDER for CCS_VERT)
* to set the size of the separator width (the value SEP_WIDTH_SIZE
* in here). Should be fixed!!
* 6. The following messages are not implemented:
* RB_BEGINDRAG, RB_DRAGMOVE, RB_ENDDRAG, RB_GETCOLORSCHEME,
* RB_GETDROPTARGET, RB_MAXIMIZEBAND,
* RB_SETCOLORSCHEME, RB_SETPALETTE, RB_SETTOOLTIPS
* WM_CHARTOITEM, WM_LBUTTONDBLCLK, WM_MEASUREITEM,
* WM_PALETTECHANGED, WM_PRINTCLIENT, WM_QUERYNEWPALETTE,
* WM_RBUTTONDOWN, WM_RBUTTONUP,
* WM_SYSCOLORCHANGE, WM_VKEYTOITEM, WM_WININICHANGE
* 7. The following notifications are not implemented:
* NM_CUSTOMDRAW, NM_RELEASEDCAPTURE
* RBN_MINMAX
*/
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>