/*
* -----------------------------------------------------------------------
* File: $HeadURL: http://keith-laptop/svn/krs/LanguageTest/trunk/org.thanlwinsoft.languagetest/src/org/thanlwinsoft/languagetest/eclipse/wizards/TestTypePage.java $
* Revision $LastChangedRevision: 1388 $
* Last Modified: $LastChangedDate: 2009-01-31 19:32:00 +0700 (Sat, 31 Jan 2009) $
* Last Change by: $LastChangedBy: keith $
* -----------------------------------------------------------------------
* Copyright (C) 2007 Keith Stribley <devel@thanlwinsoft.org>
*
* This library 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 library 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 library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
* -----------------------------------------------------------------------
*/
package org.thanlwinsoft.languagetest.eclipse.wizards;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Combo;
import org.thanlwinsoft.languagetest.MessageUtil;
import org.thanlwinsoft.languagetest.eclipse.LanguageTestPlugin;
import org.thanlwinsoft.languagetest.eclipse.workspace.WorkspaceLanguageManager;
import org.thanlwinsoft.languagetest.language.test.TestType;
import org.thanlwinsoft.languagetest.language.test.UniversalLanguage;
import org.thanlwinsoft.languagetest.language.text.Iso639;
import org.thanlwinsoft.schemas.languagetest.module.LangType;
import org.thanlwinsoft.schemas.languagetest.module.LangTypeType;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
/**
* @author keith
*
*/
public class TestTypePage extends WizardPage
{
Composite parent = null;
private Group group = null;
private Label label = null;
private Combo userCombo = null;
private Label nativeLabel = null;
private Combo nativeCombo = null;
private Label foreignLabel = null;
private Combo foreignCombo = null;
private UniversalLanguage [] nativeLangs = null;
private UniversalLanguage [] foreignLangs = null;
private Label testTypeLabel = null;
private Button flashCardRadio = null;
private Button readingRadio = null;
private Button writingRadio = null;
private Button listeningRadio = null;
private Label paddingLabel1 = null;
private Label paddingLabel2 = null;
private Label paddingLabel3 = null;
private Combo maxItemsCombo = null;
private Label maxItemsLabel = null;
public final static String NATIVE_TEST_LANG_PREF = "NativeTestLang";
public final static String FOREIGN_TEST_LANG_PREF = "ForeignTestLang";
private final static int [] MAX_ITEMS = { -1, 10, 25, 50, 100, 200, 500 };
/**
* @param pageName
*/
protected TestTypePage(String pageName)
{
super(pageName);
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent)
{
this.parent = parent;
createGroup();
setControl(group);
checkFields();
}
/**
* This method initializes group
*
*/
private void createGroup()
{
group = new Group(parent, SWT.NONE);
label = new Label(group, SWT.NONE);
label.setText(MessageUtil.getString("Username"));
GridLayout layout = new GridLayout();
layout.numColumns = 2;
group.setLayout(layout);
createUserCombo();
nativeLabel = new Label(group, SWT.NONE);
nativeLabel.setText(MessageUtil.getString("NativeLang"));
createNativeCombo();
foreignLabel = new Label(group, SWT.NONE);
foreignLabel.setText(MessageUtil.getString("ForeignLang"));
createForeignCombo();
testTypeLabel = new Label(group, SWT.NONE);
testTypeLabel.setText(MessageUtil.getString("TestTypeLabel"));
flashCardRadio = new Button(group, SWT.RADIO);
flashCardRadio.setEnabled(false);
flashCardRadio
.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
{
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
checkFields();
}
});
paddingLabel1 = new Label(group, SWT.NONE);
paddingLabel1.setVisible(false);
readingRadio = new Button(group, SWT.RADIO);
readingRadio.setEnabled(false);
readingRadio.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
{
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
checkFields();
}
});
paddingLabel2 = new Label(group, SWT.NONE);
paddingLabel2.setVisible(false);
writingRadio = new Button(group, SWT.RADIO);
writingRadio.setEnabled(false);
writingRadio.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
{
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
checkFields();
}
});
paddingLabel3 = new Label(group, SWT.NONE);
paddingLabel3.setVisible(false);
listeningRadio = new Button(group, SWT.RADIO);
listeningRadio.setEnabled(false);
listeningRadio.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
{
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
checkFields();
}
});
maxItemsLabel = new Label(group, SWT.NONE);
maxItemsLabel.setText(MessageUtil.getString("MaxTestItems"));
createMaxItemsCombo();
setRadioText();
}
/**
* Set the radio text for the currently selected languages.
*
*/
private void setRadioText()
{
int ni = nativeCombo.getSelectionIndex();
int fi = foreignCombo.getSelectionIndex();
if (ni > -1 && fi > -1)
{
String nativeCode = nativeLangs[ni].getLanguageCode();
String nativeLang = Iso639.getDescription(nativeCode);
String foreignCode = foreignLangs[fi].getLanguageCode();
String foreignLang = Iso639.getDescription(foreignCode);
flashCardRadio.setText(MessageUtil.getString("TestTypeFlashCards",
nativeLang, foreignLang));
readingRadio.setText(MessageUtil.getString("TestTypeReading",
nativeLang, foreignLang));
writingRadio.setText(MessageUtil.getString("TestTypeWriting",
nativeLang, foreignLang));
listeningRadio.setText(MessageUtil.getString("TestTypeListening",
nativeLang, foreignLang));
flashCardRadio.setEnabled(true);
readingRadio.setEnabled(true);
writingRadio.setEnabled(true);
listeningRadio.setEnabled(true);
group.pack();
}
}
/**
* Check whether the field entries are valid
*/
private void checkFields()
{
if (userCombo.getSelectionIndex() > -1 &&
nativeCombo.getSelectionIndex() > -1 &&
foreignCombo.getSelectionIndex() > -1 &&
(flashCardRadio.getSelection() ||
readingRadio.getSelection() ||
writingRadio.getSelection() ||
listeningRadio.getSelection()))
{
setPageComplete(true);
}
else
{
setMessage(MessageUtil.getString("IncompleteTestType"));
setPageComplete(false);
}
}
/**
* This method initializes userCombo
*
*/
private void createUserCombo()
{
userCombo = new Combo(group, SWT.NONE);
IProject [] userProjects = WorkspaceLanguageManager.findUserProjects();
String [] userNames = new String[userProjects.length];
for (int i = 0; i < userProjects.length; i++)
{
userNames[i] = userProjects[i].getName();
}
userCombo.setItems(userNames);
if (userNames.length == 1) userCombo.select(0);
if (userNames.length == 0)
{
MessageDialog.openWarning(group.getShell(),
MessageUtil.getString("NoUsersTitle"),
MessageUtil.getString("NoUsersMessage"));
}
}
protected ScopedPreferenceStore getPrefStore(IProject userProject)
{
ProjectScope configScope = new ProjectScope(userProject);
ScopedPreferenceStore prefStore =
new ScopedPreferenceStore(configScope, LanguageTestPlugin.ID);
return prefStore;
}
/**
* This method initializes nativeCombo
*
*/
private void createNativeCombo()
{
nativeCombo = new Combo(group, SWT.NONE);
IProject userProject = WorkspaceLanguageManager.getUserProject();
LangTypeType.Enum type = LangTypeType.NATIVE;
HashMap<String, LangType> map = WorkspaceLanguageManager.findActiveLanguages(userProject, type);
Iterator<Map.Entry<String,LangType>> ie = map.entrySet().iterator();
String [] items = new String[map.size()];
nativeLangs = new UniversalLanguage[map.size()];
String prevLang = getPrefStore(userProject).getString(FOREIGN_TEST_LANG_PREF);
int selection = 0;
int i = 0;
while (ie.hasNext())
{
Map.Entry<String,LangType> entry = ie.next();
nativeLangs[i] = new UniversalLanguage(entry.getKey().toString());
items[i] = nativeLangs[i].getDescription();
if (nativeLangs[i].getCode().equals(prevLang))
selection = i;
i++;
}
nativeCombo.setItems(items);
if (items.length > 0)
{
nativeCombo.select(selection);
}
nativeCombo.addSelectionListener(new org.eclipse.swt.events.SelectionListener()
{
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
setRadioText();
}
public void widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent e)
{
}
});
}
/**
* This method initializes foreignCombo
*
*/
private void createForeignCombo()
{
foreignCombo = new Combo(group, SWT.NONE);
IProject userProject = WorkspaceLanguageManager.getUserProject();
LangTypeType.Enum type = LangTypeType.FOREIGN;
HashMap<String, LangType> map = WorkspaceLanguageManager.findActiveLanguages(userProject, type);
Iterator<Map.Entry<String,LangType>> ie = map.entrySet().iterator();
String [] items = new String[map.size()];
foreignLangs = new UniversalLanguage[map.size()];
int i = 0;
String prevLang = getPrefStore(userProject).getString(FOREIGN_TEST_LANG_PREF);
int selection = 0;
while (ie.hasNext())
{
Map.Entry<String,LangType> entry = ie.next();
foreignLangs[i] = new UniversalLanguage(entry.getKey().toString());
items[i] = foreignLangs[i].getDescription();
if (foreignLangs[i].getCode().equals(prevLang))
selection = i;
i++;
}
foreignCombo.setItems(items);
if (items.length > 0)
{
foreignCombo.select(selection);
}
foreignCombo
.addSelectionListener(new SelectionListener()
{
public void widgetSelected(SelectionEvent e)
{
setRadioText();
}
public void widgetDefaultSelected(SelectionEvent e)
{
}
});
}
/**
* This method initializes maxItemsCombo
*
*/
private void createMaxItemsCombo()
{
maxItemsCombo = new Combo(group, SWT.NONE);
maxItemsCombo.setItems(new String [] {
MessageUtil.getString("UnlimitedItems"),
MessageUtil.getString(Integer.toString(MAX_ITEMS[1])),
MessageUtil.getString(Integer.toString(MAX_ITEMS[2])),
MessageUtil.getString(Integer.toString(MAX_ITEMS[3])),
MessageUtil.getString(Integer.toString(MAX_ITEMS[4])),
MessageUtil.getString(Integer.toString(MAX_ITEMS[5])),
MessageUtil.getString(Integer.toString(MAX_ITEMS[6]))
}
);
maxItemsCombo.select(0);// default to unlimited
}
/**
* @return
*/
public IProject getUser()
{
int userIndex = userCombo.getSelectionIndex();
if (userIndex > -1)
{
return WorkspaceLanguageManager.findUserProjects()[userIndex];
}
return null;
}
/**
* @return
*/
public UniversalLanguage getNativeLanguage()
{
return nativeLangs[nativeCombo.getSelectionIndex()];
}
/**
* @return
*/
public UniversalLanguage getForeignLanguage()
{
return foreignLangs[foreignCombo.getSelectionIndex()];
}
public TestType getTestType()
{
if (flashCardRadio.getSelection())
{
return TestType.FLIP_CARD;
}
else if (readingRadio.getSelection())
{
return TestType.READING_FOREIGN_NATIVE;
}
else if (writingRadio.getSelection())
{
return TestType.READING_NATIVE_FOREIGN;
}
else if (listeningRadio.getSelection())
{
return TestType.LISTENING_FOREIGN_NATIVE;
}
return null;
}
public boolean isSetMaxTestItems()
{
return (getMaxTestItems() > -1)? true : false;
}
public int getMaxTestItems()
{
if (maxItemsCombo.getSelectionIndex() > -1)
return MAX_ITEMS[maxItemsCombo.getSelectionIndex()];
else
return -1;
}
}