SPARK-1103 - option to register with room

SPARK-1306 - fixed rendering issue with the "X"-button

reworked user.kicked and user.banned listener

changed locale string:
message.user.kicked.from.room = {0} has been kicked out of the room by {1}. Reason: {2}
-> {0}=username,{1}=adminname,{2}=reason

message.user.banned = {0} has been banned from this room. Reason: {1}
-> {0}=username,{1}=reason

new locale:
message.groupchat.registered.member = Successfully registered with {0}
->{0}=roomname

git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@12324 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Wolf Posdorfer
2011-05-04 12:07:29 +00:00
committed by wolf.posdorfer
parent 3d8188fbc3
commit e18803d66d
9 changed files with 155 additions and 118 deletions

View File

@ -327,6 +327,7 @@ public class SparkRes {
public static final String COLOR_ICON = "COLOR_ICON"; public static final String COLOR_ICON = "COLOR_ICON";
public static final String SETTINGS_IMAGE_16x16 = "SETTINGS_IMAGE_16x16"; public static final String SETTINGS_IMAGE_16x16 = "SETTINGS_IMAGE_16x16";
public static final String SETTINGS_IMAGE_24x24 = "SETTINGS_IMAGE_24x24"; public static final String SETTINGS_IMAGE_24x24 = "SETTINGS_IMAGE_24x24";
public static final String PEOPLE_IMAGE = "PEOPLE_IMAGE";
static ClassLoader cl = SparkRes.class.getClassLoader(); static ClassLoader cl = SparkRes.class.getClassLoader();

View File

@ -229,6 +229,7 @@ PROFILE_ICON = images/profile.png
SEND_FILE_ICON = images/document_into.png SEND_FILE_ICON = images/document_into.png
ADD_CONTACT_IMAGE = images/add_contact.png ADD_CONTACT_IMAGE = images/add_contact.png
JOIN_GROUPCHAT_IMAGE = images/join_groupchat.png JOIN_GROUPCHAT_IMAGE = images/join_groupchat.png
PEOPLE_IMAGE = images/people-icon.png
DOWN_ARROW_IMAGE = images/down_arrow.gif DOWN_ARROW_IMAGE = images/down_arrow.gif
PRINTER_IMAGE_16x16 = images/printer.png PRINTER_IMAGE_16x16 = images/printer.png
SEND_MAIL_IMAGE_16x16 = images/sendmail.png SEND_MAIL_IMAGE_16x16 = images/sendmail.png

View File

@ -35,6 +35,7 @@ import javax.swing.JScrollPane;
* @author Derek DeMoro * @author Derek DeMoro
*/ */
public class CheckBoxList extends JPanel { public class CheckBoxList extends JPanel {
private static final long serialVersionUID = 4145933151755357313L;
private Map<JCheckBox, String> valueMap = new HashMap<JCheckBox, String>(); private Map<JCheckBox, String> valueMap = new HashMap<JCheckBox, String>();
private JPanel internalPanel = new JPanel(); private JPanel internalPanel = new JPanel();
@ -63,7 +64,7 @@ public class CheckBoxList extends JPanel {
* *
* @return list of selected checkbox values. * @return list of selected checkbox values.
*/ */
public List getSelectedValues() { public List<String> getSelectedValues() {
List<String> list = new ArrayList<String>(); List<String> list = new ArrayList<String>();
for (JCheckBox checkbox : valueMap.keySet()) { for (JCheckBox checkbox : valueMap.keySet()) {
if (checkbox.isSelected()) { if (checkbox.isSelected()) {

View File

@ -360,119 +360,124 @@ public class SparkTabbedPane extends JPanel {
} }
} }
private class TabPanel extends JPanel { private class TabPanel extends JPanel {
private static final long serialVersionUID = -8249981130816404360L; private static final long serialVersionUID = -8249981130816404360L;
private final BorderLayout layout = new BorderLayout(5,5); private final BorderLayout layout = new BorderLayout(5, 5);
private final Font defaultFont = new Font("Dialog", Font.PLAIN, 11); private final Font defaultFontPlain = new Font("Dialog", Font.PLAIN, 11);
private JLabel iconLabel; private final Font defaultFontBold = new Font("Dialog", Font.BOLD, 11);
private JLabel titleLabel; private JLabel iconLabel;
private JLabel titleLabel;
private JLabel tabCloseButton = new JLabel(closeInactiveButtonIcon);
public TabPanel(final SparkTab sparktab, String title, Icon icon) { public TabPanel(final SparkTab sparktab, String title, Icon icon) {
setOpaque(false); setOpaque(false);
this.setLayout(layout); this.setLayout(layout);
titleLabel = new JLabel(title);
titleLabel = new JLabel(title); titleLabel.setFont(closeEnabled ? defaultFontBold
titleLabel.setFont(defaultFont); : defaultFontPlain);
if (icon != null) if (icon != null) {
{ iconLabel = new JLabel(icon);
iconLabel = new JLabel(icon); add(iconLabel, BorderLayout.WEST);
add(iconLabel, BorderLayout.WEST); }
add(titleLabel, BorderLayout.CENTER);
if (closeEnabled) {
tabCloseButton.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent mouseEvent) {
if (Spark.isWindows()) {
tabCloseButton.setIcon(closeActiveButtonIcon);
} }
setCursor(HAND_CURSOR);
}
add(titleLabel, BorderLayout.CENTER); public void mouseExited(MouseEvent mouseEvent) {
if (closeEnabled) { if (Spark.isWindows()) {
final JLabel tabCloseButton = new JLabel( tabCloseButton.setIcon(closeInactiveButtonIcon);
closeInactiveButtonIcon);
tabCloseButton.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent mouseEvent) {
if (Spark.isWindows()) {
tabCloseButton.setIcon(closeActiveButtonIcon);
}
setCursor(HAND_CURSOR);
}
public void mouseExited(MouseEvent mouseEvent) {
if (Spark.isWindows()) {
tabCloseButton.setIcon(closeInactiveButtonIcon);
}
setCursor(DEFAULT_CURSOR);
}
public void mousePressed(MouseEvent mouseEvent) {
final SwingWorker closeTimerThread = new SwingWorker() {
public Object construct() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Log.error(e);
}
return true;
}
public void finished() {
close(sparktab);
}
};
closeTimerThread.start();
}
});
add(tabCloseButton, BorderLayout.EAST);
} }
} setCursor(DEFAULT_CURSOR);
}
@Override public void mousePressed(MouseEvent mouseEvent) {
public Dimension getPreferredSize() { final SwingWorker closeTimerThread = new SwingWorker() {
Dimension dim = super.getPreferredSize(); public Object construct() {
if (closeEnabled && titleLabel.getText().length() < 6) { try {
return new Dimension(80, dim.height); Thread.sleep(100);
} catch (InterruptedException e) {
Log.error(e);
}
return true;
}
} else public void finished() {
return super.getPreferredSize(); close(sparktab);
}
};
closeTimerThread.start();
}
});
add(tabCloseButton, BorderLayout.EAST);
}
}
} @Override
public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize();
public Font getDefaultFont() { if (closeEnabled && titleLabel.getText().length() < 6
return defaultFont; && dim.getWidth() < 80) {
} return new Dimension(80, dim.height);
public void setIcon(Icon icon) { } else {
iconLabel.setIcon(icon); return dim;
} }
public void setTitle(String title) {
titleLabel.setText(title);
}
public void setTitleColor(Color color) {
titleLabel.setForeground(color);
titleLabel.validate();
titleLabel.repaint();
}
public void setTitleBold(boolean bold) {
Font oldFont = titleLabel.getFont();
Font newFont;
if (bold) {
newFont = new Font(oldFont.getFontName(), Font.BOLD, oldFont
.getSize());
} else {
newFont = new Font(oldFont.getFontName(), Font.PLAIN, oldFont
.getSize());
}
titleLabel.setFont(newFont);
titleLabel.validate();
titleLabel.repaint();
}
public void setTitleFont(Font font) {
titleLabel.setFont(font);
titleLabel.validate();
titleLabel.repaint();
}
} }
public Font getDefaultFont() {
return defaultFontPlain;
}
public void setIcon(Icon icon) {
iconLabel.setIcon(icon);
}
public void setTitle(String title) {
titleLabel.setText(title);
}
public void setTitleColor(Color color) {
titleLabel.setForeground(color);
titleLabel.validate();
titleLabel.repaint();
}
public void setTitleBold(boolean bold) {
Font oldFont = titleLabel.getFont();
Font newFont;
if (bold) {
newFont = new Font(oldFont.getFontName(), Font.BOLD,
oldFont.getSize());
} else {
newFont = new Font(oldFont.getFontName(), Font.PLAIN,
oldFont.getSize());
}
titleLabel.setFont(newFont);
titleLabel.validate();
titleLabel.repaint();
titleLabel.revalidate();
}
public void setTitleFont(Font font) {
titleLabel.setFont(font);
titleLabel.validate();
titleLabel.repaint();
titleLabel.revalidate();
}
}
/** /**
* Drag and Drop * Drag and Drop
*/ */

