webengine/osswebengine/WebKitTools/DrawTest/DrawTestToolbarController.m
changeset 0 dd21522fd290
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKitTools/DrawTest/DrawTestToolbarController.m	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,354 @@
+/*
+ * 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