/*******************************************************************************
* Copyright (c) 2012 Google, Inc.
* 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:
* Google, Inc. - initial API and implementation
*******************************************************************************/
package com.windowtester.runtime.swt.internal.preferences;
import java.net.URL;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import com.windowtester.internal.product.ISupport;
import com.windowtester.runtime.util.PluginUtilities;
/**
* Main preference page for a product
* <p>
*
* @author Dan Rubel
*/
public abstract class ProductPreferencePage extends PreferencePage
implements IWorkbenchPreferencePage
{
/**
* The product associated with this preference page (not <code>null</code>)
*/
private final ISupport support;
/**
* The path to the banner image relative to this product's primary plugin or
* <code>null</code> if no associated banner image.
*/
private final String bannerImagePath;
/**
* The banner image associated with this preference page or <code>null</code> if no
* banner image is specified or the specified banner image has not yet been loaded.
*/
private Image bannerImage;
/**
* Construct a new product preference page
*
* @param support the product support information (not <code>null</code>)
* @param bannerImagePath The path to the banner image relative to this product's
* primary plugin or <code>null</code> if no associated banner image.
*/
protected ProductPreferencePage(ISupport support, String bannerImagePath) {
if (support == null)
throw new IllegalArgumentException("support argument must not be null");
this.support = support;
this.bannerImagePath = bannerImagePath;
}
////////////////////////////////////////////////////////////////////////////
//
// UI Creation
//
////////////////////////////////////////////////////////////////////////////
/**
* Initializes this preference page for the given workbench.
* <p>
* This method is called automatically as the preference page is being created and
* initialized. Clients must not call this method.
* </p>
*
* @param workbench the workbench
*/
public void init(IWorkbench workbench) {
}
/**
* Creates and returns the SWT control for the customized body of this preference page
* under the given parent composite.
*
* @param parent the parent composite
* @return the new control
*/
public Control createContents(Composite parent) {
// create the outermost panel for the page
Composite mainPanel = new Composite(parent, SWT.NONE);
GridLayout mainLayout = new GridLayout();
mainLayout.marginWidth = 0;
mainLayout.marginHeight = 0;
mainPanel.setLayout(mainLayout);
// create plugin banner graphic
Label bannerLabel = new Label(mainPanel, SWT.BORDER);
Image image = getBannerImage();
if (image != null) {
bannerLabel.setImage(image);
bannerLabel.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_CENTER));
}
else {
bannerLabel.setLayoutData(new GridData(GridData.FILL_BOTH));
bannerLabel.setVisible(false);
}
// create the plugin version description
Label label = new Label(mainPanel, SWT.CENTER);
label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
label.setText(support.getPrefPageInfo());
// create a license group
// Group licenseGroup = new Group(mainPanel, SWT.NONE);
// licenseGroup.setText("License Information");
// GridData data = new GridData(GridData.FILL_HORIZONTAL);
// licenseGroup.setLayoutData(data);
// licenseGroup.setLayout(new GridLayout());
//
// label = new Label(licenseGroup, SWT.NONE);
// label.setText(support.getLicenseInfoSummary());
//
// Button button = new Button(licenseGroup, SWT.PUSH);
// button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL));
// button.setText("&Registration and Activation");
// button.addSelectionListener(new SelectionListener() {
// public void widgetSelected(SelectionEvent e) {
// ActivationWizardDialog.openOneNow(getShell(), support);
// }
// public void widgetDefaultSelected(SelectionEvent e) {
// widgetSelected(e);
// }
// });
// create panel with company info on the left and buttons on the right
// Group feedbackGroup = new Group(mainPanel, SWT.NONE);
// feedbackGroup.setText("Feedback");
// GridData data = new GridData(GridData.FILL_HORIZONTAL);
// feedbackGroup.setLayoutData(data);
// feedbackGroup.setLayout(new GridLayout(3, false));
// create company information
// label = new Label(feedbackGroup, 0);
// label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.FILL_HORIZONTAL));
// label.setText(support.getPrefPageFeedback());
// label = new Label(feedbackGroup, SWT.NONE);
// label.setText(" ");
// data = new GridData(GridData.VERTICAL_ALIGN_FILL);
// data.widthHint = 40;
// label.setLayoutData(data);
// create email button panel
// createEmailButtonPanel(feedbackGroup);
label = new Label(mainPanel, SWT.CENTER);
label.setText("Installed at " + support.getInstallationLocation());
GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_END);
/* $codepro.preprocessor.if version >= 3.1 $ */
data.verticalIndent = 6;
/* $codepro.preprocessor.endif $ */
label.setLayoutData(data);
noDefaultAndApplyButton();
return mainPanel;
}
// protected Composite createEmailButtonPanel(Composite parent) {
//
// // create the panel to hold the buttons
// Composite buttonPanel = new Composite(parent, SWT.NONE);
// GridLayout layout = new GridLayout();
// layout.marginWidth = 0;
// layout.marginHeight = 0;
// layout.verticalSpacing = 1;
// buttonPanel.setLayout(layout);
// buttonPanel.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_END | GridData.HORIZONTAL_ALIGN_BEGINNING));
//
// if (!SWT.getPlatform().equals("carbon")) {// Can't send mail on Mac
// try {
// createButton(buttonPanel, new MailToInfo(support.getProduct()));
// createButton(buttonPanel, new MailToSales(support.getProduct()));
// createButton(buttonPanel, new MailToTechSupport(support));
// }
// catch (Throwable e) {
// Logger.log(e);
// }
// }
//
// return buttonPanel;
// }
// protected Button createButton(Composite parent, final IAction action) {
// Button button = new Button(parent, SWT.PUSH);
// button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
// button.setText("E-Mail " + action.getText());
// button.addSelectionListener(new SelectionListener() {
// public void widgetSelected(SelectionEvent e) {
// run();
// }
// public void widgetDefaultSelected(SelectionEvent e) {
// run();
// }
// private void run() {
// action.run();
// }
// });
// return button;
// }
////////////////////////////////////////////////////////////////////////////
//
// Accessors
//
////////////////////////////////////////////////////////////////////////////
/**
* Answer the product's banner image, creating it if necessary. The image is cached,
* managed, and disposed by the receiver when the receiver is disposed.
*
* @return the banner image or <code>null</code> if no banner image is defined for
* this product
*/
protected Image getBannerImage() {
if (bannerImage == null) {
ImageDescriptor imageDescriptor = getBannerImageDescriptor();
if (imageDescriptor == null)
return null;
bannerImage = imageDescriptor.createImage();
}
return bannerImage;
}
/**
* Answer the product's banner image descriptor.
*
* @return the banner image descriptor or <code>null</code> if no banner image is
* defined for this product
*/
protected ImageDescriptor getBannerImageDescriptor() {
String pluginId = support.getProduct().getPluginId();
String imagePath = getBannerImagePath();
if (imagePath == null)
return null;
URL bannerImageUrl = PluginUtilities.getUrl(pluginId, imagePath);
if (bannerImageUrl == null)
return null;
return ImageDescriptor.createFromURL(bannerImageUrl);
}
/**
* Answer the product's banner image path relative to this product's primary plugin.
*
* @return the banner image relative path or <code>null</code> if no banner image is
* defined for this product
*/
protected String getBannerImagePath() {
return bannerImagePath;
}
////////////////////////////////////////////////////////////////////////////
//
// Cleanup
//
////////////////////////////////////////////////////////////////////////////
/**
* Clean up any OS resources managed by the receiver such as the banner image.
*/
public void dispose() {
if (bannerImage != null) {
bannerImage.dispose();
bannerImage = null;
}
super.dispose();
}
}