/*
 * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
 * Copyright (C) 2006 Nefaur Khandker <nefaurk@gmail.com>  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 */

#import "DrawTestToolbarController.h"

enum
{
    ToolbarBrowseToolTag = 0,
    ToolbarPanToolTag,
    ToolbarZoomToolTag,
    
    ToolbarPointerToolTag,
    ToolbarLineToolTag,
    ToolbarRectangleToolTag,
    ToolbarElipseToolTag,
    ToolbarTriangleToolTag,
    ToolbarPolyLineToolTag,
    ToolbarArcToolTag,
    
    ToolbarDeleteSelectionTag,
    
    ToolbarMoveForwardTag,
    ToolbarMoveBackwardTag,
    ToolbarMoveToFrontTag,
    ToolbarMoveToBackTag,
    ToolbarMiscItem
};

// Constants
NSString *ToolbarIdentifier = @"Main Document Toolbar";

NSString *ToolbarBrowseToolIdentifier = @"Browse";
NSString *ToolbarPanToolIdentifier = @"Pan";
NSString *ToolbarZoomToolIdentifier = @"Zoom";

NSString *ToolbarPointerToolIdentifier = @"Pointer";
NSString *ToolbarRectangleToolIdentifier = @"Rectangle";
NSString *ToolbarElipseToolIdentifier = @"Oval";
NSString *ToolbarTriangleToolIdentifier = @"Triangle";
NSString *ToolbarPolyLineToolIdentifier = @"PolyLine";
NSString *ToolbarArcToolIdentifier = @"Arc";

NSString *ToolbarDeleteShapeIdentifier = @"Delete";
NSString *ToolbarMoveForwardIdentifier = @"Forward";
NSString *ToolbarMoveBackwardIdentifier = @"Backward";
NSString *ToolbarMoveToFrontIdentifier = @"Front";
NSString *ToolbarMoveToBackIdentifier = @"Back";

NSString *ToolbarPointerToolImage = @"Toolbar_Pointer";
NSString *ToolbarRectangleToolImage = @"Toolbar_Rectangle";
NSString *ToolbarElipseToolImage = @"Toolbar_Oval";
NSString *ToolbarTriangleToolImage = @"Toolbar_Triangle";

NSString *ToolbarDeleteShapeImage = @"Toolbar_Delete";
NSString *ToolbarMoveForwardImage = @"Toolbar_Forward";
NSString *ToolbarMoveBackwardImage = @"Toolbar_Backward";
NSString *ToolbarMoveToFrontImage = @"Toolbar_Front";
NSString *ToolbarMoveToBackImage = @"Toolbar_Back";

