package org.openslx.dozmod.gui.window.layout;
import org.apache.log4j.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.util.ResourceLoader;
public abstract class LoginWindowLayout extends Composite {
private static final Logger LOGGER = Logger.getLogger(LoginWindowLayout.class);
// TODO This has nothing to to with the layout
protected static enum LOGIN_TYPE {
ECP(0),
TEST_ACCOUNT(1),
DIRECT_CONNECT(2);
public final int id;
private LOGIN_TYPE(final int id) {
this.id = id;
}
}
// authentication method to use for login attempts
protected LOGIN_TYPE loginType = null;
// textfields for the username/password
protected Text usernameText;
protected Text passwordText;
// ComboBox/label for the IDP
protected final Combo idpCombo;
protected final Label idpText;
// buttons
protected final Button loginButton;
protected final Button saveUsernameCheck;
protected final Button[] authButtons;
private static final String title = "bwSuite - Login";
private static final String authenticationGroupLabel = "Authentifizierungsart";
/**
* Create a new login composite
*
* @param mainShell
* The shell it should be added to
*/
public LoginWindowLayout(final Shell mainShell) {
super(mainShell, SWT.NONE);
// title for composite
mainShell.setText(title);
// left authentication selection and right loginmask
GridLayout gridLayout = new GridLayout(2, true);
this.setLayout(gridLayout);
Label titlePicture = new Label(this, SWT.NONE);
titlePicture.setImage(loadImage());
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
gridData.horizontalAlignment = SWT.CENTER;
titlePicture.setLayoutData(gridData);
// group for the authentication method.
// groups have borders and a title
Group authGroup = new Group(this, SWT.NONE);
authGroup.setText(authenticationGroupLabel);
gridLayout = new GridLayout();
gridLayout.numColumns = 1;
authGroup.setLayout(gridLayout);
gridData = new GridData(GridData.FILL, GridData.FILL, false, false);
gridData.heightHint = 150;
authGroup.setLayoutData(gridData);
// add the authentication method selection buttons
authButtons = new Button[3];
authButtons[LOGIN_TYPE.ECP.id] = new Button(authGroup, SWT.RADIO);
authButtons[LOGIN_TYPE.ECP.id].setText("Authentifizierung über bwIDM");
gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
authButtons[LOGIN_TYPE.ECP.id].setLayoutData(gridData);
authButtons[LOGIN_TYPE.TEST_ACCOUNT.id] = new Button(authGroup, SWT.RADIO);
authButtons[LOGIN_TYPE.TEST_ACCOUNT.id].setText("Test-Zugang mit festem Benutzernamen");
gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
authButtons[LOGIN_TYPE.TEST_ACCOUNT.id].setLayoutData(gridData);
authButtons[LOGIN_TYPE.DIRECT_CONNECT.id] = new Button(authGroup, SWT.RADIO);
authButtons[LOGIN_TYPE.DIRECT_CONNECT.id].setText("Direkte Verbindung zum Satelliten");
gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
authButtons[LOGIN_TYPE.DIRECT_CONNECT.id].setLayoutData(gridData);
// group for the login mask
final Group loginGroup = new Group(this, SWT.NONE);
loginGroup.setText("Zugangsdaten");
gridLayout = new GridLayout();
gridLayout.numColumns = 2;
loginGroup.setLayout(gridLayout);
gridData = new GridData(GridData.FILL, GridData.CENTER, true, false);
gridData.heightHint = 150;
loginGroup.setLayoutData(gridData);
idpText = new Label(loginGroup, SWT.NONE);
idpText.setText("IdP:");
idpCombo = new Combo(loginGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
idpCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
new Label(loginGroup, SWT.NONE).setText("Benutzername:");
usernameText = new Text(loginGroup, SWT.SINGLE | SWT.BORDER);
usernameText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
new Label(loginGroup, SWT.NONE).setText("Passwort:");
passwordText = new Text(loginGroup, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD);
passwordText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
// login button
loginButton = new Button(loginGroup, SWT.PUSH);
loginButton.setText("Login");
saveUsernameCheck = new Button(loginGroup, SWT.CHECK);
saveUsernameCheck.setText("Benutzername speichern");
}
private Image loadImage() {
try {
ImageData image = ResourceLoader.getImage("/img/Logo_bwLehrpool.png");
Rectangle screenSize = Gui.getMonitorFromRectangle(getShell().getBounds(), true).getBounds();
float scaleX = (float)screenSize.width / (float)image.width;
float scaleY = (float)screenSize.height / (float)image.height;
final float scaling;
if (scaleX < scaleY) {
scaling = scaleX / 2;
} else {
scaling = scaleY / 2;
}
image = image.scaledTo((int)(image.width * scaling), (int)(image.height * scaling));
return new Image(Gui.display, image);
} catch (Exception e) {
LOGGER.warn("Cannot load image", e);
}
return null;
}
}