diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.gitmodules b/.gitmodules old mode 100644 new mode 100755 diff --git a/.travis.yml b/.travis.yml old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/changelog.txt b/changelog.txt old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/.classpath b/com.dubture.composer.core/.classpath old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/.project b/com.dubture.composer.core/.project old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/.settings/org.eclipse.jdt.core.prefs b/com.dubture.composer.core/.settings/org.eclipse.jdt.core.prefs old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/.settings/org.eclipse.jdt.ui.prefs b/com.dubture.composer.core/.settings/org.eclipse.jdt.ui.prefs old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/META-INF/MANIFEST.MF b/com.dubture.composer.core/META-INF/MANIFEST.MF old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/build.properties b/com.dubture.composer.core/build.properties old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/ico/full/obj16/icon-logo-composer.png b/com.dubture.composer.core/ico/full/obj16/icon-logo-composer.png old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/ico/full/wizban/packagist.png b/com.dubture.composer.core/ico/full/wizban/packagist.png old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/plugin.xml b/com.dubture.composer.core/plugin.xml old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/pom.xml b/com.dubture.composer.core/pom.xml old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/ComposerBuildpathContainerInitializer.java b/com.dubture.composer.core/src/com/dubture/composer/core/ComposerBuildpathContainerInitializer.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/ComposerConstants.java b/com.dubture.composer.core/src/com/dubture/composer/core/ComposerConstants.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/ComposerNature.java b/com.dubture.composer.core/src/com/dubture/composer/core/ComposerNature.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/ComposerPlugin.java b/com.dubture.composer.core/src/com/dubture/composer/core/ComposerPlugin.java old mode 100644 new mode 100755 index 7d94a27..7eeeff2 --- a/com.dubture.composer.core/src/com/dubture/composer/core/ComposerPlugin.java +++ b/com.dubture.composer.core/src/com/dubture/composer/core/ComposerPlugin.java @@ -17,7 +17,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.getcomposer.packagist.SearchResultDownloader; +import org.getcomposer.packagist.PackagistSearch; import org.osgi.framework.BundleContext; import com.dubture.composer.core.model.ModelAccess; @@ -30,7 +30,7 @@ public class ComposerPlugin extends AbstractUIPlugin { private static final String DEBUG = "com.dubture.composer.core/debug"; - private SearchResultDownloader packageDownloader = null; + private PackagistSearch packageDownloader = null; /* * (non-Javadoc) @@ -91,13 +91,13 @@ public static void logException(Exception e) plugin.getLog().log(status); } - public SearchResultDownloader getPackageDownloader() { + public PackagistSearch getPackageDownloader() { if (packageDownloader != null) { return packageDownloader; } - return packageDownloader = new SearchResultDownloader(); + return packageDownloader = new PackagistSearch(); } public boolean isBuildpathContainerEnabled() diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/ComposerPluginImages.java b/com.dubture.composer.core/src/com/dubture/composer/core/ComposerPluginImages.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/build/BuildParticipantFactory.java b/com.dubture.composer.core/src/com/dubture/composer/core/build/BuildParticipantFactory.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/build/ComposerBuildParticipant.java b/com.dubture.composer.core/src/com/dubture/composer/core/build/ComposerBuildParticipant.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/facet/FacetInstallWizardPage.java b/com.dubture.composer.core/src/com/dubture/composer/core/facet/FacetInstallWizardPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/facet/InstallActionDelegate.java b/com.dubture.composer.core/src/com/dubture/composer/core/facet/InstallActionDelegate.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/job/ComposerJob.java b/com.dubture.composer.core/src/com/dubture/composer/core/job/ComposerJob.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/job/DownloadJob.java b/com.dubture.composer.core/src/com/dubture/composer/core/job/DownloadJob.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/job/InitializeJob.java b/com.dubture.composer.core/src/com/dubture/composer/core/job/InitializeJob.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/job/InstallJob.java b/com.dubture.composer.core/src/com/dubture/composer/core/job/InstallJob.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/job/UpdateJob.java b/com.dubture.composer.core/src/com/dubture/composer/core/job/UpdateJob.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/launch/ConsoleResponseHandler.java b/com.dubture.composer.core/src/com/dubture/composer/core/launch/ConsoleResponseHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/launch/DefaultExecutableLauncher.java b/com.dubture.composer.core/src/com/dubture/composer/core/launch/DefaultExecutableLauncher.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/launch/ExecutableNotFoundException.java b/com.dubture.composer.core/src/com/dubture/composer/core/launch/ExecutableNotFoundException.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/launch/ILaunchResponseHandler.java b/com.dubture.composer.core/src/com/dubture/composer/core/launch/ILaunchResponseHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/launch/IPHPLauncher.java b/com.dubture.composer.core/src/com/dubture/composer/core/launch/IPHPLauncher.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/launch/LaunchUtil.java b/com.dubture.composer.core/src/com/dubture/composer/core/launch/LaunchUtil.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/launch/PharNotFoundException.java b/com.dubture.composer.core/src/com/dubture/composer/core/launch/PharNotFoundException.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/log/Logger.java b/com.dubture.composer.core/src/com/dubture/composer/core/log/Logger.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/BuildpathPackage.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/BuildpathPackage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/ComposerBuildpathContainer.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/ComposerBuildpathContainer.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/EclipsePHPPackage.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/EclipsePHPPackage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/InstallableItem.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/InstallableItem.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/InstalledPackage.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/InstalledPackage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/ModelAccess.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/ModelAccess.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/NamespaceMapping.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/NamespaceMapping.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/NamespaceResolverInterface.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/NamespaceResolverInterface.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/PackageManager.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/PackageManager.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/PackagePath.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/PackagePath.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/model/PathDeserializer.java b/com.dubture.composer.core/src/com/dubture/composer/core/model/PathDeserializer.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/visitor/AutoloadVisitor.java b/com.dubture.composer.core/src/com/dubture/composer/core/visitor/AutoloadVisitor.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.core/src/com/dubture/composer/core/visitor/ComposerVisitor.java b/com.dubture.composer.core/src/com/dubture/composer/core/visitor/ComposerVisitor.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.feature/.project b/com.dubture.composer.feature/.project old mode 100644 new mode 100755 diff --git a/com.dubture.composer.feature/build.properties b/com.dubture.composer.feature/build.properties old mode 100644 new mode 100755 diff --git a/com.dubture.composer.feature/feature.xml b/com.dubture.composer.feature/feature.xml old mode 100644 new mode 100755 diff --git a/com.dubture.composer.feature/pom.xml b/com.dubture.composer.feature/pom.xml old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/.classpath b/com.dubture.composer.test/.classpath old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/.project b/com.dubture.composer.test/.project old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/.settings/org.eclipse.jdt.core.prefs b/com.dubture.composer.test/.settings/org.eclipse.jdt.core.prefs old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/META-INF/MANIFEST.MF b/com.dubture.composer.test/META-INF/MANIFEST.MF old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/Resources/autoload_namespaces.php b/com.dubture.composer.test/Resources/autoload_namespaces.php old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/Resources/installed.json b/com.dubture.composer.test/Resources/installed.json old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/Resources/installed_dev.json b/com.dubture.composer.test/Resources/installed_dev.json old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/build.properties b/com.dubture.composer.test/build.properties old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/pom.xml b/com.dubture.composer.test/pom.xml old mode 100644 new mode 100755 diff --git a/com.dubture.composer.test/src/com/dubture/composer/test/ComposerTest.java b/com.dubture.composer.test/src/com/dubture/composer/test/ComposerTest.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/.classpath b/com.dubture.composer.ui/.classpath old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/.project b/com.dubture.composer.ui/.project old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/.settings/org.eclipse.jdt.core.prefs b/com.dubture.composer.ui/.settings/org.eclipse.jdt.core.prefs old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/META-INF/MANIFEST.MF b/com.dubture.composer.ui/META-INF/MANIFEST.MF old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/build.properties b/com.dubture.composer.ui/build.properties old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/icons/full/obj16/author.png b/com.dubture.composer.ui/icons/full/obj16/author.png old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/icons/full/obj16/composer.png b/com.dubture.composer.ui/icons/full/obj16/composer.png old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/icons/full/obj16/internal_browser.gif b/com.dubture.composer.ui/icons/full/obj16/internal_browser.gif old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/icons/full/obj16/package_obj.gif b/com.dubture.composer.ui/icons/full/obj16/package_obj.gif old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/icons/full/obj16/page_obj.gif b/com.dubture.composer.ui/icons/full/obj16/page_obj.gif old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/icons/full/obj16/php-icon.png b/com.dubture.composer.ui/icons/full/obj16/php-icon.png old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/icons/full/wizban/packagist.png b/com.dubture.composer.ui/icons/full/wizban/packagist.png old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/plugin.xml b/com.dubture.composer.ui/plugin.xml old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/ComposerUIPlugin.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/ComposerUIPlugin.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/ComposerUIPluginImages.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/ComposerUIPluginImages.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/DependencyController.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/DependencyController.java old mode 100644 new mode 100755 index ced1f05..9b5e748 --- a/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/DependencyController.java +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/DependencyController.java @@ -17,7 +17,7 @@ public Object[] getElements(Object inputElement) { } public String getColumnText(Object element, int columnIndex) { - VersionedPackage dep = (VersionedPackage)element; + VersionedPackage dep = (VersionedPackage)element; StringBuilder sb = new StringBuilder(); sb.append(dep.getName()); sb.append(": "); diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/IController.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/IController.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/IPackageCheckStateChangedListener.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/IPackageCheckStateChangedListener.java new file mode 100755 index 0000000..31a9495 --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/IPackageCheckStateChangedListener.java @@ -0,0 +1,5 @@ +package com.dubture.composer.ui.controller; + +public interface IPackageCheckStateChangedListener { + public void packageCheckStateChanged(String name, boolean checked); +} diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/ITableController.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/ITableController.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/PackageController.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/PackageController.java old mode 100644 new mode 100755 index bf78c54..099c315 --- a/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/PackageController.java +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/controller/PackageController.java @@ -1,21 +1,36 @@ 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.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.graphics.Image; -import org.getcomposer.ComposerPackage; import org.getcomposer.MinimalPackage; import com.dubture.composer.ui.ComposerUIPluginImages; -public class PackageController extends LabelProvider implements ITableController { +public class PackageController extends LabelProvider implements ITableController, ICheckStateProvider, ICheckStateListener { private List packages; - protected Image pkgImage = ComposerUIPluginImages.PACKAGE.createImage(); - protected Image phpImage = ComposerUIPluginImages.PHP.createImage(); + private List checked = new ArrayList(); + protected static Image pkgImage = ComposerUIPluginImages.PACKAGE.createImage(); + protected static Image phpImage = ComposerUIPluginImages.PHP.createImage(); + protected List pkgListeners = new ArrayList(); + 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) { @@ -33,20 +48,91 @@ public Object[] getElements(Object inputElement) { } } - public void addPackages(List packages) { + public void addPackages(List packages) { this.packages.addAll(packages); } - - public Image getColumnImage(Object element, int columnIndex) { - MinimalPackage pkg = (MinimalPackage)element; - if (pkg.getName() == "php") { + + public Image getImage(Object element) { + return PackageController.getPackageImage(element); + } + + public static Image getPackageImage(Object element) { + String name = PackageController.getPackageName(element); + if (name == "php") { return phpImage; } return pkgImage; } + public Image getColumnImage(Object element, int columnIndex) { + return getImage(element); + } + + public String getText(Object element) { + return getName(element); + } + public String getColumnText(Object element, int columnIndex) { - MinimalPackage pkg = (MinimalPackage)element; - return pkg.getName(); + return getText(element); + } + + @Override + public void checkStateChanged(CheckStateChangedEvent event) { + setChecked(((MinimalPackage)event.getElement()).getName(), event.getChecked()); + } + + public List getCheckedPackages() { + return checked; + } + + public int getCheckedPackagesCount() { + return checked.size(); + } + + public void clear() { + checked.clear(); +// for (String name : checked) { +// setChecked(name, false); +// } + } + + 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; + } + + + @Override + public boolean isChecked(Object element) { + return checked.contains(getName(element)); + } + + @Override + public boolean isGrayed(Object element) { + // TODO Auto-generated method stub + return false; } } diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/ComposerConverter.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/ComposerConverter.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/Keywords2StringConverter.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/Keywords2StringConverter.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/License2StringConverter.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/License2StringConverter.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/String2KeywordsConverter.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/String2KeywordsConverter.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/String2LicenseConverter.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/converter/String2LicenseConverter.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/dialogs/DependencyDialog.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/dialogs/DependencyDialog.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/dialogs/PersonDialog.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/dialogs/PersonDialog.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/ComboFormEntryAdapter.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/ComboFormEntryAdapter.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/ComposerFormPage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/ComposerFormPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/ComposerSection.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/ComposerSection.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/FormEntryAdapter.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/FormEntryAdapter.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/FormLayoutFactory.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/FormLayoutFactory.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/StructuredViewerSection.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/StructuredViewerSection.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/TableSection.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/TableSection.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/AuthorSection.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/AuthorSection.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/ComposerFormEditor.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/ComposerFormEditor.java old mode 100644 new mode 100755 index 8f7ffd5..b16ca4d --- a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/ComposerFormEditor.java +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/ComposerFormEditor.java @@ -95,7 +95,8 @@ protected void addPages() { try { addOverview(); addDependencies(); - addDependencyGraph(); +// addDependencyGraph(); + setActivePage(DependenciesPage.ID); // Aww, can't use jsonedit here :( // addPage(new JsonTextEditor(), getEditorInput()); diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/ComposerTextEditor.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/ComposerTextEditor.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependenciesPage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependenciesPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependencyGraphPage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependencyGraphPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependencySearchSection.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependencySearchSection.java old mode 100644 new mode 100755 index 2b9fa5b..092d0ef --- a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependencySearchSection.java +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependencySearchSection.java @@ -7,6 +7,7 @@ import com.dubture.composer.ui.editor.ComposerFormPage; import com.dubture.composer.ui.editor.ComposerSection; +import com.dubture.composer.ui.parts.composer.DependencySearch; import com.dubture.composer.ui.parts.composer.PackageSearch; public class DependencySearchSection extends ComposerSection { @@ -18,11 +19,11 @@ public DependencySearchSection(ComposerFormPage page, Composite parent) { @Override protected void createClient(Section section, FormToolkit toolkit) { - section.setText("Package Search"); + section.setText("Packagist Search"); section.setDescription("Search for packages and add the selected packages to the opened section on the left."); section.setLayoutData(new GridData(GridData.FILL_BOTH)); - PackageSearch dependencySearch = new PackageSearch(section, toolkit); + DependencySearch dependencySearch = new DependencySearch(section, toolkit, "Add Dependencies"); section.setClient(dependencySearch.getBody()); } diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependencySection.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/DependencySection.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/GeneralSection.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/GeneralSection.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/OverviewPage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/OverviewPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/SupportSection.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/editor/composer/SupportSection.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/explorer/ComposerBuildpathContainer.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/explorer/ComposerBuildpathContainer.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/explorer/PackageTreeContentProvider.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/explorer/PackageTreeContentProvider.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/explorer/PackageTreeLabelProvider.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/explorer/PackageTreeLabelProvider.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/AddNatureHandler.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/AddNatureHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/ComposerHandler.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/ComposerHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/DependencyGraphHandler.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/DependencyGraphHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/InitHandler.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/InitHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/InstallHandler.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/InstallHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/RequireHandler.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/RequireHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/UpdateHandler.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/handler/UpdateHandler.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/ComboFormEntry.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/ComboFormEntry.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/ComboPart.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/ComboPart.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/FormEntry.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/FormEntry.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/IComboFormEntryListener.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/IComboFormEntryListener.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/IFormEntryListener.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/IFormEntryListener.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/SharedPart.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/SharedPart.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/SharedPartWithButtons.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/SharedPartWithButtons.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/StructuredViewerPart.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/StructuredViewerPart.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/TablePart.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/TablePart.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/WeblinkFormEntry.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/WeblinkFormEntry.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySearch.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySearch.java new file mode 100755 index 0000000..4196b23 --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySearch.java @@ -0,0 +1,101 @@ +package com.dubture.composer.ui.parts.composer; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Layout; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.events.HyperlinkAdapter; +import org.eclipse.ui.forms.events.HyperlinkEvent; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Twistie; +import org.getcomposer.ComposerConstants; +import org.getcomposer.collection.Dependencies; + +import com.dubture.composer.ui.editor.FormLayoutFactory; +import com.dubture.composer.ui.utils.WidgetHelper; + +public class DependencySearch extends PackageSearch { + + protected List dependencyListeners = new ArrayList(); + + public DependencySearch (Composite parent, FormToolkit toolkit, String buttonText) { + super(parent, toolkit, buttonText); + } + + public DependencySearch (Composite parent, FormToolkit toolkit) { + super(parent, toolkit); + } + + public DependencySearch (Composite parent, String buttonText) { + super(parent, buttonText); + } + + public DependencySearch(Composite parent) { + super(parent); + } + + public void addDependencySelectionFinishedListener(DependencySelectionFinishedListener listener) { + if (!dependencyListeners.contains(listener)) { + dependencyListeners.add(listener); + } + } + + public void removeDependencySelectionFinishedListener(DependencySelectionFinishedListener listener) { + dependencyListeners.remove(listener); + } + + @Override + protected void create(Composite parent, FormToolkit toolkit, String buttonText) { + super.create(parent, toolkit, buttonText); + + if (addButton != null) { + addButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + notifyDependencySelectionFinishedListener(); + } + }); + } + + // test package part + createPackagePart(pickedResults, "gossi/test"); + } + + protected void notifyDependencySelectionFinishedListener() { + Dependencies deps = getDependencies(); + for (DependencySelectionFinishedListener listener : dependencyListeners) { + listener.dependenciesSelected(deps); + } + clear(); + } + + public Dependencies getDependencies() { + return null; + } + + + @Override + protected DependencySearchPart createPackagePart(Composite parent, String name) { + DependencySearchPart dsp = new DependencySearchPart(parent, toolkit, name); + dsp.addToggleListener(new HyperlinkAdapter() { + public void linkActivated(HyperlinkEvent e) { + getBody().layout(true, true); + } + }); + return dsp; + } + +} \ No newline at end of file diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySearchPart.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySearchPart.java new file mode 100644 index 0000000..96087b3 --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySearchPart.java @@ -0,0 +1,74 @@ +package com.dubture.composer.ui.parts.composer; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.events.HyperlinkAdapter; +import org.eclipse.ui.forms.events.HyperlinkEvent; +import org.eclipse.ui.forms.events.IHyperlinkListener; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Twistie; + +import com.dubture.composer.ui.utils.WidgetFactory; +import com.dubture.composer.ui.utils.WidgetHelper; + +public class DependencySearchPart extends PackageSearchPart { + + protected Twistie toggle; + protected VersionSuggestion suggestion; + + public DependencySearchPart(Composite parent, FormToolkit toolkit, String name) { + super(parent, toolkit, name); + } + + protected void create(Composite parent, WidgetFactory factory) { + createBody(parent, factory); + WidgetHelper.trimComposite(body, 0, 0, 0, 0, 0, 0); + + // title + Composite title = factory.createComposite(body, SWT.NO_BACKGROUND); + title.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + title.setLayout(new GridLayout(3, false)); + WidgetHelper.trimComposite(title, -5,-5,-5,-5, 0, 0); + + // toggle box + Composite toggleBox = factory.createComposite(title, SWT.NO_BACKGROUND); + toggleBox.setLayout(new GridLayout()); + toggle = new Twistie(toggleBox, SWT.NO_BACKGROUND | SWT.NO_FOCUS); + toggle.setExpanded(true); //TODO: REMOVE! + toggle.addHyperlinkListener(new HyperlinkAdapter() { + public void linkActivated(HyperlinkEvent e) { + boolean expanded = toggle.isExpanded(); + suggestion.getBody().setVisible(expanded); + ((GridData)suggestion.getBody().getLayoutData()).exclude = !expanded; + body.layout(true, true); + } + }); + WidgetHelper.trimComposite(toggleBox, 3, -7, 0, 0, 0, 0); + + // package + createPackageCheckbox(title, factory, name); + + // version + Text version = factory.createText(title, SWT.SINGLE | SWT.BORDER); + version.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); + + // suggestion + suggestion = new VersionSuggestion(name, body, version, toolkit); + WidgetHelper.trimComposite(suggestion.getBody(), -5,-5,-5,-5, 0, 0); + } + + public void addToggleListener(IHyperlinkListener listener) { + toggle.addHyperlinkListener(listener); + } + + public void removeToggleListener(IHyperlinkListener listener) { + toggle.removeHyperlinkListener(listener); + } + + public boolean isExpanded() { + return toggle.isExpanded(); + } +} diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySelectionFinishedListener.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySelectionFinishedListener.java new file mode 100755 index 0000000..ecee89f --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/DependencySelectionFinishedListener.java @@ -0,0 +1,7 @@ +package com.dubture.composer.ui.parts.composer; + +import org.getcomposer.collection.Dependencies; + +public interface DependencySelectionFinishedListener { + public void dependenciesSelected(Dependencies dependencies); +} diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSearch.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSearch.java old mode 100644 new mode 100755 index 0f15981..dafb919 --- a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSearch.java +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSearch.java @@ -1,9 +1,12 @@ package com.dubture.composer.ui.parts.composer; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.eclipse.jface.viewers.CheckboxTableViewer; +import org.eclipse.jface.viewers.CellEditor.LayoutData; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; @@ -11,50 +14,98 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.dialogs.PatternFilter; +import org.eclipse.ui.forms.IFormColors; import org.eclipse.ui.forms.widgets.FormToolkit; import org.getcomposer.ComposerPackage; +import org.getcomposer.MinimalPackage; import org.getcomposer.packagist.PackageSearchListenerInterface; import org.getcomposer.packagist.PackagistSearch; import org.getcomposer.packagist.SearchResult; -import com.dubture.composer.ui.controller.ITableController; +import com.dubture.composer.ui.controller.IPackageCheckStateChangedListener; import com.dubture.composer.ui.controller.PackageController; +import com.dubture.composer.ui.editor.FormLayoutFactory; +import com.dubture.composer.ui.utils.WidgetFactory; -public class PackageSearch implements PackageSearchListenerInterface { +public class PackageSearch implements PackageSearchListenerInterface, IPackageCheckStateChangedListener { protected final static long QUERY_DELAY_MS = 300; + protected FormToolkit toolkit; + protected WidgetFactory factory; + protected Text searchField; protected CheckboxTableViewer searchResults; - protected PatternFilter searchFilter; - protected ITableController searchController; + protected PackageController searchController; protected Composite body; protected Composite pickedResults; + protected Map packageControls = new HashMap(); + protected Button addButton; + protected PackagistSearch downloader = new PackagistSearch(); protected String currentQuery; protected String lastQuery; protected String shownQuery; protected String foundQuery; + protected Thread resetThread; protected Thread queryThread; + protected List packageListeners = new ArrayList(); + + public PackageSearch (Composite parent, FormToolkit toolkit, String buttonText) { + create(parent, toolkit, buttonText); + } + public PackageSearch (Composite parent, FormToolkit toolkit) { - create(parent, toolkit); + create(parent, toolkit, null); + } + + public PackageSearch (Composite parent, String buttonText) { + create(parent, null, buttonText); } public PackageSearch (Composite parent) { - create(parent, null); + create(parent, null, null); + } + + public void addPackageCheckStateChangedListener(IPackageCheckStateChangedListener listener) { + if (searchController != null) { + searchController.addPackageCheckStateChangedListener(listener); + } + } + + public void removePackageCheckStateChangedListener(IPackageCheckStateChangedListener listener) { + if (searchController != null) { + searchController.removePackageCheckStateChangedListener(listener); + } + } + + public void addPackageSelectionFinishedListener(PackageSelectionFinishedListener listener) { + if (!packageListeners.contains(listener)) { + packageListeners.add(listener); + } + } + + public void removePackageSelectionFinishedListener(PackageSelectionFinishedListener listener) { + packageListeners.remove(listener); } - private void create(Composite parent, FormToolkit toolkit) { - body = createComposite(parent, toolkit); + protected void create(Composite parent, FormToolkit toolkit, String buttonText) { + this.toolkit = toolkit; + factory = new WidgetFactory(toolkit); + + body = factory.createComposite(parent); body.setLayout(new GridLayout()); - searchField = createText(body, toolkit, SWT.SINGLE | SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL); + searchField = factory.createText(body, SWT.SINGLE | SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL | SWT.ICON_SEARCH); searchField.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); searchField.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { @@ -77,29 +128,59 @@ public void widgetDefaultSelected(SelectionEvent e) { style |= toolkit.getBorderStyle(); + searchController = getSearchResultsController(); + searchController.addPackageCheckStateChangedListener(this); searchResults = CheckboxTableViewer.newCheckList(body, style); searchResults.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - searchController = getSearchResultsController(); - searchFilter = new PatternFilter(); - searchFilter.setIncludeLeadingWildcard(true); - + searchResults.setCheckStateProvider(searchController); + searchResults.addCheckStateListener(searchController); searchResults.setContentProvider(searchController); searchResults.setLabelProvider(searchController); - searchResults.addFilter(searchFilter); searchResults.setInput(new ArrayList()); - pickedResults = createComposite(body, toolkit); + + pickedResults = factory.createComposite(body); + pickedResults.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + GridLayout layout = new GridLayout(); + layout.marginTop = 0; + layout.marginRight = -5; + layout.marginBottom = 0; + layout.marginLeft = -5; + layout.verticalSpacing = FormLayoutFactory.SECTION_CLIENT_MARGIN_TOP; + layout.horizontalSpacing = 0; + pickedResults.setLayout(layout); + + if (buttonText != null) { + addButton = factory.createButton(body); + addButton.setText(buttonText); + addButton.setEnabled(false); + addButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); + addButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + notifyPackageSelectionFinishedListener(); + } + }); + } // create downloader downloader.addPackageSearchListener(this); } + protected void notifyPackageSelectionFinishedListener() { + List packages = getPackages(); + for (PackageSelectionFinishedListener listener : packageListeners) { + listener.packagesSelected(packages); + } + clear(); + } + protected void clearSearchText() { - searchFilter.setPattern(null); searchResults.setInput(null); downloader.abort(); - // hum, stop all threads + + shownQuery = null; + queryThread.interrupt(); + resetThread.interrupt(); } // protected void setPackages(String[] packages) { @@ -109,7 +190,7 @@ protected void clearSearchText() { // @Override - public void packagesFound(final List packages, String query, SearchResult result) { + public void packagesFound(final List packages, String query, SearchResult result) { // TODO: why this has to be done in a runnable, obviously yes, results are coming from another thread foundQuery = query; Display.getDefault().syncExec(new Runnable() { @@ -127,7 +208,7 @@ public void run() { } else if (shownQuery.equals(foundQuery)) { - ((PackageController)searchController).addPackages(packages); + searchController.addPackages(packages); searchResults.refresh(); change = true; } @@ -141,16 +222,15 @@ else if (shownQuery.equals(foundQuery)) { protected void searchTextChanged() { currentQuery = searchField.getText(); -// searchFilter.setPattern(searchText); - - // kill previous downloader - downloader.abort(); if (currentQuery.isEmpty()) { clearSearchText(); return; } + // kill previous downloader + downloader.abort(); + // run a new one if (queryThread == null || !queryThread.isAlive() || queryThread.isInterrupted()) { startQuery(); @@ -163,7 +243,7 @@ public void run() { queryThread.interrupt(); } catch (InterruptedException e) { } - } + } }); queryThread.start(); } @@ -194,41 +274,56 @@ public void run() { lastQuery = currentQuery; } - protected ITableController getSearchResultsController() { + protected PackageController getSearchResultsController() { return new PackageController(); } public Composite getBody() { return body; } + + @Override + public void packageCheckStateChanged(String name, boolean checked) { + if (checked) { + packageControls.put(name, connectPackagePart(createPackagePart(pickedResults, name))); + } else { + packageControls.remove(name).dispose(); + } + if (addButton != null) { + addButton.setEnabled(searchController.getCheckedPackagesCount() > 0); + } + getBody().layout(true, true); + } - - - - - - protected Composite createComposite(Composite parent, FormToolkit toolkit) { - return createComposite(parent, toolkit, SWT.NONE); + private PackageSearchPart connectPackagePart(final PackageSearchPart psp) { + psp.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + searchController.setChecked(psp.getName(), psp.isChecked()); + searchResults.refresh(); + } + }); + return psp; } - protected Composite createComposite(Composite parent, FormToolkit toolkit, int style) { - if (toolkit == null) { - return new Composite(parent, style); - } else { - return toolkit.createComposite(parent, style); - } + protected PackageSearchPart createPackagePart(Composite parent, final String name) { + return new PackageSearchPart(parent, toolkit, name); } - - protected Text createText(Composite parent, FormToolkit toolkit) { - return createText(parent, toolkit, SWT.DEFAULT); + + public List getPackages() { + return searchController.getCheckedPackages(); } - protected Text createText(Composite parent, FormToolkit toolkit, int style) { - if (toolkit == null) { - return new Text(parent, style); - } else { - return toolkit.createText(parent, "", style); + public void clear() { + searchController.clear(); + packageControls.clear(); + for (Control child : pickedResults.getChildren()) { + child.dispose(); + } + if (addButton != null) { + addButton.setEnabled(false); } + searchResults.refresh(); + getBody().layout(true, true); } } diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSearchPart.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSearchPart.java new file mode 100644 index 0000000..d9151fb --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSearchPart.java @@ -0,0 +1,81 @@ +package com.dubture.composer.ui.parts.composer; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.forms.IFormColors; +import org.eclipse.ui.forms.widgets.FormToolkit; + +import com.dubture.composer.ui.controller.PackageController; +import com.dubture.composer.ui.utils.WidgetFactory; + +public class PackageSearchPart { + + protected String name; + + protected FormToolkit toolkit; + + protected Composite body; + protected Button checkbox; + + public PackageSearchPart (Composite parent, FormToolkit toolkit, String name) { + this.toolkit = toolkit; + this.name = name; + create(parent, new WidgetFactory(toolkit)); + } + + protected void create(Composite parent, WidgetFactory factory) { + createBody(parent, factory); + createPackageCheckbox(body, factory, name); + } + + protected Composite createBody(Composite parent, WidgetFactory factory) { + body = factory.createComposite(parent, SWT.BORDER); + body.setLayout(new GridLayout()); + body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + body.setBackground(getBackgroundColor()); + return body; + } + + protected Button createPackageCheckbox(Composite parent, WidgetFactory factory, String name) { + checkbox = new Button(parent, SWT.CHECK); + checkbox.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + checkbox.setSelection(true); + checkbox.setImage(PackageController.getPackageImage(name)); + checkbox.setText(PackageController.getPackageName(name)); + return checkbox; + } + + protected Color getBackgroundColor() { + if (toolkit != null) { + return toolkit.getColors().getColor(IFormColors.TB_BG); + } else { + return Display.getCurrent().getSystemColor(SWT.COLOR_LIST_BACKGROUND); + } + } + + public void addSelectionListener(SelectionListener listener) { + checkbox.addSelectionListener(listener); + } + + public void removeSelectionListener(SelectionListener listener) { + checkbox.removeSelectionListener(listener); + } + + public String getName() { + return name; + } + + public boolean isChecked() { + return checkbox.getSelection(); + } + + public void dispose() { + body.dispose(); + } +} diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSelectionFinishedListener.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSelectionFinishedListener.java new file mode 100755 index 0000000..ac551f3 --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/PackageSelectionFinishedListener.java @@ -0,0 +1,8 @@ +package com.dubture.composer.ui.parts.composer; + +import java.util.List; + +public interface PackageSelectionFinishedListener { + + public void packagesSelected(List packages); +} diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/VersionSuggestion.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/VersionSuggestion.java new file mode 100644 index 0000000..9322f71 --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/parts/composer/VersionSuggestion.java @@ -0,0 +1,128 @@ +package com.dubture.composer.ui.parts.composer; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.getcomposer.ComposerConstants; + +import com.dubture.composer.ui.utils.WidgetFactory; +import com.dubture.composer.ui.utils.WidgetHelper; + +public class VersionSuggestion { + + private FormToolkit toolkit = null; + private WidgetFactory factory = null; + private Text version; + private Composite body; + + private Button recentMinor; + private Button recentMajor; + private Button noConstraint; + private Map constraintButtons = new HashMap(); + + public VersionSuggestion(String name, Composite parent, Text version, FormToolkit toolkit) { + this(name, parent, version, new WidgetFactory(toolkit)); + this.toolkit = toolkit; + } + + public VersionSuggestion(String name, Composite parent, Text version, WidgetFactory factory) { + this.factory = factory; + this.version = version; + // TODO: load package with versions + create(parent, factory); + } + + private void create(Composite parent, WidgetFactory factory) { + body = factory.createComposite(parent); + body.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + body.setLayout(new GridLayout()); + body.setBackground(parent.getBackground()); + WidgetHelper.trimComposite(body, 0, 0, 0, 0, 0, 0); + + // suggestions + Group suggestions = new Group(body, SWT.SHADOW_IN); + suggestions.setText("Suggestions"); + suggestions.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + suggestions.setLayout(new GridLayout(2, true)); + suggestions.setBackgroundMode(SWT.INHERIT_DEFAULT); + WidgetHelper.trimComposite(suggestions, 0, 0, 0, 0, 0, 5); +// makeSlim(suggestions); + + Composite major = factory.createComposite(suggestions, SWT.NO_BACKGROUND | SWT.TRANSPARENT); + major.setLayout(new GridLayout()); + WidgetHelper.trimComposite(major, -5, -5); +// makeSlim(major); + + Label recentMajorLbl = factory.createLabel(major, SWT.TRANSPARENT); + recentMajorLbl.setText("Recent Major:"); + recentMajorLbl.setBackground(suggestions.getBackground()); + + recentMajor = factory.createButton(major); + recentMajor.setText("~ X"); + recentMajor.setAlignment(SWT.CENTER); + recentMajor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + + Composite minor = factory.createComposite(suggestions, SWT.NO_BACKGROUND | SWT.TRANSPARENT); + minor.setLayout(new GridLayout()); + WidgetHelper.trimComposite(minor, -5, -5); +// makeSlim(minor); + + Label recentMinorLbl = factory.createLabel(minor, SWT.NO_BACKGROUND); + recentMinorLbl.setText("Recent Minor:"); + recentMinorLbl.setBackground(suggestions.getBackground()); + + recentMinor = factory.createButton(minor); + recentMinor.setText("~ X.Y"); + recentMinor.setAlignment(SWT.CENTER); + recentMinor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + + // custom + Group custom = new Group(body, SWT.SHADOW_ETCHED_IN); + custom.setText("Custom"); + custom.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + custom.setLayout(new GridLayout(2, false)); + custom.setBackgroundMode(SWT.INHERIT_DEFAULT); + WidgetHelper.trimComposite(custom, 0, 0, 0, 0, 0, 5); + + TableViewer versions = new TableViewer(custom); + versions.getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1)); + + Composite constraints = factory.createComposite(custom, SWT.NO_BACKGROUND); + constraints.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); + constraints.setLayout(new GridLayout(3, false)); + constraints.setBackgroundMode(SWT.INHERIT_DEFAULT); + WidgetHelper.trimComposite(constraints, -5, -5, -5, -5, 0, 0); +// makeSlim(constraints); + + Label constraintsLbl = factory.createLabel(constraints, SWT.NO_BACKGROUND | SWT.TRANSPARENT); + constraintsLbl.setText("Constraints:"); + constraintsLbl.setBackground(custom.getBackground()); + constraintsLbl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); + + noConstraint = factory.createButton(constraints, SWT.RADIO | SWT.NO_BACKGROUND); + noConstraint.setText("None"); + noConstraint.setBackground(custom.getBackground()); + noConstraint.setSelection(true); + + for (String constraint : new String[]{"~", ">", ">=", "!=", "<", ">="}) { + Button c = factory.createButton(constraints, SWT.RADIO | SWT.TRANSPARENT); + c.setText(constraint); + c.setBackground(custom.getBackground()); + constraintButtons.put(constraint, c); + } + } + + public Composite getBody() { + return body; + } +} diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/preferences/ComposerPreferencePage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/preferences/ComposerPreferencePage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/utils/WidgetFactory.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/utils/WidgetFactory.java new file mode 100644 index 0000000..d5994e4 --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/utils/WidgetFactory.java @@ -0,0 +1,149 @@ +package com.dubture.composer.ui.utils; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.widgets.ExpandableComposite; +import org.eclipse.ui.forms.widgets.FormToolkit; + +public class WidgetFactory { + + protected FormToolkit toolkit; + + public WidgetFactory(FormToolkit toolkit) { + this.toolkit = toolkit; + } + + private static WidgetFactory builder(FormToolkit toolkit) { + return new WidgetFactory(toolkit); + } + + + // ---- Button + + public Button createButton(Composite parent) { + return createButton(parent, SWT.DEFAULT); + } + + public static Button createButton(FormToolkit toolkit, Composite parent) { + return WidgetFactory.builder(toolkit).createButton(parent); + } + + public Button createButton(Composite parent, int style) { + if (toolkit == null) { + return new Button(parent, style); + } else { + return toolkit.createButton(parent, "", style); + } + } + + public static Button createButton(FormToolkit toolkit, Composite parent, int style) { + return WidgetFactory.builder(toolkit).createButton(parent, style); + } + + + // ---- Label + + public Label createLabel(Composite parent) { + return createLabel(parent, SWT.NONE); + } + + public static Label createLabel(FormToolkit toolkit, Composite parent) { + return WidgetFactory.builder(toolkit).createLabel(parent); + } + + public Label createLabel(Composite parent, int style) { + if (toolkit == null) { + return new Label(parent, style); + } else { + return toolkit.createLabel(parent, "", style); + } + } + + public static Label createLabel(FormToolkit toolkit, Composite parent, int style) { + return WidgetFactory.builder(toolkit).createLabel(parent, style); + } + + + // ---- Composite + + public Composite createComposite(Composite parent) { + return createComposite(parent, SWT.NONE); + } + + public static Composite createComposite(FormToolkit toolkit, Composite parent) { + return WidgetFactory.builder(toolkit).createComposite(parent); + } + + public Composite createComposite(Composite parent, int style) { + if (toolkit == null) { + return new Composite(parent, style); + } else { + return toolkit.createComposite(parent, style); + } + } + + public static Composite createComposite(FormToolkit toolkit, Composite parent, int style) { + return WidgetFactory.builder(toolkit).createComposite(parent, style); + } + + + // ---- ExpandableComposite + + public ExpandableComposite createExpandableComposite(Composite parent) { + return createExpandableComposite(parent, SWT.NONE); + } + + public static ExpandableComposite createExpandableComposite(FormToolkit toolkit, Composite parent) { + return WidgetFactory.builder(toolkit).createExpandableComposite(parent); + } + + public ExpandableComposite createExpandableComposite(Composite parent, int style) { + if (toolkit == null) { + return new ExpandableComposite(parent, style); + } else { + return toolkit.createExpandableComposite(parent, style); + } + } + + public static ExpandableComposite createExpandableComposite(FormToolkit toolkit, Composite parent, int style) { + return WidgetFactory.builder(toolkit).createExpandableComposite(parent, style); + } + + public ExpandableComposite createExpandableComposite(Composite parent, int style, int expansionStyle) { + if (toolkit == null) { + return new ExpandableComposite(parent, style, expansionStyle); + } else { + ExpandableComposite ec = new ExpandableComposite(parent, style | toolkit.getOrientation(), + expansionStyle); + ec.setMenu(parent.getMenu()); + toolkit.adapt(ec, true, true); + return ec; + } + } + + + // ---- Text + + public Text createText(Composite parent) { + return createText(parent, SWT.DEFAULT); + } + + public static Text createText(FormToolkit toolkit, Composite parent) { + return WidgetFactory.builder(toolkit).createText(parent); + } + + public Text createText(Composite parent, int style) { + if (toolkit == null) { + return new Text(parent, style); + } else { + return toolkit.createText(parent, "", style); + } + } + + public static Text createText(FormToolkit toolkit, Composite parent, int style) { + return WidgetFactory.builder(toolkit).createText(parent, style); + } +} diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/utils/WidgetHelper.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/utils/WidgetHelper.java new file mode 100644 index 0000000..879726d --- /dev/null +++ b/com.dubture.composer.ui/src/com/dubture/composer/ui/utils/WidgetHelper.java @@ -0,0 +1,105 @@ +package com.dubture.composer.ui.utils; + +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Layout; + +public class WidgetHelper { + + /** + * Trims a composite and its vertical and horizontal padding + * + * @param composite + * @param top + * @param right + * @param bottom + * @param left + * @param vertical + * @param horizontal + */ + public static void trimComposite(Composite composite, int top, int right, int bottom, int left, int vertical, int horizontal) { + Layout raw = composite.getLayout(); + if (raw instanceof GridLayout) { + GridLayout layout = (GridLayout)raw; + layout.marginTop = top; + layout.marginRight = right; + layout.marginBottom = bottom; + layout.marginLeft = left; + layout.verticalSpacing = vertical; + layout.horizontalSpacing = horizontal; + } + } + + /** + * Trims a composite + * + * @param composite + * @param top + * @param right + * @param bottom + * @param left + */ + public static void trimComposite(Composite composite, int top, int right, int bottom, int left) { + Layout raw = composite.getLayout(); + if (raw instanceof GridLayout) { + GridLayout layout = (GridLayout)raw; + layout.marginTop = top; + layout.marginRight = right; + layout.marginBottom = bottom; + layout.marginLeft = left; + } + } + + /** + * Trims a composite + * + * @param composite + * @param top + * @param rightleft + * @param bottom + */ + public static void trimComposite(Composite composite, int top, int rightleft, int bottom) { + Layout raw = composite.getLayout(); + if (raw instanceof GridLayout) { + GridLayout layout = (GridLayout)raw; + layout.marginTop = top; + layout.marginRight = rightleft; + layout.marginBottom = bottom; + layout.marginLeft = rightleft; + } + } + + /** + * Trims a composite + * + * @param composite + * @param topbottom + * @param rightleft + */ + public static void trimComposite(Composite composite, int topbottom, int rightleft) { + Layout raw = composite.getLayout(); + if (raw instanceof GridLayout) { + GridLayout layout = (GridLayout)raw; + layout.marginTop = topbottom; + layout.marginRight = rightleft; + layout.marginBottom = topbottom; + layout.marginLeft = rightleft; + } + } + + /** + * Sets padding for a composite + * + * @param composite + * @param vertical + * @param horizontal + */ + public static void padComposite(Composite composite, int vertical, int horizontal) { + Layout raw = composite.getLayout(); + if (raw instanceof GridLayout) { + GridLayout layout = (GridLayout)raw; + layout.verticalSpacing = vertical; + layout.horizontalSpacing = horizontal; + } + } +} diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/view/dependencies/DependencyGraph.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/view/dependencies/DependencyGraph.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/view/dependencies/GraphContentProvider.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/view/dependencies/GraphContentProvider.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/view/dependencies/GraphLabelProvider.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/view/dependencies/GraphLabelProvider.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/init/InitComposerPage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/init/InitComposerPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/init/InitComposerWizard.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/init/InitComposerWizard.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/AbstractDescriptorItemUi.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/AbstractDescriptorItemUi.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/AbstractItemInstallerPage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/AbstractItemInstallerPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/ItemInstaller.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/ItemInstaller.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/MultiItemInstallerPage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/MultiItemInstallerPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/SingleItemInstallerPage.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/iteminstaller/SingleItemInstallerPage.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/PackageItemUI.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/PackageItemUI.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/RequirePageOne.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/RequirePageOne.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/RequirePageTwo.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/RequirePageTwo.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/RequireWizard.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/RequireWizard.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/VersionChangeListener.java b/com.dubture.composer.ui/src/com/dubture/composer/ui/wizard/require/VersionChangeListener.java old mode 100644 new mode 100755 diff --git a/com.dubture.composer.ui/src/org/eclipse/wb/swt/SWTResourceManager.java b/com.dubture.composer.ui/src/org/eclipse/wb/swt/SWTResourceManager.java old mode 100644 new mode 100755 diff --git a/composer.json b/composer.json old mode 100644 new mode 100755 diff --git a/docs/buildpathmanagement.md b/docs/buildpathmanagement.md old mode 100644 new mode 100755 diff --git a/pom.xml b/pom.xml old mode 100644 new mode 100755