blob: fd137c3fc94ab3c08f05b5509a9c97a21f0c501c [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* 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 com.motorolamobility.studio.android.db.core.ui.wizards;
import org.eclipse.jface.dialogs.Dialog;
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.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;
import com.motorolamobility.studio.android.db.core.i18n.DbCoreNLS;
import com.motorolamobility.studio.android.db.core.model.Field;
import com.motorolamobility.studio.android.db.core.model.Field.AutoIncrementType;
import com.motorolamobility.studio.android.db.core.model.Field.DataType;
public class AddTableFieldDialog extends Dialog
{
private Field field;
private Text nameText;
private Combo typeCombo;
private Text defaultText;
private Button isPrimaryButton;
private Composite primaryKeyOptions;
private Button noneButton;
private Button incrementalButton;
private Button decrementalButton;
private Label primaryKeyBehavior;
public AddTableFieldDialog(Shell parentShell)
{
super(parentShell);
}
public AddTableFieldDialog(Shell parentShell, Field newField)
{
super(parentShell);
field = newField;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
public Control createDialogArea(Composite parent)
{
this.getShell().setText(DbCoreNLS.CreateTableWizardPage_AddEditField_DialogTitle);
Composite composite = new Composite(parent, SWT.FILL);
GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
composite.setLayout(new GridLayout(2, false));
composite.setLayoutData(layoutData);
layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
Label nameLabel = new Label(composite, SWT.NONE);
nameLabel.setText(DbCoreNLS.AddTableFieldDialog_FieldNameLabel);
nameLabel.setLayoutData(layoutData);
layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
nameText = new Text(composite, SWT.BORDER);
nameText.setLayoutData(layoutData);
if (field != null)
{
nameText.setText(field.getName());
}
nameText.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
getButton(OK).setEnabled(
(nameText.getText().trim().length() > 0)
&& !(nameText.getText().trim().contains(" "))); //$NON-NLS-1$
}
});
layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
isPrimaryButton = new Button(composite, SWT.CHECK);
isPrimaryButton.setLayoutData(layoutData);
isPrimaryButton.setText(DbCoreNLS.AddTableFieldDialog_PrimaryKeyLabel);
if (field != null)
{
isPrimaryButton.setSelection(field.isPrimaryKey());
}
isPrimaryButton.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
defaultText.setEnabled(!(isPrimaryButton.getSelection()));
primaryKeyOptions.setEnabled((isPrimaryButton.getSelection()));
}
});
primaryKeyOptions = new Composite(composite, SWT.BORDER)
{
@Override
public void setEnabled(boolean enabled)
{
noneButton.setEnabled(enabled);
incrementalButton.setEnabled(enabled);
decrementalButton.setEnabled(enabled);
primaryKeyBehavior.setEnabled(enabled);
super.setEnabled(enabled);
}
};
layoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
primaryKeyOptions.setLayout(new GridLayout(1, false));
primaryKeyOptions.setLayoutData(layoutData);
primaryKeyBehavior = new Label(primaryKeyOptions, SWT.NONE);
primaryKeyBehavior.setLayoutData(layoutData);
primaryKeyBehavior.setText(DbCoreNLS.AddTableFieldDialog_PrimaryKeyAutomaticBehaviourLabel);
layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
noneButton = new Button(primaryKeyOptions, SWT.RADIO);
noneButton.setLayoutData(layoutData);
noneButton.setText(DbCoreNLS.AddTableFieldDialog_PrimaryKeyAutomaticBehaviour_NoneLabel);
incrementalButton = new Button(primaryKeyOptions, SWT.RADIO);
incrementalButton.setLayoutData(layoutData);
incrementalButton
.setText(DbCoreNLS.AddTableFieldDialog_PrimaryKeyAutomaticBehaviour_IncrementalLabel);
decrementalButton = new Button(primaryKeyOptions, SWT.RADIO);
decrementalButton.setLayoutData(layoutData);
decrementalButton
.setText(DbCoreNLS.AddTableFieldDialog_PrimaryKeyAutomaticBehaviour_DecrementalLabel);
Boolean isNew = (field != null) && (field.isPrimaryKey());
if (isNew)
{
noneButton.setSelection((field.getAutoIncrementType() == AutoIncrementType.NONE));
incrementalButton
.setSelection((field.getAutoIncrementType() == AutoIncrementType.ASCENDING));
decrementalButton
.setSelection((field.getAutoIncrementType() == AutoIncrementType.DESCENDING));
}
else
{
noneButton.setSelection(true);
}
primaryKeyOptions.setEnabled(isNew);
layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
Label typeLabel = new Label(composite, SWT.NONE);
typeLabel.setText(DbCoreNLS.AddTableFieldDialog_FieldTypeLabel);
typeLabel.setLayoutData(layoutData);
layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
typeCombo = new Combo(composite, SWT.READ_ONLY);
typeCombo.setLayoutData(layoutData);
int integerTypeIndex = 0;
for (DataType type : DataType.values())
{
typeCombo.add(type.toString());
if (type.equals(DataType.INTEGER))
{
integerTypeIndex = typeCombo.getItemCount() - 1;
}
}
typeCombo.select(integerTypeIndex);
if (field != null)
{
typeCombo.select(typeCombo.indexOf(field.getType().toString()));
}
layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false);
Label defaultLabel = new Label(composite, SWT.NONE);
defaultLabel.setText(DbCoreNLS.AddTableFieldDialog_FieldDefaultValueLabel);
defaultLabel.setLayoutData(layoutData);
layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
defaultText = new Text(composite, SWT.BORDER);
defaultText.setLayoutData(layoutData);
if (field != null)
{
defaultText.setText(field.getDefaultValue());
}
if (field != null)
{
defaultText.setEnabled(!field.isPrimaryKey());
primaryKeyOptions.setEnabled(field.isPrimaryKey());
}
composite.layout();
return composite;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
@Override
protected void okPressed()
{
if (field == null)
{
field = new Field();
}
field.setName(nameText.getText());
field.setPrimaryKey(isPrimaryButton.getSelection());
field.setDefaultValue(defaultText.getText().trim());
field.setType(DataType.valueOf(typeCombo.getItem(typeCombo.getSelectionIndex())));
if (noneButton.getSelection())
{
field.setAutoIncrementType(Field.AutoIncrementType.NONE);
}
else if (incrementalButton.getSelection())
{
field.setAutoIncrementType(Field.AutoIncrementType.ASCENDING);
}
else if (decrementalButton.getSelection())
{
field.setAutoIncrementType(Field.AutoIncrementType.DESCENDING);
}
super.okPressed();
}
public Field getField()
{
return field;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean)
*/
@Override
protected Button createButton(Composite parent, int id, String label, boolean defaultButton)
{
Button button = super.createButton(parent, id, label, defaultButton);
button.setEnabled((id != OK) || (field != null));
return button;
}
}