1 11 package org.eclipse.jdt.internal.debug.ui.actions; 12 13 14 import org.eclipse.debug.ui.IDebugView; 15 import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin; 16 import org.eclipse.jface.action.IAction; 17 import org.eclipse.jface.preference.IPreferenceStore; 18 import org.eclipse.jface.util.IPropertyChangeListener; 19 import org.eclipse.jface.util.PropertyChangeEvent; 20 import org.eclipse.jface.viewers.ISelection; 21 import org.eclipse.jface.viewers.StructuredViewer; 22 import org.eclipse.jface.viewers.Viewer; 23 import org.eclipse.jface.viewers.ViewerFilter; 24 import org.eclipse.swt.widgets.Event; 25 import org.eclipse.ui.IActionDelegate2; 26 import org.eclipse.ui.IViewActionDelegate; 27 import org.eclipse.ui.IViewPart; 28 29 32 public abstract class ViewFilterAction extends ViewerFilter implements IViewActionDelegate, IActionDelegate2 { 33 34 private IViewPart fView; 35 private IAction fAction; 36 private IPropertyChangeListener fListener = new Updater(); 37 38 class Updater implements IPropertyChangeListener { 39 40 43 public void propertyChange(PropertyChangeEvent event) { 44 if (event.getProperty().equals(getPreferenceKey()) || 45 event.getProperty().equals(getCompositeKey())) { 46 fAction.setChecked(getPreferenceValue()); 47 } 48 49 } 50 51 } 52 53 public ViewFilterAction() { 54 super(); 55 } 56 57 60 public void init(IViewPart view) { 61 fView = view; 62 fAction.setChecked(getPreferenceValue()); 63 run(fAction); 64 getPreferenceStore().addPropertyChangeListener(fListener); 65 } 66 67 70 public void init(IAction action) { 71 fAction = action; 72 } 73 74 77 public void dispose() { 78 getPreferenceStore().removePropertyChangeListener(fListener); 79 } 80 81 84 public void runWithEvent(IAction action, Event event) { 85 run(action); 86 } 87 88 91 public void run(IAction action) { 92 StructuredViewer viewer = getStructuredViewer(); 93 ViewerFilter[] filters = viewer.getFilters(); 94 ViewerFilter filter = null; 95 for (int i = 0; i < filters.length; i++) { 96 if (filters[i] == this) { 97 filter = filters[i]; 98 break; 99 } 100 } 101 if (filter == null) { 102 viewer.addFilter(this); 103 } else { 104 viewer.refresh(); 106 } 107 IPreferenceStore store = getPreferenceStore(); 108 String key = getView().getSite().getId() + "." + getPreferenceKey(); store.setValue(key, action.isChecked()); 110 } 111 112 115 public void selectionChanged(IAction action, ISelection selection) { 116 } 117 118 protected IPreferenceStore getPreferenceStore() { 119 return JDIDebugUIPlugin.getDefault().getPreferenceStore(); 120 } 121 122 129 protected boolean getPreferenceValue() { 130 String key = getCompositeKey(); 131 IPreferenceStore store = getPreferenceStore(); 132 boolean value = false; 133 if (store.contains(key)) { 134 value = store.getBoolean(key); 135 } else { 136 value = store.getBoolean(getPreferenceKey()); 137 } 138 return value; 139 } 140 141 146 protected abstract String getPreferenceKey(); 147 148 154 protected String getCompositeKey() { 155 String baseKey = getPreferenceKey(); 156 String viewKey = getView().getSite().getId(); 157 return viewKey + "." + baseKey; } 159 160 protected IViewPart getView() { 161 return fView; 162 } 163 164 protected StructuredViewer getStructuredViewer() { 165 IDebugView view = (IDebugView)getView().getAdapter(IDebugView.class); 166 if (view != null) { 167 Viewer viewer = view.getViewer(); 168 if (viewer instanceof StructuredViewer) { 169 return (StructuredViewer)viewer; 170 } 171 } 172 return null; 173 } 174 175 180 protected boolean getValue() { 181 return fAction.isChecked(); 182 } 183 } 184 | Popular Tags |