You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/06/06 11:13:26 UTC
svn commit: r412051 - in
/incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java: ./
org/apache/cayenne/swing/plugin/frame/
Author: aadamchik
Date: Tue Jun 6 02:13:25 2006
New Revision: 412051
URL: http://svn.apache.org/viewvc?rev=412051&view=rev
Log:
added support for toolbars and late assembl
Modified:
incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilder.java
incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilderExtension.java
incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameController.java
incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FramePlugin.java
incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin.properties
incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin_ru.properties
Modified: incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilder.java?rev=412051&r1=412050&r2=412051&view=diff
==============================================================================
--- incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilder.java (original)
+++ incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilder.java Tue Jun 6 02:13:25 2006
@@ -15,6 +15,7 @@
*/
package org.apache.cayenne.swing.plugin.frame;
+import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.io.InputStream;
@@ -23,11 +24,14 @@
import javax.swing.AbstractAction;
import javax.swing.Action;
+import javax.swing.ActionMap;
+import javax.swing.ImageIcon;
import javax.swing.JComponent;
-import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import org.apache.cayenne.swing.CayenneSwingException;
@@ -40,9 +44,47 @@
public class FrameBuilder {
protected FramePlugin framePlugin;
+ protected ActionMap actionMap;
+ protected JPanel toolbarsPanel;
+ protected JMenuBar menuBar;
public FrameBuilder(FramePlugin framePlugin) {
this.framePlugin = framePlugin;
+ this.actionMap = new ActionMap();
+ this.toolbarsPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+ this.menuBar = new JMenuBar();
+ }
+
+ public ActionMap getActionMap() {
+ return actionMap;
+ }
+
+ public FramePlugin getFramePlugin() {
+ return framePlugin;
+ }
+
+ public JMenuBar getMenuBar() {
+ return menuBar;
+ }
+
+ public JPanel getToolbarsPanel() {
+ return toolbarsPanel;
+ }
+
+ public void setActionMap(ActionMap actionMap) {
+ this.actionMap = actionMap;
+ }
+
+ public void setFramePlugin(FramePlugin framePlugin) {
+ this.framePlugin = framePlugin;
+ }
+
+ public void setMenuBar(JMenuBar menuBar) {
+ this.menuBar = menuBar;
+ }
+
+ public void setToolbarsPanel(JPanel toolbarsPanel) {
+ this.toolbarsPanel = toolbarsPanel;
}
public void addActions(Plugin plugin, String xmlPath) {
@@ -130,7 +172,16 @@
+ Action.LONG_DESCRIPTION
+ "$$"));
- framePlugin.getActionMap().put(key, action);
+ String iconPath = plugin
+ .replaceToken("$$" + key + '.' + Action.SMALL_ICON + "$$");
+
+ if (!Util.isEmptyString(iconPath) && !iconPath.startsWith("$$")) {
+ action.putValue(Action.SMALL_ICON, new ImageIcon(plugin
+ .getPluginClassLoader()
+ .getResource(iconPath)));
+ }
+
+ actionMap.put(key, action);
}
protected KeyStroke processAcceleratorKey(Element acceleratorXML) {
@@ -154,17 +205,75 @@
}
/**
- * Adds a menu contributed by plugin.
+ * Adds toolbars contributed by plugin.
*/
- public void addMenus(Plugin plugin, String xmlPath) {
- JFrame frame = framePlugin.getFrameController().getFrame();
+ public void addToolbars(Plugin plugin, String xmlPath) {
+
+ InputStream toolbarXML = plugin.getPluginClassLoader().getResourceAsStream(
+ xmlPath);
+ if (toolbarXML == null) {
+ throw new CayenneSwingException("No toolbar XML file found at " + xmlPath);
+ }
- JMenuBar menu = frame.getJMenuBar();
- if (menu == null) {
- menu = new JMenuBar();
- frame.setJMenuBar(menu);
+ Document doc;
+ try {
+ doc = XMLUtil.newBuilder().parse(toolbarXML);
+ }
+ catch (Exception e) {
+ throw new CayenneSwingException(
+ "Error parsing toolbar XML '" + xmlPath + "'",
+ e);
}
+ List children = XMLUtil.getChildren(doc.getDocumentElement(), "toolbar");
+ Iterator it = children.iterator();
+ while (it.hasNext()) {
+ JToolBar child = processToolbar(plugin, (Element) it.next());
+ if (child != null) {
+ getToolbarsPanel().add(child);
+ }
+ }
+ }
+
+ protected JToolBar processToolbar(Plugin plugin, Element toolbarXML) {
+
+ List children = XMLUtil.getChildren(toolbarXML, "button");
+ if (children.isEmpty()) {
+ return null;
+ }
+
+ JToolBar toolbar = new JToolBar();
+ Iterator it = children.iterator();
+ while (it.hasNext()) {
+ Element buttonXML = (Element) it.next();
+
+ if ("true".equalsIgnoreCase(buttonXML.getAttribute("separator"))) {
+ toolbar.addSeparator();
+ }
+ else {
+ Action action = actionMap.get(buttonXML.getAttribute("action"));
+
+ if (action != null) {
+ toolbar.add(action);
+ }
+ else {
+ plugin.getPluginEngine().getLogger().log(
+ LoggerLevel.WARNING,
+ "Invalid button: " + buttonXML,
+ null);
+ }
+
+ }
+ }
+
+ return toolbar;
+ }
+
+ /**
+ * Adds menus contributed by plugin.
+ */
+ public void addMenus(Plugin plugin, String xmlPath) {
+
InputStream menuXML = plugin.getPluginClassLoader().getResourceAsStream(xmlPath);
if (menuXML == null) {
throw new CayenneSwingException("No menu XML file found at " + xmlPath);
@@ -183,7 +292,7 @@
while (it.hasNext()) {
JComponent child = processMenu(plugin, (Element) it.next(), 1);
if (child != null) {
- menu.add(child);
+ menuBar.add(child);
}
}
}
@@ -199,7 +308,7 @@
List children = XMLUtil.getChildren(menuXML, "menu");
- Action action = framePlugin.getActionMap().get(menuXML.getAttribute("action"));
+ Action action = actionMap.get(menuXML.getAttribute("action"));
String key = menuXML.getAttribute("name");
JMenuItem menu = (children.isEmpty() && depth > 1)
Modified: incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilderExtension.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilderExtension.java?rev=412051&r1=412050&r2=412051&view=diff
==============================================================================
--- incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilderExtension.java (original)
+++ incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameBuilderExtension.java Tue Jun 6 02:13:25 2006
@@ -17,9 +17,11 @@
public interface FrameBuilderExtension {
- void initActions(FramePlugin plugin);
+ void initFrame(FramePlugin plugin);
- void initMenus(FramePlugin plugin);
+ void initActions(FrameBuilder builder);
- void initFrame(FramePlugin plugin);
+ void initMenus(FrameBuilder builder);
+
+ void initToolbars(FrameBuilder builder);
}
Modified: incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameController.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameController.java?rev=412051&r1=412050&r2=412051&view=diff
==============================================================================
--- incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameController.java (original)
+++ incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FrameController.java Tue Jun 6 02:13:25 2006
@@ -15,6 +15,7 @@
*/
package org.apache.cayenne.swing.plugin.frame;
+import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
@@ -60,6 +61,18 @@
*/
public void startup() {
+ FrameBuilder builder = framePlugin.getFrameBuilder();
+ if (builder.getMenuBar() != null) {
+ frame.setJMenuBar(builder.getMenuBar());
+ }
+
+ if (builder.getToolbarsPanel() != null
+ && builder.getToolbarsPanel().getComponents().length > 0) {
+ frame.getContentPane().add(
+ builder.getToolbarsPanel(),
+ BorderLayout.PAGE_START);
+ }
+
if (frame.getTitle() == null || frame.getTitle().trim().length() == 0) {
frame.setTitle(framePlugin.getPlugin().getName());
}
@@ -68,8 +81,11 @@
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
- framePlugin.getActionMap().get(FramePlugin.QUIT_ACTION).actionPerformed(
- new ActionEvent(this, 1, null));
+ framePlugin
+ .getFrameBuilder()
+ .getActionMap()
+ .get(FramePlugin.QUIT_ACTION)
+ .actionPerformed(new ActionEvent(this, 1, null));
}
});
Modified: incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FramePlugin.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FramePlugin.java?rev=412051&r1=412050&r2=412051&view=diff
==============================================================================
--- incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FramePlugin.java (original)
+++ incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/org/apache/cayenne/swing/plugin/frame/FramePlugin.java Tue Jun 6 02:13:25 2006
@@ -18,13 +18,11 @@
import java.util.Iterator;
import java.util.List;
-import javax.swing.ActionMap;
-
import org.platonos.pluginengine.Extension;
import org.platonos.pluginengine.PluginLifecycle;
/**
- * A plugin that starts an empty closeable frame intended for customization by extension.
+ * A plugin that starts an empty closeable frame intended for customization by extensions.
*
* @author Andrus Adamchik
*/
@@ -36,18 +34,17 @@
protected FrameBuilder frameBuilder;
protected FrameController frameController;
- protected ActionMap actionMap;
protected void start() {
frameBuilder = new FrameBuilder(this);
frameController = new FrameController(this);
- actionMap = new ActionMap();
List extensions = getExtensionPoint(FRAME_BUILDERS_EXT).getExtensions();
initActions(extensions);
initMenus(extensions);
+ initToolbars(extensions);
initFrame(extensions);
frameController.startup();
@@ -64,7 +61,7 @@
FrameBuilderExtension ext = (FrameBuilderExtension) extension
.getExtensionInstance();
- ext.initActions(this);
+ ext.initActions(frameBuilder);
}
}
@@ -76,11 +73,11 @@
FrameBuilderExtension ext = (FrameBuilderExtension) extension
.getExtensionInstance();
- ext.initMenus(this);
+ ext.initMenus(frameBuilder);
}
}
- protected void initFrame(List extensions) {
+ protected void initToolbars(List extensions) {
Iterator it = extensions.iterator();
while (it.hasNext()) {
@@ -88,16 +85,20 @@
FrameBuilderExtension ext = (FrameBuilderExtension) extension
.getExtensionInstance();
- ext.initFrame(this);
+ ext.initToolbars(frameBuilder);
}
}
- public ActionMap getActionMap() {
- return actionMap;
- }
+ protected void initFrame(List extensions) {
- public void setActionMap(ActionMap actionMap) {
- this.actionMap = actionMap;
+ Iterator it = extensions.iterator();
+ while (it.hasNext()) {
+ Extension extension = (Extension) it.next();
+ FrameBuilderExtension ext = (FrameBuilderExtension) extension
+ .getExtensionInstance();
+
+ ext.initFrame(this);
+ }
}
public FrameController getFrameController() {
Modified: incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin.properties
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin.properties?rev=412051&r1=412050&r2=412051&view=diff
==============================================================================
--- incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin.properties (original)
+++ incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin.properties Tue Jun 6 02:13:25 2006
@@ -1,2 +1,5 @@
-action.quit.name = Quit
+action.quit.longdescription = Close open project and quit the application
+action.quit.name = Quit
+action.quit.shortdescription = Close open project and quit the application
+action.quit.smallicon =
Modified: incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin_ru.properties
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin_ru.properties?rev=412051&r1=412050&r2=412051&view=diff
==============================================================================
--- incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin_ru.properties (original)
+++ incubator/cayenne/main/branches/PROTO-3.0/swing-plugin/src/main/java/plugin_ru.properties Tue Jun 6 02:13:25 2006
@@ -1,2 +1,5 @@
-action.quit.name = \u0412\u044B\u0445\u043E\u0434
+action.quit.longdescription = \u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0438 \u0432\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+action.quit.name = \u0412\u044B\u0445\u043E\u0434
+action.quit.shortdescription = \u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0442\u0435\u043A\u0443\u0449\u0438\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0438 \u0432\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B
+action.quit.smallicon =