// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de package net.sf.eclipsefp.haskell.ui.properties; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import net.sf.eclipsefp.haskell.buildwrapper.types.CabalPackage; import net.sf.eclipsefp.haskell.buildwrapper.types.Component; import net.sf.eclipsefp.haskell.ui.properties.viewerpart.TablePart; import net.sf.eclipsefp.haskell.ui.util.SWTUtil; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; /** <p>special viewer part with buttons for the libraries * preference page.</p> * * @author Leif Frenzel */ class ImportLibrariesViewerPart extends TablePart { private final Collection<CabalPackage> allPackages= new ArrayList<>(); private List<Component> components; public ImportLibrariesViewerPart() { super( new String[] { "Add...", "Remove", null, null, "Select All", "Deselect All" }); } private final Map<String,CabalPackage> added=new HashMap<>(); private final Set<String> removed=new HashSet<>(); public void setAllPackages( final Collection<CabalPackage[]> allPackages ) { this.allPackages.clear(); for (CabalPackage[] cps:allPackages){ this.allPackages.addAll( Arrays.asList( cps ) ); } } public void setComponents( final List<Component> components ) { this.components = components; } @Override protected void buttonSelected( final Button button, final int index ) { switch( index ) { case 0: handleAdd(); break; case 1: handleDelete(); break; case 4: selectAll( true ); break; case 5: selectAll( false ); break; } } @Override protected Button createButton( final Composite parent, final String label, final int index ) { Button button = super.createButton( parent, label, index ); SWTUtil.setButtonDimensionHint( button ); return button; } @Override protected void createMainLabel( final Composite parent, final int span ) { Label label = new Label( parent, SWT.NULL ); GridData gd = new GridData( GridData.FILL ); gd.horizontalSpan = span; label.setLayoutData( gd ); } @Override protected void selectionChanged( final IStructuredSelection selection ) { setButtonEnabled( 1, !selection.isEmpty() ); } private void selectAll( final boolean selected ) { if (selected){ getTableViewer().getTable().selectAll(); } else { getTableViewer().getTable().deselectAll(); } setButtonEnabled( 1, selected ); } private void handleAdd() { Collection<CabalPackage> addablePackages=new ArrayList<>(allPackages.size()); for (CabalPackage cp:allPackages){ if (!added.containsKey( cp.getName()) && (cp.getComponents().length==0 || removed.contains( cp.getName() )) ){ addablePackages.add(cp); } } ImportLibrariesAddDialog addD=new ImportLibrariesAddDialog( getTableViewer().getTable().getShell(), addablePackages,components ); if (addD.open()==Window.OK){ CabalPackage cp=addD.getCabalPackage(); if (cp!=null){ added.put( cp.getName(), cp ); getTableViewer().add( cp ); } } } public Map<String, CabalPackage> getAdded() { return added; } public Set<String> getRemoved() { return removed; } private void handleDelete() { ISelection sel = getTableViewer().getSelection(); IStructuredSelection selection = ( IStructuredSelection )sel; for (Iterator<?> it=selection.iterator();it.hasNext();){ CabalPackage cp=(CabalPackage)it.next(); getTableViewer().remove( cp ); added.remove( cp.getName() ); removed.add( cp.getName() ); } // } }