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.