/**************************************************************/
/**  C++ code Copyright (C) Nick V. King <nking@eworld.com>  **/
/**************************************************************/

#ifndef SMMACMODEH
#define SMMACMODEH

#include <sm_mode.h>
#include <set.h>
#include <DREstring.h>
#include <surf_mac.h>

#include <gui_mac.h>
#include <utils_mac.h>
#include <headers_mac.h>
#include <ids_mac.h>

class mac_mode;

extern mac_mode* mmode;

class mac_mode : public operating_mode
{
	macscreen* Offscreen;
    
	void verbose(DREstring);

public:
	mac_mode(const double);
	~mac_mode(void);

	void	_pol_contrast(void){}
	void	_pol_threshold(void){}
	   
	void	error(DREstring);
	void	display_status(DREstring&);
	void	clear_status(void);
	void	busy(DREstring&);
	void	unbusy(void);
	void	display_progress(const int);
	void	undisplay_progress(void);
	void	execute(void);
	
	void	DisplayKernelMessage(Str255, RGBColor);
	
	void	InitializeLocals(void);
	void	UpdateLocals(Boolean);
	void	SetGlobals(void);
	
	void	SetUpFieldRecord(toolbarFieldRec*);
	void	DrawToolbar(void);
	void	DrawStatusbar(void);
	
	void	ResizeOffscreen(void);
	
	void	NewEditField(short, Point, Boolean);
	void	DisposeEditField(Boolean);
	void	UpdateEditField(void);
	void	ActivateEditField(Boolean);
	void	HandleEditFieldIdle(void);
	void	HandleEditFieldEditCommands(short);
	void	HandleEditFieldMouseDown(short, Point, short);
	void	HandleEditFieldTab(short);
	void	HandleEditFieldKeyDown(short, short);
	void	HandleEditFieldButtons(toolbarFieldRec*, Point, Rect, Rect);
	void	HandleEditFieldPopup(toolbarFieldRec*, Point);
	void	HandleButtonMouseDown(toolbarFieldRec*, Point);
	
	void	DrawRangeField(Rect, int, int);
	void	CursorInIgnore(int);
	void	HandleIgnore(Rect, int, DialogPtr);
	
	void	HandleToolbarMouseDown(Point, short);
	void	HandleStatusbarMouseDown(Point, short);
	
	void	UpdateWindow(WindowPtr);
	void	ActivateWindow(WindowPtr, Boolean);
	
	void	UpdateScrollBars(void);
	
	void	SetValues(DialogPtr, Boolean);
	void	GetValues(DialogPtr);
	Boolean	HandleDialog(short);
	
	void	AppleMenu(short);
	OSErr	AppleAbout(Boolean);
	
	void	FileMenu(short);
	OSErr	FileOpenAE(AppleEvent*, Boolean);
	void	FileOpen(void);
	void	FileOpenFSSpec(FSSpec*);
	void	FileClose(Boolean);
	void	FileSaveFileType(void);
	void	FileBin(void);
	void	FileExport(void);
	void	FilePageSetup(void);
	void	FilePrint(Boolean);
	void	FilePrintAllOrRemainder(Boolean, Boolean);
	OSErr	FileQuit(Boolean);
	
	void	EditMenu(short);
	Boolean	EditCopy(void);
	void	EditClear(void);
	
	void	PlotMenu(short);
	void	PlotMenuItems(short);
	
	void	SettingsMenu(short);
	
	void	OptionsMenu(short);
	
	void	FileTypeSubmenu(short, Boolean);
	
	void	PlotModeSubmenu(short, Boolean);
	void	SpacecraftModeSubmenu(short, Boolean);
	void	PRAModeSubmenu(short, Boolean);
	
	void	BrightnessLevelSubmenu(short);
	void	SaturationLevelSubmenu(short);
	
	void	PlotSizeSubmenu(short);

	void	FontSubmenu(short);
	void	DataColorSubmenu(short);
	void	BackgroundColorSubmenu(short);
	
	void	ToolbarMenu(short);
	
	void	CommentSubmenu(short);
	
	void	TomPlotRange(void);
	
	void	UpdateMenuItems(short);
	void	UpdateModeMenus(Boolean);
	void	DoCommand(long, short, Boolean);
	
	void	DoContent(WindowPtr, Point, short);
	void	DoGrowWindow(WindowPtr, Point);
	void	DoZoomWindow(WindowPtr, Point, short, short);
	void	DoCloseWindow(WindowPtr, Point);
	
	void	HandleNullEvent(EventRecord*);
	void	HandleMouseDownEvent(EventRecord*);
	void	HandleKeyDownEvent(EventRecord*);
	void	HandleActivateEvent(EventRecord*);
	void	HandleUpdateEvent(EventRecord*);
	void	HandleDiskEvent(EventRecord*);
	void	HandleOSEvent(EventRecord*);
	void	HandleEvent(void);
	
	void	AdjustCursor(Boolean);
	
	Boolean	Personalize(void);
	
	Boolean	SetUpInterface(void);
};

pascal void*	FileOpenThread(void*);
pascal void*	FileReplotToPrinterThread(void*);
pascal void*	PlotMenuItemsThread(void*);

pascal OSErr	OpenApplicationHandler(AppleEvent*, AppleEvent*, long);
pascal OSErr	OpenDocumentsHandler(AppleEvent*, AppleEvent*, long);
pascal OSErr	PrintDocumentsHandler(AppleEvent*, AppleEvent*, long);
pascal OSErr	QuitApplicationHandler(AppleEvent*, AppleEvent*, long);
pascal void		TrackScrollbar(ControlHandle, short);

pascal short	CustomDialogHook(short, DialogPtr, Ptr);
pascal Boolean	CustomFileFilter(ParmBlkPtr, void*);

pascal Boolean	NormalFilter(DialogPtr, EventRecord*, short*);
pascal Boolean	PersonalizeFilter(DialogPtr, EventRecord*, short*);
pascal Boolean	IgnoredDataFilter(DialogPtr, EventRecord*, short*);
pascal void		IgnoredDataIdleProcedure(DialogPtr, Point);
pascal void		HiliteButton(DialogPtr, short);
pascal void		CheckBox(DialogPtr, short, Boolean, Boolean);
pascal void		OutlineButton(DialogPtr, short);
pascal void		DottedLine(DialogPtr, short);
pascal void		IgnoredDataUserItem(DialogPtr, short);

#endif

/***********/
/**  End  **/
/***********/