alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*******************************************************************************
 * Copyright (c) 2007 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.jdt.debug.testplugin.detailpane;

import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.ui.IDetailPane;
import org.eclipse.jdt.debug.core.IJavaVariable;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbenchPartSite;

/**
 * A simple implementation of a custom detail pane, used by the test suite to
 * test the detail pane functionality.  Displays a colored label depending on
 * if the selected element is public/private/protected/other.  This detail
 * pane is intended to only be used for selections containing only java variables.
 * 
 * @since 3.3
 * @see DetailPaneManagerTests
 * @see TestDetailPaneFactory
 * @see IDetailPane
 *
 */
public class SimpleDetailPane implements IDetailPane {

	private Label theLabel;
	
	private Color colorPrivate;
	private Color colorProtected;
	private Color colorPublic;
	private Color colorOther;
	
	private static final int TYPE_PRIVATE = 1;
	private static final int TYPE_PROTECTED = 2;
	private static final int TYPE_PUBLIC = 3;
	private static final int TYPE_OTHER = 4;
	
	// Do not change these constants, they are compared against strings in DetailPaneManagerTests
	public static final String ID = "SimpleDetailPane";
	public static final String NAME = "Example Pane: Colorful Detail Pane";
	public static final String DESCRIPTION = "Example pane that displays a color for variables depending on their access level.";
	
	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.IDetailPane#createControl(org.eclipse.swt.widgets.Composite)
	 */
	public Control createControl(Composite parent) {
		theLabel = new Label(parent, SWT.NONE);
		GridData gd = new GridData(GridData.FILL_BOTH);
		theLabel.setLayoutData(gd);
		return theLabel;
	}
	
	/**
	 * Returns the color to be used with the given type
	 * 
	 * @param typeId type of variable
	 * @return the color to use
	 */
	private Color getColor(int typeId){
		if (typeId == TYPE_PRIVATE){
			if (colorPrivate == null || colorPrivate.isDisposed()){
				colorPrivate = new Color(theLabel.getDisplay(),255,0,0);
			}
			return colorPrivate;
		}
		if (typeId == TYPE_PROTECTED){
			if (colorProtected == null || colorProtected.isDisposed()){
				colorProtected = new Color(theLabel.getDisplay(),0,0,255);
			}
			return colorProtected;
		}
		if (typeId == TYPE_PUBLIC){
			if (colorPublic == null || colorPublic.isDisposed()){
				colorPublic = new Color(theLabel.getDisplay(),0,255,0);
			}
			return colorPublic;
		}
		if (colorOther == null || colorOther.isDisposed()){
			colorOther = new Color(theLabel.getDisplay(),0,0,0);
		}
		return colorOther;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.IDetailPane#display(org.eclipse.jface.viewers.IStructuredSelection)
	 */
	public void display(IStructuredSelection selection) {
		if (selection == null || selection.size() == 0){
			theLabel.setBackground(theLabel.getParent().getBackground());
		} else {
			if (selection.getFirstElement() instanceof IJavaVariable){
				IJavaVariable var = (IJavaVariable)selection.getFirstElement();
				try{
					if (var.isPublic()){
						theLabel.setBackground(getColor(TYPE_PUBLIC));
						return;
					}
					if (var.isProtected()){
						theLabel.setBackground(getColor(TYPE_PROTECTED));
						return;
					}
					if (var.isPrivate()){
						theLabel.setBackground(getColor(TYPE_PRIVATE));
						return;
					}
					theLabel.setBackground(getColor(TYPE_OTHER));
					return;
					
				} catch (DebugException e){
					theLabel.setBackground(theLabel.getParent().getBackground());
					theLabel.setText(e.getMessage());
				}
			}
		}
		
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.IDetailPane#dispose()
	 */
	public void dispose() {
		if (colorPrivate != null) colorPrivate.dispose();
		if (colorProtected != null) colorProtected.dispose();
		if (colorPublic != null) colorPublic.dispose();
		if (colorOther != null) colorOther.dispose();
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.IDetailPane#getDescription()
	 */
	public String getDescription() {
		return DESCRIPTION;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.IDetailPane#getID()
	 */
	public String getID() {
		return ID;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.IDetailPane#getName()
	 */
	public String getName() {
		return NAME;
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.IDetailPane#init(org.eclipse.ui.IWorkbenchPartSite)
	 */
	public void init(IWorkbenchPartSite partSite) {
	}

	/* (non-Javadoc)
	 * @see org.eclipse.debug.ui.IDetailPane#setFocus()
	 */
	public boolean setFocus() {
		return false;
	}

}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.