View File

@ -853,7 +853,7 @@ public class ConferenceRoomBrowser extends JPanel implements ActionListener,
} }
/** /**
* Returns true if the room is password protected * Returns true if the room is password protected or Members only
* *
* @param roomjid * @param roomjid
* @return * @return
@ -862,7 +862,8 @@ public class ConferenceRoomBrowser extends JPanel implements ActionListener,
boolean result = false; boolean result = false;
try { try {
RoomInfo rif = MultiUserChat.getRoomInfo(SparkManager.getConnection(), roomjid); RoomInfo rif = MultiUserChat.getRoomInfo(
SparkManager.getConnection(), roomjid);
result = rif.isMembersOnly() || rif.isPasswordProtected(); result = rif.isMembersOnly() || rif.isPasswordProtected();

View File

@ -76,6 +76,7 @@ import org.jivesoftware.spark.ui.ChatFrame;
import org.jivesoftware.spark.ui.ChatRoom; import org.jivesoftware.spark.ui.ChatRoom;
import org.jivesoftware.spark.ui.ChatRoomNotFoundException; import org.jivesoftware.spark.ui.ChatRoomNotFoundException;
import org.jivesoftware.spark.ui.GroupChatRoomTransferHandler; import org.jivesoftware.spark.ui.GroupChatRoomTransferHandler;
import org.jivesoftware.spark.ui.conferences.AnswerFormDialog;
import org.jivesoftware.spark.ui.conferences.ConferenceUtils; import org.jivesoftware.spark.ui.conferences.ConferenceUtils;
import org.jivesoftware.spark.ui.conferences.DataFormDialog; import org.jivesoftware.spark.ui.conferences.DataFormDialog;
import org.jivesoftware.spark.ui.conferences.GroupChatParticipantList; import org.jivesoftware.spark.ui.conferences.GroupChatParticipantList;
@ -822,10 +823,11 @@ public final class GroupChatRoom extends ChatRoom {
*/ */
private void setupListeners() { private void setupListeners() {
chat.addParticipantStatusListener(new DefaultParticipantStatusListener() { chat.addParticipantStatusListener(new DefaultParticipantStatusListener() {
public void kicked(String participant) {
public void kicked(String participant, String actor, String reason) {
String nickname = StringUtils.parseResource(participant); String nickname = StringUtils.parseResource(participant);
insertText(Res.getString("message.user.kicked.from.room", insertText(Res.getString("message.user.kicked.from.room",
nickname)); nickname,actor,reason));
} }
public void voiceGranted(String participant) { public void voiceGranted(String participant) {
@ -839,9 +841,9 @@ public final class GroupChatRoom extends ChatRoom {
.getString("message.user.voice.revoked", nickname)); .getString("message.user.voice.revoked", nickname));
} }
public void banned(String participant) { public void banned(String participant, String actor, String reason) {
String nickname = StringUtils.parseResource(participant); String nickname = StringUtils.parseResource(participant);
insertText(Res.getString("message.user.banned", nickname)); insertText(Res.getString("message.user.banned", nickname, reason));
} }
public void membershipGranted(String participant) { public void membershipGranted(String participant) {
@ -1351,14 +1353,20 @@ public final class GroupChatRoom extends ChatRoom {
RolloverButton settings = new RolloverButton( RolloverButton settings = new RolloverButton(
SparkRes.getImageIcon(SparkRes.SETTINGS_IMAGE_16x16)); SparkRes.getImageIcon(SparkRes.SETTINGS_IMAGE_16x16));
settings.setToolTipText(Res.getString("title.configure.room")); settings.setToolTipText(Res.getString("title.configure.room"));
RolloverButton thema = new RolloverButton( RolloverButton thema = new RolloverButton(
SparkRes.getImageIcon(SparkRes.TYPING_TRAY)); SparkRes.getImageIcon(SparkRes.TYPING_TRAY));
thema.setToolTipText(Res.getString("menuitem.change.subject")); thema.setToolTipText(Res.getString("menuitem.change.subject"));
RolloverButton register = new RolloverButton(
SparkRes.getImageIcon(SparkRes.PEOPLE_IMAGE));
register.setToolTipText(Res.getString("button.register").replace("&",""));
JPanel bar = room.getRoomControllerBar(); JPanel bar = room.getRoomControllerBar();
bar.add(thema); bar.add(settings,0);
bar.add(settings); bar.add(thema,0);
bar.add(register,0);
settings.addActionListener(new AbstractAction() { settings.addActionListener(new AbstractAction() {
private static final long serialVersionUID = 6780230647854132857L; private static final long serialVersionUID = 6780230647854132857L;
@ -1400,6 +1408,24 @@ public final class GroupChatRoom extends ChatRoom {
} }
}); });
register.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Form form = chat.getRegistrationForm();
ChatFrame chatFrame = SparkManager.getChatManager()
.getChatContainer().getChatFrame();
new AnswerFormDialog(chatFrame, chat, form);
} catch (XMPPException xmpe) {
getTranscriptWindow().insertNotificationMessage(
xmpe.getMessage(), ChatManager.ERROR_COLOR);
scrollToBottom();
}
}
});
} }
} }

