Milán Major

netscape-revival

1 branch
Code

lib/mac/VText/Core/User_Interface/VTSMProxy.h

//	===========================================================================
//	VTSMProxy
//
//	Copyright 1996 ViviStar Consulting.
//	===========================================================================

#pragma once

#include	<UAEGizmos.h>

#include	<LTextEngine.h>
#include	<LAttachment.h>
#include	<TextServices.h>
#include 	<TSMTE.h>
#include	<vector.h>

class	VTextView;
class	VTSMProxy;
class	VInlineTSMProxy;
class	VTSMTEProxy;

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

class	WTSMManager
{
public:
	static	void		Initialize(void);
	static	void		Quit(void);
	
	static	VTSMProxy *	GetCurrent(void)				{	return sCurrent;	}
	static	void		SetCurrent(VTSMProxy *inProxy)	{	sCurrent = inProxy;	}

	static	VInlineTSMProxy *
						MakeInlineTSMProxy(VTextView &inTextView);
	static	VTSMTEProxy *
						MakeTSMTEProxy(TEHandle inTEH);
	
protected:
	static pascal OSErr	AEHandlerTSM(
							const AppleEvent	*inAppleEvent,
							AppleEvent			*outReply,
							Int32				inRefCon);

	static Boolean				sTSMPresent;
	static AEEventHandlerUPP	sAEHandler;

	static VTSMProxy*			sCurrent;
};

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

class	VTSMDoEvent
			:	public	LAttachment
{
public:
						VTSMDoEvent(
							MessageT		inMessage = msg_AnyMessage,
							Boolean			inExecuteHost = true);

protected:
	virtual void		ExecuteSelf(
							MessageT		inMessage,
							void			*ioParam);
};

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

class VTSMProxy
{
public:
						VTSMProxy();
	virtual				~VTSMProxy();
	
	virtual void		Activate(void);
	virtual void		Deactivate(void);
	virtual	void		FlushInput(void);

protected:

	TSMDocumentID		mTSMDocID;
	Boolean				mDocIsActive;
};

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

class	VInlineTSMProxy : public VTSMProxy
{
	friend class	WTSMManager;

public:
						VInlineTSMProxy(
							LTextEngine			&inTextEngine,
							VTextView			&inTextView);
						~VInlineTSMProxy();

	virtual	void		FlushInput(void);
	virtual void		DrawHilite(void);

protected:
	virtual void		DrawRangeHilite(
							const TextRangeT	&inRange,
							Int16				inHiliteStyle);

	virtual void		AEUpdate(
							const LAESubDesc	&inAppleEvent,
							LAEStream			&inStream);
	virtual void		AEPos2Offset(
							const LAESubDesc	&inAppleEvent,
							LAEStream			&inStream) const;
	virtual void		AEOffset2Pos(
							const LAESubDesc	&inAppleEvent,
							LAEStream			&inStream) const;

	typedef struct RangeHiliteRec {
		TextRangeT		range;
		Int16			hilite;
	} RangeHiliteRec;
	
	vector<RangeHiliteRec>	mHilites;
	LTextEngine				&mTextEngine;
	TextRangeT				mActiveRange;
	VTextView				&mTextView;
	
};

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

class VTSMTEProxy : public VTSMProxy
{
public:
						VTSMTEProxy(TEHandle inTEHandle);
	virtual				~VTSMTEProxy();
	
protected:

	static pascal void 	PreUpdate(
							TEHandle 	inTEHandle,
							Int32		inRefCon);
	static TSMTEPreUpdateUPP 	sPreUpdateUPP;

	TSMTERecHandle		mTSMTEHandle;
	Int32				mVersion;
	TEHandle			mTEH;
};