From db492e315730afc3ec7fe21f8f6102e42675e8d6 Mon Sep 17 00:00:00 2001 From: Joseph Spiros Date: Sun, 1 Mar 2009 23:10:43 -0500 Subject: [PATCH] Renamed the product from GrowlITTSW to ITTSW. Added image size customization options and word wrap. --- English.lproj/GrowlITTSWPrefs.nib/classes.nib | 24 +++++++ .../GrowlITTSWPrefs.nib/keyedobjects.nib | Bin 12301 -> 15089 bytes GrowlITTSW.xcodeproj/project.pbxproj | 20 +++--- GrowlITTSWController.h | 6 +- GrowlITTSWController.m | 33 +++++++-- GrowlITTSWDisplay.m | 8 +-- GrowlITTSWPrefs.h | 13 ++++ GrowlITTSWPrefs.m | 65 ++++++++++++++++++ Info.plist | 4 +- 9 files changed, 146 insertions(+), 27 deletions(-) diff --git a/English.lproj/GrowlITTSWPrefs.nib/classes.nib b/English.lproj/GrowlITTSWPrefs.nib/classes.nib index 6462c4d..c76a295 100644 --- a/English.lproj/GrowlITTSWPrefs.nib/classes.nib +++ b/English.lproj/GrowlITTSWPrefs.nib/classes.nib @@ -64,6 +64,14 @@ id setBackgroundStyle id + setBadgeImageWithAppIcon + id + setImageNoUpscale + id + setImageSize + id + setIndentWrap + id setScreen id setVanishDelay @@ -74,6 +82,10 @@ id setWindowSize id + setWrap + id + setWrapColumns + id CLASS GrowlITTSWPrefs @@ -89,6 +101,14 @@ NSColorWell backgroundStyleButton NSPopUpButton + badgeImageWithAppIconButton + NSButton + imageNoUpscaleButton + NSButton + imageSizeSlider + NSSlider + indentWrapButton + NSButton screenButton NSPopUpButton slider_opacity @@ -101,6 +121,10 @@ NSSlider windowSizeButton NSPopUpButton + wrapColumnsField + NSTextField + wrapNotificationsButton + NSButton SUPERCLASS NSPreferencePane diff --git a/English.lproj/GrowlITTSWPrefs.nib/keyedobjects.nib b/English.lproj/GrowlITTSWPrefs.nib/keyedobjects.nib index 7a1f10afbd8674ef5ddfbdf48a138783ede161a7..50567d28b16ce68f60db6212a968e7e6e460e63d 100644 GIT binary patch literal 15089 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 oldSize.height) { + newSize = NSMakeSize(_imageSize, (oldSize.height * (_imageSize / oldSize.width))); + } else { + newSize = NSMakeSize((oldSize.width * (_imageSize / oldSize.height)), _imageSize); + } + + image = [[[[NSImage alloc] initWithData:[image TIFFRepresentation]] autorelease] imageScaledSmoothlyToSize:newSize]; + } - if (oldSize.width > oldSize.height) { - newSize = NSMakeSize(110.0f, (oldSize.height * (110.0f / oldSize.width))); - } else { - newSize = NSMakeSize((oldSize.width * (110.0f / oldSize.height)), 110.0f); + if (_wrapNotifications) { + text = [text stringByReplacingOccurrencesOfRegex:[NSString stringWithFormat:@"(.{1,%i})(?: +|$)\\n?|(.{%i})", _wrapColumns, _wrapColumns] withString:@"$1$2\n"]; } - image = [[[[NSImage alloc] initWithData:[image TIFFRepresentation]] autorelease] imageScaledSmoothlyToSize:newSize]; + //trim trailing whitespace + text = [text stringByReplacingOccurrencesOfRegex:@"[\\s\\r\\n]+$" withString:@""]; NSArray *gothicChars = [NSArray arrayWithObjects:[NSString stringWithUTF8String:"☆"], [NSString stringWithUTF8String:"★"], nil]; NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text]; @@ -125,7 +144,7 @@ if (([gothicChars count] > 0) && ([text length] > 0)) { NSMutableString *gothicRegex = [[NSMutableString alloc] init]; - [gothicRegex appendString:@"["]; + [gothicRegex appendString:@"[\\n"]; for (NSString *gothicChar in gothicChars) { [gothicRegex appendString:gothicChar]; } diff --git a/GrowlITTSWDisplay.m b/GrowlITTSWDisplay.m index b6727e8..ac9a647 100644 --- a/GrowlITTSWDisplay.m +++ b/GrowlITTSWDisplay.m @@ -31,13 +31,7 @@ NSString *title = [dict objectForKey:GROWL_NOTIFICATION_TITLE]; NSString *desc = [dict objectForKey:GROWL_NOTIFICATION_DESCRIPTION]; NSImage *image = [dict objectForKey:GROWL_NOTIFICATION_ICON]; - NSString *text; - if (desc) { - text = [title stringByAppendingFormat:@"\n%@", desc]; - } else { - text = title; - } - [[GrowlITTSWController sharedController] showWindowWithText:text image:image]; + [[GrowlITTSWController sharedController] showWindowWithTitle:title text:desc image:image]; } @end diff --git a/GrowlITTSWPrefs.h b/GrowlITTSWPrefs.h index a83d30f..bf3986c 100644 --- a/GrowlITTSWPrefs.h +++ b/GrowlITTSWPrefs.h @@ -14,6 +14,10 @@ IBOutlet NSPopUpButton *windowSizeButton; IBOutlet NSPopUpButton *screenButton; + IBOutlet NSSlider *imageSizeSlider; + IBOutlet NSButton *imageNoUpscaleButton; + IBOutlet NSButton *wrapNotificationsButton; + IBOutlet NSTextField *wrapColumnsField; } + (Class)appearanceEffect; @@ -29,6 +33,11 @@ + (ITHorizontalWindowPosition)horizontalPosition; + (ITVerticalWindowPosition)verticalPosition; ++ (float)imageSize; ++ (BOOL)imageNoUpscale; ++ (BOOL)wrapNotifications; ++ (int)wrapColumns; + - (IBAction)setAppearanceEffect:(id)sender; - (IBAction)setAppearanceSpeed:(id)sender; - (IBAction)setVanishEffect:(id)sender; @@ -40,5 +49,9 @@ - (IBAction)setWindowSize:(id)sender; - (IBAction)setScreen:(id)sender; +- (IBAction)setImageSize:(id)sender; +- (IBAction)setImageNoUpscale:(id)sender; +- (IBAction)setWrap:(id)sender; +- (IBAction)setWrapColumns:(id)sender; @end diff --git a/GrowlITTSWPrefs.m b/GrowlITTSWPrefs.m index df4f7bf..9a6eac2 100644 --- a/GrowlITTSWPrefs.m +++ b/GrowlITTSWPrefs.m @@ -127,6 +127,34 @@ } } ++ (float)imageSize { + SYNCHRONIZE_GROWL_PREFS(); + float imageSize = 110.0f; + READ_GROWL_PREF_FLOAT(@"imageSize", GrowlITTSWPrefsDomain, &imageSize); + return imageSize; +} + ++ (BOOL)imageNoUpscale { + SYNCHRONIZE_GROWL_PREFS(); + BOOL imageNoUpscale = NO; + READ_GROWL_PREF_BOOL(@"imageNoUpscale", GrowlITTSWPrefsDomain, &imageNoUpscale); + return imageNoUpscale; +} + ++ (BOOL)wrapNotifications { + SYNCHRONIZE_GROWL_PREFS(); + BOOL wrapNotifications = NO; + READ_GROWL_PREF_BOOL(@"wrapNotifications", GrowlITTSWPrefsDomain, &wrapNotifications); + return wrapNotifications; +} + ++ (int)wrapColumns { + SYNCHRONIZE_GROWL_PREFS(); + int wrapColumns = 64; + READ_GROWL_PREF_INT(@"wrapColumns", GrowlITTSWPrefsDomain, &wrapColumns); + return wrapColumns; +} + - (NSString *)mainNibName { return @"GrowlITTSWPrefs"; } @@ -165,6 +193,13 @@ [screenButton setEnabled:NO]; } [screenButton selectItemAtIndex:[screenButton indexOfItemWithRepresentedObject:[GrowlITTSWPrefs screen]]]; + [imageSizeSlider setFloatValue:[GrowlITTSWPrefs imageSize]]; + [imageNoUpscaleButton setState:([GrowlITTSWPrefs imageNoUpscale] ? NSOnState : NSOffState)]; + + BOOL wrapNotifications = [GrowlITTSWPrefs wrapNotifications]; + [wrapNotificationsButton setState:(wrapNotifications ? NSOnState : NSOffState)]; + [wrapColumnsField setIntValue:[GrowlITTSWPrefs wrapColumns]]; + [wrapColumnsField setEnabled:wrapNotifications]; } - (void)awakeFromNib { @@ -275,4 +310,34 @@ UPDATE_GROWL_PREFS(); } +- (IBAction)setImageSize:(id)sender { + SYNCHRONIZE_GROWL_PREFS(); + float imageSize = [imageSizeSlider floatValue]; + WRITE_GROWL_PREF_FLOAT(@"imageSize", imageSize, GrowlITTSWPrefsDomain); + UPDATE_GROWL_PREFS(); +} + +- (IBAction)setImageNoUpscale:(id)sender { + SYNCHRONIZE_GROWL_PREFS(); + BOOL imageNoUpscale = ([imageNoUpscaleButton state] == NSOnState) ? YES : NO; + WRITE_GROWL_PREF_BOOL(@"imageNoUpscale", imageNoUpscale, GrowlITTSWPrefsDomain); + UPDATE_GROWL_PREFS(); +} + +- (IBAction)setWrap:(id)sender { + SYNCHRONIZE_GROWL_PREFS(); + BOOL wrapNotifications = ([wrapNotificationsButton state] == NSOnState) ? YES : NO; + [wrapColumnsField setEnabled:wrapNotifications]; + WRITE_GROWL_PREF_BOOL(@"wrapNotifications", wrapNotifications, GrowlITTSWPrefsDomain); + UPDATE_GROWL_PREFS(); +} + +- (IBAction)setWrapColumns:(id)sender { + SYNCHRONIZE_GROWL_PREFS(); + int wrapColumns = [wrapColumnsField intValue]; + [wrapColumnsField setIntValue:wrapColumns]; + WRITE_GROWL_PREF_INT(@"wrapColumns", wrapColumns, GrowlITTSWPrefsDomain); + UPDATE_GROWL_PREFS(); +} + @end diff --git a/Info.plist b/Info.plist index 7bc2d5d..920e1e1 100644 --- a/Info.plist +++ b/Info.plist @@ -5,13 +5,13 @@ CFBundleDevelopmentRegion English CFBundleExecutable - GrowlITTSW + ITTSW CFBundleIdentifier com.ithinksw.growl-ittsw CFBundleInfoDictionaryVersion 6.0 CFBundleName - GrowlITTSW + ITTSW CFBundlePackageType DISP CFBundleSignature -- 2.20.1