diff options
Diffstat (limited to 'scripting/java/org/openoffice/netbeans/modules/office/nodes')
3 files changed, 456 insertions, 0 deletions
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/nodes/OfficeDocumentChildren.java b/scripting/java/org/openoffice/netbeans/modules/office/nodes/OfficeDocumentChildren.java new file mode 100644 index 000000000000..22a79eb69b32 --- /dev/null +++ b/scripting/java/org/openoffice/netbeans/modules/office/nodes/OfficeDocumentChildren.java @@ -0,0 +1,150 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: OfficeDocumentChildren.java,v $ + * $Revision: 1.7 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package org.openoffice.netbeans.modules.office.nodes; + +import java.io.IOException; +import java.util.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import org.openide.nodes.*; +import org.openide.actions.*; +import org.openide.util.actions.SystemAction; +import org.openide.util.HelpCtx; + +import org.openoffice.netbeans.modules.office.options.OfficeSettings; +import org.openoffice.netbeans.modules.office.utils.NagDialog; +import org.openoffice.netbeans.modules.office.actions.OfficeDocumentCookie; + +public class OfficeDocumentChildren extends Children.Keys + implements ChangeListener { + + private OfficeDocumentCookie document = null; + + public OfficeDocumentChildren(OfficeDocumentCookie cookie) { + document = cookie; + } + + private void refreshKeys() { + if (document == null) { + setKeys(Collections.EMPTY_SET); + return; + } + + Enumeration parcels = document.getParcels(); + if (parcels.hasMoreElements() != true) { + setKeys(Collections.EMPTY_SET); + return; + } + + ArrayList keys = new ArrayList(); + while (parcels.hasMoreElements()) { + String parcel = (String)parcels.nextElement(); + keys.add(parcel); + } + setKeys(keys); + } + + protected void addNotify() { + super.addNotify(); + document.addChangeListener(this); + refreshKeys(); + } + + protected void removeNotify() { + super.removeNotify(); + document.removeChangeListener(this); + setKeys(Collections.EMPTY_SET); + } + + protected Node[] createNodes(Object key) { + String name = (String)key; + return new Node[] {new ParcelNode(name)}; + } + + public void stateChanged(ChangeEvent e) { + refreshKeys(); + } + + private class ParcelNode extends AbstractNode { + private String name; + + public ParcelNode(String name) { + super(Children.LEAF); + this.name = name; + init(); + } + + private void init() { + setIconBase("/org/openoffice/netbeans/modules/office/resources/ParcelIcon"); + + setName(name); + setDisplayName(name.substring(name.lastIndexOf("/") + 1)); + setShortDescription(name); + } + + protected SystemAction[] createActions() { + return new SystemAction[] { + SystemAction.get(DeleteAction.class), + }; + } + + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + public boolean canDestroy() { + return true; + } + + public void destroy() throws IOException { + OfficeSettings settings = OfficeSettings.getDefault(); + String message = "If you already have this document open in " + + "Office, please close it before continuing. Click OK to " + + "delete this parcel."; + + if (settings.getWarnBeforeParcelDelete() == true) { + NagDialog warning = NagDialog.createConfirmationDialog( + message, "Show this message in future", true); + + boolean result = warning.show(); + + if (warning.getState() == false) + settings.setWarnBeforeParcelDelete(false); + + if (result == false) + return; + } + super.destroy(); + document.removeParcel(name); + } + } +} diff --git a/scripting/java/org/openoffice/netbeans/modules/office/nodes/ParcelDescriptorChildren.java b/scripting/java/org/openoffice/netbeans/modules/office/nodes/ParcelDescriptorChildren.java new file mode 100644 index 000000000000..84a4c571becd --- /dev/null +++ b/scripting/java/org/openoffice/netbeans/modules/office/nodes/ParcelDescriptorChildren.java @@ -0,0 +1,94 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: ParcelDescriptorChildren.java,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package org.openoffice.netbeans.modules.office.nodes; + +import java.util.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import org.w3c.dom.NodeList; +import org.w3c.dom.Element; + +import org.openide.nodes.*; +import org.openoffice.netbeans.modules.office.actions.ParcelDescriptorParserCookie; + +/** List of children of a containing node. + * Remember to document what your permitted keys are! + * + * @author tomaso + */ +public class ParcelDescriptorChildren extends Children.Keys implements ChangeListener { + + private ParcelDescriptorParserCookie parserCookie = null; + + public ParcelDescriptorChildren(ParcelDescriptorParserCookie cookie) { + parserCookie = cookie; + } + + private void refreshKeys() { + NodeList nl; + int len; + + if (parserCookie == null || + (nl = parserCookie.getScriptElements()) == null || + (len = nl.getLength()) == 0) { + setKeys(Collections.EMPTY_SET); + return; + } + + ArrayList keys = new ArrayList(len); + for (int i = 0; i < len; i++) + keys.add(nl.item(i)); + setKeys(keys); + } + + protected void addNotify() { + super.addNotify(); + parserCookie.addChangeListener(this); + refreshKeys(); + } + + protected void removeNotify() { + super.removeNotify(); + parserCookie.removeChangeListener(this); + setKeys(Collections.EMPTY_SET); + } + + protected Node[] createNodes(Object key) { + Element el = (Element)key; + System.out.println("element is: " + el); + return new Node[] {new ScriptNode(el)}; + } + + public void stateChanged(ChangeEvent e) { + refreshKeys(); + } +} diff --git a/scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java b/scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java new file mode 100644 index 000000000000..1676a326c492 --- /dev/null +++ b/scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java @@ -0,0 +1,212 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: ScriptNode.java,v $ + * $Revision: 1.4 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +package org.openoffice.netbeans.modules.office.nodes; + +import org.w3c.dom.*; + +import org.openide.actions.*; +import org.openide.nodes.*; +import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; +import org.openide.util.actions.SystemAction; + +/** A simple node with no children. + * + * @author tomaso + */ +public class ScriptNode extends AbstractNode { + private Element element; + private static final String LOGICAL_NAME = "logicalname"; + private static final String LANGUAGE_NAME = "languagename"; + + public ScriptNode(Element element) { + super(Children.LEAF); + this.element = element; + init(); + } + + private void init() { + setIconBase("/org/openoffice/netbeans/modules/office/resources/OfficeIcon"); + setDefaultAction(SystemAction.get(PropertiesAction.class)); + + NodeList nl = element.getElementsByTagName(LOGICAL_NAME); + Element nameElement = (Element)nl.item(0); + + String name = nameElement.getAttribute("value"); + setName(name); + setDisplayName(name.substring(name.lastIndexOf(".") + 1)); + setShortDescription(name); + } + + protected SystemAction[] createActions() { + return new SystemAction[] { + SystemAction.get(ToolsAction.class), + null, + SystemAction.get(PropertiesAction.class), + }; + } + + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + // RECOMMENDED - handle cloning specially (so as not to invoke the overhead of FilterNode): + /* + public Node cloneNode() { + // Try to pass in similar constructor params to what you originally got: + return new ScriptNode(); + } + */ + + protected Sheet createSheet() { + Sheet sheet = super.createSheet(); + Sheet.Set props = sheet.get(Sheet.PROPERTIES); + if (props == null) { + props = Sheet.createPropertiesSet(); + sheet.put(props); + } + + org.openide.nodes.Node.Property prop = null; + if ((prop = getStringProperty(LOGICAL_NAME)) != null) + props.put(prop); + + if ((prop = getStringProperty(LANGUAGE_NAME)) != null) + props.put(prop); + + return sheet; + } + + private org.openide.nodes.Node.Property getStringProperty(String name) { + NodeList nl = element.getElementsByTagName(name); + if(nl.getLength() != 1) + return null; + + Element nameElement = (Element)nl.item(0); + String value = nameElement.getAttribute("value"); + + return new StringProperty(this, name, value); + } + + private class StringProperty extends PropertySupport.ReadOnly { + private String name, value; + private ScriptNode sn; + + public StringProperty(ScriptNode sn, String name, String value) { + super(value, String.class, name, + "The name of the java language method for this script"); + this.sn = sn; + this.name = name; + this.value = value; + } + + public Object getValue() { + return value; + } + + /* public void setValue(Object obj) { + System.out.println("Setting value to: " + obj.toString()); + + if ((value instanceof String) != true) + throw new IllegalArgumentException(name + + " property must be of type String"); + + value = obj.toString(); + if (name.equals(LOGICAL_NAME)) { + sn.setName(value); + sn.setDisplayName(value.substring(value.lastIndexOf(".") + 1)); + sn.setShortDescription(value); + } + } */ + } + + /* public boolean canRename() { + return true; + } + + public void setName(String nue) { + // Update visible name, fire property changes: + super.setName(nue); + } */ + + /* + public boolean canDestroy() { + return true; + } + public void destroy() throws IOException { + // Actually remove the node itself and fire property changes: + super.destroy(); + // perform additional actions, i.e. delete underlying object + } */ + + // Handle copying and cutting specially: + /* + public boolean canCopy() { + return true; + } + public boolean canCut() { + return true; + } + public Transferable clipboardCopy() { + // Add to, do not replace, the default node copy flavor: + ExTransferable et = ExTransferable.create(super.clipboardCopy()); + et.put(new ExTransferable.Single(DataFlavor.stringFlavor) { + protected Object getData() { + return ScriptNode.this.getDisplayName(); + } + }); + return et; + } + public Transferable clipboardCut() { + // Add to, do not replace, the default node cut flavor: + ExTransferable et = ExTransferable.create(super.clipboardCut()); + // This is not so useful because this node will not be destroyed afterwards + // (it is up to the paste type to decide whether to remove the "original", + // and it is not safe to assume that getData will only be called once): + et.put(new ExTransferable.Single(DataFlavor.stringFlavor) { + protected Object getData() { + return ScriptNode.this.getDisplayName(); + } + }); + return et; + } + */ + + // Permit user to customize whole node at once (instead of per-property): + /* + public boolean hasCustomizer() { + return true; + } + public Component getCustomizer() { + return new MyCustomizingPanel(this); + } + */ + +} |