UnisonToolbar.m (9309B)
1 // 2 // UnisonToolbar.h 3 // 4 // Extended NSToolbar with several views 5 // 6 // Created by Ben Willmore on Sun March 12 2006. 7 // Copyright (c) 2006, licensed under GNU GPL. 8 // 9 10 #import "UnisonToolbar.h" 11 #import "MyController.h" 12 13 static NSString* QuitItemIdentifier = @"Quit"; 14 static NSString* OpenItemIdentifier = @"Open"; 15 static NSString* NewItemIdentifier = @"New"; 16 static NSString* GoItemIdentifier = @"Go"; 17 static NSString* CancelItemIdentifier = @"Cancel"; 18 static NSString* SaveItemIdentifier = @"Save"; 19 static NSString* RestartItemIdentifier = @"Restart"; 20 static NSString* RescanItemIdentifier = @"Rescan"; 21 static NSString* RToLItemIdentifier = @"RToL"; 22 static NSString* MergeItemIdentifier = @"Merge"; 23 static NSString* LToRItemIdentifier = @"LToR"; 24 static NSString* SkipItemIdentifier = @"Skip"; 25 static NSString* DiffItemIdentifier = @"Diff"; 26 static NSString* TableModeIdentifier = @"TableMode"; 27 28 @implementation UnisonToolbar 29 30 - initWithIdentifier:(NSString *) identifier :(MyController *) aController :(ReconTableView *) aTableView { 31 32 if ((self = [super initWithIdentifier: identifier])) { 33 [self setAllowsUserCustomization: NO]; 34 [self setAutosavesConfiguration: NO]; 35 [self setDelegate: self]; 36 myController = aController; 37 tableView = aTableView; 38 currentView = @""; 39 } 40 41 return self; 42 } 43 44 - (void)takeTableModeView:(NSView *)view 45 { 46 tableModeView = [view retain]; 47 [view setHidden:YES]; 48 } 49 50 - (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted { 51 52 NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease]; 53 if ([itemIdent isEqual: QuitItemIdentifier]) { 54 [toolbarItem setLabel: @"Quit"]; 55 [toolbarItem setImage: [NSImage imageNamed: @"quit.tif"]]; 56 [toolbarItem setTarget:NSApp]; 57 [toolbarItem setAction:@selector(terminate:)]; 58 } 59 else if ([itemIdent isEqual: OpenItemIdentifier]) { 60 [toolbarItem setLabel: @"Open"]; 61 [toolbarItem setImage: [NSImage imageNamed: @"go.tif"]]; 62 [toolbarItem setTarget:myController]; 63 [toolbarItem setAction:@selector(openButton:)]; 64 } 65 else if ([itemIdent isEqual: NewItemIdentifier]) { 66 [toolbarItem setLabel: @"New"]; 67 [toolbarItem setImage: [NSImage imageNamed: @"add.tif"]]; 68 [toolbarItem setTarget:myController]; 69 [toolbarItem setAction:@selector(createButton:)]; 70 } 71 else if ([itemIdent isEqual: CancelItemIdentifier]) { 72 [toolbarItem setLabel: @"Cancel"]; 73 [toolbarItem setImage: [NSImage imageNamed: @"restart.tif"]]; 74 [toolbarItem setTarget:myController]; 75 [toolbarItem setAction:@selector(chooseProfiles)]; 76 } 77 else if ([itemIdent isEqual: SaveItemIdentifier]) { 78 [toolbarItem setLabel: @"Save"]; 79 [toolbarItem setImage: [NSImage imageNamed: @"save.tif"]]; 80 [toolbarItem setTarget:myController]; 81 [toolbarItem setAction:@selector(saveProfileButton:)]; 82 } 83 else if ([itemIdent isEqual: GoItemIdentifier]) { 84 [toolbarItem setLabel: @"Go"]; 85 [toolbarItem setImage: [NSImage imageNamed: @"go.tif"]]; 86 [toolbarItem setTarget:myController]; 87 [toolbarItem setAction:@selector(syncButton:)]; 88 } 89 else if ([itemIdent isEqual: RestartItemIdentifier]) { 90 [toolbarItem setLabel: @"Restart"]; 91 [toolbarItem setImage: [NSImage imageNamed: @"restart.tif"]]; 92 [toolbarItem setTarget:myController]; 93 [toolbarItem setAction:@selector(restartButton:)]; 94 } 95 else if ([itemIdent isEqual: RescanItemIdentifier]) { 96 [toolbarItem setLabel: @"Rescan"]; 97 [toolbarItem setImage: [NSImage imageNamed: @"rescan.tif"]]; 98 [toolbarItem setTarget:myController]; 99 [toolbarItem setAction:@selector(rescan:)]; 100 } 101 else if ([itemIdent isEqual: RToLItemIdentifier]) { 102 [toolbarItem setLabel: @"Right to left"]; 103 [toolbarItem setImage: [NSImage imageNamed: @"left.tif"]]; 104 [toolbarItem setTarget:tableView]; 105 [toolbarItem setAction:@selector(copyRL:)]; 106 } 107 else if ([itemIdent isEqual: MergeItemIdentifier]) { 108 [toolbarItem setLabel: @"Merge"]; 109 [toolbarItem setImage: [NSImage imageNamed: @"merge.tif"]]; 110 [toolbarItem setTarget:tableView]; 111 [toolbarItem setAction:@selector(merge:)]; 112 } 113 else if ([itemIdent isEqual: LToRItemIdentifier]) { 114 [toolbarItem setLabel: @"Left to right"]; 115 [toolbarItem setImage: [NSImage imageNamed: @"right.tif"]]; 116 [toolbarItem setTarget:tableView]; 117 [toolbarItem setAction:@selector(copyLR:)]; 118 } 119 else if ([itemIdent isEqual: SkipItemIdentifier]) { 120 [toolbarItem setLabel: @"Skip"]; 121 [toolbarItem setImage: [NSImage imageNamed: @"skip.tif"]]; 122 [toolbarItem setTarget:tableView]; 123 [toolbarItem setAction:@selector(leaveAlone:)]; 124 } 125 else if ([itemIdent isEqual: DiffItemIdentifier]) { 126 [toolbarItem setLabel: @"Diff"]; 127 [toolbarItem setImage: [NSImage imageNamed: @"diff.tif"]]; 128 [toolbarItem setTarget:tableView]; 129 [toolbarItem setAction:@selector(showDiff:)]; 130 } 131 else if ([itemIdent isEqual: TableModeIdentifier]) { 132 [toolbarItem setLabel:@"Layout"]; 133 [toolbarItem setToolTip:@"Switch table nesting"]; 134 [tableModeView setHidden:NO]; 135 [toolbarItem setView:tableModeView]; 136 //[toolbarItem setMinSize:NSMakeSize(NSWidth([tableModeView frame]),NSHeight([tableModeView frame])+10)]; 137 //[toolbarItem setMaxSize:NSMakeSize(NSWidth([tableModeView frame]),NSHeight([tableModeView frame])+10)]; 138 } 139 140 return toolbarItem; 141 } 142 143 - (NSArray *) itemIdentifiersForView: (NSString *) whichView { 144 if ([whichView isEqual: @"chooseProfileView"]) { 145 return [NSArray arrayWithObjects: QuitItemIdentifier, NewItemIdentifier, OpenItemIdentifier, nil]; 146 } 147 else if ([whichView isEqual: @"preferencesView"]) { 148 return [NSArray arrayWithObjects: QuitItemIdentifier, SaveItemIdentifier, CancelItemIdentifier, nil]; 149 } 150 else if ([whichView isEqual: @"ConnectingView"]) { 151 return [NSArray arrayWithObjects: QuitItemIdentifier, nil]; 152 } 153 else if ([whichView isEqual: @"updatesView"]) { 154 return [NSArray arrayWithObjects: QuitItemIdentifier, 155 RestartItemIdentifier, 156 NSToolbarSpaceItemIdentifier, 157 GoItemIdentifier, 158 RescanItemIdentifier, 159 NSToolbarSpaceItemIdentifier, 160 RToLItemIdentifier, MergeItemIdentifier, LToRItemIdentifier, 161 SkipItemIdentifier, 162 NSToolbarSpaceItemIdentifier, 163 DiffItemIdentifier, 164 TableModeIdentifier, nil]; 165 } 166 else { 167 return [NSArray arrayWithObjects: QuitItemIdentifier, Nil]; 168 } 169 } 170 171 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar { 172 return [NSArray arrayWithObjects: QuitItemIdentifier, NewItemIdentifier, OpenItemIdentifier, nil]; 173 } 174 175 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar { 176 return [NSArray arrayWithObjects: QuitItemIdentifier, OpenItemIdentifier, NewItemIdentifier, 177 CancelItemIdentifier, SaveItemIdentifier, 178 GoItemIdentifier, RestartItemIdentifier, RescanItemIdentifier, 179 RToLItemIdentifier, MergeItemIdentifier, LToRItemIdentifier, 180 SkipItemIdentifier, DiffItemIdentifier, 181 NSToolbarSpaceItemIdentifier, nil]; 182 } 183 184 - (void) setView: (NSString *) whichView { 185 if ([whichView isEqual:currentView]) return; 186 187 currentView = whichView; 188 189 int i; 190 NSArray *identifiers; 191 NSString *oldIdentifier; 192 NSString *newIdentifier; 193 194 identifiers=[self itemIdentifiersForView:whichView]; 195 for (i=0; i<[identifiers count]; i++) { 196 newIdentifier = [identifiers objectAtIndex:i]; 197 if (i<[[self items] count]) { 198 oldIdentifier = [[[self items] objectAtIndex:i] itemIdentifier]; 199 if ([newIdentifier isEqual: oldIdentifier] ) { 200 [[[self items] objectAtIndex:i] setEnabled:YES]; 201 } 202 else { 203 [self removeItemAtIndex:i]; 204 [self insertItemWithItemIdentifier:newIdentifier atIndex:i]; 205 } 206 } 207 else { 208 [self insertItemWithItemIdentifier:newIdentifier atIndex:i]; 209 } 210 } 211 while ([[self items] count] > [identifiers count]) { 212 [self removeItemAtIndex:[identifiers count]]; 213 } 214 } 215 216 @end