Bug 75282 - Composite breakpoint groups
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowBreakpointsByDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowBreakpointsByDialog.java
index 7080347..e156562 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowBreakpointsByDialog.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowBreakpointsByDialog.java
@@ -147,6 +147,11 @@
 		fSelectedViewer.setLabelProvider(labelProvider);
 		fSelectedViewer.setInput(new Object());
 		fSelectedViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
+		fSelectedViewer.addDoubleClickListener(new IDoubleClickListener() {
+            public void doubleClick(DoubleClickEvent event) {
+                handleRemovePressed();
+            }
+        });
 		fSelectedViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
 				updateSelectedButtons();
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowSupportedBreakpointsAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowSupportedBreakpointsAction.java
index 2bd3ff6..2d17053 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowSupportedBreakpointsAction.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowSupportedBreakpointsAction.java
@@ -26,6 +26,7 @@
 import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView;
 import org.eclipse.debug.internal.ui.views.breakpoints.IBreakpointContainer;
 import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredViewer;
@@ -172,7 +173,6 @@
 	protected void reapplyFilters(List debugTargets) {
 		fDebugTargets= debugTargets;		
 		getViewer().refresh();
-		((BreakpointsView)getView()).initializeCheckedState();
 	}
 	
 	protected IViewPart getView() {
@@ -221,9 +221,9 @@
 			getView().getSite().getPage().removeSelectionListener(IDebugUIConstants.ID_DEBUG_VIEW, this);
 		}
 		super.valueChanged(on);
-		if (!on) {
-			((BreakpointsView)getView()).initializeCheckedState();
-		}
+//		if (!on) {
+//			((BreakpointsView)getView()).initializeCheckedState((CheckboxTreeViewer) getViewer());
+//		}
 	}
 	
 }
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/AbstractBreakpointContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/AbstractBreakpointContainerFactory.java
index 0301d52..24fadaf 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/AbstractBreakpointContainerFactory.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/AbstractBreakpointContainerFactory.java
@@ -39,8 +39,8 @@
 		return fLabel= label;
 	}
 	
