X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fmacosx%2Fabout.m;h=34447992e676e396e7ea4e717ede342f087adfc8;hb=331299dc7bc9c03c17e68e9a1cb4335b535866b5;hp=f2e236cfb7c314a9303732b1fc9970054eba27a1;hpb=f25e0c78ab9c2ac87705454dfe7090715519714f;p=vlc diff --git a/modules/gui/macosx/about.m b/modules/gui/macosx/about.m index f2e236cfb7..34447992e6 100644 --- a/modules/gui/macosx/about.m +++ b/modules/gui/macosx/about.m @@ -1,11 +1,11 @@ /***************************************************************************** * about.m: MacOS X About Panel ***************************************************************************** - * Copyright (C) 2001-2007 the VideoLAN team + * Copyright (C) 2001-2013 VLC authors and VideoLAN * $Id$ * * Authors: Derk-Jan Hartman - * Felix Paul KŸhne + * Felix Paul Kühne * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,18 +25,18 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include "intf.h" -#include "about.h" -#include -#include -#import +#import "intf.h" +#import "about.h" +#import +#import +#import "CompatibilityFixes.h" #ifdef __x86_64__ -#define PLATFORM "Intel" +#define PLATFORM "Intel 64bit" #elif __i386__ -#define PLATFORM "Intel" +#define PLATFORM "Intel 32bit" #else -#define PLATFORM "PowerPC" +#define PLATFORM "PowerPC 32bit" #endif /***************************************************************************** @@ -53,55 +53,98 @@ static VLAboutBox *_o_sharedInstance = nil; - (id)init { - if (_o_sharedInstance) { + if (_o_sharedInstance) [self dealloc]; - } else { + else _o_sharedInstance = [super init]; - } - + return _o_sharedInstance; } +- (void) dealloc +{ + [o_authors release]; + [[NSNotificationCenter defaultCenter] removeObserver: self]; + [super dealloc]; +} + +- (void)awakeFromNib +{ + if (!OSX_SNOW_LEOPARD) + [o_about_window setCollectionBehavior: NSWindowCollectionBehaviorFullScreenAuxiliary]; +} + /***************************************************************************** * VLC About Window *****************************************************************************/ - (void)showAbout { - if(! b_isSetUp ) - { - NSDictionary *o_local_dict; - + if (! b_isSetUp) { /* Get the localized info dictionary (InfoPlist.strings) */ + NSDictionary *o_local_dict; o_local_dict = [[NSBundle mainBundle] localizedInfoDictionary]; - /* Setup the name field */ - [o_name_field setStringValue: [o_local_dict objectForKey:@"CFBundleName"]]; - - /* Set the about box title */ + /* Setup the copyright field */ + [o_copyright_field setStringValue: [o_local_dict objectForKey:@"NSHumanReadableCopyright"]]; + + /* l10n */ [o_about_window setTitle: _NS("About VLC media player")]; + NSDictionary *stringAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:NSUnderlineStyleSingle], NSUnderlineStyleAttributeName, [NSColor colorWithCalibratedRed:0. green:0.3411 blue:0.6824 alpha:1.], NSForegroundColorAttributeName, [NSFont systemFontOfSize:13], NSFontAttributeName, nil]; + NSAttributedString *attrStr; + attrStr = [[NSAttributedString alloc] initWithString:_NS("Credits") attributes:stringAttributes]; + [o_credits_btn setAttributedTitle:attrStr]; + [attrStr release]; + attrStr = [[NSAttributedString alloc] initWithString:_NS("License") attributes:stringAttributes]; + [o_gpl_btn setAttributedTitle:attrStr]; + [attrStr release]; + attrStr = [[NSAttributedString alloc] initWithString:_NS("Authors") attributes:stringAttributes]; + [o_authors_btn setAttributedTitle:attrStr]; + [attrStr release]; + [o_trademarks_txt setStringValue:_NS("VLC media player and VideoLAN are trademarks of the VideoLAN Association.")]; /* setup the creator / revision field */ - if( VLC_Changeset() != "exported" ) - [o_revision_field setStringValue: - [NSString stringWithFormat: _NS("Compiled by %s, based on SVN revision %s"), - VLC_CompileBy(), VLC_Changeset()]]; - else - [o_revision_field setStringValue: [NSString stringWithFormat: - _NS("Compiled by %s"), VLC_CompileBy()]]; - + NSString *compiler; +#ifdef __clang__ + compiler = [NSString stringWithFormat:@"clang %s", __clang_version__]; +#elif __llvm__ + compiler = [NSString stringWithFormat:@"llvm-gcc %s", __VERSION__]; +#else + compiler = [NSString stringWithFormat:@"gcc %s", __VERSION__]; +#endif + [o_revision_field setStringValue: [NSString stringWithFormat: _NS("Compiled by %s with %@"), VLC_CompileBy(), compiler]]; + /* Setup the nameversion field */ - [o_name_version_field setStringValue: [NSString stringWithFormat:@"Version %s (%s)", VLC_Version(), PLATFORM]]; - - /* setup the authors and thanks field */ - [o_credits_textview setString: [NSString stringWithFormat: @"%@\n\n\n\n%@\n%@\n\n%@", - _NS(INTF_ABOUT_MSG), - _NS("VLC was brought to you by:"), - [NSString stringWithUTF8String: psz_authors], - [NSString stringWithUTF8String: psz_thanks]]]; - - /* Setup the copyright field */ - [o_copyright_field setStringValue: [o_local_dict objectForKey:@"NSHumanReadableCopyright"]]; + [o_name_version_field setStringValue: [NSString stringWithFormat:@"Version %s (%s)", VERSION_MESSAGE, PLATFORM]]; + + NSMutableArray *tmpArray = [NSMutableArray arrayWithArray: [[NSString stringWithUTF8String:psz_authors] componentsSeparatedByString:@"\n\n"]]; + NSUInteger count = [tmpArray count]; + for (NSUInteger i = 0; i < count; i++) { + [tmpArray replaceObjectAtIndex:i withObject:[[tmpArray objectAtIndex:i]stringByReplacingOccurrencesOfString:@"\n" withString:@", "]]; + [tmpArray replaceObjectAtIndex:i withObject:[[tmpArray objectAtIndex:i]stringByReplacingOccurrencesOfString:@", -" withString:@"\n-" options:0 range:NSRangeFromString(@"0 30")]]; + [tmpArray replaceObjectAtIndex:i withObject:[[tmpArray objectAtIndex:i]stringByReplacingOccurrencesOfString:@"-, " withString:@"-\n" options:0 range:NSRangeFromString(@"0 30")]]; + [tmpArray replaceObjectAtIndex:i withObject:[[tmpArray objectAtIndex:i]stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@","]]]; + } + o_authors = [tmpArray componentsJoinedByString:@"\n\n"]; + [o_authors retain]; + + /* setup join us! */ + NSString *joinus = [NSString stringWithUTF8String:_("" + "

VLC media player is a free and open source media player, encoder, and " + "streamer made by the volunteers of the VideoLAN community.

VLC uses its internal codecs, works on " + "essentially every popular platform, and can read almost all files, CDs, " + "DVDs, network streams, capture cards and other media formats!

Help and join us!")]; + NSAttributedString *joinus_readytorender = [[NSAttributedString alloc] initWithHTML:[joinus dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] options:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:NSUTF8StringEncoding] forKey:NSCharacterEncodingDocumentOption] documentAttributes:NULL]; + [o_joinus_txt setAllowsEditingTextAttributes: YES]; + [o_joinus_txt setSelectable: YES]; + [o_joinus_txt setAttributedStringValue:joinus_readytorender]; + + [joinus_readytorender release]; + [o_credits_textview setString: @""]; /* Setup the window */ [o_credits_textview setDrawsBackground: NO]; @@ -109,13 +152,34 @@ static VLAboutBox *_o_sharedInstance = nil; [o_about_window setExcludedFromWindowsMenu:YES]; [o_about_window setMenu:nil]; [o_about_window center]; - [o_gpl_btn setTitle: _NS("License")]; - + [o_about_window setBackgroundColor: [NSColor colorWithCalibratedWhite:.96 alpha:1.]]; + + if (config_GetInt(VLCIntf, "macosx-icon-change")) { + /* After day 354 of the year, the usual VLC cone is replaced by another cone + * wearing a Father Xmas hat. + * Note: this icon doesn't represent an endorsement of The Coca-Cola Company. + */ + NSCalendar *gregorian = + [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; + NSUInteger dayOfYear = [gregorian ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit forDate:[NSDate date]]; + [gregorian release]; + + if (dayOfYear >= 354) + [o_icon_view setImage: [NSImage imageNamed:@"vlc-xmas"]]; + } + b_isSetUp = YES; } - + /* Show the window */ b_restart = YES; + [o_credits_scrollview setHidden:YES]; + [o_credits_textview setHidden:YES]; + [o_joinus_txt setHidden:NO]; + [o_copyright_field setHidden:NO]; + [o_revision_field setHidden:NO]; + [o_name_version_field setHidden:NO]; + [o_credits_textview scrollPoint:NSMakePoint(0, 0)]; [o_about_window makeKeyAndOrderFront: nil]; } @@ -135,42 +199,69 @@ static VLAboutBox *_o_sharedInstance = nil; - (void)scrollCredits:(NSTimer *)timer { - if( b_restart ) - { + if (b_restart) { /* Reset the starttime */ - i_start = [NSDate timeIntervalSinceReferenceDate] + 3.0; + i_start = [NSDate timeIntervalSinceReferenceDate] + 4.0; f_current = 0; f_end = [o_credits_textview bounds].size.height - [o_credits_scrollview bounds].size.height; b_restart = NO; } - if( [NSDate timeIntervalSinceReferenceDate] >= i_start ) - { - /* Scroll to the position */ - [o_credits_textview scrollPoint:NSMakePoint( 0, f_current )]; - + if ([NSDate timeIntervalSinceReferenceDate] >= i_start) { /* Increment the scroll position */ f_current += 0.005; - + + /* Scroll to the position */ + [o_credits_textview scrollPoint:NSMakePoint(0, f_current)]; + /* If at end, restart at the top */ - if( f_current >= f_end ) - { - b_restart = YES; + if (f_current >= f_end) { + /* f_end may be wrong on first run, so don't trust it too much */ + if (f_end == [o_credits_textview bounds].size.height - [o_credits_scrollview bounds].size.height) { + sleep(2); + b_restart = YES; + [o_credits_textview scrollPoint:NSMakePoint(0, 0)]; + } else + f_end = [o_credits_textview bounds].size.height - [o_credits_scrollview bounds].size.height; } } } +- (IBAction)buttonAction:(id)sender +{ + [o_credits_scrollview setHidden:NO]; + [o_credits_textview setHidden:NO]; + [o_joinus_txt setHidden:YES]; + [o_copyright_field setHidden:YES]; + [o_revision_field setHidden:YES]; + [o_name_version_field setHidden:YES]; + + if (sender == o_authors_btn) + [o_credits_textview setString:o_authors]; + else if (sender == o_credits_btn) + [o_credits_textview setString:[[NSString stringWithUTF8String:psz_thanks] stringByReplacingOccurrencesOfString:@"\n" withString:@" " options:0 range:NSRangeFromString(@"680 2")]]; + else + [o_credits_textview setString:[NSString stringWithUTF8String:psz_license]]; + + [o_credits_textview scrollPoint:NSMakePoint(0, 0)]; + b_restart = YES; +} + /***************************************************************************** * VLC GPL Window, action called from the about window and the help menu *****************************************************************************/ -- (IBAction)showGPL:(id)sender +- (void)showGPL { - [o_gpl_window setTitle: _NS("License")]; - [o_gpl_field setString: [NSString stringWithUTF8String: psz_license]]; - - [o_gpl_window center]; - [o_gpl_window makeKeyAndOrderFront: sender]; + [self showAbout]; + [o_credits_scrollview setHidden:NO]; + [o_credits_textview setHidden:NO]; + [o_joinus_txt setHidden:YES]; + + [o_credits_textview setString:[NSString stringWithUTF8String:psz_license]]; + + [o_credits_textview scrollPoint:NSMakePoint(0, 0)]; + b_restart = YES; } /***************************************************************************** @@ -180,10 +271,27 @@ static VLAboutBox *_o_sharedInstance = nil; - (void)showHelp { [o_help_window setTitle: _NS("VLC media player Help")]; + [o_help_fwd_btn setToolTip: _NS("Next")]; + [o_help_bwd_btn setToolTip: _NS("Previous")]; + [o_help_home_btn setToolTip: _NS("Index")]; + [o_help_window makeKeyAndOrderFront: self]; - [[o_help_web_view mainFrame] loadHTMLString: [NSString stringWithString: _NS(I_LONGHELP)] + [[o_help_web_view mainFrame] loadHTMLString: _NS(I_LONGHELP) + baseURL: [NSURL URLWithString:@"http://videolan.org"]]; +} + +- (IBAction)helpGoHome:(id)sender +{ + [[o_help_web_view mainFrame] loadHTMLString: _NS(I_LONGHELP) baseURL: [NSURL URLWithString:@"http://videolan.org"]]; } +- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame +{ + /* delegate to update button states (we're the frameLoadDelegate for our help's webview)« */ + [o_help_fwd_btn setEnabled: [o_help_web_view canGoForward]]; + [o_help_bwd_btn setEnabled: [o_help_web_view canGoBack]]; +} + @end