< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m

Print this page

        

@@ -98,10 +98,11 @@
 
 @implementation ApplicationDelegate
 
 @synthesize fPreferencesMenu;
 @synthesize fAboutMenu;
+@synthesize fProgressIndicator;
 
 @synthesize fDockMenu;
 @synthesize fDefaultMenuBar;
 
 

@@ -199,10 +200,22 @@
     NSMenu *appMenu = [[menuBar itemAtIndex:0] submenu];
 
     self.fPreferencesMenu = (NSMenuItem*)[appMenu itemWithTag:PREFERENCES_TAG];
     self.fAboutMenu = (NSMenuItem*)[appMenu itemAtIndex:0];
 
+    NSDockTile *dockTile = [NSApp dockTile];
+    self.fProgressIndicator = [[NSProgressIndicator alloc]
+                                initWithFrame:NSMakeRect(3.f, 0.f, dockTile.size.width - 6.f, 20.f)];
+    
+    [fProgressIndicator setStyle:NSProgressIndicatorBarStyle];
+    [fProgressIndicator setIndeterminate:NO];
+    [[dockTile contentView] addSubview:fProgressIndicator];
+    [fProgressIndicator setMinValue:0];
+    [fProgressIndicator setMaxValue:100];
+    [fProgressIndicator setHidden:YES];
+    [fProgressIndicator release];
+
     // If the java application has a bundle with an Info.plist file with
     //  a CFBundleDocumentTypes entry, then it is set up to handle Open Doc
     //  and Print Doc commands for these files. Therefore java AWT will
     //  cache Open Doc and Print Doc events that are sent prior to a
     //  listener being installed by the client java application.

@@ -250,10 +263,11 @@
 - (void)dealloc {
     self.fPreferencesMenu = nil;
     self.fAboutMenu = nil;
     self.fDockMenu = nil;
     self.fDefaultMenuBar = nil;
+    self.fProgressIndicator = nil;
 
     [super dealloc];
 }
 
 #pragma mark Callbacks from AppKit

@@ -466,17 +480,34 @@
     NSRect frame = NSMakeRect(0, 0, dockTile.size.width, dockTile.size.height);
     NSImageView *dockImageView = [[NSImageView alloc] initWithFrame: frame];
     [dockImageView setImageScaling:NSImageScaleProportionallyUpOrDown];
     [dockImageView setImage:image];
 
+    [[ApplicationDelegate sharedDelegate].fProgressIndicator removeFromSuperview];
+    [dockImageView addSubview:[ApplicationDelegate sharedDelegate].fProgressIndicator];
+
     // add it to the NSDockTile
     [dockTile setContentView: dockImageView];
     [dockTile display];
 
     [dockImageView release];
 }
 
++ (void)_setDockIconProgress:(NSNumber *)value {
+AWT_ASSERT_APPKIT_THREAD;
+
+    ApplicationDelegate *delegate = [ApplicationDelegate sharedDelegate];
+    if ([value doubleValue] >= 0 && [value doubleValue] <=100) {
+        [delegate.fProgressIndicator setDoubleValue:[value doubleValue]];
+        [delegate.fProgressIndicator setHidden:NO];
+    } else {
+        [delegate.fProgressIndicator setHidden:YES];
+    }
+
+    [[NSApp dockTile] display];
+}
+
 // Obtains the image of the Dock icon, either manually set, a drawn copy, or the default NSApplicationIcon
 + (NSImage *)_dockIconImage {
 AWT_ASSERT_APPKIT_THREAD;
 
     NSDockTile *dockTile = [NSApp dockTile];

@@ -608,10 +639,28 @@
 JNF_COCOA_EXIT(env);
 }
 
 /*
  * Class:     com_apple_eawt__AppDockIconHandler
+ * Method:    nativeSetDockIconProgress
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeSetDockIconProgress
+  (JNIEnv *env, jclass clz, jint value)
+{
+    JNF_COCOA_ENTER(env);
+
+     [ThreadUtilities performOnMainThread:@selector(_setDockIconProgress:)
+                                       on:[ApplicationDelegate class]
+                               withObject:[NSNumber numberWithInt:value]
+                            waitUntilDone:NO];
+
+    JNF_COCOA_EXIT(env);
+}
+
+/*
+ * Class:     com_apple_eawt__AppDockIconHandler
  * Method:    nativeGetDockIconImage
  * Signature: ()J
  */
 JNIEXPORT jlong JNICALL Java_com_apple_eawt__1AppDockIconHandler_nativeGetDockIconImage
 (JNIEnv *env, jclass clz)
< prev index next >