SPARK-1264 now you can show your transports as a tab if you want to. Change preference -> appearance -> show transports in tab

git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@12172 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Holger Bergunde
2011-03-24 10:37:23 +00:00
committed by holger.bergunde
parent 1de57b7ecd
commit 8934380a02
12 changed files with 439 additions and 19 deletions

View File

@ -319,6 +319,7 @@ public class SparkRes {
public static final String XMPP_TRANSPORT_INACTIVE_IMAGE = "XMPP_TRANSPORT_INACTIVE_IMAGE";
public static final String OFFLINE_IMAGE = "OFFLINE_IMAGE";
public static final String TASK_DELETE_IMAGE = "TASK_DELETE_IMAGE";
public static final String TRANSPORT_ICON = "TRANSPORT_ICON";
static ClassLoader cl = SparkRes.class.getClassLoader();

View File

@ -293,6 +293,7 @@ MYSPACE_TRANSPORT_ACTIVE_IMAGE= images/myspaceim.gif
MYSPACE_TRANSPORT_INACTIVE_IMAGE= images/myspaceim-gray.gif
SAMETIME_TRANSPORT_ACTIVE_IMAGE= images/sametime.gif
SAMETIME_TRANSPORT_INACTIVE_IMAGE= images/sametime-gray.gif
TRANSPORT_ICON = images/transport.png
#Stale Images
IM_AVAILABLE_STALE_IMAGE = images/im_available_stale.png

View File

@ -89,6 +89,7 @@ public class ThemePanel extends JPanel {
private JComboBox _lookandfeel;
private JButton _lookandfeelpreview;
private Vector<String> _lookandfeelname = new Vector<String>();
private JCheckBox _useTabsForTransports;
private ThemePanel _thispanel;
@ -213,6 +214,9 @@ public class ThemePanel extends JPanel {
});
_useTabsForTransports = new JCheckBox("deine mudder");
JLabel messageStyleLabel = new JLabel();
messageStyleBox = new JComboBox();
@ -253,6 +257,7 @@ public class ThemePanel extends JPanel {
ResourceUtils.resButton(showAvatarsBox, Res.getString("checkbox.show.avatars.in.contactlist"));
ResourceUtils.resLabel(avatarSizeLabel, avatarSizeField, Res.getString("label.contactlist.avatarsize"));
ResourceUtils.resButton(showVCards, Res.getString("title.appearance.showVCards"));
_useTabsForTransports.setText(Res.getString("checkbox.transport.tab.setting"));
// Build UI
buildUI();
@ -283,12 +288,22 @@ public class ThemePanel extends JPanel {
add(avatarSizeLabel, new GridBagConstraints(0, 8, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
add(avatarSizeField, new GridBagConstraints(1, 8, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 50, 0));
add(showVCards, new GridBagConstraints(0, 9, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 50, 0));
add(_useTabsForTransports, new GridBagConstraints(0, 10, 3, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 50, 0));
// Activate live one.
LocalPreferences pref = SettingsManager.getLocalPreferences();
_useTabsForTransports.setSelected(pref.getShowTransportTab());
_useTabsForTransports.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SettingsManager.getLocalPreferences().setShowTransportTab(_useTabsForTransports.isSelected());
}
});
final EmoticonManager emoticonManager = EmoticonManager.getInstance();
if (emoticonManager.getEmoticonPacks() != null)
{

View File

@ -47,7 +47,7 @@ import org.jivesoftware.sparkimpl.plugin.gateways.transports.TransportUtils;
/**
*
*/
public class GatewayButton extends JPanel {
public class GatewayButton extends JPanel implements GatewayItem {
private static final long serialVersionUID = -2692869826501622612L;
private final RolloverButton button = new RolloverButton();
private Transport transport;

View File

@ -0,0 +1,17 @@
/**
*
*/
package org.jivesoftware.sparkimpl.plugin.gateways;
/**
* @author holger.bergunde
*
*/
public interface GatewayItem {
public void signedIn(boolean signedIn);
public boolean isLoggedIn();
}

View File

@ -19,6 +19,7 @@
*/
package org.jivesoftware.sparkimpl.plugin.gateways;
import org.jivesoftware.Spark;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.filter.OrFilter;
@ -35,13 +36,23 @@ import org.jivesoftware.spark.ChatManager;
import org.jivesoftware.spark.PresenceManager;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.component.MessageDialog;
import org.jivesoftware.spark.component.VerticalFlowLayout;
import org.jivesoftware.spark.component.tabbedPane.SparkTabbedPane;
import org.jivesoftware.spark.plugin.Plugin;
import org.jivesoftware.spark.ui.*;
import org.jivesoftware.spark.util.SwingWorker;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.plugin.gateways.transports.*;
import org.jivesoftware.sparkimpl.settings.local.LocalPreferences;
import org.jivesoftware.sparkimpl.settings.local.SettingsManager;
import com.sun.org.apache.xerces.internal.impl.RevalidationHandler;
import com.sun.xml.internal.ws.api.pipe.TransportTubeFactory;
import javax.swing.*;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@ -57,13 +68,15 @@ public class GatewayPlugin implements Plugin, ContactItemHandler {
* Defined Static Variable for Gateways. *
*/
public static final String GATEWAY = "gateway";
private boolean useTab;
private Map<Transport, GatewayButton> uiMap = new HashMap<Transport, GatewayButton>();
private Map<Transport, GatewayItem> uiMap = new HashMap<Transport, GatewayItem>();;
private JPanel transferTab = new JPanel();
public void initialize() {
ProviderManager.getInstance().addIQProvider(Gateway.ELEMENT_NAME, Gateway.NAMESPACE, new Gateway.Provider());
ProviderManager.getInstance().addIQProvider(Gateway.ELEMENT_NAME, Gateway.NAMESPACE, new Gateway.Provider());
LocalPreferences localPref = SettingsManager.getLocalPreferences();
useTab = localPref.getShowTransportTab();
SwingWorker thread = new SwingWorker() {
public Object construct() {
try {
@ -80,15 +93,26 @@ public class GatewayPlugin implements Plugin, ContactItemHandler {
}
public void finished() {
Boolean transportExists = (Boolean)get();
final JPanel commandPanel = SparkManager.getWorkspace().getCommandPanel();
transferTab.setLayout(new VerticalFlowLayout(0,0,0,true,true));
Boolean transportExists = (Boolean)get();
if (!transportExists) {
return;
}
if (TransportUtils.getTransports().size() > 0) {
final JPanel commandPanel = SparkManager.getWorkspace().getCommandPanel();
}
if (TransportUtils.getTransports().size() > 0 ) {
if(useTab)
{
SparkManager.getWorkspace().getWorkspacePane().addTab("Transports", SparkRes.getImageIcon(SparkRes.TRANSPORT_ICON), transferTab);
}
else
{
final JLabel dividerLabel = new JLabel(SparkRes.getImageIcon("DIVIDER_IMAGE"));
commandPanel.add(dividerLabel);
}
}
for (final Transport transport : TransportUtils.getTransports()) {
@ -181,8 +205,19 @@ public class GatewayPlugin implements Plugin, ContactItemHandler {
}
private void addTransport(final Transport transport) {
final GatewayButton button = new GatewayButton(transport);
uiMap.put(transport, button);
GatewayItem item = null;
if (useTab)
{
item = new GatewayTabItem(transport);
transferTab.add((GatewayTabItem)item);
}
else
{
item = new GatewayButton(transport);
}
uiMap.put(transport, item);
// transferTab.add(button);
// transferTab.add(new GatewayTabItem(transport));
}
private void registerPresenceListener() {
@ -199,8 +234,21 @@ public class GatewayPlugin implements Plugin, ContactItemHandler {
registered = false;
}
GatewayButton button = uiMap.get(transport);
GatewayItem button = uiMap.get(transport);
button.signedIn(registered);
SwingWorker worker = new SwingWorker() {
@Override
public Object construct() {
transferTab.revalidate();
transferTab.repaint();
return 41;
}
};
worker.start();
}
}
else if (packet instanceof Message) {
@ -244,7 +292,7 @@ public class GatewayPlugin implements Plugin, ContactItemHandler {
SparkManager.getSessionManager().addPresenceListener(new PresenceListener() {
public void presenceChanged(Presence presence) {
for (Transport transport : TransportUtils.getTransports()) {
GatewayButton button = uiMap.get(transport);
GatewayItem button = uiMap.get(transport);
if (button.isLoggedIn()) {
if (!presence.isAvailable()) {
return;

View File

@ -0,0 +1,320 @@
package org.jivesoftware.sparkimpl.plugin.gateways;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultListModel;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.spark.PresenceManager;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.component.VerticalFlowLayout;
import org.jivesoftware.spark.component.panes.CollapsiblePane;
import org.jivesoftware.spark.component.renderer.JPanelRenderer;
import org.jivesoftware.spark.ui.status.StatusBar;
import org.jivesoftware.spark.util.TaskEngine;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.plugin.gateways.transports.Transport;
import org.jivesoftware.sparkimpl.plugin.gateways.transports.TransportUtils;
public class GatewayTabItem extends CollapsiblePane implements GatewayItem {
/**
*
*/
private static final long serialVersionUID = 5589644402913737488L;
/**
*
*/
private boolean signedIn;
private Transport _transport;
private DefaultListModel model = new DefaultListModel();
private JList _transportMenu = new JList(model);
private JLabel _status = new JLabel();
private JPanel _listPanel = new JPanel(new VerticalFlowLayout(
VerticalFlowLayout.TOP, 10, 0, true, false));
private JLabel _statusIcon = new JLabel();
private RolloverButton _signInOut = new RolloverButton();
private RolloverButton _registerButton = new RolloverButton();
private JCheckBox _autoJoin = new JCheckBox();
private boolean _transportRegistered = false;
public GatewayTabItem(final Transport transport) {
this._transport = transport;
_transportRegistered = TransportUtils.isRegistered(
SparkManager.getConnection(), _transport);
this.setIcon(transport.getIcon());
_status.setForeground(Color.gray);
_status.setFont(new Font(getFont().getName(), Font.ITALIC, getFont()
.getSize()));
getTitlePane().add(_status);
this.setTitle(transport.getName());
_listPanel.setBackground(Color.lightGray);
_transportMenu.setCellRenderer(new JPanelRenderer());
this.setContentPane(_listPanel);
setCollapsed(true);
// Check if transport is already registered
if (_transportRegistered) {
// If yes, check if it is online
if (PresenceManager.isOnline(transport.getServiceName())) {
getTitlePane().setIcon(transport.getIcon());
_status.setText(Res.getString("online"));
setOnline();
} else {
getTitlePane().setIcon(transport.getInactiveIcon());
_status.setText(Res.getString("offline"));
setOffline();
}
} else {
// If not. set that transport is not registered yet
getTitlePane().setIcon(transport.getInactiveIcon());
_status.setText(Res.getString("offline"));
setNotRegistered();
}
createTransportMenu();
// Check if autojoin is enabled an join automatically
final StatusBar statusBar = SparkManager.getWorkspace().getStatusBar();
final Runnable registerThread = new Runnable() {
public void run() {
// Send directed presence if registered with this transport.
final boolean isRegistered = TransportUtils.isRegistered(
SparkManager.getConnection(), transport);
if (isRegistered) {
// Check if auto login is set.
boolean autoJoin = TransportUtils.autoJoinService(transport
.getServiceName());
if (autoJoin) {
Presence oldPresence = statusBar.getPresence();
Presence presence = new Presence(oldPresence.getType(),
oldPresence.getStatus(),
oldPresence.getPriority(),
oldPresence.getMode());
presence.setTo(transport.getServiceName());
SparkManager.getConnection().sendPacket(presence);
}
}
}
};
TaskEngine.getInstance().submit(registerThread);
}
private void createTransportMenu() {
_signInOut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (signedIn) {
final Presence offlinePresence = new Presence(
Presence.Type.unavailable);
offlinePresence.setTo(_transport.getServiceName());
SparkManager.getConnection().sendPacket(offlinePresence);
_statusIcon.setIcon(SparkRes
.getImageIcon(SparkRes.YELLOW_BALL));
} else {
final Presence onlinePresence = new Presence(
Presence.Type.available);
onlinePresence.setTo(_transport.getServiceName());
SparkManager.getConnection().sendPacket(onlinePresence);
_statusIcon.setIcon(SparkRes
.getImageIcon(SparkRes.YELLOW_BALL));
}
}
});
_autoJoin.setText(Res.getString("menuitem.sign.in.at.login"));
// If transport is registered, we can check if the autojoin is enabled
if (_transportRegistered) {
_autoJoin.setSelected(TransportUtils.autoJoinService(_transport
.getServiceName()));
_registerButton.setText(Res
.getString("menuitem.delete.login.information"));
_signInOut.setEnabled(true);
} else {
setNotRegistered();
}
_autoJoin.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TransportUtils.setAutoJoin(_transport.getServiceName(), _autoJoin.isSelected());
}
});
_registerButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// If transport is registered we should show the
// "delete information" gui
if (TransportUtils.isRegistered(SparkManager.getConnection(),
_transport)) {
int confirm = JOptionPane.showConfirmDialog(SparkManager
.getMainWindow(), Res.getString(
"message.disable.transport", _transport.getName()),
Res.getString("title.disable.transport"),
JOptionPane.YES_NO_OPTION);
if (confirm == JOptionPane.YES_OPTION) {
try {
TransportUtils.unregister(
SparkManager.getConnection(),
_transport.getServiceName());
setNotRegistered();
} catch (XMPPException e1) {
Log.error(e1);
}
}
} else {
// If transport is not registered we should show the
// register gui
TransportRegistrationDialog registrationDialog = new TransportRegistrationDialog(
_transport.getServiceName());
registrationDialog.invoke();
// Set user as offline while he fills in the login
// information
setOffline();
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// If user canceled the register window, he is sill
// not registrated
setNotRegistered();
}
};
registrationDialog.addCancelActionListener(al);
}
}
});
JPanel signPanel = new JPanel(new BorderLayout());
signPanel.setBackground(Color.lightGray);
signPanel.add(_statusIcon, BorderLayout.WEST);
signPanel.add(_signInOut, BorderLayout.CENTER);
_listPanel.add(signPanel);
_listPanel.add(_autoJoin);
_listPanel.add(_registerButton);
}
// Set GUI when user is not registered
private void setNotRegistered() {
_transportRegistered = false;
_autoJoin.setSelected(false);
_registerButton.setText(Res
.getString("menuitem.enter.login.information"));
_signInOut.setEnabled(false);
_signInOut.setText(Res.getString("menuitem.sign.in"));
_autoJoin.setEnabled(false);
_statusIcon.setIcon(SparkRes.getImageIcon(SparkRes.BLUE_BALL));
}
// Set GUI when user is registered but offline
private void setOffline() {
_transportRegistered = true;
_autoJoin.setSelected(TransportUtils.autoJoinService(_transport
.getServiceName()));
_registerButton.setText(Res
.getString("menuitem.delete.login.information"));
_signInOut.setEnabled(true);
_signInOut.setText(Res.getString("menuitem.sign.in"));
_autoJoin.setEnabled(true);
_statusIcon.setIcon(SparkRes.getImageIcon(SparkRes.RED_BALL));
}
// Set GUI when user is online with rigistered transport
private void setOnline() {
_statusIcon.setIcon(SparkRes.getImageIcon(SparkRes.GREEN_BALL));
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
_autoJoin.setSelected(TransportUtils.autoJoinService(_transport
.getServiceName()));
}
});
_signInOut.setText(Res.getString("menuitem.sign.out"));
_signInOut.setEnabled(true);
_autoJoin.setEnabled(true);
_registerButton.setText(Res
.getString("menuitem.delete.login.information"));
}
// Change gui if transport signed on or off
public void signedIn(final boolean signedIn) {
if (!signedIn) {
getTitlePane().setIcon(_transport.getInactiveIcon());
_status.setText(Res.getString("offline"));
if (!_transportRegistered) {
_statusIcon.setIcon(SparkRes.getImageIcon(SparkRes.BLUE_BALL));
_signInOut.setText(Res.getString("menuitem.sign.in"));
} else {
_statusIcon.setIcon(SparkRes.getImageIcon(SparkRes.RED_BALL));
setOffline();
}
} else {
getTitlePane().setIcon(_transport.getIcon());
_status.setText(Res.getString("online"));
setOnline();
}
this.signedIn = signedIn;
}
public boolean isLoggedIn() {
return signedIn;
}
}

View File

@ -32,6 +32,7 @@ import org.jivesoftware.spark.util.ResourceUtils;
import org.jivesoftware.sparkimpl.plugin.gateways.transports.Transport;
import org.jivesoftware.sparkimpl.plugin.gateways.transports.TransportUtils;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
@ -72,6 +73,7 @@ public class TransportRegistrationDialog extends JPanel implements ActionListene
* @param serviceName the name of the transport service.
*/
public TransportRegistrationDialog(String serviceName) {
setLayout(new GridBagLayout());
this.serviceName = serviceName;
@ -128,6 +130,7 @@ public class TransportRegistrationDialog extends JPanel implements ActionListene
dialog.add(this);
dialog.pack();
dialog.setSize(400, 200);
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
GraphicUtils.centerWindowOnComponent(dialog, SparkManager.getMainWindow());
dialog.setVisible(true);
@ -145,6 +148,11 @@ public class TransportRegistrationDialog extends JPanel implements ActionListene
});
}
public void addCancelActionListener(ActionListener a)
{
cancelButton.addActionListener(a);
}
public String getScreenName() {
return usernameField.getText();
}
@ -192,6 +200,7 @@ public class TransportRegistrationDialog extends JPanel implements ActionListene
}
public void keyTyped(KeyEvent keyEvent) {
}
@ -200,9 +209,6 @@ public class TransportRegistrationDialog extends JPanel implements ActionListene
actionPerformed(null);
}
if (keyEvent.getKeyCode() == KeyEvent.VK_ESCAPE) {
dialog.dispose();
}
}
public void keyReleased(KeyEvent keyEvent) {

View File

@ -922,6 +922,16 @@ public class LocalPreferences {
return getInt("stunFallbackPort", 3478);
}
public boolean getShowTransportTab()
{
return getBoolean("useTabForTransport", false);
}
public void setShowTransportTab(boolean value)
{
setBoolean("useTabForTransport", value);
}
public String getAvailableCodecs() {
return getString("AvailableCodecs", null);
}

View File

@ -355,6 +355,7 @@ checkbox.use.krbconf = Use krb5.conf or krb5.ini
checkbox.use.krb.dns = Use DNS
checkbox.use.specify.below = Specify below
checkbox.use.pki.authentication = Use PKI authentication
checkbox.transport.tab.setting = Show available transports in tab (requires restart)
delete.log.permanently = Permanently delete log
delete.permanently = Permanently delete?

View File

@ -235,6 +235,7 @@ checkbox.use.krbconf = Verwende krb5.conf oder krb5.ini
checkbox.use.krb.dns = Verwende DNS
checkbox.use.specify.below = Specify Below
checkbox.use.pki.authentication = Verwende PKI Authentifizierung
checkbox.transport.tab.setting = Zeige verf<72>gbare Transports in einem Tab an (ben<65>tigt Neustart von Spark)
label.user.on.public.network = Teilnehmer befindet sich in einem <20>ffentlichen Netzwerk
label.change.password.to = &Neues Passwort eingeben
label.username = &Benutzername

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B