1 /******************************************************************************* 2 * Copyright (c) 2000, 2015 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.ui.internal; 15 16 import org.eclipse.core.commands.common.EventManager; 17 import org.eclipse.core.runtime.SafeRunner; 18 import org.eclipse.jface.dialogs.IPageChangedListener; 19 import org.eclipse.jface.dialogs.PageChangedEvent; 20 import org.eclipse.jface.util.SafeRunnable; 21 import org.eclipse.ui.IPartListener2; 22 import org.eclipse.ui.IWorkbenchPartReference; 23 import org.eclipse.ui.internal.misc.UIStats; 24 25 /** 26 * Part listener list. 27 */ 28 public class PartListenerList2 extends EventManager { 29 30 /** 31 * PartListenerList2 constructor comment. 32 */ PartListenerList2()33 public PartListenerList2() { 34 super(); 35 } 36 37 /** 38 * Adds an PartListener to the part service. 39 */ addPartListener(IPartListener2 l)40 public void addPartListener(IPartListener2 l) { 41 addListenerObject(l); 42 } 43 44 /** 45 * Calls a part listener with associated performance event instrumentation 46 * 47 * @param runnable 48 * @param listener 49 * @param ref 50 * @param string 51 */ fireEvent(SafeRunnable runnable, IPartListener2 listener, IWorkbenchPartReference ref, String string)52 private void fireEvent(SafeRunnable runnable, IPartListener2 listener, IWorkbenchPartReference ref, String string) { 53 String label = null;// for debugging 54 if (UIStats.isDebugging(UIStats.NOTIFY_PART_LISTENERS)) { 55 label = string + ref.getTitle(); 56 UIStats.start(UIStats.NOTIFY_PART_LISTENERS, label); 57 } 58 SafeRunner.run(runnable); 59 if (UIStats.isDebugging(UIStats.NOTIFY_PART_LISTENERS)) { 60 UIStats.end(UIStats.NOTIFY_PART_LISTENERS, listener, label); 61 } 62 } 63 64 /** 65 * Notifies the listener that a part has been activated. 66 */ firePartActivated(final IWorkbenchPartReference ref)67 public void firePartActivated(final IWorkbenchPartReference ref) { 68 for (Object listener : getListeners()) { 69 final IPartListener2 partListener = (IPartListener2) listener; 70 fireEvent(new SafeRunnable() { 71 @Override 72 public void run() { 73 partListener.partActivated(ref); 74 } 75 }, partListener, ref, "activated::"); //$NON-NLS-1$ 76 } 77 } 78 79 /** 80 * Notifies the listener that a part has been brought to top. 81 */ firePartBroughtToTop(final IWorkbenchPartReference ref)82 public void firePartBroughtToTop(final IWorkbenchPartReference ref) { 83 for (Object listener : getListeners()) { 84 final IPartListener2 partListener = (IPartListener2) listener; 85 fireEvent(new SafeRunnable() { 86 @Override 87 public void run() { 88 partListener.partBroughtToTop(ref); 89 } 90 }, partListener, ref, "broughtToTop::"); //$NON-NLS-1$ 91 } 92 } 93 94 /** 95 * Notifies the listener that a part has been closed 96 */ firePartClosed(final IWorkbenchPartReference ref)97 public void firePartClosed(final IWorkbenchPartReference ref) { 98 for (Object listener : getListeners()) { 99 final IPartListener2 partListener = (IPartListener2) listener; 100 fireEvent(new SafeRunnable() { 101 @Override 102 public void run() { 103 partListener.partClosed(ref); 104 } 105 }, partListener, ref, "closed::"); //$NON-NLS-1$ 106 } 107 } 108 109 /** 110 * Notifies the listener that a part has been deactivated. 111 */ firePartDeactivated(final IWorkbenchPartReference ref)112 public void firePartDeactivated(final IWorkbenchPartReference ref) { 113 for (Object listener : getListeners()) { 114 final IPartListener2 partListener = (IPartListener2) listener; 115 fireEvent(new SafeRunnable() { 116 @Override 117 public void run() { 118 partListener.partDeactivated(ref); 119 } 120 }, partListener, ref, "deactivated::"); //$NON-NLS-1$ 121 } 122 } 123 124 /** 125 * Notifies the listener that a part has been opened. 126 */ firePartOpened(final IWorkbenchPartReference ref)127 public void firePartOpened(final IWorkbenchPartReference ref) { 128 for (Object listener : getListeners()) { 129 final IPartListener2 partListener = (IPartListener2) listener; 130 fireEvent(new SafeRunnable() { 131 @Override 132 public void run() { 133 partListener.partOpened(ref); 134 } 135 }, partListener, ref, "opened::"); //$NON-NLS-1$ 136 } 137 } 138 139 /** 140 * Notifies the listener that a part has been opened. 141 */ firePartHidden(final IWorkbenchPartReference ref)142 public void firePartHidden(final IWorkbenchPartReference ref) { 143 for (Object element : getListeners()) { 144 final IPartListener2 partListener; 145 if (element instanceof IPartListener2) { 146 partListener = (IPartListener2) element; 147 } else { 148 continue; 149 } 150 151 fireEvent(new SafeRunnable() { 152 @Override 153 public void run() { 154 partListener.partHidden(ref); 155 } 156 }, partListener, ref, "hidden::"); //$NON-NLS-1$ 157 } 158 } 159 160 /** 161 * Notifies the listener that a part has been opened. 162 */ firePartVisible(final IWorkbenchPartReference ref)163 public void firePartVisible(final IWorkbenchPartReference ref) { 164 for (Object listener : getListeners()) { 165 final IPartListener2 partListener; 166 if (listener instanceof IPartListener2) { 167 partListener = (IPartListener2) listener; 168 } else { 169 continue; 170 } 171 172 fireEvent(new SafeRunnable() { 173 @Override 174 public void run() { 175 partListener.partVisible(ref); 176 } 177 }, partListener, ref, "visible::"); //$NON-NLS-1$ 178 } 179 } 180 181 /** 182 * Notifies the listener that a part has been opened. 183 */ firePartInputChanged(final IWorkbenchPartReference ref)184 public void firePartInputChanged(final IWorkbenchPartReference ref) { 185 for (Object listener : getListeners()) { 186 final IPartListener2 partListener; 187 if (listener instanceof IPartListener2) { 188 partListener = (IPartListener2) listener; 189 } else { 190 continue; 191 } 192 193 fireEvent(new SafeRunnable() { 194 @Override 195 public void run() { 196 partListener.partInputChanged(ref); 197 } 198 }, partListener, ref, "inputChanged::"); //$NON-NLS-1$ 199 } 200 } 201 202 /** 203 * Removes an IPartListener from the part service. 204 */ removePartListener(IPartListener2 l)205 public void removePartListener(IPartListener2 l) { 206 removeListenerObject(l); 207 } 208 firePageChanged(final PageChangedEvent event)209 public void firePageChanged(final PageChangedEvent event) { 210 for (Object listener : getListeners()) { 211 final IPageChangedListener partListener; 212 if (listener instanceof IPageChangedListener) { 213 partListener = (IPageChangedListener) listener; 214 } else { 215 continue; 216 } 217 218 SafeRunnable.run(new SafeRunnable() { 219 @Override 220 public void run() { 221 partListener.pageChanged(event); 222 } 223 }); 224 } 225 } 226 } 227