unison

Fork of Unison, a bi-directional file synchronization tool
git clone git://git.laack.co/unison.git
Log | Files | Refs | README | LICENSE

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