ftp.nice.ch/pub/next/audio/editor/edsnd.1.42.s.tar.gz#/EnvelopeView.h

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

/* EnvelopeView.h -- Interface for EnvelopeView class
 * 
 * This is a sub-class of View that allows the user to draw a
 * simple line segment envelope.  The envelope appears in the
 * view as a series of line segments with square "knobs" at
 * the junction points.  The envelope is manipulated by click-dragging
 * these knobs.  Shift-clicking will create a new point (and
 * hence add a segment).  Shift-clicking on an existing knob removes
 * it (and hence removes a segment).  Moving, adding, and removing
 * junction points can be accomplished programatically as well.
 * Points are numbered from 0.
 *
 * The envelope is recorded as a series of NXPoints which represent
 * the junction points.  Both the x and y coordinates of these
 * points are floats in the range 0 to 1.  The EnvelopeView will
 * return a pointer to an array of NXPoints representing the envelope,
 * and the envelope can be set by passing a pointer to such an array.
 *
 * jwp@silvertone.Princeton.edu, 12/89
 */

#import <appkit/View.h>

/* Within the EnvelopeView, the envelope is stored as a doubly-linked
 * list of NXPoints.  No outside objects have access to this list,
 * and hence need not concern themselves with its construction.
 *
 * An element in the list is stored in an envpoint struct, which
 * is typedef'd to EnvPoint.
 */

typedef struct envpoint {
	NXPoint p;			/* The point in question */
	struct envpoint *next;		/* Next in the list */
	struct envpoint *last;		/* Previous in the list */
} EnvPoint;


@interface EnvelopeView : View
{
	EnvPoint *envelope;		/* The envelope list */
	int npoints;			/* Number of points in list */
	id delegate;			/* Delegate for this view */
}

/* CLASS METHODS:
 *
 * 	+ newFrame:	-- Create and initialize.  Initializes to a
 *			   single segment rising from 0 to 1.
 */
+ newFrame:(const NXRect *)frameRect;

/* INSTANCE METHODS:
 *
 * Methods to set/get the envelope:
 *	- (int) envelope:(NXPoint **)envptr
 *			-- Places pointer to the envelope in envptr and
 *			   returns the number of points in that array.
 *	- setEnvelope:(NXPoint *)env Points:(int)n
 *			-- Sets envelope from an array env with n points.
 */
- (int) envelope:(NXPoint **)envptr;
- setEnvelope:(NXPoint *)env Points:(int)n;

/* Methods to alter the envelope.  These methods need not be used, since
 * the envelope can be altered via the mouse.  They are provided for
 * flexibility.
 *
 *	- (int) movePoint:(int)n To:(NXPoint *)pt
 *			-- Move point number n to the point given by pt.
 *			   Returns -1 if move is impossible, n otherwise.
 *	- (int) addPoint:(NXPoint *)pt
 *			-- Add a point at pt.  Returns the number of
 *			   the new point in the list, or -1 if disallowed.
 *	- (int) rmPoint:(int)n
 *			-- Remove point number n.  Returns the total
 *			   number of points remaining or -1 if disallowed.
 */
- (int) movePoint:(int)n To:(NXPoint *)pt;
- (int) addPoint:(NXPoint *)pt;
- (int) rmPoint:(int)n;

/* Methods to query the object:
 *	- (int) npoints		-- Returns the number of points in envelope
 * 	- setDelegate:		-- Sets up a delegate
 *	- delegate		-- Returns current delegate
 */
- (int) npoints;
- setDelegate:anObject;
- delegate;

/* Methods for internal use:
 *	- acceptsFirstResponder:
 *	- mouseDown:
 *	- drawSelf::
 */
- drawSelf:(NXRect *)rects :(int)rectCount;
- mouseDown:(NXEvent *)event;
- (BOOL)acceptsFirstResponder;

@end

/* These are the delegate messages available:
 *	- point:MovedTo:	-- Notifies that a point is being moved
 *	- envelopeChanged:	-- Notifies that envelope was changed
 */

@interface AnEnvViewDelegate:Object
- point:(int)n MovedTo:(NXPoint *)p;
- envelopeChanged:sender;
@end


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