/* Copyright (C) 2002-2003, Jeffrey D. Argast. The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. Permission is hereby granted to use, copy, modify, and distribute this software or portions thereof for any purpose, without fee, subject to these conditions: (1) If any part of the source code is distributed, then this statement must be included, with this copyright and no-warranty notice unaltered. (2) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. */ #import "PerforceChangeList.h" #import "PerforceAction.h" #import "IconController.h" #import "IconDefs.h" #import "AppUtils.h" #import "PerforceActionChange.h" #import "PerforceActionDescribe.h" #import "ReadOnlyEditorController.h" #import "PerforceActionSubmit.h" #import "AppController.h" static NSString* kDefaultChange = @"default"; @implementation PerforceChangeList - (void) dealloc { [fChildren release]; [fChangeNumber release]; [fUserInfo release]; [fChangeDesc release]; [fDisplayString release]; [super dealloc]; } - (void) makeDisplayString: (BOOL) includeUserInfo { NSMutableString* nsString = [[[NSMutableString alloc] init] autorelease]; if ( !fIsDefaultChange ) { [nsString appendString:@"Change "]; } [nsString appendString:fChangeNumber]; if ( includeUserInfo ) { if ( [fUserInfo length] > 0 ) { [nsString appendString:@" - "]; [nsString appendString:fUserInfo]; } if ( [fChangeDesc length] > 0 ) { [nsString appendString:@" {"]; [nsString appendString:fChangeDesc]; [nsString appendString:@"}"]; } } // force into an NSString fDisplayString = [[NSString alloc] initWithCString:[nsString cString]]; } - (id) initWithNumber: (NSString*) changeNumber withUserInfo: (NSString*) userInfo withChangeDesc: (NSString*) changeDesc isClient: (BOOL) isClient { self = [super init]; fChangeNumber = [changeNumber copy]; if ( [fChangeNumber isEqualToString:kDefaultChange] ) { fIsDefaultChange = YES; } else { fIsDefaultChange = NO; } if ( userInfo && ([userInfo length] > 0) ) { fUserInfo = [userInfo copy]; } else { fUserInfo = [[NSString alloc] initWithString:@""]; } if ( changeDesc ) { fChangeDesc = [changeDesc copy]; } else { fChangeDesc = [[NSString alloc] initWithString:@""]; } fIsClientChangelist = isClient; [self makeDisplayString:!fIsClientChangelist]; if ( fIsClientChangelist ) { fIconID = kClientChangeIcon; } else { fIconID = kOtherChangeIcon; } return self; } - (void) setChildren: (NSArray*) children { [fChildren release]; fChildren = [children copy]; } - (int) getNumberOfChildren { if ( fChildren ) { return [fChildren count]; } return 0; } - (BOOL) hasChildren { if ( fChildren ) { return ([fChildren count] > 0); } return NO; } - (id) getChildAtIndex: (int) index { if ( fChildren ) { return [fChildren objectAtIndex:index]; } return nil; } - (id) getCellText { return fDisplayString; } - (id) getCellImage { return [[IconController defaultIconController] getIcon:fIconID]; } - (NSComparisonResult) compare: (PerforceChangeList*) rhs { if ( fIsDefaultChange ) { if ( rhs->fIsDefaultChange ) { return [fUserInfo caseInsensitiveCompare:rhs->fUserInfo]; } return NSOrderedAscending; } if ( rhs->fIsDefaultChange ) { return NSOrderedDescending; } if ( [fUserInfo isEqualTo:rhs->fUserInfo] ) { return [fChangeNumber caseInsensitiveCompare:rhs->fChangeNumber]; } return [fUserInfo caseInsensitiveCompare:rhs->fUserInfo]; } - (BOOL) isClientChangelist { return fIsClientChangelist; } - (void) copyFrom:(PerforceChangeList*) rhs { [fChangeNumber release]; [fUserInfo release]; [fChangeDesc release]; [fDisplayString release]; [fChildren release]; fChangeNumber = [rhs->fChangeNumber retain]; fUserInfo = [rhs->fUserInfo retain]; fChangeDesc = [rhs->fChangeDesc retain]; fDisplayString = [rhs->fDisplayString retain]; fChildren = [rhs->fChildren retain]; fIsClientChangelist = rhs->fIsClientChangelist; fIsDefaultChange = rhs->fIsDefaultChange; fIconID = rhs->fIconID; } // ///// // // The enablement - (BOOL) canEdit { return (fIsClientChangelist && !fIsDefaultChange); } - (BOOL) canDescribe { return !fIsDefaultChange; } - (BOOL) canDelete { return ![self hasChildren]; } - (BOOL) canSubmit { return [self hasChildren]; } - (BOOL) canRevert { return fIsClientChangelist; } - (BOOL) canDiff { return NO; } - (void) resultFromDescribe:(PerforceActionDescribe*)action { if ( [action wasSuccess] ) { NSMutableString* titleString = [NSMutableString stringWithString:@"Description of Changelist "]; [titleString appendString:[action getChangeNum]]; [ReadOnlyEditorController showWindowWith:[action getOutput] title:titleString]; } } // // The actions - (void) doEdit { [PerforceActionChangeGet defaultRunFor:[NSApp delegate] selector:@selector(resultFromPerforceChangeOut:) identifier:fChangeNumber]; } - (void) doDescribe { [PerforceActionDescribe defaultRunFor:self selector:@selector(resultFromDescribe:) changeNum:fChangeNumber]; } - (void) doDelete { int isOK = NSRunAlertPanel (@"Delete", @"Are you sure you want to delete changelist %s?", @"OK", @"Cancel", nil, [fChangeNumber cString]); if ( isOK ) { [PerforceActionChangeDelete defaultRunFor:nil selector:nil identifier:fChangeNumber]; } } - (void) doSubmit { if ( fIsDefaultChange ) { [PerforceActionChangeNew defaultRunFor:self selector:@selector(resultFromPerforceChangeNew:)]; } else { [PerforceActionSubmitChangelist defaultRunFor:nil selector:nil changeNum:fChangeNumber]; } } - (void) doRevert { } - (void) doRevertUnchanged { } - (void) doDiff { } - (void) appendRevertPath: (NSMutableArray*) revertPathList { int numItems = [fChildren count]; int n; for ( n = 0; n < numItems; n++ ) { id item = [fChildren objectAtIndex:n]; [item appendRevertPath:revertPathList]; } } // // // - (void) submitChangeOK: (NSString*) contentString { [PerforceActionSubmit defaultRunFor:self selector:@selector(resultFromPerforceSubmit:) form:contentString]; } - (void) resultFromPerforceSubmit: (PerforceActionSubmit*) action { if ( [action wasError] ) { [[NSApp delegate] showEditSheet:self contentData:[action getForm] endSelector:@selector(submitChangeOK:)]; } } - (void) resultFromPerforceChangeNew: (PerforceActionChangeNew*) action { if ( [action wasSuccess] ) { [[NSApp delegate] showEditSheet:self contentData:[action getOutput] endSelector:@selector(submitChangeOK:)]; } } /* - (void) resultFromPerforceChangeOut: (PerforceActionChangeGet*) action { if ( [action wasSuccess] ) { [[NSApp delegate] showEditSheet:self contentData:[action getOutput] endSelector:@selector(submitChangeOK:)]; } } */ @end