/* TrackWindow.h */

#ifndef Included_TrackWindow_h
#define Included_TrackWindow_h

/* TrackWindow module depends on */
/* MiscInfo.h */
/* Audit */
/* Debug */
/* Definitions */
/* Scroll */
/* Screen */
/* EventLoop */
/* Menus */
/* MainWindowStuff */
/* TrackObject */
/* TrackList */
/* WindowDispatcher */
/* Memory */
/* IconButton */
/* NoteButtonImages */
/* GrowIcon */
/* Main */
/* TrackView */
/* NoteObject */
/* Array */
/* TrackAttributeDialog */
/* CommandChooser */
/* DataMunging */
/* GlobalWindowMenuList */
/* SampleDeviceOutput */
/* Alert */
/* NumberDialog */
/* DiskFileOutput */

#include "Screen.h"
#include "Menus.h"
#include "EventLoop.h"

struct TrackWindowRec;
typedef struct TrackWindowRec TrackWindowRec;

/* forward declarations */
struct TrackObjectRec;
struct MainWindowRec;
struct TrackListRec;

/* create a new track editing window */
TrackWindowRec*					NewTrackWindow(struct TrackObjectRec* TrackObject,
													struct MainWindowRec* MainWindow,
													struct TrackListRec* TrackList, short WinX, short WinY,
													short WinWidth, short WinHeight);

/* dispose of the track editing window. */
void										DisposeTrackWindow(TrackWindowRec* Window);

/* bring the track window to the top and give it the focus */
void										TrackWindowBringToTop(TrackWindowRec* Window);

/* event handling routines */
void										TrackWindowDoIdle(TrackWindowRec* Window,
													MyBoolean CheckCursorFlag, OrdType XLoc, OrdType YLoc,
													ModifierFlags Modifiers);
void										TrackWindowBecomeActive(TrackWindowRec* Window);
void										TrackWindowBecomeInactive(TrackWindowRec* Window);
void										TrackWindowJustResized(TrackWindowRec* Window);
void										TrackWindowDoMouseDown(OrdType XLoc, OrdType YLoc,
													ModifierFlags Modifiers, TrackWindowRec* Window);
void										TrackWindowDoKeyDown(unsigned char KeyCode,
													ModifierFlags Modifiers, TrackWindowRec* Window);
void										TrackWindowClose(TrackWindowRec* Window);
void										TrackWindowUpdator(TrackWindowRec* Window);
void										TrackWindowMenuSetup(TrackWindowRec* Window);
void										TrackWindowDoMenuCommand(TrackWindowRec* Window,
													MenuItemType* MenuItem);

/* update the positioning of the vertical scroll bar and redraw */
void										TrackWindowUpdateVScrollBar(TrackWindowRec* Window);

/* update the positioning of the horizontal scroll bar and redraw */
void										TrackWindowUpdateHScrollBar(TrackWindowRec* Window);

/* update both scrollbars */
void										TrackWindowUpdateScrollBars(TrackWindowRec* Window);

/* reset the state of the note attribute buttons according to the attribute flags */
void										TrackWindowResetButtons(TrackWindowRec* Window);

/* the name of the file has changed, so update the title bar of the window.  the */
/* NewFilename is a non-null-terminated string.  the caller is responsible for */
/* disposing of it */
void										TrackWindowGlobalNameChange(TrackWindowRec* Window,
													char* NewFilename);

/* reset the title bar even if the filename hasn't changed */
void										TrackWindowResetTitlebar(TrackWindowRec* Window);

/* show the current selection in the window */
void										TrackWindowShowSelection(TrackWindowRec* Window);

#endif
