X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/dd9a7dd8dd7d77b949d2548fb763c9b968c69cea..5a5f8385d7cf8bca82ac4bafe96d1dd313a1bc24:/Showcase/Controller.m?ds=inline diff --git a/Showcase/Controller.m b/Showcase/Controller.m index ee2a19c..ac02c52 100755 --- a/Showcase/Controller.m +++ b/Showcase/Controller.m @@ -1,6 +1,17 @@ #import "Controller.h" -#import "ITTransientStatusWindow.h" +//#import "ITTransientStatusWindow.h" +#import "ITIconAndTextStatusWindow.h" +#import "ITTSWBackgroundView.h" #import "ITTextField.h" +#import "ITBevelView.h" +#import "ITCutWindowEffect.h" +#import "ITDissolveWindowEffect.h" +#import "ITSlideHorizontallyWindowEffect.h" +#import "ITSlideVerticallyWindowEffect.h" +#import "ITPivotWindowEffect.h" +#import "ITZoomWindowEffect.h" +#import "ITMultilineTextFieldCell.h" + #define SW_PAD 24.0 #define SW_SPACE 24.0 @@ -8,6 +19,7 @@ #define SW_BORDER 32.0 #define SW_IMAGE @"Library" + @interface Controller (ITStatusItemSupport) - (void)createStatusItem; - (void)removeStatusItem; @@ -19,9 +31,26 @@ - (void)awakeFromNib { [self createStatusItem]; + [button setBezelStyle:1001]; + [button setFont:[NSFont fontWithName:@"Lucida Grande Bold" size:14]]; + [button setTitle:@"Launch Manually"]; + [button sizeToFit]; + [button setFrameSize:NSMakeSize([button frame].size.width + 8, 24)]; [testTextField setCastsShadow:YES]; - statusWindow = [ITTransientStatusWindow sharedWindow]; + [tabView setAllowsDragging:YES]; + [bevelView setBevelDepth:10]; + statusWindow = [ITIconAndTextStatusWindow sharedWindow]; + [statusWindow setEntryEffect:[[ITCutWindowEffect alloc] initWithWindow:statusWindow]]; + [statusWindow setExitEffect:[[ITCutWindowEffect alloc] initWithWindow:statusWindow]]; + [[statusWindow entryEffect] setEffectTime:[swEntrySpeedSlider floatValue]]; + [[statusWindow exitEffect] setEffectTime:[swExitSpeedSlider floatValue]]; + [self populateEffectPopups]; // [tabView setAllowsDragging:YES]; + [[NSColorPanel sharedColorPanel] setShowsAlpha:YES]; + + [tableView setRowHeight:200]; + [[tableView tableColumnWithIdentifier:@"custom"] setDataCell:[[[ITMultilineTextFieldCell alloc] init] autorelease]]; + [[tableView tableColumnWithIdentifier:@"image"] setDataCell:[[[NSImageCell alloc] init] autorelease]]; } /*************************************************************************/ @@ -47,6 +76,10 @@ } [statusItem setMenu:statusItemMenu]; + + [statusItemMenu addItemWithTitle:[NSString stringWithUTF8String:"★★★★★"] + action:nil + keyEquivalent:@""]; } - (void)removeStatusItem @@ -121,112 +154,135 @@ #pragma mark ITTransientStatusWindow SUPPORT /*************************************************************************/ +- (void)populateEffectPopups +{ + NSArray *effects = [ITWindowEffect effectClasses]; + int i; + [entryEffectPopup removeAllItems]; + [exitEffectPopup removeAllItems]; + for (i = 0; i < [effects count]; i++) { + id anItem = [effects objectAtIndex:i]; + [entryEffectPopup addItemWithTitle:[anItem effectName]]; + [exitEffectPopup addItemWithTitle:[anItem effectName]]; + [[entryEffectPopup lastItem] setRepresentedObject:anItem]; + [[exitEffectPopup lastItem] setRepresentedObject:anItem]; + } +} + - (IBAction)buildStatusWindow:(id)sender { - NSImageView *imageView = nil; - ITTextField *textField = nil; NSImage *image = [NSImage imageNamed:SW_IMAGE]; - NSRect imageRect; - NSRect textRect; - - float imageWidth = 0.0; - float imageHeight = 0.0; - float textWidth = 0.0; - float textHeight = 0.0; - float contentHeight = 0.0; - float windowWidth = 0.0; - float windowHeight = 0.0; - - NSString *text = [swSampleTextView string]; - NSArray *lines = [text componentsSeparatedByString:@"\n"]; - id oneLine = nil; - NSEnumerator *lineEnum = [lines objectEnumerator]; - - NSFont *font = [NSFont fontWithName:@"Lucida Grande Bold" size:18]; - NSDictionary *attr = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]; - - // Get image width and height. - imageWidth = [image size].width; - imageHeight = [image size].height; - - // Iterate over each line to get text width and height - while ( oneLine = [lineEnum nextObject] ) { - // Get the width of one line, adding 8.0 because Apple sucks donkey rectum. - float oneLineWidth = ( [oneLine sizeWithAttributes:attr].width + 8.0 ); - // Add the height of this line to the total text height - textHeight += [oneLine sizeWithAttributes:attr].height; - // If this line wider than the last one, set it as the text width. - textWidth = ( ( textWidth > oneLineWidth ) ? textWidth : oneLineWidth ); + NSString *text = [swSampleTextView string]; + [statusWindow setImage:image]; + [statusWindow buildTextWindowWithString:text]; +} + +- (IBAction)toggleStatusWindow:(id)sender +{ + if ( ([statusWindow visibilityState] == ITWindowHiddenState) || + ([statusWindow visibilityState] == ITWindowVanishingState) ) { + [[statusWindow contentView] setNeedsDisplay:YES]; + [statusWindow appear:self]; + } else { + [statusWindow vanish:self]; } - - // Add 4.0 to the final textHeight to accomodate the shadow. - textHeight += 4.0; - - // Set the content height to the greater of the text and image heights. - contentHeight = ( ( imageHeight > textHeight ) ? imageHeight : textHeight ); - - // Setup the Window, and remove all its contentview's subviews. - windowWidth = ( SW_PAD + imageWidth + SW_SPACE + textWidth + SW_PAD ); - windowHeight = ( SW_PAD + contentHeight + SW_PAD ); - [statusWindow setFrame:NSMakeRect(SW_BORDER, SW_BORDER, windowWidth, windowHeight) display:YES]; - [[[statusWindow contentView] subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; - - // Setup, position, fill, and add the image view to the content view. - imageRect = NSMakeRect( SW_PAD, - (SW_PAD + ((contentHeight - imageHeight) / 2)), - imageWidth, - imageHeight ); - imageView = [[[NSImageView alloc] initWithFrame:imageRect] autorelease]; - [imageView setImage:image]; - [[statusWindow contentView] addSubview:imageView]; - - // Setup, position, fill, and add the text view to the content view. - textRect = NSMakeRect( (SW_PAD + imageWidth + SW_SPACE), - (SW_PAD + ((contentHeight - textHeight) / 2)), - textWidth, - textHeight); - textField = [[[ITTextField alloc] initWithFrame:textRect] autorelease]; - [textField setEditable:NO]; - [textField setSelectable:NO]; - [textField setBordered:NO]; - [textField setDrawsBackground:NO]; - [textField setFont:[NSFont fontWithName:@"Lucida Grande Bold" size:18]]; - [textField setTextColor:[NSColor whiteColor]]; - [textField setCastsShadow:YES]; - [textField setStringValue:text]; - [[statusWindow contentView] addSubview:textField]; +} + +- (IBAction)changeWindowSetting:(id)sender +{ + if ( [sender tag] == 3010 ) { + + if ( [sender indexOfSelectedItem] == 0) { + [statusWindow setExitMode:ITTransientStatusWindowExitAfterDelay]; + } else if ( [sender indexOfSelectedItem] == 1) { + [statusWindow setExitMode:ITTransientStatusWindowExitOnCommand]; + } + + } else if ( [sender tag] == 3020 ) { + // Not yet supported + } else if ( [sender tag] == 3030 ) { + [statusWindow setExitDelay:[sender floatValue]]; + } else if ( [sender tag] == 3040 ) { + [statusWindow setVerticalPosition:[sender indexOfSelectedItem]]; + } else if ( [sender tag] == 3050 ) { + [statusWindow setHorizontalPosition:[sender indexOfSelectedItem]]; + } else if ( [sender tag] == 3060 ) { + [[statusWindow entryEffect] setEffectTime:[sender floatValue]]; + } else if ( [sender tag] == 3061 ) { + [[statusWindow exitEffect] setEffectTime:[sender floatValue]]; + } else if ( [sender tag] == 3070 ) { + [statusWindow setEntryEffect:[[[[[sender selectedItem] representedObject] alloc] initWithWindow:statusWindow] autorelease]]; + [[statusWindow entryEffect] setEffectTime:[swEntrySpeedSlider floatValue]]; + } else if ( [sender tag] == 3080 ) { + [statusWindow setExitEffect:[[[[[sender selectedItem] representedObject] alloc] initWithWindow:statusWindow] autorelease]]; + [[statusWindow exitEffect] setEffectTime:[swExitSpeedSlider floatValue]]; + } else if ( [sender tag] == 3090 ) { + if ( [sender indexOfSelectedItem] == 0 ) { + [(ITTSWBackgroundView *)[statusWindow contentView] setBackgroundMode:ITTSWBackgroundApple]; + } else if ( [sender indexOfSelectedItem] == 1 ) { + [(ITTSWBackgroundView *)[statusWindow contentView] setBackgroundMode:ITTSWBackgroundReadable]; + } else if ( [sender indexOfSelectedItem] == 2 ) { + [(ITTSWBackgroundView *)[statusWindow contentView] setBackgroundMode:ITTSWBackgroundColored]; + } + } else if ( [sender tag] == 3100 ) { + [(ITTSWBackgroundView *)[statusWindow contentView] setBackgroundColor:[sender color]]; + } +} + + +/*************************************************************************/ +#pragma mark - +#pragma mark ITTabView SUPPORT +/*************************************************************************/ + +- (IBAction)toggleTabDragging:(id)sender +{ + if ([sender state] == NSOnState) { + [tabView setAllowsDragging:YES]; + } else { + [tabView setAllowsDragging:NO]; + } +} - [[statusWindow contentView] setNeedsDisplay:YES]; +- (IBAction)toggleCommandDragging:(id)sender +{ + if ([sender state] == NSOnState) { + [tabView setRequiredModifiers:NSCommandKeyMask]; + } else { + [tabView setRequiredModifiers:0]; + } } -- (IBAction)showStatusWindow:(id)sender +- (IBAction)toggleControlDragging:(id)sender { -// [[statusWindow contentView] setNeedsDisplay:YES]; - [statusWindow setFrame:NSMakeRect( (0.0 - NSWidth([statusWindow frame])), - SW_BORDER, - NSWidth([statusWindow frame]), - NSHeight([statusWindow frame]) ) - display:YES]; - [statusWindow orderFront:self]; - [statusWindow setFrame:NSMakeRect( SW_BORDER, - SW_BORDER, - NSWidth([statusWindow frame]), - NSHeight([statusWindow frame]) ) - display:YES - animate:YES]; } -- (IBAction)hideStatusWindow:(id)sender +- (IBAction)toggleOptionDragging:(id)sender { - [statusWindow orderOut:self]; } -- (IBAction)setRotation:(id)sender +- (IBAction)toggleShiftDragging:(id)sender +{ +} + + +/*************************************************************************/ +#pragma mark - +#pragma mark ITBevelView SUPPORT +/*************************************************************************/ + +- (IBAction)changeBevelViewSetting:(id)sender { - [statusWindow setRotation:([sender floatValue] * (pi / 180))]; + [bevelView setBevelDepth:[sender intValue]]; } +/*************************************************************************/ +#pragma mark - +#pragma mark ITButton SUPPORT +/*************************************************************************/ + + /*************************************************************************/ #pragma mark - #pragma mark NSWindow DELEGATE METHODS @@ -237,5 +293,28 @@ [[note object] setMiniwindowImage:[NSImage imageNamed:@"ITStatusItem"]]; } +/*************************************************************************/ +#pragma mark - +#pragma mark ITMultilineTextFieldCell SUPPORT +/*************************************************************************/ + +- (int)numberOfRowsInTableView:(NSTableView *)aTableView { + return 50; +} + +- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex { + if ([[aTableColumn dataCell] isKindOfClass:[ITMultilineTextFieldCell class]]) { + if (rowIndex%2) { + return [NSArray arrayWithObjects:@"Foo", @"Bar", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", @"- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex", nil]; + } else { + return [NSArray arrayWithObjects:[[[NSAttributedString alloc] initWithString:@"This is a demo of ITMultilineTextFieldCell" attributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Gill Sans" size:48], NSFontAttributeName, [NSColor purpleColor], NSForegroundColorAttributeName, nil]] autorelease], [[[NSAttributedString alloc] initWithString:@"Bar" attributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSFont fontWithName:@"Gadget" size:20], NSFontAttributeName, nil]] autorelease], [[[NSObject alloc] init] autorelease], nil]; + } + } else if ([[aTableColumn dataCell] isKindOfClass:[NSImageCell class]]) { + return [NSImage imageNamed:@"NSApplicationIcon"]; + } else { + return @"I like cheese"; + } +} + @end