// Revision Information for Status DLL
// Author: Melanie Ashburn Armstrong
				
						/***** 1993 *****/
6-24
	CHANGED ENTRY IN THE SHARING PRODUCT RESOURCES DATABASE
	THE NAME OF THE DLL HAS BEEN CHANGED
	Name - LTSSB03.DLL
	Version - 3.0.0.0
	(This version is identical to the 2.0.0.7 version except that the name
	and the version number info has changed.)

6-14
	PUT TO THE SHARING PRODUCT RESOURCES DATABASE
	Name - LTSSB02.DLL
	Version - 2.0.0.7
	Zipped Src Files - src6-14W

6-14
	I made an enhancement to the status bar clicking code.  If the
	user double clicks on a button that is clickable, but not double
	clickable the button will now get two StatusObjectClicked messages.
	The first click comes from the button up message and the second comes
	from the double click message. 

	This enhancement was requested by David Shrum in order to match
	AmiPro 3.0 functionality.
	
6-8
	I made a fix that had been in the dll for a long time, but was only
	noticed when using Japanese fonts.  Japanese fonts use the entire
	character cell and it seems that the fonts I have been using do not.
	Because of the way I had calculated the size of the status bar, I was
	overwriting part of the font cell area.  In order to fix the problem, 
	I changed the way I calculate the height of the status bar and the 
	hieght of a button.  
	So if you think that the status bar looks two pixels bigger, you are 
	correct.
	Thanks to Yoshiyuki Kitahara for reporting the problem.

6-7
	I added an enhancement at the request of Approach (Mike Machado).
	There is now a new object flag (OBJ_AUTOREPEAT) that specifies whether 
	a button is to AutoRepeat.  If a button is created with this flag, then
	holding down that button will cause multiple StatusObjectClicked() 
	messages to be sent to the host. 

	Name - LTSSB02.DLL
	Version - 2.0.0.7
	Zipped Src Files - Src6-7w.zip, All6-7.zip

4-13
	Made a change to StatusGetObjectText().  There is another bit in the
	returned flag.  The new bit is OBJ_USEDLLSTEXT.  If this bit (0x800) 
	is on and the tmpbuff passed back is an empty string, then we use
	the text that the dll already has stored for the button.
	This was requested by Bassam Awad.

5-7
	Karen
	Made changes to the OS/2 platform specific code.  I paint text on the
	buttons and do not clear the background everytime I paint now.  This 
	is obviously much more efficient and needed to get the container buttons
	working.  Added a few lines to clear the whole button of a container 
	button before all the child text is painted.  (I don't know why this
	is not a problem in the Windows version.)

4-9
	Made a release of the status bar dll to Bassam.  I called it 
	l1wsb02.dll.  

4-9
	Bug Fix:
	I was not always releasing capture on the mouse after a right click.
	I fixed this by making a change in the RBUTTONUP case statement in
	status.cpp.
	Thanks to Bassam for reporting this problem.

4-7
	Bug Fix:
	There was a problem with child buttons of a collapsible button.  Child 
	buttons would paint over top of the buttons to the right of the 
	collapsible if the collapsible buttons was not big enough to hold
	all of the text.

4-7
	Bug Fix:
	There was a little bugger in the right side of a collapsible button
	if the button text was longer than the size of the button.  This 
	problem was fixed by changing the size of the clip rectangle that
	was being painted.

4-2
	PUT VERSION OF STATUS BAR UP TO THE SHARING PRODUCT RESOURCES DATABASE.
	Name - LTSSB02.DLL
	Version - 2.0.0.4
	Zipped Src Files - Src4-2w.zip, All4-2.zip

4-1
	Bug Fix:
	I made another fix for the popup list boxes.  If a popup list box
	was up and and accelerator for a menu item was pressed (like CTRL-G)
	that brought up a dialog box, then the dialog box was loaded but
	the popup list box did not go down.  I added another field to
	CStatusArea called cPopupClicked and two methods WasPopupClicked()
	and SetPopupClicked().  (Other platforms may not need these.)
	This problem was reported by Bassam Awad.
	Version number incremented to 2.0.0.4

3-31
	Bug Fix:
	I made a fix for the popup list boxes.  If a popup was up and the
	user pressed ALT-TAB then the popup stayed up.  I fixed this by
	having the list box take itsself down when it received a WM_SYSCOMMAND.
	This problem was reported by Bassam Awad.
	Version number incremented to 1.0.0.3

