diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKitTools/DrawTest/DrawTestToolbarController.m --- /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 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