//package org.eclipse.ui.internal.progress; // ///******************************************************************************* // * Copyright (c) 2005, 2006 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 // *******************************************************************************/ //import java.net.URL; //import java.util.ArrayList; //import java.util.Date; //import java.util.Iterator; //import java.util.List; // //import org.eclipse.core.runtime.IProgressMonitor; //import org.eclipse.core.runtime.IStatus; //import org.eclipse.core.runtime.jobs.Job; //import org.eclipse.jface.action.IAction; //import org.eclipse.jface.dialogs.Dialog; //import org.eclipse.jface.dialogs.IDialogConstants; //import org.eclipse.jface.resource.ImageDescriptor; //import org.eclipse.jface.resource.JFaceResources; //import org.eclipse.osgi.util.NLS; //import org.eclipse.swt.SWT; //import org.eclipse.swt.events.MouseAdapter; //import org.eclipse.swt.events.MouseEvent; //import org.eclipse.swt.events.SelectionAdapter; //import org.eclipse.swt.events.SelectionEvent; //import org.eclipse.swt.graphics.Color; //import org.eclipse.swt.graphics.Image; //import org.eclipse.swt.layout.FormAttachment; //import org.eclipse.swt.layout.FormData; //import org.eclipse.swt.layout.FormLayout; //import org.eclipse.swt.layout.GridData; //import org.eclipse.swt.widgets.Canvas; //import org.eclipse.swt.widgets.Composite; //import org.eclipse.swt.widgets.Control; //import org.eclipse.swt.widgets.Event; //import org.eclipse.swt.widgets.Label; //import org.eclipse.swt.widgets.Link; //import org.eclipse.swt.widgets.Listener; //import org.eclipse.swt.widgets.ProgressBar; //import org.eclipse.swt.widgets.ToolBar; //import org.eclipse.swt.widgets.ToolItem; //import org.eclipse.ui.PlatformUI; //import org.eclipse.ui.internal.WorkbenchImages; //import org.eclipse.ui.progress.IProgressConstants; // //import com.ibm.icu.text.DateFormat; // ///** // * VirtualInfoItem is the item used to show jobs which only displays when it is // * visible. // * // * @since 1.0 // * // */ //class VirtualInfoItem extends Canvas { // // static String STOP_IMAGE_KEY = "org.eclipse.ui.internal.progress.PROGRESS_STOP"; //$NON-NLS-1$ // // static String DISABLED_STOP_IMAGE_KEY = "org.eclipse.ui.internal.progress.DISABLED_PROGRESS_STOP"; //$NON-NLS-1$ // // static String CLEAR_FINISHED_JOB_KEY = "org.eclipse.ui.internal.progress.CLEAR_FINISHED_JOB"; //$NON-NLS-1$ // // static String DISABLED_CLEAR_FINISHED_JOB_KEY = "org.eclipse.ui.internal.progress.DISABLED_CLEAR_FINISHED_JOB"; //$NON-NLS-1$ // // static String DEFAULT_JOB_KEY = "org.eclipse.ui.internal.progress.PROGRESS_DEFAULT"; //$NON-NLS-1$ // // static String DARK_COLOR_KEY = "org.eclipse.ui.internal.progress.PROGRESS_DARK_COLOR"; //$NON-NLS-1$ // // JobTreeElement info; // // Label progressLabel; // // ToolBar actionBar; // // ToolItem actionButton; // // List taskEntries = new ArrayList(0); // // private ProgressBar progressBar; // // private Label jobImageLabel; // // static final int MAX_PROGRESS_HEIGHT = 12; // // static final int MIN_ICON_SIZE = 16; // // private static final String EMPTY_STRING = "";//$NON-NLS-1$ // // private static final String TEXT_KEY = "Text"; //$NON-NLS-1$ // // private static final String ACTION_KEY = "Action";//$NON-NLS-1$ // // interface IndexListener { // /** // * Select the item previous to the receiver. // */ // public void selectPrevious(); // // /** // * Select the next previous to the receiver. // */ // public void selectNext(); // // /** // * Select the receiver. // */ // public void select(); // } // // IndexListener indexListener; // // private int currentIndex; // // private boolean selected; // // private MouseAdapter mouseListener; // // private boolean isShowing = true; // // static { // JFaceResources // .getImageRegistry() // .put( // STOP_IMAGE_KEY, // WorkbenchImages // .getWorkbenchImageDescriptor("elcl16/progress_stop.gif"));//$NON-NLS-1$ // // JFaceResources // .getImageRegistry() // .put( // DISABLED_STOP_IMAGE_KEY, // WorkbenchImages // .getWorkbenchImageDescriptor("dlcl16/progress_stop.gif"));//$NON-NLS-1$ // // JFaceResources // .getImageRegistry() // .put( // DEFAULT_JOB_KEY, // WorkbenchImages // .getWorkbenchImageDescriptor("progress/progress_task.gif")); //$NON-NLS-1$ // // JFaceResources // .getImageRegistry() // .put( // CLEAR_FINISHED_JOB_KEY, // WorkbenchImages // .getWorkbenchImageDescriptor("elcl16/progress_rem.gif")); //$NON-NLS-1$ // // JFaceResources // .getImageRegistry() // .put( // DISABLED_CLEAR_FINISHED_JOB_KEY, // WorkbenchImages // .getWorkbenchImageDescriptor("dlcl16/progress_rem.gif")); //$NON-NLS-1$ // // // Mac has different Gamma value // int shift = "carbon".equals(SWT.getPlatform()) ? -25 : -10;//$NON-NLS-1$ // // Color lightColor = PlatformUI.getWorkbench().getDisplay() // .getSystemColor(SWT.COLOR_LIST_BACKGROUND); // // // Determine a dark color by shifting the list color // Color darkColor = new Color(PlatformUI.getWorkbench().getDisplay(), // Math.max(0, lightColor.getRed() + shift), Math.max(0, // lightColor.getGreen() + shift), Math.max(0, lightColor // .getBlue() // + shift)); // JFaceResources.getColorRegistry().put(DARK_COLOR_KEY, // darkColor.getRGB()); // } // // /** // * Create a new instance of the receiver with the specified parent, style // * and info object/ // * // * @param parent // * @param style // * @param progressInfo // */ // public VirtualInfoItem(Composite parent, int style, // JobTreeElement progressInfo) { // super(parent, style); // info = progressInfo; // createChildren(); // setData(info); // setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false)); // } // // /** // * Create the child widgets of the receiver. // */ // /** // * // */ // protected void createChildren() { // // FormLayout layout = new FormLayout(); // setLayout(layout); // // jobImageLabel = new Label(this, SWT.NONE); // jobImageLabel.setImage(getInfoImage()); // FormData imageData = new FormData(); // imageData.top = new FormAttachment(IDialogConstants.VERTICAL_SPACING); // imageData.left = new FormAttachment( // IDialogConstants.HORIZONTAL_SPACING / 2); // jobImageLabel.setLayoutData(imageData); // // progressLabel = new Label(this, SWT.NONE); // progressLabel.setFont(JFaceResources.getFontRegistry().getBold( // JFaceResources.DEFAULT_FONT)); // progressLabel.setText(getMainTitle()); // // actionBar = new ToolBar(this, SWT.FLAT); // actionBar.setCursor(getDisplay().getSystemCursor(SWT.CURSOR_ARROW)); // set // // cursor // // to // // overwrite // // any // // busy // // // cursor we might have // actionButton = new ToolItem(actionBar, SWT.NONE); // actionButton // .setToolTipText(ProgressMessages.NewProgressView_CancelJobToolTip); // actionButton.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent e) { // actionButton.setEnabled(false); // cancelOrRemove(); // } // // }); // actionBar.addListener(SWT.Traverse, new Listener() { // /* // * (non-Javadoc) // * // * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) // */ // public void handleEvent(Event event) { // if (indexListener == null) { // return; // } // int detail = event.detail; // if (detail == SWT.TRAVERSE_ARROW_NEXT) { // indexListener.selectNext(); // } // if (detail == SWT.TRAVERSE_ARROW_PREVIOUS) { // indexListener.selectPrevious(); // } // // } // }); // updateToolBarValues(); // // FormData progressData = new FormData(); // progressData.top = new FormAttachment(IDialogConstants.VERTICAL_SPACING); // progressData.left = new FormAttachment(jobImageLabel, // IDialogConstants.HORIZONTAL_SPACING / 2); // progressData.right = new FormAttachment(actionBar, // IDialogConstants.HORIZONTAL_SPACING); // progressLabel.setLayoutData(progressData); // // mouseListener = new MouseAdapter() { // /* // * (non-Javadoc) // * // * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent) // */ // public void mouseDown(MouseEvent e) { // if (indexListener != null) { // indexListener.select(); // } // } // }; // addMouseListener(mouseListener); // jobImageLabel.addMouseListener(mouseListener); // progressLabel.addMouseListener(mouseListener); // // setLayoutsForNoProgress(); // // refresh(); // } // // /** // * Set the layout of the widgets for the no progress case. // * // */ // private void setLayoutsForNoProgress() { // // FormData buttonData = new FormData(); // buttonData.top = new FormAttachment(progressLabel, 0, SWT.TOP); // buttonData.right = new FormAttachment(100, // IDialogConstants.HORIZONTAL_SPACING * -1); // // actionBar.setLayoutData(buttonData); // if (taskEntries.size() > 0) { // FormData linkData = new FormData(); // linkData.top = new FormAttachment(progressLabel, // IDialogConstants.VERTICAL_SPACING); // linkData.left = new FormAttachment(progressLabel, 0, SWT.LEFT); // linkData.right = new FormAttachment(actionBar, 0, SWT.LEFT); // ((Link) taskEntries.get(0)).setLayoutData(linkData); // // } // } // // /** // * Cancel or remove the reciever. // * // */ // protected void cancelOrRemove() { // // if (FinishedJobs.getInstance().isFinished(info)) { // FinishedJobs.getInstance().remove(info); // } else { // info.cancel(); // } // // } // // /** // * Get the image for the info. // * // * @return Image // */ // private Image getInfoImage() { // // if (!info.isJobInfo()) { // return JFaceResources.getImage(DEFAULT_JOB_KEY); // } // // JobInfo jobInfo = (JobInfo) info; // // ImageDescriptor descriptor = null; // Object property = jobInfo.getJob().getProperty( // IProgressConstants.ICON_PROPERTY); // // if (property instanceof ImageDescriptor) { // descriptor = (ImageDescriptor) property; // } else if (property instanceof URL) { // descriptor = ImageDescriptor.createFromURL((URL) property); // } // // Image image = null; // if (descriptor == null) { // image = ProgressManager.getInstance().getIconFor(jobInfo.getJob()); // } else { // image = JFaceResources.getResources().createImageWithDefault( // descriptor); // } // // if (image == null) // image = jobInfo.getDisplayImage(); // // return image; // } // // /** // * Get the main title for the receiver. // * // * @return String // */ // private String getMainTitle() { // if (info.isJobInfo()) { // return getJobNameAndStatus(); // } // if (info.hasChildren()) { // return ((GroupInfo) info).getTaskName(); // } // return info.getDisplayString(); // // } // // /** // * Get the name and status for the main label. // * // * @return String // */ // protected String getJobNameAndStatus() { // // JobInfo jobInfo = (JobInfo) info; // Job job = jobInfo.getJob(); // // String name = job.getName(); // // if (job.isSystem()) { // name = NLS.bind(ProgressMessages.JobInfo_System, name); // } // // if (jobInfo.isCanceled()) { // return NLS.bind(ProgressMessages.JobInfo_Cancelled, name); // } // // if (jobInfo.isBlocked()) { // IStatus blockedStatus = jobInfo.getBlockedStatus(); // return NLS.bind(ProgressMessages.JobInfo_Blocked, name, // blockedStatus.getMessage()); // } // // switch (job.getState()) { // case Job.RUNNING: // return name; // case Job.SLEEPING: { // return NLS.bind(ProgressMessages.JobInfo_Sleeping, name); // // } // case Job.NONE: // Only happens for kept jobs // return getJobInfoFinishedString(job, true); // default: // return NLS.bind(ProgressMessages.JobInfo_Waiting, name); // } // } // // /** // * Return the finished String for a job. // * // * @param job // * the completed Job // * @param withTime // * @return String // */ // String getJobInfoFinishedString(Job job, boolean withTime) { // String time = null; // if (withTime) { // time = getTimeString(); // } // if (time != null) { // return NLS.bind(ProgressMessages.JobInfo_FinishedAt, job.getName(), // time); // } // return NLS.bind(ProgressMessages.JobInfo_Finished, job.getName()); // } // // /** // * Get the time string the finished job // * // * @return String or <code>null</code> if this is not one of the finished // * jobs. // */ // private String getTimeString() { // Date date = FinishedJobs.getInstance().getFinishDate(info); // if (date != null) { // return DateFormat.getTimeInstance(DateFormat.SHORT).format(date); // } // return null; // } // // /** // * Refresh the contents of the receiver. // * // */ // void refresh() { // // // Don't refresh if not visible // if (isDisposed() || !isShowing) // return; // // progressLabel.setText(getMainTitle()); // int percentDone = getPercentDone(); // // JobInfo[] infos = getJobInfos(); // if (isRunning()) { // if (progressBar == null) { // if (percentDone == IProgressMonitor.UNKNOWN) { // // Only do it if there is an indeterminate task // // There may be no task so we don't want to create it // // until we know for sure // for (int i = 0; i < infos.length; i++) { // if (infos[i].hasTaskInfo() // && infos[i].getTaskInfo().totalWork == IProgressMonitor.UNKNOWN) { // createProgressBar(SWT.INDETERMINATE); // break; // } // } // } else { // createProgressBar(SWT.NONE); // progressBar.setMinimum(0); // progressBar.setMaximum(100); // } // } // // // Protect against bad counters // if (percentDone >= 0 && percentDone <= 100 // && percentDone != progressBar.getSelection()) { // progressBar.setSelection(percentDone); // } // } // // else if (isCompleted()) { // // if (progressBar != null) { // progressBar.dispose(); // progressBar = null; // } // setLayoutsForNoProgress(); // // } // // for (int i = 0; i < infos.length; i++) { // JobInfo jobInfo = infos[i]; // if (jobInfo.hasTaskInfo()) { // // String taskString = jobInfo.getTaskInfo().getTaskName(); // String subTaskString = null; // Object[] jobChildren = jobInfo.getChildren(); // if (jobChildren.length > 0) { // subTaskString = ((JobTreeElement) jobChildren[0]) // .getDisplayString(); // } // // if (subTaskString != null) { // if (taskString == null) { // taskString = subTaskString; // } else { // taskString = NLS.bind( // ProgressMessages.JobInfo_DoneNoProgressMessage, // taskString, subTaskString); // } // } // if (taskString != null) { // setLinkText(infos[i].getJob(), taskString, i); // } // } else {// Check for the finished job state // Job job = jobInfo.getJob(); // if (job.getResult() != null) { // IStatus result = job.getResult(); // String message = EMPTY_STRING; // if (result != null) { // message = result.getMessage(); // } // setLinkText(job, message, i); // } // } // setColor(currentIndex); // } // // // Remove completed tasks // if (infos.length < taskEntries.size()) { // for (int i = infos.length; i < taskEntries.size(); i++) { // ((Link) taskEntries.get(i)).dispose(); // // } // if (infos.length > 1) // taskEntries = taskEntries.subList(0, infos.length - 1); // else // taskEntries.clear(); // } // // updateToolBarValues(); // } // // /** // * Return whether or not the receiver is a completed job. // * // * @return boolean <code>true</code> if the state is Job#NONE. // */ // private boolean isCompleted() { // // JobInfo[] infos = getJobInfos(); // for (int i = 0; i < infos.length; i++) { // if (infos[i].getJob().getState() != Job.NONE) { // return false; // } // } // // Only completed if there are any jobs // return infos.length > 0; // } // // /** // * Return the job infos in the receiver. // * // * @return JobInfo[] // */ // private JobInfo[] getJobInfos() { // if (info.isJobInfo()) { // return new JobInfo[] { (JobInfo) info }; // } // Object[] children = info.getChildren(); // JobInfo[] infos = new JobInfo[children.length]; // System.arraycopy(children, 0, infos, 0, children.length); // return infos; // } // // /** // * Return whether or not the receiver is being displayed as running. // * // * @return boolean // */ // private boolean isRunning() { // JobInfo[] infos = getJobInfos(); // for (int i = 0; i < infos.length; i++) { // int state = infos[i].getJob().getState(); // if (state == Job.RUNNING) { // continue; // } // return false; // } // // Only completed if there are any jobs // return infos.length > 0; // } // // /** // * Get the current percent done. // * // * @return int // */ // private int getPercentDone() { // if (info.isJobInfo()) { // return ((JobInfo) info).getPercentDone(); // } // // if (info.hasChildren()) { // Object[] roots = ((GroupInfo) info).getChildren(); // if (roots.length == 1 && roots[0] instanceof JobTreeElement) { // TaskInfo ti = ((JobInfo) roots[0]).getTaskInfo(); // if (ti != null) { // return ti.getPercentDone(); // } // } // return ((GroupInfo) info).getPercentDone(); // } // return 0; // } // // /** // * Set the images in the toolbar based on whether the receiver is finished // * or not. Also update tooltips if required. // * // */ // private void updateToolBarValues() { // if (isCompleted()) { // actionButton.setImage(JFaceResources // .getImage(CLEAR_FINISHED_JOB_KEY)); // actionButton.setDisabledImage(JFaceResources // .getImage(DISABLED_CLEAR_FINISHED_JOB_KEY)); // actionButton // .setToolTipText(ProgressMessages.NewProgressView_ClearJobToolTip); // } else { // actionButton.setImage(JFaceResources.getImage(STOP_IMAGE_KEY)); // actionButton.setDisabledImage(JFaceResources // .getImage(DISABLED_STOP_IMAGE_KEY)); // // } // JobInfo[] infos = getJobInfos(); // // for (int i = 0; i < infos.length; i++) { // // Only disable if there is an unresponsive operation // if (infos[i].isCanceled() && !isCompleted()) { // actionButton.setEnabled(false); // return; // } // } // actionButton.setEnabled(true); // } // // /** // * Create the progress bar and apply any style bits from style. // * // * @param style // */ // void createProgressBar(int style) { // // FormData buttonData = new FormData(); // buttonData.top = new FormAttachment(progressLabel, 0); // buttonData.right = new FormAttachment(100, // IDialogConstants.HORIZONTAL_SPACING * -1); // // actionBar.setLayoutData(buttonData); // // progressBar = new ProgressBar(this, SWT.HORIZONTAL | style); // FormData barData = new FormData(); // barData.top = new FormAttachment(actionBar, // IDialogConstants.VERTICAL_SPACING, SWT.TOP); // barData.left = new FormAttachment(progressLabel, 0, SWT.LEFT); // barData.right = new FormAttachment(actionBar, // IDialogConstants.HORIZONTAL_SPACING * -1); // barData.height = MAX_PROGRESS_HEIGHT; // barData.width = 0;// default is too large // progressBar.setLayoutData(barData); // // if (taskEntries.size() > 0) { // // Reattach the link label if there is one // FormData linkData = new FormData(); // linkData.top = new FormAttachment(progressBar, // IDialogConstants.VERTICAL_SPACING); // linkData.left = new FormAttachment( // IDialogConstants.HORIZONTAL_SPACING); // linkData.right = new FormAttachment(100); // // ((Link) taskEntries.get(0)).setLayoutData(linkData); // } // } // // /** // * Set the text of the link to the taskString. // * // * @param taskString // */ // void setLinkText(Job linkJob, String taskString, int index) { // // Link link; // if (index >= taskEntries.size()) {// Is it new? // link = new Link(this, SWT.NONE); // // FormData linkData = new FormData(); // if (index == 0 || taskEntries.size() == 0) { // Control top = progressBar; // if (top == null) { // top = progressLabel; // } // linkData.top = new FormAttachment(top, // IDialogConstants.VERTICAL_SPACING); // linkData.left = new FormAttachment(top, 0, SWT.LEFT); // } else { // Link previous = (Link) taskEntries.get(index - 1); // linkData.top = new FormAttachment(previous, // IDialogConstants.VERTICAL_SPACING); // linkData.left = new FormAttachment(previous, 0, SWT.LEFT); // } // // linkData.right = new FormAttachment(progressBar, 0, SWT.RIGHT); // link.setLayoutData(linkData); // // final Link finalLink = link; // // link.addSelectionListener(new SelectionAdapter() { // /* // * (non-Javadoc) // * // * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) // */ // public void widgetSelected(SelectionEvent e) { // ((IAction) finalLink.getData(ACTION_KEY)).run(); // } // }); // // link.addListener(SWT.Resize, new Listener() { // /* // * (non-Javadoc) // * // * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) // */ // public void handleEvent(Event event) { // updateText((String) finalLink.getData(TEXT_KEY), finalLink); // // } // }); // taskEntries.add(link); // } else { // link = (Link) taskEntries.get(index); // } // // link.setToolTipText(taskString); // link.setData(TEXT_KEY, taskString); // // // check for action property // Object property = linkJob // .getProperty(IProgressConstants.ACTION_PROPERTY); // if (property instanceof IAction) { // link.setData(ACTION_KEY, property); // } // // updateText(taskString, link); // // } // // /** // * Update the text in the link // * // * @param taskString // * @param link // */ // private void updateText(String taskString, Link link) { // taskString = Dialog.shortenText(taskString, link); // // // Put in a hyperlink if there is an action // link.setText(link.getData(ACTION_KEY) == null ? taskString : NLS.bind( // "<a>{0}</a>", taskString));//$NON-NLS-1$ // } // // /** // * Set the color base on the index // * // * @param i // */ // public void setColor(int i) { // currentIndex = i; // // if (selected) { // setAllBackgrounds(getDisplay().getSystemColor( // SWT.COLOR_LIST_SELECTION)); // setAllForegrounds(getDisplay().getSystemColor( // SWT.COLOR_LIST_SELECTION_TEXT)); // return; // } // // if (i % 2 == 0) { // setAllBackgrounds(JFaceResources.getColorRegistry().get( // DARK_COLOR_KEY)); // } else { // setAllBackgrounds(getDisplay().getSystemColor( // SWT.COLOR_LIST_BACKGROUND)); // } // setAllForegrounds(getDisplay() // .getSystemColor(SWT.COLOR_LIST_FOREGROUND)); // } // // /** // * Set the foreground of all widgets to the supplied color. // * // * @param color // */ // private void setAllForegrounds(Color color) { // setForeground(color); // progressLabel.setForeground(color); // // Iterator taskEntryIterator = taskEntries.iterator(); // while (taskEntryIterator.hasNext()) { // ((Link) taskEntryIterator.next()).setForeground(color); // } // // } // // /** // * Set the background of all widgets to the supplied color. // * // * @param color // */ // private void setAllBackgrounds(Color color) { // setBackground(color); // progressLabel.setBackground(color); // actionBar.setBackground(color); // jobImageLabel.setBackground(color); // // Iterator taskEntryIterator = taskEntries.iterator(); // while (taskEntryIterator.hasNext()) { // ((Link) taskEntryIterator.next()).setBackground(color); // } // // } // // /** // * Set the focus to the button. // * // */ // void setButtonFocus() { // actionBar.setFocus(); // } // // /** // * Set the selection colors. // * // * @param select // * boolean that indicates whether or not to show selection. // */ // void selectWidgets(boolean select) { // if (select) { // setButtonFocus(); // } // selected = select; // setColor(currentIndex); // } // // /** // * Set the listener for index changes. // * // * @param indexListener // */ // void setIndexListener(IndexListener indexListener) { // this.indexListener = indexListener; // } // // /** // * Return whether or not the receiver is selected. // * // * @return boolean // */ // boolean isSelected() { // return selected; // } // // /** // * Set whether or not the receiver is being displayed based on the top and // * bottom of the currently visible area. // * // * @param top // * @param bottom // */ // void setDisplayed(int top, int bottom) { // int itemTop = getLocation().y; // int itemBottom = itemTop + getBounds().height; // setDisplayed(itemTop <= bottom && itemBottom > top); // // } // // /** // * Set whether or not the receiver is being displayed // * // * @param displayed // */ // private void setDisplayed(boolean displayed) { // // See if this element has been turned off // boolean refresh = !isShowing && displayed; // isShowing = displayed; // if (refresh) // refresh(); // } //}