View File

@ -785,7 +785,7 @@ message.unable.to.send.file = You were unable to send the file to {0}
message.unrecoverable.error = Invalid username or password message.unrecoverable.error = Invalid username or password
message.update.room.list = Update room list message.update.room.list = Update room list
message.updating.cancelled = Updating has been canceled message.updating.cancelled = Updating has been canceled
message.user.banned = {0} has been banned from this room message.user.banned = {0} has been banned from this room. Reason: {1}
message.user.given.voice = {0} has been given a voice in this room message.user.given.voice = {0} has been given a voice in this room
message.user.granted.admin = {0} has been granted administrator privileges message.user.granted.admin = {0} has been granted administrator privileges
message.user.granted.membership = {0} has been given membership privileges message.user.granted.membership = {0} has been given membership privileges
@ -793,7 +793,7 @@ message.user.granted.moderator = {0} has been granted moderator privileges
message.user.granted.owner = {0} has been granted owner privileges message.user.granted.owner = {0} has been granted owner privileges
message.user.is.sending.you.a.file = {0} is sending you a file message.user.is.sending.you.a.file = {0} is sending you a file
message.user.joined.room = {0} has joined the room message.user.joined.room = {0} has joined the room
message.user.kicked.from.room = {0} has been kicked out of the room message.user.kicked.from.room = {0} has been kicked out of the room by {1}. Reason: {2}
message.user.left.room = {0} has left the room message.user.left.room = {0} has left the room
message.user.nickname.changed = {0} is now known as {1} message.user.nickname.changed = {0} is now known as {1}
message.user.now.available.to.chat = {0} is online at {1} message.user.now.available.to.chat = {0} is online at {1}
@ -825,6 +825,7 @@ message.your.revoked.granted = Your admin privileges have been revoked
message.your.voice.granted = You have been given a voice in this chat message.your.voice.granted = You have been given a voice in this chat
message.your.voice.revoked = Your voice has been revoked message.your.voice.revoked = Your voice has been revoked
message.groupchat.require.password = This group chat room requires a password to enter message.groupchat.require.password = This group chat room requires a password to enter
message.groupchat.registered.member = Successfully registered with {0}
message.search.for.history = Search conversation history message.search.for.history = Search conversation history
status.away = Away status.away = Away

