blob: 97ff668453897174331fbed76906cca44b3b656d [file] [log] [blame]
/*
* 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.adt.internal.editors.layout.configuration;
import com.android.ide.common.resources.configuration.FolderConfiguration;
import com.android.ide.common.resources.configuration.ResourceQualifier;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector;
import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector.ConfigurationState;
import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector.SelectorMode;
import com.android.resources.ResourceFolderType;
import com.android.sdkuilib.ui.GridDialog;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
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.Label;
import org.eclipse.swt.widgets.Shell;
/**
* Dialog to choose a non existing {@link FolderConfiguration}.
*/
public final class LayoutCreatorDialog extends GridDialog {
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 fileName the filename associated with the configuration
* @param config The starting configuration.
*/
public LayoutCreatorDialog(Shell parentShell, String fileName, FolderConfiguration config) {
super(parentShell, 1, false);
mFileName = fileName;
// FIXME: add some data to know what configurations already exist.
mConfig.set(config);
}
@Override
public void createDialogContent(Composite parent) {
new Label(parent, SWT.NONE).setText(
String.format("Configuration for the alternate version of %1$s", mFileName));
mSelector = new ConfigurationSelector(parent, SelectorMode.CONFIG_ONLY);
mSelector.setConfiguration(mConfig);
// because the ConfigSelector is running in CONFIG_ONLY mode, the current config
// displayed by it is not mConfig anymore, so get the current config.
mSelector.getConfiguration(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() {
@Override
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(parent, 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();
}
/**
* Sets the edited configuration on the given configuration parameter
*
* @param config the configuration to apply the current edits to
*/
public void getConfiguration(FolderConfiguration config) {
config.set(mConfig);
}
/**
* resets the status label to show the file that will be created.
*/
private void resetStatus() {
String displayString = Dialog.shortenText(String.format("New File: res/%1$s/%2$s",
mConfig.getFolderName(ResourceFolderType.LAYOUT), mFileName),
mStatusLabel);
mStatusLabel.setText(displayString);
}
}