1/* 2 * Copyright (C) 2005 Apple Computer, Inc. All rights reserved. 3 * Copyright (C) 2006 Nefaur Khandker <nefaurk@gmail.com> All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#import "DrawTestToolbarController.h" 28 29enum 30{ 31 ToolbarBrowseToolTag = 0, 32 ToolbarPanToolTag, 33 ToolbarZoomToolTag, 34 35 ToolbarPointerToolTag, 36 ToolbarLineToolTag, 37 ToolbarRectangleToolTag, 38 ToolbarElipseToolTag, 39 ToolbarTriangleToolTag, 40 ToolbarPolyLineToolTag, 41 ToolbarArcToolTag, 42 43 ToolbarDeleteSelectionTag, 44 45 ToolbarMoveForwardTag, 46 ToolbarMoveBackwardTag, 47 ToolbarMoveToFrontTag, 48 ToolbarMoveToBackTag, 49 ToolbarMiscItem 50}; 51 52// Constants 53NSString *ToolbarIdentifier = @"Main Document Toolbar"; 54 55NSString *ToolbarBrowseToolIdentifier = @"Browse"; 56NSString *ToolbarPanToolIdentifier = @"Pan"; 57NSString *ToolbarZoomToolIdentifier = @"Zoom"; 58 59NSString *ToolbarPointerToolIdentifier = @"Pointer"; 60NSString *ToolbarRectangleToolIdentifier = @"Rectangle"; 61NSString *ToolbarElipseToolIdentifier = @"Oval"; 62NSString *ToolbarTriangleToolIdentifier = @"Triangle"; 63NSString *ToolbarPolyLineToolIdentifier = @"PolyLine"; 64NSString *ToolbarArcToolIdentifier = @"Arc"; 65 66NSString *ToolbarDeleteShapeIdentifier = @"Delete"; 67NSString *ToolbarMoveForwardIdentifier = @"Forward"; 68NSString *ToolbarMoveBackwardIdentifier = @"Backward"; 69NSString *ToolbarMoveToFrontIdentifier = @"Front"; 70NSString *ToolbarMoveToBackIdentifier = @"Back"; 71 72NSString *ToolbarPointerToolImage = @"Toolbar_Pointer"; 73NSString *ToolbarRectangleToolImage = @"Toolbar_Rectangle"; 74NSString *ToolbarElipseToolImage = @"Toolbar_Oval"; 75NSString *ToolbarTriangleToolImage = @"Toolbar_Triangle"; 76 77NSString *ToolbarDeleteShapeImage = @"Toolbar_Delete"; 78NSString *ToolbarMoveForwardImage = @"Toolbar_Forward"; 79NSString *ToolbarMoveBackwardImage = @"Toolbar_Backward"; 80NSString *ToolbarMoveToFrontImage = @"Toolbar_Front"; 81NSString *ToolbarMoveToBackImage = @"Toolbar_Back"; 82 83@interface DrawTestToolbarController (InternalMethods) 84- (void)setupToolbar; 85- (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image withTag:(int)tag; 86- (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image; 87- (void)addToolbarItem:(NSString *)identifier 88 withLabel:(NSString *)label 89 withPaletteLabel:(NSString *)paletteLabel 90 withImage:(NSString *)imageName 91 withToolTip:(NSString *)toolTip 92 withTag:(int)tag; 93@end 94 95 96@implementation DrawTestToolbarController 97 98- (id)initWithDrawView:(WebView *)drawView 99{ 100 if (self = [super init]){ 101 _drawView = [drawView retain]; 102 [self setupToolbar]; // could be done lazily. 103 } 104 return self; 105} 106 107- (void)dealloc 108{ 109 [_toolbarItems release]; 110 [super dealloc]; 111} 112 113 114- (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image withTag:(int)tag 115{ 116 117 [self addToolbarItem:identifier 118 withLabel:identifier 119 withPaletteLabel:identifier 120 withImage:image 121 withToolTip:identifier 122 withTag:tag]; 123} 124 125- (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image 126{ 127 [self addToolbarItemWithIdentifier:identifier withImage:image withTag:ToolbarMiscItem]; 128} 129 130- (void)addToolbarItem:(NSString *)identifier 131 withLabel:(NSString *)label 132 withPaletteLabel:(NSString *)paletteLabel 133 withImage:(NSString *)imageName 134 withToolTip:(NSString *)toolTip 135 withTag:(int)tag 136{ 137 NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:identifier] autorelease]; 138 139 [item setLabel:label]; 140 [item setPaletteLabel:paletteLabel]; 141 [item setToolTip:toolTip]; 142 [item setImage:[NSImage imageNamed:imageName]]; 143 [item setTarget:self]; 144 [item setAction:@selector(clickedToolbarItem:)]; 145 [item setTag:tag]; 146 147 [_toolbarItems setObject:item forKey:identifier]; 148} 149 150- (void)setupToolbar 151{ 152 _toolbarItems = [[NSMutableDictionary alloc] init]; 153 154 [self addToolbarItemWithIdentifier:ToolbarBrowseToolIdentifier 155 withImage:ToolbarPointerToolImage 156 withTag:ToolbarBrowseToolTag]; 157 [[_toolbarItems objectForKey:ToolbarBrowseToolIdentifier] setImage:[[NSCursor pointingHandCursor] image]]; 158 159 [self addToolbarItemWithIdentifier:ToolbarPanToolIdentifier 160 withImage:ToolbarPointerToolImage 161 withTag:ToolbarPanToolTag]; 162 [[_toolbarItems objectForKey:ToolbarPanToolIdentifier] setImage:[[NSCursor openHandCursor] image]]; 163 164 [self addToolbarItemWithIdentifier:ToolbarZoomToolIdentifier 165 withImage:ToolbarPointerToolImage 166 withTag:ToolbarZoomToolTag]; 167 168 169 [self addToolbarItemWithIdentifier:ToolbarPointerToolIdentifier 170 withImage:ToolbarPointerToolImage 171 withTag:ToolbarPointerToolTag]; 172 173 [self addToolbarItemWithIdentifier:ToolbarRectangleToolIdentifier 174 withImage:ToolbarRectangleToolImage 175 withTag:ToolbarRectangleToolTag]; 176 177 [self addToolbarItemWithIdentifier:ToolbarElipseToolIdentifier 178 withImage:ToolbarElipseToolImage 179 withTag:ToolbarElipseToolTag]; 180 181 [self addToolbarItemWithIdentifier:ToolbarTriangleToolIdentifier 182 withImage:ToolbarTriangleToolImage 183 withTag:ToolbarTriangleToolTag]; 184 185 [self addToolbarItemWithIdentifier:ToolbarDeleteShapeIdentifier 186 withImage:ToolbarDeleteShapeImage 187 withTag:ToolbarDeleteSelectionTag]; 188 189 [self addToolbarItemWithIdentifier:ToolbarMoveForwardIdentifier 190 withImage:ToolbarMoveForwardImage 191 withTag:ToolbarMoveForwardTag]; 192 193 [self addToolbarItemWithIdentifier:ToolbarMoveBackwardIdentifier 194 withImage:ToolbarMoveBackwardImage 195 withTag:ToolbarMoveBackwardTag]; 196 197 [self addToolbarItemWithIdentifier:ToolbarMoveToFrontIdentifier 198 withImage:ToolbarMoveToFrontImage 199 withTag:ToolbarMoveToFrontTag]; 200 201 [self addToolbarItemWithIdentifier:ToolbarMoveToBackIdentifier 202 withImage:ToolbarMoveToBackImage 203 withTag:ToolbarMoveToBackTag]; 204 205 206 NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier:ToolbarIdentifier] autorelease]; 207 208 [toolbar setAllowsUserCustomization:YES]; 209 [toolbar setAutosavesConfiguration:YES]; 210 [toolbar setDisplayMode:NSToolbarDisplayModeIconAndLabel]; 211 [toolbar setSizeMode:NSToolbarSizeModeSmall]; 212 [toolbar setDisplayMode:NSToolbarDisplayModeLabelOnly]; 213 [toolbar setDelegate:self]; 214 [toolbar setSelectedItemIdentifier:ToolbarBrowseToolIdentifier]; 215 [toolbar setVisible:NO]; 216 217 [[_drawView window] setToolbar:toolbar]; 218} 219 220 221- (void)clickedToolbarItem:(id)sender 222{ 223 int tag = [sender tag]; 224 225 switch(tag) { 226#if 0 227 case ToolbarBrowseToolTag: 228 [_drawView setToolMode:DrawViewToolBrowse]; 229 break; 230 case ToolbarPanToolTag: 231 [_drawView setToolMode:DrawViewToolPan]; 232 break; 233 case ToolbarZoomToolTag: 234 [_drawView setToolMode:DrawViewToolZoom]; 235 break; 236 case ToolbarPointerToolTag: 237 [_drawView setToolMode:DrawViewToolArrow]; 238 break; 239 case ToolbarRectangleToolTag: 240 [_drawView setToolMode:DrawViewToolRectangle]; 241 break; 242 case ToolbarElipseToolTag: 243 [_drawView setToolMode:DrawViewToolElipse]; 244 break; 245 case ToolbarTriangleToolTag: 246 [_drawView setToolMode:DrawViewToolTriangle]; 247 break; 248 case ToolbarMoveForwardTag: 249 [_drawView moveSelectionForward:sender]; 250 break; 251 case ToolbarMoveBackwardTag: 252 [_drawView moveSelectionBackward:sender]; 253 break; 254 case ToolbarDeleteSelectionTag: 255 [_drawView deleteSelection:sender]; 256 break; 257#endif 258 default: 259 NSLog(@"Toolbar item: %i not implemented!", tag); 260 } 261 262 [_drawView setNeedsDisplay:YES]; 263} 264 265// NSToolbar delegate methods 266- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdent 267 willBeInsertedIntoToolbar:(BOOL)willBeInserted 268{ 269 NSToolbarItem * toolbarItem = [_toolbarItems objectForKey:itemIdent]; 270 271 if( toolbarItem == nil ) 272 toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdent] autorelease]; 273 274 return toolbarItem; 275} 276 277- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar 278{ 279 return [NSArray arrayWithObjects: 280 ToolbarBrowseToolIdentifier, 281 ToolbarPanToolIdentifier, 282 ToolbarZoomToolIdentifier, 283 ToolbarPointerToolIdentifier, 284 ToolbarRectangleToolIdentifier, 285 ToolbarElipseToolIdentifier, 286 ToolbarTriangleToolIdentifier, 287 ToolbarDeleteShapeIdentifier, 288 NSToolbarShowColorsItemIdentifier, 289 ToolbarMoveForwardIdentifier, 290 ToolbarMoveBackwardIdentifier, 291 ToolbarMoveToFrontIdentifier, 292 ToolbarMoveToBackIdentifier, 293 NSToolbarCustomizeToolbarItemIdentifier, 294 NSToolbarFlexibleSpaceItemIdentifier, 295 NSToolbarSpaceItemIdentifier, 296 NSToolbarSeparatorItemIdentifier, nil]; 297} 298 299- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar 300{ 301 return [NSArray arrayWithObjects: 302 ToolbarBrowseToolIdentifier, 303 ToolbarPanToolIdentifier, 304 //ToolbarZoomToolIdentifier, 305 NSToolbarFlexibleSpaceItemIdentifier, 306 ToolbarPointerToolIdentifier, 307 ToolbarRectangleToolIdentifier, 308 ToolbarElipseToolIdentifier, 309 //ToolbarTriangleToolIdentifier, 310 //NSToolbarSeparatorItemIdentifier, 311 ToolbarDeleteShapeIdentifier, 312 //ToolbarMoveForwardIdentifier, 313 //ToolbarMoveBackwardIdentifier, 314 //ToolbarMoveToFrontIdentifier, 315 //ToolbarMoveToBackIdentifier, 316 NSToolbarSeparatorItemIdentifier, 317 //NSToolbarShowColorsItemIdentifier, 318 //NSToolbarFlexibleSpaceItemIdentifier, 319 NSToolbarCustomizeToolbarItemIdentifier, 320 nil]; 321} 322 323- (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar 324{ 325 return [NSArray arrayWithObjects: 326 ToolbarBrowseToolIdentifier, 327 ToolbarPanToolIdentifier, 328 ToolbarZoomToolIdentifier, 329 ToolbarPointerToolIdentifier, 330 ToolbarRectangleToolIdentifier, 331 ToolbarElipseToolIdentifier, 332 ToolbarTriangleToolIdentifier, 333 nil]; 334} 335 336- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem 337{ 338 BOOL enabled = YES; 339 340#if 0 341 switch([theItem tag]) { 342 case ToolbarMoveForwardTag: 343 case ToolbarMoveBackwardTag: 344 case ToolbarMoveToFrontTag: 345 case ToolbarMoveToBackTag: 346 case ToolbarDeleteSelectionTag: 347 enabled = ([[_drawView selectedCanvasItems] count] != 0); 348 } 349#endif 350 351 return enabled; 352} 353 354@end 355