/*=============================================================================#
# Copyright (c) 2006-2016 Stephan Wahlbrink (WalWare.de) 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:
# Stephan Wahlbrink - initial API and implementation
#=============================================================================*/
package de.walware.statet.nico.internal.ui;
import java.util.EnumSet;
import java.util.Set;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.osgi.util.NLS;
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.Group;
import org.eclipse.swt.widgets.Label;
import de.walware.ecommons.ts.ITool;
import de.walware.ecommons.ui.util.LayoutUtil;
import de.walware.ecommons.ui.workbench.ResourceInputComposite;
import de.walware.statet.nico.core.runtime.SubmitType;
import de.walware.statet.nico.core.runtime.ToolProcess;
import de.walware.statet.nico.internal.ui.actions.AbstractHistoryPage;
import de.walware.statet.nico.ui.util.SubmitTypeSelectionComposite;
public class SaveHistoryPage extends AbstractHistoryPage {
private static final String SETTINGS_APPEND = "save.append"; //$NON-NLS-1$
private static final String SETTINGS_OVERWRITE = "save.overwrite"; //$NON-NLS-1$
private static final String SETTINGS_SOURCE = "source.include"; //$NON-NLS-1$
public boolean fAppendToFile;
public boolean fOverwriteFile;
private Button fAppendControl;
private Button fOverwriteControl;
private SubmitTypeSelectionComposite fSourceControl;
public SaveHistoryPage(final ToolProcess tool) {
super("SaveHistoryPage", Messages.SaveHistoryPage_title, tool); //$NON-NLS-1$
setDescription(NLS.bind(Messages.SaveHistoryPage_description, fTool.getLabel(ITool.DEFAULT_LABEL)));
}
@Override
protected ResourceInputComposite createResourceInputComposite(final Composite composite) {
return new ResourceInputComposite(composite,
ResourceInputComposite.STYLE_COMBO,
ResourceInputComposite.MODE_FILE | ResourceInputComposite.MODE_SAVE,
Messages.LoadSaveHistoryPage_File_label);
}
@Override
protected Composite createContentOptions(final Composite parent) {
final Group composite = new Group(parent, SWT.NONE);
composite.setLayout(LayoutUtil.applyGroupDefaults(new GridLayout(), 1));
composite.setText("Content:");
final Label label = new Label(composite, SWT.NONE);
label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
label.setText("Include &commands from:");
fSourceControl = new SubmitTypeSelectionComposite(composite);
fSourceControl.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
return composite;
}
@Override
protected Composite createSaveOptions(final Composite parent) {
final Group composite = new Group(parent, SWT.NONE);
composite.setLayout(LayoutUtil.applyGroupDefaults(new GridLayout(), 1));
composite.setText(Messages.SaveHistoryPage_Options_label);
fAppendControl = new Button(composite, SWT.CHECK);
fAppendControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
fAppendControl.setText(Messages.SaveHistoryPage_AppendToFile_label);
fAppendControl.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
fAppendToFile = fAppendControl.getSelection();
if (fAppendToFile) {
fOverwriteFile = false;
fOverwriteControl.setSelection(false);
}
updateMode();
}
});
fOverwriteControl = new Button(composite, SWT.CHECK);
fOverwriteControl.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
fOverwriteControl.setText(Messages.SaveHistoryPage_OverwriteExisting_label);
fOverwriteControl.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
fOverwriteFile = fOverwriteControl.getSelection();
if (fOverwriteFile) {
fAppendToFile = false;
fAppendControl.setSelection(false);
}
updateMode();
}
});
return composite;
}
protected void updateMode() {
int severity;
if (fAppendToFile) {
severity = IStatus.INFO;
}
else if (fOverwriteFile) {
severity = IStatus.WARNING;
}
else {
severity = IStatus.ERROR;
}
fLocationGroup.getValidator().setOnExisting(severity);
validate();
}
@Override
protected void initFields() {
super.initFields();
final IDialogSettings settings = getDialogSettings();
fAppendToFile = settings.getBoolean(SETTINGS_APPEND);
fAppendControl.setSelection(fAppendToFile);
fOverwriteFile = settings.getBoolean(SETTINGS_OVERWRITE);
fOverwriteControl.setSelection(fOverwriteFile);
final String sourceSetting = settings.get(SETTINGS_SOURCE);
if (sourceSetting != null) {
fSourceControl.setSelection(SubmitTypeSelectionComposite.SOURCE_ENCODER.store2Usage(sourceSetting));
}
else {
fSourceControl.setSelection(EnumSet.range(SubmitType.CONSOLE, SubmitType.TOOLS));
}
updateMode();
}
@Override
public void saveSettings() {
super.saveSettings();
final IDialogSettings settings = getDialogSettings();
settings.put(SETTINGS_APPEND, fAppendToFile);
settings.put(SETTINGS_OVERWRITE, fOverwriteFile);
settings.put(SETTINGS_SOURCE, SubmitTypeSelectionComposite.SOURCE_ENCODER.usage2Store(fSourceControl.getSelection()));
}
public Set<SubmitType> getContentSubmitTypes() {
return fSourceControl.getSelection();
}
}