Change Interfaces to use a Utility configuration
[WebKit-https.git] / WebKitTools / DrawTest / DrawTestToolbarController.m
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
29 enum
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
53 NSString *ToolbarIdentifier = @"Main Document Toolbar";
54
55 NSString *ToolbarBrowseToolIdentifier = @"Browse";
56 NSString *ToolbarPanToolIdentifier = @"Pan";
57 NSString *ToolbarZoomToolIdentifier = @"Zoom";
58
59 NSString *ToolbarPointerToolIdentifier = @"Pointer";
60 NSString *ToolbarRectangleToolIdentifier = @"Rectangle";
61 NSString *ToolbarElipseToolIdentifier = @"Oval";
62 NSString *ToolbarTriangleToolIdentifier = @"Triangle";
63 NSString *ToolbarPolyLineToolIdentifier = @"PolyLine";
64 NSString *ToolbarArcToolIdentifier = @"Arc";
65
66 NSString *ToolbarDeleteShapeIdentifier = @"Delete";
67 NSString *ToolbarMoveForwardIdentifier = @"Forward";
68 NSString *ToolbarMoveBackwardIdentifier = @"Backward";
69 NSString *ToolbarMoveToFrontIdentifier = @"Front";
70 NSString *ToolbarMoveToBackIdentifier = @"Back";
71
72 NSString *ToolbarPointerToolImage = @"Toolbar_Pointer";
73 NSString *ToolbarRectangleToolImage = @"Toolbar_Rectangle";
74 NSString *ToolbarElipseToolImage = @"Toolbar_Oval";
75 NSString *ToolbarTriangleToolImage = @"Toolbar_Triangle";
76
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";
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