NEXT RELEASE PRIORITIES - TOP OF TODO FILE (IN ORDER)
	-	tool to fix tabs
	-	run all testsuites on PC under Templates /BCC(DOS AND WINDOWS)
	-	Cleanup docs to point where they are readable, if incomplete.
		They must contain clear installation and getting started
		instructions.
	-	tool to strip emacs trailers
	-	tool to strip RCS logs
	-	Pass all testsuites on MPW.
	-	strip references to stuff that will not be in final release
	-	solve malloc related problems - loose Realloc, and make our
		mem munching better(memcmp instead of long cmp), and optional.
	-	Convert all backends and mixins to new style, and loose CollectionView
		crap.
	-	Rewrite string as Sequence<Character>
	-	Look carefully at exact list of CTORs for each Collection, and its
		_Backend, and see that they are done constitnently(same for op=).
		Try to convince sterla bout Set(T,T,T)  - main reason is trashing
		global variables...
	-	Pass all testsuites with MSC 70
	-	Pass all testsuites under WindowsNT/MSC 7.0
	-	Pass all testsuites on GCC/UNIX (maybe also get Sparc binaries for GenClass etc).
	-	SortedArray
	-	SortedLinkList


Foundation:
	Container Classes:
--	Schanuser->Tools and Apps->Demos
--	Make makefile for testsuites - then port upper layers
--	Fix codegen of TFILEMAP so wraps defines cuz of Apple C++ bug
	with macros - only displays in building genclass...
--	Post about/lookup in ARM g++ problems with ope conversions etc...
--	Review writeup from last weeks meeting with sterl/kdj - writeup
	new iterator design notes, and revised todo...
--	Build new lockfiles/pcxlate, etc on CI - since old ones had
	bad bug - OSINIT. Also, fix their makefiles...
--	Send mail about nuntius.
--	Hash.hh/cc for defing default hash functions, and maybe more?
--	Get rid of the routine ReAlloc () - bad idea for internal pointers...
	Maybe use kdjs malloc tuning stuff instead...
	First test the impact in Array and CircularArray and String and BitString.
	Make sure not too severe. Then update comments in Array.hh etc about internal
	pointers.
--	Rewrite string soon, or at least use new array resize/realloc algorithm
	since roundupto(32) works pretty badly in GenClass lexical analyzer for
	buffered strings.
--	Talk over operator-- for Stack/Queue - I got rid of since I think prefix/postfix
	more confusing than we'd first discussed.
	For similar reasons, lose the op+= () - cuz lack of symetry with -- or -= is
	disturbing- we can add later if there is demand. Tougher to remove.
--	BCC dead code/File.o linking probelms...
--	BCC makefiles .autodepend???
--	stackspace / bcc / exehdr - DOS - figure out how, and if this is trouble
	with tstring.exe, etc...
