Milán Major

netscape-revival

1 branch
Code

lib/mac/VText/Core/Sets/LRulerSet.h

//	===========================================================================
//	LRulerSet.h	
//
//	Copyright 1996 ViviStar Consulting.
//	===========================================================================

#pragma once

#include	<LSharableModel.h>
#include	<LStreamable.h>
#include	<VTextEngine.h>
#include	<LDataTube.h>	//	just for FlavorType definition
#include	<AETextSuite.h>
#include	<WFixed.h>
#include	<vector.h>
#include	<VTabAEOM.h>

class	LAEStream;
class	LAESubDesc;
class	VLine;
class	VTextEngine;

typedef Int32 VTextJustificationE;	//	See AETextSuite.h

//	----------------------------------------------------------------------

class	StSystemDirection
{
public:
		StSystemDirection(Boolean inLeftToRight);
		~StSystemDirection();
protected:
		Boolean	mWasLeftToRight;
};

//	----------------------------------------------------------------------

class	LRulerSet
			:	public LSharableModel
			,	public LStreamable
{
private:
	typedef	LSharableModel	inheritAEOM;
	
public:
						LRulerSet(const LRulerSet *inOriginal);
						LRulerSet();
	virtual				~LRulerSet();
	enum {class_ID = kVTCID_VRulerSet};
	virtual ClassIDT	GetClassID() const {return class_ID;}

#ifndef	PP_No_ObjectStreaming
	virtual void		WriteObject(LStream &inStream) const;
	virtual void		ReadObject(LStream &inStream);
#endif
	
	virtual Boolean		operator==(const LRulerSet &inRhs) const;

	virtual void		WriteFlavorRecord(
							FlavorType	inFlavor,
							LStream		&inStream) const;
	virtual void		ReadFlavorRecord(
							FlavorType	inFlavor,
							LStream		&inStream);
	
	virtual void		Changed(void);
	
				//	Query
	virtual LRulerSet *	GetParent(void) const				{return mParent;}
	virtual	void		SetParent(const LRulerSet *inRuler);
	virtual	Boolean		IsLeftToRight(void) const;
//	virtual VTextJustificationE
//						GetJustification(void) const;
	virtual const Range32T&
						GetParentPixels(void) const;
	virtual const Range32T&
						GetPixels(void) const;

	virtual void		NextTabStop(
							FixedT					inIndent,
							FixedT					&outStop,
							VTextTabOrientationE	&outType,
							Int16					&outAligner) const;
	virtual Int32		NewTabIndex(const TabRecord &inTabRecord) const;
	virtual void		DeleteTab(TabRecord *inTabRecord);
	
				//	Drawing/Layout
	virtual	void		DrawLine(
							const VTextEngine	&inTextEngine,
							const Ptr			inText,
							const Int32			inLineIndex) const;
							
	virtual void		LayoutLine(
							const VTextEngine	&inTextEngine,
							const Ptr			inText,
							const TextRangeT	&inParaRange,
							const TextRangeT	&inLineStartPt,
							VLine				&ioLine) const;
							
				//	AEOM
	virtual void		SetSuperModel(LModelObject *inSuperModel);
	virtual LModelObject*	
						HandleCreateElementEvent(
								DescType			inElemClass,
								DescType			inInsertPosition,
								LModelObject*		inTargetObject,
								const AppleEvent	&inAppleEvent,
								AppleEvent			&outAEReply);									

	virtual Int32		CountSubModels(DescType inModelID) const;
	virtual void		GetSubModelByPosition(
								DescType		inModelID,
								Int32			inPosition,
								AEDesc			&outToken) const;
	virtual Int32		GetPositionOfSubModel(
								DescType			inModelID,
								const LModelObject	*inSubModel) const;
									
	virtual void		GetAEProperty(
								DescType		inProperty,
								const AEDesc	&inRequestedType,
								AEDesc			&outPropertyDesc) const;
	virtual void		SetAEProperty(
								DescType		inProperty,
								const AEDesc	&inValue,
								AEDesc			&outAEReply);

						//	Implementation support...
	virtual const StringPtr	GetModelNamePtr(void) const;

protected:
	vector<TabRecord>	mTabs;
									
	LRulerSet *			mParent;
	FixedT				mBegin,
						mBeginFirst,
						mEnd,
						mBeginDelta,
						mBeginFirstDelta,
						mEndDelta;
	VTextJustificationE	mJustification;
	
	Boolean				mIsLeftToRight;

	Range32T			mPixels,		//	width of line
						mParentPixels;
		
	Str31				mName;

	virtual vector<TabRecord>::const_iterator
						FindTab(FixedT inIndent) const;
	virtual	Int32		FindTabRepetition(
								const TabRecord	&inTab,
								FixedT			inIndent) const;

	virtual void		MakeSelfSpecifier(
								AEDesc		&inSuperSpecifier,
								AEDesc		&outSelfSpecifier) const;
};