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 / +128 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 model ids selected
552
			Set selectedModels;
553
			selectedModels = getSelectedModelIds(true);
554
551
			ReloadOperation op = new ReloadOperation(platformPath);
555
			ReloadOperation op = new ReloadOperation(platformPath);
552
			try {
556
			try {
553
				PlatformUI.getWorkbench().getProgressService().run(true, false, op);
557
				PlatformUI.getWorkbench().getProgressService().run(true, false, op);
Lines 556-565 Link Here
556
			}
560
			}
557
			fPluginListViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager());
561
			fPluginListViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager());
558
			fPluginTreeViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager());
562
			fPluginTreeViewer.setInput(PDECore.getDefault().getModelManager().getExternalModelManager());
559
			fPluginTreeViewer.setSubtreeChecked(fPluginTreeViewer.getInput(), true);
560
			fPluginTreeViewer.setGrayedElements(new Object[0]);
563
			fPluginTreeViewer.setGrayedElements(new Object[0]);
561
			fChangedModels.clear();
564
			fChangedModels.clear();
562
			handleSelectAll(true);
565
566
			boolean restoredSelection;
567
			restoredSelection = handleRestoreSelection(selectedModels);
568
569
			// If the selection wasn't restored the default to the 'select all' logic
570
			if (!restoredSelection)
571
				handleSelectAll(true);
572
563
			if (fTreeViewerContents.size() > 1)
573
			if (fTreeViewerContents.size() > 1)
564
				fPluginTreeViewer.collapseAll();
574
				fPluginTreeViewer.collapseAll();
565
			fReloaded = true;
575
			fReloaded = true;
Lines 569-574 Link Here
569
	}
579
	}
570
580
571
	/**
581
	/**
582
	 * Return a set of currently selected model ids
583
	 * @param nullIfAll Affects what will be returned if all are selected,
584
	 *            i.e. if true and all are selected then this will return <code>null</code>.
585
	 * @return A set of identifiers for the currently selected models, or <code>null</code>
586
	 *            if all are selected and <code>nullIfAll</code> is <code>true</code>. 
587
	 */
588
	private Set getSelectedModelIds(boolean nullIfAll) {
589
	
590
		Object[] itemsCheckedInList = fPluginListViewer.getCheckedElements();
591
		IPluginModelBase[] allModels = getCurrentModels();
592
		boolean allSelected = (itemsCheckedInList.length == allModels.length);
593
		if (nullIfAll && allSelected) {
594
	
595
			// All items are selected - no need to do any magic, just return null
596
			return null;
597
		}
598
	
599
		Set selectedModels;
600
	
601
		// Build a set containing the ids of the selected plugin/bundle/fragments
602
		selectedModels = new HashSet();
603
		for (int i = 0; i < itemsCheckedInList.length; i++) {
604
			Object item = itemsCheckedInList[i];
605
			if (item instanceof IPluginModel) {
606
	
607
				IPluginModel pluginModel = (IPluginModel) item;
608
				String id = pluginModel.getPluginBase().getId();
609
				selectedModels.add(id);
610
	
611
			} else if (item instanceof IFragmentModel) {
612
	
613
				IFragmentModel fragmentModel = (IFragmentModel) item;
614
				String id = fragmentModel.getPluginBase().getId();
615
				selectedModels.add(id);
616
			}
617
		}
618
	
619
		return selectedModels;
620
	}
621
622
	/**
572
	 * Sets the given locations as additional locations to check, then handles the reload.
623
	 * Sets the given locations as additional locations to check, then handles the reload.
573
	 * @param additionalLocations list of additional locations.
624
	 * @param additionalLocations list of additional locations.
574
	 */
625
	 */
Lines 724-729 Link Here
724
	}
775
	}
725
776
726
	/**
777
	/**
778
	 * Restore the selection to the specified set of models.
779
	 * @param selectedModels Set of plugin/bundle identifiers
780
	 * @return true if the selection occurred, false if it didn't
781
	 */
782
	private boolean handleRestoreSelection(Set selectedModels) {
783
784
		boolean restoredSelection = false;
785
786
		if (selectedModels != null) {
787
788
			int numSelected = 0;
789
790
			IPluginModelBase[] allModels = getCurrentModels();
791
792
			// There are two ways of dealing with the checking of the UI widgets:
793
			//  (1) un-check them all and selectively check individual ones
794
			//  (1) check them all and selectively un-check individual ones
795
			// The method chosen depends on the ratio of selectedModels to allModels.
796
			// This method cannot be guaranteed to be accurate since the set of plugins
797
			// between two targets may be completely different, but it's going to give a
798
			// reasonable guess.
799
800
			boolean checkingMethod = true;
801
			if (selectedModels.size() > (allModels.length / 2)) {
802
				// more than half the number of models to be selected than
803
				// models we have in total, so selectively un-check
804
				checkingMethod = false;
805
			}
806
807
			fPluginListViewer.setAllChecked(!checkingMethod);
808
			fPluginTreeViewer.setAllChecked(!checkingMethod);
809
810
			restoredSelection = true;
811
812
			for (int i = 0; i < allModels.length; i++) {
813
				IPluginModelBase model = allModels[i];
814
815
				String id = model.getPluginBase().getId();
816
				boolean selected = selectedModels.contains(id);
817
818
				if (selected) {
819
					numSelected++;
820
					if (checkingMethod) {
821
						fPluginListViewer.setChecked(model, true);
822
						fPluginTreeViewer.setChecked(model, true);
823
					}
824
				} else if (!checkingMethod) {
825
826
					fPluginListViewer.setChecked(model, false);
827
					fPluginTreeViewer.setChecked(model, false);
828
				}
829
830
				if (model.isEnabled() != selected) {
831
					fChangedModels.add(model);
832
				} else if (fChangedModels.contains(model) && model.isEnabled() == selected) {
833
					fChangedModels.remove(model);
834
				}
835
			}
836
837
			// Handle grey-ness in table
838
			Set parents = fTreeViewerContents.keySet();
839
			Iterator parentIter = parents.iterator();
840
			while (parentIter.hasNext()) {
841
				File parent = (File) parentIter.next();
842
				handleGrayChecked(parent, true);
843
			}
844
845
			setCounter(numSelected);
846
		}
847
		return restoredSelection;
848
	}
849
850
	/**
727
	 * Enables or disables all of the plugins.
851
	 * Enables or disables all of the plugins.
728
	 * @param selected whether to enable or disable the plugins
852
	 * @param selected whether to enable or disable the plugins
729
	 */
853
	 */

Return to bug 72511