3-31
	I changed the name back to ltssb01.dll. 

3-31
	THE STATUS BAR DLL NAME HAS BEEN CHANGED TO LTSSB02.DLL
	PUT VERSION OF STATUS BAR UP TO THE SHARING PRODUCT RESOURCES DATABASE.
	Name - LTSSB02.DLL
	Version - 2.0.0.0
	Zipped Src Files - Src3-31w.zip
	
3-29
	Bassam Awad reported a problem with the HitTest callback.  I fixed it.

3-26
	PUT VERSION OF STATUS BAR UP TO THE SHARING PRODUCT RESOURCES DATABASE.
	Name - LTSSB01.DLL
	Version - 1.0.0.2
	Zipped All Files - All3-26.zip
	Zipped Src Files - Src3-26W.zip

3-26
	Incorporated Kitahara-sans changes for Japanese into the code.  One
	change was made in the status.rc.  The STR_MINCHOU font name is now
	represented in octal codes, so that I can edit the file with vi. 
	A change was also made in status.c changing the default font height 
	for VGA in Japanese. 
	The status bar dll now works with Japanese and US version of Windows
	without recompiling!!!

3-10
	PUT VERSION OF STATUS BAR UP TO THE SHARING PRODUCT RESOURCES DATABASE.
	Name - LTSSB01.DLL. 
	Version - 1.0.0.1.

3-10
	I incorporated the changes for the Japanese version that were supplied
	by Yoshiyuki Kitahara.

2-26
	* API CHANGE!
	* This requires no changes from host applications.
	* Added OBJ_LEFTCLICK, OBJ_RIGHTCLICK, OBJ_DBLCLICK. It was previously
	* only OBJ_CLICKABLE.

	This allows the host to specify which buttons will respond to left, 
	right and double clicks.  Previously there was only one flag 
	(OBJ_CLICKABLE). So, if a button was clickable, and the host provided
	an ObjectRightClick() callback and a ObjectClick() callback, then each
	buttons painted down on a left or a right mouse click.  That was not
	desirable, because a host may want only some of the buttons to
	respond to a RightClick.

	( This change is more risky than any other changes that I have made 
	  recently.  If you have any problems with the clicking logic, let me 
	  know immediately! )

2-26 
	* API CHANGE!
	* This requires the host to send an extra parameter on the 
	* CreateStatusArea() call.

	I have added an extra parameter to the CreateStatusArea() routine.
	The function definition is now ...
		lulong CreateStatusArea(lulong parent, lushort CallBackSize, 
								LPSTATCALLBACK pCallBack)
	The second parameter CallBackSize is the new one.  The host should 
	send sizeof(STATCALLBACK) as that parameter.

	The purpose for this change is backward compatibility.  It will 
	allow newer version of the dll to respect older hosts.
	
2-23 
	BugFix:
	The problem was with the behavior of the popup list boxes.  When 
	a key is pressed while in a list box, the first item containing
	the character that was pressed should be selected.  This was not
	working, because I was returning 0 in the WM_CHAR case, if the
	character was not one that I cared about.  I now break from that 
	case so that the character falls through to get processed by the 
	default Windows list box code.

2-11
	BugFix:
	The problem occured when sending an AcitvateButton() message twice to
	the same button.  The popup was not being taken down (and things
	get flakey when that happens).  I fixed the problem by adding a
	routine called StatusIfPopupTakeDown() and calling the routine before
	doing anything else in ActivateButton() and ActivateButtonRight().

	This was all added in common code. So Karen, OS/2 gets this fix for free!

1-22
	* API CHANGE!
	* This requires no work of the host.

	Enhancment:
	The API change that I made on 1-13, ActivatePopup(), has been renamed to
	ActivateButton().  An ActivateRightButton() has also been added.  

	ActivateButton() simulates a left click on the button.  If it is a popup 
	button, the StatusPopupLoadData() call back will be sent to the host.  
	If it is a clickable button, the StatusObjectClicked() call back will be 
	sent to the host.

	ActivateButtonRight() simulates a right click on the button.  If the button
	is clickable, a StatusObjectRightClicke() callback is sent to the host.