@interface DrawTestToolbarController (InternalMethods)
- (void)setupToolbar;
- (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image withTag:(int)tag;
- (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image;
- (void)addToolbarItem:(NSString *)identifier
             withLabel:(NSString *)label
      withPaletteLabel:(NSString *)paletteLabel
             withImage:(NSString *)imageName
           withToolTip:(NSString *)toolTip
               withTag:(int)tag;
@end


@implementation DrawTestToolbarController

- (id)initWithDrawView:(WebView *)drawView
{
    if (self = [super init]){
        _drawView = [drawView retain];
        [self setupToolbar]; // could be done lazily.
    }
    return self;
}

- (void)dealloc
{
    [_toolbarItems release];
    [super dealloc];
}


- (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image withTag:(int)tag
{
    
    [self addToolbarItem:identifier
               withLabel:identifier
        withPaletteLabel:identifier
               withImage:image
             withToolTip:identifier
                 withTag:tag];
}

- (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image
{
    [self addToolbarItemWithIdentifier:identifier withImage:image withTag:ToolbarMiscItem];
}

- (void)addToolbarItem:(NSString *)identifier
             withLabel:(NSString *)label
      withPaletteLabel:(NSString *)paletteLabel
             withImage:(NSString *)imageName
           withToolTip:(NSString *)toolTip
               withTag:(int)tag
{
    NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:identifier] autorelease];
    
    [item setLabel:label];
    [item setPaletteLabel:paletteLabel];
    [item setToolTip:toolTip];
    [item setImage:[NSImage imageNamed:imageName]];
    [item setTarget:self];
    [item setAction:@selector(clickedToolbarItem:)];
    [item setTag:tag];
    
    [_toolbarItems setObject:item forKey:identifier];
}

- (void)setupToolbar
{
    _toolbarItems = [[NSMutableDictionary alloc] init];
    
    [self addToolbarItemWithIdentifier:ToolbarBrowseToolIdentifier 
                             withImage:ToolbarPointerToolImage
                               withTag:ToolbarBrowseToolTag];
    [[_toolbarItems objectForKey:ToolbarBrowseToolIdentifier] setImage:[[NSCursor pointingHandCursor] image]];
    
    [self addToolbarItemWithIdentifier:ToolbarPanToolIdentifier 
                             withImage:ToolbarPointerToolImage
                               withTag:ToolbarPanToolTag];
    [[_toolbarItems objectForKey:ToolbarPanToolIdentifier] setImage:[[NSCursor openHandCursor] image]];
    
    [self addToolbarItemWithIdentifier:ToolbarZoomToolIdentifier 
                             withImage:ToolbarPointerToolImage
                               withTag:ToolbarZoomToolTag];
    
    
    [self addToolbarItemWithIdentifier:ToolbarPointerToolIdentifier 
                             withImage:ToolbarPointerToolImage
                               withTag:ToolbarPointerToolTag];
    
    [self addToolbarItemWithIdentifier:ToolbarRectangleToolIdentifier 
                             withImage:ToolbarRectangleToolImage
                               withTag:ToolbarRectangleToolTag];
    
    [self addToolbarItemWithIdentifier:ToolbarElipseToolIdentifier 
                             withImage:ToolbarElipseToolImage 
                               withTag:ToolbarElipseToolTag];
    
    [self addToolbarItemWithIdentifier:ToolbarTriangleToolIdentifier 
                             withImage:ToolbarTriangleToolImage
                               withTag:ToolbarTriangleToolTag];
    
    [self addToolbarItemWithIdentifier:ToolbarDeleteShapeIdentifier 
                             withImage:ToolbarDeleteShapeImage
                               withTag:ToolbarDeleteSelectionTag];
    
    [self addToolbarItemWithIdentifier:ToolbarMoveForwardIdentifier 
                             withImage:ToolbarMoveForwardImage
                               withTag:ToolbarMoveForwardTag];
    
    [self addToolbarItemWithIdentifier:ToolbarMoveBackwardIdentifier 
                             withImage:ToolbarMoveBackwardImage
                               withTag:ToolbarMoveBackwardTag];
    
    [self addToolbarItemWithIdentifier:ToolbarMoveToFrontIdentifier 
                             withImage:ToolbarMoveToFrontImage
                               withTag:ToolbarMoveToFrontTag];
    
    [self addToolbarItemWithIdentifier:ToolbarMoveToBackIdentifier 
                             withImage:ToolbarMoveToBackImage
                               withTag:ToolbarMoveToBackTag];
    
    
    NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier:ToolbarIdentifier] autorelease];
    
    [toolbar setAllowsUserCustomization:YES];
    [toolbar setAutosavesConfiguration:YES];
    [toolbar setDisplayMode:NSToolbarDisplayModeIconAndLabel];
    [toolbar setSizeMode:NSToolbarSizeModeSmall];
    [toolbar setDisplayMode:NSToolbarDisplayModeLabelOnly];
    [toolbar setDelegate:self];
    [toolbar setSelectedItemIdentifier:ToolbarBrowseToolIdentifier];
    [toolbar setVisible:NO];
    
    [[_drawView window] setToolbar:toolbar];
}


