diff options
author | Tor Norbye <tnorbye@google.com> | 2014-08-20 17:01:23 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-08-20 17:01:23 -0700 |
commit | 1aa2e09bdbd413eacb677e9fa4b50630530d0656 (patch) | |
tree | 2f4cc6d69645bd460aa253fdecb606d764fbd25d /platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java | |
parent | 02cf98d65c798d368fcec43ed64a001d513bdd4f (diff) | |
download | idea-1aa2e09bdbd413eacb677e9fa4b50630530d0656.tar.gz |
Snapshot idea/138.1696 from git://git.jetbrains.org/idea/community.git
Change-Id: I50c97b83a815ce635e49a38380ba5b8765e4b16a
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java')
-rw-r--r-- | platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java index 85ff7b2c2357..0007ec2f9997 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java @@ -15,14 +15,66 @@ */ package com.intellij.xdebugger.impl.frame; +import com.intellij.execution.ui.layout.ViewContext; +import com.intellij.ide.DataManager; import com.intellij.openapi.Disposable; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.ui.content.ContentManager; +import com.intellij.util.SingleAlarm; +import com.intellij.xdebugger.XDebugSession; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.awt.*; +import java.util.EventObject; /** * @author nik */ -public interface XDebugView extends Disposable { - enum SessionEvent {PAUSED, BEFORE_RESUME, RESUMED, STOPPED, FRAME_CHANGED, SETTINGS_CHANGED} +public abstract class XDebugView implements Disposable { + public enum SessionEvent {PAUSED, BEFORE_RESUME, RESUMED, STOPPED, FRAME_CHANGED, SETTINGS_CHANGED} + + private final SingleAlarm myClearAlarm; + private static final int VIEW_CLEAR_DELAY = 100; //ms + + public XDebugView() { + myClearAlarm = new SingleAlarm(new Runnable() { + @Override + public void run() { + clear(); + } + }, VIEW_CLEAR_DELAY, this); + } + + protected final void requestClear() { + myClearAlarm.cancelAndRequest(); + } + + protected final void cancelClear() { + myClearAlarm.cancel(); + } + + protected abstract void clear(); + + public abstract void processSessionEvent(@NotNull SessionEvent event); + + @Nullable + protected static XDebugSession getSession(@NotNull EventObject e) { + Component component = e.getSource() instanceof Component ? (Component)e.getSource() : null; + return component == null ? null : getSession(component); + } - void processSessionEvent(@NotNull SessionEvent event); + @Nullable + public static XDebugSession getSession(@NotNull Component component) { + DataContext dataContext = DataManager.getInstance().getDataContext(component); + ViewContext viewContext = ViewContext.CONTEXT_KEY.getData(dataContext); + ContentManager contentManager = viewContext == null ? null : viewContext.getContentManager(); + if (contentManager != null) { + XDebugSession session = XDebugSession.DATA_KEY.getData(DataManager.getInstance().getDataContext(contentManager.getComponent())); + if (session != null) { + return session; + } + } + return XDebugSession.DATA_KEY.getData(dataContext); + } } |