/******************************************************************************* * Copyright (c) 2010 Weltevree Beheer BV, Remain Software & Industrial-TSI * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Wim Jongman - initial API and implementation *******************************************************************************/ package org.eclipse.ecf.salvo.ui.internal.wizards; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import org.eclipse.ecf.protocol.nntp.model.INewsgroup; import org.eclipse.ecf.protocol.nntp.model.IServer; import org.eclipse.ecf.salvo.ui.internal.provider.NewsContentProvider; import org.eclipse.ecf.salvo.ui.internal.provider.NewsGroupProvider; import org.eclipse.ecf.salvo.ui.internal.provider.NewsLabelProvider; import org.eclipse.ecf.salvo.ui.internal.resources.ISalvoResource; import org.eclipse.ecf.salvo.ui.internal.resources.SalvoResourceFactory; import org.eclipse.ecf.salvo.ui.internal.resources.SalvoUIResource; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.dialogs.FilteredTree; import org.eclipse.ui.dialogs.PatternFilter; public class SubscribeGroupWizardPage extends WizardPage { private TreeViewer checkboxTreeViewer; final private HashSet<Object> checkedItems = new HashSet<Object>(); public SubscribeGroupWizardPage(String pageName) { super(pageName); setDescription("Select the groups you want to subscribe to."); } public void createControl(Composite parent) { checkedItems.clear(); Composite composite = new Composite(parent, SWT.NONE); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); composite.setLayout(new GridLayout(1, false)); setControl(composite); PatternFilter filter = new PatternFilter() { @Override public boolean isElementVisible(Viewer viewer, Object element) { if (checkedItems.contains(element)) { return true; } return super.isElementVisible(viewer, element); } }; filter.setIncludeLeadingWildcard(true); FilteredTree filteredTree = new FilteredTree(composite, SWT.CHECK, filter, true); checkboxTreeViewer = filteredTree.getViewer(); filteredTree .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); checkboxTreeViewer.setContentProvider(new NewsContentProvider()); checkboxTreeViewer .setLabelProvider(new NewsLabelProvider(checkedItems)); // checkboxTreeViewer.setComparator(new ViewerComparator()); // ITreeViewerListener checkboxTreeViewer.getTree().addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent e) { if (e.widget instanceof Tree) { TreeItem item = ((Tree) e.widget).getItem(new Point(e.x, e.y)); if (item != null) { if (item.getChecked()) checkedItems.add(item.getData()); else checkedItems.remove(item.getData()); } } } }); } public Collection<INewsgroup> getGroups() { ArrayList<INewsgroup> result = new ArrayList<INewsgroup>(); for (Object object : checkedItems) if (object instanceof SalvoUIResource && ((SalvoUIResource) object).getObject() instanceof INewsgroup) result.add((INewsgroup) ((SalvoUIResource) object).getObject()); return result; } public void setInput(IServer server) { setTitle(server.getAddress()); ISalvoResource s2 = SalvoResourceFactory.getResource( server.getAddress(), server); s2.setChildProvider(new NewsGroupProvider(s2)); checkboxTreeViewer.setInput(s2); } }