ftp.nice.ch/pub/next/developer/resources/classes/misckit/MiscKit.1.10.0.s.gnutar.gz#/MiscKit/Palettes/MiscSwapKitPalette/MiscSwapKit.subproj/MiscSwapView.h

This is MiscSwapView.h in view mode; [Download] [Up]

/* MiscSwapView.h
 *
 * This subclass of View is able to swap different views into itself. It's
 * used to implement any kind of multipage windows. (Inspectors, Prefs...)
 * This object is a redesign of Greg Bruds swapView.
 *
 * Catergories: - ByObject: Handles automatic swapping. See next headersction.
 *
 * Usage: Just instantiate a view inside IB and tell it what view to show
 *		  next. The MiscSwapView will take care of putting the views back where
 *		  they came from once they will swap out again.
 *		  You can used buffered (faster) or nonButffered (less memory and fast
 *		  enough) swapping. 
 *
 * Notes: This view by default resizes its subview to it current size. But you
 *		  can decide how they are resized by the default NeXTSTEP view resizing
 *		  settings as with every view.
 *		  When using buffered composing resizing is turned OFF because of some
 *		  ugly problems.
 *		  
 * 		  Not using buffered views will save memory and allow resizing 
 *		  over the slightly faster swapping. With fast hardware this might not
 *		  be of any concern at all...so keep the ports rolling:HP, Sun, PPC...?
 *		  To implement buffered views the views windows have to be none 
 *		  deffered and retained. You HAVE to make your window non defered 
 *		  inside IB. (SwapView makes them retained on its own)
 *		  If you know a way to make windows non defered during runtime..please
 *		  let me know.
 *
 *		  Remember to deactivate objects inside a view that has swapped out.
 *		  ColorWell are a good example of such a object!
 *
 * Improved by:		Thomas Engel
 * First changes:   24.01.1994 (Copyright 1994 Thomas Engel)
 * Last modified: 	24.02.1994
 */

//	This object is included in the MiscKit by permission from the author
//	and its use is governed by the MiscKit license, found in the file
//	"LICENSE.rtf" in the MiscKit distribution.  Please refer to that file
//	for a list of all applicable permissions and restrictions.

#import <appkit/appkit.h>

@interface MiscSwapView:View
{
	id		contentView;
	id		contentViewsHomeView;
	NXRect	contentViewsHomeRect;
	id		delegate;
	float	backgroundGray;
	BOOL	useBuffering;
	
	// Instances for the ByObject category
	
	id		trigger;
	id		controllers;
	id		currentController;	
	BOOL	tagComparison;
}

// Basic view init and freeing

+ initialize;
- init;
- initFrame:(const NXRect *)frameRect;
- free;

// Basic instance-control method and delegate setting.
// More details on buffering are at the top of this header file.

- setDelegate:(id)anObject;
- delegate;
- setBackgroundGray:(float)aColor;
- (float)backgroundGray;
- setUseBuffering:(BOOL)flag;
- (BOOL)doesUseBuffering;

// The real work..there's some swapping swapping going on...tadadatadaa..

- setContentView:aView;
- contentView;
- contentViewsHomeView;

// Archiving 

- awake;
- write:(NXTypedStream *)stream;
- read:(NXTypedStream *)stream;

//- drawSelf:(const NXRect *)rects :(int)rectCount;

@end

// This method might be implemented by the delegate but is quite useless here
// because somebody has to trigger the swapping an he knows when something 
// changes.
// But once we will handle swapping on our own we might need this.

@interface Object(MiscSwapViewDelegate)

- viewWillSwap:sender;
- viewDidSwap:sender;

@end

/*
 * History: 24.02.94 Some changes to support buffering.
 *
 *			24.01.94 Took my old swapView and wrote it again...
 *
 *			21.01.94 Did some work to the resizing of swapView.
 *
 *			19.11.93 Started to do some cleanups in this HeaderFile and
 *			 		 resizing got implemented into the object.
 *
 *			17.11.93 Played around with resizing and found it right.
 *
 *
 * Bugs: - There might be problems with swapping out a view with an active
 *		   colorWell. Here some should take care a deactive them.
 *		   You might use the delegate and viewWillSwap.
 *		   Normally you will use subviewControllers and they will recieve
 *		   swapIn/Out too and can take care of that inside their revert/ok
 *		   methods or what ever.
 *
 *		 - Using buffering doe disable resizing. Maybe there is a solution to
 *		   this porblem. If there is one I might add a setResizing:YES/NO
 *		   method.
 *
 *		 - Read & write do nothing at all. I'm not even sure wether they should
 *		   do something ?
 */

/* ------------------------------------------------------------------------- */

/* MiscSwapView_ByObject				 
 *
 * This is a MiscSwapView category. I can handle swapping of different 
 * contentViews (controlled by MiscSwapContentsController's) into ourself by
 * comparing trigger objects.
 *
 * Usage: To work properly every contentsController has to register itself
 *		  at the corresponding swapView. The object triggering the swap
 *		  should invoke the sV-object and this one has to decide which 
 *   	  contentsController has to come to front.
 *		  The trigger instance stores the triggering object to have it at
 *		  hand when a findController(..) needs it to make the decision.
 *
 *		  For the first time the swapView will be uninitialized! The app
 *		  has to trigger some kind of default swap maybe by a 
 *		  [swapView swapAction:defaultObject];
 *
 * Notes: To implement a different controller-finding behavior you should only
 *		  override the findControllerByTag/object methods. They should return
 *		  the contentsController to use next ... or nil.
 *		  Sometimes swapAction can provide a trigger adjustment too. As done
 *		  with the ..ByMatrix class.
 *
 * Written by: 		Thomas Engel
 * Created:    		24.01.1994 (Copyleft)
 * Last modified: 	08.03.1994
 */

@interface MiscSwapView(ByObject)

// swapContentView is invoked by the action-buttons.
// And if somebody wants to know who triggered the swap..[trigger]
 
- swapContentView:sender;
- trigger;

// Here are some methods that allow some contentsController handling.
// There should be no need to change the list by hand!
 
- addController:sender;
- removeController:sender;
- removeAllControllers;
- controllers;
- contentsController;

- setTagComparison:(BOOL)flag;
- (BOOL)doesTagComparison;

// These are the methods that decides which controller to show activate next.
// Here is the place to add some custom behavior. The methods byTag/object
// should work with no pain in any subclass too. For details see the popup and
// ByMatrix subclasses of MiscSwapView.
// Sometime you just have to make some minor fixes inside findController.
 
- findControllerForTrigger:aTrigger;
- findControllerByTag:(int)aTag;
- findControllerByObject:aTrigger;

@end

/*
 * History: 08.03.94 Changed the findMethods to make them nicer for other
 *					 actions.
 *
 *			14.02.94 Some minor changes to make it a swapView category.
 *
 *			24.01.94 Made it a subclass of MiscSwapView
 *
 *			08.01.94 Switched to tagComparison for better reading.
 *					 choosesByTagFirst was not that nice.
 *
 *			21.12.93 Derived from my old swapPopManager this is a simple usable
 *					 and subcallable object.
 *					 Some viewController handling methods added.
 *
 *			04.12.93 Added the delegates methods.
 *
 *  		04.11.93 First methods hacked together.
 *
 *
 * Bugs: - not really
 *
 *		 - swapContentView. Ok. I could have stay with Greg's swapAction but I
 *		   don't find it a good method name. If you like it - creat your own 
 *		   compatibility category.
 */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.