blob: c290924ca32e655faa6b1522f0364d45b80af5a8 [file] [log] [blame]
/**************************************************************
*
* 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);
}
}
}