- Timestamp:
- 03/01/08 02:58:52 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ICeCoffEE/ICeCoffEE/ICeCoffEEServicePrefController.m
r320 r425 11 11 #import "ICeCoffEEServicePrefController.h" 12 12 #import "ICeCoffEENonHighlightingButtonCell.h" 13 #import "ICeCoffEE NonHighlightingTextFieldCell.h"13 #import "ICeCoffEEInvertingTextFieldCell.h" 14 14 #import "ICeCoffEELabeledIconCell.h" 15 15 #import <objc/objc.h> 16 16 #import <ApplicationEnhancer/ApplicationEnhancer.h> 17 17 18 static NSNumber *ICCF_SERVICE_SHOWN, *ICCF_SERVICE_HIDDEN, *ICCF_SERVICE_MIXED; 18 const int ICCF_SERVICE_UNKNOWN = 0; 19 const int ICCF_SERVICE_SHOWN = 1; 20 const int ICCF_SERVICE_HIDDEN = 2; 21 const int ICCF_SERVICE_MIXED = 3; 22 19 23 static NSDictionary *ICCF_SERVICE_OPTION_HIDDEN; 20 24 … … 61 65 } 62 66 63 static inline void ICCF_UpdateKeyEquivalentForItem(NSMenuItem *item, id state) { 64 NSNumber *oldState = [item representedObject]; 65 if ((oldState == nil || oldState == ICCF_SERVICE_SHOWN) && state == ICCF_SERVICE_HIDDEN) 67 static int ICCF_GetServiceState(NSMenuItem *item) { 68 return [item tag]; 69 } 70 71 static void ICCF_SetServiceState(NSMenuItem *item, int state) { 72 [item setTag: state]; 73 } 74 75 static inline void ICCF_UpdateKeyEquivalentForItem(NSMenuItem *item, int state) { 76 int oldState = ICCF_GetServiceState(item); 77 if ((oldState == ICCF_SERVICE_UNKNOWN || oldState == ICCF_SERVICE_SHOWN) && state == ICCF_SERVICE_HIDDEN) 66 78 ICCF_RemoveKeyEquivalentForItem(item); 67 else if (oldState == ICCF_SERVICE_HIDDEN && (state == ICCF_SERVICE_SHOWN || state == nil))79 else if (oldState == ICCF_SERVICE_HIDDEN && (state == ICCF_SERVICE_SHOWN || state == ICCF_SERVICE_UNKNOWN)) 68 80 ICCF_AddKeyEquivalentForItem(item); 69 81 } 70 82 83 71 84 static inline NSCellStateValue ICCF_ServiceItemState(NSMenuItem *item) { 72 id state = [item representedObject]; 73 return (state == nil) ? NSOnState : [state intValue]; 74 } 75 76 static void ICCF_PropagateServiceStateChange(NSMenu *menu, id state) { 85 int state = ICCF_GetServiceState(item); 86 if (state == ICCF_SERVICE_HIDDEN) 87 return NSOffState; 88 if (state == ICCF_SERVICE_MIXED) 89 return NSMixedState; 90 return NSOnState; 91 } 92 93 static void ICCF_PropagateServiceStateChange(NSMenu *menu, int state) { 77 94 NSEnumerator *e = [[menu itemArray] objectEnumerator]; 78 95 NSMenuItem *item; … … 86 103 ICCF_UpdateKeyEquivalentForItem(item, state); 87 104 88 [item setRepresentedObject: state];105 ICCF_SetServiceState(item, state); 89 106 } 90 107 } … … 94 111 if (submenu == nil) return ICCF_ServiceItemState(item); 95 112 96 if (item == changedItem) ICCF_PropagateServiceStateChange(submenu, [item representedObject]);113 if (item == changedItem) ICCF_PropagateServiceStateChange(submenu, [item tag]); 97 114 98 115 BOOL areOn = NO, areOff = NO; … … 108 125 break; 109 126 } 110 [item setRepresentedObject: ICCF_SERVICE_MIXED];127 ICCF_SetServiceState(item, ICCF_SERVICE_MIXED); 111 128 return NSMixedState; 112 129 } 113 130 if (areOn) { 114 [item setRepresentedObject: ICCF_SERVICE_SHOWN];131 ICCF_SetServiceState(item, ICCF_SERVICE_SHOWN); 115 132 return NSOnState; 116 133 } else { 117 [item setRepresentedObject: ICCF_SERVICE_HIDDEN];134 ICCF_SetServiceState(item, ICCF_SERVICE_HIDDEN); 118 135 return NSOffState; 119 136 } … … 159 176 subDict = [dict objectForKey: itemTitle]; 160 177 if ([[subDict objectForKey: (NSString *)kICServiceHidden] boolValue]) { 161 [item setRepresentedObject: ICCF_SERVICE_HIDDEN];178 ICCF_SetServiceState(item, ICCF_SERVICE_HIDDEN); 162 179 ICCF_RemoveKeyEquivalentForItem(item); 163 180 } … … 214 231 + (void)initialize; 215 232 { 216 ICCF_SERVICE_SHOWN = [[NSNumber alloc] initWithInt: NSOnState];217 ICCF_SERVICE_HIDDEN = [[NSNumber alloc] initWithInt: NSOffState];218 ICCF_SERVICE_MIXED = [[NSNumber alloc] initWithInt: NSMixedState];219 233 ICCF_SERVICE_OPTION_HIDDEN = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithBool: YES], kICServiceHidden, nil]; 220 234 } … … 239 253 [[serviceOutline tableColumnWithIdentifier: @"service"] setDataCell: 240 254 [ICeCoffEELabeledIconCell copyFromTextFieldCell: textFieldCell]]; 241 255 242 256 textFieldCell = [[serviceOutline tableColumnWithIdentifier: @"key"] dataCell]; 243 ((struct objc_object *)textFieldCell)->isa = [ICeCoffEENonHighlightingTextFieldCell class]; 257 ((struct objc_object *)textFieldCell)->isa = [ICeCoffEEInvertingTextFieldCell class]; 258 259 [serviceOutline noteNumberOfRowsChanged]; // or we get no active scroll bar or initial selection 244 260 245 261 [window setResizeIncrements: NSMakeSize(1, ICCF_TableViewCellHeight(serviceOutline))]; … … 351 367 return [[[NSAttributedString alloc] initWithString: [item title] attributes: attrDict] autorelease]; 352 368 } else if ([[tableColumn identifier] isEqualToString: @"show"]) { 353 i d state = [item representedObject];354 if ([item submenu] != nil && state == nil) {369 int state = ICCF_GetServiceState(item); 370 if ([item submenu] != nil && state == ICCF_SERVICE_UNKNOWN) { 355 371 return [NSNumber numberWithInt: ICCF_PropagateServiceState(item, nil)]; 356 372 } 357 return (state == nil) ? ICCF_SERVICE_SHOWN : state;373 return [NSNumber numberWithInt: ICCF_ServiceItemState(item)]; 358 374 } else if ([[tableColumn identifier] isEqualToString: @"key"]) { 359 375 NSString *equivalent = [item toolTip]; … … 368 384 { 369 385 if ([[tableColumn identifier] isEqualToString: @"show"]) { 370 NSNumber *newState = [object boolValue] ? nil: ICCF_SERVICE_HIDDEN;386 int newState = [object boolValue] ? ICCF_SERVICE_SHOWN : ICCF_SERVICE_HIDDEN; 371 387 ICCF_UpdateKeyEquivalentForItem(item, newState); 372 [item setRepresentedObject: newState];388 ICCF_SetServiceState(item, newState); 373 389 374 390 NSMenu *submenu = [item menu];
Note:
See TracChangeset
for help on using the changeset viewer.