aboutsummaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
authorYana Stamcheva <yana@jitsi.org>2008-09-10 20:44:05 +0000
committerYana Stamcheva <yana@jitsi.org>2008-09-10 20:44:05 +0000
commit0c40c5109ac460c2286e10acc1a7d28d11e6fd8b (patch)
tree611107128f3ddcabb3aeb09b06f6a27d128df783 /src/net
parent04d5a4c7e3fdc94f039808702c01910ffae42db7 (diff)
downloadjitsi-0c40c5109ac460c2286e10acc1a7d28d11e6fd8b.zip
jitsi-0c40c5109ac460c2286e10acc1a7d28d11e6fd8b.tar.gz
jitsi-0c40c5109ac460c2286e10acc1a7d28d11e6fd8b.tar.bz2
- Added some new color constants.
- Added set/getSize and set/getLocation methods to the UIService.
Diffstat (limited to 'src/net')
-rw-r--r--src/net/java/sip/communicator/impl/gui/UIServiceImpl.java43
-rwxr-xr-xsrc/net/java/sip/communicator/impl/gui/main/MainFrame.java179
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/call/MainCallPanel.java7
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java11
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/menus/AboutWindow.java168
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/menus/ExtendedQuickMenu.java587
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/menus/MoreButton.java199
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java3
-rw-r--r--src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java2
-rw-r--r--src/net/java/sip/communicator/impl/gui/utils/ConfigurationManager.java32
-rwxr-xr-xsrc/net/java/sip/communicator/impl/gui/utils/Constants.java8
-rw-r--r--src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java54
-rw-r--r--src/net/java/sip/communicator/service/gui/Container.java8
-rw-r--r--src/net/java/sip/communicator/service/gui/UIService.java34
14 files changed, 1037 insertions, 298 deletions
diff --git a/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java b/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
index 93d160f..c362f6d 100644
--- a/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
+++ b/src/net/java/sip/communicator/impl/gui/UIServiceImpl.java
@@ -220,6 +220,49 @@ public class UIServiceImpl
}
/**
+ * Locates the main application window to the new x and y coordinates.
+ *
+ * @param x The new x coordinate.
+ * @param y The new y coordinate.
+ */
+ public void setLocation(int x, int y)
+ {
+ mainFrame.setLocation(x, y);
+ }
+
+ /**
+ * Returns the current location of the main application window. The returned
+ * point is the top left corner of the window.
+ *
+ * @return The top left corner coordinates of the main application window.
+ */
+ public Point getLocation()
+ {
+ return mainFrame.getLocation();
+ }
+
+ /**
+ * Returns the size of the main application window.
+ *
+ * @return the size of the main application window.
+ */
+ public Dimension getSize()
+ {
+ return mainFrame.getSize();
+ }
+
+ /**
+ * Sets the size of the main application window.
+ *
+ * @param width The width of the window.
+ * @param height The height of the window.
+ */
+ public void setSize(int width, int height)
+ {
+ mainFrame.setSize(width, height);
+ }
+
+ /**
* Implements <code>minimize</code> in the UIService interface. Minimizes
* the main application window.
*
diff --git a/src/net/java/sip/communicator/impl/gui/main/MainFrame.java b/src/net/java/sip/communicator/impl/gui/main/MainFrame.java
index 6483a7b..b0f53ad 100755
--- a/src/net/java/sip/communicator/impl/gui/main/MainFrame.java
+++ b/src/net/java/sip/communicator/impl/gui/main/MainFrame.java
@@ -58,9 +58,9 @@ public class MainFrame
{
private Logger logger = Logger.getLogger(MainFrame.class.getName());
- private JPanel centerPanel = new JPanel(new BorderLayout());
+ private JPanel mainPanel = new JPanel(new BorderLayout());
- private JPanel mainPanel = new JPanel(new BorderLayout(0, 5));
+ private JPanel statusBarPanel = new JPanel(new BorderLayout());
private MainMenu menu;
@@ -89,6 +89,7 @@ public class MainFrame
private Hashtable nativePluginsTable = new Hashtable();
+ private JPanel pluginPanelNorth = new JPanel();
private JPanel pluginPanelSouth = new JPanel();
private JPanel pluginPanelWest = new JPanel();
private JPanel pluginPanelEast = new JPanel();
@@ -100,6 +101,11 @@ public class MainFrame
*/
public MainFrame()
{
+ if (!ConfigurationManager.isWindowDecorated())
+ {
+ this.setUndecorated(true);
+ }
+
this.chatWindowManager = new ChatWindowManager(this);
this.mainCallPanel = new MainCallPanel(this);
@@ -136,6 +142,12 @@ public class MainFrame
this.setTitle(applicationName);
+ this.setContentPane(new MainContentPane());
+
+ this.mainPanel.setBackground(new Color(
+ GuiActivator.getResources()
+ .getColor("mainWindowBackground")));
+
this.init();
this.initPluginComponents();
@@ -149,31 +161,38 @@ public class MainFrame
this.setKeybindingInput(KeybindingSet.Category.MAIN);
this.addKeybindingAction("main-rename", new RenameAction());
- this.mainPanel.setOpaque(false);
+ JPanel northPanel = new JPanel(new BorderLayout());
+ JPanel centerPanel = new JPanel(new BorderLayout());
+
+ northPanel.setOpaque(false);
+ centerPanel.setOpaque(false);
+ this.statusBarPanel.setOpaque(false);
this.contactListPanel.setOpaque(false);
- this.centerPanel.setOpaque(false);
this.mainCallPanel.setOpaque(false);
- this.centerPanel.add(contactListPanel, BorderLayout.CENTER);
- this.centerPanel.add(mainCallPanel, BorderLayout.SOUTH);
-
- this.mainPanel.add(accountStatusPanel, BorderLayout.NORTH);
- this.mainPanel.add(centerPanel, BorderLayout.CENTER);
+ JPanel menusPanel = new JPanel(new BorderLayout());
- JPanel menusPanel = new JPanel(new BorderLayout(0, 5));
-
- this.setJMenuBar(menu);
+ String osName = System.getProperty("os.name");
+ if (osName.startsWith("Mac"))
+ // this.setJMenuBar(menu);
+ // menusPanel.add(menu, BorderLayout.CENTER);
menusPanel.add(quickMenu, BorderLayout.SOUTH);
- JPanel northPanel = new JPanel(new BorderLayout());
-
menusPanel.setUI(new SIPCommOpaquePanelUI());
+
northPanel.add(new LogoBar(), BorderLayout.NORTH);
northPanel.add(menusPanel, BorderLayout.CENTER);
- this.getContentPane().add(northPanel, BorderLayout.NORTH);
+ centerPanel.add(accountStatusPanel, BorderLayout.NORTH);
+ centerPanel.add(contactListPanel, BorderLayout.CENTER);
+ centerPanel.add(mainCallPanel, BorderLayout.SOUTH);
+
+ this.mainPanel.add(northPanel, BorderLayout.NORTH);
+ this.mainPanel.add(centerPanel, BorderLayout.CENTER);
+
this.getContentPane().add(mainPanel, BorderLayout.CENTER);
+ this.getContentPane().add(statusBarPanel, BorderLayout.SOUTH);
}
/**
@@ -181,8 +200,10 @@ public class MainFrame
*/
private void initBounds()
{
- int width = GuiActivator.getResources().getSettingsInt("mainWindowWidth");
- int height = GuiActivator.getResources().getSettingsInt("mainWindowHeight");
+ int width
+ = GuiActivator.getResources().getSettingsInt("mainWindowWidth");
+ int height
+ = GuiActivator.getResources().getSettingsInt("mainWindowHeight");
this.setSize(width, height);
@@ -1097,24 +1118,29 @@ public class MainFrame
*/
private void initPluginComponents()
{
- pluginPanelEast.setLayout(
- new BoxLayout(pluginPanelEast, BoxLayout.Y_AXIS));
pluginPanelSouth.setLayout(
new BoxLayout(pluginPanelSouth, BoxLayout.Y_AXIS));
+ pluginPanelNorth.setLayout(
+ new BoxLayout(pluginPanelNorth, BoxLayout.Y_AXIS));
+ pluginPanelEast.setLayout(
+ new BoxLayout(pluginPanelEast, BoxLayout.Y_AXIS));
pluginPanelWest.setLayout(
new BoxLayout(pluginPanelWest, BoxLayout.Y_AXIS));
+ this.getContentPane().add(pluginPanelNorth, BorderLayout.NORTH);
this.getContentPane().add(pluginPanelEast, BorderLayout.EAST);
- this.getContentPane().add(pluginPanelSouth, BorderLayout.SOUTH);
this.getContentPane().add(pluginPanelWest, BorderLayout.WEST);
+ this.mainPanel.add(pluginPanelSouth, BorderLayout.SOUTH);
// Search for plugin components registered through the OSGI bundle
// context.
ServiceReference[] serRefs = null;
- String osgiFilter = "("
+ String osgiFilter = "(|("
+ Container.CONTAINER_ID
- + "="+Container.CONTAINER_MAIN_WINDOW.getID()+")";
+ + "="+Container.CONTAINER_MAIN_WINDOW.getID()+")"
+ + "(" + Container.CONTAINER_ID
+ + "="+Container.CONTAINER_STATUS_BAR.getID()+"))";
try
{
@@ -1147,8 +1173,9 @@ public class MainFrame
else
constraints = BorderLayout.SOUTH;
- this.addPluginComponent( (Component) c.getComponent(),
- constraints);
+ this.addPluginComponent((Component) c.getComponent(),
+ c.getContainer(),
+ constraints);
}
}
}
@@ -1165,7 +1192,9 @@ public class MainFrame
PluginComponent pluginComponent = event.getPluginComponent();
if (pluginComponent.getContainer()
- .equals(Container.CONTAINER_MAIN_WINDOW))
+ .equals(Container.CONTAINER_MAIN_WINDOW)
+ || pluginComponent.getContainer()
+ .equals(Container.CONTAINER_STATUS_BAR))
{
Object constraints = null;
@@ -1197,6 +1226,7 @@ public class MainFrame
{
this.addPluginComponent(
(Component) pluginComponent.getComponent(),
+ pluginComponent.getContainer(),
constraints);
}
}
@@ -1236,7 +1266,10 @@ public class MainFrame
{
public void run()
{
- removePluginComponent(c, finalConstraints);
+ removePluginComponent(
+ c,
+ pluginComponent.getContainer(),
+ finalConstraints);
getContentPane().repaint();
pack();
@@ -1248,6 +1281,7 @@ public class MainFrame
{
this.removePluginComponent(
(Component) pluginComponent.getComponent(),
+ pluginComponent.getContainer(),
constraints);
}
@@ -1337,7 +1371,9 @@ public class MainFrame
if (constraints == null)
constraints = BorderLayout.SOUTH;
- this.removePluginComponent(c, constraints);
+ this.removePluginComponent( c,
+ pluginComponent.getContainer(),
+ constraints);
this.getContentPane().repaint();
}
@@ -1364,7 +1400,7 @@ public class MainFrame
Component c = (Component) plugin.getComponent();
- this.addPluginComponent(c, constraints);
+ this.addPluginComponent(c, plugin.getContainer(), constraints);
this.nativePluginsTable.put(plugin, c);
}
@@ -1453,34 +1489,36 @@ public class MainFrame
* @param c the component to add
* @param constraints the constraints determining the container
*/
- private void addPluginComponent(Component c, Object constraints)
+ private void addPluginComponent(Component c,
+ Container container,
+ Object constraints)
{
- if (constraints.equals(BorderLayout.SOUTH))
- {
- if (pluginPanelSouth.getComponentCount() == 0)
- pluginPanelSouth.setBorder(
- BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
- pluginPanelSouth.add(c);
- pluginPanelSouth.repaint();
- }
- else if (constraints.equals(BorderLayout.WEST))
+ if (container.equals(Container.CONTAINER_MAIN_WINDOW))
{
- if (pluginPanelWest.getComponentCount() == 0)
- pluginPanelWest.setBorder(
- BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
- pluginPanelWest.add(c);
- pluginPanelSouth.repaint();
+ if (constraints.equals(BorderLayout.NORTH))
+ {
+ pluginPanelNorth.add(c);
+ pluginPanelNorth.repaint();
+ }
+ else if (constraints.equals(BorderLayout.SOUTH))
+ {
+ pluginPanelSouth.add(c);
+ pluginPanelSouth.repaint();
+ }
+ else if (constraints.equals(BorderLayout.WEST))
+ {
+ pluginPanelWest.add(c);
+ pluginPanelSouth.repaint();
+ }
+ else if (constraints.equals(BorderLayout.EAST))
+ {
+ pluginPanelEast.add(c);
+ pluginPanelSouth.repaint();
+ }
}
- else if (constraints.equals(BorderLayout.EAST))
+ else if (container.equals(Container.CONTAINER_STATUS_BAR))
{
- if (pluginPanelEast.getComponentCount() == 0)
- pluginPanelEast.setBorder(
- BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
- pluginPanelEast.add(c);
- pluginPanelSouth.repaint();
+ statusBarPanel.add(c);
}
this.getContentPane().repaint();
@@ -1493,14 +1531,25 @@ public class MainFrame
* @param c the component to remove
* @param constraints the constraints determining the container
*/
- private void removePluginComponent(Component c, Object constraints)
+ private void removePluginComponent( Component c,
+ Container container,
+ Object constraints)
{
- if (constraints.equals(BorderLayout.SOUTH))
- pluginPanelSouth.remove(c);
- else if (constraints.equals(BorderLayout.WEST))
- pluginPanelWest.remove(c);
- else if (constraints.equals(BorderLayout.EAST))
- pluginPanelEast.remove(c);
+ if (container.equals(Container.CONTAINER_MAIN_WINDOW))
+ {
+ if (constraints.equals(BorderLayout.NORTH))
+ pluginPanelNorth.remove(c);
+ else if (constraints.equals(BorderLayout.SOUTH))
+ pluginPanelSouth.remove(c);
+ else if (constraints.equals(BorderLayout.WEST))
+ pluginPanelWest.remove(c);
+ else if (constraints.equals(BorderLayout.EAST))
+ pluginPanelEast.remove(c);
+ }
+ else if (container.equals(Container.CONTAINER_STATUS_BAR))
+ {
+ this.statusBarPanel.remove(c);
+ }
}
/**
@@ -1511,4 +1560,16 @@ public class MainFrame
{
return accountStatusPanel;
}
+
+ private class MainContentPane extends JPanel
+ {
+ public MainContentPane()
+ {
+ super(new BorderLayout());
+
+ this.setBackground(new Color(
+ GuiActivator.getResources()
+ .getColor("desktopBackgroundColor")));
+ }
+ }
} \ No newline at end of file
diff --git a/src/net/java/sip/communicator/impl/gui/main/call/MainCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/MainCallPanel.java
index b9d7957..3b4d335 100644
--- a/src/net/java/sip/communicator/impl/gui/main/call/MainCallPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/call/MainCallPanel.java
@@ -96,13 +96,18 @@ public class MainCallPanel
callButton.setEnabled(false);
- this.add(comboPanel, BorderLayout.CENTER);
+ this.add(comboPanel, BorderLayout.NORTH);
callViaPanel.add(callViaLabel);
callViaPanel.add(accountSelectorBox);
buttonsPanel.add(callButton);
+ this.setOpaque(false);
+ comboPanel.setOpaque(false);
+ buttonsPanel.setOpaque(false);
+ phoneNumberCombo.setOpaque(false);
+
comboPanel.add(dialButton, BorderLayout.WEST);
comboPanel.add(phoneNumberCombo, BorderLayout.CENTER);
comboPanel.add(buttonsPanel, BorderLayout.EAST);
diff --git a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java
index 01a4e7f..bdcea9e 100644
--- a/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java
+++ b/src/net/java/sip/communicator/impl/gui/main/contactlist/ContactListCellRenderer.java
@@ -242,7 +242,14 @@ public class ContactListCellRenderer
if (!this.isLeaf)
{
- g2.setColor(Constants.CONTACT_LIST_GROUP_BG_COLOR);
+ GradientPaint p = new GradientPaint(this.getWidth()/2, 0,
+ Constants.CONTACT_LIST_GROUP_BG_COLOR,
+ this.getWidth()/2,
+ this.getHeight(),
+ Constants.CONTACT_LIST_GROUP_BG_GRADIENT_COLOR);
+
+ g2.setPaint(p);
+
g2.fillRoundRect(1, 1, this.getWidth(), this.getHeight() - 1, 7, 7);
}
else if (index%2 > 0)
@@ -316,4 +323,4 @@ public class ContactListCellRenderer
return toolTipText;
}
-}
+} \ No newline at end of file
diff --git a/src/net/java/sip/communicator/impl/gui/main/menus/AboutWindow.java b/src/net/java/sip/communicator/impl/gui/main/menus/AboutWindow.java
new file mode 100644
index 0000000..380e224
--- /dev/null
+++ b/src/net/java/sip/communicator/impl/gui/main/menus/AboutWindow.java
@@ -0,0 +1,168 @@
+package net.java.sip.communicator.impl.gui.main.menus;
+
+import java.awt.*;
+import java.awt.event.*;
+
+import javax.swing.*;
+
+import net.java.sip.communicator.impl.gui.*;
+import net.java.sip.communicator.impl.gui.i18n.*;
+import net.java.sip.communicator.impl.gui.utils.*;
+import net.java.sip.communicator.service.gui.*;
+
+public class AboutWindow
+ extends JDialog
+ implements ActionListener,
+ ExportedWindow
+{
+ private WindowBackground mainPanel = new WindowBackground();
+
+ private JLabel versionLabel = new JLabel(" "
+ + System.getProperty("sip-communicator.version"));
+
+ public AboutWindow()
+ {
+ this.setModal(false);
+ this.setResizable(false);
+
+ this.setTitle(
+ Messages.getI18NString("aboutWindowTitle",
+ new String[]{ GuiActivator.getResources()
+ .getSettingsString("applicationName")}).getText());
+
+ this.mainPanel.setLayout(null);
+
+ this.versionLabel.setFont(Constants.FONT.deriveFont(12));
+ this.versionLabel.setForeground(new Color(
+ GuiActivator.getResources().getColor("splashScreenTitleColor")));
+ this.versionLabel.setAlignmentX(Component.RIGHT_ALIGNMENT);
+
+ this.mainPanel.add(versionLabel);
+
+ Insets insets = mainPanel.getInsets();
+ versionLabel.setBounds(370 + insets.left, 307 + insets.top, 200, 20);
+
+ this.getContentPane().add(mainPanel);
+
+ // Close the splash screen on simple click or Esc.
+ this.getGlassPane().addMouseListener(new MouseAdapter()
+ {
+ public void mouseClicked(MouseEvent e)
+ {
+ AboutWindow.this.close(false);
+ }
+ });
+
+ this.getGlassPane().setVisible(true);
+
+ ActionMap amap = this.getRootPane().getActionMap();
+
+ amap.put("close", new CloseAction());
+
+ InputMap imap = this.getRootPane().getInputMap(
+ JComponent.WHEN_IN_FOCUSED_WINDOW);
+
+ imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "close");
+ }
+
+ protected void close(boolean isEscaped)
+ {
+ this.dispose();
+ }
+
+ /**
+ * The action invoked when user presses Escape key.
+ */
+ private class CloseAction extends AbstractAction
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ AboutWindow.this.close(true);
+ }
+ }
+
+ /**
+ * Constructs the window background in order to have a background image.
+ */
+ private class WindowBackground
+ extends JPanel
+ {
+ private Image bgImage;
+
+ public WindowBackground()
+ {
+ this.setOpaque(true);
+
+ bgImage = ImageLoader.getImage(
+ ImageLoader.ABOUT_WINDOW_BACKGROUND);
+
+ this.setPreferredSize(new Dimension(bgImage.getWidth(this),
+ bgImage.getHeight(this)));
+ }
+
+ protected void paintComponent(Graphics g)
+ {
+ super.paintComponent(g);
+
+ Graphics2D g2 = (Graphics2D) g;
+
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+
+ g2.drawImage(bgImage, 0, 0, null);
+ }
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ this.dispose();
+ }
+
+ /**
+ * Implements the <tt>ExportedWindow.getIdentifier()</tt> method.
+ */
+ public WindowID getIdentifier()
+ {
+ return ExportedWindow.ABOUT_WINDOW;
+ }
+
+ /**
+ * This dialog could not be minimized.
+ */
+ public void minimize()
+ {
+ }
+
+ /**
+ * This dialog could not be maximized.
+ */
+ public void maximize()
+ {
+ }
+
+ /**
+ * Implements the <tt>ExportedWindow.bringToFront()</tt> method. Brings
+ * this window to front.
+ */
+ public void bringToFront()
+ {
+ this.toFront();
+ }
+
+ public static void activateAntialiasing(Graphics g)
+ {
+ Graphics2D g2d = (Graphics2D) g;
+
+ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
+ }
+
+ /**
+ * The source of the window
+ * @return the source of the window
+ */
+ public Object getSource()
+ {
+ return this;
+ }
+}
diff --git a/src/net/java/sip/communicator/impl/gui/main/menus/ExtendedQuickMenu.java b/src/net/java/sip/communicator/impl/gui/main/menus/ExtendedQuickMenu.java
index 43d4321..48b0236 100644
--- a/src/net/java/sip/communicator/impl/gui/main/menus/ExtendedQuickMenu.java
+++ b/src/net/java/sip/communicator/impl/gui/main/menus/ExtendedQuickMenu.java
@@ -9,13 +9,12 @@ package net.java.sip.communicator.impl.gui.main.menus;
import java.awt.*;
import java.awt.event.*;
+import java.awt.image.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
-import org.osgi.framework.*;
-
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.customcontrols.*;
import net.java.sip.communicator.impl.gui.event.*;
@@ -23,6 +22,7 @@ import net.java.sip.communicator.impl.gui.i18n.*;
import net.java.sip.communicator.impl.gui.main.*;
import net.java.sip.communicator.impl.gui.main.contactlist.*;
import net.java.sip.communicator.impl.gui.main.contactlist.addcontact.*;
+import net.java.sip.communicator.impl.gui.main.contactlist.addgroup.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.contactlist.*;
import net.java.sip.communicator.service.gui.*;
@@ -30,6 +30,8 @@ import net.java.sip.communicator.service.gui.Container;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*;
+import org.osgi.framework.*;
+
/**
* The <tt>QuickMenu</tt> is the toolbar on the top of the main
* application window. It provides quick access to the "User info" window, the
@@ -43,7 +45,7 @@ import net.java.sip.communicator.util.*;
* @author Yana Stamcheva
*/
public class ExtendedQuickMenu
- extends SIPCommToolBar
+ extends JPanel
implements MouseListener,
PluginComponentListener,
ComponentListener,
@@ -51,32 +53,44 @@ public class ExtendedQuickMenu
{
private Logger logger = Logger.getLogger(QuickMenu.class.getName());
+ private SIPCommToolBar toolBar = new SIPCommToolBar();
+
+ BufferedImage backgroundImage
+ = ImageLoader.getImage(ImageLoader.TOOL_BAR_BACKGROUND);
+
+ Rectangle rectangle
+ = new Rectangle(0, 0,
+ backgroundImage.getWidth(null),
+ backgroundImage.getHeight(null));
+
+ TexturePaint texture = new TexturePaint(backgroundImage, rectangle);
+
private ToolBarButton infoButton = new ToolBarButton(
- Messages.getI18NString("info").getText(),
ImageLoader.getImage(ImageLoader.QUICK_MENU_INFO_ICON));
private ToolBarButton configureButton = new ToolBarButton(
- Messages.getI18NString("settings").getText(),
ImageLoader.getImage(ImageLoader.QUICK_MENU_CONFIGURE_ICON));
private ToolBarButton hideShowButton = new ToolBarButton(
- Messages.getI18NString("showOffline").getText(),
ImageLoader.getImage(ImageLoader.QUICK_MENU_SHOW_OFFLINE_ICON));
private ToolBarButton addButton = new ToolBarButton(
- Messages.getI18NString("add").getText(),
ImageLoader.getImage(ImageLoader.QUICK_MENU_ADD_ICON));
private ToolBarButton soundButton = new ToolBarButton(
- Messages.getI18NString("sound").getText(),
ImageLoader.getImage(ImageLoader.QUICK_MENU_SOUND_ON_ICON));
+ private ToolBarButton createGroupButton = new ToolBarButton(
+ ImageLoader.getImage(ImageLoader.QUICK_MENU_CREATE_GROUP_ICON));
+
private static int DEFAULT_BUTTON_HEIGHT
= GuiActivator.getResources().getSettingsInt("mainToolbarButtonHeight");
private static int DEFAULT_BUTTON_WIDTH
= GuiActivator.getResources().getSettingsInt("mainToolbarButtonWidth");
+ private MoreButton moreButton = new MoreButton();
+
private ExportedWindow configDialog;
private MainFrame mainFrame;
@@ -85,47 +99,59 @@ public class ExtendedQuickMenu
private Hashtable pluginsTable = new Hashtable();
+ private LinkedList components = new LinkedList();
+
/**
* Create an instance of the <tt>QuickMenu</tt>.
* @param mainFrame The parent <tt>MainFrame</tt> window.
*/
public ExtendedQuickMenu(MainFrame mainFrame)
{
+ super(new BorderLayout());
+
this.mainFrame = mainFrame;
- this.setRollover(true);
- this.setLayout(new FlowLayout(FlowLayout.LEFT, 2, 0));
+ this.toolBar.setOpaque(false);
+ this.toolBar.setRollover(true);
+ this.toolBar.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0));
- this.setFloatable(true);
+ this.toolBar.setFloatable(true);
- int buttonWidth = calculateButtonWidth();
+ this.setMinimumSize(new Dimension(650, 40));
+ this.setPreferredSize(new Dimension(650, 40));
this.infoButton.setPreferredSize(
- new Dimension(buttonWidth, DEFAULT_BUTTON_HEIGHT));
+ new Dimension(DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT));
this.configureButton.setPreferredSize(
- new Dimension(buttonWidth, DEFAULT_BUTTON_HEIGHT));
+ new Dimension(DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT));
this.hideShowButton.setPreferredSize(
- new Dimension(buttonWidth, DEFAULT_BUTTON_HEIGHT));
+ new Dimension(DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT));
this.addButton.setPreferredSize(
- new Dimension(buttonWidth, DEFAULT_BUTTON_HEIGHT));
+ new Dimension(DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT));
this.soundButton.setPreferredSize(
- new Dimension(buttonWidth, DEFAULT_BUTTON_HEIGHT));
+ new Dimension(DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT));
+ this.createGroupButton.setPreferredSize(
+ new Dimension(DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT));
this.infoButton.setToolTipText(
Messages.getI18NString("contactInfo").getText());
this.configureButton.setToolTipText(
- Messages.getI18NString("configure").getText());
+ Messages.getI18NString("settings").getText());
this.hideShowButton.setToolTipText(
Messages.getI18NString("hideOfflineContacts").getText());
this.addButton.setToolTipText(
Messages.getI18NString("addContact").getText());
this.soundButton.setToolTipText(
Messages.getI18NString("soundOnOff").getText());
+ this.createGroupButton.setToolTipText(
+ Messages.getI18NString("createGroup").getText());
this.updateMuteButton(
GuiActivator.getAudioNotifier().isMute());
this.init();
+
+ this.initPluginComponents();
}
/**
@@ -133,31 +159,38 @@ public class ExtendedQuickMenu
*/
private void init()
{
- this.add(addButton);
- this.add(configureButton);
- this.add(infoButton);
- this.add(hideShowButton);
- this.add(soundButton);
+ this.add(toolBar, BorderLayout.CENTER);
+
+ this.toolBar.add(addButton);
+ this.toolBar.add(createGroupButton);
+ this.toolBar.add(configureButton);
+ this.toolBar.add(hideShowButton);
+ this.toolBar.add(soundButton);
+
+ this.components.add(addButton);
+ this.components.add(createGroupButton);
+ this.components.add(configureButton);
+ this.components.add(hideShowButton);
+ this.components.add(soundButton);
this.addButton.setName("add");
this.configureButton.setName("config");
this.hideShowButton.setName("search");
- this.infoButton.setName("info");
this.soundButton.setName("sound");
+ this.createGroupButton.setName("createGroup");
this.addButton.addMouseListener(this);
this.configureButton.addMouseListener(this);
this.hideShowButton.addMouseListener(this);
- this.infoButton.addMouseListener(this);
this.soundButton.addMouseListener(this);
+ this.createGroupButton.addMouseListener(this);
this.addButton.addComponentListener(this);
this.configureButton.addComponentListener(this);
this.hideShowButton.addComponentListener(this);
this.infoButton.addComponentListener(this);
this.soundButton.addComponentListener(this);
-
- this.initPluginComponents();
+ this.createGroupButton.addComponentListener(this);
}
private void initPluginComponents()
@@ -191,6 +224,9 @@ public class ExtendedQuickMenu
Object selectedValue = mainFrame.getContactListPanel()
.getContactList().getSelectedValue();
+ if(component.getComponent() == null)
+ continue;
+
if(selectedValue instanceof MetaContact)
{
component.setCurrentContact((MetaContact)selectedValue);
@@ -201,154 +237,60 @@ public class ExtendedQuickMenu
.setCurrentContactGroup((MetaContactGroup)selectedValue);
}
- Component c = (Component)component.getComponent();
-
- this.pluginsTable.put(component, c);
- this.add(c);
+ Component c = (Component) component.getComponent();
- this.repaint();
+ if (c != null)
+ {
+ if (component.getPositionIndex() > -1)
+ {
+ int index = component.getPositionIndex();
+ this.toolBar.add(c, index);
+ this.components.add(index, c);
+ }
+ else
+ {
+ this.toolBar.add(c);
+ this.components.add(c);
+ }
+
+ this.pluginsTable.put(component, c);
+
+ this.repaint();
+ }
}
}
GuiActivator.getUIService().addPluginComponentListener(this);
}
- /**
- * Handles the <tt>ActionEvent</tt> triggered when user clicks on one of
- * the buttons in this toolbar.
- */
- public void mousePressed(MouseEvent e)
+
+ private class AddContactAction extends AbstractAction
{
- JLabel button = (JLabel) e.getSource();
- String buttonName = button.getName();
-
- if (buttonName.equals("add"))
+ public void actionPerformed(ActionEvent arg0)
{
AddContactWizard wizard = new AddContactWizard(mainFrame);
wizard.setVisible(true);
}
- else if (buttonName.equals("config"))
+ }
+
+ private class ConfigAction extends AbstractAction
+ {
+ public void actionPerformed(ActionEvent arg0)
{
configDialog = GuiActivator.getUIService()
.getExportedWindow(ExportedWindow.CONFIGURATION_WINDOW);
configDialog.setVisible(true);
}
- else if (buttonName.equals("search"))
- {
- ContactList contactList = mainFrame.getContactListPanel()
- .getContactList();
-
- ContactListModel listModel
- = (ContactListModel) contactList.getModel();
-
- Object selectedObject = null;
- int currentlySelectedIndex = contactList.getSelectedIndex();
- if(currentlySelectedIndex != -1)
- {
- selectedObject
- = listModel.getElementAt(currentlySelectedIndex);
- }
-
- if(ConfigurationManager.isShowOffline())
- {
- button.setText(
- "<html><center>"
- + Messages.getI18NString("showOffline").getText()
- + "</center></html>");
-
- button.setIcon(new ImageIcon(ImageLoader.getImage(
- ImageLoader.QUICK_MENU_SHOW_OFFLINE_ICON)));
-
- button.setToolTipText(Messages
- .getI18NString("showOfflineContacts").getText());
- }
- else
- {
- button.setText(
- "<html><center>"
- + Messages.getI18NString("hideOffline").getText()
- + "</center></html>");
-
- button.setIcon(new ImageIcon(ImageLoader.getImage(
- ImageLoader.QUICK_MENU_HIDE_OFFLINE_ICON)));
-
- button.setToolTipText(Messages
- .getI18NString("hideOfflineContacts").getText());
- }
-
- contactList.setShowOffline(!ConfigurationManager.isShowOffline());
-
- if (selectedObject != null)
- {
- if (selectedObject instanceof MetaContact)
- {
- contactList.setSelectedIndex(
- listModel.indexOf((MetaContact) selectedObject));
- }
- else
- {
- contactList.setSelectedIndex(
- listModel.indexOf(
- (MetaContactGroup) selectedObject));
- }
- }
- }
- else if (buttonName.equals("info"))
- {
- MetaContact selectedMetaContact =
- (MetaContact) mainFrame.getContactListPanel()
- .getContactList().getSelectedValue();
-
- if(selectedMetaContact != null)
- {
- OperationSetWebContactInfo wContactInfo = null;
-
- Iterator protocolContacts = selectedMetaContact.getContacts();
-
- while(protocolContacts.hasNext())
- {
- Contact protoContact = (Contact) protocolContacts.next();
-
- wContactInfo = mainFrame.getWebContactInfoOpSet(
- protoContact.getProtocolProvider());
-
- if(wContactInfo != null)
- break;
- }
-
- if(wContactInfo != null)
- {
- Contact defaultContact = selectedMetaContact
- .getDefaultContact();
-
- GuiActivator.getBrowserLauncher().openURL(
- wContactInfo.getWebContactInfo(defaultContact)
- .toString());
- }
- else
- {
- new ErrorDialog(mainFrame,
- Messages.getI18NString("warning").getText(),
- Messages.getI18NString("selectContactSupportingInfo")
- .getText(),
- ErrorDialog.WARNING).showDialog();
- }
- }
- }
- else if (buttonName.equals("sound"))
- {
- if(GuiActivator.getAudioNotifier().isMute())
- {
- updateMuteButton(false);
- GuiActivator.getAudioNotifier().setMute(false);
- }
- else
- {
- updateMuteButton(true);
- GuiActivator.getAudioNotifier().setMute(true);
- }
- }
+ }
+ /**
+ * Handles the <tt>ActionEvent</tt> triggered when user clicks on one of
+ * the buttons in this toolbar.
+ */
+ public void mousePressed(MouseEvent e)
+ {
+ ToolBarButton button = (ToolBarButton) e.getSource();
+ button.setMousePressed(true);
}
/**
@@ -365,20 +307,33 @@ public class ExtendedQuickMenu
.equals(Container.CONTAINER_MAIN_TOOL_BAR))
return;
- Object constraints = UIServiceImpl
- .getBorderLayoutConstraintsFromContainer(
- pluginComponent.getConstraints());
+ int position = pluginComponent.getPositionIndex();
- Component c = (Component)pluginComponent.getComponent();
+ Component c = (Component) pluginComponent.getComponent();
- if (constraints != null)
- this.add(c, constraints);
+ if (c == null)
+ return;
+
+ if (position > -1)
+ {
+ this.toolBar.add(c, position);
+ components.add(position, c);
+ }
else
- this.add(c);
+ {
+ this.toolBar.add(c);
+ components.add(c);
+ }
+
+ pluginsTable.put(pluginComponent, c);
+
+ c.setPreferredSize(
+ new Dimension(DEFAULT_BUTTON_WIDTH, DEFAULT_BUTTON_HEIGHT));
+ c.addComponentListener(this);
Object selectedValue = mainFrame.getContactListPanel()
.getContactList().getSelectedValue();
-
+
if(selectedValue instanceof MetaContact)
{
pluginComponent
@@ -409,7 +364,9 @@ public class ExtendedQuickMenu
return;
this.pluginsTable.remove(c);
- this.remove((Component) c.getComponent());
+ this.components.remove(c);
+
+ this.toolBar.remove((Component) c.getComponent());
}
public void componentHidden(ComponentEvent e)
@@ -421,29 +378,39 @@ public class ExtendedQuickMenu
*/
public void componentMoved(ComponentEvent e)
{
- int compCount = this.getComponentCount();
+ int compCount = this.components.size();
- int biggestY = 0;
+ int maxWidth = this.toolBar.getWidth();
+
+ int width = 0;
for (int i = 0; i < compCount; i ++)
{
- Component c = this.getComponent(i);
-
- if(c instanceof JButton)
+ JComponent c = (JComponent) this.components.get(i);
+
+ width += c.getWidth() + 10;
+
+ if (width < maxWidth)
+ {
+ moreButton.removeMenuItem(c);
+ }
+ else
{
- if(c.getY() > biggestY)
- biggestY = c.getY();
+ moreButton.addMenuItem(c);
}
}
-
- this.setPreferredSize(
- new Dimension(this.getWidth(), biggestY + DEFAULT_BUTTON_HEIGHT));
-
- ((JPanel)this.getParent()).revalidate();
- ((JPanel)this.getParent()).repaint();
+
+ if (moreButton.getItemsCount() > 0)
+ this.add(moreButton, BorderLayout.EAST);
+ else
+ this.remove(moreButton);
+
+ this.revalidate();
+ this.repaint();
}
public void componentResized(ComponentEvent e)
- {}
+ {
+ }
public void componentShown(ComponentEvent e)
{}
@@ -486,16 +453,6 @@ public class ExtendedQuickMenu
ImageLoader.QUICK_MENU_SOUND_OFF_ICON)));
}
- public void paintComponent(Graphics g)
- {
- super.paintComponent(g);
-
- Image backgroundImage
- = ImageLoader.getImage(ImageLoader.TOOL_BAR_BACKGROUND);
-
- g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(), null);
- }
-
private class ToolBarButton
extends JLabel
{
@@ -503,11 +460,11 @@ public class ExtendedQuickMenu
private boolean isMouseOver = false;
- public ToolBarButton(String text, Image iconImage)
+ private boolean isMousePressed = false;
+
+ public ToolBarButton(Image iconImage)
{
- super( "<html><center>" + text + "</center></html>",
- new ImageIcon(iconImage),
- JLabel.CENTER);
+ super(new ImageIcon(iconImage));
this.setFont(getFont().deriveFont(Font.BOLD, 10f));
this.setForeground(new Color(
@@ -523,26 +480,209 @@ public class ExtendedQuickMenu
this.repaint();
}
+ public void setMousePressed(boolean isMousePressed)
+ {
+ this.isMousePressed = isMousePressed;
+ this.repaint();
+ }
+
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
AntialiasingManager.activateAntialiasing(g2);
- super.paintComponent(g2);
+ Color color = null;
- g2.setStroke(new BasicStroke(1.5f));
+ if(isMouseOver)
+ {
+ color = new Color(
+ GuiActivator.getResources()
+ .getColor("toolbarRolloverBackground"));
+
+ g2.setColor(color);
- g2.setColor(new Color(0x646464));
+ g2.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 2, 8, 8);
+ }
+
+ if (isMousePressed)
+ {
+ color = new Color(
+ GuiActivator.getResources().getColor("toolbarBackground"));
- if (isMouseOver)
- g.drawRoundRect(0, 0, this.getWidth() - 1,
- this.getHeight() - 3, 5, 5);
+ g2.setColor(new Color( color.getRed(),
+ color.getGreen(),
+ color.getBlue(),
+ 100));
+
+ g2.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 2, 8, 8);
+ }
+
+ super.paintComponent(g2);
+ }
+
+ public Action getAction()
+ {
+ return null;
}
}
public void mouseClicked(MouseEvent e)
{
+ JLabel button = (JLabel) e.getSource();
+ String buttonName = button.getName();
+
+ if (buttonName.equals("add"))
+ {
+ Action a = new AddContactAction();
+ a.putValue(Action.NAME, button.getToolTipText());
+ a.actionPerformed(null);
+ }
+ else if (buttonName.equals("config"))
+ {
+ configDialog = GuiActivator.getUIService()
+ .getExportedWindow(ExportedWindow.CONFIGURATION_WINDOW);
+
+ configDialog.setVisible(true);
+ }
+ else if (buttonName.equals("search"))
+ {
+ ContactList contactList = mainFrame.getContactListPanel()
+ .getContactList();
+
+ ContactListModel listModel
+ = (ContactListModel) contactList.getModel();
+
+ Object selectedObject = null;
+ int currentlySelectedIndex = contactList.getSelectedIndex();
+ if(currentlySelectedIndex != -1)
+ {
+ selectedObject
+ = listModel.getElementAt(currentlySelectedIndex);
+ }
+
+ if(ConfigurationManager.isShowOffline())
+ {
+ button.setText(
+ "<html><center>"
+ + Messages.getI18NString("showOffline").getText()
+ + "</center></html>");
+
+ button.setIcon(new ImageIcon(ImageLoader.getImage(
+ ImageLoader.QUICK_MENU_SHOW_OFFLINE_ICON)));
+
+ button.setToolTipText(Messages
+ .getI18NString("showOfflineContacts").getText());
+ }
+ else
+ {
+ button.setText(
+ "<html><center>"
+ + Messages.getI18NString("hideOffline").getText()
+ + "</center></html>");
+
+ button.setIcon(new ImageIcon(ImageLoader.getImage(
+ ImageLoader.QUICK_MENU_HIDE_OFFLINE_ICON)));
+
+ button.setToolTipText(Messages
+ .getI18NString("hideOfflineContacts").getText());
+ }
+
+ contactList.setShowOffline(!ConfigurationManager.isShowOffline());
+
+ if (selectedObject != null)
+ {
+ if (selectedObject instanceof MetaContact)
+ {
+ contactList.setSelectedIndex(
+ listModel.indexOf((MetaContact) selectedObject));
+ }
+ else
+ {
+ contactList.setSelectedIndex(
+ listModel.indexOf(
+ (MetaContactGroup) selectedObject));
+ }
+ }
+ }
+ else if (buttonName.equals("info"))
+ {
+ Object selectedValue = mainFrame.getContactListPanel()
+ .getContactList().getSelectedValue();
+
+ if (selectedValue == null
+ || !(selectedValue instanceof MetaContact))
+ {
+ AboutWindow aboutWindow = new AboutWindow();
+
+ aboutWindow.pack();
+
+ aboutWindow.setLocation(
+ Toolkit.getDefaultToolkit().getScreenSize().width / 2
+ - aboutWindow.getWidth() / 2,
+ Toolkit.getDefaultToolkit().getScreenSize().height / 2
+ - aboutWindow.getHeight() / 2);
+
+ aboutWindow.setVisible(true);
+ }
+ else
+ {
+ MetaContact selectedMetaContact =
+ (MetaContact) selectedValue;
+
+ OperationSetWebContactInfo wContactInfo = null;
+
+ Iterator protocolContacts = selectedMetaContact.getContacts();
+
+ while(protocolContacts.hasNext())
+ {
+ Contact protoContact = (Contact) protocolContacts.next();
+
+ wContactInfo = mainFrame.getWebContactInfoOpSet(
+ protoContact.getProtocolProvider());
+
+ if(wContactInfo != null)
+ break;
+ }
+
+ if(wContactInfo != null)
+ {
+ Contact defaultContact = selectedMetaContact
+ .getDefaultContact();
+
+ GuiActivator.getBrowserLauncher().openURL(
+ wContactInfo.getWebContactInfo(defaultContact)
+ .toString());
+ }
+ else
+ {
+ new ErrorDialog(mainFrame,
+ Messages.getI18NString("warning").getText(),
+ Messages.getI18NString("selectContactSupportingInfo")
+ .getText(),
+ ErrorDialog.WARNING).showDialog();
+ }
+ }
+ }
+ else if (buttonName.equals("sound"))
+ {
+ if(GuiActivator.getAudioNotifier().isMute())
+ {
+ updateMuteButton(false);
+ GuiActivator.getAudioNotifier().setMute(false);
+ }
+ else
+ {
+ updateMuteButton(true);
+ GuiActivator.getAudioNotifier().setMute(true);
+ }
+ }
+ else if (buttonName.equals("createGroup"))
+ {
+ CreateGroupDialog dialog = new CreateGroupDialog(mainFrame);
+
+ dialog.setVisible(true);
+ }
}
public void mouseEntered(MouseEvent e)
@@ -559,46 +699,27 @@ public class ExtendedQuickMenu
public void mouseReleased(MouseEvent e)
{
+ ToolBarButton button = (ToolBarButton) e.getSource();
+ button.setMousePressed(false);
}
- private int calculateButtonWidth()
+ public void paintComponent(Graphics g)
{
- int width = DEFAULT_BUTTON_WIDTH;
-
- FontMetrics fontMetrics
- = infoButton.getFontMetrics(infoButton.getFont());
-
- int textWidth = fontMetrics.stringWidth(
- Messages.getI18NString("info").getText());
-
- if (textWidth > width)
- width = textWidth;
-
- textWidth = fontMetrics.stringWidth(
- Messages.getI18NString("settings").getText());
-
- if (textWidth > width)
- width = textWidth;
-
- textWidth = fontMetrics.stringWidth(
- Messages.getI18NString("showOffline").getText());
-
- if (textWidth > width)
- width = textWidth;
+ super.paintComponent(g);
- textWidth = fontMetrics.stringWidth(
- Messages.getI18NString("add").getText());
+ if (backgroundImage != null)
+ {
+ Graphics2D g2 = (Graphics2D) g;
- if (textWidth > width)
- width = textWidth;
+ g2.setPaint(texture);
- textWidth = fontMetrics.stringWidth(
- Messages.getI18NString("sound").getText());
+ g2.fillRect(0, 2, this.getWidth(), this.getHeight() - 2);
- if (textWidth > width)
- width = textWidth;
+ g2.setColor(new Color(
+ GuiActivator.getResources()
+ .getColor("desktopBackgroundColor")));
- // Return the width by
- return width + 5;
+ g2.drawRect(0, this.getHeight() - 2, this.getWidth(), 2);
+ }
}
} \ No newline at end of file
diff --git a/src/net/java/sip/communicator/impl/gui/main/menus/MoreButton.java b/src/net/java/sip/communicator/impl/gui/main/menus/MoreButton.java
new file mode 100644
index 0000000..5c809ca
--- /dev/null
+++ b/src/net/java/sip/communicator/impl/gui/main/menus/MoreButton.java
@@ -0,0 +1,199 @@
+/*
+ * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package net.java.sip.communicator.impl.gui.main.menus;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.util.*;
+
+import javax.swing.*;
+
+import net.java.sip.communicator.impl.gui.i18n.*;
+import net.java.sip.communicator.impl.gui.utils.*;
+import net.java.sip.communicator.service.contactlist.*;
+import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.gui.Container;
+
+public class MoreButton
+ extends JLabel
+ implements PluginComponent,
+ MouseListener,
+ FocusListener
+{
+ private Image iconImage;
+
+ private boolean isMouseOver = false;
+
+ private JPopupMenu menu = new JPopupMenu();
+
+ private Hashtable menuItemsTable = new Hashtable();
+
+ public MoreButton()
+ {
+ super(new ImageIcon(ImageLoader.getImage(ImageLoader.MORE_BUTTON)),
+ JLabel.CENTER);
+
+ this.setVerticalTextPosition(SwingConstants.BOTTOM);
+ this.setHorizontalTextPosition(SwingConstants.CENTER);
+
+ this.setToolTipText(Messages.getI18NString("more").getText());
+
+ this.addMouseListener(this);
+
+ this.addFocusListener(this);
+ }
+
+ public Object getComponent()
+ {
+ return this;
+ }
+
+ public String getConstraints()
+ {
+ return null;
+ }
+
+ public Container getContainer()
+ {
+ return Container.CONTAINER_MAIN_TOOL_BAR;
+ }
+
+ public String getName()
+ {
+ return this.getText();
+ }
+
+ public void setMouseOver(boolean isMouseOver)
+ {
+ this.isMouseOver = isMouseOver;
+ this.repaint();
+ }
+
+ public void setCurrentContact(MetaContact metaContact)
+ {
+ }
+
+ public void setCurrentContactGroup(MetaContactGroup metaGroup)
+ {
+ }
+
+ public void mouseClicked(MouseEvent e)
+ {
+ }
+
+ public void mouseEntered(MouseEvent e)
+ {
+ this.setMouseOver(true);
+ }
+
+ public void mouseExited(MouseEvent e)
+ {
+ this.setMouseOver(false);
+ }
+
+ public void mousePressed(MouseEvent e)
+ {
+ requestFocus();
+
+ if (!menu.isVisible())
+ {
+ menu.setLocation(
+ getLocationOnScreen().x,
+ getLocationOnScreen().y + getHeight());
+
+ menu.setVisible(true);
+ }
+ else
+ menu.setVisible(false);
+ }
+
+ public void mouseReleased(MouseEvent e)
+ {
+ }
+
+ /**
+ * Specifies the position of this component in the container, where it
+ * will be added.
+ * @return 0 to indicate the first position in the container.
+ */
+ public int getPositionIndex()
+ {
+ return -1;
+ }
+
+ public void focusGained(FocusEvent arg0)
+ {
+ }
+
+ public void focusLost(FocusEvent arg0)
+ {
+ menu.setVisible(false);
+ }
+
+ public void addMenuItem(final JComponent c)
+ {
+ String name = c.getToolTipText();
+
+ if (!this.containsItem(name))
+ {
+ JMenuItem item = new JMenuItem(name);
+ item.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ MouseEvent mouseEvent
+ = new MouseEvent(c,
+ MouseEvent.MOUSE_PRESSED,
+ System.currentTimeMillis(),
+ MouseEvent.BUTTON1,
+ c.getX(),
+ c.getY(),
+ 1,
+ false);
+
+ MouseListener[] listeners = c.getMouseListeners();
+
+ for (int i = 0; i < listeners.length; i++)
+ {
+ MouseListener l = listeners[i];
+ l.mousePressed(mouseEvent);
+ }
+ }
+ });
+
+ this.menu.add(item);
+ this.menuItemsTable.put(name, item);
+ }
+ }
+
+ public void removeMenuItem(JComponent c)
+ {
+ String name = c.getToolTipText();
+ Component item = (Component) this.menuItemsTable.get(name);
+
+ if (item != null)
+ {
+ this.menu.remove(item);
+ menuItemsTable.remove(name);
+ }
+ }
+
+ public int getItemsCount()
+ {
+ return menuItemsTable.size();
+ }
+
+ public boolean containsItem(String name)
+ {
+ return menuItemsTable.containsKey(name);
+ }
+
+ public boolean isNativeComponent()
+ {
+ return false;
+ }
+} \ No newline at end of file
diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java b/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java
index 5ab9c44..5956dd1 100644
--- a/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java
@@ -45,6 +45,7 @@ public class AccountStatusPanel
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+ this.setOpaque(false);
this.accountNameLabel.setOpaque(false);
this.rightPanel.setOpaque(false);
@@ -182,6 +183,8 @@ public class AccountStatusPanel
protected void paintComponent(Graphics g)
{
+ AntialiasingManager.activateAntialiasing(g);
+
super.paintComponent(g);
Color bgColor = new Color(
diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java b/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java
index a097037..0f78cf1 100644
--- a/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java
+++ b/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java
@@ -485,7 +485,7 @@ public class GlobalStatusSelectorBox
Iterator pProviders = mainFrame.getProtocolProviders();
boolean isProtocolHidden;
-
+System.out.println("PROTOCOL PROVIDERRRSSSSSSSSSSSSSSSSSSS ============" + pProviders.hasNext());
while (pProviders.hasNext())
{
ProtocolProviderService protocolProvider
diff --git a/src/net/java/sip/communicator/impl/gui/utils/ConfigurationManager.java b/src/net/java/sip/communicator/impl/gui/utils/ConfigurationManager.java
index cb5c6e1..b1bb003 100644
--- a/src/net/java/sip/communicator/impl/gui/utils/ConfigurationManager.java
+++ b/src/net/java/sip/communicator/impl/gui/utils/ConfigurationManager.java
@@ -50,6 +50,8 @@ public class ConfigurationManager
private static boolean isTransparentWindowEnabled;
+ private static boolean isWindowDecorated;
+
private static ConfigurationService configService
= GuiActivator.getConfigurationService();
@@ -265,6 +267,25 @@ public class ConfigurationManager
= new Integer(windowTransparencyString).intValue();
}
+ // Load the "isWindowDecorated" property.
+ String isWindowDecoratedProperty
+ = "net.java.sip.communicator.impl.gui.isWindowDecorated";
+
+ String isWindowDecoratedString
+ = configService.getString(isWindowDecoratedProperty);
+
+ if(isWindowDecoratedString == null)
+ isWindowDecoratedString =
+ GuiActivator.getResources().
+ getSettingsString(isWindowDecoratedProperty);
+
+ if(isWindowDecoratedString != null
+ && isWindowDecoratedString.length() > 0)
+ {
+ isWindowDecorated
+ = new Boolean(isWindowDecoratedString).booleanValue();
+ }
+
// Load the "lastContactParent" property.
lastContactParent = configService.getString(
"net.java.sip.communicator.impl.gui.addcontact.lastContactParent");
@@ -393,6 +414,17 @@ public class ConfigurationManager
}
/**
+ * Returns <code>true</code> if the "isWindowDecorated" property is
+ * true, otherwise - returns <code>false</code>..
+ * @return <code>true</code> if the "isWindowDecorated" property is
+ * true, otherwise - returns <code>false</code>.
+ */
+ public static boolean isWindowDecorated()
+ {
+ return isWindowDecorated;
+ }
+
+ /**
* Return the "sendMessageCommand" property that was saved previously
* through the <tt>ConfigurationService</tt>. Indicates to the user
* interface whether the default send message command is Enter or CTRL-Enter.
diff --git a/src/net/java/sip/communicator/impl/gui/utils/Constants.java b/src/net/java/sip/communicator/impl/gui/utils/Constants.java
index fb92005..0fde341 100755
--- a/src/net/java/sip/communicator/impl/gui/utils/Constants.java
+++ b/src/net/java/sip/communicator/impl/gui/utils/Constants.java
@@ -196,6 +196,14 @@ public class Constants
= new Color(GuiActivator.getResources()
.getColor("contactListGroupRowColor"));
+ /**
+ * The end color used to paint a gradient mouse over background of some
+ * components.
+ */
+ public static final Color CONTACT_LIST_GROUP_BG_GRADIENT_COLOR
+ = new Color(GuiActivator.getResources().
+ getColor("contactListGroupGradientColor"));
+
/*
* ======================================================================
* --------------------------- FONT CONSTANTS ---------------------------
diff --git a/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java b/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java
index 4e94794..a802cd0 100644
--- a/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java
+++ b/src/net/java/sip/communicator/impl/gui/utils/ImageLoader.java
@@ -56,6 +56,42 @@ public class ImageLoader {
= new ImageID("BUTTON_ROLLOVER");
/**
+ * The background image of a button.
+ */
+ public static final ImageID BUTTON_BG_LEFT
+ = new ImageID("BUTTON_BG_LEFT");
+
+ /**
+ * The background image of a button.
+ */
+ public static final ImageID BUTTON_BG_RIGHT
+ = new ImageID("BUTTON_BG_RIGHT");
+
+ /**
+ * The background image of a button.
+ */
+ public static final ImageID BUTTON_BG_MIDDLE
+ = new ImageID("BUTTON_BG_MIDDLE");
+
+ /**
+ * The background image of a button.
+ */
+ public static final ImageID BUTTON_ROLLOVER_BG_LEFT
+ = new ImageID("BUTTON_ROLLOVER_BG_LEFT");
+
+ /**
+ * The background image of a button.
+ */
+ public static final ImageID BUTTON_ROLLOVER_BG_RIGHT
+ = new ImageID("BUTTON_ROLLOVER_BG_RIGHT");
+
+ /**
+ * The background image of a button.
+ */
+ public static final ImageID BUTTON_ROLLOVER_BG_MIDDLE
+ = new ImageID("BUTTON_ROLLOVER_BG_MIDDLE");
+
+ /**
* The pressed toggle button background image.
*/
public static final ImageID TOGGLE_BUTTON_PRESSED
@@ -215,6 +251,12 @@ public class ImageLoader {
= new ImageID("MAIN_WINDOW_BACKGROUND");
/**
+ * The background of the main window and chat window.
+ */
+ public static final ImageID MORE_BUTTON
+ = new ImageID("MORE_BUTTON");
+
+ /**
* The icon on the "Add contact" button in the <tt>QuickMenu</tt>.
*/
public static final ImageID ACCOUNT_ICON
@@ -627,6 +669,18 @@ public class ImageLoader {
public static final ImageID WINDOW_TITLE_BAR_BG
= new ImageID("WINDOW_TITLE_BAR_BG");
+ /**
+ * Title bar background image.
+ */
+ public static final ImageID QUICK_MENU_ABOUT_ICON
+ = new ImageID("QUICK_MENU_ABOUT_ICON");
+
+ /**
+ * Title bar background image.
+ */
+ public static final ImageID QUICK_MENU_CREATE_GROUP_ICON
+ = new ImageID("QUICK_MENU_CREATE_GROUP_ICON");
+
// ///////////////////// Edit Text Toolbar icons //////////////////////////
/**
diff --git a/src/net/java/sip/communicator/service/gui/Container.java b/src/net/java/sip/communicator/service/gui/Container.java
index 30e9514..06485b0 100644
--- a/src/net/java/sip/communicator/service/gui/Container.java
+++ b/src/net/java/sip/communicator/service/gui/Container.java
@@ -131,6 +131,12 @@ public class Container
public static final Container CONTAINER_CALL_BUTTONS_PANEL
= new Container("CONTAINER_CALL_BUTTONS_PANEL");
+ /**
+ * Status bar container.
+ */
+ public static final Container CONTAINER_STATUS_BAR
+ = new Container("CONTAINER_STATUS_BAR");
+
/*
* Constraints
*/
@@ -214,4 +220,4 @@ public class Container
else
return false;
}
-}
+} \ No newline at end of file
diff --git a/src/net/java/sip/communicator/service/gui/UIService.java b/src/net/java/sip/communicator/service/gui/UIService.java
index be7cffd..264124d 100644
--- a/src/net/java/sip/communicator/service/gui/UIService.java
+++ b/src/net/java/sip/communicator/service/gui/UIService.java
@@ -6,6 +6,7 @@
*/
package net.java.sip.communicator.service.gui;
+import java.awt.*;
import java.util.*;
import net.java.sip.communicator.service.protocol.*;
@@ -68,6 +69,37 @@ public interface UIService
public void setVisible(boolean visible);
/**
+ * Returns the current location of the main application window. The returned
+ * point is the top left corner of the window.
+ *
+ * @return The top left corner coordinates of the main application window.
+ */
+ public Point getLocation();
+
+ /**
+ * Locates the main application window to the new x and y coordinates.
+ *
+ * @param x The new x coordinate.
+ * @param y The new y coordinate.
+ */
+ public void setLocation(int x, int y);
+
+ /**
+ * Returns the size of the main application window.
+ *
+ * @return the size of the main application window.
+ */
+ public Dimension getSize();
+
+ /**
+ * Sets the size of the main application window.
+ *
+ * @param width The width of the window.
+ * @param height The height of the window.
+ */
+ public void setSize(int width, int height);
+
+ /**
* Minimizes the main application window.
*/
public void minimize();
@@ -274,4 +306,4 @@ public interface UIService
* <code>false</code> otherwise.
*/
public boolean isContainerSupported(Container containderID);
-}
+} \ No newline at end of file