diff --git a/src/java/org/jivesoftware/MainWindow.java b/src/java/org/jivesoftware/MainWindow.java index 9b558545..70e14b00 100644 --- a/src/java/org/jivesoftware/MainWindow.java +++ b/src/java/org/jivesoftware/MainWindow.java @@ -114,7 +114,7 @@ public final class MainWindow extends JFrame implements ActionListener { this.setJMenuBar(mainWindowBar); this.getContentPane().add(topBar, BorderLayout.NORTH); - setTitle(title); + setTitle(title + " - " + SparkManager.getSessionManager().getUsername()); setIconImage(icon.getImage()); diff --git a/src/java/org/jivesoftware/spark/Workspace.java b/src/java/org/jivesoftware/spark/Workspace.java index 7a093fa2..9c86ddea 100644 --- a/src/java/org/jivesoftware/spark/Workspace.java +++ b/src/java/org/jivesoftware/spark/Workspace.java @@ -31,6 +31,7 @@ import org.jivesoftware.spark.ui.conferences.Conferences; import org.jivesoftware.spark.ui.status.StatusBar; import org.jivesoftware.spark.util.SwingWorker; import org.jivesoftware.spark.util.log.Log; +import org.jivesoftware.spark.component.tabbedPane.SparkTabbedPane; import org.jivesoftware.sparkimpl.plugin.manager.Enterprise; import org.jivesoftware.sparkimpl.plugin.transcripts.ChatTranscriptPlugin; @@ -70,7 +71,7 @@ import java.util.TimerTask; *
  • Retrieve the ContactList. */ public class Workspace extends JPanel implements PacketListener { - private JTabbedPane workspacePane; + private SparkTabbedPane workspacePane; private final StatusBar statusBox = new StatusBar(); private ContactList contactList; private Conferences conferences; @@ -132,7 +133,7 @@ public class Workspace extends JPanel implements PacketListener { }); // Initialize workspace pane, defaulting the tabs to the bottom. - workspacePane = new JTabbedPane(JTabbedPane.BOTTOM); + workspacePane = new SparkTabbedPane(JTabbedPane.BOTTOM); //workspacePane.setBoldActiveTab(true); //workspacePane.setHideOneTab(true); @@ -391,7 +392,7 @@ public class Workspace extends JPanel implements PacketListener { * * @return the workspace JideTabbedPane */ - public JTabbedPane getWorkspacePane() { + public SparkTabbedPane getWorkspacePane() { return workspacePane; } diff --git a/src/java/org/jivesoftware/spark/component/tabbedPane/SparkTab.java b/src/java/org/jivesoftware/spark/component/tabbedPane/SparkTab.java index 6f6e9ed6..9b3e8154 100644 --- a/src/java/org/jivesoftware/spark/component/tabbedPane/SparkTab.java +++ b/src/java/org/jivesoftware/spark/component/tabbedPane/SparkTab.java @@ -55,7 +55,7 @@ public class SparkTab extends TabPanel { add(iconLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 2, 3, 2), 0, 0)); // add text label - add(textLabel, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 2, 3, 2), 0, 0)); + add(textLabel, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(3, 2, 3, 5), 0, 0)); // Set fonts defaultFont = new Font("Dialog", Font.PLAIN, 11); @@ -64,7 +64,7 @@ public class SparkTab extends TabPanel { public void addComponent(Component component) { // add Component - add(component, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 2, 3, 2), 0, 0)); + add(component, new GridBagConstraints(3, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(3, 0, 3, 2), 0, 0)); } public void addPop(JComponent comp) { diff --git a/src/java/org/jivesoftware/spark/component/tabbedPane/SparkTabbedPane.java b/src/java/org/jivesoftware/spark/component/tabbedPane/SparkTabbedPane.java index 8ed3c4cb..76725069 100644 --- a/src/java/org/jivesoftware/spark/component/tabbedPane/SparkTabbedPane.java +++ b/src/java/org/jivesoftware/spark/component/tabbedPane/SparkTabbedPane.java @@ -14,12 +14,6 @@ import org.jivesoftware.resource.SparkRes; import org.jivesoftware.spark.component.RolloverButton; import org.jivesoftware.spark.util.ModelUtil; -import javax.swing.Icon; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; - import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; @@ -41,6 +35,13 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; + /** * */ @@ -61,16 +62,28 @@ public class SparkTabbedPane extends JPanel implements MouseListener { private Map framesMap = new HashMap(); + private int tabPlacement = JTabbedPane.TOP; + /** * Listeners */ private List listeners = new ArrayList(); public SparkTabbedPane() { + createUI(); + } + + public SparkTabbedPane(int placement) { + this.tabPlacement = placement; + + createUI(); + } + + private void createUI() { setLayout(new BorderLayout()); tabs = new JPanel(new - FlowLayout(FlowLayout.LEFT, 0, 0)) { + FlowLayout(FlowLayout.LEFT, 0, 0)) { public Dimension getPreferredSize() { if (getParent() == null) return getPreferredSize(); @@ -103,11 +116,18 @@ public class SparkTabbedPane extends JPanel implements MouseListener { final JPanel topPanel = new JPanel(); topPanel.setLayout(new GridBagLayout()); - topPanel.add(tabs, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(5, 0, 0, 0), 0, 0)); - topPanel.add(new JLabel(), new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 0, 0, 0), 0, 0)); + topPanel.add(new JLabel(), new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); topPanel.setOpaque(false); + // Add Tabs panel to top of panel. - add(topPanel, BorderLayout.NORTH); + if (tabPlacement == JTabbedPane.TOP) { + topPanel.add(tabs, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(2, 0, 0, 0), 0, 0)); + add(topPanel, BorderLayout.NORTH); + } + else { + topPanel.add(tabs, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 2, 0), 0, 0)); + add(topPanel, BorderLayout.SOUTH); + } // Create mainPanel mainPanel = new JPanel(new CardLayout()); @@ -119,7 +139,7 @@ public class SparkTabbedPane extends JPanel implements MouseListener { closeInactiveButtonIcon = SparkRes.getImageIcon(SparkRes.CLOSE_WHITE_X_IMAGE); closeActiveButtonIcon = SparkRes.getImageIcon(SparkRes.CLOSE_DARK_X_IMAGE); - setBackground(Color.white); + setOpaque(false); tabs.setOpaque(false); } @@ -132,6 +152,7 @@ public class SparkTabbedPane extends JPanel implements MouseListener { public SparkTab addTab(String text, Icon icon, final Component component) { final SparkTab tab = new SparkTab(icon, text); + tab.setTabPlacement(tabPlacement); //tabs.add(tab, new GridBagConstraints(tabs.getComponentCount(), 1, 1, 1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(2, 0, 0, 0), 0, 0)); tabs.add(tab); @@ -506,7 +527,7 @@ public class SparkTabbedPane extends JPanel implements MouseListener { public static void main(String args[]) { JFrame f = new JFrame(); - SparkTabbedPane pane = new SparkTabbedPane(); + SparkTabbedPane pane = new SparkTabbedPane(JTabbedPane.BOTTOM); pane.setCloseButtonEnabled(true); pane.setPopupAllowed(true); for (int i = 0; i < 3; i++) { diff --git a/src/java/org/jivesoftware/spark/component/tabbedPane/TabPanelUI.java b/src/java/org/jivesoftware/spark/component/tabbedPane/TabPanelUI.java index 0b9bedb2..6e4bdac4 100644 --- a/src/java/org/jivesoftware/spark/component/tabbedPane/TabPanelUI.java +++ b/src/java/org/jivesoftware/spark/component/tabbedPane/TabPanelUI.java @@ -15,12 +15,6 @@ import org.jivesoftware.Spark; import org.jivesoftware.resource.Default; import org.jivesoftware.spark.util.log.Log; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JTabbedPane; -import javax.swing.UIManager; -import javax.swing.plaf.basic.BasicPanelUI; - import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; @@ -31,9 +25,20 @@ import java.awt.Shape; import java.awt.geom.RoundRectangle2D; import java.util.StringTokenizer; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.UIManager; +import javax.swing.plaf.basic.BasicPanelUI; + +/** + * Represents a single instance of a Tab Paint Component. + * + * @author Derek DeMoro + */ public class TabPanelUI extends BasicPanelUI { - private Color backgroundColor1 = Color.white;//new Color(235, 247, 223); - private Color backgroundColor2 = Color.white;//new Color(214, 219, 191); + private Color backgroundColor1 = new Color(0,0,0,0); + private Color backgroundColor2 = new Color(0,0,0,0); private Color borderColor = new Color(86, 88, 72); private Color borderColorAlpha1 = new Color(86, 88, 72, 100); @@ -59,8 +64,8 @@ public class TabPanelUI extends BasicPanelUI { backgroundColor2 = getSelectedEndColor(); } else { - backgroundColor1 = Color.white; - backgroundColor2 = Color.white; + backgroundColor1 = new Color(0, 0, 0, 0); + backgroundColor2 = new Color(0, 0, 0, 0); } this.selected = selected; @@ -83,6 +88,7 @@ public class TabPanelUI extends BasicPanelUI { int y = vInsets.top; int arc = 8; + Shape vButtonShape = new RoundRectangle2D.Double((double)x, (double)y, (double)w, (double)h, (double)arc, (double)arc); Shape vOldClip = g.getClip(); @@ -96,22 +102,28 @@ public class TabPanelUI extends BasicPanelUI { GradientPaint vPaint = new GradientPaint(x, y, borderColor, x, y + h, borderHighlight); g2d.setPaint(vPaint); - if (selected) { - g2d.setColor(Color.lightGray); - g2d.drawRoundRect(x, y, w, h, arc, arc); - } - - g2d.clipRect(x, y, w + 1, h - arc / 4); - g2d.setColor(borderColorAlpha1); - - g2d.setClip(vOldClip); - g2d.setColor(borderColorAlpha2); - + // Handle custom actions. if (placement == JTabbedPane.TOP) { + if (selected) { + g2d.setColor(Color.lightGray); + g2d.drawRoundRect(x, y, w, h, arc, arc); + } + + g2d.clipRect(x, y, w + 1, h - arc / 4); + g2d.setColor(borderColorAlpha1); + + g2d.setClip(vOldClip); + g2d.setColor(borderColorAlpha2); + + g2d.setColor(backgroundColor2); g2d.fillRect(x, h - 5, w, h); } - + else { + // Make straight line. + g2d.setColor(backgroundColor2); + g2d.fillRect(x, y, w, 4); + } if (selected) { @@ -121,7 +133,6 @@ public class TabPanelUI extends BasicPanelUI { g2d.setColor(Color.lightGray); g2d.drawLine(w - 1, 4, w - 1, h - 4); } - } @@ -176,7 +187,7 @@ public class TabPanelUI extends BasicPanelUI { return color; } - public void setPlacement(int placement){ + public void setPlacement(int placement) { this.placement = placement; } } diff --git a/src/java/org/jivesoftware/spark/ui/ChatContainer.java b/src/java/org/jivesoftware/spark/ui/ChatContainer.java index a07e7624..0444b79d 100644 --- a/src/java/org/jivesoftware/spark/ui/ChatContainer.java +++ b/src/java/org/jivesoftware/spark/ui/ChatContainer.java @@ -64,7 +64,9 @@ import java.util.List; import java.util.Map; /** - * Should be subclassed to track all available ChatRooms. + * Contains all ChatRoom objects within Spark. + * + * @author Derek DeMoro */ public class ChatContainer extends SparkTabbedPane implements MessageListener, ChangeListener { /** @@ -113,6 +115,9 @@ public class ChatContainer extends SparkTabbedPane implements MessageListener, C addKeyNavigation(); this.setFocusable(false); + + setOpaque(true); + setBackground(Color.white); } /**