ftp.nice.ch/pub/next/developer/resources/classes/misckit/MiscKit.1.10.0.s.gnutar.gz#/MiscKit/Documentation/Classes/MiscAnnouncer.rtf

This is MiscAnnouncer.rtf in view mode; [Download] [Up]

 Copyright ©1994 by H. Scott Roy  All Rights Reserved.






MiscAnnouncer






Inherits From:	Object

Conforms To:	MiscDependency

Declared In:	misckit/MiscAnnouncer.h





Class Description

MiscAnnouncer is a public version of the IKAnnouncer class found in IconKit.  It provides a simple way to conform to the MiscDependency protocol and lets an object broadcast messages to its users and listeners.  It also provides a polling mechanism to ensure that users approve of a pending action.

The simplest way for an object to use a MiscAnnouncer is to create one in an instance variable, and then forward all MiscDependency messages to it.  Here is a skeleton example of a class Foo that uses MiscAnnouncer.  A Foo sends out an announcement whenever its name changes.


@interface Foo : Object <MiscDepenendency>
{
	MiscAnnouncer
		* announcer;
	char
		* name;
	...
}

@end


@implementation Foo


- init
{
	...
	announcer = [[MiscAnnouncer  alloc]  initOwner: self];
	name = NULL;
	...
}


- addUser: who	{	return [announcer  addUser: who];	}
- addListener: who	{	return [announcer  addListener: who];	}
- removeUser: who	{	return [announcer  removeListener: who];	}
- removeListener: who	{	return [announcer  removeListener: who];	}


- setName: (const char *) theName
{
	if (name != NULL) free(name);
	name = theName ? NXCopyStringBuffer(theName) : NULL;
	[announcer  announce: @selector(didChangeName:)];
	
	return self;
}


@end


A class might do more than this example suggests.  For example, a Foo could do reference counting garbage collection by checking in removeUser: whether any object still refers to it.





Instance Variables

id owner;
id usersAndListeners;
int numUsers;
BOOL sendAnnouncements;



owner	The object from which announcements and polling messages appear to originate.

usersAndListeners	The list of all users and listeners.

numUsers	The number of users.

sendAnnouncements	True if the MiscAnnouncer should send out announcements.






Method Types

Initialization and freeing	- initOwner:
	- free
	
Users and listeners	- addUser:
	- addListener:
	- removeUser:
	- removeListener:
	- numUsers
	- usersAndListeners
	
Announcements	- announce:
	- announce:with:
	- poll:
	- poll:with:
	- sendAnnouncements
	- setSendAnnouncements:





Instance Methods

addUser:
-  addUser: who

Adds a new user to the MiscAnnouncer.  Users will receive notification of changes to the MiscAnnouncer's owner via the announce: methods.  If the program has been run with -MiscAnnounceDebug specified on the command line, then this method prints out an acknowledgement to stderr.

See also:  - removeUser:, - addUser: (MiscDependency)




addListener:
-  addListener: who

Adds a new listener to the MiscAnnouncer.  Listeners will receive notification of changes to the MiscAnnouncer's owner via the announce: methods.  If the program has been run with -MiscAnnounceDebug specified on the command line, then this method prints out an acknowledgement to stderr.

See also:  - removeListener:, - addListener: (MiscDependency)




announce:
-  announce:(SEL)theMessage

Broadcasts theMessage to all users and listeners of the MiscAnnouncer that can respond to it; users and listeners that do not implement theMessage do not receive it.  The broadcast message should take exactly one argument, e.g. didChangeName:, which will contain the owner of the MiscAnnouncer.  Receiving objects should register with either an addUser: or addListener: and implement the following:

- didChangeName: sender
{
	/* sender just changed its name */
	return self;
}

Announcements are only sent if the sendAnnouncements variable is True.  Users only need to implement methods for the particular messages they care about.

See also:  - announce:with:, - poll:, - addUser:, - addListener:




announce:with:
-  announce:(SEL)theMessage
with: theArgument

Like announce:, except that it provides an additional argument to go along with theMessage.  For example, a list might send out the announcement list:didAdd: after it inserts an object.  Receiving objects should implement something like,

- list: sender  didAdd: anObject
{
	/* sender just added anObject */
	return self;
}

Announcements are only sent out if the sendAnnouncements variable is True.

See also:  - announce:, - poll:with:, - addUser:, - addListener:




free
-  free

Frees the MiscAnnouncer.  This method does not send out any announcements.




initOwner:
-  initOwner: theOwner

Initializes a new MiscAnnouncer with the given owner.  This method is the only way to set a MiscAnnouncer's owner.




numUsers
-  (int)numUsers

Returns the current number of users registered with the MiscAnnouncer.  This number will be less than the length of usersAndListeners if any objects have registered as listeners.

See also:  - usersAndListeners




poll:
-  (BOOL)poll:(SEL)theMessage

Conducts a poll of all users and listeners that can respond to theMessage.  The result is the logical AND of all their responses.  Just like C code, the AND evaluation terminates as soon as a single object responds NO, so some objects might never see the polling message.

Polling messages are always sent out, regardless of the current state of sendAnnouncements.

The syntax and usage is identical to announce:, with the one exception that theMessage should be declared to return a BOOL instead of an id.

See also:  - poll:with:, - announce:




poll:with:
-  (BOOL)poll:(SEL)theMessage
with: theArgument

Like poll:, except that it provides an additional argument to go along with theMessage.  The syntax and usage are identical to announce:with:, with the one exception that theMessage should be declared to return a BOOL instead of an id.

See also:  - poll:, - announce:with:




removeUser:
-  removeUser: who

Removes a user from the MiscAnnouncer.    If the program has been run with -MiscAnnounceDebug specified on the command line, then this method prints out an acknowledgement to stderr.  Classes that use a MiscAnnouncer can intercept this message to do reference counting garbage collection.

See also:  - addUser:, - removeUser: (MiscDependency)




removeListener:
-  removeListener: who

Removes a listener from the MiscAnnouncer.  If the program has been run with -MiscAnnounceDebug specified on the command line, then this method prints out an acknowledgement to stderr.  

See also:  - addListener:, - removeListener: (MiscDependency)




sendAnnouncements
-  (BOOL)sendAnnouncements

Returns YES if announcements are enabled, NO otherwise.

See also:  - setSendAnnouncements:




setSendAnnouncements:
-  setSendAnnouncements:(BOOL)flag

Enables or disables announcements.  Returns self.

See also:  - sendAnnouncements




usersAndListeners
-  usersAndListeners

Returns the list of users and listeners for the MiscAnnouncer.

See also:  - numUsers




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