/** * 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. */ /* * Created on Dec 31, 2004 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package cc.warlock.rcp.stormfront.ui.wizards; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import cc.warlock.core.configuration.Account; import cc.warlock.core.configuration.Profile; import cc.warlock.core.stormfront.ProfileConfiguration; import cc.warlock.core.stormfront.network.SGEConnection; import cc.warlock.core.stormfront.network.SGEConnectionListener; import cc.warlock.rcp.stormfront.adapters.SWTSGEConnectionListenerAdapter; import cc.warlock.rcp.stormfront.ui.util.LoginUtil; import cc.warlock.rcp.ui.WarlockSharedImages; import cc.warlock.rcp.ui.WarlockWizardDialog; /** * @author Marshall * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class CharacterSelectWizardPage extends WizardPage { private Table characters; private Map<String,String> characterMap; private TableViewer characterViewer; private String selectedCharacterCode; private Listener listener; private boolean complete; public CharacterSelectWizardPage (SGEConnection connection) { super ("Select a character.", "Please select a character,", WarlockSharedImages.getImageDescriptor(WarlockSharedImages.IMG_WIZBAN_WARLOCK)); complete = false; this.characterMap = new HashMap<String,String>(); listener = new Listener(); connection.addSGEConnectionListener(new SWTSGEConnectionListenerAdapter(listener)); System.out.println("CharacterSelectWizardPage constructor"); } public void createControl(Composite parent) { // TODO Auto-generated method stub Composite controls = new Composite(parent, SWT.NONE); FillLayout layout = new FillLayout(); controls.setLayout(layout); characters = new Table(controls, SWT.BORDER | SWT.SINGLE); characters.setEnabled(false); characterViewer = new TableViewer (characters); characterViewer.setContentProvider(new CharacterContentProvider()); characterViewer.setLabelProvider(new CharacterLabelProvider()); characterViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { characterSelected(event.getSelection()); complete = true; getWizard().getContainer().updateButtons(); } }); characterViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { characterSelected(characterViewer.getSelection()); complete = true; if (getWizard().getContainer() instanceof WarlockWizardDialog) { WarlockWizardDialog dialog = (WarlockWizardDialog) getWizard().getContainer(); dialog.finish(); } } }); setControl(controls); } private class CharacterContentProvider implements IStructuredContentProvider { public Object[] getElements(Object inputElement) { Map<String,String> characterMap = (Map<String,String>) inputElement; return characterMap.keySet().toArray(); } public void dispose() { // TODO Auto-generated method stub } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // TODO Auto-generated method stub } } private class CharacterLabelProvider extends LabelProvider { public String getText(Object element) { return (String) characterMap.get(element); } public Image getImage(Object element) { if (element.equals(SGEConnection.NEW_CHARACTER_CODE)) { return WarlockSharedImages.getImage(WarlockSharedImages.IMG_NEW_CHARACTER); } else { return WarlockSharedImages.getImage(WarlockSharedImages.IMG_CHARACTER); } } } private void characterSelected (ISelection selection) { if (selection instanceof IStructuredSelection) { IStructuredSelection selection2 = (IStructuredSelection) selection; selectedCharacterCode = (String) selection2.getFirstElement(); } } /** * @return Returns the selectedCharacterCode. */ public String getSelectedCharacterCode() { return selectedCharacterCode; } public String getSelectedCharacterName() { return (String) characterMap.get(selectedCharacterCode); } public Listener getListener () { return listener; } public boolean isPageComplete() { return complete; } public class Listener extends SGEConnectionListener { private IProgressMonitor monitor; public void setProgressMonitor (IProgressMonitor monitor) { this.monitor = monitor; } public void charactersReady(SGEConnection connection, Map<String,String> characters) { // CharacterSelectWizardPage.this.characterMap.clear(); CharacterSelectWizardPage.this.characterMap = characters; characterMap.put(SGEConnection.NEW_CHARACTER_CODE, "Create a new character"); characterViewer.setInput(characters); CharacterSelectWizardPage.this.characters.setEnabled(true); } public void readyToPlay (SGEConnection connection, Map<String,String> loginProperties) { if (monitor != null) { monitor.worked(1); //monitor.done(); } GameSelectWizardPage gameSelectPage = (GameSelectWizardPage) getPreviousPage(); AccountWizardPage accountPage = (AccountWizardPage) getPreviousPage().getPreviousPage(); Account account = accountPage.getSavedAccount(); if (account != null && !getSelectedCharacterCode().equals(SGEConnection.NEW_CHARACTER_CODE)) { Collection<Profile> savedProfiles = account.getProfiles(); boolean exists = false; if (savedProfiles != null && savedProfiles.size() > 0) { for (Profile profile : savedProfiles) { if (getSelectedCharacterName().equals(profile.getName())) { exists = true; break; } } } if (!exists) { boolean response = MessageDialog.openQuestion(getShell(), "Save Profile?", "Would you like to save the character \"" + getSelectedCharacterName() + "\" as a new profile?"); if (response) { Profile profile = new Profile(account, getSelectedCharacterCode(), getSelectedCharacterName(), gameSelectPage.getSelectedGameCode(), gameSelectPage.getSelectedGameName()); ProfileConfiguration.getProfileConfiguration().save(); // should be auto-added to the account list by ctor } } } LoginUtil.connectAndOpenGameView(loginProperties, getSelectedCharacterName()); } } }