1-22
	Enhancement:
	* API CHANGE!!!
	* Please see the update version of the API (status.sam).
	* In order to accomodate this change all host applications MUST add 
	* another entry into their callback structure.  If you do not want to 
	* support right mouse clicks, please to do not provide a call back routine 
	* (ie. set the value to NULL).  However, the host application must update 
	* the call back structure.

	I added another call back routine.  The new call back is 
	StatusObjectRightClicked().  It is the same as StatusObjectClicked(), 
	except that it happens when the user uses the right mouse button
	to click on a button.

	This enhancement was requested by Mike Reposa.
	Mike wanted some of his buttons to popup a list of items if the user
	left clicked, but put up a dialog box if the user right clicked.
	
1-18 KPE
	Re-coded much of the OS/2 platform dependent code for painting
	buttons, text and graphics.
	
1-14
	Bug Fix:
	The problem was as follows:  The status bar was being clipped by
	a dialog box.  While in the dialog box we were changing a value 
	that we show on the status bar.  When the dialog box went away, the
	status bar received a WM_PAINT message.  During a WM_PAINT message
	the status bar asks the host for the button's text.  The host gave the
	status bar the new text, but since only half of the button had been
	covered by the dialog box, only half of the button got updated with	
	the new text.  Then when the host then sent SetObjectText() with the 
	new text for the button, the status bar compared the new text with the 
	text it already had and determined 'incorrectly' that the button was 
	up to date.
	The solution was to change the PaintComponentContents() routine.  First
	I added a parameter to the routine.  The new parameter specifies whether
	the entire button is in the paint region.  Second I check to see if
	the button's text changed.  If the button text changed and the paint
	region does not include the entire button, then we call a version
	PaintComponentText() that gets its own DC and paints the entire button.

1-13
	* API CHANGED!!! -- 
	* This does not require any work on host applications that do not want to
	* use this new functionally.
	
	I added a status bar interface routine called ActivatePopup().  This
	status bar routine may be called by the host to simulate a click on 
	a popup button.  The purpose of this routine is to allow outsiders 
	(like macros) to popup lists on the status bar.
	This enhancment was requested by Mike Croom.

						/***** 1992 *****/
11-30
	Bug Fix:
	There was another popup button bug similar to the one that I fixed on
	11-18.  If you clicked down on a popup button that already had the popup 
	list up and then moved your mouse over top of another button before letting
	the mouse up then the popup lost the focus, but was still up.  This causes
	problems.  This problem was solved by checking to see if any popups are
	up on any LButtonUp message and if so, take it down.
	Reported by Mike Reposa
11-30
	Bug Fix:
	There was a paint problem with container buttons.  The children in a 
	container button were not being clipped to the parent button and were
	therefore painting into other buttons.  This was fixed in paint.cpp
	by checking to see if the childs offset exceeded the parents offset
	and if so altering the cliping region.
	Reported by Mike Reposa
11-19
	PUT VERSION OF STATUS BAR UP TO THE SHARING PRODUCT RESOURCES DATABASE.
11-18
	Bug Fix:
	I fixed a problem with the popup list boxes.  If a popup list box was up
	and the button associated with the popup was clicked on with the right
	mouse button, problems began to occur.  For example, it was then possible
	to click on another popup button and have two popups up at the same time.
	This was caused because of the tricks I do with Kill Focus.  The fix was
	in platform dependent file status.cpp.
11-10
	Bug Fix:
	The status bar dll was leaving a font around after it was unloaded.  This 
	problem was fixed by adding a WEP and a DeleteObject().
11-10
	API CHANGE!!!
	I made a change to the API at the request of Kevin Becker.  The change
	is a minor one.  I added another parameter to the StatusInvalidateObject()
	call.  The second parameter is now a boolean which specifies if the 
	object should be update now.  If the parameter is false then we invalidate
	the object and the paint comes through as usual.  If the parameter is true
	then after invalidating the object we do an UpdateWindow() which cause
	the paint to happen immediately.
10-29
	Bug Fix:
	When setting a graphic button to a null graphic, the graphic was not getting
	blanked out.  I fixed this by checking to see if the handle to the graphic
	was null and if so painting the button manually.
10-29
	Bug Fix:
	When painting right aligned or centered popup list boxes the text in the
	list box was being painted to far to the right.  When right aligned part
	of the string was being cut off.  I changed the paint rect to take two
	pixels of of the right side.
	Thanks to Mike Reposa for reporting this one.
