/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
*
* 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.android.ide.eclipse.editors.layout;
import com.android.ide.eclipse.adt.ui.ConfigurationSelector;
import com.android.ide.eclipse.adt.ui.ConfigurationSelector.ConfigurationState;
import com.android.ide.eclipse.editors.IconFactory;
import com.android.ide.eclipse.editors.resources.configurations.FolderConfiguration;
import com.android.ide.eclipse.editors.resources.configurations.ResourceQualifier;
import com.android.ide.eclipse.editors.resources.manager.ResourceFolderType;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TrayDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
/**
* Dialog to choose a non existing {@link FolderConfiguration}.
*/
class LayoutCreatorDialog extends TrayDialog {
private ConfigurationSelector mSelector;
private Composite mStatusComposite;
private Label mStatusLabel;
private Label mStatusImage;
private final FolderConfiguration mConfig = new FolderConfiguration();
private final String mFileName;
/**
* Creates a dialog, and init the UI from a {@link FolderConfiguration}.
* @param parentShell the parent {@link Shell}.
* @param config The starting configuration.
*/
LayoutCreatorDialog(Shell parentShell, String fileName, FolderConfiguration config) {
super(parentShell);
mFileName = fileName;
// FIXME: add some data to know what configurations already exist.
mConfig.set(config);
}
@Override
protected Control createDialogArea(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);
top.setLayoutData(new GridData());
top.setLayout(new GridLayout(1, false));
new Label(top, SWT.NONE).setText(
String.format("Configuration for the alternate version of %1$s", mFileName));
mSelector = new ConfigurationSelector(top);
mSelector.setConfiguration(mConfig);
// parent's layout is a GridLayout as specified in the javadoc.
GridData gd = new GridData();
gd.widthHint = ConfigurationSelector.WIDTH_HINT;
gd.heightHint = ConfigurationSelector.HEIGHT_HINT;
mSelector.setLayoutData(gd);
// add a listener to check on the validity of the FolderConfiguration as
// they are built.
mSelector.setOnChangeListener(new Runnable() {
public void run() {
ConfigurationState state = mSelector.getState();
switch (state) {
case OK:
mSelector.getConfiguration(mConfig);
resetStatus();
mStatusImage.setImage(null);
getButton(IDialogConstants.OK_ID).setEnabled(true);
break;
case INVALID_CONFIG:
ResourceQualifier invalidQualifier = mSelector.getInvalidQualifier();
mStatusLabel.setText(String.format(
"Invalid Configuration: %1$s has no filter set.",
invalidQualifier.getName()));
mStatusImage.setImage(IconFactory.getInstance().getIcon("warning")); //$NON-NLS-1$
getButton(IDialogConstants.OK_ID).setEnabled(false);
break;
case REGION_WITHOUT_LANGUAGE:
mStatusLabel.setText(
"The Region qualifier requires the Language qualifier.");
mStatusImage.setImage(IconFactory.getInstance().getIcon("warning")); //$NON-NLS-1$
getButton(IDialogConstants.OK_ID).setEnabled(false);
break;
}
// need to relayout, because of the change in size in mErrorImage.
mStatusComposite.layout();
}
});
mStatusComposite = new Composite(top, SWT.NONE);
mStatusComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
GridLayout gl = new GridLayout(2, false);
mStatusComposite.setLayout(gl);
gl.marginHeight = gl.marginWidth = 0;
mStatusImage = new Label(mStatusComposite, SWT.NONE);
mStatusLabel = new Label(mStatusComposite, SWT.NONE);
mStatusLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
resetStatus();
return top;
}
public void getConfiguration(FolderConfiguration config) {
config.set(mConfig);
}
/**
* resets the status label to show the file that will be created.
*/
private void resetStatus() {
mStatusLabel.setText(String.format("New File: res/%1$s/%2$s",
mConfig.getFolderName(ResourceFolderType.LAYOUT), mFileName));
}
}
|