/**
* Warlock, the open-source cross-platform game client
*
* Copyright 2008, Warlock LLC, and individual contributors as indicated
* by the @authors tag.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package cc.warlock.rcp.stormfront.ui.prefs;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import cc.warlock.core.configuration.Account;
import cc.warlock.core.configuration.Profile;
import cc.warlock.core.stormfront.network.ISGEGame;
import cc.warlock.core.stormfront.network.SGEConnection;
import cc.warlock.core.stormfront.network.SGEConnectionListener;
import cc.warlock.rcp.ui.ComboField;
public class ProfileEditDialog extends Dialog {
protected Account account;
protected Profile profile;
protected ComboField gameField;
protected ComboField characterField;
protected Label statusLabel;
public ProfileEditDialog (Shell parentShell, Account account)
{
super(parentShell);
this.account = account;
}
public ProfileEditDialog (Shell parentShell, Account account, Profile profile)
{
this(parentShell, account);
this.profile = profile;
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
if (profile == null)
newShell.setText("Add a new profile");
else
newShell.setText("Update an existing profile");
}
@Override
protected Control createDialogArea(Composite parent) {
Composite main = new Composite(parent, SWT.NONE);
main.setLayout(new GridLayout(2, false));
main.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
Label banner = new Label(main, SWT.NONE);
GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.horizontalSpan = 2;
banner.setLayoutData(data);
if (profile == null) {
banner.setText("Add a new profile");
} else {
banner.setText("Update an existing profile");
}
banner.setFont(JFaceResources.getHeaderFont());
new Label(main, SWT.NONE).setText("Game:");
gameField = new ComboField(main, SWT.BORDER);
gameField.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
SelectionListener listener = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (getButton(OK) != null)
{
getButton(OK).setEnabled(false);
statusLabel.setText("");
}
}
};
gameField.getCombo().addSelectionListener(listener);
if (profile != null)
gameField.getCombo().setText(profile.getGameName());
new Label(main, SWT.NONE).setText("Password:");
characterField = new ComboField(main, SWT.BORDER);
characterField.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
if (profile != null)
characterField.getCombo().setText(profile.getName());
statusLabel = new Label(main, SWT.NONE);
data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.horizontalSpan = 2;
statusLabel.setLayoutData(data);
updateData();
return main;
}
protected SGEConnection connection;
protected void updateData()
{
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, OK, "OK", true);
createButton(parent, CANCEL, "Cancel", false);
if (profile == null)
{
getButton(OK).setEnabled(false);
}
}
protected static class ProfileRetriever extends SGEConnectionListener
{
protected Account account;
protected boolean loggedIn, gettingCharacters;
protected int errorCode = -1;
protected List<? extends ISGEGame> games;
protected Map<String, String> characters;
protected SGEConnection connection;
public ProfileRetriever (Account account)
{
this.account = account;
loggedIn = false;
connection = new SGEConnection();
connection.setRetrieveGameInfo(false);
connection.addSGEConnectionListener(this);
connection.connect();
}
@Override
public void loginReady(SGEConnection connection) {
connection.login(account.getAccountName(), account.getPassword());
}
@Override
public void gamesReady(SGEConnection connection, List<? extends ISGEGame> games) {
this.games = games;
loggedIn = true;
}
@Override
public void charactersReady(SGEConnection connection, Map<String, String> characters) {
this.characters = characters;
gettingCharacters = false;
}
@Override
public void sgeError(SGEConnection connection, int errorCode) {
this.errorCode = errorCode;
loggedIn = false;
try {
connection.disconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List<? extends ISGEGame> getGames() {
while (!loggedIn && errorCode != -1)
{
try {
Thread.sleep((long)300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return games;
}
public int getErrorCode () {
return errorCode;
}
public Map<String, String> getCharacters (ISGEGame game) {
gettingCharacters = true;
connection.selectGame(game.getGameCode());
while (gettingCharacters && errorCode == -1)
{
try {
Thread.sleep((long)300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return characters;
}
}
// public ISGEGame getGame ()
// {
// return game;
// }
//
// public String getCharacterName ()
// {
// return characterName;
// }
//
// public String getCharacterCode ()
// {
// return characterCode;
// }
}