10-29
	Bug Fix:
	Child buttons were not painting down when the parent button was clicked on.
	I changed every place that set cDown or cDownFlag to call methods SetDown()
	and SetDownFlag().  Those methods check to see if the button is a parent
	and if it is a parent, the children of the button are set to match the 
	state of the parent.
	Thanks to Mike Reposa for finding this one.
10-01
	Status bar put on the Sharing Product Resources Database.
10-01 
	Bug Fix: Disabled popup buttons were responding to clicks.  
	The fix was to check to see if the popup was clickable and if not return.
	(fix in status.cpp)
	Thanks to Bassam Awad for reporting this problem.
9-08 
	I changed the painting code a little bit.  I optimized painting of the
	buttons so that they do not appear to flash.
9-08 
	I fixed a problem that was causing a fault when running the Debug Version
	of windows.  The problem happened when trying to destroy the windows 
	of a popup list box.  It is tricky to destroy yourself.  So, in order to 
	solve the problem I now post a message to the status bar to take the 
	popup down.
8-25 
	When resizing the status bar to be too small to hold the collapsible
	button, the button to the left of the collapsible was being chopped off.
	The status bar should chop things off from right to left.
	The problem that was introduced when I changed from ints to luints.
	I inadvertantly changed the width in CalculateCollapsibleSize() in 
	statusc.cpp to an luint.  It should be an lsint, because I compare it
	to zero.
8-25 
	I fixed a minor problem with popup list boxes that had scroll bars.
	They were not being make wide enough.
	(paint.cpp - StatusPaintPopup - added the following line
		MaxWidth = MaxWidth + border + ScrollWidth;)
8-25 
	The items in a popup list box will now be justified the same way
	as the popup button that they popup from.  For example if your
	point size button has centered text, then the items in your popup list
	will be centered also.
	Thanks to Mike Reposa for reporting this problem.
	(Changed StatusPopupDrawListBox in paint.cpp to take an alignment param.)
8-25
	The status bar will now return fill in the string parameter for the
	StatusPopupItemSelected() call back routine.  The dll now matches
	the API. 
	Thanks to Mike Reposa for reporting this problem.
	(Changed StatusPopupTakeDown in paint.cpp to take a string parameter.)
8-20
	The status bar will now remember the text that it is given from 
	SetObjectText in SetObjectText or GetObjectText.  

		When the status bar recieves a SetObjectText instruction from the host, 
		the status bar first checks to see if the text matches the text he 
		is currently showing.  If it does, he does not repaint.  If it does 
		not, he stores the new text and repaints.

		When the status bar sends a GetObjectText to the host the status
		bar stores the text return by the host.

	This reduces the flashing of the status bar in AmiPro.

	All this was done in common code.  I also added a file called strings.cpp
	that will need to be added to any platforms make file.  Strings.cpp 
	contains code for string functions.  This was necessary since I am
	now calling them in common code.
