From: <ho...@us...> - 2008-02-19 01:58:54
|
Revision: 12815 http://bibdesk.svn.sourceforge.net/bibdesk/?rev=12815&view=rev Author: hofman Date: 2008-02-18 17:58:59 -0800 (Mon, 18 Feb 2008) Log Message: ----------- Change handling of smart condition scripting. Pass value of the condition as a single item, which may be a custom record-type for some date conditions. Modified Paths: -------------- trunk/bibdesk/BDSKCondition+Scripting.h trunk/bibdesk/BDSKCondition+Scripting.m trunk/bibdesk/BDSKGroup+Scripting.h trunk/bibdesk/BDSKGroup+Scripting.m trunk/bibdesk/Scripting/BibDesk.sdef Modified: trunk/bibdesk/BDSKCondition+Scripting.h =================================================================== --- trunk/bibdesk/BDSKCondition+Scripting.h 2008-02-18 20:50:00 UTC (rev 12814) +++ trunk/bibdesk/BDSKCondition+Scripting.h 2008-02-19 01:58:59 UTC (rev 12815) @@ -45,12 +45,6 @@ - (NSString *)scriptingKey; - (int)scriptingComparison; -- (NSString *)scriptingStringValue; -- (int)scriptingCountValue; -- (int)scriptingNumberValue; -- (int)scriptingAndNumberValue; -- (int)scriptingPeriodValue; -- (NSDate *)scriptingDateValue; -- (NSDate *)scriptingToDateValue; +- (id)scriptingValue; @end Modified: trunk/bibdesk/BDSKCondition+Scripting.m =================================================================== --- trunk/bibdesk/BDSKCondition+Scripting.m 2008-02-18 20:50:00 UTC (rev 12814) +++ trunk/bibdesk/BDSKCondition+Scripting.m 2008-02-19 01:58:59 UTC (rev 12815) @@ -142,54 +142,6 @@ int scriptingComparison = 0; if ([self isDateCondition]) { switch ([self dateComparison]) { - case BDSKGroupContain: - scriptingComparison = BDSKASGroupContain; - break; - case BDSKGroupNotContain: - scriptingComparison = BDSKASGroupNotContain; - break; - case BDSKContain: - scriptingComparison = BDSKASContain; - break; - case BDSKNotContain: - scriptingComparison = BDSKASNotContain; - break; - case BDSKEqual: - scriptingComparison = BDSKASEqual; - break; - case BDSKNotEqual: - scriptingComparison = BDSKASNotEqual; - break; - case BDSKStartWith: - scriptingComparison = BDSKASStartWith; - break; - case BDSKEndWith: - scriptingComparison = BDSKASEndWith; - break; - case BDSKSmaller: - scriptingComparison = BDSKASSmaller; - break; - case BDSKLarger: - scriptingComparison = BDSKASLarger; - break; - } - } else if ([self isCountCondition]) { - switch ([self countComparison]) { - case BDSKCountEqual: - scriptingComparison = BDSKASCountEqual; - break; - case BDSKCountNotEqual: - scriptingComparison = BDSKASCountNotEqual; - break; - case BDSKCountLarger: - scriptingComparison = BDSKASCountLarger; - break; - case BDSKCountSmaller: - scriptingComparison = BDSKASCountSmaller; - break; - } - } else { - switch ([self stringComparison]) { case BDSKToday: scriptingComparison = BDSKASToday; break; @@ -227,6 +179,54 @@ scriptingComparison = BDSKInDateRange; break; } + } else if ([self isCountCondition]) { + switch ([self countComparison]) { + case BDSKCountEqual: + scriptingComparison = BDSKASCountEqual; + break; + case BDSKCountNotEqual: + scriptingComparison = BDSKASCountNotEqual; + break; + case BDSKCountLarger: + scriptingComparison = BDSKASCountLarger; + break; + case BDSKCountSmaller: + scriptingComparison = BDSKASCountSmaller; + break; + } + } else { + switch ([self stringComparison]) { + case BDSKGroupContain: + scriptingComparison = BDSKASGroupContain; + break; + case BDSKGroupNotContain: + scriptingComparison = BDSKASGroupNotContain; + break; + case BDSKContain: + scriptingComparison = BDSKASContain; + break; + case BDSKNotContain: + scriptingComparison = BDSKASNotContain; + break; + case BDSKEqual: + scriptingComparison = BDSKASEqual; + break; + case BDSKNotEqual: + scriptingComparison = BDSKASNotEqual; + break; + case BDSKStartWith: + scriptingComparison = BDSKASStartWith; + break; + case BDSKEndWith: + scriptingComparison = BDSKASEndWith; + break; + case BDSKSmaller: + scriptingComparison = BDSKASSmaller; + break; + case BDSKLarger: + scriptingComparison = BDSKASLarger; + break; + } } return scriptingComparison; } @@ -340,74 +340,6 @@ } } -- (NSString *)scriptingStringValue { - return [self stringValue]; -} - -- (void)setScriptingStringValue:(NSString *)newStringValue { - NSScriptCommand *cmd = [NSScriptCommand currentCommand]; - if ([cmd isKindOfClass:[NSCreateCommand class]] == NO) { - [cmd setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Cannot edit smart condition.",@"Error description")]; - } else if ([self isDateCondition] || [self isCountCondition]) { - [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; - } else { - [self setStringValue:newStringValue]; - } -} - -- (int)scriptingCountValue { - return [self countValue]; -} - -- (void)setScriptingCountValue:(int)newCountValue { - NSScriptCommand *cmd = [NSScriptCommand currentCommand]; - if ([cmd isKindOfClass:[NSCreateCommand class]] == NO) { - [cmd setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Cannot edit smart condition.",@"Error description")]; - } else if ([self isCountCondition]) { - [self setCountValue:newCountValue]; - } else { - [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; - } -} - -- (int)scriptingNumberValue { - return [self andNumberValue]; -} - -- (void)setScriptingNumberValue:(int)newNumberValue { - NSScriptCommand *cmd = [NSScriptCommand currentCommand]; - if ([cmd isKindOfClass:[NSCreateCommand class]] == NO) { - [cmd setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Cannot edit smart condition.",@"Error description")]; - } else if ([self isDateCondition]) { - [self setNumberValue:newNumberValue]; - } else { - [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; - } -} - -- (int)scriptingAndNumberValue { - return [self numberValue]; -} - -- (void)setScriptingAndNumberValue:(int)newAndNumberValue { - NSScriptCommand *cmd = [NSScriptCommand currentCommand]; - if ([cmd isKindOfClass:[NSCreateCommand class]] == NO) { - [cmd setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Cannot edit smart condition.",@"Error description")]; - } else if ([self isDateCondition]) { - [self setAndNumberValue:newAndNumberValue]; - } else { - [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; - } -} - - (int)scriptingPeriodValue { int scriptingPeriodValue = 0; switch ([self periodValue]) { @@ -427,68 +359,84 @@ return scriptingPeriodValue; } -- (void)setScriptingPeriodValue:(int)newPeriodValue { - NSScriptCommand *cmd = [NSScriptCommand currentCommand]; - if ([cmd isKindOfClass:[NSCreateCommand class]] == NO) { - [cmd setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Cannot edit smart condition.",@"Error description")]; - } else if ([self isDateCondition]) { - switch (newPeriodValue) { - case BDSKASPeriodDay: - periodValue = BDSKPeriodDay; - break; - case BDSKASPeriodWeek: - periodValue = BDSKPeriodWeek; - break; - case BDSKASPeriodMonth: - periodValue = BDSKPeriodMonth; - break; - case BDSKASPeriodYear: - periodValue = BDSKPeriodYear; - break; +- (id)scriptingValue { + if ([self isDateCondition]) { + switch (dateComparison) { + case BDSKExactly: + case BDSKInLast: + case BDSKNotInLast: + return [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:numberValue], @"numberValue", [NSNumber numberWithInt:[self scriptingPeriodValue]], @"periodValue", nil]; + case BDSKBetween: + return [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:numberValue], @"numberValue", [NSNumber numberWithInt:andNumberValue], @"andNumberValue", [NSNumber numberWithInt:[self scriptingPeriodValue]], @"periodValue", nil]; + case BDSKDate: + case BDSKAfterDate: + case BDSKBeforeDate: + return [NSDictionary dictionaryWithObjectsAndKeys:dateValue, @"dateValue", nil]; + case BDSKInDateRange: + return [NSDictionary dictionaryWithObjectsAndKeys:dateValue, @"dateValue", toDateValue, @"dateValue", nil]; default: - [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; - break; + return [NSNull null]; } + } else if ([self isCountCondition]) { + return [NSNumber numberWithInt:countValue]; } else { - [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; + return [self stringValue]; } } -- (NSDate *)scriptingDateValue { - return [self dateValue]; -} - -- (void)setScriptingDateValue:(NSDate *)newDateValue { +- (void)setScriptingValue:(id)newValue { NSScriptCommand *cmd = [NSScriptCommand currentCommand]; if ([cmd isKindOfClass:[NSCreateCommand class]] == NO) { [cmd setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; [cmd setScriptErrorString:NSLocalizedString(@"Cannot edit smart condition.",@"Error description")]; } else if ([self isDateCondition]) { - [self setDateValue:[[[NSCalendarDate alloc] initWithTimeInterval:0.0 sinceDate:newDateValue] autorelease]]; + if (newValue == nil || [newValue isEqual:[NSNull null]]) { + } else if ([newValue isKindOfClass:[NSDictionary class]] == NO) { + [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; + [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; + } else { + id value; + if (value = [newValue objectForKey:@"numberValue"]) { + [self setNumberValue:[value intValue]]; + if (value = [newValue objectForKey:@"periodValue"]) { + switch ([value intValue]) { + case BDSKASPeriodDay: + periodValue = BDSKPeriodDay; + break; + case BDSKASPeriodWeek: + periodValue = BDSKPeriodWeek; + break; + case BDSKASPeriodMonth: + periodValue = BDSKPeriodMonth; + break; + case BDSKASPeriodYear: + periodValue = BDSKPeriodYear; + break; + } + } + if (value = [newValue objectForKey:@"andNumberValue"]) + [self setAndNumberValue:[value intValue]]; + } else if (value = [newValue objectForKey:@"dateValue"]) { + [self setDateValue:value]; + if (value = [newValue objectForKey:@"toDateValue"]) + [self setToDateValue:value]; + } + } + } else if ([self isCountCondition]) { + if ([newValue isKindOfClass:[NSNumber class]] == NO && [newValue isKindOfClass:[NSString class]] == NO) { + [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; + [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; + } else { + [self setCountValue:[newValue intValue]]; + } } else { - [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; + if ([newValue isKindOfClass:[NSString class]] == NO) { + [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; + [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; + } else { + [self setStringValue:newValue]; + } } } -- (NSDate *)scriptingToDateValue { - return [self toDateValue]; -} - -- (void)setScriptingToDateValue:(NSDate *)newToDateValue { - NSScriptCommand *cmd = [NSScriptCommand currentCommand]; - if ([cmd isKindOfClass:[NSCreateCommand class]] == NO) { - [cmd setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Cannot edit smart condition.",@"Error description")]; - } else if ([self isDateCondition]) { - [self setToDateValue:[[[NSCalendarDate alloc] initWithTimeInterval:0.0 sinceDate:newToDateValue] autorelease]]; - } else { - [cmd setScriptErrorNumber:NSArgumentsWrongScriptError]; - [cmd setScriptErrorString:NSLocalizedString(@"Invalid value for smart condition.",@"Error description")]; - } -} - @end Modified: trunk/bibdesk/BDSKGroup+Scripting.h =================================================================== --- trunk/bibdesk/BDSKGroup+Scripting.h 2008-02-18 20:50:00 UTC (rev 12814) +++ trunk/bibdesk/BDSKGroup+Scripting.h 2008-02-19 01:58:59 UTC (rev 12815) @@ -111,6 +111,7 @@ @interface BDSKSmartGroup (Scripting) +- (unsigned int)countOfConditions; - (BDSKCondition *)objectInConditionsAtIndex:(unsigned int)idx; - (BDSKCondition *)valueInConditionsAtIndex:(unsigned int)idx; - (void)insertObject:(BDSKCondition *)condition inConditionsAtIndex:(unsigned int)idx; Modified: trunk/bibdesk/BDSKGroup+Scripting.m =================================================================== --- trunk/bibdesk/BDSKGroup+Scripting.m 2008-02-18 20:50:00 UTC (rev 12814) +++ trunk/bibdesk/BDSKGroup+Scripting.m 2008-02-19 01:58:59 UTC (rev 12815) @@ -292,6 +292,10 @@ } } +- (unsigned int)countOfConditions { + return [[[self filter] conditions] count]; +} + - (BDSKCondition *)objectInConditionsAtIndex:(unsigned int)idx { return [[[self filter] conditions] objectAtIndex:idx]; } Modified: trunk/bibdesk/Scripting/BibDesk.sdef =================================================================== --- trunk/bibdesk/Scripting/BibDesk.sdef 2008-02-18 20:50:00 UTC (rev 12814) +++ trunk/bibdesk/Scripting/BibDesk.sdef 2008-02-19 01:58:59 UTC (rev 12815) @@ -1105,34 +1105,40 @@ <cocoa key="scriptingComparison"/> </property> <property name="value" code="valu" type="text" access="r" - description="The text value of the generic condition."> - <cocoa key="scriptingStringValue"/> + description="The value of the condition. Text for a generic condition, an attachment count for an attachment condition, a record containg one or two periods, or a record containing one or two dates."> + <type type="period condition value"/> + <type type="date condition value"/> + <type type="text"/> + <type type="integer"/> + <cocoa key="scriptingValue"/> </property> - <property name="attachment count" code="ACnt" type="integer" access="r" - description="The attachment count of the attachment condition."> - <cocoa key="scriptingCountValue"/> - </property> + </class> + + <record-type name="period condition value" code="CPVl"> <property name="period" code="Perd" type="integer" access="r" description="The amount of a period of the date condition."> - <cocoa key="scriptingNumberValue"/> + <cocoa key="numberValue"/> </property> <property name="end period" code="EPer" type="integer" access="r" description="The end amount of a period range of the date condition."> - <cocoa key="scriptingAndNumberValue"/> + <cocoa key="andNumberValue"/> </property> <property name="period type" code="TPer" type="period unit" access="r" description="The kind of period of the date condition."> - <cocoa key="scriptingPeriodValue"/> + <cocoa key="periodValue"/> </property> + </record-type> + + <record-type name="date condition value" code="CTVl"> <property name="date" code="ldt " type="date" access="r" description="The date of the date condition."> - <cocoa key="scriptingDateValue"/> + <cocoa key="dateValue"/> </property> <property name="end date" code="Eldt" type="date" access="r" description="The end date for a date range of the date condition."> - <cocoa key="scriptingToDateValue"/> + <cocoa key="toDateValue"/> </property> - </class> + </record-type> <record-type name="search server info" code="SrvI"> <property name="name" code="pnam" type="text" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |