/*
* -----------------------------------------------------------------------
* File: $HeadURL: http://keith-laptop/svn/krs/LanguageTest/trunk/org.thanlwinsoft.languagetest/src/org/thanlwinsoft/languagetest/eclipse/wizards/ModuleSelectionPage.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 org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.thanlwinsoft.languagetest.MessageUtil;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
/**
* @author keith
*
*/
public class ModuleSelectionPage extends WizardPage
{
/**
* @param pageName
*/
public ModuleSelectionPage(String pageName)
{
super(pageName);
}
private Group mainGroup = null; // @jve:decl-index=0:visual-constraint="10,0"
private Button revisionRadioButton = null;
private Button selectModuleRadioButton = null;
private RowLayout rowLayout = null;
private ScrolledComposite scrolledComposite = null;
private Tree tree = null;
private RowData treeRowData = null;
private CheckboxTreeViewer viewer = null;
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent)
{
this.setDescription(MessageUtil.getString("SelectTestItems"));
mainGroup = new Group(parent, SWT.CENTER);
mainGroup.setText("Choose Test Modules");
mainGroup.setSize(new Point(138, 47));
rowLayout = new RowLayout();
rowLayout.type = SWT.VERTICAL;
rowLayout.fill = true;
mainGroup.setLayout(rowLayout);
revisionRadioButton = new Button(mainGroup, SWT.RADIO);
revisionRadioButton.setText(MessageUtil.getString("RevisionModulesRadio"));
revisionRadioButton
.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
{
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
validate();
}
});
selectModuleRadioButton = new Button(mainGroup, SWT.RADIO);
selectModuleRadioButton.setText(MessageUtil.getString("SelectModuleRadio"));
selectModuleRadioButton
.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
{
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e)
{
if (selectModuleRadioButton.getSelection())
{
tree.setEnabled(true);
validate();
}
}
});
createScrolledComposite();
mainGroup.addControlListener(new org.eclipse.swt.events.ControlListener()
{
private boolean inProgress = false;
public void controlResized(org.eclipse.swt.events.ControlEvent e)
{
if (inProgress) return;
inProgress = true;
Rectangle r = mainGroup.getBounds();
if (treeRowData != null && r.width > 50 && r.height > 100)
{
treeRowData.width = r.width - 50;//Math.max(treeRowData.width, r.width - 20);
treeRowData.height = r.height - 120;//Math.max(treeRowData.height, r.width - 100);
scrolledComposite.setLayoutData(treeRowData);
}
mainGroup.pack();
inProgress = false;
}
public void controlMoved(org.eclipse.swt.events.ControlEvent e)
{
}
});
mainGroup.pack();
viewer.expandAll();
viewer.refresh();
validate();
setControl(mainGroup);
}
private void validate()
{
boolean isValid = false;
if (revisionRadioButton.getSelection())
{
isValid = true;
setErrorMessage(null);
}
else if (selectModuleRadioButton.getSelection())
{
if (viewer.getCheckedElements().length > 0)
{
isValid = true;
setErrorMessage(null);
}
else setErrorMessage(MessageUtil.getString("SelectModulesMessage"));
}
else setErrorMessage(MessageUtil.getString("NoTestItemsSelection"));
setPageComplete(isValid);
}
/**
* This method initializes scrolledComposite
*
*/
private void createScrolledComposite()
{
scrolledComposite = new ScrolledComposite(mainGroup, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
tree = new Tree(scrolledComposite, SWT.MULTI | SWT.CHECK);
tree.setHeaderVisible(false);
tree.setEnabled(false);
tree.setLinesVisible(true);
TreeColumn nameColumn = new TreeColumn(tree, SWT.NONE);
nameColumn.setWidth(300);
nameColumn.setResizable(true);
nameColumn.setText(MessageUtil.getString("NameColumn"));
viewer = new CheckboxTreeViewer(tree);
viewer.setCellEditors(new CellEditor[] {
new CheckboxCellEditor()});
final ModuleContentProvider provider = new ModuleContentProvider();
viewer.setContentProvider(provider);
viewer.setLabelProvider(new LabelProvider() {
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
*/
public String getText(Object element)
{
if (element instanceof IResource)
{
return ((IResource)element).getName();
}
return super.getText(element);
}
});
viewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
viewer.setAutoExpandLevel(CheckboxTreeViewer.ALL_LEVELS);
viewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event)
{
if (event.getSelection() instanceof IStructuredSelection)
{
if (viewer.getCheckedElements().length > 0)
{
setErrorMessage(null);
setPageComplete(true);
}
else
{
setPageComplete(false);
}
}
}
});
// implement recursive checking for folder checks
viewer.addCheckStateListener(new ICheckStateListener(){
@Override
public void checkStateChanged(CheckStateChangedEvent event)
{
Object element = event.getElement();
if (element instanceof IContainer)
{
if (provider.hasChildren(element))
{
setCheckStateRecursively(event.getChecked(),
provider, element);
}
}
}
});
scrolledComposite.setContent(tree);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
treeRowData = new RowData(SWT.DEFAULT,200);
scrolledComposite.setLayoutData(treeRowData);
//scrolledComposite.setMinSize(200, 200);
//scrolledComposite.setMinSize(tree.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
private void setCheckStateRecursively(boolean state, ModuleContentProvider provider, Object parent)
{
Object [] children = provider.getChildren(parent);
for (Object child : children)
{
if (provider.hasChildren(child))
{
setCheckStateRecursively(state, provider, child);
}
viewer.setChecked(child, state);
}
}
public boolean isRevisionTest()
{
return revisionRadioButton.getSelection();
}
public Object [] getSelectedModules()
{
return viewer.getCheckedElements();
// TreeItem [] treeItems = tree.getSelection();
// Vector v = new Vector(treeItems.length);
// for (int i = 0; i < treeItems.length; i++)
// {
// if (treeItems[i].getData() instanceof IFile)
// {
// v.add(treeItems[i].getData());
// }
// }
// return v.toArray();
}
// private void findChildren(Map map, TreeItem ti)
// {
// for (int j = 0; j < ti.getItemCount(); j++)
// {
// if (ti.getItem(j).getData() instanceof IFile)
// {
// map.put(ti.getItem(j).getData(), ti.getItem(j));
// }
// else if (ti.getItem(j).getItemCount() > 0)
// {
// findChildren(map, ti);
// }
// }
// }
public void select(Object [] files)
{
// HashMap map = new HashMap();
// Vector v = new Vector(files.length);
// try
// {
// findChildren(map, tree.getTopItem());
// }
// catch (Exception e)
// {
// e.printStackTrace();
// }
// for (int i = 0; i < files.length; i++)
// {
// if (files[i] instanceof IFile)
// {
// if (map.containsKey(files[i]))
// {
// v.add(map.get(files[i]));
// }
// }
// }
if (files.length > 0)
{
selectModuleRadioButton.setSelection(true);
tree.setEnabled(true);
viewer.setCheckedElements(files);
}
validate();
}
//public class ModuleSelectionModifier extends
}