1*34dd1e25SAndrew Rist /************************************************************** 2*34dd1e25SAndrew Rist * 3*34dd1e25SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*34dd1e25SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*34dd1e25SAndrew Rist * distributed with this work for additional information 6*34dd1e25SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*34dd1e25SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*34dd1e25SAndrew Rist * "License"); you may not use this file except in compliance 9*34dd1e25SAndrew Rist * with the License. You may obtain a copy of the License at 10*34dd1e25SAndrew Rist * 11*34dd1e25SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*34dd1e25SAndrew Rist * 13*34dd1e25SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*34dd1e25SAndrew Rist * software distributed under the License is distributed on an 15*34dd1e25SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*34dd1e25SAndrew Rist * KIND, either express or implied. See the License for the 17*34dd1e25SAndrew Rist * specific language governing permissions and limitations 18*34dd1e25SAndrew Rist * under the License. 19*34dd1e25SAndrew Rist * 20*34dd1e25SAndrew Rist *************************************************************/ 21*34dd1e25SAndrew Rist 22*34dd1e25SAndrew Rist 23cdf0e10cSrcweir // __________ Imports __________ 24cdf0e10cSrcweir 25cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 26cdf0e10cSrcweir 27cdf0e10cSrcweir import java.awt.*; 28cdf0e10cSrcweir import javax.swing.*; 29cdf0e10cSrcweir import java.lang.String; 30cdf0e10cSrcweir import java.awt.event.*; 31cdf0e10cSrcweir import java.awt.*; 32cdf0e10cSrcweir 33cdf0e10cSrcweir // __________ Implementation __________ 34cdf0e10cSrcweir 35cdf0e10cSrcweir /** 36cdf0e10cSrcweir * Makes it possible to change some states of currently loaded 37cdf0e10cSrcweir * document (e.g. enable/disable menubar, toolbar, objectbar) 38cdf0e10cSrcweir * 39cdf0e10cSrcweir * @author Andreas Schlüns 40cdf0e10cSrcweir * @created 20.06.2002 09:28 41cdf0e10cSrcweir */ 42cdf0e10cSrcweir public class CustomizeView extends JPanel 43cdf0e10cSrcweir implements IShutdownListener 44cdf0e10cSrcweir { 45cdf0e10cSrcweir // ____________________ 46cdf0e10cSrcweir // const 47cdf0e10cSrcweir 48cdf0e10cSrcweir /** 49cdf0e10cSrcweir * These const URL's describe feature for toggling some properties of loaded document. 50cdf0e10cSrcweir * Dispatch it with the corresponding parameter to the frame. 51cdf0e10cSrcweir */ 52cdf0e10cSrcweir private static final String FEATUREURL_MENUBAR = "slot:6661" ; 53cdf0e10cSrcweir private static final String FEATUREURL_TOOLBAR = "slot:5909" ; 54cdf0e10cSrcweir private static final String FEATUREURL_OBJECTBAR = "slot:5905" ; 55cdf0e10cSrcweir 56cdf0e10cSrcweir private static final String FEATUREPROP_MENUBAR = "MenuBarVisible" ; 57cdf0e10cSrcweir private static final String FEATUREPROP_TOOLBAR = "ToolBarVisible" ; 58cdf0e10cSrcweir private static final String FEATUREPROP_OBJECTBAR = "ObjectBarVisible" ; 59cdf0e10cSrcweir 60cdf0e10cSrcweir private static final String ACTION_MENUBAR = "toogle_menu" ; 61cdf0e10cSrcweir private static final String ACTION_TOOLBAR = "toogle_toolbar" ; 62cdf0e10cSrcweir private static final String ACTION_OBJECTBAR = "toogle_objectbar" ; 63cdf0e10cSrcweir 64cdf0e10cSrcweir private static final String MENUBAR_ON = "menubar on" ; 65cdf0e10cSrcweir private static final String TOOLBAR_ON = "toolbar on" ; 66cdf0e10cSrcweir private static final String OBJECTBAR_ON = "objectbar on" ; 67cdf0e10cSrcweir 68cdf0e10cSrcweir private static final String MENUBAR_OFF = "menubar off" ; 69cdf0e10cSrcweir private static final String TOOLBAR_OFF = "toolbar off" ; 70cdf0e10cSrcweir private static final String OBJECTBAR_OFF = "objectbar off" ; 71cdf0e10cSrcweir 72cdf0e10cSrcweir // ____________________ 73cdf0e10cSrcweir // member 74cdf0e10cSrcweir 75cdf0e10cSrcweir /** 76cdf0e10cSrcweir * @member m_cbMenuBar reference to checkbox for toggling menubar 77cdf0e10cSrcweir * @member m_cbToolBar reference to checkbox for toggling toolbar 78cdf0e10cSrcweir * @member m_cbObjectBar reference to checkbox for toggling objectbar 79cdf0e10cSrcweir * 80cdf0e10cSrcweir * @member m_aMenuBarListener listener for status events of the menu bar 81cdf0e10cSrcweir * @member m_aToolBarListener listener for status events of the tool bar 82cdf0e10cSrcweir * @member m_aObjectBarListener listener for status events of the object bar 83cdf0e10cSrcweir */ 84cdf0e10cSrcweir private JCheckBox m_cbMenuBar ; 85cdf0e10cSrcweir private JCheckBox m_cbToolBar ; 86cdf0e10cSrcweir private JCheckBox m_cbObjectBar ; 87cdf0e10cSrcweir 88cdf0e10cSrcweir private StatusListener m_aMenuBarListener ; 89cdf0e10cSrcweir private StatusListener m_aToolBarListener ; 90cdf0e10cSrcweir private StatusListener m_aObjectBarListener; 91cdf0e10cSrcweir 92cdf0e10cSrcweir // ____________________ 93cdf0e10cSrcweir 94cdf0e10cSrcweir /** 95cdf0e10cSrcweir * ctor 96cdf0e10cSrcweir * Create view controls on startup and initialize it. 97cdf0e10cSrcweir * We don't start listening here. see setFrame()! 98cdf0e10cSrcweir */ CustomizeView()99cdf0e10cSrcweir CustomizeView() 100cdf0e10cSrcweir { 101cdf0e10cSrcweir this.setLayout(new GridLayout(3,0)); 102cdf0e10cSrcweir 103cdf0e10cSrcweir m_cbMenuBar = new JCheckBox(MENUBAR_OFF , false); 104cdf0e10cSrcweir m_cbToolBar = new JCheckBox(TOOLBAR_OFF , false); 105cdf0e10cSrcweir m_cbObjectBar = new JCheckBox(OBJECTBAR_OFF, false); 106cdf0e10cSrcweir 107cdf0e10cSrcweir m_cbMenuBar.setEnabled (false); 108cdf0e10cSrcweir m_cbToolBar.setEnabled (false); 109cdf0e10cSrcweir m_cbObjectBar.setEnabled(false); 110cdf0e10cSrcweir 111cdf0e10cSrcweir m_cbMenuBar.setActionCommand (ACTION_MENUBAR ); 112cdf0e10cSrcweir m_cbToolBar.setActionCommand (ACTION_TOOLBAR ); 113cdf0e10cSrcweir m_cbObjectBar.setActionCommand(ACTION_OBJECTBAR); 114cdf0e10cSrcweir 115cdf0e10cSrcweir this.add(m_cbMenuBar ); 116cdf0e10cSrcweir this.add(m_cbToolBar ); 117cdf0e10cSrcweir this.add(m_cbObjectBar); 118cdf0e10cSrcweir } 119cdf0e10cSrcweir 120cdf0e10cSrcweir // ____________________ 121cdf0e10cSrcweir 122cdf0e10cSrcweir /** 123cdf0e10cSrcweir * set new frame for this view 124cdf0e10cSrcweir * We start listening for frame action/status and click events instandly. 125cdf0e10cSrcweir * If an event occure we use it to synchronize our controls 126cdf0e10cSrcweir * with states of a (my be) new document view of this frame. 127cdf0e10cSrcweir * 128cdf0e10cSrcweir * @param xFrame 129cdf0e10cSrcweir * the reference to the frame, which provides the 130cdf0e10cSrcweir * possibility to get the required status informations 131cdf0e10cSrcweir * 132cdf0e10cSrcweir * Attention: We don't accept new frames here. 133cdf0e10cSrcweir * We get one after startup and work with him. 134cdf0e10cSrcweir * That's it! 135cdf0e10cSrcweir */ setFrame(com.sun.star.frame.XFrame xFrame)136cdf0e10cSrcweir public void setFrame(com.sun.star.frame.XFrame xFrame) 137cdf0e10cSrcweir { 138cdf0e10cSrcweir if (xFrame==null) 139cdf0e10cSrcweir return; 140cdf0e10cSrcweir 141cdf0e10cSrcweir // be listener for click events 142cdf0e10cSrcweir // They will toogle the UI controls. 143cdf0e10cSrcweir ClickListener aMenuBarHandler = new ClickListener(FEATUREURL_MENUBAR ,FEATUREPROP_MENUBAR ,xFrame); 144cdf0e10cSrcweir ClickListener aToolBarHandler = new ClickListener(FEATUREURL_TOOLBAR ,FEATUREPROP_TOOLBAR ,xFrame); 145cdf0e10cSrcweir ClickListener aObjectBarHandler = new ClickListener(FEATUREURL_OBJECTBAR,FEATUREPROP_OBJECTBAR,xFrame); 146cdf0e10cSrcweir 147cdf0e10cSrcweir m_cbMenuBar.addActionListener (aMenuBarHandler ); 148cdf0e10cSrcweir m_cbToolBar.addActionListener (aToolBarHandler ); 149cdf0e10cSrcweir m_cbObjectBar.addActionListener(aObjectBarHandler); 150cdf0e10cSrcweir 151cdf0e10cSrcweir // be frame action listener 152cdf0e10cSrcweir // The callback will update listener connections 153cdf0e10cSrcweir // for status updates automaticly! 154cdf0e10cSrcweir m_aMenuBarListener = new StatusListener(m_cbMenuBar ,MENUBAR_ON ,MENUBAR_OFF ,xFrame, FEATUREURL_MENUBAR ); 155cdf0e10cSrcweir m_aToolBarListener = new StatusListener(m_cbToolBar ,TOOLBAR_ON ,TOOLBAR_OFF ,xFrame, FEATUREURL_TOOLBAR ); 156cdf0e10cSrcweir m_aObjectBarListener = new StatusListener(m_cbObjectBar,OBJECTBAR_ON,OBJECTBAR_OFF,xFrame, FEATUREURL_OBJECTBAR); 157cdf0e10cSrcweir 158cdf0e10cSrcweir m_aMenuBarListener.startListening(); 159cdf0e10cSrcweir m_aToolBarListener.startListening(); 160cdf0e10cSrcweir m_aObjectBarListener.startListening(); 161cdf0e10cSrcweir } 162cdf0e10cSrcweir 163cdf0e10cSrcweir // ____________________ 164cdf0e10cSrcweir 165cdf0e10cSrcweir /** 166cdf0e10cSrcweir * react for click events of the used check boxes 167cdf0e10cSrcweir * We use our internal set dispatch objects to 168cdf0e10cSrcweir * call it. This calls toogle the menu/object- or toolbar. 169cdf0e10cSrcweir * Note: Because we are listener status events too - hopefully 170cdf0e10cSrcweir * we get a notification, if toogling was successfully or not. 171cdf0e10cSrcweir * We use this information to update our check boxes again. 172cdf0e10cSrcweir * But such update doesn't force (hopefully) an action event. Otherwhise 173cdf0e10cSrcweir * we can produce a never ending recursion! 174cdf0e10cSrcweir * 175cdf0e10cSrcweir * @param aEvent 176cdf0e10cSrcweir * describes the used check box and his current state 177cdf0e10cSrcweir * we can use to dispatch the right URL to the office 178cdf0e10cSrcweir */ 179cdf0e10cSrcweir class ClickListener implements ActionListener, 180cdf0e10cSrcweir com.sun.star.lang.XEventListener 181cdf0e10cSrcweir { 182cdf0e10cSrcweir /// URL, to toogle the requested UI item 183cdf0e10cSrcweir String m_sURL; 184cdf0e10cSrcweir /// name of the property which must be used in combination with the URL 185cdf0e10cSrcweir String m_sProp; 186cdf0e10cSrcweir /// we must use this frame to dispatch a request 187cdf0e10cSrcweir com.sun.star.frame.XFrame m_xFrame; 188cdf0e10cSrcweir 189cdf0e10cSrcweir //_____________________ 190cdf0e10cSrcweir 191cdf0e10cSrcweir /** 192cdf0e10cSrcweir * ctor 193cdf0e10cSrcweir * It initialize an instance of this clas only. 194cdf0e10cSrcweir */ ClickListener( String sURL , String sProp , com.sun.star.frame.XFrame xFrame )195cdf0e10cSrcweir ClickListener( String sURL , 196cdf0e10cSrcweir String sProp , 197cdf0e10cSrcweir com.sun.star.frame.XFrame xFrame ) 198cdf0e10cSrcweir { 199cdf0e10cSrcweir m_sURL = sURL ; 200cdf0e10cSrcweir m_sProp = sProp ; 201cdf0e10cSrcweir m_xFrame = xFrame; 202cdf0e10cSrcweir } 203cdf0e10cSrcweir 204cdf0e10cSrcweir //_____________________ 205cdf0e10cSrcweir 206cdf0e10cSrcweir /** 207cdf0e10cSrcweir * callback for action events 208cdf0e10cSrcweir * Such events occure if somehwere click the 209cdf0e10cSrcweir * JCheckBox control on which we are registered. 210cdf0e10cSrcweir * Such events doesn't occure if we set it programmaticly 211cdf0e10cSrcweir * (e.g. if we get status events to -> see class StatusListener too) 212cdf0e10cSrcweir * 213cdf0e10cSrcweir * @param aEvent 214cdf0e10cSrcweir * describes the check box and his state 215cdf0e10cSrcweir * we can use to toogle the requested office 216cdf0e10cSrcweir * ressource. 217cdf0e10cSrcweir */ actionPerformed(ActionEvent aEvent)218cdf0e10cSrcweir public void actionPerformed(ActionEvent aEvent) 219cdf0e10cSrcweir { 220cdf0e10cSrcweir synchronized(this) 221cdf0e10cSrcweir { 222cdf0e10cSrcweir if (m_xFrame==null) 223cdf0e10cSrcweir return; 224cdf0e10cSrcweir } 225cdf0e10cSrcweir 226cdf0e10cSrcweir // define parameters for following dispatch 227cdf0e10cSrcweir boolean bState = ((JCheckBox)aEvent.getSource()).isSelected(); 228cdf0e10cSrcweir 229cdf0e10cSrcweir // prepare the dispatch 230cdf0e10cSrcweir com.sun.star.util.URL aURL = FunctionHelper.parseURL(m_sURL); 231cdf0e10cSrcweir if (aURL==null) 232cdf0e10cSrcweir return; 233cdf0e10cSrcweir 234cdf0e10cSrcweir com.sun.star.beans.PropertyValue[] lProperties = new com.sun.star.beans.PropertyValue[1]; 235cdf0e10cSrcweir lProperties[0] = new com.sun.star.beans.PropertyValue(); 236cdf0e10cSrcweir lProperties[0].Name = m_sProp; 237cdf0e10cSrcweir lProperties[0].Value = new Boolean(bState); 238cdf0e10cSrcweir 239cdf0e10cSrcweir // execute (dispatch) it into the frame 240cdf0e10cSrcweir if (m_xFrame==null) 241cdf0e10cSrcweir return; 242cdf0e10cSrcweir FunctionHelper.execute(m_xFrame,aURL,lProperties,null); 243cdf0e10cSrcweir } 244cdf0e10cSrcweir 245cdf0e10cSrcweir // ____________________ 246cdf0e10cSrcweir 247cdf0e10cSrcweir /** 248cdf0e10cSrcweir * callback for disposing events 249cdf0e10cSrcweir * Internaly we save a reference to an office frame. 250cdf0e10cSrcweir * Of course he can die and inform us then. We should react 251cdf0e10cSrcweir * and forget his reference. 252cdf0e10cSrcweir * 253cdf0e10cSrcweir * @param aEvent 254cdf0e10cSrcweir * describes the source which fire this event 255cdf0e10cSrcweir * Must be our internal saved frame. Otherwhise 256cdf0e10cSrcweir * somewhere know us without a registration ... 257cdf0e10cSrcweir */ disposing(com.sun.star.lang.EventObject aEvent)258cdf0e10cSrcweir public void disposing(com.sun.star.lang.EventObject aEvent) 259cdf0e10cSrcweir { 260cdf0e10cSrcweir synchronized(this) 261cdf0e10cSrcweir { 262cdf0e10cSrcweir m_xFrame = null; 263cdf0e10cSrcweir } 264cdf0e10cSrcweir } 265cdf0e10cSrcweir } 266cdf0e10cSrcweir 267cdf0e10cSrcweir // ____________________ 268cdf0e10cSrcweir 269cdf0e10cSrcweir /** 270cdf0e10cSrcweir * If this java application shutdown - we must cancel all current existing 271cdf0e10cSrcweir * listener connections. Otherwhise the office will run into some 272cdf0e10cSrcweir * DisposedExceptions if it tries to use these forgotten listener references. 273cdf0e10cSrcweir * And of course it can die doing that. 274cdf0e10cSrcweir * We are registered at a central object to be informed if the VM will exit. 275cdf0e10cSrcweir * So we can react. 276cdf0e10cSrcweir */ shutdown()277cdf0e10cSrcweir public void shutdown() 278cdf0e10cSrcweir { 279cdf0e10cSrcweir m_aMenuBarListener.shutdown(); 280cdf0e10cSrcweir m_aToolBarListener.shutdown(); 281cdf0e10cSrcweir m_aObjectBarListener.shutdown(); 282cdf0e10cSrcweir 283cdf0e10cSrcweir m_aMenuBarListener = null; 284cdf0e10cSrcweir m_aToolBarListener = null; 285cdf0e10cSrcweir m_aObjectBarListener = null; 286cdf0e10cSrcweir } 287cdf0e10cSrcweir } 288