diff options
Diffstat (limited to 'odk/examples/java/Inspector/SwingDialogProvider.java')
-rw-r--r-- | odk/examples/java/Inspector/SwingDialogProvider.java | 444 |
1 files changed, 444 insertions, 0 deletions
diff --git a/odk/examples/java/Inspector/SwingDialogProvider.java b/odk/examples/java/Inspector/SwingDialogProvider.java new file mode 100644 index 000000000..e66bedce8 --- /dev/null +++ b/odk/examples/java/Inspector/SwingDialogProvider.java @@ -0,0 +1,444 @@ +/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * The Contents of this file are made available subject to the terms of + * the BSD license. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Sun Microsystems, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + *************************************************************************/ + +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.JDialog; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +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; + } + + + private void addMenuBar(JMenuBar _jMenuBar){ + getDialog().setJMenuBar(_jMenuBar); + } + + + private 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){ + String sInspectorPanelTitle = m_jTabbedPane1.getTitleAt(_nIndex); + oInspectorPane = m_oInspector.getInspectorPages().get(sInspectorPanelTitle); + } + return oInspectorPane; + } + + + private void removeTabPanes(){ + int nCount = m_jTabbedPane1.getTabCount(); + if (nCount > 0){ + for (int i = nCount-1; i >= 0; i--){ + removeTabPaneByIndex(i); + } + } + } + + private void removeSelectedTabPane(){ + int nIndex = getTabbedPane().getSelectedIndex(); + removeTabPaneByIndex(nIndex); + } + + + private class InspectorComponentAdapter extends ComponentAdapter{ + @Override + public void componentHidden(ComponentEvent e){ + m_jInspectorDialog.pack(); + m_jInspectorDialog.invalidate(); + + } + + @Override + public void componentShown(ComponentEvent e){ + m_jInspectorDialog.pack(); + m_jInspectorDialog.invalidate(); + } + } + + private class InspectorWindowAdapter extends WindowAdapter{ + @Override + public void windowClosed(WindowEvent e){ + removeTabPanes(); + m_oInspector.disposeHiddenDocuments(); + } + + @Override + 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.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); + } + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |