/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.cpacs.writer.gui.properties;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
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.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import de.rcenvironment.components.cpacs.writer.common.CpacsWriterComponentConstants;
import de.rcenvironment.core.gui.workflow.editor.properties.ValidatingWorkflowNodePropertySection;
/**
* Advanced property tab for ToolWrapper instances.
*
* @author Markus Kunde
*/
public class CpacsWriterSection extends ValidatingWorkflowNodePropertySection {
private static final int FOLDER_TEXTFIELD_WIDTH = 300;
private Button fileChooser;
private Composite fileGroup;
private Text filePath;
private Button checkIncremental;
@Override
protected void createCompositeContent(final Composite parent, final TabbedPropertySheetPage aTabbedPropertySheetPage) {
final TabbedPropertySheetWidgetFactory toolkit = aTabbedPropertySheetPage.getWidgetFactory();
final Composite content = new LayoutComposite(parent);
content.setLayout(new GridLayout(1, true));
final Composite fileChoosingSection = toolkit.createFlatFormComposite(content);
initFileChoosingSection(toolkit, fileChoosingSection);
}
/**
* Initialize file choosing section.
*
* @param toolkit the toolkit to create section content
* @param container parent
*/
private void initFileChoosingSection(final TabbedPropertySheetWidgetFactory toolkit, final Composite container) {
GridData layoutData;
layoutData = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
container.setLayoutData(layoutData);
container.setLayout(new FillLayout());
final Section section = toolkit.createSection(container, Section.TITLE_BAR | Section.EXPANDED);
section.setText(Messages.fileChoosingSectionName);
final Composite client = toolkit.createComposite(section);
layoutData = new GridData(GridData.FILL_HORIZONTAL);
client.setLayoutData(layoutData);
client.setLayout(new GridLayout(1, false));
Label localFolderTitle = new Label(client, STANDARD_LABEL_WIDTH);
localFolderTitle.setText(Messages.localFolderTitle);
fileGroup = toolkit.createComposite(client);
fileGroup.setLayout(new GridLayout(2, false));
GridData gridData = new GridData();
gridData.horizontalAlignment = GridData.FILL_HORIZONTAL;
gridData.grabExcessHorizontalSpace = true;
gridData.widthHint = FOLDER_TEXTFIELD_WIDTH;
filePath = toolkit.createText(fileGroup, "", SWT.SINGLE);
filePath.setData(CONTROL_PROPERTY_KEY, CpacsWriterComponentConstants.LOCAL_STORE_FOLDER);
filePath.setLayoutData(gridData);
fileChooser = toolkit.createButton(fileGroup, Messages.fileLinkButtonLabel, SWT.PUSH);
checkIncremental = toolkit.createButton(fileGroup, Messages.overwrite, SWT.CHECK | SWT.FLAT);
checkIncremental.setData(CONTROL_PROPERTY_KEY, CpacsWriterComponentConstants.SAVE_MODE);
section.setClient(client);
}
/**
* Open file choosing dialog for Mapping file.
*
*/
private void fileChoosing() {
final String path = getProperty(CpacsWriterComponentConstants.LOCAL_STORE_FOLDER);
final DirectoryDialog dialog = new DirectoryDialog(fileGroup.getShell());
dialog.setFilterPath(path);
dialog.setMessage(Messages.loadMessage);
dialog.setText(Messages.loadTitle);
String newPath = dialog.open();
if (newPath != null) {
newPath = newPath.trim();
while (newPath.endsWith("/") || newPath.endsWith("\\")) {
newPath = newPath.substring(0, newPath.length() - 1).trim();
}
if (!newPath.trim().isEmpty()) {
setProperty(CpacsWriterComponentConstants.LOCAL_STORE_FOLDER, newPath);
refreshSection();
}
}
}
@Override
protected void refreshBeforeValidation() {
fileGroup.pack(true);
}
@Override
protected Controller createController() {
return new FileController();
}
/**
* Custom {@link DefaultController} implementation to handle the activation of the GUI controls.
*
* @author Markus Kunde
*/
private final class FileController extends DefaultController {
@Override
protected void widgetSelected(final SelectionEvent event, final Control source) {
super.widgetSelected(event, source);
if (source == fileChooser) {
fileChoosing();
}
}
}
}