/** * Copyright (c) 2005-2013 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.debug.core.PydevDebugPlugin; import org.python.pydev.shared_ui.ImageCache; /** * @author fabioz * */ public class PinHistoryAction extends Action { private WeakReference<PyUnitView> view; /** * @param pyUnitView */ public PinHistoryAction(PyUnitView pyUnitView) { this.view = new WeakReference<PyUnitView>(pyUnitView); updateState(); } private void setInitialTooltipText() { this.setToolTipText("Click to mark the currently selected run as the base-run."); } /* (non-Javadoc) * @see org.eclipse.jface.action.Action#run() */ @Override public void run() { try { if (this.isChecked()) { if (view == null) { return; } PyUnitView pyUnitView = view.get(); if (pyUnitView == null) { return; } PyUnitTestRun currentTestRun = pyUnitView.getCurrentTestRun(); if (currentTestRun != null) { PyUnitViewTestsHolder.setCurrentPinned(currentTestRun); } } else { PyUnitViewTestsHolder.setCurrentPinned(null); } } finally { updateState(); } } private void updateState() { PyUnitTestRun currentPinned = PyUnitViewTestsHolder.getCurrentPinned(); ImageCache imageCache = PydevDebugPlugin.getImageCache(); if (currentPinned == null) { if (imageCache != null) { this.setImageDescriptor(imageCache.getDescriptor("icons/pin.png")); } this.setInitialTooltipText(); this.setChecked(false); } else { if (imageCache != null) { this.setImageDescriptor(imageCache.getDescriptor("icons/pin_arrow.png")); } this.setToolTipText("Currently pin: " + currentPinned.name + ". Click again to unpin."); this.setChecked(true); } } }