2 * Copyright (C) 2005 Apple Computer, Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 #import "DrawTestToolbarController.h"
28 #import <WebCore/DrawViewPrivate.h>
32 ToolbarBrowseToolTag = 0,
36 ToolbarPointerToolTag,
38 ToolbarRectangleToolTag,
40 ToolbarTriangleToolTag,
41 ToolbarPolyLineToolTag,
44 ToolbarDeleteSelectionTag,
46 ToolbarMoveForwardTag,
47 ToolbarMoveBackwardTag,
48 ToolbarMoveToFrontTag,
54 NSString *ToolbarIdentifier = @"Main Document Toolbar";
56 NSString *ToolbarBrowseToolIdentifier = @"Browse";
57 NSString *ToolbarPanToolIdentifier = @"Pan";
58 NSString *ToolbarZoomToolIdentifier = @"Zoom";
60 NSString *ToolbarPointerToolIdentifier = @"Pointer";
61 NSString *ToolbarRectangleToolIdentifier = @"Rectangle";
62 NSString *ToolbarElipseToolIdentifier = @"Oval";
63 NSString *ToolbarTriangleToolIdentifier = @"Triangle";
64 NSString *ToolbarPolyLineToolIdentifier = @"PolyLine";
65 NSString *ToolbarArcToolIdentifier = @"Arc";
67 NSString *ToolbarDeleteShapeIdentifier = @"Delete";
68 NSString *ToolbarMoveForwardIdentifier = @"Forward";
69 NSString *ToolbarMoveBackwardIdentifier = @"Backward";
70 NSString *ToolbarMoveToFrontIdentifier = @"Front";
71 NSString *ToolbarMoveToBackIdentifier = @"Back";
73 NSString *ToolbarPointerToolImage = @"Toolbar_Pointer";
74 NSString *ToolbarRectangleToolImage = @"Toolbar_Rectangle";
75 NSString *ToolbarElipseToolImage = @"Toolbar_Oval";
76 NSString *ToolbarTriangleToolImage = @"Toolbar_Triangle";
78 NSString *ToolbarDeleteShapeImage = @"Toolbar_Delete";
79 NSString *ToolbarMoveForwardImage = @"Toolbar_Forward";
80 NSString *ToolbarMoveBackwardImage = @"Toolbar_Backward";
81 NSString *ToolbarMoveToFrontImage = @"Toolbar_Front";
82 NSString *ToolbarMoveToBackImage = @"Toolbar_Back";
84 @interface DrawTestToolbarController (InternalMethods)
86 - (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image withTag:(int)tag;
87 - (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image;
88 - (void)addToolbarItem:(NSString *)identifier
89 withLabel:(NSString *)label
90 withPaletteLabel:(NSString *)paletteLabel
91 withImage:(NSString *)imageName
92 withToolTip:(NSString *)toolTip
97 @implementation DrawTestToolbarController
99 - (id)initWithDrawView:(DrawView *)drawView
101 if (self = [super init]){
102 _drawView = [drawView retain];
103 [self setupToolbar]; // could be done lazily.
110 [_toolbarItems release];
115 - (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image withTag:(int)tag
118 [self addToolbarItem:identifier
120 withPaletteLabel:identifier
122 withToolTip:identifier
126 - (void)addToolbarItemWithIdentifier:(NSString *)identifier withImage:(NSString *)image
128 [self addToolbarItemWithIdentifier:identifier withImage:image withTag:ToolbarMiscItem];
131 - (void)addToolbarItem:(NSString *)identifier
132 withLabel:(NSString *)label
133 withPaletteLabel:(NSString *)paletteLabel
134 withImage:(NSString *)imageName
135 withToolTip:(NSString *)toolTip
138 NSToolbarItem *item = [[[NSToolbarItem alloc] initWithItemIdentifier:identifier] autorelease];
140 [item setLabel:label];
141 [item setPaletteLabel:paletteLabel];
142 [item setToolTip:toolTip];
143 [item setImage:[NSImage imageNamed:imageName]];
144 [item setTarget:self];
145 [item setAction:@selector(clickedToolbarItem:)];
148 [_toolbarItems setObject:item forKey:identifier];
153 _toolbarItems = [[NSMutableDictionary alloc] init];
155 [self addToolbarItemWithIdentifier:ToolbarBrowseToolIdentifier
156 withImage:ToolbarPointerToolImage
157 withTag:ToolbarBrowseToolTag];
158 [[_toolbarItems objectForKey:ToolbarBrowseToolIdentifier] setImage:[[NSCursor pointingHandCursor] image]];
160 [self addToolbarItemWithIdentifier:ToolbarPanToolIdentifier
161 withImage:ToolbarPointerToolImage
162 withTag:ToolbarPanToolTag];
163 [[_toolbarItems objectForKey:ToolbarPanToolIdentifier] setImage:[[NSCursor openHandCursor] image]];
165 [self addToolbarItemWithIdentifier:ToolbarZoomToolIdentifier
166 withImage:ToolbarPointerToolImage
167 withTag:ToolbarZoomToolTag];
170 [self addToolbarItemWithIdentifier:ToolbarPointerToolIdentifier
171 withImage:ToolbarPointerToolImage
172 withTag:ToolbarPointerToolTag];
174 [self addToolbarItemWithIdentifier:ToolbarRectangleToolIdentifier
175 withImage:ToolbarRectangleToolImage
176 withTag:ToolbarRectangleToolTag];
178 [self addToolbarItemWithIdentifier:ToolbarElipseToolIdentifier
179 withImage:ToolbarElipseToolImage
180 withTag:ToolbarElipseToolTag];
182 [self addToolbarItemWithIdentifier:ToolbarTriangleToolIdentifier
183 withImage:ToolbarTriangleToolImage
184 withTag:ToolbarTriangleToolTag];
186 [self addToolbarItemWithIdentifier:ToolbarDeleteShapeIdentifier
187 withImage:ToolbarDeleteShapeImage
188 withTag:ToolbarDeleteSelectionTag];
190 [self addToolbarItemWithIdentifier:ToolbarMoveForwardIdentifier
191 withImage:ToolbarMoveForwardImage
192 withTag:ToolbarMoveForwardTag];
194 [self addToolbarItemWithIdentifier:ToolbarMoveBackwardIdentifier
195 withImage:ToolbarMoveBackwardImage
196 withTag:ToolbarMoveBackwardTag];
198 [self addToolbarItemWithIdentifier:ToolbarMoveToFrontIdentifier
199 withImage:ToolbarMoveToFrontImage
200 withTag:ToolbarMoveToFrontTag];
202 [self addToolbarItemWithIdentifier:ToolbarMoveToBackIdentifier
203 withImage:ToolbarMoveToBackImage
204 withTag:ToolbarMoveToBackTag];
207 NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier:ToolbarIdentifier] autorelease];
209 [toolbar setAllowsUserCustomization:YES];
210 [toolbar setAutosavesConfiguration:YES];
211 [toolbar setDisplayMode:NSToolbarDisplayModeIconAndLabel];
212 [toolbar setSizeMode:NSToolbarSizeModeSmall];
213 [toolbar setDisplayMode:NSToolbarDisplayModeLabelOnly];
214 [toolbar setDelegate:self];
215 [toolbar setSelectedItemIdentifier:ToolbarBrowseToolIdentifier];
216 [toolbar setVisible:NO];
218 [[_drawView window] setToolbar:toolbar];
222 - (void)clickedToolbarItem:(id)sender
224 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];
258 NSLog(@"Toolbar item: %i not implemented!", tag);
261 [_drawView setNeedsDisplay:YES];
264 // NSToolbar delegate methods
265 - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdent
266 willBeInsertedIntoToolbar:(BOOL)willBeInserted
268 NSToolbarItem * toolbarItem = [_toolbarItems objectForKey:itemIdent];
270 if( toolbarItem == nil )
271 toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier:itemIdent] autorelease];
276 - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar
278 return [NSArray arrayWithObjects:
279 ToolbarBrowseToolIdentifier,
280 ToolbarPanToolIdentifier,
281 ToolbarZoomToolIdentifier,
282 ToolbarPointerToolIdentifier,
283 ToolbarRectangleToolIdentifier,
284 ToolbarElipseToolIdentifier,
285 ToolbarTriangleToolIdentifier,
286 ToolbarDeleteShapeIdentifier,
287 NSToolbarShowColorsItemIdentifier,
288 ToolbarMoveForwardIdentifier,
289 ToolbarMoveBackwardIdentifier,
290 ToolbarMoveToFrontIdentifier,
291 ToolbarMoveToBackIdentifier,
292 NSToolbarCustomizeToolbarItemIdentifier,
293 NSToolbarFlexibleSpaceItemIdentifier,
294 NSToolbarSpaceItemIdentifier,
295 NSToolbarSeparatorItemIdentifier, nil];
298 - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar
300 return [NSArray arrayWithObjects:
301 ToolbarBrowseToolIdentifier,
302 ToolbarPanToolIdentifier,
303 //ToolbarZoomToolIdentifier,
304 NSToolbarFlexibleSpaceItemIdentifier,
305 ToolbarPointerToolIdentifier,
306 ToolbarRectangleToolIdentifier,
307 ToolbarElipseToolIdentifier,
308 //ToolbarTriangleToolIdentifier,
309 //NSToolbarSeparatorItemIdentifier,
310 ToolbarDeleteShapeIdentifier,
311 //ToolbarMoveForwardIdentifier,
312 //ToolbarMoveBackwardIdentifier,
313 //ToolbarMoveToFrontIdentifier,
314 //ToolbarMoveToBackIdentifier,
315 NSToolbarSeparatorItemIdentifier,
316 //NSToolbarShowColorsItemIdentifier,
317 //NSToolbarFlexibleSpaceItemIdentifier,
318 NSToolbarCustomizeToolbarItemIdentifier,
322 - (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
324 return [NSArray arrayWithObjects:
325 ToolbarBrowseToolIdentifier,
326 ToolbarPanToolIdentifier,
327 ToolbarZoomToolIdentifier,
328 ToolbarPointerToolIdentifier,
329 ToolbarRectangleToolIdentifier,
330 ToolbarElipseToolIdentifier,
331 ToolbarTriangleToolIdentifier,
335 - (BOOL)validateToolbarItem:(NSToolbarItem *)theItem
339 switch([theItem tag]) {
340 case ToolbarMoveForwardTag:
341 case ToolbarMoveBackwardTag:
342 case ToolbarMoveToFrontTag:
343 case ToolbarMoveToBackTag:
344 case ToolbarDeleteSelectionTag:
345 enabled = ([[_drawView selectedCanvasItems] count] != 0);