Milán Major

netscape-revival

1 branch
Code

lib/mac/VText/V_PowerPlant_Mods/LTextModel.h

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

#pragma once

#include	<LSelectionModelAEOM.h>
#include	<LListener.h>

#include	<LTextEngine.h>	//	Range type.
#include	<LDataTube.h>

class	LTextEngine;
class	LTextElemAEOM;
class	LTextSelection;

/*	---------------------------------------------------------------------------

	Version number for AEOM text processor could be very useful to know in OSA
	applications.
*/

	const DescType	pPPTextAEOMVersion = 'pptv';

	#define			PPTEXTAEOMVERSION	0x01006006

//	===========================================================================

class	LTextModel
			:	public	LSelectionModelAEOM
			,	public	LListener
{
private:
	typedef	LSelectionModelAEOM	inheritAEOM;

public:
	enum {class_ID = kPPCID_TextModel};

//-						LTextModel(LTextEngine *inTextEngine);
						LTextModel();
						~LTextModel();
	virtual ClassIDT	GetClassID() const {return class_ID;}
#ifndef	PP_No_ObjectStreaming
	virtual void		WriteObject(LStream &inStream) const;
	virtual void		ReadObject(LStream &inStream);
#endif

	virtual void		SetSelection(LSelection *inSelection);
	virtual	LTextElemAEOM *		GetTextLink(void) {return mTextLink;}
	virtual	const TextRangeT&	GetRange(void);
	virtual void		SetDefaultSubModel(LModelObject *inSubModel);
	virtual LTextEngine *	GetTextEngine(void);
	virtual void		SetTextEngine(LTextEngine *inTextEngine);

	virtual void		AddFlavorTypesTo(
							const TextRangeT	&inRange,
							LDataTube			*inTube) const;
	virtual Boolean		SendFlavorTo(
							FlavorType			inFlavor,
							const TextRangeT	&inRange,
							LDataTube			*inTube) const;
	virtual	FlavorType	PickFlavorFrom(
							const TextRangeT	&inRange,
							const LDataTube		*inTube) const;
	virtual void		ReceiveDataFrom(
							const TextRangeT	&inRange,
							LDataTube			*inTube);

	virtual	LTextElemAEOM *	MakeNewElem(
								const TextRangeT	&inRange,
								DescType			inKind,
								const LModelObject	*inSuperModel = NULL) const;
protected:
	virtual	LTextElemAEOM *	MakeNewElemSelf(
								const TextRangeT	&inRange,
								DescType			inKind,
								const LModelObject	*inSuperModel) const;
public:

	virtual void		FixLink(void) const;
	virtual	LStyleSet *	StyleSetForScript(
							const TextRangeT	&inRange,
							ScriptCode			inScript);
	virtual void		ListenToMessage(MessageT inMessage, void *ioParam);

	virtual LModelObject*	GetInsertionTarget(DescType inInsertPosition) const;

public:
				//	AEOM support
	virtual LModelObject*
						GetModelProperty(DescType inProperty) const;
	virtual LModelObject*
						HandleCreateElementEvent(
									DescType			inElemClass,
									DescType			inInsertPosition,
									LModelObject*		inTargetObject,
									const AppleEvent	&inAppleEvent,
									AppleEvent			&outAEReply);
	virtual void		GetAEProperty(DescType		inProperty,
									const AEDesc	&inRequestedType,
									AEDesc			&outPropertyDesc) const;

	virtual void		SetAEProperty(
									DescType		inProperty,
									const AEDesc	&inValue,
									AEDesc&			outAEReply);

protected:
	LTextEngine			*mTextEngine;
	LTextElemAEOM		*mTextLink;		//	To avoid casts on mDefaultSubModel
	LTextSelection		*mTextSelection;
};