1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  *  The Contents of this file are made available subject to the terms of
4*cdf0e10cSrcweir  *  the BSD license.
5*cdf0e10cSrcweir  *
6*cdf0e10cSrcweir  *  Copyright 2000, 2010 Oracle and/or its affiliates.
7*cdf0e10cSrcweir  *  All rights reserved.
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  *  Redistribution and use in source and binary forms, with or without
10*cdf0e10cSrcweir  *  modification, are permitted provided that the following conditions
11*cdf0e10cSrcweir  *  are met:
12*cdf0e10cSrcweir  *  1. Redistributions of source code must retain the above copyright
13*cdf0e10cSrcweir  *     notice, this list of conditions and the following disclaimer.
14*cdf0e10cSrcweir  *  2. Redistributions in binary form must reproduce the above copyright
15*cdf0e10cSrcweir  *     notice, this list of conditions and the following disclaimer in the
16*cdf0e10cSrcweir  *     documentation and/or other materials provided with the distribution.
17*cdf0e10cSrcweir  *  3. Neither the name of Sun Microsystems, Inc. nor the names of its
18*cdf0e10cSrcweir  *     contributors may be used to endorse or promote products derived
19*cdf0e10cSrcweir  *     from this software without specific prior written permission.
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22*cdf0e10cSrcweir  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23*cdf0e10cSrcweir  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24*cdf0e10cSrcweir  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25*cdf0e10cSrcweir  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26*cdf0e10cSrcweir  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27*cdf0e10cSrcweir  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28*cdf0e10cSrcweir  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29*cdf0e10cSrcweir  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
30*cdf0e10cSrcweir  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
31*cdf0e10cSrcweir  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32*cdf0e10cSrcweir  *
33*cdf0e10cSrcweir  *************************************************************************/
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir import com.sun.star.beans.Property;
36*cdf0e10cSrcweir import com.sun.star.beans.PropertyValue;
37*cdf0e10cSrcweir import com.sun.star.lang.NullPointerException;
38*cdf0e10cSrcweir import com.sun.star.reflection.XConstantTypeDescription;
39*cdf0e10cSrcweir import com.sun.star.reflection.XIdlMethod;
40*cdf0e10cSrcweir import com.sun.star.uno.AnyConverter;
41*cdf0e10cSrcweir import com.sun.star.uno.Type;
42*cdf0e10cSrcweir import java.awt.BorderLayout;
43*cdf0e10cSrcweir import java.awt.Container;
44*cdf0e10cSrcweir import java.awt.Dimension;
45*cdf0e10cSrcweir import java.awt.event.KeyAdapter;
46*cdf0e10cSrcweir import java.awt.event.KeyEvent;
47*cdf0e10cSrcweir import java.awt.event.MouseAdapter;
48*cdf0e10cSrcweir import java.awt.event.MouseEvent;
49*cdf0e10cSrcweir import javax.swing.JLabel;
50*cdf0e10cSrcweir import javax.swing.JPanel;
51*cdf0e10cSrcweir import javax.swing.JProgressBar;
52*cdf0e10cSrcweir import javax.swing.JScrollBar;
53*cdf0e10cSrcweir import javax.swing.JScrollPane;
54*cdf0e10cSrcweir import javax.swing.JSplitPane;
55*cdf0e10cSrcweir import javax.swing.JTextArea;
56*cdf0e10cSrcweir import javax.swing.JTextField;
57*cdf0e10cSrcweir import javax.swing.JTree;
58*cdf0e10cSrcweir import javax.swing.event.TreeSelectionEvent;
59*cdf0e10cSrcweir import javax.swing.event.TreeSelectionListener;
60*cdf0e10cSrcweir import javax.swing.event.TreeWillExpandListener;
61*cdf0e10cSrcweir import javax.swing.tree.DefaultTreeSelectionModel;
62*cdf0e10cSrcweir import javax.swing.tree.ExpandVetoException;
63*cdf0e10cSrcweir import javax.swing.tree.TreePath;
64*cdf0e10cSrcweir import javax.swing.tree.TreeSelectionModel;
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir public class SwingTreeControlProvider implements XTreeControlProvider{
69*cdf0e10cSrcweir     private JTextArea jtxtGeneratedSourceCode = new JTextArea();
70*cdf0e10cSrcweir     private JTextField jtxtFilter = new JTextField();
71*cdf0e10cSrcweir     private javax.swing.JLabel jlblFilter = new javax.swing.JLabel("Set a filter");
72*cdf0e10cSrcweir     private JPanel jPnlBottom = new JPanel(new BorderLayout());
73*cdf0e10cSrcweir     private JPanel jPanelProgress = new JPanel(new BorderLayout());
74*cdf0e10cSrcweir     private JPanel jPnlPath = new JPanel(new BorderLayout());
75*cdf0e10cSrcweir     private JLabel jLblPath = new JLabel("Generated source code");
76*cdf0e10cSrcweir     private JProgressBar jProgressBar1 = new JProgressBar();
77*cdf0e10cSrcweir     private JTree jTree = new javax.swing.JTree();
78*cdf0e10cSrcweir     private XDialogProvider m_xDialogProvider;
79*cdf0e10cSrcweir     private HideableTreeModel treeModel;
80*cdf0e10cSrcweir     private UnoTreeRenderer oUnoTreeRenderer;
81*cdf0e10cSrcweir     private InspectorPane m_oInspectorPane;
82*cdf0e10cSrcweir     private Object oUserDefinedObject = null;
83*cdf0e10cSrcweir     private boolean bIsUserDefined = false;
84*cdf0e10cSrcweir     private SwingUnoNode oRootNode;
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir     private final int nDIALOGWIDTH = 800;
87*cdf0e10cSrcweir 
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir     public SwingTreeControlProvider(XDialogProvider _xDialogProvider){
91*cdf0e10cSrcweir         m_xDialogProvider = _xDialogProvider;
92*cdf0e10cSrcweir     }
93*cdf0e10cSrcweir 
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir     public void addInspectorPane(InspectorPane _oInspectorPane){
96*cdf0e10cSrcweir         m_oInspectorPane = _oInspectorPane;
97*cdf0e10cSrcweir     }
98*cdf0e10cSrcweir 
99*cdf0e10cSrcweir     public InspectorPane getInspectorPane() throws NullPointerException{
100*cdf0e10cSrcweir         if (m_oInspectorPane == null){
101*cdf0e10cSrcweir             throw new NullPointerException("InspectorPage has not been added to TreeControl");
102*cdf0e10cSrcweir         }
103*cdf0e10cSrcweir         else{
104*cdf0e10cSrcweir             return m_oInspectorPane;
105*cdf0e10cSrcweir         }
106*cdf0e10cSrcweir     }
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir     private void ComponentSelector(Object _oRootObject, String _sRootTreeNodeName) {
109*cdf0e10cSrcweir         String sTreeNodeName =  _sRootTreeNodeName;
110*cdf0e10cSrcweir         oRootNode = new SwingUnoNode(_oRootObject);
111*cdf0e10cSrcweir         oRootNode.setLabel(_sRootTreeNodeName);
112*cdf0e10cSrcweir         treeModel = new HideableTreeModel(oRootNode);
113*cdf0e10cSrcweir         jTree.setModel(treeModel);
114*cdf0e10cSrcweir         jTree.setRootVisible(true);
115*cdf0e10cSrcweir         jTree.setVisible(true);
116*cdf0e10cSrcweir         oRootNode.setFoldable(true);
117*cdf0e10cSrcweir         enableFilterElements(null);
118*cdf0e10cSrcweir     }
119*cdf0e10cSrcweir 
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir 
122*cdf0e10cSrcweir     private void insertTopPanel(JPanel _jPnlCenter){
123*cdf0e10cSrcweir         javax.swing.JPanel jPnlTop = new javax.swing.JPanel(new BorderLayout(10, 10));
124*cdf0e10cSrcweir         jPnlTop.setPreferredSize(new java.awt.Dimension(nDIALOGWIDTH, 20));
125*cdf0e10cSrcweir         jlblFilter.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
126*cdf0e10cSrcweir         jlblFilter.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
127*cdf0e10cSrcweir         jPnlTop.add(jlblFilter, java.awt.BorderLayout.WEST);
128*cdf0e10cSrcweir         jtxtFilter.setHorizontalAlignment(javax.swing.JTextField.LEFT);
129*cdf0e10cSrcweir         jtxtFilter.setPreferredSize(new java.awt.Dimension(200, 10));
130*cdf0e10cSrcweir         jtxtFilter.addKeyListener(new InspectorKeyFilterAdapter());
131*cdf0e10cSrcweir         jPnlTop.add(jtxtFilter, java.awt.BorderLayout.CENTER);
132*cdf0e10cSrcweir         _jPnlCenter.add(jPnlTop, java.awt.BorderLayout.NORTH);
133*cdf0e10cSrcweir     }
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir     private void insertBottomPanel(JSplitPane _jSplitPane){ //JPanel _jPnlCenter){
137*cdf0e10cSrcweir         jtxtGeneratedSourceCode.setTabSize(4);
138*cdf0e10cSrcweir         jtxtGeneratedSourceCode.getAccessibleContext().setAccessibleName("generated SourceCode");
139*cdf0e10cSrcweir         JScrollPane jScrollPane = new JScrollPane(jtxtGeneratedSourceCode);
140*cdf0e10cSrcweir         jScrollPane.setPreferredSize(new Dimension(nDIALOGWIDTH,205));
141*cdf0e10cSrcweir         jtxtGeneratedSourceCode.setEditable(false);
142*cdf0e10cSrcweir         _jSplitPane.setBottomComponent(jScrollPane);
143*cdf0e10cSrcweir     }
144*cdf0e10cSrcweir 
145*cdf0e10cSrcweir         private void insertBorderPanes(Container _cp){
146*cdf0e10cSrcweir             JPanel jPnlEast  = new JPanel(new BorderLayout());
147*cdf0e10cSrcweir             JPanel jPnlNorth = new JPanel(new BorderLayout());
148*cdf0e10cSrcweir             JPanel jPnlSouth = new JPanel(new BorderLayout());
149*cdf0e10cSrcweir             JPanel jPnlWest = new JPanel(new BorderLayout());
150*cdf0e10cSrcweir             _cp.add(jPnlNorth, java.awt.BorderLayout.NORTH);
151*cdf0e10cSrcweir             jPnlWest.setPreferredSize(new java.awt.Dimension(10, 10));
152*cdf0e10cSrcweir             _cp.add(jPnlWest, java.awt.BorderLayout.WEST);
153*cdf0e10cSrcweir             jPnlEast.setPreferredSize(new java.awt.Dimension(10, 10));
154*cdf0e10cSrcweir             _cp.add(jPnlEast, java.awt.BorderLayout.EAST);
155*cdf0e10cSrcweir             jPnlSouth.setPreferredSize(new java.awt.Dimension(10, 10));
156*cdf0e10cSrcweir             _cp.add(jPnlSouth, java.awt.BorderLayout.SOUTH);
157*cdf0e10cSrcweir         }
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir 
160*cdf0e10cSrcweir         public String enableFilterElements(XUnoNode _oUnoNode){
161*cdf0e10cSrcweir             String sFilter ="";
162*cdf0e10cSrcweir             boolean bIsFacetteNode = isFacetteNode(_oUnoNode);
163*cdf0e10cSrcweir             this.jtxtFilter.setEnabled(bIsFacetteNode);
164*cdf0e10cSrcweir             this.jlblFilter.setEnabled(bIsFacetteNode);
165*cdf0e10cSrcweir             sFilter = m_oInspectorPane.getFilter(_oUnoNode);
166*cdf0e10cSrcweir             jtxtFilter.setText(sFilter);
167*cdf0e10cSrcweir             return sFilter;
168*cdf0e10cSrcweir         }
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir 
171*cdf0e10cSrcweir         private class InspectorKeyFilterAdapter extends KeyAdapter{
172*cdf0e10cSrcweir             public void keyReleased(KeyEvent e){
173*cdf0e10cSrcweir                 String sFilter = jtxtFilter.getText();
174*cdf0e10cSrcweir                 SwingTreePathProvider oSwingTreePathProvider = new SwingTreePathProvider(jTree.getSelectionPath());
175*cdf0e10cSrcweir                 XUnoNode oUnoNode = oSwingTreePathProvider.getLastPathComponent();
176*cdf0e10cSrcweir                 if (oUnoNode instanceof XUnoFacetteNode){
177*cdf0e10cSrcweir                     m_oInspectorPane.applyFilter((XUnoFacetteNode) oUnoNode, sFilter);
178*cdf0e10cSrcweir                 }
179*cdf0e10cSrcweir             }
180*cdf0e10cSrcweir         }
181*cdf0e10cSrcweir 
182*cdf0e10cSrcweir 
183*cdf0e10cSrcweir 
184*cdf0e10cSrcweir         /** Inspect the given object for methods, properties, interfaces, and
185*cdf0e10cSrcweir          * services.
186*cdf0e10cSrcweir          * @param a The object to inspect
187*cdf0e10cSrcweir          * @throws RuntimeException If
188*cdf0e10cSrcweir          */
189*cdf0e10cSrcweir         public Object inspect(java.lang.Object _oUserDefinedObject, String _sTitle) throws com.sun.star.uno.RuntimeException {
190*cdf0e10cSrcweir         JPanel jPnlContainer = new javax.swing.JPanel(new BorderLayout(10, 10));
191*cdf0e10cSrcweir         try {
192*cdf0e10cSrcweir             javax.swing.JPanel jPnlCenter = new javax.swing.JPanel();
193*cdf0e10cSrcweir             bIsUserDefined = (_oUserDefinedObject != null);
194*cdf0e10cSrcweir             if (bIsUserDefined){
195*cdf0e10cSrcweir                 oUserDefinedObject = _oUserDefinedObject;
196*cdf0e10cSrcweir                 m_oInspectorPane.setTitle(_sTitle);
197*cdf0e10cSrcweir             }
198*cdf0e10cSrcweir             javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
199*cdf0e10cSrcweir             TreeSelectionModel tsm = new DefaultTreeSelectionModel();
200*cdf0e10cSrcweir             tsm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
201*cdf0e10cSrcweir             jTree.setSelectionModel(tsm);
202*cdf0e10cSrcweir             jTree.setVisible(false);
203*cdf0e10cSrcweir             jPnlCenter.setLayout(new java.awt.BorderLayout(10, 10));
204*cdf0e10cSrcweir             jPnlCenter.getAccessibleContext().setAccessibleName("inspection tab view");
205*cdf0e10cSrcweir             insertTopPanel(jPnlCenter);
206*cdf0e10cSrcweir             jScrollPane1.setViewportView(jTree);
207*cdf0e10cSrcweir             jScrollPane1.setPreferredSize(new java.awt.Dimension(600, 600));
208*cdf0e10cSrcweir             jScrollPane1.getAccessibleContext().setAccessibleName("API view scroll pane");
209*cdf0e10cSrcweir 
210*cdf0e10cSrcweir             JScrollBar jHScrollBar = jScrollPane1.createHorizontalScrollBar();
211*cdf0e10cSrcweir             jHScrollBar.getAccessibleContext().setAccessibleName("API view horizontal scroll bar");
212*cdf0e10cSrcweir             jScrollPane1.setHorizontalScrollBar(jHScrollBar);
213*cdf0e10cSrcweir 
214*cdf0e10cSrcweir             JScrollBar jVScrollBar = jScrollPane1.createVerticalScrollBar();
215*cdf0e10cSrcweir             jVScrollBar.getAccessibleContext().setAccessibleName("API view vertical scroll bar");
216*cdf0e10cSrcweir             jScrollPane1.setVerticalScrollBar(jVScrollBar);
217*cdf0e10cSrcweir 
218*cdf0e10cSrcweir             JSplitPane jSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
219*cdf0e10cSrcweir             jSplitPane.setTopComponent(jScrollPane1);
220*cdf0e10cSrcweir             jPnlCenter.add(jSplitPane, java.awt.BorderLayout.CENTER);
221*cdf0e10cSrcweir             jSplitPane.setDividerLocation(500);
222*cdf0e10cSrcweir             insertBottomPanel(jSplitPane);
223*cdf0e10cSrcweir             UnoTreeRenderer oUnoTreeRenderer = new UnoTreeRenderer();
224*cdf0e10cSrcweir             jTree.setCellRenderer(oUnoTreeRenderer);
225*cdf0e10cSrcweir             jTree.addTreeSelectionListener(
226*cdf0e10cSrcweir                 new TreeSelectionListener() {
227*cdf0e10cSrcweir                     public void valueChanged(TreeSelectionEvent event) {
228*cdf0e10cSrcweir                         TreePath tp = event.getNewLeadSelectionPath();
229*cdf0e10cSrcweir                         if (tp != null){
230*cdf0e10cSrcweir                             XUnoNode oUnoNode = getSelectedNode();
231*cdf0e10cSrcweir                             String sFilter = enableFilterElements(oUnoNode);
232*cdf0e10cSrcweir                         }
233*cdf0e10cSrcweir                     }
234*cdf0e10cSrcweir                 }
235*cdf0e10cSrcweir                 );
236*cdf0e10cSrcweir             //  Add KeyListener for help
237*cdf0e10cSrcweir             jTree.addKeyListener( new java.awt.event.KeyAdapter() {
238*cdf0e10cSrcweir                 public void keyReleased(java.awt.event.KeyEvent event) {
239*cdf0e10cSrcweir                     if ( event.getKeyCode() == KeyEvent.VK_F1 ) {
240*cdf0e10cSrcweir                         //  function key F1 pressed
241*cdf0e10cSrcweir                         TreePath aTreePath = jTree.getSelectionPath();
242*cdf0e10cSrcweir                         SwingUnoNode oUnoNode = (SwingUnoNode) aTreePath.getLastPathComponent();
243*cdf0e10cSrcweir                         oUnoNode.openIdlDescription(m_xDialogProvider.getIDLPath());
244*cdf0e10cSrcweir                     }
245*cdf0e10cSrcweir                 }
246*cdf0e10cSrcweir             });
247*cdf0e10cSrcweir             jTree.addMouseListener(new MouseAdapter() {
248*cdf0e10cSrcweir                 public void mousePressed (MouseEvent e) {
249*cdf0e10cSrcweir                     if (e.isPopupTrigger()){
250*cdf0e10cSrcweir                         m_oInspectorPane.showPopUpMenu(e.getComponent(), e.getX(), e.getY());
251*cdf0e10cSrcweir                     }
252*cdf0e10cSrcweir                     //unfortunately under Windows the method "isPopupTrigger" always returns false
253*cdf0e10cSrcweir                     else if ((e.getModifiersEx() & MouseEvent.BUTTON3_DOWN_MASK) == MouseEvent.BUTTON3_DOWN_MASK){
254*cdf0e10cSrcweir                         m_oInspectorPane.showPopUpMenu(e.getComponent(), e.getX(), e.getY());
255*cdf0e10cSrcweir                     }
256*cdf0e10cSrcweir                 }
257*cdf0e10cSrcweir             });
258*cdf0e10cSrcweir             jPnlContainer.add(jPnlCenter, java.awt.BorderLayout.CENTER);
259*cdf0e10cSrcweir             insertBorderPanes(jPnlContainer);
260*cdf0e10cSrcweir             if (this.bIsUserDefined){
261*cdf0e10cSrcweir                 ComponentSelector(oUserDefinedObject, m_oInspectorPane.getTitle());
262*cdf0e10cSrcweir             }
263*cdf0e10cSrcweir             m_xDialogProvider.addInspectorPage(m_oInspectorPane.getTitle(), jPnlContainer);
264*cdf0e10cSrcweir             addTreeExpandListener();
265*cdf0e10cSrcweir             }
266*cdf0e10cSrcweir             catch( Exception exception ) {
267*cdf0e10cSrcweir                 exception.printStackTrace(System.out);
268*cdf0e10cSrcweir             }
269*cdf0e10cSrcweir             return jPnlContainer;
270*cdf0e10cSrcweir         }
271*cdf0e10cSrcweir 
272*cdf0e10cSrcweir         public HideableTreeModel getModel(){
273*cdf0e10cSrcweir             return  treeModel;
274*cdf0e10cSrcweir         }
275*cdf0e10cSrcweir 
276*cdf0e10cSrcweir 
277*cdf0e10cSrcweir         public void addTreeExpandListener(){
278*cdf0e10cSrcweir             jTree.addTreeWillExpandListener(
279*cdf0e10cSrcweir                 new TreeWillExpandListener() {
280*cdf0e10cSrcweir                     public void treeWillExpand(javax.swing.event.TreeExpansionEvent event) throws javax.swing.tree.ExpandVetoException {
281*cdf0e10cSrcweir                         SwingTreePathProvider oSwingTreePathProvider = new SwingTreePathProvider(event.getPath());
282*cdf0e10cSrcweir                         XUnoNode oUnoNode = oSwingTreePathProvider.getLastPathComponent();
283*cdf0e10cSrcweir                         if (!m_oInspectorPane.expandNode(oUnoNode, oSwingTreePathProvider)){
284*cdf0e10cSrcweir                             throw new ExpandVetoException(event);
285*cdf0e10cSrcweir                         }
286*cdf0e10cSrcweir                     }
287*cdf0e10cSrcweir 
288*cdf0e10cSrcweir                     public void treeWillCollapse( javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException {
289*cdf0e10cSrcweir                     }
290*cdf0e10cSrcweir             });
291*cdf0e10cSrcweir         }
292*cdf0e10cSrcweir 
293*cdf0e10cSrcweir 
294*cdf0e10cSrcweir     public void setSourceCode(String _sSourceCode){
295*cdf0e10cSrcweir         jtxtGeneratedSourceCode.setText(_sSourceCode);
296*cdf0e10cSrcweir     }
297*cdf0e10cSrcweir 
298*cdf0e10cSrcweir 
299*cdf0e10cSrcweir     public XTreePathProvider getSelectedPath(){
300*cdf0e10cSrcweir         return new SwingTreePathProvider(jTree.getSelectionPath());
301*cdf0e10cSrcweir     }
302*cdf0e10cSrcweir 
303*cdf0e10cSrcweir 
304*cdf0e10cSrcweir     public void expandPath(XTreePathProvider _xTreePathProvider) throws ClassCastException{
305*cdf0e10cSrcweir         SwingTreePathProvider oSwingTreePathProvider = (SwingTreePathProvider) _xTreePathProvider;
306*cdf0e10cSrcweir         jTree.expandPath(oSwingTreePathProvider.getSwingTreePath());
307*cdf0e10cSrcweir     }
308*cdf0e10cSrcweir 
309*cdf0e10cSrcweir 
310*cdf0e10cSrcweir     public XUnoNode getSelectedNode(){
311*cdf0e10cSrcweir         XUnoNode oUnoNode = null;
312*cdf0e10cSrcweir         TreePath aTreePath = jTree.getSelectionPath();
313*cdf0e10cSrcweir         Object oNode = aTreePath.getLastPathComponent();
314*cdf0e10cSrcweir         if (oNode instanceof XUnoNode){
315*cdf0e10cSrcweir             oUnoNode = (XUnoNode) oNode;
316*cdf0e10cSrcweir         }
317*cdf0e10cSrcweir         return oUnoNode;
318*cdf0e10cSrcweir     }
319*cdf0e10cSrcweir 
320*cdf0e10cSrcweir 
321*cdf0e10cSrcweir     public void nodeInserted(XUnoNode _oParentNode, XUnoNode _oChildNode, int index) {
322*cdf0e10cSrcweir         getModel().nodeInserted(_oParentNode, _oChildNode, _oParentNode.getChildCount()-1);
323*cdf0e10cSrcweir     }
324*cdf0e10cSrcweir 
325*cdf0e10cSrcweir 
326*cdf0e10cSrcweir     public void nodeChanged(XUnoNode _oNode) {
327*cdf0e10cSrcweir         getModel().nodeChanged(_oNode);
328*cdf0e10cSrcweir     }
329*cdf0e10cSrcweir 
330*cdf0e10cSrcweir 
331*cdf0e10cSrcweir     public boolean setNodeVisible(Object node, boolean v) {
332*cdf0e10cSrcweir        return getModel().setNodeVisible(node, v);
333*cdf0e10cSrcweir     }
334*cdf0e10cSrcweir 
335*cdf0e10cSrcweir 
336*cdf0e10cSrcweir     public boolean isPropertyNode(XUnoNode _oUnoNode){
337*cdf0e10cSrcweir         return (_oUnoNode instanceof SwingUnoPropertyNode);
338*cdf0e10cSrcweir     }
339*cdf0e10cSrcweir 
340*cdf0e10cSrcweir 
341*cdf0e10cSrcweir     public boolean isMethodNode(XUnoNode _oUnoNode){
342*cdf0e10cSrcweir         return (_oUnoNode instanceof SwingUnoMethodNode);
343*cdf0e10cSrcweir     }
344*cdf0e10cSrcweir 
345*cdf0e10cSrcweir 
346*cdf0e10cSrcweir     public boolean isFacetteNode(XUnoNode _oUnoNode){
347*cdf0e10cSrcweir         return (_oUnoNode instanceof SwingUnoFacetteNode);
348*cdf0e10cSrcweir     }
349*cdf0e10cSrcweir 
350*cdf0e10cSrcweir 
351*cdf0e10cSrcweir     public XUnoNode addUnoNode(Object _oUnoObject){
352*cdf0e10cSrcweir         return new SwingUnoNode(_oUnoObject);
353*cdf0e10cSrcweir     }
354*cdf0e10cSrcweir 
355*cdf0e10cSrcweir 
356*cdf0e10cSrcweir     public XUnoNode addUnoNode(Object _oUnoObject, Type _aType){
357*cdf0e10cSrcweir         return new SwingUnoNode(_oUnoObject, _aType);
358*cdf0e10cSrcweir     }
359*cdf0e10cSrcweir 
360*cdf0e10cSrcweir 
361*cdf0e10cSrcweir     public XUnoFacetteNode addUnoFacetteNode(XUnoNode _oParentNode, String _sNodeDescription, Object _oUnoObject){
362*cdf0e10cSrcweir         SwingUnoFacetteNode oSwingUnoFacetteNode = new SwingUnoFacetteNode(_oUnoObject);
363*cdf0e10cSrcweir         oSwingUnoFacetteNode.setLabel(_sNodeDescription);
364*cdf0e10cSrcweir         if (_oParentNode != null){
365*cdf0e10cSrcweir             ((SwingUnoNode) _oParentNode).addChildNode(oSwingUnoFacetteNode);
366*cdf0e10cSrcweir         }
367*cdf0e10cSrcweir         return oSwingUnoFacetteNode;
368*cdf0e10cSrcweir     }
369*cdf0e10cSrcweir 
370*cdf0e10cSrcweir 
371*cdf0e10cSrcweir     public XUnoMethodNode addMethodNode(Object _objectElement, XIdlMethod _xIdlMethod){
372*cdf0e10cSrcweir         SwingUnoMethodNode oSwingUnoMethodNode = new SwingUnoMethodNode(_xIdlMethod, _objectElement, m_xDialogProvider);
373*cdf0e10cSrcweir         return oSwingUnoMethodNode;
374*cdf0e10cSrcweir     }
375*cdf0e10cSrcweir 
376*cdf0e10cSrcweir 
377*cdf0e10cSrcweir     public XUnoPropertyNode addUnoPropertyNodeWithName(Property _aProperty){
378*cdf0e10cSrcweir         SwingUnoPropertyNode oUnoPropertyNode = new SwingUnoPropertyNode(_aProperty);
379*cdf0e10cSrcweir         oUnoPropertyNode.setLabel("Name: " + _aProperty.Name);
380*cdf0e10cSrcweir         return oUnoPropertyNode;
381*cdf0e10cSrcweir     }
382*cdf0e10cSrcweir 
383*cdf0e10cSrcweir 
384*cdf0e10cSrcweir     public XUnoPropertyNode addUnoPropertyNodeWithHandle(Property _aProperty){
385*cdf0e10cSrcweir         SwingUnoPropertyNode oUnoPropertyNode = new SwingUnoPropertyNode(_aProperty);
386*cdf0e10cSrcweir         oUnoPropertyNode.setLabel("Handle: " + _aProperty.Handle);
387*cdf0e10cSrcweir         return oUnoPropertyNode;
388*cdf0e10cSrcweir     }
389*cdf0e10cSrcweir 
390*cdf0e10cSrcweir 
391*cdf0e10cSrcweir     public XUnoPropertyNode addUnoPropertyNodeWithType(Property _aProperty){
392*cdf0e10cSrcweir         SwingUnoPropertyNode oUnoPropertyNode = new SwingUnoPropertyNode(_aProperty);
393*cdf0e10cSrcweir         oUnoPropertyNode.setLabel("Type: " + _aProperty.Type.getTypeName());
394*cdf0e10cSrcweir         return oUnoPropertyNode;
395*cdf0e10cSrcweir     }
396*cdf0e10cSrcweir 
397*cdf0e10cSrcweir 
398*cdf0e10cSrcweir     public XUnoPropertyNode addUnoPropertyNodeWithAttributesDescription(Property _aProperty){
399*cdf0e10cSrcweir         SwingUnoPropertyNode oUnoPropertyNode = new SwingUnoPropertyNode(_aProperty);
400*cdf0e10cSrcweir         XConstantTypeDescription[] xPropertyAttributesTypeDescriptions = Introspector.getIntrospector().getFieldsOfConstantGroup("com.sun.star.beans.PropertyAttribute");
401*cdf0e10cSrcweir         String sDisplay = Introspector.getIntrospector().getConstantDisplayString((int) _aProperty.Attributes, xPropertyAttributesTypeDescriptions, "Attributes: ");
402*cdf0e10cSrcweir         oUnoPropertyNode.setLabel(sDisplay);
403*cdf0e10cSrcweir         return oUnoPropertyNode;
404*cdf0e10cSrcweir     }
405*cdf0e10cSrcweir 
406*cdf0e10cSrcweir 
407*cdf0e10cSrcweir     public XUnoPropertyNode addUnoPropertyNode(Object _oUnoObject, Property _aProperty){
408*cdf0e10cSrcweir         SwingUnoPropertyNode oUnoPropertyNode = new SwingUnoPropertyNode(_aProperty, _oUnoObject, null);
409*cdf0e10cSrcweir         oUnoPropertyNode.setPropertyNodeType(XUnoPropertyNode.nPROPERTYSETINFOTYPE);
410*cdf0e10cSrcweir         oUnoPropertyNode.setLabel(UnoPropertyNode.getStandardPropertyDescription(_aProperty, null));
411*cdf0e10cSrcweir         return oUnoPropertyNode;
412*cdf0e10cSrcweir     }
413*cdf0e10cSrcweir 
414*cdf0e10cSrcweir 
415*cdf0e10cSrcweir     public XUnoPropertyNode addUnoPropertyNode(Object _oUnoObject, Property _aProperty, Object _oUnoReturnObject){
416*cdf0e10cSrcweir         SwingUnoPropertyNode oUnoPropertyNode = new SwingUnoPropertyNode(_aProperty, _oUnoObject, _oUnoReturnObject);
417*cdf0e10cSrcweir         oUnoPropertyNode.setLabel(UnoPropertyNode.getStandardPropertyDescription(_aProperty, _oUnoReturnObject));
418*cdf0e10cSrcweir         return oUnoPropertyNode;
419*cdf0e10cSrcweir     }
420*cdf0e10cSrcweir 
421*cdf0e10cSrcweir 
422*cdf0e10cSrcweir     public XUnoPropertyNode addUnoPropertyNode(Object _oUnoObject, PropertyValue _aPropertyValue, Object _oReturnObject){
423*cdf0e10cSrcweir         SwingUnoPropertyNode oUnoPropertyNode = new SwingUnoPropertyNode(_aPropertyValue, _oUnoObject, _oReturnObject);
424*cdf0e10cSrcweir         oUnoPropertyNode.setLabel(UnoPropertyNode.getStandardPropertyValueDescription(_aPropertyValue));
425*cdf0e10cSrcweir         return oUnoPropertyNode;
426*cdf0e10cSrcweir     }
427*cdf0e10cSrcweir }
428