Chat rooms dialog reflect add/remove protocol providers, removed suggestions. Add Open option to right click menu. Add some i18n strings.

Ongoing work on issue#528.
cusax-fix
Damian Minkov 16 years ago
parent 6b32097a75
commit c804a06ab3

@ -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

@ -440,7 +440,7 @@ public static void showNewAccountDialog()
*/
protected void close(boolean isEscaped)
{
newAccountDialog = null;
dispose();
}
/**

@ -169,5 +169,6 @@ private void sendSmsMessage(String phoneNumber, String message)
@Override
protected void close(boolean isEscaped)
{
this.dispose();
}
}

@ -457,5 +457,8 @@ public void run()
this.dispose();
}
protected void close(boolean isEscaped) {}
protected void close(boolean isEscaped)
{
this.dispose();
}
}

@ -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 <tt>ChatRoomWrapper</tt> 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;
}

@ -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 <tt>ActionEvent</tt> 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();
}
}

@ -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<ChatRoomProviderWrapper> providersList
= new Vector<ChatRoomProviderWrapper>();
/**
* All ChatRoomProviderWrapperListener change listeners registered so far.
*/
private List<ChatRoomProviderWrapperListener> providerChangeListeners
= new ArrayList<ChatRoomProviderWrapperListener>();
/**
* 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<ChatRoomProviderWrapper> 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);
}
}

@ -167,5 +167,6 @@ else if (buttonName.equals(JOIN_CHAT_ROOM))
@Override
protected void close(boolean isEscaped)
{
this.dispose();
}
}

@ -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 <tt>ChatRoomsListRightButtonMenu</tt>.
@ -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 <tt>ActionEvent</tt>. 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<String>(),
"",
true,
true);
}
ChatWindowManager chatWindowManager
= GuiActivator.getUIService().getChatWindowManager();
ChatPanel chatPanel
= chatWindowManager.getMultiChat(chatRoomWrapper, true);
chatWindowManager.openChat(chatPanel, true);
}
else if(itemName.equals("joinAsChatRoom"))
{
ChatRoomAuthenticationWindow authWindow

@ -50,11 +50,6 @@ public class ChatRoomTableDialog
*/
private JComboBox roomsCombo = null;
/**
* Rooms of the currently selected provider.
*/
private List<String> 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<String>(),
"",
false,
true);
}
GuiActivator.getUIService().getConferenceChatManager()
.createChatRoom(
chatRoomName,
getSelectedProvider().getProtocolProvider(),
new ArrayList<String>(),
"",
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<String> 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<String> getChatRoomList(String match)
{
Vector<String> rooms = new Vector<String>();
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);
}
/**

@ -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.

@ -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);
}
/**

@ -187,6 +187,7 @@ public void setVisible(boolean isVisible)
*/
protected void close(boolean isEscaped)
{
this.setVisible(false);
}
/**

@ -80,6 +80,7 @@ public CapsPacketExtension(String ext,
String hash,
String ver)
{
this.ext = ext;
this.node = node;
this.ver = ver;
this.hash = hash;

Loading…
Cancel
Save