diff options
author | Andre Fischer <af@openoffice.org> | 2002-08-21 10:39:07 +0000 |
---|---|---|
committer | Andre Fischer <af@openoffice.org> | 2002-08-21 10:39:07 +0000 |
commit | cf06a6b0fed36a0a05546b663fee5b0bca030af7 (patch) | |
tree | f2b20821ac6d6947b5a2f921894ade7e8c487d89 /toolkit/test/accessibility/TopWindowListener.java | |
parent | #101700# In OutputDevice::GetTextOutlines, finished fall back to bitmap conve... (diff) | |
download | core-cf06a6b0fed36a0a05546b663fee5b0bca030af7.tar.gz core-cf06a6b0fed36a0a05546b663fee5b0bca030af7.zip |
#100622# Added support of top level windows created during run time.
Diffstat (limited to 'toolkit/test/accessibility/TopWindowListener.java')
-rw-r--r-- | toolkit/test/accessibility/TopWindowListener.java | 150 |
1 files changed, 127 insertions, 23 deletions
diff --git a/toolkit/test/accessibility/TopWindowListener.java b/toolkit/test/accessibility/TopWindowListener.java index 1d92f4d224b9..b1539b275e98 100644 --- a/toolkit/test/accessibility/TopWindowListener.java +++ b/toolkit/test/accessibility/TopWindowListener.java @@ -4,6 +4,7 @@ import drafts.com.sun.star.awt.XExtendedToolkit; import drafts.com.sun.star.accessibility.XAccessible; import com.sun.star.uno.XInterface; import com.sun.star.uno.UnoRuntime; +import javax.swing.event.TreeModelEvent; /** Listen for top window events and create or delete children of the tree model accordingly. @@ -17,36 +18,88 @@ class TopWindowListener maOffice = aOffice; } - // XTopWindowListener - public void windowOpened (final com.sun.star.lang.EventObject aEvent) throws RuntimeException + + + + /** Use this function to initially fill the accessibility object tree + view with nodes for top level windows. + */ + public void Initialize () { - System.out.println ("Top window opened: " + aEvent.Source); - if (maModel != null) + XExtendedToolkit xToolkit = maOffice.getExtendedToolkit(); + if (xToolkit != null) { - Object aObject = maModel.getRoot(); - if (aObject instanceof VectorNode) + maModel.lock (); + int nTopWindowCount = xToolkit.getTopWindowCount(); + for (int i=0; i<nTopWindowCount; i++) { - VectorNode aRoot = (VectorNode) aObject; - InformationWriter aIW = new InformationWriter(); - aIW.showInterfaces ((XInterface)aEvent.Source); - XWindow xWindow = (XWindow) UnoRuntime.queryInterface( - XWindow.class, aEvent.Source); - if (xWindow == null) - System.out.println ("event source is no XWindow"); - else + try { - XAccessible xAccessible = maOffice.getAccessibleObject(xWindow); - if (xAccessible == null) - System.out.println ("event source is no XAccessible"); - else - { - XAccessible xRoot = maOffice.getAccessibleRoot (xAccessible); - aRoot.addChild ( - AccessibilityTreeModel.createDefaultNode (xRoot, aRoot)); - } + AddTopLevelNode (maOffice.getAccessibleObject( + xToolkit.getTopWindow (i))); + } + catch (Exception e) + { + System.out.println ("caught exception; " + e); } } + maModel.unlock ((AccessibleTreeNode)maModel.getRoot()); + } + } + + + + /** Add a new top level node which, to be exact, will be placed on the + second layer of the tree. + @param xNewTopLevelObject + The accessible object of the new top level window. + */ + private void AddTopLevelNode (XAccessible xNewTopLevelObject) + { + Object aObject = maModel.getRoot(); + System.out.println ("adding node to " + aObject); + if (aObject instanceof VectorNode && xNewTopLevelObject != null) + { + System.out.println ("adding node for " + xNewTopLevelObject); + VectorNode aRoot = (VectorNode) aObject; + AccessibleTreeNode aNode = + AccessibilityTreeModel.createDefaultNode (xNewTopLevelObject, aRoot); + aRoot.addChild (aNode); + maModel.fireTreeNodesInserted (maModel.createEvent (aRoot, aNode)); + } + } + + + + + /** Remove an existing top level node from the tree. + @param xNewTopLevelObject + The accessible object to remove. + */ + private void RemoveTopLevelNode (XAccessible xTopLevelObject) + { + Object aObject = maModel.getRoot(); + if (aObject instanceof VectorNode && xTopLevelObject != null) + { + System.out.println ("removing node " + xTopLevelObject); + VectorNode aRoot = (VectorNode) aObject; + AccessibleTreeNode aNode = maModel.getNode (xTopLevelObject); + TreeModelEvent aEvent = maModel.createEvent (aRoot, aNode); + maModel.removeChild (aNode); + System.out.println (aNode); + maModel.fireTreeNodesRemoved (aEvent); } + } + + + + + + /** This method exists for debugging. It prints a list of all top + level windows. + */ + private void ShowAllTopLevelWindows () + { XExtendedToolkit xToolkit = maOffice.getExtendedToolkit(); if (xToolkit != null) { @@ -64,14 +117,65 @@ class TopWindowListener } } } + + + + + // XTopWindowListener + public void windowOpened (final com.sun.star.lang.EventObject aEvent) throws RuntimeException + { + System.out.println ("Top window opened: " + aEvent.Source); + if (maModel != null) + { + XWindow xWindow = (XWindow) UnoRuntime.queryInterface( + XWindow.class, aEvent.Source); + if (xWindow == null) + System.out.println ("event source is no XWindow"); + else + { + XAccessible xAccessible = maOffice.getAccessibleObject(xWindow); + if (xAccessible == null) + System.out.println ("event source is no XAccessible"); + else + AddTopLevelNode (xAccessible); + } + } + } + + + + public void windowClosing (final com.sun.star.lang.EventObject aEvent) throws RuntimeException { System.out.println ("Top window closing: " + aEvent); } + + + + public void windowClosed (final com.sun.star.lang.EventObject aEvent) throws RuntimeException { System.out.println ("Top window closed: " + aEvent); + if (maModel != null) + { + XWindow xWindow = (XWindow) UnoRuntime.queryInterface( + XWindow.class, aEvent.Source); + if (xWindow == null) + System.out.println ("event source is no XWindow"); + else + { + XAccessible xAccessible = maOffice.getAccessibleObject(xWindow); + if (xAccessible == null) + System.out.println ("event source is no XAccessible"); + else + RemoveTopLevelNode (xAccessible); + } + } } + + + + public void windowMinimized (final com.sun.star.lang.EventObject aEvent) throws RuntimeException { System.out.println ("Top window minimized: " + aEvent); |