--	Finish up SimpleTree with kdjs mailing, and use todo Sorting_SimpleTree
	as a better test. Maybe also set, bag, and mapping since they have
	more argressive testsuites.
		(a)		Iterator Work:
			(01)	Support sequencing in sequenceiterator (start, end, and
					current index).
	
			(04)	Smart Iterators (probably using Stroustrup static class/
					functor? stuff)

			(05)	Clone LL into DLL - adding double stuff.

			(09)	Restart in iterators???


		(b)		New containers
			(01)	Do DoublellyLinkedList based Set.

			(02)	Implement Dictionary

			(03)	Sorting_SimpleTree.

			(04)	Fix SimpleTree to do patching.

			(05)	Implement Sorting_SimpleTree, ans Sorting_RedBlackTree

			(06)	Implement LRUCache

			(07)	Implement HashCache

			(08)	Implement Skiplist and mixins using it.
			
			(09)	Consider implementing Sorted_Array? AND Sorted_LinkList. Though
					sterl things LL is waste of time, Mapping_SortedLinkList is faster
					by 60% than Mapping_LL!!!!  (that is, ourtestsuites).

			(10)	LinkList with tail ptr. Good for implemting Q.


		(c)		Porting
			(01)	Port to BCC without templates (DOS), and test under windows.

			(02)	Port to MSC 7.0 without templates (DOS), and WINNT


		(d)		TestSuites
			(01)	Fixup Testsuite for DLL, and LL. - beef other testsuites
					tool

			(02)	Testsuite for PriorityQ, and PQ_LL, and debug these - not
					very close.


		(e)		Other
			(01)	operator new done properly so works without our operator
					new.

			(02)	One significant weakness in our collection support is
					supporing 2+ D arrays....

			(03)	Do FastShared - maybe also a not-so fast version that calls
					virtual addreference so we have more flexability about
					breaking references - may be key to implementing
					Bag_FixedArray, and similar such things...

			(04)	Array and fixed array code is not right, if
					sizeof(T) != sizeof { struct { T x; } } - well not exactly -
					but we create an array that may be the wrong size - must be
					more careful.

			(05)	Get rid of Collection.hh/cc - obsolete. A few things still
					depend on it though - clean those up first...

			(06)	Use FItems() trick from FixedArray in Array to get T* rather
					than ArrayNode<T> so the hack is more localized. Just
					operate on T*??? THink out a bit, but probably right...
					Also makes easier to localize that node class so we can get
					rid of it where unneeded.

			(07)	operator [] for Mapping and Dictionary - Like Lookup () but
					an error if entry not found.

			(08)	Get rid of warnings with Set_BitString.

			(09)	Get buids working on CI and do performance (proff) builds and
					tests.

			(10)	Deque names wrong. No relationship to stack - just confusing.
	
			(11)	Reanme HashTable->HashTable_SC - and do other hash tables.
	
			(12)	fix hashtable to have iterators, and patchable iterators subclasses like array.
					Then use that in mapping_hashtable (SB SC)

			(13)	Get rid of AppendMode (from Sequernce) if possible - talk with sterl abou tit.

			(14)	Prime # support for math...

			(15)	See if we should have common API base class - Cache...

			(16)	Cleanup method names for Q/DQ. Cleanup who uses += etc,
					looking at sterls new docs. Generally validate existing
					APIs against sterls docs, and list disputes to be resolved.

			(17)	Redo HashTable ala Array and use in Mapping_HashTable.
					This means do _Patching, stuff etc...

			(18)	Sorted_Array.

			(19)	Redo Set_Bitstring without CollectionView.

			(20)	Fix linker stuff to gcc to call gcc direcly rather
					than g++ script cuz of speed concerns...

			(21)	Normalize tabs (8) and fixup indentation accordinly.

			(22)	Strip space before function call - as Tom K suggested.
					Or decide otherwise, but DECIDE!

			(23)	Strip rcs headers and emacs tails from files. Write tool
					to do this automatically - too painful to maintain
					otherwise.

			(24)	Figure out what it takes to strip out unneeded dependencies
					for first Fnd class lib ship (aka container class lib).

			(25)	Review comments (obscenity, private details, other issues?)

			(26)	Sorting, etc taking procptr for compare, and wider related
					issues.

			(27)	Performace tests and tweeks - compare with plain C.

			(28)	Recursive make for genclass support with mac makefiles.

			(29)	Wider issue of generally cleaning up make process on mac,
					UNIX and PC. Generally like UNIX stuff right now - not bad.
					Even UNIX needs docs though.

			(30)	Rewrite String to use Sequence(Character).


TO DOCUMENT WHY NOT:
			(02)	DOCUMENT WHY WE DONT WANT TO DO THIS!!!
					1 Virtual iterators - actually were close here - we have
					Iterator::More () instead of Next/Done. Doing support for
					nonvirtual Iterator::Current () is harder, and requires
					more thoguht. Also, take better advatnage of
					Iterator::More() stuff by having backends go to this
					straetgy too.








	File:
		(a)		Bugs at head of File.hh/cc



	Memory Management:
		(a)		Try the malloc in gpluslib, by doug Lea, and see if it works better than apples (faster?)

		(b)		Add disable malloc flag/accessor to memory manager, so we can disable from interupts...
				Do only if in debug mode? or generate exceptions - probably asserts!!!!

		(c)		IMPROVE PrintMemoryStatistics ().


	Foundation Misc:
		(a)		Do BusyCursor TIME MANAGER Task.
		
		(b)		Make periodoc task stuff pay attention to periodicity.

		(c)		Do simple sound player (use both binary and res id, and resname ctors). Just have simple play
				method...
		
		(d)		add some kind of regular expression pattern matcher to the foundation.




	


