View | Details | Raw Unified | Return to bug 72511 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/pde/internal/ui/preferences/TargetPluginsTab.java (-4 / +113 lines)
Lines 28-35 Link Here
28
import org.eclipse.osgi.util.NLS;
28
import org.eclipse.osgi.util.NLS;
29
import org.eclipse.pde.core.IModel;
29
import org.eclipse.pde.core.IModel;
30
import org.eclipse.pde.core.IModelProviderEvent;
30
import org.eclipse.pde.core.IModelProviderEvent;
31
import org.eclipse.pde.core.plugin.IPluginModelBase;
31
import org.eclipse.pde.core.plugin.*;
32
import org.eclipse.pde.core.plugin.PluginRegistry;
33
import org.eclipse.pde.internal.core.*;
32
import org.eclipse.pde.internal.core.*;
34
import org.eclipse.pde.internal.core.ifeature.*;
33
import org.eclipse.pde.internal.core.ifeature.*;
35
import org.eclipse.pde.internal.core.itarget.*;
34
import org.eclipse.pde.internal.core.itarget.*;
Lines 548-553 Link Here
548
	protected void handleReload() {
547
	protected void handleReload() {
549
		String platformPath = fPage.getPlatformPath();
548
		String platformPath = fPage.getPlatformPath();
550
		if (platformPath != null && platformPath.length() > 0) {
549
		if (platformPath != null && platformPath.length() > 0) {
550
551
			// Get the set of models selected
552
			Set selectedModels;
553
			Object[] itemsCheckedInList = fPluginListViewer.getCheckedElements();
554
			IPluginModelBase[] allModels = getCurrentModels();
555
			if (itemsCheckedInList.length == allModels.length) {
556
557
				// All items are selected - no need to do any magic selection retention stuff
558
				selectedModels = null;
559
560
			} else {
561
562
				// Build a set containing the ids of the selected plugin/bundle/fragments
563
				selectedModels = new HashSet();
564
				for (int i = 0; i < itemsCheckedInList.length; i++) {
565
					Object item = itemsCheckedInList[i];
566
					if (item instanceof IPluginModel) {
567
568
						IPluginModel pluginModel = (IPluginModel) item;
569
						String id = pluginModel.getPluginBase().getId();
570
						selectedModels.add(id);
571
572
					} else if (item instanceof IFragmentModel) {
573
574
						IFragmentModel fragmentModel = (IFragmentModel) item;
575
						String id = fragmentModel.getPluginBase().getId();
576
						selectedModels.add(id);
577
					}
578
				}
579
			}
580
551
			ReloadOperation op = new ReloadOperation(platformPath);
581
			ReloadOperation op = new ReloadOperation(platformPath);
552
			try {
582
			try {
553
				PlatformUI.getWorkbench().getProgressService().run(true, false, op);
583
				PlatformUI.getWorkbench().getProgressService().run(true, false, op);
Lines 556-565 Link Here
556
			}
586
			}
557
			fPluginListViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager());
587
			fPluginListViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager());
558
			fPluginTreeViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager());
588
			fPluginTreeViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager());
559
			fPluginTreeViewer.setSubtreeChecked(fPluginTreeViewer.getInput(), true);
560
			fPluginTreeViewer.setGrayedElements(new Object[0]);
589
			fPluginTreeViewer.setGrayedElements(new Object[0]);
561
			fChangedModels.clear();
590
			fChangedModels.clear();
562
			handleSelectAll(true);
591
592
			boolean restoredSelection;
593
			restoredSelection = handleRestoreSelection(selectedModels);
594
595
			// If the selection wasn't restored the default to the 'select all' logic
596
			if (!restoredSelection)
597
				handleSelectAll(true);
598
563
			if (fTreeViewerContents.size() > 1)
599
			if (fTreeViewerContents.size() > 1)
564
				fPluginTreeViewer.collapseAll();
600
				fPluginTreeViewer.collapseAll();
565
			fReloaded = true;
601
			fReloaded = true;
Lines 724-729 Link Here
724
	}
760
	}
725
761
726
	/**
762
	/**
763
	 * Restore the selection to the specified set of models.
764
	 * @param selectedModels Set of plugin/bundle identifiers
765
	 * @return true if the selection occurred, false if it didn't
766
	 */
767
	private boolean handleRestoreSelection(Set selectedModels) {
768
769
		boolean restoredSelection = false;
770
771
		if (selectedModels != null) {
772
773
			int numSelected = 0;
774
775
			IPluginModelBase[] allModels = getCurrentModels();
776
777
			// There are two ways of dealing with the checking of the UI widgets:
778
			//  (1) un-check them all and selectively check individual ones
779
			//  (1) check them all and selectively un-check individual ones
780
			// The method chosen depends on the ratio of selectedModels to allModels.
781
			// This method cannot be guaranteed to be accurate since the set of plugins
782
			// between two targets may be completely different, but it's going to give a
783
			// reasonable guess.
784
785
			boolean checkingMethod = true;
786
			if (selectedModels.size() > (allModels.length / 2)) {
787
				// more than half the number of models to be selected than
788
				// models we have in total, so selectively un-check
789
				checkingMethod = false;
790
			}
791
792
			fPluginListViewer.setAllChecked(!checkingMethod);
793
			fPluginTreeViewer.setAllChecked(!checkingMethod);
794
795
			restoredSelection = true;
796
797
			for (int i = 0; i < allModels.length; i++) {
798
				IPluginModelBase model = allModels[i];
799
800
				String id = model.getPluginBase().getId();
801
				boolean selected = selectedModels.contains(id);
802
803
				if (selected) {
804
					numSelected++;
805
					if (checkingMethod) {
806
						fPluginListViewer.setChecked(model, true);
807
						fPluginTreeViewer.setChecked(model, true);
808
					}
809
				} else if (!checkingMethod) {
810
811
					fPluginListViewer.setChecked(model, false);
812
					fPluginTreeViewer.setChecked(model, false);
813
				}
814
815
				if (model.isEnabled() != selected) {
816
					fChangedModels.add(model);
817
				} else if (fChangedModels.contains(model) && model.isEnabled() == selected) {
818
					fChangedModels.remove(model);
819
				}
820
			}
821
822
			// Handle grey-ness in table
823
			Set parents = fTreeViewerContents.keySet();
824
			Iterator parentIter = parents.iterator();
825
			while (parentIter.hasNext()) {
826
				File parent = (File) parentIter.next();
827
				handleGrayChecked(parent, true);
828
			}
829
830
			setCounter(numSelected);
831
		}
832
		return restoredSelection;
833
	}
834
835
	/**
727
	 * Enables or disables all of the plugins.
836
	 * Enables or disables all of the plugins.
728
	 * @param selected whether to enable or disable the plugins
837
	 * @param selected whether to enable or disable the plugins
729
	 */
838
	 */

Return to bug 72511