Milán Major

netscape-revival

1 branch
Code

lib/mac/VText/V_PowerPlant_Mods/LSelection.h

//	===========================================================================
//	LSelection.h					©1994 Metrowerks Inc. All rights reserved.
//	===========================================================================

#pragma	once

#include	<LSelectableItem.h>
#include	<LList.h>
#include	<LBroadcaster.h>
#include	<LStreamable.h>
#include	<PP_ClassIDs_DM.h>

class	LSelectableItem;
class	LDataPipe;
class	LAction;
class	LAEAction;
class	LStream;

enum {
	msg_SelectionAboutToChange = 20000,
	msg_SelectionChanged
};

class	LSelection
			:	public	LSelectableItem
			,	public	LBroadcaster
			,	public	LStreamable
{
public:
	enum {class_ID = kPPCID_Selection};

						LSelection();
	virtual				~LSelection(void);
	virtual ClassIDT	GetClassID() const {return class_ID;}
#ifndef	PP_No_ObjectStreaming
	virtual void		WriteObject(LStream &inStream) const;
	virtual void		ReadObject(LStream &inStream);
#endif


public:
				//	New features
	virtual void		SelectSimple(LSelectableItem *inItem);
	virtual void		SelectContinuous(LSelectableItem *inItem);
	virtual void		SelectDiscontinuous(LSelectableItem *inItem);
	
				//	Query
	virtual	Boolean		IsSubstantive(void) const;
	virtual	Int32		SelectionID(void) const;
	virtual LSelectableItem *	ListEquivalentItem(const LSelectableItem *inItem) const;
	virtual LSelectableItem *	ListDependentItem(const LSelectableItem *inItem) const;
	virtual LSelectableItem *	ListAdjacentItem(const LSelectableItem *inItem) const;

				//	Direct list manipulation
	virtual Int32		ListCount(void) const;
	virtual LSelectableItem *	ListNthItem(Int32 inIndex);
	virtual const LSelectableItem *	ListNthItem(Int32 inIndex) const;
	virtual Boolean		ListContains(const LSelectableItem *inItem) const;
						//	only use add, remove, and clear calls when sandwiched
						//	between about to change and changed calls...
	virtual void		SelectionAboutToChange(void);
	virtual void		SelectionChanged(void);
	virtual void		ListClear(void);
	virtual void		ListAddItem(LSelectableItem *inItem);
	virtual void		ListRemoveItem(LSelectableItem *inItem);

				//	Visual
	virtual void		MakeRegion(Point inOrigin, RgnHandle *ioRgn) const;
	virtual void		DrawSelected(void);
	virtual void		DrawLatent(void);
	virtual void		UnDrawSelected(void);
	virtual void		UnDrawLatent(void);
	virtual void		DrawContent(void);	//	seldom used.
	
				//	Implementation -- manipulator
	virtual ManipT		ItemType(void) const {return kSelection;}
	virtual Boolean		EquivalentTo(const LSelectableItem *inItem) const;
	virtual Boolean		AdjacentWith(const LSelectableItem *inItem) const;
	virtual	Boolean		IndependentFrom(const LSelectableItem *inItem) const;
	virtual Boolean		PointInRepresentation(Point inWhere) const;
	virtual void		DrawSelf(void);
	virtual void		UnDrawSelf(void);

				//	Data tubing implementation:
	virtual void		AddFlavorTypesTo(LDataTube *inTube) const;
	virtual Boolean		SendFlavorTo(FlavorType inFlavor, LDataTube *inTube) const;
	virtual FlavorType	PickFlavorFrom(const LDataTube *inTube) const;
	virtual void		ReceiveDataFrom(LDataTube *inTube);

				//	AEOM support
	virtual	void		DoAESelectAsResult(const AEDesc &inValue, DescType inPositionModifier);
	virtual void		DoAESelection(
									const AEDesc	&inValue,
									Boolean			inExecute = true);
	virtual void		RecordPresentSelection(void);	//	DoAESelection is preferred.
	virtual	void		MakeSelfSpecifier(
									AEDesc&			inSuperSpecifier,
									AEDesc&			outSelfSpecifier) const;
	virtual void		GetAEValue(
									const AEDesc	&inRequestedType,
									AEDesc			&outPropertyDesc) const;
	virtual void		SetAEValue(
									const AEDesc	&inValue,
									AEDesc			&outAEReply);
	virtual void		GetAEProperty(
									DescType		inProperty,
									const AEDesc	&inRequestedType,
									AEDesc			&outPropertyDesc) const;
	virtual void		SetAEProperty(
									DescType		inProperty,
									const AEDesc	&inValue,
									AEDesc			&outAEReply);
	virtual	void		GetImportantAEProperties(AERecord &outKeyDescList) const;
	virtual	void		GetContentAEKinds(AEDesc &outKindList);
	virtual	void		HandleDelete(
									AppleEvent			&outAEReply,
									AEDesc				&outResult);

				//	Clipboard actions
	virtual	LAction *	MakeCutAction(void);
	virtual	LAction *	MakeCopyAction(void);
	virtual	LAction *	MakeClearAction(void);
	virtual	LAction *	MakePasteAction(void);
	
						//	Implementation help
	virtual void		UndoAddOldData(LAEAction *inAction);

protected:
	Boolean				mRecordAllSelections;
	LSelectableItem		*mAnchor;

protected:
	LList				mItems;
	Int32				mSelectionID;	//	to tell if the selection has changed
};

class StSelectionChanger
{
public:
						StSelectionChanger(LSelection &inSelection);
						~StSelectionChanger();
protected:
	LSelection			*mSelection;
};