444 lines
17 KiB
Java
444 lines
17 KiB
Java
/* -*- 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: */
|