Move ConfigComposite in its own package.

This commit is contained in:
Xavier Ducrohet
2009-08-19 18:18:37 -07:00
parent ffb7b7f81d
commit 900234fc0a
2 changed files with 80 additions and 74 deletions

View File

@@ -18,9 +18,10 @@ package com.android.ide.eclipse.adt.internal.editors.layout;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
import com.android.ide.eclipse.adt.internal.editors.layout.ConfigurationComposite.IConfigListener;
import com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor.UiEditorActions;
import com.android.ide.eclipse.adt.internal.editors.layout.LayoutReloadMonitor.ILayoutReloadListener;
import com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite;
import com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.IConfigListener;
import com.android.ide.eclipse.adt.internal.editors.layout.descriptors.ViewElementDescriptor;
import com.android.ide.eclipse.adt.internal.editors.layout.parts.ElementCreateCommand;
import com.android.ide.eclipse.adt.internal.editors.layout.parts.UiElementEditPart;
@@ -29,25 +30,9 @@ import com.android.ide.eclipse.adt.internal.editors.ui.tree.CopyCutAction;
import com.android.ide.eclipse.adt.internal.editors.ui.tree.PasteAction;
import com.android.ide.eclipse.adt.internal.editors.uimodel.UiDocumentNode;
import com.android.ide.eclipse.adt.internal.editors.uimodel.UiElementNode;
import com.android.ide.eclipse.adt.internal.resources.ResourceType;
import com.android.ide.eclipse.adt.internal.resources.configurations.CountryCodeQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.FolderConfiguration;
import com.android.ide.eclipse.adt.internal.resources.configurations.KeyboardStateQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.LanguageQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.NavigationMethodQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.NetworkCodeQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.RegionQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.ScreenDimensionQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.ScreenOrientationQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.TextInputMethodQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.TouchScreenQualifier;
import com.android.ide.eclipse.adt.internal.resources.configurations.KeyboardStateQualifier.KeyboardState;
import com.android.ide.eclipse.adt.internal.resources.configurations.NavigationMethodQualifier.NavigationMethod;
import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier.Density;
import com.android.ide.eclipse.adt.internal.resources.configurations.ScreenOrientationQualifier.ScreenOrientation;
import com.android.ide.eclipse.adt.internal.resources.configurations.TextInputMethodQualifier.TextInputMethod;
import com.android.ide.eclipse.adt.internal.resources.configurations.TouchScreenQualifier.TouchScreenType;
import com.android.ide.eclipse.adt.internal.resources.manager.ProjectResources;
import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFile;
import com.android.ide.eclipse.adt.internal.resources.manager.ResourceFolderType;
@@ -57,14 +42,10 @@ import com.android.ide.eclipse.adt.internal.sdk.LoadStatus;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData.LayoutBridge;
import com.android.ide.eclipse.adt.internal.sdk.Sdk.ITargetChangeListener;
import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector.DimensionVerifier;
import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector.LanguageRegionVerifier;
import com.android.ide.eclipse.adt.internal.ui.ConfigurationSelector.MobileCodeVerifier;
import com.android.layoutlib.api.ILayoutLog;
import com.android.layoutlib.api.ILayoutResult;
import com.android.layoutlib.api.IProjectCallback;
import com.android.layoutlib.api.IResourceValue;
import com.android.layoutlib.api.IStyleResourceValue;
import com.android.layoutlib.api.IXmlPullParser;
import com.android.layoutlib.api.ILayoutResult.ILayoutViewInfo;
import com.android.sdklib.IAndroidTarget;
@@ -98,22 +79,12 @@ import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
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.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.PaletteData;
import org.eclipse.swt.layout.FillLayout;
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.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.ide.IDE;
@@ -128,12 +99,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Graphical layout editor, based on GEF.
@@ -168,7 +136,6 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
private boolean mNeedsXmlReload = false;
private boolean mNeedsRecompute = false;
private int mPlatformThemeCount = 0;
/** Listener to update the root node if the target of the file is changed because of a
* SDK location change or a project target change */
@@ -239,7 +206,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
gl.marginHeight = gl.marginWidth = 0;
// create the top part for the configuration control
mConfigComposite = new ConfigurationComposite(parent, SWT.NONE);
mConfigComposite = new ConfigurationComposite(this, parent, SWT.NONE);
// create a new composite that will contain the standard editor controls.
Composite editorParent = new Composite(parent, SWT.NONE);
@@ -552,7 +519,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
setConfiguration(configuration, true /*force*/);
// enable the create button if the current and edited config are not equals
mCreateButton.setEnabled(
mConfigComposite.setEnabledCreate(
mEditedConfig.equals(mConfigComposite.getCurrentConfig()) == false);
}
@@ -602,7 +569,8 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
projectRes.loadAll();
// get the project resource values based on the current config
mConfiguredProjectRes = projectRes.getConfiguredResources(mCurrentConfig);
mConfiguredProjectRes = projectRes.getConfiguredResources(
mConfigComposite.getCurrentConfig());
}
configuredProjectResources = mConfiguredProjectRes;
@@ -617,17 +585,15 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
if (configuredProjectResources != null && frameworkResources != null) {
// get the selected theme
int themeIndex = mThemeCombo.getSelectionIndex();
if (themeIndex != -1) {
String theme = mThemeCombo.getItem(themeIndex);
String theme = mConfigComposite.getTheme();
if (theme != null) {
// Render a single object as described by the ViewElementDescriptor.
WidgetPullParser parser = new WidgetPullParser(descriptor);
ILayoutResult result = computeLayout(bridge, parser,
null /* projectKey */,
300 /* width */, 300 /* height */, 160 /*density*/,
160.f /*xdpi*/, 160.f /*ydpi*/, theme,
themeIndex >= mPlatformThemeCount /*isProjectTheme*/,
mConfigComposite.isProjectTheme(),
configuredProjectResources, frameworkResources, projectCallback,
null /* logger */);
@@ -785,7 +751,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
setConfiguration(mEditedConfig, false /*force*/);
// enable the create button if the current and edited config are not equals
mCreateButton.setEnabled(
mConfigComposite.setEnabledCreate(
mEditedConfig.equals(mConfigComposite.getCurrentConfig()) == false);
// Even though the layout doesn't change, the config changed, and referenced
@@ -796,13 +762,14 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
mConfigComposite.displayConfigError();
// enable the Create button
mCreateButton.setEnabled(true);
mConfigComposite.setEnabledCreate(true);
// display the error.
FolderConfiguration currentConfig = mConfigComposite.getCurrentConfig();
String message = String.format(
"No resources match the configuration\n \n\t%1$s\n \nChange the configuration or create:\n \n\tres/%2$s/%3$s\n \nYou can also click the 'Create' button above.",
mCurrentConfig.toDisplayString(),
mCurrentConfig.getFolderName(ResourceFolderType.LAYOUT,
currentConfig.toDisplayString(),
currentConfig.getFolderName(ResourceFolderType.LAYOUT,
Sdk.getCurrent().getTarget(mEditedFile.getProject())),
mEditedFile.getName());
showErrorInEditor(message);
@@ -902,20 +869,14 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
}
// get the resources of the file's project.
if (mConfiguredProjectRes == null) {
// make sure they are loaded
projectRes.loadAll();
// get the project resource values based on the current config
mConfiguredProjectRes = projectRes.getConfiguredResources(
mConfigComposite.getCurrentConfig());
}
Map<String, Map<String, IResourceValue>> configuredProjectRes =
getConfiguredProjectResources();
// get the framework resources
Map<String, Map<String, IResourceValue>> frameworkResources =
getConfiguredFrameworkResources();
if (mConfiguredProjectRes != null && frameworkResources != null) {
if (configuredProjectRes != null && frameworkResources != null) {
if (mProjectCallback == null) {
mProjectCallback = new ProjectCallback(
bridge.classLoader, projectRes, iProject);
@@ -944,19 +905,19 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
}
// get the selected theme
int themeIndex = mThemeCombo.getSelectionIndex();
if (themeIndex != -1) {
String theme = mThemeCombo.getItem(themeIndex);
String theme = mConfigComposite.getTheme();
if (theme != null) {
// Compute the layout
UiElementPullParser parser = new UiElementPullParser(getModel());
Rectangle rect = getBounds();
boolean isProjectTheme = themeIndex >= mPlatformThemeCount;
boolean isProjectTheme = mConfigComposite.isProjectTheme();
// FIXME pass the density/dpi from somewhere (resource config or skin).
// For now, get it from the config
int density = Density.MEDIUM.getDpiValue();
PixelDensityQualifier qual = mCurrentConfig.getPixelDensityQualifier();
PixelDensityQualifier qual =
mConfigComposite.getCurrentConfig().getPixelDensityQualifier();
if (qual != null) {
int d = qual.getValue().getDpiValue();
if (d > 0) {
@@ -968,7 +929,7 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
iProject /* projectKey */,
rect.width, rect.height, density, density, density,
theme, isProjectTheme,
mConfiguredProjectRes, frameworkResources, mProjectCallback,
configuredProjectRes, frameworkResources, mProjectCallback,
mLogger);
// update the UiElementNode with the layout info.
@@ -1144,6 +1105,21 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
return mConfiguredFrameworkRes;
}
public Map<String, Map<String, IResourceValue>> getConfiguredProjectResources() {
if (mConfiguredProjectRes == null) {
ProjectResources project = getProjectResources();
// make sure they are loaded
project.loadAll();
// get the project resource values based on the current config
mConfiguredProjectRes = project.getConfiguredResources(
mConfigComposite.getCurrentConfig());
}
return mConfiguredProjectRes;
}
/**
* Returns a {@link ProjectResources} for the framework resources.
* @return the framework resources or null if not found.
@@ -1167,6 +1143,15 @@ public class GraphicalLayoutEditor extends AbstractGraphicalLayoutEditor
return null;
}
public ProjectResources getProjectResources() {
if (mEditedFile != null) {
ResourceManager manager = ResourceManager.getInstance();
return manager.getProjectResources(mEditedFile.getProject());
}
return null;
}
/**
* Creates a new layout file from the specified {@link FolderConfiguration}.
*/

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.ide.eclipse.adt.internal.editors.layout;
package com.android.ide.eclipse.adt.internal.editors.layout.configuration;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
import com.android.ide.eclipse.adt.internal.resources.ResourceType;
@@ -106,8 +106,8 @@ public class ConfigurationComposite extends Composite {
private boolean mDisableUpdates = false;
/** The {@link FolderConfiguration} representing the state of the UI controls */
private FolderConfiguration mCurrentConfig = new FolderConfiguration();
private IConfigListener mListener;
private final FolderConfiguration mCurrentConfig = new FolderConfiguration();
private final IConfigListener mListener;
public interface IConfigListener {
void onConfigurationChange();
@@ -120,8 +120,9 @@ public class ConfigurationComposite extends Composite {
Map<String, Map<String, IResourceValue>> getConfiguredFrameworkResources();
}
public ConfigurationComposite(Composite parent, int style) {
public ConfigurationComposite(IConfigListener listener, Composite parent, int style) {
super(parent, style);
mListener = listener;
IconFactory factory = IconFactory.getInstance();
mWarningImage = factory.getIcon("warning"); //$NON-NLS-1$
@@ -406,15 +407,10 @@ public class ConfigurationComposite extends Composite {
}
public void setOnConfigurationChange(IConfigListener listener) {
mListener = listener;
}
public void setConfig(FolderConfiguration config) {
mCurrentConfig.set(config);
}
public FolderConfiguration getCurrentConfig() {
return mCurrentConfig;
}
@@ -596,7 +592,31 @@ public class ConfigurationComposite extends Composite {
mThemeCombo.getParent().layout();
}
/**
* Returns the current theme, or null if the combo has no selection.
*/
public String getTheme() {
int themeIndex = mThemeCombo.getSelectionIndex();
if (themeIndex != -1) {
return mThemeCombo.getItem(themeIndex);
}
return null;
}
/**
* Returns whether the current theme selection is a project theme.
* <p/>The returned value is meaningless if {@link #getTheme()} returns <code>null</code>.
* @return true for project theme, false for framework theme
*/
public boolean isProjectTheme() {
return mThemeCombo.getSelectionIndex() >= mPlatformThemeCount;
}
public void setEnabledCreate(boolean enabled) {
mCreateButton.setEnabled(enabled);
}
/**
* Update the UI controls state with a given {@link FolderConfiguration}.
@@ -607,7 +627,7 @@ public class ConfigurationComposite extends Composite {
* @param config The {@link FolderConfiguration} to set.
* @param force Whether the UI should be changed to exactly match the received configuration.
*/
void setConfiguration(FolderConfiguration config, boolean force) {
public void setConfiguration(FolderConfiguration config, boolean force) {
mDisableUpdates = true; // we do not want to trigger onXXXChange when setting new values in the widgets.
mCountryIcon.setImage(mMatchImage);
@@ -678,7 +698,7 @@ public class ConfigurationComposite extends Composite {
Density.getIndex(densityQualifier.getValue()) + 1);
mCurrentConfig.setPixelDensityQualifier(densityQualifier);
} else if (force) {
mOrientation.select(0);
mDensity.select(0);
mCurrentConfig.setPixelDensityQualifier(null);
} else if (mDensity.getSelectionIndex() != 0) {
mDensityIcon.setImage(mWarningImage);
@@ -757,7 +777,7 @@ public class ConfigurationComposite extends Composite {
/**
* Displays an error icon in front of all the non-null qualifiers.
*/
void displayConfigError() {
public void displayConfigError() {
mCountryIcon.setImage(mMatchImage);
CountryCodeQualifier countryQualifier = mCurrentConfig.getCountryCodeQualifier();
if (countryQualifier != null) {
@@ -1244,4 +1264,5 @@ public class ConfigurationComposite extends Composite {
return false;
}
}