diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index c146b230d..85309c4e1 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -95,6 +95,8 @@ service.gui.CHAT_ROOM_USER_LEFT=has left {0} service.gui.CHAT_ROOM_USER_KICKED=has been kicked from {0} service.gui.CHAT_ROOM_USER_QUIT=has quit {0} service.gui.CHAT_ROOM_NAME=Chat room name +service.gui.ROOM_NAME=Room Name +service.gui.AUTOJOIN=Autojoin service.gui.CHAT_ROOM_NAME_INFO=In the field below enter the name of the chat room that you would like to create. service.gui.CHAT_ROOM_NOT_EXIST=The {0} room was not found in the {1} server. Please verify if the name you typed is correct. service.gui.CHAT_ROOM_NOT_CONNECTED=You need to be logged in in order to join the {0} chat room. @@ -271,6 +273,7 @@ service.gui.MSG_RECEIVED={0} wrote service.gui.MSG_SEND_CONNECTION_PROBLEM=You should be connected to be able to send messages. service.gui.MULTIPLE_LOGINS=You have logged in more than once with the same account. The following account: User name: {0}, Server name: {1} is currently disconnected. service.gui.MY_CHAT_ROOMS=Go to chat room... +service.gui.MY_CHAT_ROOMS_TITLE=Go to chat room service.gui.MUTE=Mute service.gui.NETWORK=Network service.gui.NETWORK_FAILURE=Network failure diff --git a/src/net/java/sip/communicator/impl/gui/main/account/NewAccountDialog.java b/src/net/java/sip/communicator/impl/gui/main/account/NewAccountDialog.java index 07aef4f48..5a5706a6d 100644 --- a/src/net/java/sip/communicator/impl/gui/main/account/NewAccountDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/account/NewAccountDialog.java @@ -440,7 +440,7 @@ public static void showNewAccountDialog() */ protected void close(boolean isEscaped) { - newAccountDialog = null; + dispose(); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/SendSmsDialog.java b/src/net/java/sip/communicator/impl/gui/main/chat/SendSmsDialog.java index b71e41c9c..8bc247210 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/SendSmsDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/SendSmsDialog.java @@ -169,5 +169,6 @@ private void sendSmsMessage(String phoneNumber, String message) @Override protected void close(boolean isEscaped) { + this.dispose(); } } diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomConfigurationWindow.java b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomConfigurationWindow.java index 00bc13bc2..68bb470af 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomConfigurationWindow.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomConfigurationWindow.java @@ -457,5 +457,8 @@ public void run() this.dispose(); } - protected void close(boolean isEscaped) {} + protected void close(boolean isEscaped) + { + this.dispose(); + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomWrapper.java b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomWrapper.java index ba396671b..1d0d46327 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomWrapper.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/conference/ChatRoomWrapper.java @@ -53,8 +53,9 @@ public class ChatRoomWrapper /** * By default all chat rooms are persistent from UI point of view. * But we can override this and force not saving it. + * If not overridden we query the wrapped room. */ - private boolean persistent = true; + private Boolean persistent = null; /** * Creates a ChatRoomWrapper by specifying the protocol provider, @@ -151,6 +152,14 @@ public ChatRoomProviderWrapper getParentProvider() */ public boolean isPersistent() { + if(persistent == null) + { + if(chatRoom != null) + persistent = chatRoom.isPersistent(); + else + return true; + } + return persistent; } diff --git a/src/net/java/sip/communicator/impl/gui/main/chat/conference/InvitationReceivedDialog.java b/src/net/java/sip/communicator/impl/gui/main/chat/conference/InvitationReceivedDialog.java index 84606616b..e8a1503c8 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chat/conference/InvitationReceivedDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/chat/conference/InvitationReceivedDialog.java @@ -10,6 +10,7 @@ import java.awt.event.*; import javax.swing.*; +import javax.swing.border.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.utils.*; @@ -125,13 +126,21 @@ public InvitationReceivedDialog (ConferenceChatManager multiUserChatManager, new String[] { invitation.getInviter(), invitation.getTargetChatRoom().getName()})); - if(invitation.getReason() != null && !invitation.getReason().equals("")) + if(invitation.getReason() != null && invitation.getReason().length() > 0) { - invitationReasonTextArea.setText(invitation.getReason()); - invitationReasonTextArea.setBorder( + this.invitationReasonTextArea.setLineWrap(true); + this.invitationReasonTextArea.setWrapStyleWord(true); + this.invitationReasonTextArea.setOpaque(false); + this.invitationReasonTextArea.setEditable(false); + + TitledBorder border = BorderFactory.createTitledBorder( GuiActivator.getResources() - .getI18NString("service.gui.INVITATION"))); + .getI18NString("service.gui.INVITATION")); + border.setTitleFont(border.getTitleFont().deriveFont(Font.BOLD)); + invitationReasonTextArea.setBorder(border); + + invitationReasonTextArea.setText(invitation.getReason()); this.dataPanel.add(invitationReasonTextArea, BorderLayout.CENTER); } @@ -244,6 +253,7 @@ public void initGUI() /** * Handles the ActionEvent triggered when one user clicks * on one of the buttons. + * @param e the event. */ public void actionPerformed(ActionEvent e) { @@ -277,5 +287,7 @@ else if (button.equals(rejectButton)) } protected void close(boolean isEscaped) - {} + { + this.dispose(); + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomList.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomList.java index 6e0e2e869..e40411863 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomList.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomList.java @@ -24,6 +24,9 @@ */ public class ChatRoomList { + /** + * The logger. + */ private static final Logger logger = Logger.getLogger(ChatRoomList.class); /** @@ -32,6 +35,12 @@ public class ChatRoomList private final List providersList = new Vector(); + /** + * All ChatRoomProviderWrapperListener change listeners registered so far. + */ + private List providerChangeListeners + = new ArrayList(); + /** * Initializes the list of chat rooms. */ @@ -119,6 +128,8 @@ public void addChatProvider(ProtocolProviderService pps) } } } + + fireProviderWrapperAdded(chatRoomProvider); } /** @@ -177,6 +188,8 @@ private void removeChatProvider(ChatRoomProviderWrapper chatRoomProvider) configService.setProperty(accountRootPropName, null); } } + + fireProviderWrapperRemoved(chatRoomProvider); } /** @@ -326,4 +339,78 @@ public Iterator getChatRoomProviders() { return providersList.iterator(); } + + /** + * Adds a ChatRoomProviderWrapperListener to the listener list. + * + * @param listener the ChatRoomProviderWrapperListener to be added + */ + public synchronized void addChatRoomProviderWrapperListener( + ChatRoomProviderWrapperListener listener) + { + providerChangeListeners.add(listener); + } + + /** + * Removes a ChatRoomProviderWrapperListener from the listener list. + * + * @param listener the ChatRoomProviderWrapperListener to be removed + */ + public synchronized void removeChatRoomProviderWrapperListener( + ChatRoomProviderWrapperListener listener) + { + providerChangeListeners.add(listener); + } + + /** + * Fire that chat room provider wrapper was added. + * @param provider which was added. + */ + private void fireProviderWrapperAdded(ChatRoomProviderWrapper provider) + { + if (providerChangeListeners != null) + { + for (ChatRoomProviderWrapperListener target : providerChangeListeners) + { + target.chatRoomProviderWrapperAdded(provider); + } + } + } + + /** + * Fire that chat room provider wrapper was removed. + * @param provider which was removed. + */ + private void fireProviderWrapperRemoved(ChatRoomProviderWrapper provider) + { + if (providerChangeListeners != null) + { + for (ChatRoomProviderWrapperListener target : providerChangeListeners) + { + target.chatRoomProviderWrapperRemoved(provider); + } + } + } + + /** + * Listener which registers for provider add/remove changes. + */ + public static interface ChatRoomProviderWrapperListener + { + /** + * When a provider wrapper is added this method is called to inform + * listeners. + * @param provider which was added. + */ + public void chatRoomProviderWrapperAdded( + ChatRoomProviderWrapper provider); + + /** + * When a provider wrapper is removed this method is called to inform + * listeners. + * @param provider which was removed. + */ + public void chatRoomProviderWrapperRemoved( + ChatRoomProviderWrapper provider); + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListDialog.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListDialog.java index 20e663927..178b4584f 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomListDialog.java @@ -167,5 +167,6 @@ else if (buttonName.equals(JOIN_CHAT_ROOM)) @Override protected void close(boolean isEscaped) { + this.dispose(); } } diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomRightButtonMenu.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomRightButtonMenu.java index bb2bee0c2..c388d7194 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomRightButtonMenu.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomRightButtonMenu.java @@ -7,10 +7,12 @@ package net.java.sip.communicator.impl.gui.main.chatroomslist; import java.awt.event.*; +import java.util.*; import javax.swing.*; import net.java.sip.communicator.impl.gui.*; +import net.java.sip.communicator.impl.gui.main.chat.*; import net.java.sip.communicator.impl.gui.main.chat.conference.*; import net.java.sip.communicator.impl.gui.main.chatroomslist.joinforms.*; import net.java.sip.communicator.impl.gui.utils.*; @@ -29,7 +31,10 @@ public class ChatRoomRightButtonMenu extends JPopupMenu implements ActionListener { - private final ChatRoomWrapper chatRoomWrapper; + /** + * The current chat room wrapper. + */ + private ChatRoomWrapper chatRoomWrapper; /** * Creates an instance of ChatRoomsListRightButtonMenu. @@ -42,6 +47,10 @@ public ChatRoomRightButtonMenu(ChatRoomWrapper chatRoomWrapper) this.setLocation(getLocation()); + createMenuItem( + "service.gui.OPEN", + ImageLoader.CHAT_ROOM_16x16_ICON, + "openChatRoom"); JMenuItem joinChatRoomItem = createMenuItem( "service.gui.JOIN", @@ -76,6 +85,7 @@ public ChatRoomRightButtonMenu(ChatRoomWrapper chatRoomWrapper) /** * Handles the ActionEvent. Determines which menu item was * selected and makes the appropriate operations. + * @param e the event. */ public void actionPerformed(ActionEvent e) { @@ -97,6 +107,38 @@ else if (itemName.equals("joinChatRoom")) { conferenceManager.joinChatRoom(chatRoomWrapper); } + else if (itemName.equals("openChatRoom")) + { + if(chatRoomWrapper.getChatRoom() != null) + { + if(!chatRoomWrapper.getChatRoom().isJoined()) + { + conferenceManager.joinChatRoom(chatRoomWrapper); + } + } + else + { + // this is not a server persistent room we must create it + // and join + chatRoomWrapper = + GuiActivator.getUIService().getConferenceChatManager() + .createChatRoom( + chatRoomWrapper.getChatRoomName(), + chatRoomWrapper.getParentProvider() + .getProtocolProvider(), + new ArrayList(), + "", + true, + true); + } + + ChatWindowManager chatWindowManager + = GuiActivator.getUIService().getChatWindowManager(); + ChatPanel chatPanel + = chatWindowManager.getMultiChat(chatRoomWrapper, true); + + chatWindowManager.openChat(chatPanel, true); + } else if(itemName.equals("joinAsChatRoom")) { ChatRoomAuthenticationWindow authWindow diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableDialog.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableDialog.java index e0274d955..f2ad8901d 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableDialog.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableDialog.java @@ -50,11 +50,6 @@ public class ChatRoomTableDialog */ private JComboBox roomsCombo = null; - /** - * Rooms of the currently selected provider. - */ - private List serverRooms = null; - /** * The add chat room button. */ @@ -130,6 +125,9 @@ public ChatRoomTableDialog(MainFrame parentWindow) this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + this.setTitle(GuiActivator.getResources() + .getI18NString("service.gui.MY_CHAT_ROOMS_TITLE")); + this.init(); } @@ -143,38 +141,20 @@ private void init() JPanel northPanel = new TransparentPanel(new BorderLayout(5, 5)); northPanel.setBorder(BorderFactory.createEmptyBorder(15, 15, 5, 15)); - JPanel labels = new TransparentPanel(new GridLayout(3, 2, 5, 5)); - - final JLabel jl_searchState = new JLabel(GuiActivator.getResources() - .getI18NString("service.gui.LOADING_ROOMS"), - JLabel.LEFT); - jl_searchState.setBorder(BorderFactory.createEmptyBorder(3, 7, 0, 0)); - jl_searchState.setFont( - jl_searchState.getFont().deriveFont(Font.ITALIC, 11)); - jl_searchState.setForeground(Color.DARK_GRAY); - jl_searchState.setVisible(false); + JPanel labels = new TransparentPanel(new GridLayout(2, 2, 5, 5)); labels.add(new JLabel(GuiActivator.getResources() .getI18NString("service.gui.ACCOUNT"))); labels.add(new JLabel(GuiActivator.getResources() .getI18NString("service.gui.CHAT_ROOM_NAME"))); - labels.add(jl_searchState); - JPanel valuesPanel = new TransparentPanel(new GridLayout(3, 2, 5, 5)); + JPanel valuesPanel = new TransparentPanel(new GridLayout(2, 2, 5, 5)); providersCombo = createProvidersCombobox(); roomsCombo = new JComboBox(); roomsCombo.setEditable(true); roomsCombo.setPreferredSize(providersCombo.getPreferredSize()); editor = ((JTextField)roomsCombo.getEditor().getEditorComponent()); - // when enter is typed in the editor we query for available - // room names - editor.addActionListener(new ActionListener(){ - public void actionPerformed(ActionEvent e) - { - handleChange((JTextField)e.getSource()); - } - }); // when provider is changed we load providers rooms list // so we can show them in the combobox below @@ -190,9 +170,7 @@ public void run() { okButton.setEnabled(false); roomsCombo.setEnabled(false); - jl_searchState.setVisible(true); loadProviderRooms(); - jl_searchState.setVisible(false); roomsCombo.setEnabled(true); okButton.setEnabled(true); } @@ -200,16 +178,8 @@ public void run() } }); - JLabel jl_indication = new JLabel(GuiActivator.getResources() - .getI18NString("service.gui.PRESS_ENTER_FOR_SUGGESTIONS"), - SwingConstants.RIGHT); - jl_indication.setFont( - jl_indication.getFont().deriveFont(Font.ITALIC, 11)); - jl_indication.setForeground(Color.DARK_GRAY); - valuesPanel.add(providersCombo); valuesPanel.add(roomsCombo); - valuesPanel.add(jl_indication); northPanel.add(labels, BorderLayout.WEST); northPanel.add(valuesPanel, BorderLayout.CENTER); @@ -275,6 +245,26 @@ public void valueChanged(ListSelectionEvent e) } } }); + + //register listener to listen for newly added chat room providers + // and for removed ones + GuiActivator.getUIService().getConferenceChatManager() + .getChatRoomList().addChatRoomProviderWrapperListener( + new ChatRoomList.ChatRoomProviderWrapperListener() + { + + public void chatRoomProviderWrapperAdded( + ChatRoomProviderWrapper provider) + { + providersCombo.addItem(provider); + } + + public void chatRoomProviderWrapperRemoved( + ChatRoomProviderWrapper provider) + { + providersCombo.removeItem(provider); + } + }); } /** @@ -310,17 +300,14 @@ public void actionPerformed(ActionEvent e) { String chatRoomName = editor.getText(); - if(serverRooms == null || !serverRooms.contains(chatRoomName)) - { - GuiActivator.getUIService().getConferenceChatManager() - .createChatRoom( - chatRoomName, - getSelectedProvider().getProtocolProvider(), - new ArrayList(), - "", - false, - true); - } + GuiActivator.getUIService().getConferenceChatManager() + .createChatRoom( + chatRoomName, + getSelectedProvider().getProtocolProvider(), + new ArrayList(), + "", + false, + true); } else if(sourceButton.equals(removeButton)) { @@ -399,65 +386,31 @@ else if(sourceButton.equals(cancelButton)) protected void close(boolean isEscaped) { chatRoomTableDialog = null; + + dispose(); } /** - * Performs changes in the room name combo box when its editor content has - * changed. - * @param editor + * Loads the rooms hosted on the selected provider. */ - public void handleChange(final JTextField editor) + public void loadProviderRooms() { - final String match = editor.getText(); + List rooms = GuiActivator.getUIService().getConferenceChatManager() + .getExistingChatRooms(getSelectedProvider()); - if (!SwingUtilities.isEventDispatchThread()) - { - SwingUtilities.invokeLater(new Runnable(){ - public void run() - { - handleChange(editor); - } - }); + roomsCombo.removeAllItems(); + // if there is no room list comming from provider + if(rooms == null) return; - } - roomsCombo.removeAllItems(); + Collections.sort(rooms); - for(String room : getChatRoomList(match)) + for(String room : rooms) roomsCombo.addItem(room); - editor.setText(match); - roomsCombo.showPopup(); - } - - /** - * Updates the chat rooms list when a key change is performed in the search - * field. The new chat rooms list will contain all the chat rooms whose name - * start with search fields text value. - * @param match search for. - * @return the found rooms. - */ - public Vector getChatRoomList(String match) - { - Vector rooms = new Vector(); - - if(serverRooms != null) - for(String room : serverRooms) - if(room.startsWith(match)) - rooms.add(room); - - Collections.sort(rooms); - return rooms; - } - - /** - * Loads the rooms hosted on the selected provider. - */ - public void loadProviderRooms() - { - serverRooms = GuiActivator.getUIService().getConferenceChatManager() - .getExistingChatRooms(getSelectedProvider()); + // select nothing + roomsCombo.setSelectedIndex(-1); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableModel.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableModel.java index 046ed00e7..771a58b7c 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableModel.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableModel.java @@ -37,7 +37,10 @@ public class ChatRoomTableModel * The column names for the table. */ private final static String[] COLUMN_NAMES = - new String[]{"Room Name", "Account", "Autojoin"}; + new String[]{ + GuiActivator.getResources().getI18NString("service.gui.ROOM_NAME"), + GuiActivator.getResources().getI18NString("service.gui.ACCOUNT"), + GuiActivator.getResources().getI18NString("service.gui.AUTOJOIN")}; /** * The current list of rooms. diff --git a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java index 162cd236f..1970f8dcb 100644 --- a/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java +++ b/src/net/java/sip/communicator/impl/gui/main/chatroomslist/ChatRoomTableUI.java @@ -48,9 +48,6 @@ public class ChatRoomTableUI */ public ChatRoomTableUI(ChatRoomTableDialog parentDialog) { - this.setPreferredSize(new Dimension(200, 450)); - this.setMinimumSize(new Dimension(80, 200)); - this.initChatRoomList(); this.setViewportView(chatRoomList); @@ -80,10 +77,10 @@ private void initChatRoomList() confChatManager.addChatRoomListChangeListener(chatRoomsTableModel); - this.chatRoomList.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); - this.chatRoomList.getColumnModel().getColumn(0).setMinWidth(250); - this.chatRoomList.getColumnModel().getColumn(1).setMinWidth(250); - this.chatRoomList.getColumnModel().getColumn(2).setPreferredWidth(50); +// this.chatRoomList.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); +// this.chatRoomList.getColumnModel().getColumn(0).setMinWidth(250); +// this.chatRoomList.getColumnModel().getColumn(1).setMinWidth(250); +// this.chatRoomList.getColumnModel().getColumn(2).setPreferredWidth(50); } /** diff --git a/src/net/java/sip/communicator/impl/gui/main/configforms/ConfigurationFrame.java b/src/net/java/sip/communicator/impl/gui/main/configforms/ConfigurationFrame.java index fdadadef1..b11ee4425 100644 --- a/src/net/java/sip/communicator/impl/gui/main/configforms/ConfigurationFrame.java +++ b/src/net/java/sip/communicator/impl/gui/main/configforms/ConfigurationFrame.java @@ -187,6 +187,7 @@ public void setVisible(boolean isVisible) */ protected void close(boolean isEscaped) { + this.setVisible(false); } /** diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/caps/CapsPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/caps/CapsPacketExtension.java index 8005d92eb..71184bc0e 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/caps/CapsPacketExtension.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/caps/CapsPacketExtension.java @@ -80,6 +80,7 @@ public CapsPacketExtension(String ext, String hash, String ver) { + this.ext = ext; this.node = node; this.ver = ver; this.hash = hash;