package org.docear.plugin.services.features.user.view;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JToolBar;
import javax.swing.border.EmptyBorder;
import org.docear.plugin.core.DocearController;
import org.docear.plugin.core.event.DocearEvent;
import org.freeplane.core.util.TextUtils;
public class WorkspaceDocearServiceConnectionBar extends JToolBar {
public static enum CONNECTION_STATE {
CONNECTED,
DISCONNECTED,
UPLOADING,
DISABLED,
NO_CREDENTIALS
}
private static final long serialVersionUID = 1L;
public static final String ACTION_COMMAND_TOGGLE_CONNECTION_STATE = "toggle_connection_state";
public static final String CONNECTION_BAR_CLICKED = "CONNECTION_BAR_CLICKED";
protected static Insets nullInsets = new Insets(0, 0, 0, 0);
protected static Insets marginInsets = new Insets(2, 2, 2, 2);
private static Icon onIcon = new ImageIcon(WorkspaceDocearServiceConnectionBar.class.getResource("/icons/arrow-refresh-on.png"));
private static Icon offIcon = new ImageIcon(WorkspaceDocearServiceConnectionBar.class.getResource("/icons/arrow-refresh-off.png"));
private final JButton button;
private final JLabel lblUsername;
private final JLabel lblConnectionState;
private final MouseListener mouseClickDispatcher = new MouseListener() {
public void mouseReleased(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {
DocearController.getController().getEventQueue().dispatchEvent(new DocearEvent(CONNECTION_BAR_CLICKED, e));
}
};
private CONNECTION_STATE connectionState;
private JLabel lblNoCredentials;
public WorkspaceDocearServiceConnectionBar() {
setMargin(nullInsets);
setFloatable(false);
setRollover(true);
button = add(new AbstractAction("Connection", onIcon) {
private static final long serialVersionUID = 1L;
public void actionPerformed(ActionEvent e) {
DocearController.getController().getEventQueue().dispatchEvent(new DocearEvent(WorkspaceDocearServiceConnectionBar.this, ACTION_COMMAND_TOGGLE_CONNECTION_STATE));
}
});
configureComponent(button);
button.setDisabledIcon(new ImageIcon(this.getClass().getResource("/icons/arrow-refresh-disabled.png")));
lblUsername = new JLabel();
lblUsername.setBorder(new EmptyBorder(marginInsets));
lblUsername.addMouseListener(mouseClickDispatcher);
lblUsername.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
add(lblUsername);
lblConnectionState = new JLabel(TextUtils.getText("docear.service.connect.bar.status.1")+":");
lblConnectionState.setBorder(new EmptyBorder(marginInsets));
lblConnectionState.addMouseListener(mouseClickDispatcher);
lblConnectionState.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
add(lblConnectionState);
lblNoCredentials = new JLabel(TextUtils.getText("docear.service.connect.bar.register"));
lblNoCredentials.setIcon(new ImageIcon(DocearController.class.getResource("/images/docear16.png")));
lblNoCredentials.setBorder(new EmptyBorder(marginInsets));
lblNoCredentials.addMouseListener(mouseClickDispatcher);
lblNoCredentials.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
/***********************************************************************************
* METHODS
**********************************************************************************/
public void setUsername(String name) {
this.lblUsername.setText(name);
}
public void setConnectionState(CONNECTION_STATE state) {
connectionState = state;
this.removeAll();
if(state == CONNECTION_STATE.NO_CREDENTIALS) {
this.add(lblNoCredentials);
}
else {
add(button);
add(lblUsername);
add(lblConnectionState);
this.lblConnectionState.setText(TextUtils.getText("docear.service.connect.bar.status."+state.ordinal()));
}
}
public CONNECTION_STATE getConnectionState() {
return connectionState;
}
public void setEnabled(boolean enabled) {
this.button.setEnabled(enabled);
lblUsername.setEnabled(enabled);
lblConnectionState.setEnabled(enabled);
super.setEnabled(enabled);
}
public void allowTransmission(boolean enabled) {
if(enabled) {
button.setIcon(onIcon);
}
else {
button.setIcon(offIcon);
}
button.repaint();
}
protected void configureComponent(final Component comp) {
if (!(comp instanceof AbstractButton)) {
return;
}
final AbstractButton abstractButton = (AbstractButton) comp;
final String actionName = (String) abstractButton.getAction().getValue(Action.NAME);
abstractButton.setName(actionName);
if (null != abstractButton.getIcon()) {
final String text = abstractButton.getText();
final String toolTipText = abstractButton.getToolTipText();
if (text != null) {
if (toolTipText == null) {
abstractButton.setToolTipText(text);
}
abstractButton.setText(null);
}
}
if (System.getProperty("os.name").equals("Mac OS X")) {
abstractButton.putClientProperty("JButton.buttonType", "segmented");
abstractButton.putClientProperty("JButton.segmentPosition", "middle");
final Dimension buttonSize = new Dimension(22, 22);
abstractButton.setPreferredSize(buttonSize);
abstractButton.setFocusPainted(false);
}
abstractButton.setFocusable(false);
abstractButton.setMargin(nullInsets);
}
}