/*
* ARX: Powerful Data Anonymization
* Copyright 2012 - 2017 Fabian Prasser, Florian Kohlmayer and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.deidentifier.arx.gui.view.impl.menu;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.deidentifier.arx.gui.model.Model;
import org.deidentifier.arx.gui.resources.Resources;
import org.deidentifier.arx.gui.view.SWTUtil;
import org.deidentifier.arx.gui.view.def.IDialog;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.events.ShellListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* This class implements a dialog for creating a project.
*
* @author Fabian Prasser
*/
public class DialogProject extends TitleAreaDialog implements IDialog {
/** Widget. */
private Text name = null;
/** Widget. */
private Text description = null;
/** Widget. */
private Button ok = null;
/** Model. */
private Model model = null;
/** Widget. */
private Combo locale = null;
/** Locale. */
private Locale selectedLocale = Locale.getDefault();
/**
* Creates a new instance.
*
* @param parent
*/
public DialogProject(final Shell parent) {
super(parent);
}
@Override
public void create() {
super.create();
setTitle(Resources.getMessage("ProjectDialog.0")); //$NON-NLS-1$
setMessage(Resources.getMessage("ProjectDialog.1"), IMessageProvider.NONE); //$NON-NLS-1$
name.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent arg0) {
model = new Model(name.getText(), description.getText(), selectedLocale);
if (name.getText().equals("")) { //$NON-NLS-1$
ok.setEnabled(false);
} else {
ok.setEnabled(true);
}
}
});
description.addModifyListener(new ModifyListener() {
@Override
public void modifyText(final ModifyEvent arg0) {
model = new Model(name.getText(), description.getText(), selectedLocale);
}
});
locale.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent arg0) {
if (locale.getSelectionIndex() >= 0) {
selectedLocale = new Locale(locale.getItem(locale.getSelectionIndex()).toLowerCase());
} else {
selectedLocale = Locale.getDefault();
}
model = new Model(name.getText(), description.getText(), selectedLocale);
}
});
}
/**
* Returns the resulting project.
*
* @return
*/
public Model getProject() {
return model;
}
@Override
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setImages(Resources.getIconSet(newShell.getDisplay()));
}
@Override
protected void createButtonsForButtonBar(final Composite parent) {
final GridData gridData = new GridData();
gridData.verticalAlignment = GridData.FILL;
gridData.horizontalSpan = 2;
gridData.verticalSpan = 2;
gridData.grabExcessHorizontalSpace = true;
gridData.grabExcessVerticalSpace = false;
gridData.horizontalAlignment = SWT.LEFT;
parent.setLayoutData(gridData);
parent.getParent().setLayoutData(gridData);
// Create OK Button
ok = createButton(parent,
Window.OK,
Resources.getMessage("ProjectDialog.3"), true); //$NON-NLS-1$
ok.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
setReturnCode(Window.OK);
close();
}
});
ok.setEnabled(false);
// Create Cancel Button
parent.setLayoutData(SWTUtil.createFillGridData());
final Button cancel = createButton(parent,
Window.CANCEL,
Resources.getMessage("ProjectDialog.4"), false); //$NON-NLS-1$
cancel.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(final SelectionEvent e) {
setReturnCode(Window.CANCEL);
close();
}
});
}
@Override
protected Control createDialogArea(final Composite parent) {
final GridLayout l = new GridLayout();
l.numColumns = 2;
l.makeColumnsEqualWidth = false;
parent.setLayout(l);
// Build components
final Label label = new Label(parent, SWT.NONE);
label.setText(Resources.getMessage("ProjectDialog.5")); //$NON-NLS-1$
label.setLayoutData(SWTUtil.createNoFillGridData());
name = new Text(parent, SWT.BORDER);
name.setLayoutData(SWTUtil.createFillHorizontallyGridData());
name.setText(""); //$NON-NLS-1$
final Label label2 = new Label(parent, SWT.LEFT | SWT.WRAP);
label2.setText(Resources.getMessage("ProjectDialog.7")); //$NON-NLS-1$
label2.setLayoutData(SWTUtil.createNoFillGridData());
description = new Text(parent, SWT.MULTI | SWT.BORDER | SWT.WRAP |
SWT.V_SCROLL);
description.setLayoutData(SWTUtil.createFillGridData());
description.setText(""); //$NON-NLS-1$
final Label label3 = new Label(parent, SWT.LEFT | SWT.WRAP);
label3.setText(Resources.getMessage("ProjectDialog.8")); //$NON-NLS-1$
label3.setLayoutData(SWTUtil.createNoFillGridData());
// Create list of locales
List<String> languages = new ArrayList<String>();
for (String lang : Locale.getISOLanguages()) {
languages.add(lang.toUpperCase());
}
locale = new Combo(parent, SWT.READ_ONLY);
locale.setItems(languages.toArray(new String[]{}));
locale.select(languages.indexOf(Locale.getDefault().getLanguage().toUpperCase()));
locale.setLayoutData(SWTUtil.createFillHorizontallyGridData());
return parent;
}
@Override
protected ShellListener getShellListener() {
return new ShellAdapter() {
@Override
public void shellClosed(final ShellEvent event) {
setReturnCode(Window.CANCEL);
}
};
}
}