-----------
Graphix:

	PixelMap:
		(a)		Note the packType field of pixmaps. Not properly taken into account in Stroika PixelMap support.

		(b)		CLEAN UP PIXELMAPS, and LOW LEVEL GRAPHIX!!!
				Add subimage method of pixelmap - document that not very safe, and do safety trick of
				keeping list when debug turned on, and doing assert that all subpms deleted before parent.
		
		(c)		PixelMap*	Picture::ToPixelMap () const
				{
				// If I get wrapping tablets around pixmaps working again, then this can be simpilfied, and
				// renederd less memory intensive!!!
				update PixelMap stuff to not keep redundent represnations of things like rowbytes, etc...<STARTED>

	Region:
		
		(a)		Boolean	Intersects (const Region& lhs, const Region& rhs)
				{
					// maybe this routine ought to say lhs * rhs != kEmptyRegion, cuz there is the issue if
					// things intersect, but the intersection contains no bits - which is the defn of empty
					// intersepction, and what is the defn of NO intersection - I think this routine
					// should return true if the regions intersect, but the intersection contains no bits.
					// But if regions are defined as open, in the topilogical sense, then this whole disticion
					// may be silly.
					return (not ((lhs * rhs).Empty ()));
				}

	Tablet:
		(a)		Get Offscreen Tablet stuff working so we can properly do popout menus.

		(b)		Get rid of OffscreenTablet and move the stuff to Tablet() specail ctor. Generally that
				code could use lots of fixups!!!

		(c)		Introduce abstract class, with all virtual methods so we can override in PictureTablet, and do
				portable picture implementation.


	Polygon:
		(a)		Fix polygon.  I probably broke it when I got rid of the Updated() stuff.   Sorry, need a better
				approach...  Guess must subclass each modifying method (PAIN).


	Graphix Misc:
		(a)		Do Icon colorization. - made start - test/finish it.

		(b)		Did PixelPoint and regular point.  Consider using even more, and making
				Point be real, or fixed (just as experiment).

		(c)		Pallette stuff currently unimplemented, but who cares.  Includes
				MakeRGBPattern guy now

		Do GDevice stuff.
		Do GDevice support so you can get bounds rect of main gdevice so sterl can center
		dialogs, and do zoomwindow right.

		Also, on the cursor front, do PixMap ctor for Cursor, so we can design
		our own on the fly.  I think this too is useful for Vants.

		FOR BITBLITS:
			// Got to think about colorizing problem and lack for ports.  Also, make uses inverse table
			// of one of these guys forget which which is slightly non-portable>?? 
			// basically, simple copybiuts call here though...

		Finish get/set pixel guys, and testem.  Think about different reps, and
		how we are defining the bit-orderign stuff to work.  Also, workout
		kinds in Pixmap/CLUT/SubWindowing design problems.

		Put in HACK in COPYBITS (OR SOMEWHERE) to MULTIPLY ROWBYTES BY DEPTH (OR SOME ROUGH
		APPROX OF THAT) on MacPlus, so we get unscaled, and probably pretty good view of color
		images, without Color QD!!!!  If only Apple knew :-)....

		Decide if arg to PixMap CTOR should (CLUT) should be const or not.  See Graphix-Globals
		for example to help decide.

		Fix tile alignment with scrollbits.

		Implement 		OrientedRectShape (const Rect& rect, Angle angle);
		Started, but just barely.

		// do something like this - probably just support new just  const....
		// STARTED SUPPORT IN TEXTBOX.HH
		FUNCTION GetActualJustification(justification: INTEGER): INTEGER;
			BEGIN
			IF justification = teJustSystem THEN				{ actually teJustLeft }
				BEGIN
				IF qNeedsScriptManager | gConfiguration.hasScriptManager THEN
					GetActualJustification := GetSysJust
				ELSE IF qNeedsROM128K | gConfiguration.hasROM128K THEN
					GetActualJustification := IntegerPtr(kLMTESysJust)^
				ELSE
					GetActualJustification := teJustLeft;
				END
			ELSE
				GetActualJustification := justification;
			END;
		
		

-----------

