summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2005-09-27 18:30:49 +0000
committerBernard Normier <bernard@zeroc.com>2005-09-27 18:30:49 +0000
commit2aecb690b5956e3b94544ced51b4771a2b9b8fbf (patch)
treec88be03ab49487dde37699eaf169cd611809ec26
parentRemoved some unused defines (diff)
downloadice-2aecb690b5956e3b94544ced51b4771a2b9b8fbf.tar.bz2
ice-2aecb690b5956e3b94544ced51b4771a2b9b8fbf.tar.xz
ice-2aecb690b5956e3b94544ced51b4771a2b9b8fbf.zip
Added SimpleInternalFrame to remove dependency on one jar file
-rwxr-xr-xjava/src/IceGrid/MainPane.java2
-rwxr-xr-xjava/src/IceGrid/Model.java2
-rwxr-xr-xjava/src/IceGrid/SimpleInternalFrame.java466
-rwxr-xr-xjava/src/IceGrid/TreeNode/Adapter.java2
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBase.java2
-rwxr-xr-xjava/src/IceGrid/TreeNode/CommonBaseI.java2
-rwxr-xr-xjava/src/IceGrid/TreeNode/Server.java2
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServerTemplate.java2
-rwxr-xr-xjava/src/IceGrid/TreeNode/Service.java2
-rwxr-xr-xjava/src/IceGrid/TreeNode/ServiceTemplate.java2
10 files changed, 473 insertions, 11 deletions
diff --git a/java/src/IceGrid/MainPane.java b/java/src/IceGrid/MainPane.java
index 31fa9292365..8baf6fca85b 100755
--- a/java/src/IceGrid/MainPane.java
+++ b/java/src/IceGrid/MainPane.java
@@ -32,8 +32,6 @@ import com.jgoodies.looks.Options;
import com.jgoodies.looks.plastic.PlasticLookAndFeel;
import com.jgoodies.looks.windows.WindowsLookAndFeel;
import com.jgoodies.forms.factories.Borders;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
-
import javax.swing.border.EmptyBorder;
import javax.swing.plaf.SplitPaneUI;
diff --git a/java/src/IceGrid/Model.java b/java/src/IceGrid/Model.java
index ff0db7c5e75..3202791d68f 100755
--- a/java/src/IceGrid/Model.java
+++ b/java/src/IceGrid/Model.java
@@ -42,8 +42,6 @@ import com.jgoodies.looks.HeaderStyle;
import com.jgoodies.looks.BorderStyle;
import com.jgoodies.looks.plastic.PlasticLookAndFeel;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
-
import IceGrid.TreeNode.Application;
import IceGrid.TreeNode.CommonBase;
import IceGrid.TreeNode.Root;
diff --git a/java/src/IceGrid/SimpleInternalFrame.java b/java/src/IceGrid/SimpleInternalFrame.java
new file mode 100755
index 00000000000..f5ef7cee9c3
--- /dev/null
+++ b/java/src/IceGrid/SimpleInternalFrame.java
@@ -0,0 +1,466 @@
+/*
+ * Copyright (c) 2000-2005 JGoodies Karsten Lentzsch. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * o 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.
+ *
+ * o Neither the name of JGoodies Karsten Lentzsch 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.
+ */
+
+package IceGrid;
+
+import java.awt.*;
+
+import javax.swing.*;
+import javax.swing.border.AbstractBorder;
+
+import com.jgoodies.looks.LookUtils;
+
+/**
+ * A <code>JPanel</code> subclass that has a drop shadow border and
+ * that provides a header with icon, title and tool bar.<p>
+ *
+ * This class can be used to replace the <code>JInternalFrame</code>,
+ * for use outside of a <code>JDesktopPane</code>.
+ * The <code>SimpleInternalFrame</code> is less flexible but often
+ * more usable; it avoids overlapping windows and scales well
+ * up to IDE size.
+ * Several customers have reported that they and their clients feel
+ * much better with both the appearance and the UI feel.<p>
+ *
+ * The SimpleInternalFrame provides the following bound properties:
+ * <i>frameIcon, title, toolBar, content, selected.</i><p>
+ *
+ * By default the SimpleInternalFrame is in <i>selected</i> state.
+ * If you don't do anything, multiple simple internal frames will
+ * be displayed as selected.
+ *
+ * @author Karsten Lentzsch
+ * @version $Revision$
+ *
+ * @see javax.swing.JInternalFrame
+ * @see javax.swing.JDesktopPane
+ */
+
+public class SimpleInternalFrame extends JPanel {
+
+ private JLabel titleLabel;
+ private GradientPanel gradientPanel;
+ private JPanel headerPanel;
+ private boolean selected;
+
+
+ // Instance Creation ****************************************************
+
+ /**
+ * Constructs a SimpleInternalFrame with the specified title.
+ * The title is intended to be non-blank, or in other words
+ * should contain non-space characters.
+ *
+ * @param title the initial title
+ */
+ public SimpleInternalFrame(String title) {
+ this(null, title, null, null);
+ }
+
+
+ /**
+ * Constructs a SimpleInternalFrame with the specified
+ * icon, and title.
+ *
+ * @param icon the initial icon
+ * @param title the initial title
+ */
+ public SimpleInternalFrame(Icon icon, String title) {
+ this(icon, title, null, null);
+ }
+
+
+ /**
+ * Constructs a SimpleInternalFrame with the specified
+ * title, tool bar, and content panel.
+ *
+ * @param title the initial title
+ * @param bar the initial tool bar
+ * @param content the initial content pane
+ */
+ public SimpleInternalFrame(String title, JToolBar bar, JComponent content) {
+ this(null, title, bar, content);
+ }
+
+
+ /**
+ * Constructs a SimpleInternalFrame with the specified
+ * icon, title, tool bar, and content panel.
+ *
+ * @param icon the initial icon
+ * @param title the initial title
+ * @param bar the initial tool bar
+ * @param content the initial content pane
+ */
+ public SimpleInternalFrame(
+ Icon icon,
+ String title,
+ JToolBar bar,
+ JComponent content) {
+ super(new BorderLayout());
+ this.selected = false;
+ this.titleLabel = new JLabel(title, icon, SwingConstants.LEADING);
+ JPanel top = buildHeader(titleLabel, bar);
+
+ add(top, BorderLayout.NORTH);
+ if (content != null) {
+ setContent(content);
+ }
+ setBorder(new ShadowBorder());
+ setSelected(true);
+ updateHeader();
+ }
+
+
+ // Public API ***********************************************************
+
+ /**
+ * Returns the frame's icon.
+ *
+ * @return the frame's icon
+ */
+ public Icon getFrameIcon() {
+ return titleLabel.getIcon();
+ }
+
+
+ /**
+ * Sets a new frame icon.
+ *
+ * @param newIcon the icon to be set
+ */
+ public void setFrameIcon(Icon newIcon) {
+ Icon oldIcon = getFrameIcon();
+ titleLabel.setIcon(newIcon);
+ firePropertyChange("frameIcon", oldIcon, newIcon);
+ }
+
+
+ /**
+ * Returns the frame's title text.
+ * * @return String the current title text */
+ public String getTitle() {
+ return titleLabel.getText();
+ }
+
+
+ /**
+ * Sets a new title text.
+ * * @param newText the title text tp be set */
+ public void setTitle(String newText) {
+ String oldText = getTitle();
+ titleLabel.setText(newText);
+ firePropertyChange("title", oldText, newText);
+ }
+
+
+ /**
+ * Returns the current toolbar, null if none has been set before.
+ *
+ * @return the current toolbar - if any
+ */
+ public JToolBar getToolBar() {
+ return headerPanel.getComponentCount() > 1
+ ? (JToolBar) headerPanel.getComponent(1)
+ : null;
+ }
+
+
+ /**
+ * Sets a new tool bar in the header.
+ *
+ * @param newToolBar the tool bar to be set in the header
+ */
+ public void setToolBar(JToolBar newToolBar) {
+ JToolBar oldToolBar = getToolBar();
+ if (oldToolBar == newToolBar) {
+ return;
+ }
+ if (oldToolBar != null) {
+ headerPanel.remove(oldToolBar);
+ }
+ if (newToolBar != null) {
+ newToolBar.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
+ headerPanel.add(newToolBar, BorderLayout.EAST);
+ }
+ updateHeader();
+ firePropertyChange("toolBar", oldToolBar, newToolBar);
+ }
+
+
+ /**
+ * Returns the content - null, if none has been set.
+ * * @return the current content */
+ public Component getContent() {
+ return hasContent() ? getComponent(1) : null;
+ }
+
+
+ /**
+ * Sets a new panel content; replaces any existing content, if existing.
+ * * @param newContent the panel's new content */
+ public void setContent(Component newContent) {
+ Component oldContent = getContent();
+ if (hasContent()) {
+ remove(oldContent);
+ }
+ add(newContent, BorderLayout.CENTER);
+ firePropertyChange("content", oldContent, newContent);
+ }
+
+
+ /**
+ * Answers if the panel is currently selected (or in other words active)
+ * or not. In the selected state, the header background will be
+ * rendered differently.
+ *
+ * @return boolean a boolean, where true means the frame is selected
+ * (currently active) and false means it is not
+ */
+ public boolean isSelected() {
+ return selected;
+ }
+
+
+ /**
+ * This panel draws its title bar differently if it is selected,
+ * which may be used to indicate to the user that this panel
+ * has the focus, or should get more attention than other
+ * simple internal frames.
+ *
+ * @param newValue a boolean, where true means the frame is selected
+ * (currently active) and false means it is not
+ */
+ public void setSelected(boolean newValue) {
+ boolean oldValue = isSelected();
+ selected = newValue;
+ updateHeader();
+ firePropertyChange("selected", oldValue, newValue);
+ }
+
+
+ // Building *************************************************************
+
+ /**
+ * Creates and answers the header panel, that consists of:
+ * an icon, a title label, a tool bar, and a gradient background.
+ *
+ * @param label the label to paint the icon and text
+ * @param bar the panel's tool bar
+ * @return the panel's built header area
+ */
+ private JPanel buildHeader(JLabel label, JToolBar bar) {
+ gradientPanel =
+ new GradientPanel(new BorderLayout(), getHeaderBackground());
+ label.setOpaque(false);
+
+ gradientPanel.add(label, BorderLayout.WEST);
+ gradientPanel.setBorder(BorderFactory.createEmptyBorder(3, 4, 3, 1));
+
+ headerPanel = new JPanel(new BorderLayout());
+ headerPanel.add(gradientPanel, BorderLayout.CENTER);
+ setToolBar(bar);
+ headerPanel.setBorder(new RaisedHeaderBorder());
+ headerPanel.setOpaque(false);
+ return headerPanel;
+ }
+
+ /**
+ * Updates the header.
+ */
+ private void updateHeader() {
+ gradientPanel.setBackground(getHeaderBackground());
+ gradientPanel.setOpaque(isSelected());
+ titleLabel.setForeground(getTextForeground(isSelected()));
+ headerPanel.repaint();
+ }
+
+
+ /**
+ * Updates the UI. In addition to the superclass behavior, we need
+ * to update the header component.
+ */
+ public void updateUI() {
+ super.updateUI();
+ if (titleLabel != null) {
+ updateHeader();
+ }
+ }
+
+
+ // Helper Code **********************************************************
+
+ /**
+ * Checks and answers if the panel has a content component set.
+ *
+ * @return true if the panel has a content, false if it's empty
+ */
+ private boolean hasContent() {
+ return getComponentCount() > 1;
+ }
+ /**
+ * Determines and answers the header's text foreground color.
+ * Tries to lookup a special color from the L&amp;F.
+ * In case it is absent, it uses the standard internal frame forground.
+ *
+ * @param isSelected true to lookup the active color, false for the inactive
+ * @return the color of the foreground text
+ */
+ protected Color getTextForeground(boolean isSelected) {
+ Color c =
+ UIManager.getColor(
+ isSelected
+ ? "SimpleInternalFrame.activeTitleForeground"
+ : "SimpleInternalFrame.inactiveTitleForeground");
+ if (c != null) {
+ return c;
+ }
+ return UIManager.getColor(
+ isSelected
+ ? "InternalFrame.activeTitleForeground"
+ : "Label.foreground");
+
+ }
+
+ /**
+ * Determines and answers the header's background color.
+ * Tries to lookup a special color from the L&amp;F.
+ * In case it is absent, it uses the standard internal frame background.
+ *
+ * @return the color of the header's background
+ */
+ protected Color getHeaderBackground() {
+ Color c =
+ UIManager.getColor("SimpleInternalFrame.activeTitleBackground");
+ if (c != null)
+ return c;
+ if (LookUtils.IS_LAF_WINDOWS_XP_ENABLED)
+ c = UIManager.getColor("InternalFrame.activeTitleGradient");
+ return c != null
+ ? c
+ : UIManager.getColor("InternalFrame.activeTitleBackground");
+ }
+
+
+ // Helper Classes *******************************************************
+
+ // A custom border for the raised header pseudo 3D effect.
+ private static class RaisedHeaderBorder extends AbstractBorder {
+
+ private static final Insets INSETS = new Insets(1, 1, 1, 0);
+
+ public Insets getBorderInsets(Component c) { return INSETS; }
+
+ public void paintBorder(Component c, Graphics g,
+ int x, int y, int w, int h) {
+
+ g.translate(x, y);
+ g.setColor(UIManager.getColor("controlLtHighlight"));
+ g.fillRect(0, 0, w, 1);
+ g.fillRect(0, 1, 1, h-1);
+ g.setColor(UIManager.getColor("controlShadow"));
+ g.fillRect(0, h-1, w, 1);
+ g.translate(-x, -y);
+ }
+ }
+
+ // A custom border that has a shadow on the right and lower sides.
+ private static class ShadowBorder extends AbstractBorder {
+
+ private static final Insets INSETS = new Insets(1, 1, 3, 3);
+
+ public Insets getBorderInsets(Component c) { return INSETS; }
+
+ public void paintBorder(Component c, Graphics g,
+ int x, int y, int w, int h) {
+
+ Color shadow = UIManager.getColor("controlShadow");
+ if (shadow == null) {
+ shadow = Color.GRAY;
+ }
+ Color lightShadow = new Color(shadow.getRed(),
+ shadow.getGreen(),
+ shadow.getBlue(),
+ 170);
+ Color lighterShadow = new Color(shadow.getRed(),
+ shadow.getGreen(),
+ shadow.getBlue(),
+ 70);
+ g.translate(x, y);
+
+ g.setColor(shadow);
+ g.fillRect(0, 0, w - 3, 1);
+ g.fillRect(0, 0, 1, h - 3);
+ g.fillRect(w - 3, 1, 1, h - 3);
+ g.fillRect(1, h - 3, w - 3, 1);
+ // Shadow line 1
+ g.setColor(lightShadow);
+ g.fillRect(w - 3, 0, 1, 1);
+ g.fillRect(0, h - 3, 1, 1);
+ g.fillRect(w - 2, 1, 1, h - 3);
+ g.fillRect(1, h - 2, w - 3, 1);
+ // Shadow line2
+ g.setColor(lighterShadow);
+ g.fillRect(w - 2, 0, 1, 1);
+ g.fillRect(0, h - 2, 1, 1);
+ g.fillRect(w-2, h-2, 1, 1);
+ g.fillRect(w - 1, 1, 1, h - 2);
+ g.fillRect(1, h - 1, w - 2, 1);
+ g.translate(-x, -y);
+ }
+ }
+
+ // A panel with a horizontal gradient background.
+ private static class GradientPanel extends JPanel {
+
+ private GradientPanel(LayoutManager lm, Color background) {
+ super(lm);
+ setBackground(background);
+ }
+
+ public void paintComponent(Graphics g) {
+ super.paintComponent(g);
+ if (!isOpaque()) {
+ return;
+ }
+ Color control = UIManager.getColor("control");
+ int width = getWidth();
+ int height = getHeight();
+
+ Graphics2D g2 = (Graphics2D) g;
+ Paint storedPaint = g2.getPaint();
+ g2.setPaint(
+ new GradientPaint(0, 0, getBackground(), width, 0, control));
+ g2.fillRect(0, 0, width, height);
+ g2.setPaint(storedPaint);
+ }
+ }
+
+}
diff --git a/java/src/IceGrid/TreeNode/Adapter.java b/java/src/IceGrid/TreeNode/Adapter.java
index 9414c8644a9..30ff44ef4b6 100755
--- a/java/src/IceGrid/TreeNode/Adapter.java
+++ b/java/src/IceGrid/TreeNode/Adapter.java
@@ -12,7 +12,7 @@ import java.awt.Component;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import IceGrid.SimpleInternalFrame;
import IceGrid.AdapterDescriptor;
import IceGrid.Model;
diff --git a/java/src/IceGrid/TreeNode/CommonBase.java b/java/src/IceGrid/TreeNode/CommonBase.java
index eb674869c07..e38f7a2dd21 100755
--- a/java/src/IceGrid/TreeNode/CommonBase.java
+++ b/java/src/IceGrid/TreeNode/CommonBase.java
@@ -13,7 +13,7 @@ import javax.swing.tree.TreeCellRenderer;
import javax.swing.JPopupMenu;
import javax.swing.JPanel;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import IceGrid.SimpleInternalFrame;
import IceGrid.Model;
diff --git a/java/src/IceGrid/TreeNode/CommonBaseI.java b/java/src/IceGrid/TreeNode/CommonBaseI.java
index cbcb863ae34..8aa74eb6168 100755
--- a/java/src/IceGrid/TreeNode/CommonBaseI.java
+++ b/java/src/IceGrid/TreeNode/CommonBaseI.java
@@ -16,7 +16,7 @@ import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.tree.TreePath;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import IceGrid.SimpleInternalFrame;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.factories.DefaultComponentFactory;
diff --git a/java/src/IceGrid/TreeNode/Server.java b/java/src/IceGrid/TreeNode/Server.java
index da12f3e3414..ee115171219 100755
--- a/java/src/IceGrid/TreeNode/Server.java
+++ b/java/src/IceGrid/TreeNode/Server.java
@@ -36,7 +36,7 @@ import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.Sizes;
import com.jgoodies.forms.util.LayoutStyle;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import IceGrid.SimpleInternalFrame;
import IceGrid.IceBoxDescriptor;
import IceGrid.Model;
diff --git a/java/src/IceGrid/TreeNode/ServerTemplate.java b/java/src/IceGrid/TreeNode/ServerTemplate.java
index 5bafa173871..3a47251b329 100755
--- a/java/src/IceGrid/TreeNode/ServerTemplate.java
+++ b/java/src/IceGrid/TreeNode/ServerTemplate.java
@@ -29,7 +29,7 @@ import javax.swing.tree.DefaultTreeCellRenderer;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.factories.Borders;
import com.jgoodies.forms.layout.FormLayout;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import IceGrid.SimpleInternalFrame;
import IceGrid.IceBoxDescriptor;
import IceGrid.Model;
diff --git a/java/src/IceGrid/TreeNode/Service.java b/java/src/IceGrid/TreeNode/Service.java
index b35da57e1f2..3248b2edb4d 100755
--- a/java/src/IceGrid/TreeNode/Service.java
+++ b/java/src/IceGrid/TreeNode/Service.java
@@ -8,7 +8,7 @@
// **********************************************************************
package IceGrid.TreeNode;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import IceGrid.SimpleInternalFrame;
import IceGrid.Model;
import IceGrid.ServiceDescriptor;
diff --git a/java/src/IceGrid/TreeNode/ServiceTemplate.java b/java/src/IceGrid/TreeNode/ServiceTemplate.java
index f1b9e0ed419..dca60373a73 100755
--- a/java/src/IceGrid/TreeNode/ServiceTemplate.java
+++ b/java/src/IceGrid/TreeNode/ServiceTemplate.java
@@ -8,7 +8,7 @@
// **********************************************************************
package IceGrid.TreeNode;
-import com.jgoodies.uif_lite.panel.SimpleInternalFrame;
+import IceGrid.SimpleInternalFrame;
import IceGrid.ServiceDescriptor;
import IceGrid.TemplateDescriptor;