- (void)clickedToolbarItem:(id)sender
{
    int tag = [sender tag];
    
    switch(tag) {
#if 0
        case ToolbarBrowseToolTag:
            [_drawView setToolMode:DrawViewToolBrowse];
            break;
        case ToolbarPanToolTag:
            [_drawView setToolMode:DrawViewToolPan];
            break;
        case ToolbarZoomToolTag:
            [_drawView setToolMode:DrawViewToolZoom];
            break;
        case ToolbarPointerToolTag:
            [_drawView setToolMode:DrawViewToolArrow];
            break;
        case ToolbarRectangleToolTag:
            [_drawView setToolMode:DrawViewToolRectangle];
            break;
        case ToolbarElipseToolTag:
            [_drawView setToolMode:DrawViewToolElipse];
            break;
        case ToolbarTriangleToolTag:
            [_drawView setToolMode:DrawViewToolTriangle];
            break;
        case ToolbarMoveForwardTag:
            [_drawView moveSelectionForward:sender];
            break;
        case ToolbarMoveBackwardTag:
            [_drawView moveSelectionBackward:sender];
            break;
        case ToolbarDeleteSelectionTag:
            [_drawView deleteSelection:sender];
            break;
#endif
        default:
            NSLog(@"Toolbar item: %i not implemented!", tag);
    }
    
    [_drawView setNeedsDisplay:YES];
}

// NSToolbar delegate methods
- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdent 
 willBeInsertedIntoToolbar:(BOOL)willBeInserted
{ 
    NSToolbarItem *    toolbarItem = [_toolbarItems objectForKey:itemIdent];
    
    if( toolbarItem == nil )
        toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdent] autorelease];
    
    return toolbarItem;
}

- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
{
    return [NSArray arrayWithObjects:
        ToolbarBrowseToolIdentifier,
        ToolbarPanToolIdentifier,
        ToolbarZoomToolIdentifier,
        ToolbarPointerToolIdentifier,
        ToolbarRectangleToolIdentifier,
        ToolbarElipseToolIdentifier,
        ToolbarTriangleToolIdentifier,
        ToolbarDeleteShapeIdentifier, 
        NSToolbarShowColorsItemIdentifier,
        ToolbarMoveForwardIdentifier,
        ToolbarMoveBackwardIdentifier,
        ToolbarMoveToFrontIdentifier,
        ToolbarMoveToBackIdentifier,
        NSToolbarCustomizeToolbarItemIdentifier,
        NSToolbarFlexibleSpaceItemIdentifier, 
        NSToolbarSpaceItemIdentifier, 
        NSToolbarSeparatorItemIdentifier, nil];
}

- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar
{    
    return [NSArray arrayWithObjects:
        ToolbarBrowseToolIdentifier,
        ToolbarPanToolIdentifier,
        //ToolbarZoomToolIdentifier,
        NSToolbarFlexibleSpaceItemIdentifier,
        ToolbarPointerToolIdentifier,
        ToolbarRectangleToolIdentifier,
        ToolbarElipseToolIdentifier,
        //ToolbarTriangleToolIdentifier, 
        //NSToolbarSeparatorItemIdentifier,
        ToolbarDeleteShapeIdentifier, 
        //ToolbarMoveForwardIdentifier,
        //ToolbarMoveBackwardIdentifier,
        //ToolbarMoveToFrontIdentifier,
        //ToolbarMoveToBackIdentifier, 
        NSToolbarSeparatorItemIdentifier,
        //NSToolbarShowColorsItemIdentifier, 
        //NSToolbarFlexibleSpaceItemIdentifier, 
        NSToolbarCustomizeToolbarItemIdentifier,
        nil];
}

- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
{
    return [NSArray arrayWithObjects:
        ToolbarBrowseToolIdentifier,
        ToolbarPanToolIdentifier,
        ToolbarZoomToolIdentifier,    
        ToolbarPointerToolIdentifier,
        ToolbarRectangleToolIdentifier,
        ToolbarElipseToolIdentifier,
        ToolbarTriangleToolIdentifier,
        nil];
}

- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem
{
    BOOL enabled = YES;

#if 0    
    switch([theItem tag]) {
        case ToolbarMoveForwardTag:
        case ToolbarMoveBackwardTag:
        case ToolbarMoveToFrontTag:
        case ToolbarMoveToBackTag:
        case ToolbarDeleteSelectionTag:
            enabled = ([[_drawView selectedCanvasItems] count] != 0);
    }
#endif
    
    return enabled;
}

@end