• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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