blob: 65270db4a22ab55d091ededd9f63cfdf06d3f3c5 [file] [log] [blame]
package org.eclipse.rcptt.tesla.workbench.aspects;
import java.util.WeakHashMap;
import org.aspectj.lang.annotation.SuppressAjWarnings;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolderEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.internal.keys.OutOfOrderListener;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.PageBook.PageBookLayout;
import org.eclipse.ui.presentations.IStackPresentationSite;
import org.eclipse.ui.statushandlers.StatusAdapter;
import org.eclipse.ui.statushandlers.WorkbenchStatusDialogManager;
import org.eclipse.rcptt.tesla.core.am.AspectManager;
import org.eclipse.rcptt.tesla.internal.ui.player.SWTUIPlayer;
import org.eclipse.rcptt.tesla.internal.ui.player.TeslaSWTAccess;
import org.eclipse.rcptt.tesla.recording.aspects.SWTEventManager;
import org.eclipse.rcptt.tesla.swt.events.TeslaEventManager;
@SuppressWarnings("all")
public aspect WorkbenchAspect {
public WorkbenchAspect() {
AspectManager.activateAspect(WorkbenchAspectActivator.PLUGIN_ID, this
.getClass().getName());
}
@SuppressAjWarnings("adviceDidNotMatch")
Object around(WorkbenchStatusDialogManager mgr, StatusAdapter adapter,
boolean modal):
execution(void org.eclipse.ui.statushandlers.WorkbenchStatusDialogManager.addStatusAdapter(StatusAdapter, boolean))
&& target(mgr) && args(adapter, modal) {
if (!TeslaEventManager.getManager().hasListeners()) {
return proceed(mgr, adapter, modal);
} else if (TeslaEventManager.getManager().isStatusDialogModeAllowed()) {
return proceed(mgr, adapter, modal);
}
return null;
}
@SuppressAjWarnings("adviceDidNotMatch")
Object around(PageBookLayout layout, Composite ctrl, boolean flushCache):
execution(void org.eclipse.ui.part.PageBook.PageBookLayout.layout(Composite, boolean)) && target(layout) && args(ctrl,flushCache) {
try {
Object object = TeslaSWTAccess.getThis(layout);
if (object != null) {
PageBook book = (PageBook) object;
Control page = TeslaSWTAccess.getBookPage(book);
if (page != null && page.isDisposed()) {
return null; // Ignore layout if page is disposed.
}
}
} catch (Throwable e) {
WorkbenchAspectActivator.log(e);
}
return proceed(layout, ctrl, flushCache);
}
@SuppressAjWarnings("adviceDidNotMatch")
Object around(org.eclipse.ui.internal.PageLayout layout, String partId):
execution(boolean org.eclipse.ui.internal.PageLayout.checkPartInLayout(String)) &&target(layout) && args(partId) {
try {
if (TeslaEventManager.getManager().hasListeners()) {
try {
Object refPart = TeslaSWTAccess.callMethod(
org.eclipse.ui.internal.PageLayout.class, layout,
"getRefPart", partId);
if (refPart != null) {
return true;
}
Boolean fastView = (Boolean) TeslaSWTAccess.callMethod(
org.eclipse.ui.internal.PageLayout.class, layout,
"isFastViewId", partId);
if (fastView) {
return true;
}
return false;
} catch (Throwable e) {
WorkbenchAspectActivator.log(e);
}
}
} catch (Throwable e) {
WorkbenchAspectActivator.log(e);
}
return proceed(layout, partId);
}
@SuppressAjWarnings("adviceDidNotMatch")
before(org.eclipse.ui.internal.presentations.PaneFolder paneFolder,
int buttonId): execution(void org.eclipse.ui.internal.presentations.PaneFolder.notifyButtonListeners(int)) && target(paneFolder) && args(buttonId) {
try {
int eventId = -1;
if (buttonId == IStackPresentationSite.STATE_MINIMIZED) {
eventId = SWTEventManager.EVENT_TAB_MINIMIZE;
} else if (buttonId == IStackPresentationSite.STATE_MAXIMIZED) {
eventId = SWTEventManager.EVENT_TAB_MAXIMIZE;
} else if (buttonId == IStackPresentationSite.STATE_RESTORED) {
eventId = SWTEventManager.EVENT_TAB_RESTORE;
}
if (eventId != -1) {
SWTEventManager.recordTabFolderEvent(paneFolder.getControl(),
eventId);
}
} catch (Throwable e) {
WorkbenchAspectActivator.log(e);
}
}
@SuppressAjWarnings("adviceDidNotMatch")
before(org.eclipse.ui.internal.presentations.PaneFolder paneFolder,
CTabFolderEvent event): execution(void org.eclipse.ui.internal.presentations.PaneFolder.notifyShowListeners(CTabFolderEvent)) && target(paneFolder) && args(event) {
try {
SWTEventManager.recordTabFolderEvent(paneFolder.getControl(),
SWTEventManager.EVENT_TAB_SHOW_LIST);
} catch (Throwable e) {
WorkbenchAspectActivator.log(e);
}
}
@SuppressAjWarnings("adviceDidNotMatch")
boolean around(OutOfOrderListener listener, int time):
execution(boolean org.eclipse.ui.internal.keys.OutOfOrderListener.isActive(int)) && target(listener) && args(time) {
if (TeslaEventManager.getManager().hasListeners()) {
try {
if (lastWidgets.containsKey(time)) {
Listener[] listeners = lastWidgets.get(time).getListeners(
SWT.KeyDown);
boolean returnFalse = false;
if (listeners != null) {
for (Listener l : listeners) {
if (l instanceof OutOfOrderListener) {
returnFalse = true;
break;
}
}
}
// Return true if listener required to be added and false
// overwize.
return returnFalse;
}
} catch (Throwable e) {
WorkbenchAspectActivator.log(e);
}
}
return proceed(listener, time);
}
WeakHashMap<Integer, Widget> lastWidgets = new WeakHashMap<Integer, Widget>();
@SuppressAjWarnings("adviceDidNotMatch")
before(Event event):
execution(void org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(Event)) && args(event) {
try {
lastWidgets.put(event.time, event.widget);
} catch (Throwable e) {
WorkbenchAspectActivator.log(e);
}
}
@SuppressAjWarnings("adviceDidNotMatch")
after(Event event):
execution(void org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(Event)) && args(event) {
try {
lastWidgets.remove(event.time);
} catch (Throwable e) {
WorkbenchAspectActivator.log(e);
}
}
@SuppressAjWarnings("adviceDidNotMatch")
after(org.eclipse.ui.internal.keys.WorkbenchKeyboard wk,
@SuppressWarnings("rawtypes") java.util.List potentialKeyStrokes,
org.eclipse.swt.widgets.Event event) returning (boolean result):
execution(boolean org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(java.util.List, org.eclipse.swt.widgets.Event)) && target(wk) && args(potentialKeyStrokes, event) {
SWTUIPlayer.lastWorkbenchKeyboardPressResult = result;
}
}