/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.debug.pyunit; import java.lang.ref.WeakReference; import org.eclipse.jface.action.Action; import org.python.pydev.core.callbacks.CallbackWithListeners; import org.python.pydev.debug.core.PydevDebugPlugin; /** * @author fabioz * */ public class PinHistoryAction extends Action { private WeakReference<PyUnitView> view; private PyUnitTestRun currentTestRun; public final CallbackWithListeners<PyUnitTestRun> onRunSelected; /** * @param pyUnitView */ public PinHistoryAction(PyUnitView pyUnitView) { this.view = new WeakReference<PyUnitView>(pyUnitView); setInitialTooltipText(); this.setImageDescriptor(PydevDebugPlugin.getImageCache().getDescriptor("icons/pin.png")); this.setChecked(false); this.currentTestRun = null; this.onRunSelected = new CallbackWithListeners<PyUnitTestRun>(); } private void setInitialTooltipText() { this.setToolTipText("Click to mark the currently selected run as the base-run."); } public PyUnitTestRun getCurrentTestRun() { return currentTestRun; } /* (non-Javadoc) * @see org.eclipse.jface.action.Action#run() */ @Override public void run() { boolean worked = false; try { if (this.isChecked()) { if (view == null) { return; } PyUnitView pyUnitView = view.get(); if (pyUnitView == null) { return; } PyUnitTestRun currentTestRun = pyUnitView.getCurrentTestRun(); if (currentTestRun != null) { worked = true; onRunSelected.call(currentTestRun); this.currentTestRun = currentTestRun; this.setImageDescriptor(PydevDebugPlugin.getImageCache().getDescriptor("icons/pin_arrow.png")); this.setToolTipText("Currently pin: " + currentTestRun.name + ". Click again to unpin."); } } } finally { if (!worked) { this.setImageDescriptor(PydevDebugPlugin.getImageCache().getDescriptor("icons/pin.png")); this.setInitialTooltipText(); this.setChecked(false); currentTestRun = null; onRunSelected.call(currentTestRun); } } } }