blob: e3f6829538663eec2d2a0df14dd7219dadb26054 (
plain) (
tree)
|
|
package org.openslx.dozmod.gui.window;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import javax.swing.JRadioButton;
import org.openslx.bwlp.thrift.iface.Satellite;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.Gui.GuiCallable;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.window.layout.SatelliteListWindowLayout;
/**
* Window for selecting an available satellite or setting custom ip.
*/
@SuppressWarnings("serial")
public class SatelliteListWindow extends SatelliteListWindowLayout implements UiFeedback {
private Satellite satellite = null;
public interface UserAddedCallback {
public void userAdded(UserInfo user, SatelliteListWindow window);
}
private SatelliteListWindow(final Window modalParent, List<Satellite> satList) {
super(modalParent, satList);
// Prepare doubleclick listener
MouseListener radioDoubleClick = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
if (e.getSource() instanceof JRadioButton) {
((JRadioButton) e.getSource()).setSelected(true);
}
prepareSelection();
if (satellite != null) {
dispose();
}
}
}
};
// deactivate the custom field when selecting a satellite to make things clearer for user
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txtCustomAddress.setEnabled(rdoCusomAddress.isSelected());
}
};
for (JRadioButton radio : radioToSat.keySet()) {
radio.addActionListener(listener);
}
rdoCusomAddress.addActionListener(listener);
// Check, whether we have any satellites
String lastSat = Config.getLastSatellite();
if (satList != null && !satList.isEmpty()) {
for (Entry<JRadioButton, Satellite> entry : radioToSat.entrySet()) {
if (!lastSat.isEmpty()) {
Satellite sat = entry.getValue();
if (sat.displayName.equals(lastSat)) {
entry.getKey().setSelected(true);
entry.getKey().requestFocus();
txtCustomAddress.setEnabled(false);
lastSat = "";
}
}
entry.getKey().addMouseListener(radioDoubleClick);
}
} else {
rdoCusomAddress.setSelected(true);
txtCustomAddress.requestFocus();
}
if (lastSat.startsWith("@")) {
txtCustomAddress.setText(lastSat.substring(1));
rdoCusomAddress.setSelected(true);
txtCustomAddress.requestFocus();
}
// Cancel button
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
// Continue button
btnContinue.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
prepareSelection();
if (satellite != null) {
if (rdoCusomAddress.isSelected()) {
Config.setLastSatellite("@" + txtCustomAddress.getText());
} else if (satellite.displayName != null && !satellite.displayName.isEmpty()) {
Config.setLastSatellite(satellite.displayName);
}
dispose();
} else {
Gui.showMessageBox(rootPane, "Kein Satellit ausgewählt", MessageType.ERROR, null, null);
}
}
});
getRootPane().setDefaultButton(btnContinue);
Gui.centerShellOverShell(modalParent, this);
}
private void prepareSelection() {
// satellite is selected
if (!rdoCusomAddress.isSelected()) {
// check, which satellite is selected
for (Entry<JRadioButton, Satellite> entry : radioToSat.entrySet()) {
if (entry.getKey().isSelected()) {
satellite = entry.getValue();
break;
}
}
}
// custom button selected
if (rdoCusomAddress.isSelected() && !txtCustomAddress.getText().isEmpty()) {
satellite = new Satellite();
satellite.addressList = new ArrayList<String>();
satellite.addressList.add(txtCustomAddress.getText());
}
}
private Satellite runAndReturn() {
setVisible(true);
return satellite;
}
/**
* Open a new SatelliteListWindow
*
* @param modalParent
* @param satList The list of satellites to display.
* @return satellite with address to use, or null on error/cancel
*/
public static Satellite open(final Window modalParent, final List<Satellite> satList) {
return Gui.syncExec(new GuiCallable<Satellite>() {
@Override
public Satellite run() {
return new SatelliteListWindow(modalParent, satList).runAndReturn();
}
});
}
@Override
public boolean wantConfirmQuit() {
return false;
}
@Override
public void escapePressed() {
dispose();
}
}
|