mirror of
https://github.com/TermiT/Flycut.git
synced 2025-02-22 15:05:23 +08:00
258 lines
7.1 KiB
Objective-C
Executable file
258 lines
7.1 KiB
Objective-C
Executable file
//
|
|
// JumpcutClipping.m
|
|
// Jumpcut
|
|
// http://jumpcut.sourceforge.net/
|
|
//
|
|
// Created by steve on Sun Jan 12 2003.
|
|
// Copyright (c) 2003-2006 Steve Cook
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the "Software"),
|
|
// to deal in the Software without restriction, including without limitation
|
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
// and/or sell copies of the Software, and to permit persons to whom the
|
|
// Software is furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included
|
|
// in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
|
// THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
#import "JumpcutClipping.h"
|
|
|
|
@implementation JumpcutClipping
|
|
|
|
-(id) init
|
|
{
|
|
[self initWithContents:@""
|
|
withType:@""
|
|
withDisplayLength:40
|
|
withAppLocalizedName:@""
|
|
withAppBundleURL:nil
|
|
withTimestamp:0];
|
|
return self;
|
|
}
|
|
|
|
-(id) initWithContents:(NSString *)contents withType:(NSString *)type withDisplayLength:(int)displayLength withAppLocalizedName:(NSString *)localizedName withAppBundleURL:(NSString*)bundleURL withTimestamp:(int)timestamp
|
|
{
|
|
[super init];
|
|
clipContents = [[[NSString alloc] init] retain];
|
|
clipDisplayString = [[[NSString alloc] init] retain];
|
|
clipType = [[[NSString alloc] init] retain];
|
|
|
|
[self setContents:contents setDisplayLength:displayLength];
|
|
[self setType:type];
|
|
[self setAppLocalizedName:localizedName];
|
|
[self setAppBundleURL:bundleURL];
|
|
[self setTimestamp:timestamp];
|
|
[self setHasName:false];
|
|
|
|
return self;
|
|
}
|
|
|
|
/* - (id)initWithCoder:(NSCoder *)coder
|
|
{
|
|
NSString * newContents;
|
|
int newDisplayLength;
|
|
NSString *newType;
|
|
BOOL newHasName;
|
|
if ( self = [super init]) {
|
|
newContents = [NSString stringWithString:[coder decodeObject]];
|
|
[coder decodeValueOfObjCType:@encode(int) at:&newDisplayLength];
|
|
newType = [NSString stringWithString:[coder decodeObject]];
|
|
[coder decodeValueOfObjCType:@encode(BOOL) at:&newHasName];
|
|
[self setContents:newContents
|
|
setDisplayLength:newDisplayLength];
|
|
[self setType:newType];
|
|
[self setHasName:newHasName];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)encodeWithCoder:(NSCoder *)coder
|
|
{
|
|
int codeDisplayLength = [self displayLength];
|
|
BOOL codeHasName = [self hasName];
|
|
[coder encodeObject:[self contents]];
|
|
[coder encodeValueOfObjCType:@encode(int) at:&codeDisplayLength];
|
|
[coder encodeObject:[self type]];
|
|
[coder encodeValueOfObjCType:@encode(BOOL) at:&codeHasName];
|
|
} */
|
|
|
|
-(void) setContents:(NSString *)newContents setDisplayLength:(int)newDisplayLength
|
|
{
|
|
id old = clipContents;
|
|
[newContents retain];
|
|
clipContents = newContents;
|
|
[old release];
|
|
if ( newDisplayLength > 0 ) {
|
|
clipDisplayLength = newDisplayLength;
|
|
}
|
|
[self resetDisplayString];
|
|
}
|
|
|
|
-(void) setContents:(NSString *)newContents
|
|
{
|
|
id old = clipContents;
|
|
[newContents retain];
|
|
clipContents = newContents;
|
|
[old release];
|
|
[self resetDisplayString];
|
|
}
|
|
|
|
-(void) setType:(NSString *)newType
|
|
{
|
|
id old = clipType;
|
|
[newType retain];
|
|
clipType = newType;
|
|
[old release];
|
|
}
|
|
|
|
-(void) setDisplayLength:(int)newDisplayLength
|
|
{
|
|
if ( newDisplayLength > 0 ) {
|
|
clipDisplayLength = newDisplayLength;
|
|
[self resetDisplayString];
|
|
}
|
|
}
|
|
|
|
-(void) setAppLocalizedName:(NSString *)new
|
|
{
|
|
id old = appLocalizedName;
|
|
[new retain];
|
|
appLocalizedName = new;
|
|
[old release];
|
|
}
|
|
|
|
-(void) setAppBundleURL:(NSString *)new
|
|
{
|
|
id old = appBundleURL;
|
|
[new retain];
|
|
appBundleURL = new;
|
|
[old release];
|
|
}
|
|
|
|
-(void) setTimestamp:(NSString *)newTimestamp
|
|
{
|
|
clipTimestamp = newTimestamp;
|
|
}
|
|
|
|
-(void) setHasName:(BOOL)newHasName
|
|
{
|
|
clipHasName = newHasName;
|
|
}
|
|
|
|
-(void) resetDisplayString
|
|
{
|
|
NSString *newDisplayString, *firstLineOfClipping, *trimmedString;
|
|
NSUInteger start, lineEnd, contentsEnd;
|
|
NSRange startRange = NSMakeRange(0,0);
|
|
NSRange contentsRange;
|
|
// We're resetting the display string, so release the old one.
|
|
[clipDisplayString release];
|
|
// We want to restrict the display string to the clipping contents through the first line break.
|
|
trimmedString = [clipContents stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
|
|
[trimmedString getLineStart:&start end:&lineEnd contentsEnd:&contentsEnd forRange:startRange];
|
|
contentsRange = NSMakeRange(0, contentsEnd);
|
|
firstLineOfClipping = [trimmedString substringWithRange:contentsRange];
|
|
if ( [firstLineOfClipping length] > clipDisplayLength ) {
|
|
newDisplayString = [[NSString stringWithString:[firstLineOfClipping substringToIndex:clipDisplayLength]] stringByAppendingString:@"…"];
|
|
} else {
|
|
newDisplayString = [NSString stringWithString:firstLineOfClipping];
|
|
}
|
|
[newDisplayString retain];
|
|
clipDisplayString = newDisplayString;
|
|
}
|
|
|
|
-(NSString *) description
|
|
{
|
|
NSString *description = [[super description] stringByAppendingString:@": "];
|
|
description = [description stringByAppendingString:[self displayString]];
|
|
return description;
|
|
}
|
|
|
|
-(JumpcutClipping *) clipping
|
|
{
|
|
return self;
|
|
}
|
|
|
|
-(NSString *) contents
|
|
{
|
|
// NSString *returnClipContents;
|
|
// returnClipContents = [NSString stringWithString:clipContents];
|
|
// return returnClipContents;
|
|
return clipContents;
|
|
}
|
|
|
|
-(NSString *) appLocalizedName
|
|
{
|
|
return appLocalizedName;
|
|
}
|
|
|
|
-(NSString *) appBundleURL
|
|
{
|
|
return appBundleURL;
|
|
}
|
|
|
|
-(int) timestamp
|
|
{
|
|
return clipTimestamp;
|
|
}
|
|
|
|
-(int) displayLength
|
|
{
|
|
return clipDisplayLength;
|
|
}
|
|
|
|
-(NSString *) type
|
|
{
|
|
return clipType;
|
|
}
|
|
|
|
-(NSString *) displayString
|
|
{
|
|
// QUESTION
|
|
// Why doesn't the below work?
|
|
// NSString *returnClipDisplayString;
|
|
// returnClipDisplayString = [NSString stringWithString:clipDisplayString];
|
|
// return returnClipDisplayString;
|
|
return clipDisplayString;
|
|
}
|
|
|
|
-(BOOL) hasName
|
|
{
|
|
return clipHasName;
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)other {
|
|
if (other == self)
|
|
return YES;
|
|
if (!other || ![other isKindOfClass:[self class]])
|
|
return NO;
|
|
JumpcutClipping * otherClip = (JumpcutClipping *)other;
|
|
return ([self.type isEqualToString:otherClip.type] &&
|
|
[self.displayString isEqualToString:otherClip.displayString] &&
|
|
(self.displayLength == otherClip.displayLength) &&
|
|
[self.contents isEqualToString:otherClip.contents]);
|
|
}
|
|
|
|
|
|
|
|
-(void) dealloc
|
|
{
|
|
[clipContents release];
|
|
[clipType release];
|
|
[appLocalizedName release];
|
|
[appBundleURL release];
|
|
clipDisplayLength = 0;
|
|
[clipDisplayString release];
|
|
clipHasName = 0;
|
|
[super dealloc];
|
|
}
|
|
@end
|