//
//  OAConfigurableColumnOutlineView.h
//  OmniAppKit
//
//  Created by Pierce T. Wetter III on 4/24/07.
//  Copyright 2007 __MyCompanyName__. All rights reserved.
//

#import <Cocoa/Cocoa.h>
//#import "OAExtendedOutlineView.h"


@interface OAConfigurableColumnOutlineView : NSOutlineView {
    NSMenu *configurationMenu;
    struct {
        unsigned int menuString     : 1;
        unsigned int addSeparator   : 1;
        unsigned int allowToggle    : 1;
        unsigned int willActivate   : 1;
        unsigned int didActivate    : 1;
        unsigned int willDeactivate : 1;
        unsigned int didDeactivate  : 1;
    } confDataSourceFlags;
	NSArray *originalTableColumns;
	
}

- (NSMenu *) configurationMenu;

- (NSArray *)inactiveTableColumns;

- (void)activateTableColumn:(NSTableColumn *)column;
- (void)deactivateTableColumn:(NSTableColumn *)column;
- (void)toggleTableColumn:(NSTableColumn *)column;
- (BOOL)isTableColumnActive:(NSTableColumn *)column;

@end

// These are all optional
@interface NSObject (OAConfigurableColumnOutlineViewExtendedDataSource)

// Returns a more detailed description of the table column (possibly wider than the header cell of the column should be).
- (NSString *) configurableColumnOutlineView: (OAConfigurableColumnOutlineView *) tableView
                       menuStringForColumn: (NSTableColumn *) column;

	// If this return NO, the table column will not be present in the configuration menu (and thus cannot be disabled).
- (id) configurableColumnOutlineView: (OAConfigurableColumnOutlineView *) tableView
		 shouldAllowTogglingColumn: (NSTableColumn *) column;

- (BOOL) configurableColumnOutlineView: (OAConfigurableColumnOutlineView *) tableView
       shouldAddSeparatorAfterColumn: (NSTableColumn *) column;

- (void) configurableColumnOutlineView: (OAConfigurableColumnOutlineView *) tableView
                  willActivateColumn: (NSTableColumn *) column;
- (void) configurableColumnOutlineView: (OAConfigurableColumnOutlineView *) tableView
                   didActivateColumn: (NSTableColumn *) column;

- (void) configurableColumnOutlineView: (OAConfigurableColumnOutlineView *) tableView
                willDeactivateColumn: (NSTableColumn *) column;
- (void) configurableColumnOutlineView: (OAConfigurableColumnOutlineView *) tableView
                 didDeactivateColumn: (NSTableColumn *) column;

@end
