00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 @import <Foundation/CPObject.j>
00024 @import <Foundation/CPString.j>
00025
00026 @import <AppKit/CPImage.j>
00027 @import <AppKit/CPView.j>
00028
00029
00030
00031
00032
00033
00034 CPToolbarItemVisibilityPriorityStandard = 0;
00035
00036
00037
00038
00039 CPToolbarItemVisibilityPriorityLow = -1000;
00040
00041
00042
00043
00044 CPToolbarItemVisibilityPriorityHigh = 1000;
00045
00046
00047
00048
00049 CPToolbarItemVisibilityPriorityUser = 2000;
00050
00051 CPToolbarSeparatorItemIdentifier = @"CPToolbarSeparatorItemIdentifier";
00052 CPToolbarSpaceItemIdentifier = @"CPToolbarSpaceItemIdentifier";
00053 CPToolbarFlexibleSpaceItemIdentifier = @"CPToolbarFlexibleSpaceItemIdentifier";
00054 CPToolbarShowColorsItemIdentifier = @"CPToolbarShowColorsItemIdentifier";
00055 CPToolbarShowFontsItemIdentifier = @"CPToolbarShowFontsItemIdentifier";
00056 CPToolbarCustomizeToolbarItemIdentifier = @"CPToolbarCustomizeToolbarItemIdentifier";
00057 CPToolbarPrintItemIdentifier = @"CPToolbarPrintItemIdentifier";
00058
00059 var _CPToolbarSeparatorItemView = nil;
00060
00065 @implementation CPToolbarItem : CPObject
00066 {
00067 CPString _itemIdentifier;
00068
00069 CPToolbar _toolbar;
00070
00071 CPString _label;
00072 CPString _paletteLabel;
00073 CPString _toolTip;
00074 int _tag;
00075 id _target;
00076 SEL _action;
00077 BOOL _isEnabled;
00078 CPImage _image;
00079 CPImage _alternateImage;
00080
00081 CPView _view;
00082
00083 CGSize _minSize;
00084 CGSize _maxSize;
00085
00086 int _visibilityPriority;
00087 }
00088
00089
00095 - (id)initWithItemIdentifier:(CPString)anItemIdentifier
00096 {
00097 self = [super init];
00098
00099 if (self)
00100 {
00101 _itemIdentifier = anItemIdentifier;
00102
00103 _tag = 0;
00104 _isEnabled = YES;
00105
00106 _minSize = CGSizeMakeZero();
00107 _maxSize = CGSizeMakeZero();
00108
00109 _visibilityPriority = CPToolbarItemVisibilityPriorityStandard;
00110 }
00111
00112 return self;
00113 }
00114
00115
00119 - (CPString)itemIdentifier
00120 {
00121 return _itemIdentifier;
00122 }
00123
00127 - (CPToolbar)toolbar
00128 {
00129 return _toolbar;
00130 }
00131
00135 - (CPString)label
00136 {
00137 return _label;
00138 }
00139
00144 - (void)setLabel:(CPString)aLabel
00145 {
00146 _label = aLabel;
00147 }
00148
00152 - (CPString)paletteLabel
00153 {
00154 return _paletteLabel;
00155 }
00156
00161 - (void)setPaletteLabel:(CPString)aPaletteLabel
00162 {
00163 _paletteLabel = aPaletteLabel;
00164 }
00165
00171 - (CPString)toolTip
00172 {
00173 if ([_view respondsToSelector:@selector(toolTip)])
00174 return [_view toolTip];
00175
00176 return _toolTip;
00177 }
00178
00183 - (void)setToolTip:(CPString)aToolTip
00184 {
00185 if ([_view respondsToSelector:@selector(setToolTip:)])
00186 [view setToolTip:aToolTip];
00187
00188 _toolTip = aToolTip;
00189 }
00190
00194 - (int)tag
00195 {
00196 if ([_view respondsToSelector:@selector(tag)])
00197 return [_view tag];
00198
00199 return _tag;
00200 }
00201
00206 - (void)setTag:(int)aTag
00207 {
00208 if ([_view respondsToSelector:@selector(setTag:)])
00209 [_view setTag:aTag];
00210
00211 _tag = aTag;
00212 }
00213
00217 - (id)target
00218 {
00219 if (_view)
00220 return [_view respondsToSelector:@selector(target)] ? [_view target] : nil;
00221
00222 return _target;
00223 }
00224
00230 - (void)setTarget:(id)aTarget
00231 {
00232 if (!_view)
00233 _target = aTarget;
00234
00235 else if ([_view respondsToSelector:@selector(setTarget:)])
00236 [_view setTarget:aTarget];
00237 }
00238
00242 - (SEL)action
00243 {
00244 if (_view)
00245 return [_view respondsToSelector:@selector(action)] ? [_view action] : nil;
00246
00247 return _action;
00248 }
00249
00254 - (void)setAction:(SEL)anAction
00255 {
00256 if (!_view)
00257 _action = anAction;
00258
00259 else if ([_view respondsToSelector:@selector(setAction:)])
00260 [_view setAction:anAction];
00261 }
00262
00266 - (BOOL)isEnabled
00267 {
00268 if ([_view respondsToSelector:@selector(isEnabled)])
00269 return [_view isEnabled];
00270
00271 return _isEnabled;
00272 }
00273
00278 - (void)setEnabled:(BOOL)shouldBeEnabled
00279 {
00280 if ([_view respondsToSelector:@selector(setEnabled:)])
00281 [_view setEnabled:shouldBeEnabled];
00282
00283 _isEnabled = shouldBeEnabled;
00284 }
00285
00289 - (CPImage)image
00290 {
00291 if ([_view respondsToSelector:@selector(image)])
00292 return [_view image];
00293
00294 return _image;
00295 }
00296
00301 - (void)setImage:(CPImage)anImage
00302 {
00303 if ([_view respondsToSelector:@selector(setImage:)])
00304 [_view setImage:anImage];
00305
00306 _image = anImage;
00307
00308 if (!_image)
00309 return;
00310
00311 if (_minSize.width == 0 && _minSize.height == 0 &&
00312 _maxSize.width == 0 && _maxSize.height == 0)
00313 {
00314 var imageSize = [_image size];
00315
00316 if (imageSize.width > 0 || imageSize.height > 0)
00317 {
00318 [self setMinSize:imageSize];
00319 [self setMaxSize:imageSize];
00320 }
00321 }
00322 }
00323
00328 - (void)setAlternateImage:(CPImage)anImage
00329 {
00330 if ([_view respondsToSelector:@selector(setAlternateImage:)])
00331 [_view setAlternateImage:anImage];
00332
00333 _alternateImage = anImage;
00334 }
00335
00339 - (CPImage)alternateImage
00340 {
00341 if ([_view respondsToSelector:@selector(alternateIamge)])
00342 return [_view alternateImage];
00343
00344 return _alternateImage;
00345 }
00346
00350 - (CPView)view
00351 {
00352 return _view;
00353 }
00354
00359 - (void)setView:(CPView)aView
00360 {
00361 if (_view == aView)
00362 return;
00363
00364 _view = aView;
00365
00366 if (_view)
00367 {
00368
00369 if (_tag !== 0 && [_view respondsToSelector:@selector(setTag:)])
00370 [_view setTag:_tag];
00371
00372 _target = nil;
00373 _action = nil;
00374 }
00375 }
00376
00380 - (CGSize)minSize
00381 {
00382 return _minSize;
00383 }
00384
00389 - (void)setMinSize:(CGSize)aMinSize
00390 {
00391 _minSize = CGSizeMakeCopy(aMinSize);
00392
00393
00394 _maxSize = CGSizeMake(MAX(_minSize.width, _maxSize.width), MAX(_minSize.height, _maxSize.height));
00395 }
00396
00400 - (CGSize)maxSize
00401 {
00402 return _maxSize;
00403 }
00404
00409 - (void)setMaxSize:(CGSize)aMaxSize
00410 {
00411 _maxSize = CGSizeMakeCopy(aMaxSize);
00412
00413
00414 _minSize = CGSizeMake(MIN(_minSize.width, _maxSize.width), MIN(_minSize.height, _maxSize.height));
00415 }
00416
00417
00427 - (int)visibilityPriority
00428 {
00429 return _visibilityPriority;
00430 }
00431
00442 - (void)setVisibilityPriority:(int)aVisibilityPriority
00443 {
00444 _visibilityPriority = aVisibilityPriority;
00445 }
00446
00447 @end
00448
00449 @implementation CPToolbarItem (CPCopying)
00450
00451 - (id)copy
00452 {
00453 var copy = [[[self class] alloc] initWithItemIdentifier:_itemIdentifier];
00454
00455 if (_view)
00456 [copy setView:[CPKeyedUnarchiver unarchiveObjectWithData:[CPKeyedArchiver archivedDataWithRootObject:_view]]];
00457
00458 [copy setLabel:_label];
00459 [copy setPaletteLabel:_paletteLabel];
00460 [copy setToolTip:[self toolTip]];
00461
00462 [copy setTag:[self tag]];
00463 [copy setTarget:[self target]];
00464 [copy setAction:[self action]];
00465
00466 [copy setEnabled:[self isEnabled]];
00467 [copy setImage:_image];
00468 [copy setAlternateImage:_alternateImage];
00469
00470 [copy setMinSize:_minSize];
00471 [copy setMaxSize:_maxSize];
00472
00473 [copy setVisibilityPriority:_visibilityPriority];
00474
00475 return copy;
00476 }
00477
00478 @end
00479
00480
00481
00482 @implementation CPToolbarItem (Standard)
00483
00484
00485 + (CPToolbarItem)_standardItemWithItemIdentifier:(CPString)anItemIdentifier
00486 {
00487 var item = [[CPToolbarItem alloc] initWithItemIdentifier:anItemIdentifier];
00488
00489 switch (anItemIdentifier)
00490 {
00491 case CPToolbarSeparatorItemIdentifier: [item setMinSize:CGSizeMake(2.0, 0.0)];
00492 [item setMaxSize:CGSizeMake(2.0, 100000.0)];
00493
00494 if (!_CPToolbarSeparatorItemView)
00495 {
00496 _CPToolbarSeparatorItemView = [[CPView alloc] initWithFrame:CGRectMake(0.0, 0.0, 2.0, 32.0)];
00497
00498 sizes = {};
00499 sizes[@"CPToolbarItemSeparator"] = [CGSizeMake(2.0, 26.0), CGSizeMake(2.0, 1.0), CGSizeMake(2.0, 26.0)];
00500 [_CPToolbarSeparatorItemView setBackgroundColor:_CPControlThreePartImagePattern(YES, sizes, @"CPToolbarItem", @"Separator")];
00501 }
00502
00503 [item setView:_CPToolbarSeparatorItemView];
00504
00505
00506 return item;
00507
00508 case CPToolbarSpaceItemIdentifier: [item setMinSize:CGSizeMake(32.0, 32.0)];
00509 [item setMaxSize:CGSizeMake(32.0, 32.0)];
00510
00511 return item;
00512
00513 case CPToolbarFlexibleSpaceItemIdentifier: [item setMinSize:CGSizeMake(32.0, 32.0)];
00514 [item setMaxSize:CGSizeMake(10000.0, 32.0)];
00515
00516 return item;
00517
00518 case CPToolbarShowColorsItemIdentifier: return nil;
00519 case CPToolbarShowFontsItemIdentifier: return nil;
00520 case CPToolbarCustomizeToolbarItemIdentifier: return nil;
00521 case CPToolbarPrintItemIdentifier: return nil;
00522 }
00523
00524 return nil;
00525 }
00526
00527 @end