View File

@ -425,10 +425,10 @@ message.subject.change.error = Sie haben keine Rechte das Konferenzthema in dies
message.forbidden.error = Sie haben nicht die Rechte f<>r diese Aktion. message.forbidden.error = Sie haben nicht die Rechte f<>r diese Aktion.
message.room.destroyed = Dieser Raum wurde aus dem folgenden Grund gel<65>scht: {0} message.room.destroyed = Dieser Raum wurde aus dem folgenden Grund gel<65>scht: {0}
message.subject.has.been.changed.to = Das Thema der Konferenz wurde von {1} in "{0}" ge<67>ndert. message.subject.has.been.changed.to = Das Thema der Konferenz wurde von {1} in "{0}" ge<67>ndert.
message.user.kicked.from.room = {0} wurde aus dem Raum ausgeladen. message.user.kicked.from.room = {0} wurde von {1} aus dem Raum geworfen. Grund: {2}
message.user.given.voice = {0} hat jetzt Schreibenrechte. message.user.given.voice = {0} hat jetzt Schreibenrechte.
message.user.voice.revoked = Schreibrechte wurde {0} entzogen. message.user.voice.revoked = Schreibrechte wurde {0} entzogen.
message.user.banned = {0} ist f<>r diesen Raum gesperrt. message.user.banned = {0} wurde f<>r diesen Raum gesperrt. Grund: {2}
message.user.granted.membership = {0} ist jetzt Mitglied. message.user.granted.membership = {0} ist jetzt Mitglied.
message.user.revoked.membership = Mitgliedschaft f<>r {0} wurde widerufen. message.user.revoked.membership = Mitgliedschaft f<>r {0} wurde widerufen.
message.user.granted.moderator = {0} ist jetzt Moderator. message.user.granted.moderator = {0} ist jetzt Moderator.
@ -682,7 +682,7 @@ menuitem.send.a.message = Nachricht senden...
menuitem.show.empty.groups = Leere Gruppen anzeigen menuitem.show.empty.groups = Leere Gruppen anzeigen
menuitem.send.a.file = Datei senden menuitem.send.a.file = Datei senden
menuitem.view.last.activity = Letzte Aktivit<69>t sehen menuitem.view.last.activity = Letzte Aktivit<69>t sehen
menuitem.unban = Verbannung r<>ckg<6B>ngig machen menuitem.unban = Teilnehmer entsperren
menuitem.ban = Verbannen menuitem.ban = Verbannen
menuitem.browse.service = Services anzeigen menuitem.browse.service = Services anzeigen
menuitem.remove.service = Service entfernen menuitem.remove.service = Service entfernen
@ -862,6 +862,7 @@ message.unrecoverable.error = Ung
message.waiting.for.user.to.join = Warte auf {0} zum Beitritt message.waiting.for.user.to.join = Warte auf {0} zum Beitritt
message.your.voice.granted = Du hast Schreibrechte in diesem Chat bekommen message.your.voice.granted = Du hast Schreibrechte in diesem Chat bekommen
message.groupchat.require.password = Dieser GruppenChat ben<65>tigt ein Passwort message.groupchat.require.password = Dieser GruppenChat ben<65>tigt ein Passwort
message.groupchat.registered.member = Registrierung mit {0} erfolgreich
message.search.for.history = Durchsuche Gespr<70>chsverlauf message.search.for.history = Durchsuche Gespr<70>chsverlauf
status.extended.away = Nicht verf<72>gbar status.extended.away = Nicht verf<72>gbar
status.free.to.chat = Bereit zu chatten status.free.to.chat = Bereit zu chatten

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B