hillion 02/02/21 02:33:44 Modified: sources/org/apache/batik/bridge RepaintManager.java ScriptingEnvironment.java UpdateManager.java sources/org/apache/batik/swing JSVGCanvas.java sources/org/apache/batik/swing/gvt AbstractPanInteractor.java sources/org/apache/batik/swing/svg JSVGComponent.java Log: - JSVGComponent cleanup. Revision Changes Path 1.8 +3 -6 xml-batik/sources/org/apache/batik/bridge/RepaintManager.java Index: RepaintManager.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/RepaintManager.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- RepaintManager.java 19 Feb 2002 18:01:29 -0000 1.7 +++ RepaintManager.java 21 Feb 2002 10:33:43 -0000 1.8 @@ -26,7 +26,7 @@ * This class manages the rendering of a GVT tree. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: RepaintManager.java,v 1.7 2002/02/19 18:01:29 deweese Exp $ + * @version $Id: RepaintManager.java,v 1.8 2002/02/21 10:33:43 hillion Exp $ */ public class RepaintManager { @@ -57,7 +57,7 @@ * Provokes a repaint, if needed. * @param b If true, waits until the repaint has finished. */ - public void repaint(boolean b) { + public void repaint(boolean b) throws InterruptedException { if (!enabled) { return; } @@ -80,10 +80,7 @@ return; } if (b) { - try { - updateManager.getUpdateRunnableQueue().invokeAndWait(r); - } catch (InterruptedException e) { - } + updateManager.getUpdateRunnableQueue().invokeAndWait(r); } else { updateManager.getUpdateRunnableQueue().invokeLater(r); } 1.6 +62 -19 xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java Index: ScriptingEnvironment.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/ScriptingEnvironment.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ScriptingEnvironment.java 18 Feb 2002 09:11:58 -0000 1.5 +++ ScriptingEnvironment.java 21 Feb 2002 10:33:43 -0000 1.6 @@ -52,7 +52,7 @@ * This class contains the informations needed by the SVG scripting. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: ScriptingEnvironment.java,v 1.5 2002/02/18 09:11:58 hillion Exp $ + * @version $Id: ScriptingEnvironment.java,v 1.6 2002/02/21 10:33:43 hillion Exp $ */ public class ScriptingEnvironment { @@ -207,6 +207,17 @@ protected JavaFunction alertFunction; /** + * The live scripting threads. + */ + protected List liveThreads = + Collections.synchronizedList(new LinkedList()); + + /** + * Whether this environment has been interrupted. + */ + protected boolean interrupted; + + /** * Creates a new ScriptingEnvironment. * @param um The update manager. */ @@ -250,6 +261,20 @@ } /** + * Interrupts the scripts. + */ + public void interruptScripts() { + synchronized (liveThreads) { + interrupted = true; + Iterator it = liveThreads.iterator(); + while (it.hasNext()) { + scriptingLock.unlock(); + ((Thread)it.next()).interrupt(); + } + } + } + + /** * Suspends the scripts. */ public void suspendScripts() { @@ -262,7 +287,7 @@ public void resumeScripts() { synchronized (suspendLock) { suspended = false; - suspendLock.notify(); + suspendLock.notifyAll(); } } @@ -280,12 +305,16 @@ try { suspendLock.wait(); } catch (InterruptedException e) { + throw new StopScriptException(); } } } if (repaintManager == null) { repaintManager = updateManager.getRepaintManager(); + if (repaintManager == null) { + throw new StopScriptException(); + } updateRunnableQueue = updateManager.getUpdateRunnableQueue(); } @@ -306,6 +335,7 @@ try { suspendLock.wait(); } catch (InterruptedException e) { + throw new StopScriptException(); } } } @@ -315,7 +345,12 @@ throw new StopScriptException(); } updateRunnableQueue.resumeExecution(); - repaintManager.repaint(true); + + try { + repaintManager.repaint(true); + } catch (InterruptedException e) { + throw new StopScriptException(); + } scriptingLock.unlock(); } @@ -541,28 +576,36 @@ * The main method. */ public void run() { - if (interpreter != null) { - try { - beginScript(); - } catch (StopScriptException e) { + try { + liveThreads.add(this); + if (interrupted) { return; } - - try { - interpreter.evaluate(getScript()); - } catch (InterpreterException ie) { - Exception ex = ie.getException(); - if (ex instanceof StopScriptException) { + if (interpreter != null) { + try { + beginScript(); + } catch (StopScriptException e) { return; } - if (userAgent != null) { - userAgent.displayError((ex != null) ? ex : ie); + + try { + interpreter.evaluate(getScript()); + } catch (InterpreterException ie) { + Exception ex = ie.getException(); + if (ex instanceof StopScriptException) { + return; + } + if (userAgent != null) { + userAgent.displayError((ex != null) ? ex : ie); + } + } + try { + endScript(); + } catch (StopScriptException e) { } } - try { - endScript(); - } catch (StopScriptException e) { - } + } finally { + liveThreads.remove(this); } } 1.10 +75 -36 xml-batik/sources/org/apache/batik/bridge/UpdateManager.java Index: UpdateManager.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/UpdateManager.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- UpdateManager.java 18 Feb 2002 12:39:48 -0000 1.9 +++ UpdateManager.java 21 Feb 2002 10:33:43 -0000 1.10 @@ -44,7 +44,7 @@ * This class provides features to manage the update of an SVG document. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: UpdateManager.java,v 1.9 2002/02/18 12:39:48 hillion Exp $ + * @version $Id: UpdateManager.java,v 1.10 2002/02/21 10:33:43 hillion Exp $ */ public class UpdateManager implements RunnableQueue.RunHandler { @@ -93,7 +93,7 @@ /** * Whether the update manager is running. */ - protected volatile boolean running; + protected boolean running; /** * Whether the suspend() method was called. @@ -136,6 +136,11 @@ protected GraphicsNode graphicsNode; /** + * Whether the manager was started. + */ + protected boolean started; + + /** * Creates a new update manager. * @param ctx The bridge context. * @param gn GraphicsNode whose updates are to be tracked. @@ -158,25 +163,54 @@ } /** - * Finishes the UpdateManager initialization. + * Dispatches an 'SVGLoad' event to the document. + * NOTES: + * - This method starts the update manager threads so one can't use + * the update runnable queue to invoke this method. + * - The scripting lock is taken. Is is released by a call to + * manageUpdates(). */ - public void manageUpdates(ImageRenderer r) { - running = true; - renderer = r; + public void dispatchSVGLoadEvent() throws InterruptedException { + // Locking avoid execution of scripts scheduled by calls + // to the setTimeout() function. + // The lock is be released by a call to manageUpdates(). + scriptingEnvironment.getScriptingLock().lock(); + + scriptingEnvironment.loadScripts(); + scriptingEnvironment.dispatchSVGLoadEvent(); - updateTracker = new UpdateTracker(); - RootGraphicsNode root = graphicsNode.getRoot(); - if (root != null){ - root.addTreeGraphicsNodeChangeListener(updateTracker); - } + updateRunnableQueue.resumeExecution(); + } - repaintManager = new RepaintManager(this, renderer); - repaintRateManager = new RepaintRateManager(this); - repaintRateManager.start(); + /** + * Finishes the UpdateManager initialization. + */ + public void manageUpdates(final ImageRenderer r) { + updateRunnableQueue.invokeLater(new Runnable() { + public void run() { + startingTime = System.currentTimeMillis(); - scriptingEnvironment.getScriptingLock().unlock(); + running = true; + renderer = r; + + updateTracker = new UpdateTracker(); + RootGraphicsNode root = graphicsNode.getRoot(); + if (root != null){ + root.addTreeGraphicsNodeChangeListener(updateTracker); + } - fireManagerStartedEvent(); + repaintManager = + new RepaintManager(UpdateManager.this, renderer); + repaintRateManager = + new RepaintRateManager(UpdateManager.this); + repaintRateManager.start(); + + scriptingEnvironment.getScriptingLock().unlock(); + + fireManagerStartedEvent(); + started = true; + } + }); } @@ -260,24 +294,25 @@ } /** - * Dispatches an 'SVGLoad' event to the document. - * NOTES: - * - This method starts the update manager threads so one can't use - * the update runnable queue to invoke this method. - * - The scripting lock is taken. Is is released by a call to - * manageUpdates(). + * Interrupts the manager tasks. */ - public void dispatchSVGLoadEvent() throws InterruptedException { - // Locking avoid execution of scripts scheduled by calls - // to the setTimeout() function. - // The lock is be released by a call to manageUpdates(). - scriptingEnvironment.getScriptingLock().lock(); - - scriptingEnvironment.loadScripts(); - scriptingEnvironment.dispatchSVGLoadEvent(); - - updateRunnableQueue.resumeExecution(); - startingTime = System.currentTimeMillis(); + public void interrupt() { + if (updateRunnableQueue.getThread() != null) { + if (started) { + dispatchSVGUnLoadEvent(); + } else { + resume(); + updateRunnableQueue.invokeLater(new Runnable() { + public void run() { + if (repaintRateManager != null) { + repaintRateManager.interrupt(); + } + scriptingEnvironment.interruptScripts(); + updateRunnableQueue.getThread().interrupt(); + } + }); + } + } } /** @@ -286,6 +321,10 @@ * NOTE: this method must be called outside the update thread. */ public void dispatchSVGUnLoadEvent() { + if (!started) { + throw new IllegalStateException("UpdateManager not started."); + } + resume(); updateRunnableQueue.invokeLater(new Runnable() { public void run() { @@ -296,9 +335,8 @@ dispatchEvent(evt); running = false; - if (repaintManager != null) { - repaintRateManager.interrupt(); - } + repaintRateManager.interrupt(); + scriptingEnvironment.interruptScripts(); updateRunnableQueue.getThread().interrupt(); fireManagerStoppedEvent(); } @@ -494,6 +532,7 @@ public void executionResumed(RunnableQueue rq) { if (suspendCalled && !running) { running = true; + suspendCalled = false; suspendedTime = System.currentTimeMillis() - suspendStartTime; fireManagerResumedEvent(); 1.32 +2 -1 xml-batik/sources/org/apache/batik/swing/JSVGCanvas.java Index: JSVGCanvas.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/JSVGCanvas.java,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- JSVGCanvas.java 29 Nov 2001 09:17:41 -0000 1.31 +++ JSVGCanvas.java 21 Feb 2002 10:33:44 -0000 1.32 @@ -69,7 +69,7 @@ * * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: JSVGCanvas.java,v 1.31 2001/11/29 09:17:41 tkormann Exp $ + * @version $Id: JSVGCanvas.java,v 1.32 2002/02/21 10:33:44 hillion Exp $ */ public class JSVGCanvas extends JSVGComponent { @@ -487,6 +487,7 @@ * Called when the loading of a document was started. */ public void documentLoadingStarted(SVGDocumentLoaderEvent e) { + super.documentLoadingStarted(e); JSVGCanvas.this.setToolTipText(null); } 1.2 +19 -9 xml-batik/sources/org/apache/batik/swing/gvt/AbstractPanInteractor.java Index: AbstractPanInteractor.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/gvt/AbstractPanInteractor.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AbstractPanInteractor.java 8 Mar 2001 01:21:07 -0000 1.1 +++ AbstractPanInteractor.java 21 Feb 2002 10:33:44 -0000 1.2 @@ -22,7 +22,7 @@ * InteractorAdapter#startInteraction(InputEvent)} method. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractPanInteractor.java,v 1.1 2001/03/08 01:21:07 hillion Exp $ + * @version $Id: AbstractPanInteractor.java,v 1.2 2002/02/21 10:33:44 hillion Exp $ */ public abstract class AbstractPanInteractor extends InteractorAdapter { @@ -85,6 +85,7 @@ yStart = e.getY(); JGVTComponent c = (JGVTComponent)e.getSource(); + previousCursor = c.getCursor(); c.setCursor(PAN_CURSOR); } @@ -93,16 +94,24 @@ * Invoked when a mouse button has been released on a component. */ public void mouseReleased(MouseEvent e) { + if (finished) { + return; + } finished = true; JGVTComponent c = (JGVTComponent)e.getSource(); - AffineTransform pt = c.getPaintingTransform(); - if (pt != null) { - AffineTransform rt = (AffineTransform)c.getRenderingTransform().clone(); - rt.preConcatenate(pt); - c.setRenderingTransform(rt); - } + xCurrent = e.getX(); + yCurrent = e.getY(); + + AffineTransform at = + AffineTransform.getTranslateInstance(xCurrent - xStart, + yCurrent - yStart); + AffineTransform rt = + (AffineTransform)c.getRenderingTransform().clone(); + rt.preConcatenate(at); + c.setRenderingTransform(rt); + if (c.getCursor() == PAN_CURSOR) { c.setCursor(previousCursor); } @@ -136,8 +145,9 @@ xCurrent = e.getX(); yCurrent = e.getY(); - AffineTransform at = AffineTransform.getTranslateInstance(xCurrent - xStart, - yCurrent - yStart); + AffineTransform at = + AffineTransform.getTranslateInstance(xCurrent - xStart, + yCurrent - yStart); c.setPaintingTransform(at); } } 1.42 +165 -166 xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java Index: JSVGComponent.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/swing/svg/JSVGComponent.java,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- JSVGComponent.java 20 Feb 2002 12:38:45 -0000 1.41 +++ JSVGComponent.java 21 Feb 2002 10:33:44 -0000 1.42 @@ -180,7 +180,7 @@ * building/rendering a document (invalid XML file, missing attributes...).</p> * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: JSVGComponent.java,v 1.41 2002/02/20 12:38:45 hillion Exp $ + * @version $Id: JSVGComponent.java,v 1.42 2002/02/21 10:33:44 hillion Exp $ */ public class JSVGComponent extends JGVTComponent { @@ -210,6 +210,21 @@ protected GVTTreeBuilder nextGVTTreeBuilder; /** + * The SVGLoadEventDispatcher. + */ + protected SVGLoadEventDispatcher svgLoadEventDispatcher; + + /** + * The update manager. + */ + protected UpdateManager updateManager; + + /** + * The next update manager. + */ + protected UpdateManager nextUpdateManager; + + /** * The current SVG document. */ protected SVGDocument svgDocument; @@ -255,26 +270,11 @@ protected BridgeContext bridgeContext; /** - * The update manager. - */ - protected UpdateManager updateManager; - - /** * The current document fragment identifier. */ protected String fragmentIdentifier; /** - * Whether the update manager was stopped. - */ - protected boolean updateManagerStopped; - - /** - * Whether the update manager was suspended. - */ - protected boolean updateManagerSuspended; - - /** * Whether the current document has dynamic features. */ protected boolean isDynamicDocument; @@ -304,7 +304,6 @@ addSVGDocumentLoaderListener((SVGListener)listener); addGVTTreeBuilderListener((SVGListener)listener); addSVGLoadEventDispatcherListener((SVGListener)listener); - updateManagerListeners.add(listener); } /** @@ -344,10 +343,10 @@ documentLoader.interrupt(); } else if (gvtTreeBuilder != null) { gvtTreeBuilder.interrupt(); + } else if (svgLoadEventDispatcher != null) { + svgLoadEventDispatcher.interrupt(); } else if (updateManager != null) { - updateManager.dispatchSVGUnLoadEvent(); - updateManager = null; - updateManagerStopped = true; + updateManager.interrupt(); } else { super.stopProcessing(); } @@ -389,7 +388,9 @@ if (documentLoader == null && gvtTreeBuilder == null && - gvtTreeRenderer == null) { + gvtTreeRenderer == null && + svgLoadEventDispatcher == null && + updateManager == null) { startDocumentLoader(); } } @@ -412,15 +413,6 @@ throw new IllegalArgumentException("Invalid DOM implementation."); } - if (isDynamicDocument && - eventsEnabled && - svgDocument != null && - updateManager != null) { - updateManager.dispatchSVGUnLoadEvent(); - updateManager = null; - } - updateManagerStopped = false; - isDynamicDocument = UpdateManager.isDynamicDocument(doc); svgDocument = doc; @@ -445,7 +437,9 @@ if (gvtTreeBuilder == null && documentLoader == null && - gvtTreeRenderer == null) { + gvtTreeRenderer == null && + svgLoadEventDispatcher == null && + updateManager == null) { startGVTTreeBuilder(); } } @@ -504,20 +498,15 @@ * Starts a SVGLoadEventDispatcher thread. */ protected void startSVGLoadEventDispatcher(GraphicsNode root) { - updateManager = new UpdateManager(bridgeContext, - root, - svgDocument); - Iterator it = updateManagerListeners.iterator(); - while (it.hasNext()) { - updateManager.addUpdateManagerListener - ((UpdateManagerListener)it.next()); - } - - SVGLoadEventDispatcher d = new SVGLoadEventDispatcher(root, - svgDocument, - bridgeContext, - updateManager); - it = svgLoadEventDispatcherListeners.iterator(); + nextUpdateManager = new UpdateManager(bridgeContext, + root, + svgDocument); + SVGLoadEventDispatcher d = + new SVGLoadEventDispatcher(root, + svgDocument, + bridgeContext, + nextUpdateManager); + Iterator it = svgLoadEventDispatcherListeners.iterator(); while (it.hasNext()) { d.addSVGLoadEventDispatcherListener ((SVGLoadEventDispatcherListener)it.next()); @@ -592,6 +581,7 @@ updateManager.getUpdateRunnableQueue().invokeLater(new Runnable() { public void run() { + paintingTransform = null; updateManager.updateRendering(renderingTransform, doubleBufferedRendering, s, d.width, d.height); @@ -669,7 +659,7 @@ * Adds a UpdateManagerListener to this component. */ public void addUpdateManagerListener(UpdateManagerListener l) { - updateManagerListeners.add(new UpdateManagerListenerWrapper(l)); + updateManagerListeners.add(l); } /** @@ -680,102 +670,6 @@ } /** - * To call the update methods from the event thread. - */ - protected static class UpdateManagerListenerWrapper - implements UpdateManagerListener { - - /** - * The wrapped listener. - */ - protected UpdateManagerListener listener; - - /** - * Creates a new wrapper. - */ - public UpdateManagerListenerWrapper(UpdateManagerListener l) { - listener = l; - } - - /** - * Called when the manager was started. - */ - public void managerStarted(final UpdateManagerEvent e) { - EventQueue.invokeLater(new Runnable() { - public void run() { - listener.managerStarted(e); - } - }); - } - - /** - * Called when the manager was suspended. - */ - public void managerSuspended(final UpdateManagerEvent e) { - EventQueue.invokeLater(new Runnable() { - public void run() { - listener.managerSuspended(e); - } - }); - } - - /** - * Called when the manager was resumed. - */ - public void managerResumed(final UpdateManagerEvent e) { - EventQueue.invokeLater(new Runnable() { - public void run() { - listener.managerResumed(e); - } - }); - } - - /** - * Called when the manager was stopped. - */ - public void managerStopped(final UpdateManagerEvent e) { - EventQueue.invokeLater(new Runnable() { - public void run() { - listener.managerStopped(e); - } - }); - } - - /** - * Called when an update started. - */ - public void updateStarted(final UpdateManagerEvent e) { - EventQueue.invokeLater(new Runnable() { - public void run() { - listener.updateStarted(e); - } - }); - } - - /** - * Called when an update was completed. - */ - public void updateCompleted(final UpdateManagerEvent e) { - EventQueue.invokeLater(new Runnable() { - public void run() { - listener.updateCompleted(e); - } - }); - } - - /** - * Called when an update failed. - */ - public void updateFailed(final UpdateManagerEvent e) { - EventQueue.invokeLater(new Runnable() { - public void run() { - listener.updateFailed(e); - } - }); - } - } - - /** * Creates an instance of Listener. */ protected Listener createListener() { @@ -957,11 +851,18 @@ */ public void svgLoadEventDispatchCompleted (SVGLoadEventDispatcherEvent e) { + svgLoadEventDispatcher = null; if (nextGVTTreeBuilder != null) { + nextUpdateManager.interrupt(); + nextUpdateManager = null; + startGVTTreeBuilder(); return; } if (nextDocumentLoader != null) { + nextUpdateManager.interrupt(); + nextUpdateManager = null; + startDocumentLoader(); return; } @@ -974,8 +875,11 @@ */ public void svgLoadEventDispatchCancelled (SVGLoadEventDispatcherEvent e) { - loader = null; - gvtTreeBuilder = null; + svgLoadEventDispatcher = null; + + nextUpdateManager.interrupt(); + nextUpdateManager = null; + if (nextGVTTreeBuilder != null) { startGVTTreeBuilder(); return; @@ -991,8 +895,11 @@ */ public void svgLoadEventDispatchFailed (SVGLoadEventDispatcherEvent e) { - loader = null; - gvtTreeBuilder = null; + svgLoadEventDispatcher = null; + + nextUpdateManager.interrupt(); + nextUpdateManager = null; + if (nextGVTTreeBuilder != null) { startGVTTreeBuilder(); return; @@ -1031,13 +938,11 @@ return; } - if (isDynamicDocument) { - if (JSVGComponent.this.eventsEnabled && - !updateManagerSuspended && - !updateManagerStopped) { - updateManager.manageUpdates(renderer); - } - suspendInteractions = false; + if (nextUpdateManager != null) { + updateManager = nextUpdateManager; + nextUpdateManager = null; + updateManager.addUpdateManagerListener((SVGListener)this); + updateManager.manageUpdates(renderer); } } @@ -1052,6 +957,10 @@ return; } if (nextDocumentLoader != null) { + if (nextUpdateManager != null) { + nextUpdateManager.interrupt(); + nextUpdateManager = null; + } startDocumentLoader(); return; } @@ -1068,6 +977,11 @@ return; } if (nextDocumentLoader != null) { + if (nextUpdateManager != null) { + nextUpdateManager.interrupt(); + nextUpdateManager = null; + } + startDocumentLoader(); return; } @@ -1078,31 +992,87 @@ /** * Called when the manager was started. */ - public void managerStarted(UpdateManagerEvent e) { - suspendInteractions = false; - updateManagerSuspended = false; + public void managerStarted(final UpdateManagerEvent e) { + EventQueue.invokeLater(new Runnable() { + public void run() { + suspendInteractions = false; + + Object[] dll = updateManagerListeners.toArray(); + + if (dll.length > 0) { + for (int i = 0; i < dll.length; i++) { + ((UpdateManagerListener)dll[i]). + managerStarted(e); + } + } + } + }); } /** * Called when the manager was suspended. */ - public void managerSuspended(UpdateManagerEvent e) { - updateManagerSuspended = true; + public void managerSuspended(final UpdateManagerEvent e) { + EventQueue.invokeLater(new Runnable() { + public void run() { + Object[] dll = updateManagerListeners.toArray(); + + if (dll.length > 0) { + for (int i = 0; i < dll.length; i++) { + ((UpdateManagerListener)dll[i]). + managerSuspended(e); + } + } + } + }); } /** * Called when the manager was resumed. */ - public void managerResumed(UpdateManagerEvent e) { - updateManagerSuspended = false; + public void managerResumed(final UpdateManagerEvent e) { + EventQueue.invokeLater(new Runnable() { + public void run() { + Object[] dll = updateManagerListeners.toArray(); + + if (dll.length > 0) { + for (int i = 0; i < dll.length; i++) { + ((UpdateManagerListener)dll[i]). + managerResumed(e); + } + } + } + }); } /** * Called when the manager was stopped. */ - public void managerStopped(UpdateManagerEvent e) { - updateManagerSuspended = false; - updateManagerStopped = true; + public void managerStopped(final UpdateManagerEvent e) { + EventQueue.invokeLater(new Runnable() { + public void run() { + updateManager = null; + + + Object[] dll = updateManagerListeners.toArray(); + + if (dll.length > 0) { + for (int i = 0; i < dll.length; i++) { + ((UpdateManagerListener)dll[i]). + managerStopped(e); + } + } + + if (nextGVTTreeBuilder != null) { + startGVTTreeBuilder(); + return; + } + if (nextDocumentLoader != null) { + startDocumentLoader(); + return; + } + } + }); } /** @@ -1111,10 +1081,18 @@ public void updateStarted(final UpdateManagerEvent e) { EventQueue.invokeLater(new Runnable() { public void run() { - paintingTransform = null; if (!doubleBufferedRendering) { image = e.getImage(); } + + Object[] dll = updateManagerListeners.toArray(); + + if (dll.length > 0) { + for (int i = 0; i < dll.length; i++) { + ((UpdateManagerListener)dll[i]). + updateStarted(e); + } + } } }); } @@ -1139,16 +1117,38 @@ } } suspendInteractions = false; + + Object[] dll = updateManagerListeners.toArray(); + + if (dll.length > 0) { + for (int i = 0; i < dll.length; i++) { + ((UpdateManagerListener)dll[i]). + updateCompleted(e); + } + } } }); } catch (Exception ex) { } + } /** * Called when an update failed. */ - public void updateFailed(UpdateManagerEvent e) { + public void updateFailed(final UpdateManagerEvent e) { + EventQueue.invokeLater(new Runnable() { + public void run() { + Object[] dll = updateManagerListeners.toArray(); + + if (dll.length > 0) { + for (int i = 0; i < dll.length; i++) { + ((UpdateManagerListener)dll[i]). + updateFailed(e); + } + } + } + }); } // Event propagation to GVT /////////////////////////////////////// @@ -1701,7 +1701,6 @@ try { EventQueue.invokeAndWait(r); } catch (Exception e) { - throw new RuntimeException(e.getMessage()); } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]