-	public void setIdentifier(String id) {
-		fIdentifier= id;
+	public void setIdentifier(String identifier) {
+		fIdentifier= identifier;
 	}
 	
 	public String getIdentifier() {
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainerFactoryManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainerFactoryManager.java
index b4acb3c..8787873 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainerFactoryManager.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainerFactoryManager.java
@@ -54,6 +54,7 @@
 				try {
 					IBreakpointContainerFactory factory = (IBreakpointContainerFactory) element.createExecutableExtension("class"); //$NON-NLS-1$
 					factory.setLabel(label);
+					factory.setIdentifier(id);
 					if (factory != null) {
 						fFactories.put(id, factory);
 					}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java
index 9af58cb..a34c635 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java
@@ -86,7 +86,6 @@
 	public void createPartControl(Composite parent) {
 		super.createPartControl(parent);
 		if (getViewer() != null) {
-			initializeCheckedState();
 			updateViewerBackground();
 			DebugPlugin.getDefault().getBreakpointManager().addBreakpointManagerListener(this);
 		}
@@ -96,10 +95,25 @@
 	 * @see AbstractDebugView#createViewer(Composite)
 	 */
 	protected Viewer createViewer(Composite parent) {
-		final CheckboxTreeViewer viewer = new CheckboxTreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CHECK));
 		fContentProvider= new BreakpointsViewContentProvider();
+		final CheckboxTreeViewer viewer = new CheckboxTreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CHECK)) {
+		    public void refresh() {
+                super.refresh();
+                initializeCheckedState(this, fContentProvider);
+            }
+		};
 		viewer.setContentProvider(fContentProvider);
-		viewer.setLabelProvider(new DelegatingModelPresentation() {
+		viewer.setSorter(new BreakpointsSorter());
+		viewer.setInput(DebugPlugin.getDefault().getBreakpointManager());
+		viewer.addCheckStateListener(fCheckListener);
+		viewer.addTreeListener(new ITreeViewerListener() {
+			public void treeExpanded(TreeExpansionEvent event) {
+				initializeCheckedState(viewer, fContentProvider);
+			}
+			public void treeCollapsed(TreeExpansionEvent event) {
+			}
+		});
+	    viewer.setLabelProvider(new DelegatingModelPresentation() {
 			public Image getImage(Object item) {
 				if (item instanceof IBreakpointContainer) {
 					IBreakpointContainer container= (IBreakpointContainer) item;
@@ -120,16 +134,6 @@
 				return super.getText(item);
 			}
 		});
-		viewer.setSorter(new BreakpointsSorter());
-		viewer.setInput(DebugPlugin.getDefault().getBreakpointManager());
-		viewer.addCheckStateListener(fCheckListener);
-		viewer.addTreeListener(new ITreeViewerListener() {
-			public void treeExpanded(TreeExpansionEvent event) {
-				initializeCheckedState();
-			}
-			public void treeCollapsed(TreeExpansionEvent event) {
-			}
-		});
 		
 		// Necessary so that the PropertySheetView hears about selections in this view
 		getSite().setSelectionProvider(viewer);
@@ -184,10 +188,8 @@
 	/**
 	 * Sets the initial checked state of the items in the viewer.
 	 */
-	public void initializeCheckedState() {
+	public void initializeCheckedState(CheckboxTreeViewer viewer, ITreeContentProvider provider) {
 		IBreakpointManager manager= DebugPlugin.getDefault().getBreakpointManager();
-		CheckboxTreeViewer viewer= getCheckboxViewer();
-		ITreeContentProvider provider= getTreeContentProvider();
 		Object[] elements= provider.getElements(manager);
 		ArrayList elementsToCheck= new ArrayList(elements.length);
 		for (int i = 0; i < elements.length; i++) {
@@ -502,7 +504,6 @@
 	protected void becomesVisible() {
 		super.becomesVisible();
 		getViewer().refresh();
-		initializeCheckedState();
 		updateViewerBackground();
 	}
 
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsViewContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsViewContentProvider.java
index ba9f45d..7fb49da 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsViewContentProvider.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsViewContentProvider.java
@@ -27,12 +27,6 @@
 	private List fBreakpointContainerFactories= new ArrayList();
 	
 	private Map fParentMap= new HashMap();
-	
-	public BreakpointsViewContentProvider() {
-		fBreakpointContainerFactories.add(BreakpointContainerFactoryManager.getDefault().getFactory("org.eclipse.debug.ui.breakpointTypeContainerFactory"));
-		fBreakpointContainerFactories.add(BreakpointContainerFactoryManager.getDefault().getFactory("org.eclipse.debug.ui.breakpointProjectContainerFactory"));
-		fBreakpointContainerFactories.add(BreakpointContainerFactoryManager.getDefault().getFactory("org.eclipse.debug.ui.breakpointFileContainerFactory"));
-	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsViewEventHandler.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsViewEventHandler.java
index efd3009..a111263 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsViewEventHandler.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsViewEventHandler.java
@@ -126,7 +126,6 @@
 					if (fView.isAvailable()) {
 						CheckboxTreeViewer viewer= (CheckboxTreeViewer)fView.getViewer();
 						viewer.refresh();
-						fView.initializeCheckedState();
 						fView.updateObjects();
 					}
 				}
@@ -158,7 +157,6 @@
 							while (iter.hasNext()) {
 								viewer.expandToLevel(iter.next(), AbstractTreeViewer.ALL_LEVELS);
 							}
-							fView.initializeCheckedState();
 							return;
 						}
 						List groupsToUpdate= new ArrayList();
@@ -237,7 +235,6 @@
 			fView.asyncExec(new Runnable() {
 				public void run() {
 					fView.getViewer().refresh();
-					fView.initializeCheckedState();
 				}
 			});
 		}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/IBreakpointContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/IBreakpointContainerFactory.java
index c31fe48..9130f9f 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/IBreakpointContainerFactory.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/IBreakpointContainerFactory.java
@@ -32,6 +32,8 @@
 	
 	public String getIdentifier();
 	
+	public void setIdentifier(String identifier);
+	
 	/**
 	 * Disposes this container factory. Allows the factory to clean up any
 	 * resources related to images that it may have used for containers