package com.dubture.composer.ui.controller; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ICheckStateProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.StyledCellLabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.graphics.Image; import com.dubture.composer.ui.ComposerUIPluginImages; import com.dubture.getcomposer.core.MinimalPackage; public class PackageController extends StyledCellLabelProvider implements IStructuredContentProvider, ICheckStateProvider, ICheckStateListener { private List<MinimalPackage> packages; private List<String> checked = new ArrayList<String>(); protected static Image pkgImage = ComposerUIPluginImages.PACKAGE.createImage(); protected static Image phpImage = ComposerUIPluginImages.PHP.createImage(); protected List<IPackageCheckStateChangedListener> pkgListeners = new ArrayList<IPackageCheckStateChangedListener>(); public void addPackageCheckStateChangedListener(IPackageCheckStateChangedListener listener) { if (!pkgListeners.contains(listener)) { pkgListeners.add(listener); } } public void removePackageCheckStateChangedListener(IPackageCheckStateChangedListener listener) { pkgListeners.remove(listener); } @SuppressWarnings("unchecked") public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if (newInput == null) { packages = null; } else { packages = (List<MinimalPackage>)newInput; } } public Object[] getElements(Object inputElement) { if (packages != null) { return packages.toArray(); } else { return null; } } public void addPackages(List<MinimalPackage> packages) { this.packages.addAll(packages); } public Image getImage(Object element) { return PackageController.getPackageImage(element); } public static Image getPackageImage(Object element) { String name = PackageController.getPackageName(element); if (!name.contains("/") && (name.equals("php") || name.startsWith("ext-"))) { return phpImage; } return pkgImage; } public String getText(Object element) { return getName(element); } @Override public void checkStateChanged(CheckStateChangedEvent event) { setChecked(((MinimalPackage)event.getElement()).getName(), event.getChecked()); } public List<String> getCheckedPackages() { return checked; } public int getCheckedPackagesCount() { return checked.size(); } public void clear() { checked.clear(); } public void setChecked(String name, boolean checked) { if (checked && !this.checked.contains(name)) { this.checked.add(name); } if (!checked) { this.checked.remove(name); } for (IPackageCheckStateChangedListener listener : pkgListeners) { listener.packageCheckStateChanged(name, checked); } } private String getName(Object element) { return PackageController.getPackageName(element); } public static String getPackageName(Object element) { String name = null; if (element instanceof MinimalPackage) { name = ((MinimalPackage)element).getName(); } else if (element instanceof String) { name = (String)element; } return name; } public void update(ViewerCell cell) { Object obj = cell.getElement(); if (obj instanceof MinimalPackage) { MinimalPackage pkg = (MinimalPackage)obj; StyledString styledString = new StyledString(); // if (author.getEmail() != null && author.getEmail().trim() != "" && !author.getEmail().trim().equals("")) { // styledString.append(" <" + author.getEmail().trim() + ">", StyledString.COUNTER_STYLER); // } // // if (author.getHomepage() != null && author.getHomepage().trim() != "" && !author.getHomepage().trim().equals("")) { // styledString.append(" - " + author.getHomepage().trim(), StyledString.DECORATIONS_STYLER); // } updateText(pkg, styledString); cell.setText(styledString.toString()); cell.setStyleRanges(styledString.getStyleRanges()); cell.setImage(getImage(pkg)); super.update(cell); } } protected void updateText(MinimalPackage pkg, StyledString styledString) { styledString.append(getName(pkg)); } @Override public boolean isChecked(Object element) { return checked.contains(getName(element)); } @Override public boolean isGrayed(Object element) { // TODO Auto-generated method stub return false; } }