/*******************************************************************************
* Copyright (c) 2014 Mentor Graphics 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:
* Mentor Graphics - initial API and implementation
*******************************************************************************/
package com.codesourcery.installer.ui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import com.codesourcery.installer.Installer;
import com.codesourcery.internal.installer.IInstallerImages;
import com.codesourcery.internal.installer.InstallMessages;
/**
* Base class that displays a text field and optional buttons to restore the
* default value.
*/
public abstract class BrowseDefaultEditor extends Composite {
/** Value editor */
private Text fieldEditor;
/** Restore default button */
private Button restoreButton;
/** Browse button */
private Button browseButton;
/** Default value */
private String defaultValue;
/** Browse dialog message */
private String browseMessage;
/**
* Constructor
*
* @param parent Parent
* @param style Style flags
* @param includeRestore <code>true</code> to show restore button
* @param includeBrowse <code>true</code> to show browse button
* @param defaultValue Default value or <code>null</code>
*/
public BrowseDefaultEditor(Composite parent, int style, boolean includeRestore, boolean includeBrowse, final String defaultValue) {
super(parent, style);
this.defaultValue = defaultValue;
GridLayout layout = new GridLayout(1, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
setLayout(layout);
// Value editor
fieldEditor = new Text(this, SWT.BORDER);
fieldEditor.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
if ((defaultValue != null) && !defaultValue.isEmpty()) {
fieldEditor.setText(defaultValue);
// Scroll to end of location
int end = defaultValue.length();
fieldEditor.setSelection(end, end);
if (defaultValue != null) {
setText(defaultValue);
}
}
// Button area
Composite buttonArea = new Composite(this, SWT.NONE);
layout = new GridLayout((includeRestore ? 1 : 0) + (includeBrowse ? 1: 0), false);
layout.marginHeight = 0;
layout.marginWidth = 0;
buttonArea.setLayout(layout);
buttonArea.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
// Restore default button
if (includeRestore) {
restoreButton = new Button(buttonArea, SWT.NONE);
restoreButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
restoreButton.setImage(Installer.getDefault().getImageRegistry().get(IInstallerImages.REFRESH));
restoreButton.setText(InstallMessages.RestoreDefaultFolder);
restoreButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
fieldEditor.setText(getDefaultValue());
}
});
}
// Browse button
if (includeBrowse) {
browseButton = new Button(buttonArea, SWT.NONE);
browseButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
browseButton.setImage(Installer.getDefault().getImageRegistry().get(IInstallerImages.FOLDER));
browseButton.setText(InstallMessages.Browse);
browseButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
openBrowseDialog();
}
});
}
}
/**
* Returns the value editor.
*
* @return Editor
*/
public Text getEditor() {
return fieldEditor;
}
/**
* Returns the restore default button.
*
* @return Restore button
*/
public Button getRestoreButton() {
return restoreButton;
}
/**
* Returns the browse button.
*
* @return Browse button
*/
public Button getBrowseButton() {
return browseButton;
}
/**
* Returns the value text.
*
* @return Value
*/
public String getText() {
return fieldEditor.getText();
}
/**
* Sets the value text.
*
* @param text Value
*/
public void setText(String text) {
fieldEditor.setText(text);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
fieldEditor.setEnabled(enabled);
if (restoreButton != null)
restoreButton.setEnabled(enabled);
if (browseButton != null)
browseButton.setEnabled(enabled);
}
/**
* Sets the browse dialog message.
*
* @param browseMessage Browse message
*/
public void setBrowseMessage(String browseMessage) {
this.browseMessage = browseMessage;
}
/**
* Returns the browse dialog message.
*
* @return Browse message
*/
public String getBrowseMessage() {
return browseMessage;
}
/**
* Sets the default value.
*
* @param defaultValue Default value or <code>null</code>
*/
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
/**
* Returns the default value.
*
* @return Default vaue
*/
public String getDefaultValue() {
return defaultValue;
}
/**
* Opens the browse dialog.
* Derived classes should override.
*/
public abstract void openBrowseDialog();
}