1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski package complex.persistent_window_states; 24*b1cdbd2cSJim Jagielski 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.awt.Rectangle; 27*b1cdbd2cSJim Jagielski import com.sun.star.awt.PosSize; 28*b1cdbd2cSJim Jagielski import com.sun.star.frame.XComponentLoader; 29*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 30*b1cdbd2cSJim Jagielski import com.sun.star.awt.XWindow; 31*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 32*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyState; 33*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 34*b1cdbd2cSJim Jagielski import com.sun.star.frame.XFrame; 35*b1cdbd2cSJim Jagielski import com.sun.star.frame.FrameSearchFlag; 36*b1cdbd2cSJim Jagielski import helper.WindowListener; 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski /** 39*b1cdbd2cSJim Jagielski * Load and resize a document. 40*b1cdbd2cSJim Jagielski * 41*b1cdbd2cSJim Jagielski */ 42*b1cdbd2cSJim Jagielski public class DocumentHandle { 43*b1cdbd2cSJim Jagielski // the component loader to load a document 44*b1cdbd2cSJim Jagielski XComponentLoader xCompLoader = null; 45*b1cdbd2cSJim Jagielski // the document 46*b1cdbd2cSJim Jagielski XComponent xComp = null; 47*b1cdbd2cSJim Jagielski // the current window 48*b1cdbd2cSJim Jagielski XWindow xWin = null; 49*b1cdbd2cSJim Jagielski // a own window listener 50*b1cdbd2cSJim Jagielski WindowListener wl = null; 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski /** 53*b1cdbd2cSJim Jagielski * Constructor 54*b1cdbd2cSJim Jagielski * @param xCompLoader A loader to load a document 55*b1cdbd2cSJim Jagielski */ DocumentHandle(XComponentLoader xCompLoader)56*b1cdbd2cSJim Jagielski public DocumentHandle(XComponentLoader xCompLoader) { 57*b1cdbd2cSJim Jagielski this.xCompLoader = xCompLoader; 58*b1cdbd2cSJim Jagielski wl = new WindowListener(); 59*b1cdbd2cSJim Jagielski } 60*b1cdbd2cSJim Jagielski 61*b1cdbd2cSJim Jagielski /** 62*b1cdbd2cSJim Jagielski * Load/Create a document. 63*b1cdbd2cSJim Jagielski * @param docName The name of a document as file URL 64*b1cdbd2cSJim Jagielski * @param hidden If true, the document is loaded hidden. 65*b1cdbd2cSJim Jagielski * @return The size of the opened/created document. 66*b1cdbd2cSJim Jagielski * @throws Exception 67*b1cdbd2cSJim Jagielski */ loadDocument(String docName, boolean hidden)68*b1cdbd2cSJim Jagielski public Rectangle loadDocument(String docName, boolean hidden) 69*b1cdbd2cSJim Jagielski throws Exception{ 70*b1cdbd2cSJim Jagielski wl.resetTrigger(); 71*b1cdbd2cSJim Jagielski try { 72*b1cdbd2cSJim Jagielski PropertyValue [] szArgs = null; 73*b1cdbd2cSJim Jagielski if (hidden) { 74*b1cdbd2cSJim Jagielski szArgs = new PropertyValue [1]; 75*b1cdbd2cSJim Jagielski PropertyValue Arg = new PropertyValue(); 76*b1cdbd2cSJim Jagielski Arg.Name = "Hidden"; 77*b1cdbd2cSJim Jagielski Arg.Value = hidden?"True":"False"; 78*b1cdbd2cSJim Jagielski Arg.Handle = -1; 79*b1cdbd2cSJim Jagielski Arg.State = PropertyState.DEFAULT_VALUE; 80*b1cdbd2cSJim Jagielski szArgs[0] = Arg; 81*b1cdbd2cSJim Jagielski } 82*b1cdbd2cSJim Jagielski else { 83*b1cdbd2cSJim Jagielski szArgs = new PropertyValue [0]; 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski // get the current active window 87*b1cdbd2cSJim Jagielski XFrame xCurFrame = UnoRuntime.queryInterface(XFrame.class, xCompLoader); 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski // create a new frame 90*b1cdbd2cSJim Jagielski XFrame xFrame = xCurFrame.findFrame("_blank", FrameSearchFlag.CREATE); 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski // load document in this frame 93*b1cdbd2cSJim Jagielski XComponentLoader xFrameLoader = UnoRuntime.queryInterface(XComponentLoader.class, xFrame); 94*b1cdbd2cSJim Jagielski xComp = xFrameLoader.loadComponentFromURL( 95*b1cdbd2cSJim Jagielski docName, "_self", 0, szArgs); 96*b1cdbd2cSJim Jagielski // wait for the document to load. 97*b1cdbd2cSJim Jagielski try { 98*b1cdbd2cSJim Jagielski Thread.sleep(10000); 99*b1cdbd2cSJim Jagielski } 100*b1cdbd2cSJim Jagielski catch(java.lang.InterruptedException e) {} 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski xWin = xFrame.getContainerWindow(); 103*b1cdbd2cSJim Jagielski xWin.addWindowListener(wl); 104*b1cdbd2cSJim Jagielski } 105*b1cdbd2cSJim Jagielski catch(com.sun.star.io.IOException e) { 106*b1cdbd2cSJim Jagielski e.printStackTrace(); 107*b1cdbd2cSJim Jagielski return null; 108*b1cdbd2cSJim Jagielski } 109*b1cdbd2cSJim Jagielski catch(com.sun.star.lang.IllegalArgumentException e) { 110*b1cdbd2cSJim Jagielski e.printStackTrace(); 111*b1cdbd2cSJim Jagielski return null; 112*b1cdbd2cSJim Jagielski } 113*b1cdbd2cSJim Jagielski catch(java.lang.Exception e) { 114*b1cdbd2cSJim Jagielski System.out.println("DH3"); 115*b1cdbd2cSJim Jagielski e.printStackTrace(); 116*b1cdbd2cSJim Jagielski throw e; 117*b1cdbd2cSJim Jagielski } 118*b1cdbd2cSJim Jagielski return xWin.getPosSize(); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski } 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski /** 123*b1cdbd2cSJim Jagielski * Get the size of the current window. 124*b1cdbd2cSJim Jagielski * @return The size of the window as Rectangle. 125*b1cdbd2cSJim Jagielski */ getDocumentPosSize()126*b1cdbd2cSJim Jagielski public Rectangle getDocumentPosSize() { 127*b1cdbd2cSJim Jagielski return xWin.getPosSize(); 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski /** 131*b1cdbd2cSJim Jagielski * Resize the window in defined steps: 132*b1cdbd2cSJim Jagielski * width -10 pixel; 133*b1cdbd2cSJim Jagielski * height -10 pixel; 134*b1cdbd2cSJim Jagielski * X-Position +10 pixel; 135*b1cdbd2cSJim Jagielski * Y-Position +10 pixel 136*b1cdbd2cSJim Jagielski * @return True if resize worked. 137*b1cdbd2cSJim Jagielski */ resizeDocument()138*b1cdbd2cSJim Jagielski public boolean resizeDocument() { 139*b1cdbd2cSJim Jagielski Rectangle newPosSize = xWin.getPosSize(); 140*b1cdbd2cSJim Jagielski newPosSize.Width = newPosSize.Width - 20; 141*b1cdbd2cSJim Jagielski newPosSize.Height = newPosSize.Height - 20; 142*b1cdbd2cSJim Jagielski newPosSize.X = newPosSize.X + 80; 143*b1cdbd2cSJim Jagielski newPosSize.Y = newPosSize.Y + 80; 144*b1cdbd2cSJim Jagielski return resizeDocument(newPosSize); 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski /** 148*b1cdbd2cSJim Jagielski * Resize window to the given Rectangle 149*b1cdbd2cSJim Jagielski * @param newPosSize The new position and size of the window. 150*b1cdbd2cSJim Jagielski * @return True if resize worked. 151*b1cdbd2cSJim Jagielski */ resizeDocument(Rectangle newPosSize)152*b1cdbd2cSJim Jagielski public boolean resizeDocument(Rectangle newPosSize){ 153*b1cdbd2cSJim Jagielski wl.resetTrigger(); 154*b1cdbd2cSJim Jagielski xWin.setPosSize(newPosSize.X, newPosSize.Y, newPosSize.Width, 155*b1cdbd2cSJim Jagielski newPosSize.Height, PosSize.POSSIZE); 156*b1cdbd2cSJim Jagielski try { 157*b1cdbd2cSJim Jagielski Thread.sleep(3000); 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski catch(java.lang.InterruptedException e) {} 160*b1cdbd2cSJim Jagielski return wl.resizedTrigger; 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski } 163