diff --git a/src/net/java/sip/communicator/impl/gui/i18n/messages.properties b/src/net/java/sip/communicator/impl/gui/i18n/messages.properties
index 619c34b16..70a269d4d 100644
--- a/src/net/java/sip/communicator/impl/gui/i18n/messages.properties
+++ b/src/net/java/sip/communicator/impl/gui/i18n/messages.properties
@@ -38,6 +38,7 @@ callList=Call list
cancel=&Cancel
chatRoomName=Chat room name
chatRoomNameInfo=In the field below enter the name of the chat room that you would like to create.
+chatRoomNotExist=The {0} room was not found in the {1} server. Please verify if the name you typed is correct.
chatRooms=Chat rooms
close=Cl&ose
closeChatAfterNewMsg=You have received a new message less than 2 seconds ago. Are you sure you want to close this chat?
@@ -79,6 +80,7 @@ general=General
generalError=General error
group=Group
groupName=Group name
+failedToJoinChannel=Failed to join channel {0}.
file=&File
finish=&Finish
first=First
@@ -92,6 +94,7 @@ identifier=Identifier
ignore=Ignore
insertSmiley=Insert smiley
invalidCall=Invalid call
+joinChatRoom=&Join chat room
last=Last
launchBrowserError=Error attempting to launch web browser.
launchOnStartUp=Launch on start up
@@ -177,6 +180,7 @@ sendMessage=&Send a message
sendVia=Send via
settings=&Settings
showCallPanel=Show call panel
+showChannelsList=Show channels list
showOfflineUsers=Hide/Show offline users
sipCommunicator=SIPCommunicator
soundOnOff=Turn sound on/off
diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsListRightButtonMenu.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomServerRightButtonMenu.java
similarity index 79%
rename from src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsListRightButtonMenu.java
rename to src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomServerRightButtonMenu.java
index 94f9737a6..93c73e2f4 100644
--- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsListRightButtonMenu.java
+++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomServerRightButtonMenu.java
@@ -20,6 +20,7 @@
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.gui.event.*;
+import net.java.sip.communicator.service.protocol.*;
/**
* The ChatRoomsListRightButtonMenu is the menu, opened when user clicks
@@ -28,7 +29,7 @@
*
* @author Yana Stamcheva
*/
-public class ChatRoomsListRightButtonMenu
+public class ChatRoomServerRightButtonMenu
extends JPopupMenu
implements ActionListener,
PluginComponentListener
@@ -36,27 +37,32 @@ public class ChatRoomsListRightButtonMenu
private I18NString createChatRoomString
= Messages.getI18NString("createChatRoom");
- private I18NString searchForChatRoomsString
- = Messages.getI18NString("searchForChatRooms");
+ private I18NString joinChannelString
+ = Messages.getI18NString("joinChatRoom");
private JMenuItem createChatRoomItem = new JMenuItem(
createChatRoomString.getText(),
new ImageIcon(ImageLoader.getImage(ImageLoader.CHAT_ROOM_16x16_ICON)));
- private JMenuItem searchForChatRoomsItem = new JMenuItem(
- searchForChatRoomsString.getText(),
+ private JMenuItem joinChannelItem = new JMenuItem(
+ joinChannelString.getText(),
new ImageIcon(ImageLoader.getImage(ImageLoader.SEARCH_ICON_16x16)));
private MainFrame mainFrame;
+
+ private ProtocolProviderService protocolProvider;
/**
* Creates an instance of ChatRoomsListRightButtonMenu.
*/
- public ChatRoomsListRightButtonMenu(MainFrame mainFrame)
+ public ChatRoomServerRightButtonMenu(MainFrame mainFrame,
+ ProtocolProviderService protocolProvider)
{
super();
this.mainFrame = mainFrame;
+
+ this.protocolProvider = protocolProvider;
this.setLocation(getLocation());
@@ -69,20 +75,20 @@ public ChatRoomsListRightButtonMenu(MainFrame mainFrame)
private void init()
{
this.add(createChatRoomItem);
- this.add(searchForChatRoomsItem);
+ this.add(joinChannelItem);
this.initPluginComponents();
this.createChatRoomItem.setName("createChatRoom");
- this.searchForChatRoomsItem.setName("searchForChatRooms");
+ this.joinChannelItem.setName("joinChatRoom");
this.createChatRoomItem
.setMnemonic(createChatRoomString.getMnemonic());
- this.searchForChatRoomsItem
- .setMnemonic(searchForChatRoomsString.getMnemonic());
+ this.joinChannelItem
+ .setMnemonic(joinChannelString.getMnemonic());
this.createChatRoomItem.addActionListener(this);
- this.searchForChatRoomsItem.addActionListener(this);
+ this.joinChannelItem.addActionListener(this);
}
/**
@@ -121,9 +127,13 @@ public void actionPerformed(ActionEvent e){
createChatRoomWizard.setVisible(true);
}
- else if (itemName.equals("searchForChatRooms"))
+ else if (itemName.equals("joinChatRoom"))
{
-
+ JoinChannelDialog joinChannelDialog
+ = new JoinChannelDialog(mainFrame, protocolProvider);
+
+ joinChannelDialog.pack();
+ joinChannelDialog.setVisible(true);
}
}
diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsList.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsList.java
index 8f1b408aa..2e9c5d892 100644
--- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsList.java
+++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsList.java
@@ -7,6 +7,7 @@
package net.java.sip.communicator.impl.gui.main.chatroomslist;
import java.awt.*;
+import java.awt.event.*;
import java.util.*;
import java.util.List;
@@ -25,7 +26,8 @@
*/
public class ChatRoomsList
extends JList
- implements ListSelectionListener
+ implements ListSelectionListener,
+ MouseListener
{
private Logger logger = Logger.getLogger(ChatRoomsList.class);
@@ -47,6 +49,8 @@ public ChatRoomsList(MainFrame mainFrame)
this.setModel(listModel);
this.setCellRenderer(new ChatRoomsListCellRenderer());
this.addListSelectionListener(this);
+
+ this.addMouseListener(this);
}
/**
@@ -124,6 +128,51 @@ public void valueChanged(ListSelectionEvent e)
ChatPanel chatPanel = chatWindowManager.getChatRoom(chatRoom);
chatWindowManager.openChat(chatPanel, true);
+ }
+ }
+
+ public void mouseClicked(MouseEvent e)
+ {}
+
+ public void mouseEntered(MouseEvent e)
+ {}
+
+ public void mouseExited(MouseEvent e)
+ {}
+
+ public void mousePressed(MouseEvent e)
+ {
+ // Select the contact under the right button click.
+ if ((e.getModifiers() & InputEvent.BUTTON2_MASK) != 0
+ || (e.getModifiers() & InputEvent.BUTTON3_MASK) != 0
+ || (e.isControlDown() && !e.isMetaDown()))
+ {
+ this.setSelectedIndex(locationToIndex(e.getPoint()));
+ }
+
+ Object selectedValue = this.getSelectedValue();
+
+ if(selectedValue instanceof ProtocolProviderService)
+ {
+ ProtocolProviderService pps
+ = (ProtocolProviderService) selectedValue;
+
+ if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0)
+ {
+ ChatRoomServerRightButtonMenu rightButtonMenu
+ = new ChatRoomServerRightButtonMenu(mainFrame, pps);
+
+ rightButtonMenu.setInvoker(this);
+
+ rightButtonMenu.setLocation(e.getX()
+ + mainFrame.getX() + 5, e.getY() + mainFrame.getY()
+ + 105);
+
+ rightButtonMenu.setVisible(true);
+ }
}
}
+
+ public void mouseReleased(MouseEvent e)
+ {}
}
diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsListPanel.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsListPanel.java
index 64c975f2c..67ae41d8b 100644
--- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsListPanel.java
+++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomsListPanel.java
@@ -29,7 +29,7 @@ public class ChatRoomsListPanel
private JPanel treePanel = new JPanel(new BorderLayout());
- private ChatRoomsListRightButtonMenu rightButtonMenu;
+ private ChatRoomServerRightButtonMenu rightButtonMenu;
/**
* Creates the scroll panel containing the chat rooms list.
@@ -45,25 +45,7 @@ public ChatRoomsListPanel(MainFrame frame)
this.treePanel.add(chatRoomsList, BorderLayout.NORTH);
this.treePanel.setBackground(Color.WHITE);
-
- this.treePanel.addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent e)
- {
- if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0)
- {
- rightButtonMenu = new ChatRoomsListRightButtonMenu(mainFrame);
-
- rightButtonMenu.setInvoker(treePanel);
-
- rightButtonMenu.setLocation(e.getX()
- + mainFrame.getX() + 5, e.getY() + mainFrame.getY()
- + 105);
-
- rightButtonMenu.setVisible(true);
- }
- }
- });
-
+
this.getViewport().add(treePanel);
this.setHorizontalScrollBarPolicy(
diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/JoinChannelDialog.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/JoinChannelDialog.java
new file mode 100644
index 000000000..b6311b012
--- /dev/null
+++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/JoinChannelDialog.java
@@ -0,0 +1,140 @@
+package net.java.sip.communicator.impl.gui.main.chatroomslist;
+
+import java.awt.*;
+import java.awt.event.*;
+
+import javax.swing.*;
+
+import net.java.sip.communicator.impl.gui.customcontrols.*;
+import net.java.sip.communicator.impl.gui.i18n.*;
+import net.java.sip.communicator.impl.gui.main.*;
+import net.java.sip.communicator.service.protocol.*;
+
+public class JoinChannelDialog
+ extends SIPCommDialog
+ implements ActionListener
+{
+ private JPanel mainPanel = new JPanel(new BorderLayout(5, 5));
+
+ private JPanel buttonsPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+
+ private JPanel centerPanel = new JPanel(new BorderLayout(5, 5));
+
+ private JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
+
+ private JButton channelListButton
+ = new JButton(Messages.getI18NString("showChannelsList").getText());
+
+ private JLabel channelLabel
+ = new JLabel(Messages.getI18NString("joinChatRoom").getText() + ":");
+
+ private JTextField channelTextField = new JTextField();
+
+ private JButton okButton
+ = new JButton(Messages.getI18NString("ok").getText());
+
+ private JButton cancelButton
+ = new JButton(Messages.getI18NString("cancel").getText());
+
+ private MainFrame mainFrame;
+
+ private ProtocolProviderService protocolProvider;
+
+ public JoinChannelDialog (MainFrame mainFrame,
+ ProtocolProviderService protocolProvider)
+ {
+ super(mainFrame);
+
+ this.setSize(400, 300);
+
+ this.mainFrame = mainFrame;
+
+ this.protocolProvider = protocolProvider;
+
+ this.getContentPane().add(mainPanel, BorderLayout.CENTER);
+
+ this.getContentPane().add(buttonsPanel, BorderLayout.SOUTH);
+
+ buttonsPanel.add(okButton);
+
+ buttonsPanel.add(cancelButton);
+
+ mainPanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
+
+ mainPanel.add(centerPanel, BorderLayout.NORTH);
+
+ mainPanel.add(southPanel, BorderLayout.CENTER);
+
+ centerPanel.add(channelLabel, BorderLayout.WEST);
+
+ centerPanel.add(channelTextField, BorderLayout.CENTER);
+
+ southPanel.add(channelListButton);
+
+ channelTextField.setText("#");
+
+ okButton.setName("ok");
+ cancelButton.setName("cancel");
+ channelListButton.setName("channelList");
+
+ okButton.addActionListener(this);
+ cancelButton.addActionListener(this);
+ channelListButton.addActionListener(this);
+ }
+
+ protected void close(boolean isEscaped)
+ {
+ }
+
+ public void actionPerformed(ActionEvent e)
+ {
+ JButton button = (JButton) e.getSource();
+ String buttonName = button.getName();
+
+ if(buttonName.equals("ok"))
+ {
+ OperationSetMultiUserChat multiChatOpSet
+ = (OperationSetMultiUserChat) protocolProvider.getOperationSet(
+ OperationSetMultiUserChat.class);
+
+ String chatRoomName = channelTextField.getText();
+
+ ChatRoom chatRoom = multiChatOpSet.findRoom(chatRoomName);
+
+ if(chatRoom != null)
+ {
+ try
+ {
+ chatRoom.join();
+ }
+ catch (OperationFailedException ex)
+ {
+ new ErrorDialog(mainFrame,
+ Messages.getI18NString("failedToJoinChannel",
+ new String[]{chatRoomName}).getText(),
+ ex,
+ Messages.getI18NString("error").getText())
+ .showDialog();
+ }
+ }
+ else
+ {
+ new ErrorDialog(mainFrame,
+ Messages.getI18NString("chatRoomNotExist",
+ new String[]{chatRoomName,
+ protocolProvider.getAccountID().getService()})
+ .getText(),
+ Messages.getI18NString("error").getText()).showDialog();
+ }
+ }
+ else if(buttonName.equals("cancel"))
+ {
+ this.dispose();
+ }
+ else if(buttonName.equals("channelList"))
+ {
+
+ }
+ }
+}
+