KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > debug > internal > ui > actions > ToggleFilterAction


1 /*******************************************************************************
2  * Copyright (c) 2000, 2005 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.debug.internal.ui.actions;
12
13
14 import org.eclipse.jface.action.Action;
15 import org.eclipse.jface.viewers.StructuredViewer;
16 import org.eclipse.jface.viewers.ViewerFilter;
17 import org.eclipse.swt.custom.BusyIndicator;
18
19 /**
20  * A generic Toggle filter action, meant to be subclassed to provide
21  * a specific filter.
22  */

23 public abstract class ToggleFilterAction extends Action {
24
25     /**
26      * The viewer that this action works for
27      */

28     private StructuredViewer fViewer;
29     
30     /**
31      * The filter this action applies to the viewer
32      */

33     private ViewerFilter fViewerFilter;
34
35     public void run() {
36         valueChanged(isChecked());
37     }
38     /**
39      * Adds or removes the viewer filter depending
40      * on the value of the parameter.
41      */

42     protected void valueChanged(final boolean on) {
43         if (getViewer().getControl().isDisposed()) {
44             return;
45         }
46         BusyIndicator.showWhile(getViewer().getControl().getDisplay(), new Runnable JavaDoc() {
47             public void run() {
48                 if (on) {
49                     ViewerFilter filter= getViewerFilter();
50                     ViewerFilter[] filters= getViewer().getFilters();
51                     boolean alreadyAdded= false;
52                     for (int i= 0; i < filters.length; i++) {
53                         ViewerFilter addedFilter= filters[i];
54                         if (addedFilter.equals(filter)) {
55                             alreadyAdded= true;
56                             break;
57                         }
58                     }
59                     if (!alreadyAdded) {
60                         getViewer().addFilter(filter);
61                     }
62                     
63                 } else {
64                     getViewer().removeFilter(getViewerFilter());
65                 }
66             }
67         });
68     }
69
70     /**
71      * Returns the <code>ViewerFilter</code> that this action
72      * will add/remove from the viewer, or <code>null</code>
73      * if no filter is involved.
74      */

75     protected ViewerFilter getViewerFilter() {
76         return fViewerFilter;
77     }
78
79     protected void setViewerFilter(ViewerFilter filter) {
80         fViewerFilter= filter;
81     }
82     
83     protected StructuredViewer getViewer() {
84         return fViewer;
85     }
86
87     protected void setViewer(StructuredViewer viewer) {
88         fViewer = viewer;
89     }
90 }
91
Popular Tags