1*cdf0e10cSrcweir import java.lang.Thread; 2*cdf0e10cSrcweir 3*cdf0e10cSrcweir import com.sun.star.awt.Rectangle; 4*cdf0e10cSrcweir import com.sun.star.awt.XWindow; 5*cdf0e10cSrcweir 6*cdf0e10cSrcweir import com.sun.star.beans.PropertyValue; 7*cdf0e10cSrcweir import com.sun.star.beans.XPropertySet; 8*cdf0e10cSrcweir 9*cdf0e10cSrcweir import com.sun.star.container.XIndexAccess; 10*cdf0e10cSrcweir import com.sun.star.container.XChild; 11*cdf0e10cSrcweir import com.sun.star.container.XEnumerationAccess; 12*cdf0e10cSrcweir import com.sun.star.container.XEnumeration; 13*cdf0e10cSrcweir 14*cdf0e10cSrcweir import com.sun.star.frame.XComponentLoader; 15*cdf0e10cSrcweir import com.sun.star.frame.XController; 16*cdf0e10cSrcweir import com.sun.star.frame.XDesktop; 17*cdf0e10cSrcweir import com.sun.star.frame.XFrame; 18*cdf0e10cSrcweir import com.sun.star.frame.XModel; 19*cdf0e10cSrcweir import com.sun.star.frame.XTasksSupplier; 20*cdf0e10cSrcweir import com.sun.star.frame.XTask; 21*cdf0e10cSrcweir 22*cdf0e10cSrcweir import com.sun.star.lang.XComponent; 23*cdf0e10cSrcweir import com.sun.star.lang.XMultiServiceFactory; 24*cdf0e10cSrcweir import com.sun.star.lang.XServiceInfo; 25*cdf0e10cSrcweir import com.sun.star.lang.XServiceName; 26*cdf0e10cSrcweir import com.sun.star.lang.XTypeProvider; 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 29*cdf0e10cSrcweir import com.sun.star.uno.XInterface; 30*cdf0e10cSrcweir import com.sun.star.uno.Type; 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir import com.sun.star.drawing.XDrawView; 33*cdf0e10cSrcweir import com.sun.star.drawing.XDrawPage; 34*cdf0e10cSrcweir import com.sun.star.drawing.XShapes; 35*cdf0e10cSrcweir import com.sun.star.drawing.XShape; 36*cdf0e10cSrcweir import com.sun.star.drawing.XShapeDescriptor; 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir import com.sun.star.accessibility.XAccessible; 39*cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext; 40*cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleComponent; 41*cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleRelationSet; 42*cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleStateSet; 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir import com.sun.star.awt.XExtendedToolkit; 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir /** This class tries to simplify some tasks like loading a document or 48*cdf0e10cSrcweir getting various objects. 49*cdf0e10cSrcweir */ 50*cdf0e10cSrcweir public class SimpleOffice 51*cdf0e10cSrcweir { 52*cdf0e10cSrcweir XDesktop mxDesktop = null; 53*cdf0e10cSrcweir OfficeConnection aConnection; 54*cdf0e10cSrcweir int mnPortNumber; 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir public SimpleOffice (int nPortNumber) 57*cdf0e10cSrcweir { 58*cdf0e10cSrcweir mnPortNumber = nPortNumber; 59*cdf0e10cSrcweir connect (); 60*cdf0e10cSrcweir getDesktop (); 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir public void connect () 64*cdf0e10cSrcweir { 65*cdf0e10cSrcweir aConnection = new OfficeConnection (mnPortNumber); 66*cdf0e10cSrcweir mxDesktop = null; 67*cdf0e10cSrcweir getDesktop (); 68*cdf0e10cSrcweir } 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir public XModel loadDocument (String URL) 71*cdf0e10cSrcweir { 72*cdf0e10cSrcweir XModel xModel = null; 73*cdf0e10cSrcweir try 74*cdf0e10cSrcweir { 75*cdf0e10cSrcweir // Load the document from the specified URL. 76*cdf0e10cSrcweir XComponentLoader xLoader = 77*cdf0e10cSrcweir (XComponentLoader)UnoRuntime.queryInterface( 78*cdf0e10cSrcweir XComponentLoader.class, mxDesktop); 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir XComponent xComponent = xLoader.loadComponentFromURL ( 81*cdf0e10cSrcweir URL, 82*cdf0e10cSrcweir "_blank", 83*cdf0e10cSrcweir 0, 84*cdf0e10cSrcweir new PropertyValue[0] 85*cdf0e10cSrcweir ); 86*cdf0e10cSrcweir 87*cdf0e10cSrcweir xModel = (XModel) UnoRuntime.queryInterface( 88*cdf0e10cSrcweir XModel.class, xComponent); 89*cdf0e10cSrcweir } 90*cdf0e10cSrcweir catch (java.lang.NullPointerException e) 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir MessageArea.println ("caught exception while loading " 93*cdf0e10cSrcweir + URL + " : " + e); 94*cdf0e10cSrcweir } 95*cdf0e10cSrcweir catch (Exception e) 96*cdf0e10cSrcweir { 97*cdf0e10cSrcweir MessageArea.println ("caught exception while loading " 98*cdf0e10cSrcweir + URL + " : " + e); 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir return xModel; 101*cdf0e10cSrcweir } 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir 106*cdf0e10cSrcweir public XModel getModel (String name) 107*cdf0e10cSrcweir { 108*cdf0e10cSrcweir XModel xModel = null; 109*cdf0e10cSrcweir try 110*cdf0e10cSrcweir { 111*cdf0e10cSrcweir XTasksSupplier xTasksSupplier = 112*cdf0e10cSrcweir (XTasksSupplier) UnoRuntime.queryInterface( 113*cdf0e10cSrcweir XTasksSupplier.class, mxDesktop); 114*cdf0e10cSrcweir XEnumerationAccess xEA = xTasksSupplier.getTasks(); 115*cdf0e10cSrcweir XEnumeration xE = xEA.createEnumeration(); 116*cdf0e10cSrcweir while (xE.hasMoreElements()) 117*cdf0e10cSrcweir { 118*cdf0e10cSrcweir XTask xTask = (XTask) UnoRuntime.queryInterface( 119*cdf0e10cSrcweir XTask.class, xE.nextElement()); 120*cdf0e10cSrcweir MessageArea.print (xTask.getName()); 121*cdf0e10cSrcweir } 122*cdf0e10cSrcweir } 123*cdf0e10cSrcweir catch (Exception e) 124*cdf0e10cSrcweir { 125*cdf0e10cSrcweir MessageArea.println ("caught exception while getting Model " + name 126*cdf0e10cSrcweir + ": " + e); 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir return xModel; 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir public XModel getModel (XDrawView xView) 133*cdf0e10cSrcweir { 134*cdf0e10cSrcweir XController xController = (XController) UnoRuntime.queryInterface( 135*cdf0e10cSrcweir XController.class, xView); 136*cdf0e10cSrcweir if (xController != null) 137*cdf0e10cSrcweir return xController.getModel(); 138*cdf0e10cSrcweir else 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir MessageArea.println ("can't cast view to controller"); 141*cdf0e10cSrcweir return null; 142*cdf0e10cSrcweir } 143*cdf0e10cSrcweir } 144*cdf0e10cSrcweir 145*cdf0e10cSrcweir public XDesktop getDesktop () 146*cdf0e10cSrcweir { 147*cdf0e10cSrcweir if (mxDesktop != null) 148*cdf0e10cSrcweir return mxDesktop; 149*cdf0e10cSrcweir try 150*cdf0e10cSrcweir { 151*cdf0e10cSrcweir // Get the factory of the connected office. 152*cdf0e10cSrcweir XMultiServiceFactory xMSF = aConnection.getServiceManager (); 153*cdf0e10cSrcweir if (xMSF == null) 154*cdf0e10cSrcweir { 155*cdf0e10cSrcweir MessageArea.println ("can't connect to office"); 156*cdf0e10cSrcweir return null; 157*cdf0e10cSrcweir } 158*cdf0e10cSrcweir else 159*cdf0e10cSrcweir MessageArea.println ("Connected successfully."); 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir // Create a new desktop. 162*cdf0e10cSrcweir mxDesktop = (XDesktop) UnoRuntime.queryInterface( 163*cdf0e10cSrcweir XDesktop.class, 164*cdf0e10cSrcweir xMSF.createInstance ("com.sun.star.frame.Desktop") 165*cdf0e10cSrcweir ); 166*cdf0e10cSrcweir } 167*cdf0e10cSrcweir catch (Exception e) 168*cdf0e10cSrcweir { 169*cdf0e10cSrcweir MessageArea.println ("caught exception while creating desktop: " 170*cdf0e10cSrcweir + e); 171*cdf0e10cSrcweir } 172*cdf0e10cSrcweir 173*cdf0e10cSrcweir return mxDesktop; 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir /** Return a reference to the extended toolkit which is a broadcaster of 178*cdf0e10cSrcweir top window, key, and focus events. 179*cdf0e10cSrcweir */ 180*cdf0e10cSrcweir public XExtendedToolkit getExtendedToolkit () 181*cdf0e10cSrcweir { 182*cdf0e10cSrcweir XExtendedToolkit xToolkit = null; 183*cdf0e10cSrcweir try 184*cdf0e10cSrcweir { 185*cdf0e10cSrcweir // Get the factory of the connected office. 186*cdf0e10cSrcweir XMultiServiceFactory xMSF = aConnection.getServiceManager (); 187*cdf0e10cSrcweir if (xMSF != null) 188*cdf0e10cSrcweir { 189*cdf0e10cSrcweir xToolkit = (XExtendedToolkit) UnoRuntime.queryInterface( 190*cdf0e10cSrcweir XExtendedToolkit.class, 191*cdf0e10cSrcweir xMSF.createInstance ("stardiv.Toolkit.VCLXToolkit") 192*cdf0e10cSrcweir ); 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir } 195*cdf0e10cSrcweir catch (Exception e) 196*cdf0e10cSrcweir { 197*cdf0e10cSrcweir MessageArea.println ("caught exception while creating extended toolkit: " + e); 198*cdf0e10cSrcweir } 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir return xToolkit; 201*cdf0e10cSrcweir } 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir public XAccessible getAccessibleObject (XInterface xObject) 206*cdf0e10cSrcweir { 207*cdf0e10cSrcweir XAccessible xAccessible = null; 208*cdf0e10cSrcweir try 209*cdf0e10cSrcweir { 210*cdf0e10cSrcweir xAccessible = (XAccessible) UnoRuntime.queryInterface( 211*cdf0e10cSrcweir XAccessible.class, xObject); 212*cdf0e10cSrcweir } 213*cdf0e10cSrcweir catch (Exception e) 214*cdf0e10cSrcweir { 215*cdf0e10cSrcweir MessageArea.println ( 216*cdf0e10cSrcweir "caught exception while getting accessible object" + e); 217*cdf0e10cSrcweir e.printStackTrace(); 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir return xAccessible; 220*cdf0e10cSrcweir } 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir /** Return the root object of the accessibility hierarchy. 223*cdf0e10cSrcweir */ 224*cdf0e10cSrcweir public XAccessible getAccessibleRoot (XAccessible xAccessible) 225*cdf0e10cSrcweir { 226*cdf0e10cSrcweir try 227*cdf0e10cSrcweir { 228*cdf0e10cSrcweir XAccessible xParent = null; 229*cdf0e10cSrcweir do 230*cdf0e10cSrcweir { 231*cdf0e10cSrcweir XAccessibleContext xContext = xAccessible.getAccessibleContext(); 232*cdf0e10cSrcweir if (xContext != null) 233*cdf0e10cSrcweir xParent = xContext.getAccessibleParent(); 234*cdf0e10cSrcweir if (xParent != null) 235*cdf0e10cSrcweir xAccessible = xParent; 236*cdf0e10cSrcweir } 237*cdf0e10cSrcweir while (xParent != null); 238*cdf0e10cSrcweir } 239*cdf0e10cSrcweir catch (Exception e) 240*cdf0e10cSrcweir { 241*cdf0e10cSrcweir MessageArea.println ( 242*cdf0e10cSrcweir "caught exception while getting accessible root" + e); 243*cdf0e10cSrcweir e.printStackTrace(); 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir return xAccessible; 246*cdf0e10cSrcweir } 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir 251*cdf0e10cSrcweir /** @descr Return the current window associated with the given 252*cdf0e10cSrcweir model. 253*cdf0e10cSrcweir */ 254*cdf0e10cSrcweir public XWindow getCurrentWindow () 255*cdf0e10cSrcweir { 256*cdf0e10cSrcweir return getCurrentWindow ((XModel) UnoRuntime.queryInterface( 257*cdf0e10cSrcweir XModel.class, getDesktop())); 258*cdf0e10cSrcweir } 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir public XWindow getCurrentWindow (XModel xModel) 265*cdf0e10cSrcweir { 266*cdf0e10cSrcweir XWindow xWindow = null; 267*cdf0e10cSrcweir try 268*cdf0e10cSrcweir { 269*cdf0e10cSrcweir if (xModel == null) 270*cdf0e10cSrcweir MessageArea.println ("invalid model (==null)"); 271*cdf0e10cSrcweir XController xController = xModel.getCurrentController(); 272*cdf0e10cSrcweir if (xController == null) 273*cdf0e10cSrcweir MessageArea.println ("can't get controller from model"); 274*cdf0e10cSrcweir XFrame xFrame = xController.getFrame(); 275*cdf0e10cSrcweir if (xFrame == null) 276*cdf0e10cSrcweir MessageArea.println ("can't get frame from controller"); 277*cdf0e10cSrcweir xWindow = xFrame.getComponentWindow (); 278*cdf0e10cSrcweir if (xWindow == null) 279*cdf0e10cSrcweir MessageArea.println ("can't get window from frame"); 280*cdf0e10cSrcweir } 281*cdf0e10cSrcweir catch (Exception e) 282*cdf0e10cSrcweir { 283*cdf0e10cSrcweir MessageArea.println ("caught exception while getting current window" + e); 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir return xWindow; 287*cdf0e10cSrcweir } 288*cdf0e10cSrcweir 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir /** @descr Return the current draw page of the given desktop. 291*cdf0e10cSrcweir */ 292*cdf0e10cSrcweir public XDrawPage getCurrentDrawPage () 293*cdf0e10cSrcweir { 294*cdf0e10cSrcweir return getCurrentDrawPage ((XDrawView) UnoRuntime.queryInterface( 295*cdf0e10cSrcweir XDrawView.class, getCurrentView())); 296*cdf0e10cSrcweir } 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir 301*cdf0e10cSrcweir public XDrawPage getCurrentDrawPage (XDrawView xView) 302*cdf0e10cSrcweir { 303*cdf0e10cSrcweir XDrawPage xPage = null; 304*cdf0e10cSrcweir try 305*cdf0e10cSrcweir { 306*cdf0e10cSrcweir if (xView == null) 307*cdf0e10cSrcweir MessageArea.println ("can't get current draw page from null view"); 308*cdf0e10cSrcweir else 309*cdf0e10cSrcweir xPage = xView.getCurrentPage(); 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir catch (Exception e) 312*cdf0e10cSrcweir { 313*cdf0e10cSrcweir MessageArea.println ("caught exception while getting current draw page : " + e); 314*cdf0e10cSrcweir } 315*cdf0e10cSrcweir 316*cdf0e10cSrcweir return xPage; 317*cdf0e10cSrcweir } 318*cdf0e10cSrcweir 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir 322*cdf0e10cSrcweir /** @descr Return the current view of the given desktop. 323*cdf0e10cSrcweir */ 324*cdf0e10cSrcweir public XDrawView getCurrentView () 325*cdf0e10cSrcweir { 326*cdf0e10cSrcweir return getCurrentView (getDesktop()); 327*cdf0e10cSrcweir } 328*cdf0e10cSrcweir 329*cdf0e10cSrcweir public XDrawView getCurrentView (XDesktop xDesktop) 330*cdf0e10cSrcweir { 331*cdf0e10cSrcweir if (xDesktop == null) 332*cdf0e10cSrcweir MessageArea.println ("can't get desktop to retrieve current view"); 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir XDrawView xView = null; 335*cdf0e10cSrcweir try 336*cdf0e10cSrcweir { 337*cdf0e10cSrcweir XComponent xComponent = xDesktop.getCurrentComponent(); 338*cdf0e10cSrcweir if (xComponent == null) 339*cdf0e10cSrcweir MessageArea.println ("can't get component to retrieve current view"); 340*cdf0e10cSrcweir 341*cdf0e10cSrcweir XFrame xFrame = xDesktop.getCurrentFrame(); 342*cdf0e10cSrcweir if (xFrame == null) 343*cdf0e10cSrcweir MessageArea.println ("can't get frame to retrieve current view"); 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir XController xController = xFrame.getController(); 346*cdf0e10cSrcweir if (xController == null) 347*cdf0e10cSrcweir MessageArea.println ("can't get controller to retrieve current view"); 348*cdf0e10cSrcweir 349*cdf0e10cSrcweir xView = (XDrawView) UnoRuntime.queryInterface( 350*cdf0e10cSrcweir XDrawView.class, xController); 351*cdf0e10cSrcweir if (xView == null) 352*cdf0e10cSrcweir MessageArea.println ("could not cast controller into view"); 353*cdf0e10cSrcweir } 354*cdf0e10cSrcweir catch (Exception e) 355*cdf0e10cSrcweir { 356*cdf0e10cSrcweir MessageArea.println ("caught exception while getting current view : " + e); 357*cdf0e10cSrcweir } 358*cdf0e10cSrcweir 359*cdf0e10cSrcweir return xView; 360*cdf0e10cSrcweir } 361*cdf0e10cSrcweir 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir 365*cdf0e10cSrcweir // Return the accessible object of the document window. 366*cdf0e10cSrcweir public static XAccessible getAccessibleDocumentWindow (XDrawPage xPage) 367*cdf0e10cSrcweir { 368*cdf0e10cSrcweir XIndexAccess xShapeList = (XIndexAccess) UnoRuntime.queryInterface( 369*cdf0e10cSrcweir XIndexAccess.class, xPage); 370*cdf0e10cSrcweir if (xShapeList.getCount() > 0) 371*cdf0e10cSrcweir { 372*cdf0e10cSrcweir // All shapes return as accessible object the document window's 373*cdf0e10cSrcweir // accessible object. This is, of course, a hack and will be 374*cdf0e10cSrcweir // removed as soon as the missing infrastructure for obtaining 375*cdf0e10cSrcweir // the object directly is implemented. 376*cdf0e10cSrcweir XShape xShape = null; 377*cdf0e10cSrcweir try{ 378*cdf0e10cSrcweir xShape = (XShape) UnoRuntime.queryInterface( 379*cdf0e10cSrcweir XShape.class, xShapeList.getByIndex (0)); 380*cdf0e10cSrcweir } catch (Exception e) 381*cdf0e10cSrcweir {} 382*cdf0e10cSrcweir XAccessible xAccessible = (XAccessible) UnoRuntime.queryInterface ( 383*cdf0e10cSrcweir XAccessible.class, xShape); 384*cdf0e10cSrcweir return xAccessible; 385*cdf0e10cSrcweir } 386*cdf0e10cSrcweir else 387*cdf0e10cSrcweir return null; 388*cdf0e10cSrcweir } 389*cdf0e10cSrcweir } 390