| /******************************************************************************* |
| * Copyright (c) 2000, 2017 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.debug.internal.ui.views.variables; |
| |
| import org.eclipse.debug.core.DebugPlugin; |
| import org.eclipse.debug.core.ILogicalStructureType; |
| import org.eclipse.debug.core.model.IValue; |
| import org.eclipse.jface.action.Action; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.swt.custom.BusyIndicator; |
| |
| /** |
| * Action to set the logical structure to display for a variable (enables/disables |
| * logical structure types for the same variable). |
| */ |
| public class SelectLogicalStructureAction extends Action { |
| |
| private VariablesView fView; |
| private ILogicalStructureType fType; |
| private ILogicalStructureType[] fAvailableTypes; |
| |
| /** |
| * |
| * @param view Variables view |
| * @param type the type that this action will turn on/off |
| * @param value the value for which logical structures are to be chosen |
| * @param availableTypes the set of logical structure types that are being offered |
| * to the user in addition to the type controlled by this action |
| */ |
| public SelectLogicalStructureAction(VariablesView view, ILogicalStructureType type, IValue value, ILogicalStructureType[] availableTypes) { |
| super(type.getDescription(value), IAction.AS_CHECK_BOX); |
| setView(view); |
| fAvailableTypes= availableTypes; |
| fType= type; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.action.IAction#run() |
| */ |
| @Override |
| public void run() { |
| valueChanged(); |
| } |
| |
| private void valueChanged() { |
| if (!getView().isAvailable()) { |
| return; |
| } |
| BusyIndicator.showWhile(getView().getViewer().getControl().getDisplay(), new Runnable() { |
| @Override |
| public void run() { |
| // Checking this action sets the type to fType, unchecking it sets the type |
| // to null ("none selected") |
| ILogicalStructureType type= null; |
| IAction action = getView().getAction("ToggleContentProviders"); //$NON-NLS-1$ |
| if (isChecked()) { |
| type= fType; |
| action.setChecked(true); |
| } |
| action.run(); |
| DebugPlugin.setDefaultStructureType(fAvailableTypes, type); |
| getView().getViewer().refresh(); |
| } |
| }); |
| } |
| |
| protected VariablesView getView() { |
| return fView; |
| } |
| |
| protected void setView(VariablesView view) { |
| fView = view; |
| } |
| } |