Framework:

	Adornment:
		Blow it away...

	Application:
		fix to really close documents, etc...
			void	Application::ShutDown ()
			{
				/*
				 * Try to close each window, and thereby cause and close boxes appropriate to appear.
				 * Only if all windows manage to get closed to we really quit.
				 */
				// NYI....
			
			
				/*
				 * All must be closed up by now, so go ahead and quit.
				 */
				fNotDone = False;
				fThroToEventLoop.Raise ();
			}


		From Application::RunOnce () and EventManager::ProcessNextEvent ().  Gross hack workarounds!!!
				/*
				 * This is a poor workaround for a problem that I don't totally understand with
				 * mouseMoved, and null events in system 6 (MF and plain finder).
				 * See also, EventManager::ProcessNextEvent () for related kludge.
				 */
				if (OSConfiguration ().RunningSystemSix ()) {
					// otherwise count on getting the mouse moved events...
					ProcessMouseMovedEvent (GetMouseLocation (), GetKeyBoard ());
				}


	Command:
		Do better job of this - too agressive in flushing...
		<True, but just the tip of the iceberg with command stuff. Problem far more
		sweeping and general with commands commiting>
			void	Dialog::Pose ()
			{
				if (GetSize () == kZeroPoint) {
					SetSize (CalcDefaultSize ());
					Point	centerPoint = CalcRectPoint (DeskTop::Get ().GetMainDeviceDeskBounds (), 0.33, 0.5);
					SetOrigin (centerPoint - GetSize ()/2);
				}
				SetVisible (kVisible);
				Application::Get ().GetMenuBar ()->UnHiliteMenu ();
			
			// these flushprevcomds are very BAD, but are necessary to avoid bugs when the window goes
			// away - it would be nice to only do this if needed?
			// save cur cmd, and restore it after context???
			
				Application::Get ().FlushPreviousCommand ();
				while (Not (GetDismissed ())) {
					Application::Get ().RunOnce ();
				}
				Application::Get ().FlushPreviousCommand ();
			}


		Implement command preflighting





	DeskTop:
		DeskTop::DeskTop ():
			fDeskTopTablet (new DeskTopTablet ()),
			fActivationStatusMayHaveChanged (True),
			fWindowPlanes (),
			fDialogPlane (Nil),
			fPalettePlane (Nil),
			fStandardPlane (Nil)
		{
			Assert (sThe == Nil);
			sThe = this;
		
		// consider the origin of the thing to always be zero-zero.
		// really this code needs re-thinking, but one thing is clear - the desktop origin
		// must be zero-zero, for the global-to-local computations to work!!!
		//	SetExtent (GetBounds ().GetBounds ());
			SetSize (GetBounds ().GetBounds ().GetSize ());

	Dialog:


	Document:
		Put in more failure support on file based documents.  Also, support save-via-temp, and
		lost more.

	EnableItem:


	MouseHandler:
		Finsish change with MouseInfo in mousehandler - Use in TrackMouseUp (ie dosetcursor) and getmouseinfo in EventManager.c
		(put MouseInfo into seperate .cc file).
		

	Menu:

		

	PathNameSelectors:
		Should probably change PathNameSelectors to raise excpetions, rather than just return true/false
		since several kinds of things can go wrong?


	PickList:

		Had to get rid of assert that subviews in same order as picklist items. Not sure
		important, but ask sterl if we want to ensure it.
		SequenceIndex	AbstractPickList::GetItemIndex (AbstractPickListItem* item)
		{
			RequireNotNil (item);
			Assert (fPickListItems.IndexOf (item) == GetSubViewIndex (item));		// dont count on it, but try to preserve anyhow?
			return (fPickListItems.IndexOf (item));
		}
		
		clean up picklists using template (macro) implementation
		
		Deleting a picklist with lots of items (in test example has 100) is very slow.  Delete calls
		RemoveItem, which calls invallayout for each item.  Also, must search list each time.  Must do
		better.
		
		Finish PickList.  ScrollToSelected.  CustomPickList.  StringPickList. (use ... for not enuf space).

		Some sort of Picklist like class (perhaps unlreated to our current implementation)
		whicha captures RowCol widgets in Motif??? Mac PickLists, Windows PickLists????


	PopupMenuControl:
		Basically done with PopupMenuControl, except for funny bug where we must
		call setclip (GetVisibleArea()) (thought that was fixed), and
		for some reason popup comes up with funny thing selected?
		Also, need support for deleting items, and setting item names.

		Not system 7 visual appearance.
		
		Need native/portable.


	Scrolling:
		Scrolling::ScrollSoShown () only half implemented.  Difficult, and works well enuf for now.
		

	ScrollableText:
		// We may want to make these guys edittextcontroller aware, so they would fit better into
		// dialogs...
		class	ScrollableText : public AbstractTextEdit {
		
		Instead of ScrollableText, have TextScroller. To do this, requires that we first
		add scroller capabilities to Trackers, and do a special Tracker that hooks into
		the mac click loop proc for mac TE, and have that get hooked into the scroller stuff.
		

	Shell:
		(01)	Windoid should have a black bot-right edge to give shadow look.
		(02)	Get titlebar working of paleltwindow too.
		(03)	Think out design for WindowShellHints better!!! Currently a hack
		(04)	Probably this should be a panel - think out consequences - maybe just an enclosure??


	Trackers:
		(a)		Trackers must handle autoscrolling. The best way to do this, I belive is to make a Scroller*,
				an optionally parameter to all trackers, and the base class Tracker, and handle the support there.

		(b)		Tracker should be an Ecnlosure instead of a Panel...


	TextEdit:
		Wrapped TECalText in check about size - really should do much better than this, and need
		to check all other occurences in textedit.cc.
		Seemed to mostly call trouble on MacPlus, and nothing noticable with MacIIFx
			void	TextEdit_MacUI_Native::SetText (const String& s, UpdateMode updateMode)
			{
				AssertNotNil (GetOSRepresentation ());
				// not sure when right time to do tecaltext - perhaps in layout???
				::SetHandleSize ((*GetOSRepresentation ())->hText, s.GetLength ());
				::HLock ((*GetOSRepresentation ())->hText);
				memcpy (*(*GetOSRepresentation ())->hText, s.Peek (), s.GetLength ());
				::HUnlock ((*GetOSRepresentation ())->hText);
				(*GetOSRepresentation ())->teLength = s.GetLength ();
				if (GetSize () != kZeroPoint) {	// causes severe disorder otherwise
					::TECalText (GetOSRepresentation ());		// dont need full layout...
				}
				AdjustSize (eNoUpdate);
			
				Refresh (updateMode);
				if (IsActive ()) {
					Application::Get ().SetMenusOutOfDate ();
				}
			}

		TextEdit needs alot of work - in particular, remove unnatural wedding between it and Tablet...
		DONE USE SETORIGIN system call.


	View:
		(a)		Investigate and perhaps use in View::Gray () the new grayishTextOrTMode.

		(b)		Add optional parameter to DrawText() to draw in gray... Just a hack, and should work fine for
				now but very ugly - NOT SURE THIS IS GOOD IDEA - THINK OUT BETTER SOLUTION!!!!

		(c)		Stroika bug<STERL MAY HAVE FIXKED?>:
				drawnExtent clipped to parents extent, but that doesnt go far enuf??? cuz we???
				well, not sure whats going on, but look at QuickHelp field in dialog editor dialogs.

		(d)		Consider making Render() or code wehee we draw subviews virtual so we can do logical clipping,
				there, as in the case of Picklists, where we know only a subrange of our views need to be looked at!

		
		<OUT OF DATE- TEST AGAIN> Known bugs with the new getvisiblearea caching:
			-	Window vis-region change - like when you flip windows back and forth - 
				dont cause inval. Must somehow fix. Could make inval procedure public, but
				I dont like that. Better choice is to add hook routine in window that gets
				called when sync-os-windows re-arranges windows (or when reoder in plane gets called).
<STERL- LETS GO OVER TH VIEW -TODO LIST AGAIN - VERY OUT OF DATE!!! -LGP Feb 13, 1992>


	WindowPlane:
		Do better window layout solution.  Dont pass things in ctors, except maybe a decorator object.
		It will do layout.

		Implement setting window plane invisible by keeping extra private bool with each window(used
		only by windowplane), and called REALLYON).  Then, implement windowplane::SETVISIBLE, to 
		use that to hide the windows in the plane.  Then, in appl::Suspend/Resume, show and hide the
		pallete plane, as appropiorate.


	Framework Misc:
		(03)	FINISH THIS UP, including put in idle task (implement those).  and see why thing
				doesnt go off until after 30 seconds + NEXT EVENT HAPPENS.  SB FIxed automagically by
				using idle tasks, but curious....
				>		WORK ON MAKING STROIKA BULLETPROOF WITH RESPECT TO RUNNING OUT OF MEMORY.  PATCH
				>		GROW ZONE PROC.  MAKE SURE HANDLES CASE OF LOADSEG.  DO CHEESEBUF, and WARNINGS
				>		FROM APPLICATION IF WE ARE LOW ON MEMORY.  SUBTTLE POINT IS THAT MAKE SURE ALL STUFF
				>		USED IN THROWS CAN BE PAGED IN.  THATS WHY WE NEED TO FIX GROWZONE PROC, AND MAKE SURE
				>		THAT HANDLES CASE OF LOADSEG.  LOOK IN MANUALS, AND OR TRY IT.
	
		(06)	Bug in scrollers.  When not doing immediate updates, but am doing scrollbits?
				get cruft left around.  I think a couple of troubles.  1, scrollbits should be
				shifting in background tile, I thought.  If it doesn;t, then change Tablet::
				implementation to do just that!!!  Also, not sure update rgn being done right.
				Code looks right, but see demo in test.cc.
				Problem (maybe or maybe not only problem) is that we inval a strip, shift the bits
				and then INVAL THE SAME STRIP again.  Trouble is when we shift, we need to inval
				the next strip over...  Not sure how to orchestrate this.

		(07)	DeskTop::FindWindow (how its used).  Put up dlog, and click in some ohter window.
				Watch sparks fly.  Worked around but code kludgy.

		(09)	Bizarre bug in void	Window::SetBackground (const Tile* tile),/Native pushbutton.
				Enabling the code to set the background of the window causes tracking behavior in
				these buttons not to work properly in system 7.0b1.

		(10)	MacOSControl::ThumbActionProc () and MacOSControl::DragActionProc (struct osControlRecord** ctl, short partCode)
				are both buggy under system 7.0b1, in that they dont seem to preserve enuf of
				the port info (like maybe pen?).  Not sure how to fix that.  Really, it seems bug
				is with the CDEFs themselves, since I think they should save their own info.  After
				all, drawing from inside one of those action procs seems legit...

		(12)	BusyCursor (spin watch & auto-busy) support.

		(13)	Windoids should take fiurst click by default.  Really, andthing in which is already
				active should - and windows are always active since in palette plane...
				Yes, better critera!

		(14)	Issue of TextWidth with no tablet in a panel.  Right now an error, but we could
				create bogus tablet or something.  Relates to whole issue of layout.



-----------
User:



-----------
Tools:

	DialogEditor/Emily:


	GenClass:
		(i)		handle name hash collisions - detect, and warn and use next hash ???
		
		(ii)	PC makefiles
		
		(iii)	Recursive make support for both mac and pc makefiles like we do for UNIX
				now - if possible...
			
		(iv)	Port tool to PC.


-----------
Demos:

	TicTacToe:
		-	Undo support in tictactoe.
		-	Debug tictactoe
		-	Tweek search speed in tictactoe - way off!!!
		-	Fix PixelMaps for X/O - maybe put in PixelMapEditor so users can customize.
		-	After you dismiss dialog for winner, leave some hint as to who one - kids often wonder
			after they've dismissed the dialog. Maybe a slash thru the winning three?
		-	Allow choice whose X/O, and indicate that on the screen (the choice theyve made).
		-	Sound.




-----------
Other:

	(01)	Get Simone porting to MS Windows.  Resolve file name issue.

	(02)	Make CLOBBER should delete tags files.

	(03)	#if __TURBO!!!!!
			For TURBO compatabilty, make delete take second arg.


	(04)	Move global excpetions into class scope statics...

	(05)	Added resource name, resourceID constructors for pictures. Used DetachResource.
			Should I have used Hand2Hand () instead?

	(06)	Make %. be a synonymn for cancel in dialogs
			<< DID HALF_ASS JOB - TELL STERL TO SET CANCELLER FROM DLOG EDITOR>>
			<< ALSO, CHECK OUT WHAT CHAR GEND BY %.>>
			<< ALSO, SEE WHY IT JUST CALLS FLASH...>>
			Maybe implement in Application::HandleKey, and throw some error!!!

	(07)	Tell Apple to use #pragma SingleObject rahter than inheriting from it!!!







/*
 ********************************************************************************
 ************************************* operator+ ********************************
 ********************************************************************************
 */
String	operator+ (const String& lhs, const String& rhs)
{
	SequenceIndex	lhsLen	=	lhs.GetLength ();
	SequenceIndex	rhsLen	=	rhs.GetLength ();
// Need const void* cast here so CFront 2.0 from apple doesnt snag AllocMode enum? Maybe we should rethink overloading done?
	String	s	=	String ((const void*)Nil, lhsLen + rhsLen);			// garbage string of right size
	memcpy (&((Character*)s.Peek ())[0], lhs.Peek (), size_t (lhsLen));
	memcpy (&((Character*)s.Peek ())[lhsLen], rhs.Peek (), size_t (rhsLen));
	return (s);
}


On mac:
	When you move the cursor out of one view, and not into another (eg outside the window),
	you must do initcursor (STERLS REPORT).

Discuss Changable/Document design with sterl - eg how to I get safe flag to work on textEdit Document...(example te app).

Must get rid of UpdateMode stuff from panel as it really does not make sense for shells, and many other
types of panels - consider getting rid of tablet stuff and draw indirections to the tablet from
panel, and maybe put them elsewhere (view?)?????????LGP March 26, 1992 ??? RETHING AGAIN????

Redo SetBackground/Erase stuff in view, in such a way that we can set the background pattern of the window atumatically 
if appropriate. (esp on X).

Ask sterl what this means in View::ReorderSubvie and if it does make sense, then put it back inuto EventHandler...
//	if (index == eAppend) {
//		index = GetSubViewCount ();	// not count + 1 cuz we will remove view first, shrinking list temporarily
//	}

Should delete of a menu item automatically remove itself from its parent - at least we should
do an assert/check for this case. But in menu we provide accessors, that return a MenuItem*.
What if someone said delete of that. It not a totoally unreasonable way to try to get rid of
a bunch of menu items...<Started attacking, but dont have sensible definition yet...>

Deal with kSystemFont/kApplication font under motif issue. Must reth8ink how we wish to deal with this.
Not exactly the reight concept for motif. Think about implications for Emily...

Tell sterl to do quick help in the dialogs - some items could really use explanatio - like codegen stuff.
Easy and flashy.

GO OVER void	View::SetVisible_ (Boolean visible, UpdateMode updateMode) with sterl so I understand better teh 
performance hack - LGP March 26, 1992.

Bob: suggests better way to do subwindowing in PixelMap - have shared part, reference counted, and have
each subnwindow inc refrecne coutn so we dont need to worry being destroyed before the original
pixelmap. Also, this would make for more efficnent pixmap copying.

Sterl will think up taxonomy of fonts (perhaps like bullitenboards do under motif) rather than kSystemFont,
and kApplicationFont on the mac.

Enter/Exit Notify to replace TrackHelp/TrackMovement in View.

Reorganize view overrides to related base class overrides together and related concept (like view draw render)
done together.

Subclasses of View that are opaque like scrollbar should override opaque method to say so.

make tabletowner overrides in View (drawrect, etc) protected by getting rid of illicit usage
in Adornment.

Reduce dependencies on adornemnts - use other mechanism where possiple - we'd like to get rid of the
concept, or at least rationalize it a bit. Easy in most cases like groups should do adorment stuff
themselves, and other cases mostly easy  - focusview moderatleyt easy though a bit of a pain, and
pushbutton is the oly one where sterl things adorments really help alot. Alot of mechsnism for one
simple case???

We will probably soon need to re-implement picklists along the lines I suggested long ago - we
must be able to support result of database query - ASK SIMONE ABOUT REQUIREMENTS!!!! Scrollbar
may not even make sense... Just some other kind of slider???? or similar device...


We all the time in Stroika end up replicating the interface:
		nonvirtual	void	AddMenu (Menu* menu, const String& title, SequenceIndex index = eAppend);
		nonvirtual	void	RemoveMenu (Menu* menu);
		nonvirtual	void	ReorderMenu (Menu* menu, SequenceIndex index);
or something akin to it. I would suggested a utility templated class

	template IndirectRestrictedSequence<T> {
			class	IndirectRestrictedSequence  /*NO BASE CLASS*/ {
				public:
					IndirectRestrictedSequence (Sequence<T>& s /* we save reference so it better not go away*/);

					nonvirtual	void	Add (T item SequenceIndex index = eAppend);
					nonvirtual	void	Remove (T item);
					nonvirtual	void	Reorder (T item, SequenceIndex index);
				private:
					Sequence<T>&	fSequence;
			}
	}

Even if we cannot use this as a mixin in the cases above, we can use it for code vectoring, and to assure
better a common implementation of this interface...





// EVEN after sterls rewrite, still broken - June 19, 1992 - Causes assert failure in View.cc...
	Region	Menu::GetVisibleArea ()
	{
		// Should cast to (void) return value but for MPW Compiler bug - ... LGP March 4, 1992
		View::GetVisibleArea ();		// I think we must call this to work around bug in view - if this works, then
									// document it better!!!


	FIX VIEW BUG WHICH WE WORKAOUND HERE IN MENU::GETVISIBLEAREA:::
	Region	Menu::GetVisibleArea ()
	{
			/*
			 * I think we must call this to work around bug in view - trouble is that they count of setting
		 * fCurVisibleArea as a sort of flag - not really designed to support further subclassing
		 * and overrides of GetVisibleArea () - admittedly, a somewhat funny thing to do
			 * but if its not allowed, we must document, and find an alternative for what I'm doing
		 * here....
		 */
		View::GetVisibleArea ();
		// never clipped by siblings, parents, or whatever....
		if (GetEffectiveVisibility ()) {
			return (GetLocalExtent ());
		}
		else {
			return (kEmptyRegion);
		}
	}


Add a couple of related routines to applicationm:: GetPrettyName () and GetRunName () to get
the name prefereed to be displayed, and the name actually execed as respectively. Then
use this in the mac, and UNIX system menus about XXX ... menu item. Perhaps merge the
UNIX implementation into our SYSTEMMENU class???? One difference is that we dont
ever add it to a menu bar for non-mac systems??? ANd for mac, only ApplicationMenuBar/???

Move code to hack MOTIF shell system menu for about box to class SystemMenu - just dont add it to
any menusbars on UNIX!?

Do method in macmebnubar native to say shorthand this==GetREALLYInstalled()...

Sterl had a great idea of how to cleanup our patch code in iterators (sequence and colleciotn).
Have a method of iterator patch. Then main point of this is that it would help in doing 
smart iterators (at least of we requrie subclassing). Whole thing needs more thoguht but
I like idea of moving patch code to iterator itslef because of localizing information.

ZoomWindow on mac is very broken (eg try tictactoe application).

Big performance win by cleaning up PeriodTask running code - pay attention to periodicities, and
calc a figure of how often the peridoci task manager istlf must be called, for X AddIdleTask call,
and for Mac WaitNextEvent call.

Look at MenuTitle::EffectiveLiveChanged (Boolean oldLive, Boolean newLive, UpdateMode updateMode) For
some performance wins - talk to sterl about it...

Modify mac LockFiles scipt to stake -t arg and if given, convert files to MPW creator as it goes thru them.

Also, Modify mac MakeConfig script to modify the ProjectStartup as it copies it to specify the Stroika_bin directorty.
This wil make doing a no-debug dir easier.

Selector feedback doesnot look right in emily - I think we have the wait in the wrong place - want it after first draw, and fore erase?? something like that...

Fix Polygons for UNIX.

What todo about SubView pointers - assert (GetSubViewCount () == 0) in View::DTOR or just
delete remaining views.

Track down double draw under motif when you place a textview, or and edittext, or sometimes
a scrollbar in emily. Some trouble with realizing, or not patching enuf methods of the widget???

Fix gray cruft in MenuBars.

Work on X clipping.

Work on Build/Install scripts "ReadMe.*"

StackBased SetClip in view - if we've decided against it, document carefully in View header.

Support Enter/Leave notify events for view, and use this for the cursor support - think out
better cursor support.

Debug Motif Option Menus.

Background/Foreground color for text drawing.

Fix selector on mac now - works fine under UNIX - should work for both!!!

Review carls buglist.

Building Tablets from PixelMaps broken - at least for X.

Look at XGif & post to usenet about ximage depth=2 problems.

Modify mac makeConfig script to unlock and patch main project statup for Stroiak to get
Stroika bin and src based on args to makeConfig.

Help Menu support (motif)

Help Key Support (motif/mac);

Info/alerts should do right layout/icons for the various guis.

Motif/Xtoolkit update region bug workaround - on draw of motif widget if updateRegion not whole widet, then
try refreshing, and do whole thing again??? Not good answer, but what is??? Maybe now is the time to try
patching motifs GCs????

Talk to sterl first- but I think we should getrid of SetOn/SetOff hack in button - mention bobs
example of why it is unsafe. Probably get rid of CanStayOn concept, but before I talk to sterl,
investigate implications totally.

Before worrying too much about mac performance, fix TextView::Draw () to have more efficeint implementaiton - currently
builds a textedit view, addsubnview, and tehn remove subview it (at least with word-wrap on).

Redo accelerator stuff to be more extensible - dont use String interface, but something more typesafe...

Investiage Xt idle task stuff and see if race conditions there are leading to some graphix glitches...

fixing up menu stuff - trackpress  more rational - same from mac to motif 

popup menus must work perfectly!!!

Fonts are ignored for MenuBars, and Popup menus under motif. CalcDefaultSize for motif popup menu is particularly bad.

Fix Desktop to keep XWINDOWS list of windows in sync with our local one - and related fix is to implement modality properly.
Currently, bugs in this can cause bizare behavior, and even crashes...

Try tweeking void	FontIterator::ScanForNextFont ()
{
	while (True) {				// til we get a good font...
		fCurrentIndex++;
		if (fCurrentIndex > fMaxIndex) {
			fCurrentFontName = kEmptyString;
			break;
		}

		osHandle	resHandle	=	::GetIndResource ('FOND', fCurrentIndex);		// snag from any resource file
		if (resHandle != Nil) {
			osStr255	curName;
			short		theID;
			ResType 	theType;
			::GetResInfo (resHandle, &theID, &theType, curName);		// check errors...
			fCurrentFontName = String (&curName[1], curName[0]);
			break;
		}
	}
}
By calling SetResLoad(FALSE) before the getindresource. Be sure this trick works - that is that we can still call GetResInfo after
Evne if the font was not in memory!!! Speed TWEEK!!!

Fix scroller problem with borders, and Picklists to do right thing on CalcDefaultSize and adjust amounts when scrolling...
Make work perfectly!!!


<< WAS ORIGINALL: Also, fix long standing bug with check menu items in motif...>>>
Review the changecount stuff, and especially its usage in MenuItem. Very confusing, and probably the source of the check item left on bug under motif. Sterl
tells me there are other bugs with Emily - in this regard - in particular, it looks like all menu items
have the same command # for the pallet, and never really calls setOn of the one
he expects to be checked.
I'm not really sure seton is the right name - for check items??? Why not SetChecked - I dont like how all this stuff fits together here. Discuss whole mess
with Sterl - sooon...	LGP June 4, 1992...



FROM STERL Wednesday, June 24, 1992 11:53:18 PM
	Graying text must be supported, we need it in nearly every widget
	
	Someone make TextEdit not erase its background please
	
	In general, we don't want to erase whole update area, but do view based erase to avoid
	flicker
	
	Need to know graphics characteristics, i.e. Black & White or number of colors
	available. Should probably give notification of color space changes (maybe poll
	on Mac, given to you in Motif)
	
	Need to hook into X correctly so that default background is not simply gray. Also
	true on Macintosh
	
	Need to beef up CalcColorFromTile routine
	
	Need to do better in black & white, but need notification to do this right
	
	Polygon definition nearly useless, almost always want to define in terms of a
	real origin, but can't grab it (see MyPolygon in LayerGraph)
END FROM STERL Wednesday, June 24, 1992 11:53:18 PM


Add borders to pixelmapeditor views so you can see edges of Pixelmap. Also add
cut/paste of mac pictures and pixelamsp and internal format so we can use it more
easily on the mac.

Order AUX manuals. and get money from sterl.

Tell Tom Doc chapter on construction order problems.

Send Disk to Don next release.

Add testsuite for StreamUtils.

Build ls, and date demos of Foundation class library.

Also, some sort of statistics simulation - pulling rabbits out of bags, or some population
stuff would make good demo of Collections, etc. Tell sterl about probability problem that
sparced this idea...



# For gnuemacs:
# Local Variables: ***
# mode: Text ***
# tab-width:4 ***
# End: ***
