/* vim: set ft=objc ts=4 nowrap: */
/*
 *	ProjectWindowController.h
 *
 *	Copyright (c) 2002
 *
 *	Author: Andreas Heppel <aheppel@web.de>
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef PROJECTWINDOWCONTROLLER_H_INC
#define PROJECTWINDOWCONTROLLER_H_INC

#include <AppKit/AppKit.h>


@class Project;
@class ProjectWindow;

@interface ProjectWindowController : NSWindowController
{
	id recordButton;
	id trackView;
	id totalLength;
	id openParamsCheckBox;

	// Data
	NSMutableArray *movedTracks;

	NSString *cdRoot;
	NSString *audioRoot;
	NSString *dataRoot;
}

- (id) init;
- (id) initWithWindowNibName: (NSString *) windowNibName;
- (void) dealloc;

//
// action methods
//
- (IBAction) deleteFile: (id)sender;

- (IBAction) runCDrecorder: (id)sender;

- (IBAction)saveDocument: (id)sender;
- (IBAction)saveDocumentAs: (id)sender;
- (IBAction)saveDocumentTo: (id)sender;

- (void) burnerInUse: (id)sender;


//
// access / mutation methods
//

- (long) totalTime;

//
// delegate methods
//
- (BOOL) windowShouldClose: (id) window;
- (void) awakeFromNib;
- (void) windowDidBecomeKey: (NSNotification *) not;

//
// Other methods
//
- (void) displayTotalTime;
- (void) updateWindow;
- (void) updateAudioCDPanel;
- (void) updateTrackInspector;
- (void) enableBurnButton;

//
// class methods
//

@end

@interface ProjectWindowController (DragAndDrop)

- (IBAction) copy: (id) sender;
- (IBAction) cut: (id) sender;
- (IBAction) paste: (id) sender;

- (BOOL) outlineView: (NSOutlineView *)outlineView
		  acceptDrop: (id <NSDraggingInfo>)info
				item: (id)item
		  childIndex: (int)index;

- (BOOL) acceptFilenames: (NSPasteboard *)pBoard
			byOperation: (NSDragOperation)dragOperation
				forIndex: (int)index
				andItem: (id)item;
- (BOOL) acceptAudioCDTracks: (NSPasteboard *)pBoard
				forIndex: (int)index
				andItem: (id)item;
- (BOOL) acceptBurnTracks: (NSPasteboard *)pBoard
				forIndex: (int)index
				andItem: (id)item;

- (BOOL) outlineView: (NSOutlineView *)outlineView
		  writeItems: (NSArray *)items
		toPasteboard: (NSPasteboard *)pboard;

- (id) validRequestorForSendType: (NSString *)sendType
            returnType: (NSString *)returnType;

- (BOOL) readSelectionFromPasteboard:(NSPasteboard *)pboard;

- (void) removeMovedTracks: (BOOL)flag;

@end


@interface ProjectWindowController (OutlineViewDelegation)

- (id) outlineView: (NSOutlineView *)outlineView
			 child: (int)index
			ofItem: (id)item;

- (BOOL) outlineView: (NSOutlineView *)outlineView
	isItemExpandable: (id) item;

- (void) outlineView: (NSOutlineView *)outlineView
     willDisplayCell: (id)aCell
      forTableColumn: (NSTableColumn *)tableColumn
                item: (id)item;

- (int) outlineView: (NSOutlineView *)outlineView 
		numberOfChildrenOfItem: (id)item;

- (id) outlineView: (NSOutlineView *)outlineView 
	objectValueForTableColumn: (NSTableColumn *)tableColumn 
					   byItem: (id)item;

- (void) outlineView: (NSOutlineView *)outlineView
	setObjectValue: (id) newObjectValue
	forTableColumn: (NSTableColumn *)tableColumn
			byItem: (id)item;

@end


#endif


syntax highlighted by Code2HTML, v. 0.9.1