blob: 9190252fd30a0bbcc0cc687e8b5f506a3a51a2a2 [file] [log] [blame]
/*
* 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