8-20
	Fixes for OS/2: Updated code to support notification.  Fixed the position
	of the listbox (wasn't exactly above the button).  Fixed a font size 
	display problem when displaying text on the status bar.  
8-13
	Bug Fix:  The bug occured if you had multiple container object on
	your status bar. If you had a collapsible container object on the status 
	bar and then had another container object after that one on the status 
	bar, the the collapsible container object would not paint properly.

	The problem was that UpdateComponentOffsets() always assumes that the object
	given to it is correct.  When we passed the collapsible object as the
	head it did not bother to update its childern.  I added code to do that.

	Thanx to Mike Reposa for reporting this one.
7-28
	Changed GetStatusStringWidth to pass the id down to GetStringWidth.
	GetStringWidth was moved into CStatWin.
7-22
	I put the new status bar dll, and all supporting stuff up the the
	Sharing Product Resources Database.
7-22
	API changes:
		I changed CreateStatusArea() so that it now passes a LPSTATCALLBACK 
		instead of a struct STATCALLBACK. 
		I changed all pointers that are passed to far pointers.
		I finished changing all ints, etc. to lsshorts...
7-16
	API changes:
		I added a parameter to GetStatusBarHeight() and GetStatusStringWidth().
		I added a routine HideStatusArea().
7-13
	I put the status dll and supporting stuff to the Sharing Product resources
	Database.  I notes'd all contacts of the change.
7-10
	I fixed the callback routine StatusPopupItemSelected() to match the
	new api.  ( I had neglected to add the new string parameter.)
7-1
	I made all of the modifications that were posed by the Unix Group.  Those
	changes include changing the CallBackArray to a CallBackStructure in
	CreateStatusArea().  Adding an extra paramater to all of the callback
	functions (for host use).  And changing a couple of other calls.
6-19
	I added support for changing button alignments on the fly.  This means
	that the HiliteFlag that is used in a couple of routines is no longer a 
	lbool, but is a lushort.  The following routines are affected.  
	StatusSetObjectText() and StatusGetObjectText().
	George Moromisato requested this.
6-19
	I made a sweep through the source code changing all windows.h defines
	to wpddefs.h defines.  This will make the code more platform independent.
	Example BYTE to lubyte, TRUE to LTRUE, etc.
6-19
	I changed the implementation of StatusSetObjectState().  If the object
	state is set to false the text on the button is grayed and the 
	button is not clickable.
6-12
	I fixed a problem with the popup list box scroll bar.  The problem
	was that the scroll bar was not position properly in the window.  In
	some cases it wast not all the way to the right of the popup window.
	Thanks to Jim Flemming for reporting this problem.
6-11
	I fixed a problem with StatusSetObjectText.  I was not setting the 
	font, background or text color.
	Thanks to George Moromisato for reporting this problem.
6-11
	I changed the way a popup list box of 0 items works.  If the host
	returns 0 as the number of items in the list box, then I do not
	create a box at all.
	Thanks to George Moromisato for reporting this problem.
6-11
	I fixed a problem with the popups.  After double clicking on
	a popup, it was possible to click on another popup and get
	two popups up at one time.
	Thanks to Greg French via Bassam Awad for reporting this problem.
5-13
	Sent status dll and source code to Ray Ozzie @ IRIS (stat5-13.zip).  
	In addition to stat5-13.zip, I also sent status.sam (the api), 
	clone.zip (an example application and source code).
4-7
	I did a little work to make the popups look better.  
	This will NOT change the interface!!
	- I calculate the length of all the items in the popup list.  If the 
	longest item is wider than the button that is poping up then I make 
	the popup list box as wide as it needs to be to hold the item.  This 
	allows you to fully see all the items in the list.
	- If the popup list goes off of the right side of the screen then I move 
	it to the left, so that the entire list box is is on the screen.  If the 
	popup list goes off of the left side of the screen then I move it 
	right.  This allows you to see the entire list box even if the 
	popup button is off of the screen.  
4-1
	Placed status.dll, revision, status.sam and clone.exe (and clone source
	code) on Notes in Athena - Sharing Produce Resources.  
3-31
	Added the ability to tell the dll which item in the popup list box is
	to be selected when it is initially displayed.  This required adding a 
	parameter to the StatusPopupLoadData routine.  See the updated status 
	api (status.sam) for details.
	(THIS MEANS OLD HOST APPLICATIONS WONT WORK WITH THIS NEW DLL!!)
3-31
	Added the ability to center, left or right justify text on text buttons.
	Left justified is the default.  In order to center or right justify
	use OBJ_CENTER or OBJ_RIGHT in addition to the other button attributes.
3-31
	Fixed a bug.  The status bar was not returning back a -1 if no popup item
	was selected.  The API says it does.  It has been fixed.
3-30 
	Fixed a bug.  A collapsible button would not repaint if it has been sized
	down to zero width.  I now recalculate its size before I check to see
	if it intersects the paint rect.
3-12 
	Platform independent enhancement. I changed all occurances of WORD to 
	lushort.
3-12 
	Platform independent enhancement. I added a cHwnd to the status area.  I no 
	longer use the cHwnd as the unique indentifier for the status area.  This
	means that other platforms can change hWnd to be whatever they need, but
	they can still use all of my code for the unique identifers for the buttons
	and status bars.
3-12 
	Bug Fix : added cHInstance to CStatusAreaList and used it in the 
	CreateWindow().  Using NULL as an hInstance worked in Windows 3.0 but
	not in Windows 3.1.
3-6 (?)
	Mike sent copy of Status Dll and Source to Cambridge.  
	Concact: Bassam Awad (617) 693-5065.
