This is MiscSwapViewByPopUp.m in view mode; [Download] [Up]
/* MiscSwapViewByPopUp.m
*
* This is a SwapView that can handle popUps either by tag or by title.
* If a tag is not 0 it will try to choose the viewController by title.
*
* For more interface-info see the header file. More in depth information
* can be found here in the source-code.
*
* Written by: Thomas Engel
* Created: 24.01.1994 (Copyleft)
* Last modified: 25.09.1994
* Copyright (C) 1995 Thomas Engel
*/
#import <misckit/MiscSwapViewByPopUp.h>
// The following are for keeping track of versions when archiving instances
// of MiscSwapViewByPopUp. If you change the write: method, make sure to
// bump up the version below and make the appropriate changes to the read:
// method so all previously archived instances will be unarchivable.
#define MISC_SVBP_VERSION 0
#define MISC_SVBP_CLASSNAME "MiscSwapViewByPopUp"
@implementation MiscSwapViewByPopUp
+ initialize
{
// Sets the class version for archiving purposes.
if (self == [MiscSwapViewByPopUp class])
[self setVersion: MISC_SVBP_VERSION];
return self;
}
- setPopUpCover:anObject
{
// Because it is not possible to set the popUpMenus actionMethod inside
// IB we have to do it here. But who cares. It's nicer this way anyway.
// By default there is no selectedCell inside the popUp. We will change
// that.
int index;
id popUp;
id matrix;
popUpCover = anObject;
popUp = [popUpCover target];
[popUp setTarget:self];
[popUp setAction:@selector(swapContentView:)];
index = [popUp indexOfItem:[popUpCover title]];
if( index > -1 )
{
matrix = [popUp itemList];
if( ![matrix selectedCell] )
[matrix selectCell:[[matrix cellList] objectAt:index]];
}
return self;
}
- popUpCover
{
return popUpCover;
}
- swapContentView:sender
{
// We find the right popUp item and if really have one we can simply set
// the trigger to the right object and use the simple ..byTag/obj methods
// provided by our super-class.
id aPopUpItem;
aPopUpItem = [self realTrigger];
if( aPopUpItem ) sender = aPopUpItem;
return [super swapContentView:sender];
}
- realTrigger
{
// Here we try to find the currently selected popUpItem. This is the
// real trigger of a action.
// We assume that there always is a selected cell. If this object is used
// properly this is true because setPopUpCover causes such a init!
id realTrigger;
id popUpMatrix;
popUpMatrix = [[popUpCover target] itemList];
realTrigger = [popUpMatrix selectedCell];
// Being envoked by keyboard causes the right popUp item to be
// selected but does not change the covers title. This is what we do
// here. Maybe not always needed but who cares.
[popUpCover setTitle:[realTrigger title]];
return realTrigger;
}
- read: (NXTypedStream *)stream
{
int version;
[super read: stream];
// If you add or remove archived variables, you'll have to
// change this method so it will be able to read all previous
// versions. Just add a case for your new version and leave
// the rest of the switch statement alone.
version = NXTypedStreamClassVersion (stream, MISC_SVBP_CLASSNAME);
switch (version)
{
case 0:
popUpCover = NXReadObject (stream);
break;
default:
break;
}
return self;
}
- write: (NXTypedStream *)stream
{
[super write: stream];
NXWriteObjectReference (stream, popUpCover);
return self;
}
@end
/*
* History: 25.09.94 Added archiving (read:, write:, +initialize)
*
* 24.02.94 Conform to new swapView methods.
*
* 25.01.95 Move the popUp init (selectedCell) to setPopUpCover
*
* 24.01.94 Made it MiscSwap conform.
*
* 08.01.94 Renamed it to swapPopUpController and did some real
* nice redesign.
*
* 20.12.93 Enlightened the controller to check the tags if they are
* set. This helps to localize apps.
*
* 04.12.93 Added a delegate to this class the enable better
* command-key handling.
*
* 04.11.93 First steps to a general-purpose swapPopManager.
*
*
* Bugs: - does only handle real popUps. PullDowns might not realy work
* because I always set the title inside the trigger method. Hmm
* Maybe its better to write a seperate pullDown Controller!
*/These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.