diff --git a/Xcode/stepmania.xcodeproj/project.pbxproj b/Xcode/stepmania.xcodeproj/project.pbxproj index 83b2d2a8b7..296f1f0009 100644 --- a/Xcode/stepmania.xcodeproj/project.pbxproj +++ b/Xcode/stepmania.xcodeproj/project.pbxproj @@ -1661,6 +1661,8 @@ AAFF41A40F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; AAFF41A50F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AAFF41A10F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.cpp */; }; AAFF41A60F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h in Headers */ = {isa = PBXBuildFile; fileRef = AAFF41A20F5BD4AD00FFDB67 /* ScreenOptionsExportPackage.h */; }; + B71A60C0139B41DB00183A27 /* InGameLoadingWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */; }; + B71A60C1139B41DB00183A27 /* InGameLoadingWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */; }; B75CE3B5137963350076A82D /* SongPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = B75CE3B3137963350076A82D /* SongPosition.h */; }; B75CE3B6137963350076A82D /* SongPosition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B75CE3B4137963350076A82D /* SongPosition.cpp */; }; EE2153A910A75BEE0074B01B /* NotesLoaderPMS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */; }; @@ -3056,6 +3058,8 @@ AAFF55220549F43A00D02EE9 /* ComboGraph.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = ComboGraph.h; path = ../src/ComboGraph.h; sourceTree = ""; }; AAFF5541054E736D00D02EE9 /* Attack.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; name = Attack.cpp; path = ../src/Attack.cpp; sourceTree = ""; }; AAFF5542054E736D00D02EE9 /* Attack.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; name = Attack.h; path = ../src/Attack.h; sourceTree = ""; }; + B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InGameLoadingWindow.cpp; sourceTree = ""; }; + B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InGameLoadingWindow.h; sourceTree = ""; }; B75CE3B3137963350076A82D /* SongPosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SongPosition.h; path = ../src/SongPosition.h; sourceTree = SOURCE_ROOT; }; B75CE3B4137963350076A82D /* SongPosition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SongPosition.cpp; path = ../src/SongPosition.cpp; sourceTree = SOURCE_ROOT; }; EE2153A710A75BEE0074B01B /* NotesLoaderPMS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NotesLoaderPMS.cpp; path = ../src/NotesLoaderPMS.cpp; sourceTree = SOURCE_ROOT; }; @@ -3279,6 +3283,8 @@ 29B97315FDCFA39411CA2CEA /* Other Source */ = { isa = PBXGroup; children = ( + B71A60BE139B41DB00183A27 /* InGameLoadingWindow.cpp */, + B71A60BF139B41DB00183A27 /* InGameLoadingWindow.h */, AA70E3640663112800DAE1FD /* Foreach.h */, 3659B56D0F902143002B6B68 /* CommandLineActions.cpp */, 3659B56E0F902143002B6B68 /* CommandLineActions.h */, @@ -5148,6 +5154,7 @@ 2B9C2E8E137A138B004C92F3 /* NotesLoaderJson.h in Headers */, 2B9C2E90137A138B004C92F3 /* NotesWriterJson.h in Headers */, 2B43509513949F37006FA051 /* TimingSegments.h in Headers */, + B71A60C1139B41DB00183A27 /* InGameLoadingWindow.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -6489,6 +6496,7 @@ 2BD06FF2137242680018CB9F /* json_value.cpp in Sources */, 2BD06FF4137242680018CB9F /* json_writer.cpp in Sources */, 2B43509613949F37006FA051 /* TimingSegments.cpp in Sources */, + B71A60C0139B41DB00183A27 /* InGameLoadingWindow.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/src/arch/LoadingWindow/LoadingWindow_MacOSX.h b/src/arch/LoadingWindow/LoadingWindow_MacOSX.h index 29636eb7c0..23f45ddf1c 100644 --- a/src/arch/LoadingWindow/LoadingWindow_MacOSX.h +++ b/src/arch/LoadingWindow/LoadingWindow_MacOSX.h @@ -9,6 +9,8 @@ public: LoadingWindow_MacOSX(); ~LoadingWindow_MacOSX(); void SetText( RString str ); + void SetProgress( const int progress ); + void SetTotalWork( const int totalWork ); }; #define USE_LOADING_WINDOW_MACOSX diff --git a/src/arch/LoadingWindow/LoadingWindow_MacOSX.mm b/src/arch/LoadingWindow/LoadingWindow_MacOSX.mm index 4f26434a41..bc6a3cf9dc 100644 --- a/src/arch/LoadingWindow/LoadingWindow_MacOSX.mm +++ b/src/arch/LoadingWindow/LoadingWindow_MacOSX.mm @@ -10,8 +10,11 @@ NSWindow *m_Window; NSTextView *m_Text; NSAutoreleasePool *m_Pool; + NSProgressIndicator *m_ProgressIndicator; } - (void) setupWindow:(NSImage *)image; +- (void) setProgress:(NSNumber *)progress; +- (void) setTotalWork:(NSNumber *)totalWork; @end @implementation LoadingWindowHelper @@ -21,14 +24,25 @@ NSRect viewRect, windowRect; float height = 0.0f; + NSRect progressIndicatorRect; + progressIndicatorRect = NSMakeRect(0, 0, size.width, 0); + m_ProgressIndicator = [[NSProgressIndicator alloc] initWithFrame:progressIndicatorRect]; + [m_ProgressIndicator sizeToFit]; + [m_ProgressIndicator setIndeterminate:NO]; + [m_ProgressIndicator setMinValue:0]; + [m_ProgressIndicator setMaxValue:1]; + [m_ProgressIndicator setDoubleValue:0]; + progressIndicatorRect = [m_ProgressIndicator frame]; + float progressHeight = progressIndicatorRect.size.height; + NSFont *font = [NSFont systemFontOfSize:0.0f]; NSRect textRect; // Just give it a size until it is created. - textRect = NSMakeRect( 0, 0, size.width, size.height ); + textRect = NSMakeRect( 0, progressHeight, size.width, size.height ); m_Text = [[NSTextView alloc] initWithFrame:textRect]; [m_Text setFont:font]; height = [[m_Text layoutManager] defaultLineHeightForFont:font]*3 + 4; - textRect = NSMakeRect( 0, 0, size.width, height ); + textRect = NSMakeRect( 0, progressHeight, size.width, height ); [m_Text setFrame:textRect]; [m_Text setEditable:NO]; @@ -40,12 +54,12 @@ [m_Text setVerticallyResizable:NO]; [m_Text setString:@"Initializing Hardware..."]; - viewRect = NSMakeRect( 0, height, size.width, size.height ); + viewRect = NSMakeRect( 0, height + progressHeight, size.width, size.height ); NSImageView *iView = [[NSImageView alloc] initWithFrame:viewRect]; [iView setImage:image]; [iView setImageFrameStyle:NSImageFrameNone]; - windowRect = NSMakeRect( 0, 0, size.width, size.height + height ); + windowRect = NSMakeRect( 0, 0, size.width, size.height + height + progressHeight); m_Window = [[NSWindow alloc] initWithContentRect:windowRect styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered @@ -66,10 +80,22 @@ [view addSubview:iView]; [m_Text release]; [iView release]; + [view addSubview:m_ProgressIndicator]; // Display the window. [m_Window makeKeyAndOrderFront:nil]; } + +- (void) setProgress:(NSNumber *)progress +{ + [m_ProgressIndicator setDoubleValue:[progress doubleValue]]; +} + +- (void) setTotalWork:(NSNumber *)totalWork +{ + [m_ProgressIndicator setMaxValue:[totalWork doubleValue]]; +} + @end static LoadingWindowHelper *g_Helper = nil; @@ -124,6 +150,16 @@ void LoadingWindow_MacOSX::SetText( RString str ) [s release]; } +void LoadingWindow_MacOSX::SetProgress( const int progress ) +{ + [g_Helper performSelectorOnMainThread:@selector(setProgress:) withObject:[NSNumber numberWithDouble:(double)progress] waitUntilDone:NO]; +} + +void LoadingWindow_MacOSX::SetTotalWork( const int totalWork ) +{ + [g_Helper performSelectorOnMainThread:@selector(setTotalWork:) withObject:[NSNumber numberWithDouble:(double)totalWork] waitUntilDone:NO]; +} + /* * (c) 2003-2006, 2008 Steve Checkoway * All rights reserved.