/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ import com.sun.star.uno.XComponentContext; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.ButtonGroup; import javax.swing.JCheckBoxMenuItem; import javax.swing.JDialog; import javax.swing.JEditorPane; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JRadioButtonMenuItem; import javax.swing.JTabbedPane; import javax.swing.KeyStroke; public class SwingDialogProvider implements XDialogProvider{ private JPopupMenu m_jPopupMenu = new JPopupMenu(); private XComponentContext m_xComponentContext; private Inspector._Inspector m_oInspector; private JDialog m_jInspectorDialog = new JDialog(); private JTabbedPane m_jTabbedPane1 = new JTabbedPane(); private Container cp; private JMenu jMnuOptions = new JMenu("Options"); private JRadioButtonMenuItem jJavaMenuItem = null; private JRadioButtonMenuItem jCPlusPlusMenuItem = null; private JRadioButtonMenuItem jBasicMenuItem = null; /** Creates a new instance of SwingPopupMentuProvider */ public SwingDialogProvider(Inspector._Inspector _oInspector, String _sTitle) { m_oInspector = _oInspector; m_xComponentContext = _oInspector.getXComponentContext(); insertMenus(); initializePopupMenu(); cp = m_jInspectorDialog.getContentPane(); cp.setLayout(new java.awt.BorderLayout(0, 10)); m_jTabbedPane1.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); m_jInspectorDialog.addWindowListener(new InspectorWindowAdapter()); m_jInspectorDialog.addComponentListener(new InspectorComponentAdapter()); m_jInspectorDialog.setTitle(_sTitle); m_jInspectorDialog.setLocation(100, 50); m_jInspectorDialog.getContentPane().add(m_jTabbedPane1); } public JDialog getDialog(){ return m_jInspectorDialog; } public void addMenuBar(JMenuBar _jMenuBar){ getDialog().setJMenuBar(_jMenuBar); } public void removeTabPaneByIndex(int _nIndex){ if (_nIndex > -1){ String sSelInspectorPanelTitle = m_jTabbedPane1.getTitleAt(_nIndex); m_jTabbedPane1.remove(_nIndex); m_oInspector.getInspectorPages().remove(sSelInspectorPanelTitle); } } public void selectInspectorPageByIndex(int nTabIndex){ m_jTabbedPane1.setSelectedIndex(nTabIndex); } public int getInspectorPageCount(){ return m_jTabbedPane1.getTabCount(); } public JTabbedPane getTabbedPane(){ return m_jTabbedPane1; } public InspectorPane getSelectedInspectorPage(){ int nIndex = m_jTabbedPane1.getSelectedIndex(); return getInspectorPage(nIndex); } public InspectorPane getInspectorPage(int _nIndex){ InspectorPane oInspectorPane = null; if (_nIndex > -1){ JPanel jPnlContainerInspectorPanel = (JPanel) m_jTabbedPane1.getComponentAt(_nIndex); String sInspectorPanelTitle = m_jTabbedPane1.getTitleAt(_nIndex); oInspectorPane = (InspectorPane) m_oInspector.getInspectorPages().get(sInspectorPanelTitle); } return oInspectorPane; } public void removeTabPanes(){ int nCount = m_jTabbedPane1.getTabCount(); if (nCount > 0){ for (int i = nCount-1; i >= 0; i--){ removeTabPaneByIndex(i); } } } public void removeSelectedTabPane(){ int nIndex = getTabbedPane().getSelectedIndex(); removeTabPaneByIndex(nIndex); } private class InspectorComponentAdapter extends ComponentAdapter{ public void componentHidden(ComponentEvent e){ m_jInspectorDialog.pack(); m_jInspectorDialog.invalidate(); } public void componentShown(ComponentEvent e){ m_jInspectorDialog.pack(); m_jInspectorDialog.invalidate(); } } private class InspectorWindowAdapter extends WindowAdapter{ public void windowClosed(WindowEvent e){ removeTabPanes(); m_oInspector.disposeHiddenDocuments(); } public void windowClosing(WindowEvent e){ removeTabPanes(); m_oInspector.disposeHiddenDocuments(); } } private void initializePopupMenu(){ m_jPopupMenu.add(getInspectMenuItem("Inspect")); m_jPopupMenu.add(getSourceCodeMenuItem(SADDTOSOURCECODE)); m_jPopupMenu.add(getInvokeMenuItem(SINVOKE)); m_jPopupMenu.addSeparator(); m_jPopupMenu.add(getHelpMenuItem("Help")); } private void addOpenDocumentMenu(JMenu _jMnuRoot){ ActionListener oActionListener = new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { String sTDocUrl = evt.getActionCommand(); m_oInspector.inspectOpenDocument(sTDocUrl); } }; String[] sTDocUrls = m_oInspector.getTDocUrls(); String[] sTDocTitles = m_oInspector.getTDocTitles(sTDocUrls); for (int i = 0; i < sTDocUrls.length; i++){ addSingleMenuItem(_jMnuRoot, sTDocTitles[i], sTDocUrls[i], oActionListener); } } private void addApplicationDocumentMenu(JMenu _jMnuRoot){ ActionListener oActionListener = new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { String sApplicationDocUrl = evt.getActionCommand(); m_oInspector.inspectOpenEmptyDocument(sApplicationDocUrl); } }; String[][] sApplUrls = m_oInspector.getApplicationUrls(); for (int i = 0; i < sApplUrls.length; i++){ addSingleMenuItem(_jMnuRoot, sApplUrls[i][1], sApplUrls[i][0], oActionListener); } } private void addSingleMenuItem(JMenu _jMnuOpenDocs, String _sTitle, String _sActionCommand, ActionListener _oActionListener){ javax.swing.JMenuItem jMnuItemOpenDoc = new javax.swing.JMenuItem(_sTitle); jMnuItemOpenDoc.setActionCommand(_sActionCommand); jMnuItemOpenDoc.addActionListener(_oActionListener); _jMnuOpenDocs.add(jMnuItemOpenDoc); } private void addHelpMenu(JMenuBar _jInspectMenuBar){ JMenu jMnuHelp = new JMenu("Help"); jMnuHelp.add(getHelpMenuItem("Idl-Help")); _jInspectMenuBar.add(jMnuHelp); } private JMenuItem getHelpMenuItem(String _sMenuTitle){ JMenuItem jMnuHelpItem = new JMenuItem(_sMenuTitle); jMnuHelpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0)); jMnuHelpItem.setMnemonic('H'); jMnuHelpItem.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { m_oInspector.openIdlFileforSelectedNode(); } }); return jMnuHelpItem; } private void addFileMenu(JMenuBar _jInspectMenuBar){ JMenu jMnuFile = new JMenu("File"); JMenuItem jMnuItemRemoveInspector = new JMenuItem("Remove"); jMnuItemRemoveInspector.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { removeSelectedTabPane(); } }); jMnuFile.add(jMnuItemRemoveInspector); JMenuItem jMnuItemExit = new JMenuItem("Exit"); jMnuItemExit.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { getDialog().dispose(); } }); jMnuFile.add(jMnuItemExit); _jInspectMenuBar.add(jMnuFile); } private JMenuItem getInspectMenuItem(String _sLabel){ JMenuItem jMnuSelectedObject = new JMenuItem(_sLabel); jMnuSelectedObject.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { m_oInspector.inspectSelectedNode(); } }); return jMnuSelectedObject; } private JMenuItem getSourceCodeMenuItem(String _sLabel){ JMenuItem jMnuSelectedObject = new JMenuItem(_sLabel); jMnuSelectedObject.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { m_oInspector.addSourceCodeOfSelectedNode(); } }); return jMnuSelectedObject; } private JMenuItem getInvokeMenuItem(String _sLabel){ JMenuItem jMnuSelectedObject = new JMenuItem(_sLabel); jMnuSelectedObject.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { m_oInspector.invokeSelectedMethod(); } }); return jMnuSelectedObject; } private void addInspectMenu(JMenuBar _jInspectMenuBar){ JMenu jMnuInspect = new JMenu("Inspect"); addApplicationDocumentMenu(jMnuInspect); jMnuInspect.addSeparator(); addGlobalServiceManagerMenu(jMnuInspect); jMnuInspect.addSeparator(); jMnuInspect.add(getInspectMenuItem("Selected Object")); jMnuInspect.addSeparator(); addOpenDocumentMenu(jMnuInspect); _jInspectMenuBar.add(jMnuInspect); } public int getLanguage(){ return XLanguageSourceCodeGenerator.nJAVA; } public void selectSourceCodeLanguage(int _nLanguage){ switch (_nLanguage){ case XLanguageSourceCodeGenerator.nJAVA: jJavaMenuItem.setSelected(true); break; case XLanguageSourceCodeGenerator.nCPLUSPLUS: jCPlusPlusMenuItem.setSelected(true); break; case XLanguageSourceCodeGenerator.nBASIC: jBasicMenuItem.setSelected(true); break; default: System.out.println("Warning: Sourcecode language is not defined!"); } } private JRadioButtonMenuItem addLanguageMenuItem(ButtonGroup _group, String _sLanguageTitle, boolean _bSelect, char _sMnemonic, final int _nLanguage){ JRadioButtonMenuItem jMenuItem = new JRadioButtonMenuItem(_sLanguageTitle, _bSelect); jMenuItem.setMnemonic(_sMnemonic); _group.add(jMenuItem); jMenuItem.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { m_oInspector.setSourceCodeLanguage(_nLanguage); } }); return jMenuItem; } public String getIDLPath(){ return this.m_oInspector.getIDLPath(); } private void addOptionsMenu(JMenuBar _jInspectMenuBar){ ButtonGroup oButtonGroup = new ButtonGroup(); jJavaMenuItem = addLanguageMenuItem(oButtonGroup, "Generate Java Sourcecode", true, 'J', XLanguageSourceCodeGenerator.nJAVA); jMnuOptions.add(jJavaMenuItem); jCPlusPlusMenuItem = addLanguageMenuItem(oButtonGroup, "Generate C++ Sourcecode", false, 'C', XLanguageSourceCodeGenerator.nCPLUSPLUS); jMnuOptions.add(jCPlusPlusMenuItem); jBasicMenuItem = addLanguageMenuItem(oButtonGroup, "Generate OpenOffice.org Basic Sourcecode", false, 'B', XLanguageSourceCodeGenerator.nBASIC); jMnuOptions.add(jBasicMenuItem); jMnuOptions.addSeparator(); JMenuItem jMenuItem = new JMenuItem("Path to SDK-Installation"); jMenuItem.setMnemonic('I'); jMenuItem.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { m_oInspector.assignSDKPath(); } }); jMnuOptions.add(jMenuItem); _jInspectMenuBar.add(jMnuOptions); } private void insertMenus(){ JMenuBar jMenuBar1 = new javax.swing.JMenuBar(); addFileMenu(jMenuBar1); addInspectMenu(jMenuBar1); JMenu jMnuEdit = new JMenu("Edit"); JMenu jMnuView = new JMenu("View"); addOptionsMenu(jMenuBar1); jMenuBar1.setFont(new java.awt.Font("Dialog", 0, 12)); jMenuBar1.add(jMnuEdit); jMenuBar1.add(jMnuView); addHelpMenu(jMenuBar1); addMenuBar(jMenuBar1); } private void addGlobalServiceManagerMenu(JMenu _jMnuRoot){ JMenuItem jMnuGlobalServiceManager = new JMenuItem("Global Service Manager"); jMnuGlobalServiceManager.addActionListener(new ActionListener(){ public void actionPerformed(java.awt.event.ActionEvent evt) { m_oInspector.inspect(m_xComponentContext.getServiceManager(), "Global ServiceManager"); } }); _jMnuRoot.add(jMnuGlobalServiceManager); } public void enablePopupMenuItem(String _sMenuTitle, boolean _bdoEnable){ Component[] oComponents = m_jPopupMenu.getComponents(); for (int i = 0; i < oComponents.length; i++){ if (oComponents[i] instanceof JMenuItem){ JMenuItem jMenuItem = (JMenuItem) oComponents[i]; if (jMenuItem.getText().equals(_sMenuTitle)){ jMenuItem.setEnabled(_bdoEnable); } } } } public void showPopUpMenu(Object _invoker, int x, int y) throws ClassCastException{ if (_invoker instanceof Component){ m_jPopupMenu.show((Component) _invoker, x, y); } } public void show(int _nPageIndex){ Dimension aDimension = m_jInspectorDialog.getSize(); selectInspectorPageByIndex(_nPageIndex); if (_nPageIndex > 0){ m_jInspectorDialog.setSize(aDimension); } else{ m_jInspectorDialog.pack(); } // m_jInspectorDialog.paint(m_jInspectorDialog.getGraphics()); m_jInspectorDialog.setVisible(true); } public void paint(){ m_jTabbedPane1.paintImmediately(m_jTabbedPane1.getBounds()); } public void addInspectorPage(String _sTitle, Object _oContainer) throws ClassCastException{ if (_oContainer instanceof Component){ m_jTabbedPane1.addTab(_sTitle, (Component) _oContainer); } } }