2 * Copyright (C) 2005 Apple Computer, Inc. All rights reserved.
3 * Copyright (C) 2006 Nefaur Khandker <nefaurk@gmail.com> All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
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.
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.
27 #import "DrawTestToolbarController.h"
31 ToolbarBrowseToolTag = 0,
35 ToolbarPointerToolTag,
37 ToolbarRectangleToolTag,
39 ToolbarTriangleToolTag,
40 ToolbarPolyLineToolTag,
43 ToolbarDeleteSelectionTag,
45 ToolbarMoveForwardTag,
46 ToolbarMoveBackwardTag,
47 ToolbarMoveToFrontTag,
53 NSString *ToolbarIdentifier = @"Main Document Toolbar";
55 NSString *ToolbarBrowseToolIdentifier = @"Browse";
56 NSString *ToolbarPanToolIdentifier = @"Pan";
57 NSString *ToolbarZoomToolIdentifier = @"Zoom";
59 NSString *ToolbarPointerToolIdentifier = @"Pointer";
60 NSString *ToolbarRectangleToolIdentifier = @"Rectangle";
61 NSString *ToolbarElipseToolIdentifier = @"Oval";
62 NSString *ToolbarTriangleToolIdentifier = @"Triangle";
63 NSString *ToolbarPolyLineToolIdentifier = @"PolyLine";
64 NSString *ToolbarArcToolIdentifier = @"Arc";
66 NSString *ToolbarDeleteShapeIdentifier = @"Delete";
67 NSString *ToolbarMoveForwardIdentifier = @"Forward";
68 NSString *ToolbarMoveBackwardIdentifier = @"Backward";
69 NSString *ToolbarMoveToFrontIdentifier = @"Front";
70 NSString *ToolbarMoveToBackIdentifier = @"Back";
72 NSString *ToolbarPointerToolImage = @"Toolbar_Pointer";
73 NSString *ToolbarRectangleToolImage = @"Toolbar_Rectangle";
74 NSString *ToolbarElipseToolImage = @"Toolbar_Oval";
75 NSString *ToolbarTriangleToolImage = @"Toolbar_Triangle";
77 NSString *ToolbarDeleteShapeImage = @"Toolbar_Delete";
78 NSString *ToolbarMoveForwardImage = @"Toolbar_Forward";
79 NSString *ToolbarMoveBackwardImage = @"Toolbar_Backward";
80 NSString *ToolbarMoveToFrontImage = @"Toolbar_Front";
81 NSString *ToolbarMoveToBackImage = @"Toolbar_Back";
83 @interface DrawTestToolbarController (InternalMethods)
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
96 @implementation DrawTestToolbarController
98 - (id)initWithDrawView:(WebView *)drawView
100 if (self = [super init]){
101 _drawView = [drawView retain];
102 [self setupToolbar]; // could be done lazily.
109 [_toolbarItems release];
114 - (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image withTag:(int)tag
117 [self addToolbarItem:identifier
119 withPaletteLabel:identifier
121 withToolTip:identifier
125 - (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image
127 [self addToolbarItemWithIdentifier:identifier withImage:image withTag:ToolbarMiscItem];
130 - (void)addToolbarItem:(NSString *)identifier
131 withLabel:(NSString *)label
132 withPaletteLabel:(NSString *)paletteLabel
133 withImage:(NSString *)imageName
134 withToolTip:(NSString *)toolTip
137 NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:identifier] autorelease];
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:)];
147 [_toolbarItems setObject:item forKey:identifier];
152 _toolbarItems = [[NSMutableDictionary alloc] init];
154 [self addToolbarItemWithIdentifier:ToolbarBrowseToolIdentifier
155 withImage:ToolbarPointerToolImage
156 withTag:ToolbarBrowseToolTag];
157 [[_toolbarItems objectForKey:ToolbarBrowseToolIdentifier] setImage:[[NSCursor pointingHandCursor] image]];
159 [self addToolbarItemWithIdentifier:ToolbarPanToolIdentifier
160 withImage:ToolbarPointerToolImage
161 withTag:ToolbarPanToolTag];
162 [[_toolbarItems objectForKey:ToolbarPanToolIdentifier] setImage:[[NSCursor openHandCursor] image]];
164 [self addToolbarItemWithIdentifier:ToolbarZoomToolIdentifier
165 withImage:ToolbarPointerToolImage
166 withTag:ToolbarZoomToolTag];
169 [self addToolbarItemWithIdentifier:ToolbarPointerToolIdentifier
170 withImage:ToolbarPointerToolImage
171 withTag:ToolbarPointerToolTag];
173 [self addToolbarItemWithIdentifier:ToolbarRectangleToolIdentifier
174 withImage:ToolbarRectangleToolImage
175 withTag:ToolbarRectangleToolTag];
177 [self addToolbarItemWithIdentifier:ToolbarElipseToolIdentifier
178 withImage:ToolbarElipseToolImage
179 withTag:ToolbarElipseToolTag];
181 [self addToolbarItemWithIdentifier:ToolbarTriangleToolIdentifier
182 withImage:ToolbarTriangleToolImage
183 withTag:ToolbarTriangleToolTag];
185 [self addToolbarItemWithIdentifier:ToolbarDeleteShapeIdentifier
186 withImage:ToolbarDeleteShapeImage
187 withTag:ToolbarDeleteSelectionTag];
189 [self addToolbarItemWithIdentifier:ToolbarMoveForwardIdentifier
190 withImage:ToolbarMoveForwardImage
191 withTag:ToolbarMoveForwardTag];
193 [self addToolbarItemWithIdentifier:ToolbarMoveBackwardIdentifier
194 withImage:ToolbarMoveBackwardImage
195 withTag:ToolbarMoveBackwardTag];
197 [self addToolbarItemWithIdentifier:ToolbarMoveToFrontIdentifier
198 withImage:ToolbarMoveToFrontImage
199 withTag:ToolbarMoveToFrontTag];
201 [self addToolbarItemWithIdentifier:ToolbarMoveToBackIdentifier
202 withImage:ToolbarMoveToBackImage
203 withTag:ToolbarMoveToBackTag];
206 NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier:ToolbarIdentifier] autorelease];
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];
217 [[_drawView window] setToolbar:toolbar];
221 - (void)clickedToolbarItem:(id)sender
223 int tag = [sender tag];
227 case ToolbarBrowseToolTag:
228 [_drawView setToolMode:DrawViewToolBrowse];
230 case ToolbarPanToolTag:
231 [_drawView setToolMode:DrawViewToolPan];
233 case ToolbarZoomToolTag:
234 [_drawView setToolMode:DrawViewToolZoom];
236 case ToolbarPointerToolTag:
237 [_drawView setToolMode:DrawViewToolArrow];
239 case ToolbarRectangleToolTag:
240 [_drawView setToolMode:DrawViewToolRectangle];
242 case ToolbarElipseToolTag:
243 [_drawView setToolMode:DrawViewToolElipse];
245 case ToolbarTriangleToolTag:
246 [_drawView setToolMode:DrawViewToolTriangle];
248 case ToolbarMoveForwardTag:
249 [_drawView moveSelectionForward:sender];
251 case ToolbarMoveBackwardTag:
252 [_drawView moveSelectionBackward:sender];
254 case ToolbarDeleteSelectionTag:
255 [_drawView deleteSelection:sender];
259 NSLog(@"Toolbar item: %i not implemented!", tag);
262 [_drawView setNeedsDisplay:YES];
265 // NSToolbar delegate methods
266 - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdent
267 willBeInsertedIntoToolbar:(BOOL)willBeInserted
269 NSToolbarItem * toolbarItem = [_toolbarItems objectForKey:itemIdent];
271 if( toolbarItem == nil )
272 toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdent] autorelease];
277 - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
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];
299 - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar
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,
323 - (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
325 return [NSArray arrayWithObjects:
326 ToolbarBrowseToolIdentifier,
327 ToolbarPanToolIdentifier,
328 ToolbarZoomToolIdentifier,
329 ToolbarPointerToolIdentifier,
330 ToolbarRectangleToolIdentifier,
331 ToolbarElipseToolIdentifier,
332 ToolbarTriangleToolIdentifier,
336 - (BOOL)validateToolbarItem:(NSToolbarItem *)theItem
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);