| /******************************************************************************* |
| * Copyright (c) 2002, 2004 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.ui.internal.cheatsheets.views; |
| |
| import java.util.*; |
| |
| import org.eclipse.core.runtime.*; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.util.*; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.graphics.*; |
| import org.eclipse.swt.layout.*; |
| import org.eclipse.swt.widgets.*; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.cheatsheets.ICheatSheetAction; |
| import org.eclipse.ui.forms.events.*; |
| import org.eclipse.ui.forms.widgets.*; |
| import org.eclipse.ui.internal.cheatsheets.*; |
| import org.eclipse.ui.internal.cheatsheets.data.*; |
| import org.eclipse.ui.internal.cheatsheets.data.Item; |
| import org.osgi.framework.Bundle; |
| |
| public class CoreItem extends ViewItem { |
| protected boolean buttonsHandled = false; |
| |
| private ArrayList listOfSubItemCompositeHolders; |
| |
| /** |
| * Constructor for CoreItem. |
| * @param parent |
| * @param contentItem |
| */ |
| public CoreItem(FormToolkit toolkit, ScrolledForm form, Item item, Color itemColor, CheatSheetViewer viewer) { |
| super(toolkit, form, item, itemColor, viewer); |
| } |
| |
| private void createButtonComposite() { |
| buttonComposite = toolkit.createComposite(bodyWrapperComposite); |
| GridLayout buttonlayout = new GridLayout(4, false); |
| buttonlayout.marginHeight = 2; |
| buttonlayout.marginWidth = 2; |
| buttonlayout.verticalSpacing = 2; |
| |
| TableWrapData buttonData = new TableWrapData(TableWrapData.FILL); |
| |
| buttonComposite.setLayout(buttonlayout); |
| buttonComposite.setLayoutData(buttonData); |
| buttonComposite.setBackground(itemColor); |
| |
| Label spacer = toolkit.createLabel(buttonComposite, null); |
| spacer.setBackground(itemColor); |
| GridData spacerData = new GridData(); |
| spacerData.widthHint = 16; |
| spacer.setLayoutData(spacerData); |
| } |
| |
| private void createButtons(Action action) { |
| if (action != null ) { |
| final ImageHyperlink startButton = createButton(buttonComposite, CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_START), this, itemColor, Messages.PERFORM_TASK_TOOLTIP); |
| toolkit.adapt(startButton, true, true); |
| startButton.addHyperlinkListener(new HyperlinkAdapter() { |
| public void linkActivated(HyperlinkEvent e) { |
| viewer.runPerformAction(startButton); |
| } |
| }); |
| } |
| if (item.isSkip()) { |
| final ImageHyperlink skipButton = createButton(buttonComposite, CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_SKIP), this, itemColor, Messages.SKIP_TASK_TOOLTIP); |
| toolkit.adapt(skipButton, true, true); |
| skipButton.addHyperlinkListener(new HyperlinkAdapter() { |
| public void linkActivated(HyperlinkEvent e) { |
| viewer.advanceItem(skipButton, false); |
| } |
| }); |
| } |
| if (action == null || action.isConfirm()) { |
| final ImageHyperlink completeButton = createButton(buttonComposite, CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_COMPLETE), this, itemColor, Messages.COMPLETE_TASK_TOOLTIP); |
| toolkit.adapt(completeButton, true, true); |
| completeButton.addHyperlinkListener(new HyperlinkAdapter() { |
| public void linkActivated(HyperlinkEvent e) { |
| viewer.advanceItem(completeButton, true); |
| } |
| }); |
| } |
| } |
| |
| private void createSubItemButtonComposite() { |
| buttonComposite = toolkit.createComposite(bodyWrapperComposite); |
| GridLayout xbuttonlayout = new GridLayout(6, false); |
| xbuttonlayout.marginHeight = 2; |
| xbuttonlayout.marginWidth = 2; |
| xbuttonlayout.verticalSpacing = 2; |
| |
| TableWrapData xbuttonData = new TableWrapData(TableWrapData.FILL); |
| |
| buttonComposite.setLayout(xbuttonlayout); |
| buttonComposite.setLayoutData(xbuttonData); |
| buttonComposite.setBackground(itemColor); |
| } |
| |
| private void createSubItemButtons(SubItem sub, String thisValue, int index) { |
| int added = 0; |
| |
| //Spacer label added. |
| Label checkDoneLabel = toolkit.createLabel(buttonComposite, null); |
| checkDoneLabel.setBackground(itemColor); |
| GridData checkDoneData = new GridData(); |
| checkDoneData.widthHint = 16; |
| checkDoneLabel.setLayoutData(checkDoneData); |
| added++; |
| |
| //Now add the label. |
| String labelText = null; |
| if( thisValue != null ) { |
| labelText = performLineSubstitution(sub.getLabel(), "${this}", thisValue); //$NON-NLS-1$ |
| } else { |
| labelText = sub.getLabel(); |
| } |
| Label label = toolkit.createLabel(buttonComposite, labelText); |
| label.setBackground(itemColor); |
| added++; |
| |
| Action subAction = null; |
| if(sub.getPerformWhen() != null) { |
| sub.getPerformWhen().setSelectedAction(viewer.getManager()); |
| subAction = sub.getPerformWhen().getSelectedAction(); |
| } else { |
| subAction = sub.getAction(); |
| }; |
| |
| final int fi = index; |
| ImageHyperlink startButton = null; |
| if (subAction != null) { |
| added++; |
| startButton = createButton(buttonComposite, CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_START), this, itemColor, Messages.PERFORM_TASK_TOOLTIP); |
| final ImageHyperlink finalStartButton = startButton; |
| toolkit.adapt(startButton, true, true); |
| startButton.addHyperlinkListener(new HyperlinkAdapter() { |
| public void linkActivated(HyperlinkEvent e) { |
| viewer.runSubItemPerformAction(finalStartButton, fi); |
| } |
| }); |
| } |
| if (sub.isSkip()) { |
| added++; |
| final ImageHyperlink skipButton = createButton(buttonComposite, CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_SKIP), this, itemColor, Messages.SKIP_TASK_TOOLTIP); |
| toolkit.adapt(skipButton, true, true); |
| skipButton.addHyperlinkListener(new HyperlinkAdapter() { |
| public void linkActivated(HyperlinkEvent e) { |
| viewer.advanceSubItem(skipButton, false, fi); |
| } |
| }); |
| } |
| if (subAction == null || subAction.isConfirm()) { |
| added++; |
| final ImageHyperlink completeButton = createButton(buttonComposite, CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_COMPLETE), this, itemColor, Messages.COMPLETE_TASK_TOOLTIP); |
| toolkit.adapt(completeButton, true, true); |
| completeButton.addHyperlinkListener(new HyperlinkAdapter() { |
| public void linkActivated(HyperlinkEvent e) { |
| viewer.advanceSubItem(completeButton, true, fi); |
| } |
| }); |
| } |
| |
| while (added < 6) { |
| // Add filler labels as needed to complete the row |
| Label filler = toolkit.createLabel(buttonComposite, null); |
| filler.setBackground(itemColor); |
| added++; |
| } |
| listOfSubItemCompositeHolders.add(new SubItemCompositeHolder(checkDoneLabel, startButton, thisValue, sub)); |
| } |
| |
| private Action getAction() { |
| Action action = item.getAction(); |
| if(action == null) { |
| if(item.getPerformWhen() != null){ |
| action = item.getPerformWhen().getSelectedAction(); |
| } |
| } |
| return action; |
| } |
| |
| private Action getAction(int index) { |
| if (item.getSubItems() != null && item.getSubItems().size()>0 && listOfSubItemCompositeHolders != null) { |
| SubItemCompositeHolder s = (SubItemCompositeHolder) listOfSubItemCompositeHolders.get(index); |
| if(s != null) { |
| SubItem subItem = s.getSubItem(); |
| Action action = subItem.getAction(); |
| if(action == null) { |
| if(subItem.getPerformWhen() != null){ |
| action = subItem.getPerformWhen().getSelectedAction(); |
| } |
| } |
| return action; |
| } |
| } |
| return null; |
| } |
| |
| public ArrayList getListOfSubItemCompositeHolders() { |
| return listOfSubItemCompositeHolders; |
| } |
| |
| private ImageHyperlink getStartButton() { |
| if(buttonComposite != null) { |
| Control[] controls = buttonComposite.getChildren(); |
| for (int i = 0; i < controls.length; i++) { |
| Control control = controls[i]; |
| if(control instanceof ImageHyperlink) { |
| String toolTipText = control.getToolTipText(); |
| if( toolTipText != null && |
| (toolTipText.equals(Messages.PERFORM_TASK_TOOLTIP) || |
| toolTipText.equals(Messages.RESTART_TASK_TOOLTIP))) { |
| return (ImageHyperlink)control; |
| } |
| } |
| } |
| } |
| return null; |
| } |
| |
| /** |
| * @see org.eclipse.ui.internal.cheatsheets.ViewItem#handleButtons() |
| */ |
| /*package*/ void handleButtons() { |
| if(item.isDynamic()) { |
| handleDynamicButtons(); |
| return; |
| } else if( item.getSubItems() != null && item.getSubItems().size() > 0) { |
| try{ |
| handleSubButtons(); |
| }catch(Exception e){ |
| //Need to log exception here. |
| IStatus status = new Status(IStatus.ERROR, ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID, IStatus.OK, Messages.LESS_THAN_2_SUBITEMS, e); |
| CheatSheetPlugin.getPlugin().getLog().log(status); |
| org.eclipse.jface.dialogs.ErrorDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), Messages.LESS_THAN_2_SUBITEMS, null, status); |
| } |
| } |
| |
| if (buttonsHandled) |
| return; |
| |
| createButtonComposite(); |
| createButtons(item.getAction()); |
| buttonsHandled = true; |
| } |
| |
| private void handleDynamicButtons() { |
| if( item.getSubItems() != null && item.getSubItems().size() > 0 ) { |
| handleDynamicSubItemButtons(); |
| } else if( item.getPerformWhen() != null ) { |
| handlePerformWhenButtons(); |
| } |
| } |
| |
| private void handleDynamicSubItemButtons() { |
| boolean refreshRequired = false; |
| if(buttonComposite != null) { |
| Control[] children = buttonComposite.getChildren(); |
| for (int i = 0; i < children.length; i++) { |
| Control control = children[i]; |
| control.dispose(); |
| } |
| |
| refreshRequired = true; |
| } else { |
| createSubItemButtonComposite(); |
| } |
| |
| //Instantiate the list to store the sub item composites. |
| listOfSubItemCompositeHolders = new ArrayList(20); |
| |
| //loop throught the number of sub items, make a new composite for each sub item. |
| //Add the spacer, the label, then the buttons that are applicable for each sub item. |
| int i=0; |
| for (Iterator iter = item.getSubItems().iterator(); iter.hasNext(); i++) { |
| AbstractSubItem subItem = (AbstractSubItem)iter.next(); |
| if( subItem instanceof RepeatedSubItem ) { |
| |
| //Get the sub item to add. |
| RepeatedSubItem repeatedSubItem = (RepeatedSubItem)subItem; |
| String values = repeatedSubItem.getValues(); |
| values = viewer.getManager().getVariableData(values); |
| if(values == null || values.length() <= 0 || (values.startsWith("${") && values.endsWith("}"))) { //$NON-NLS-1$ //$NON-NLS-2$ |
| String message = NLS.bind(Messages.ERROR_DATA_MISSING_LOG, (new Object[] {repeatedSubItem.getValues()})); |
| IStatus status = new Status(IStatus.ERROR, ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID, IStatus.OK, message, null); |
| CheatSheetPlugin.getPlugin().getLog().log(status); |
| |
| status = new Status(IStatus.ERROR, ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID, IStatus.OK, Messages.ERROR_DATA_MISSING, null); |
| CheatSheetPlugin.getPlugin().getLog().log(status); |
| org.eclipse.jface.dialogs.ErrorDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), null, null, status); |
| break; |
| } |
| |
| SubItem sub = (SubItem)repeatedSubItem.getSubItems().get(0); |
| |
| StringTokenizer tokenizer = new StringTokenizer(values, ","); //$NON-NLS-1$ |
| while(tokenizer.hasMoreTokens()) { |
| String value = tokenizer.nextToken(); |
| createSubItemButtons(sub, value, i++); |
| } |
| |
| // Decrement the counter by because the outer loop increments it prior to the next iteration |
| i--; |
| } else if( subItem instanceof ConditionalSubItem ) { |
| //Get the sub item to add. |
| ConditionalSubItem sub = (ConditionalSubItem)subItem; |
| |
| sub.setSelectedSubItem(viewer.getManager()); |
| SubItem selectedSubItem = sub.getSelectedSubItem(); |
| |
| if(selectedSubItem == null) { |
| String message = NLS.bind(Messages.ERROR_CONDITIONAL_DATA_MISSING_LOG, (new Object[] {sub.getCondition(), getItem().getTitle()})); |
| IStatus status = new Status(IStatus.ERROR, ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID, IStatus.OK, message, null); |
| CheatSheetPlugin.getPlugin().getLog().log(status); |
| |
| status = new Status(IStatus.ERROR, ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID, IStatus.OK, Messages.ERROR_DATA_MISSING, null); |
| CheatSheetPlugin.getPlugin().getLog().log(status); |
| org.eclipse.jface.dialogs.ErrorDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), null, null, status); |
| break; |
| } |
| |
| createSubItemButtons(selectedSubItem, null, i); |
| } else if( subItem instanceof SubItem ) { |
| createSubItemButtons((SubItem)subItem, null, i); |
| } |
| } |
| |
| if(refreshRequired) { |
| buttonComposite.layout(); |
| getMainItemComposite().layout(); |
| form.reflow(true); |
| } |
| } |
| |
| private void handlePerformWhenButtons() { |
| boolean refreshRequired = false; |
| |
| if(buttonComposite != null) { |
| Control[] controls = buttonComposite.getChildren(); |
| for (int i = 0; i < controls.length; i++) { |
| Control control = controls[i]; |
| if(control instanceof ImageHyperlink) { |
| control.dispose(); |
| } |
| } |
| |
| refreshRequired = true; |
| } else { |
| createButtonComposite(); |
| } |
| |
| item.getPerformWhen().setSelectedAction(viewer.getManager()); |
| Action performAction = item.getPerformWhen().getSelectedAction(); |
| |
| createButtons(performAction); |
| |
| if(refreshRequired) { |
| buttonComposite.layout(); |
| getMainItemComposite().layout(); |
| form.reflow(true); |
| } |
| } |
| |
| private void handleSubButtons() throws Exception { |
| if (buttonsHandled) |
| return; |
| //Instantiate the list to store the sub item composites. |
| listOfSubItemCompositeHolders = new ArrayList(20); |
| |
| ArrayList sublist = item.getSubItems(); |
| |
| if(sublist == null || sublist.size()<=1) |
| throw new Exception(Messages.LESS_THAN_2_SUBITEMS); |
| |
| createSubItemButtonComposite(); |
| |
| //loop throught the number of sub items, make a new composite for each sub item. |
| //Add the spacer, the label, then the buttons that are applicable for each sub item. |
| for (int i = 0; i < sublist.size(); i++) { |
| createSubItemButtons((SubItem)sublist.get(i), null, i); |
| } |
| buttonsHandled = true; |
| } |
| |
| /*package*/ |
| boolean hasConfirm() { |
| Action action = getAction(); |
| |
| if (action == null || action.isConfirm()) { |
| return true; |
| } |
| return false; |
| } |
| |
| /*package*/ |
| boolean hasConfirm(int index) { |
| Action action = getAction(index); |
| |
| if (action == null || action.isConfirm()) { |
| return true; |
| } |
| return false; |
| } |
| |
| public String performLineSubstitution(String line, String variable, String value) { |
| StringBuffer buffer = new StringBuffer(line.length()); |
| |
| StringDelimitedTokenizer tokenizer = new StringDelimitedTokenizer(line, variable); |
| boolean addValue = false; |
| |
| while (tokenizer.hasMoreTokens()) { |
| if (addValue) { |
| buffer.append(value); |
| } |
| buffer.append(tokenizer.nextToken()); |
| addValue = true; |
| } |
| if (tokenizer.endsWithDelimiter()) { |
| buffer.append(value); |
| } |
| |
| return buffer.toString(); |
| } |
| /*package*/ |
| byte runAction(CheatSheetManager csm) { |
| Action action = getAction(); |
| |
| if(action != null) { |
| return runAction(action.getPluginID(), action.getActionClass(), action.getParams(), csm); |
| } |
| |
| return VIEWITEM_ADVANCE; |
| } |
| |
| /** |
| * Run an action |
| */ |
| /*package*/ |
| byte runAction(String pluginId, String className, String[] params, CheatSheetManager csm) { |
| Bundle bundle = Platform.getBundle(pluginId); |
| if (bundle == null) { |
| String message = NLS.bind(Messages.ERROR_FINDING_PLUGIN_FOR_ACTION, (new Object[] {pluginId})); |
| IStatus status = new Status(IStatus.ERROR, ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID, IStatus.OK, message, null); |
| CheatSheetPlugin.getPlugin().getLog().log(status); |
| org.eclipse.jface.dialogs.ErrorDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), null, Messages.ERROR_RUNNING_ACTION, status); |
| return VIEWITEM_DONOT_ADVANCE; |
| } |
| Class actionClass; |
| IAction action; |
| try { |
| actionClass = bundle.loadClass(className); |
| } catch (Exception e) { |
| String message = NLS.bind(Messages.ERROR_LOADING_CLASS_FOR_ACTION, (new Object[] {className})); |
| IStatus status = new Status(IStatus.ERROR, ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID, IStatus.OK, message, e); |
| CheatSheetPlugin.getPlugin().getLog().log(status); |
| org.eclipse.jface.dialogs.ErrorDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), null, Messages.ERROR_RUNNING_ACTION, status); |
| return VIEWITEM_DONOT_ADVANCE; |
| } |
| try { |
| action = (IAction) actionClass.newInstance(); |
| } catch (Exception e) { |
| String message = NLS.bind(Messages.ERROR_CREATING_CLASS_FOR_ACTION, (new Object[] {className})); |
| IStatus status = new Status(IStatus.ERROR, ICheatSheetResource.CHEAT_SHEET_PLUGIN_ID, IStatus.OK, message, e); |
| CheatSheetPlugin.getPlugin().getLog().log(status); |
| org.eclipse.jface.dialogs.ErrorDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), null, Messages.ERROR_RUNNING_ACTION, status); |
| return VIEWITEM_DONOT_ADVANCE; |
| } |
| |
| final boolean[] listenerFired = { false }; |
| final boolean[] listenerResult = { false }; |
| IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() { |
| public void propertyChange(PropertyChangeEvent event) { |
| if(event.getProperty().equals(IAction.RESULT) && event.getNewValue() instanceof Boolean) { |
| listenerFired[0] = true; |
| listenerResult[0] = ((Boolean)event.getNewValue()).booleanValue(); |
| } |
| } |
| }; |
| |
| // Add PropertyChangeListener to the action, so we can detemine if a action was succesfull |
| action.addPropertyChangeListener(propertyChangeListener); |
| |
| // Run the action for this ViewItem |
| if (action instanceof ICheatSheetAction) { |
| // Prepare parameters |
| String[] clonedParams = null; |
| if(params != null && params.length > 0) { |
| clonedParams = new String[params.length]; |
| System.arraycopy(params, 0, clonedParams, 0, params.length); |
| for (int i = 0; i < clonedParams.length; i++) { |
| String param = clonedParams[i]; |
| if(param != null && param.startsWith("${") && param.endsWith("}")) { //$NON-NLS-1$ //$NON-NLS-2$ |
| param = param.substring(2,param.length()-1); |
| String value = csm.getData(param); |
| clonedParams[i] = value == null ? ICheatSheetResource.EMPTY_STRING : value; |
| } |
| } |
| } |
| ((ICheatSheetAction) action).run(clonedParams, csm); |
| } else |
| action.run(); |
| |
| // Remove the PropertyChangeListener |
| action.removePropertyChangeListener(propertyChangeListener); |
| |
| if (listenerFired[0]) { |
| if (listenerResult[0]) { |
| return VIEWITEM_ADVANCE; |
| } else { |
| return VIEWITEM_DONOT_ADVANCE; |
| } |
| } |
| |
| return VIEWITEM_ADVANCE; |
| } |
| |
| /*package*/ |
| byte runSubItemAction(CheatSheetManager csm, int index) { |
| if (item.getSubItems() != null && item.getSubItems().size()>0 && listOfSubItemCompositeHolders != null) { |
| SubItemCompositeHolder s = (SubItemCompositeHolder) listOfSubItemCompositeHolders.get(index); |
| if(s != null) { |
| Action action = getAction(index); |
| |
| if(action != null) { |
| try { |
| if(s.getThisValue() != null) { |
| csm.setData("this", s.getThisValue()); //$NON-NLS-1$ |
| } |
| String[] params = action.getParams(); |
| return runAction(action.getPluginID(), action.getActionClass(), params, csm); |
| } finally { |
| if(s.getThisValue() != null) { |
| csm.setData("this", null); //$NON-NLS-1$ |
| } |
| } |
| } |
| } |
| } |
| return VIEWITEM_ADVANCE; |
| } |
| |
| /*package*/void setButtonsHandled(boolean handled){ |
| buttonsHandled = handled; |
| } |
| |
| /*package*/ void setIncomplete() { |
| super.setIncomplete(); |
| |
| //check for sub items and reset their icons. |
| ArrayList l = getListOfSubItemCompositeHolders(); |
| if(l != null){ |
| for(int j=0; j<l.size(); j++){ |
| SubItemCompositeHolder s = (SubItemCompositeHolder)l.get(j); |
| if(s.isCompleted() || s.isSkipped()) |
| s.getIconLabel().setImage(null); |
| if(s.startButton != null) { |
| s.getStartButton().setImage(CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_START)); |
| s.getStartButton().setToolTipText(Messages.PERFORM_TASK_TOOLTIP); |
| } |
| } |
| } |
| } |
| |
| /*package*/ void setRestartImage() { |
| ImageHyperlink startButton = getStartButton(); |
| if (startButton != null) { |
| startButton.setImage(CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_RESTART)); |
| startButton.setToolTipText(Messages.RESTART_TASK_TOOLTIP); |
| } |
| } |
| |
| /*package*/ void setStartImage() { |
| ImageHyperlink startButton = getStartButton(); |
| if (startButton != null) { |
| startButton.setImage(CheatSheetPlugin.getPlugin().getImage(ICheatSheetResource.CHEATSHEET_ITEM_BUTTON_START)); |
| startButton.setToolTipText(Messages.PERFORM_TASK_TOOLTIP); |
| } |
| } |
| } |