mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
EA-37024, EA-37013
This commit is contained in:
+37
-1
@@ -37,6 +37,7 @@ import com.intellij.designer.model.WrapInProvider;
|
||||
import com.intellij.designer.palette.DefaultPaletteItem;
|
||||
import com.intellij.designer.palette.PaletteGroup;
|
||||
import com.intellij.designer.palette.PaletteItem;
|
||||
import com.intellij.designer.palette.PaletteToolWindowManager;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.IdeActions;
|
||||
@@ -270,6 +271,7 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
|
||||
float xdpi = deviceConfiguration.getDevice().getXDpi();
|
||||
float ydpi = deviceConfiguration.getDevice().getYDpi();
|
||||
|
||||
final boolean updatePalette = !Comparing.equal(myProfileAction.getProfileManager().getSelectedTarget(), myLastTarget);
|
||||
myLastTarget = manager.getSelectedTarget();
|
||||
ThemeData theme = manager.getSelectedTheme();
|
||||
|
||||
@@ -308,6 +310,9 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
|
||||
if (!isProjectClosed()) {
|
||||
hideProgress();
|
||||
runnable.consume(session);
|
||||
if (updatePalette) {
|
||||
updatePalette(myLastTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Throwable e) {
|
||||
@@ -579,7 +584,38 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
|
||||
|
||||
@Override
|
||||
public ComponentPasteFactory createPasteFactory(String xmlComponents) {
|
||||
return new AndroidPasteFactory(getProject(), xmlComponents);
|
||||
return new AndroidPasteFactory(getModule(), myLastTarget, xmlComponents);
|
||||
}
|
||||
|
||||
private void updatePalette(IAndroidTarget target) {
|
||||
try {
|
||||
ClassLoader classLoader = ProjectClassLoader.create(target, getModule());
|
||||
|
||||
for (PaletteGroup group : getPaletteGroups()) {
|
||||
for (PaletteItem item : group.getItems()) {
|
||||
if (item.getVersion() != null) {
|
||||
DefaultPaletteItem paletteItem = (DefaultPaletteItem)item;
|
||||
try {
|
||||
String className = paletteItem.getMetaModel().getTarget();
|
||||
classLoader.loadClass(className);
|
||||
paletteItem.setEnabled(true);
|
||||
}
|
||||
catch (Throwable e) {
|
||||
paletteItem.setEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PaletteItem item = getActivePaletteItem();
|
||||
if (item != null && !item.isEnabled()) {
|
||||
activatePaletteItem(null);
|
||||
}
|
||||
|
||||
PaletteToolWindowManager.getInstance(getProject()).refresh();
|
||||
}
|
||||
catch (Throwable e) {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+17
-3
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.android.designer.designSurface;
|
||||
|
||||
import com.android.sdklib.IAndroidTarget;
|
||||
import com.intellij.android.designer.model.ModelParser;
|
||||
import com.intellij.android.designer.model.RadViewComponent;
|
||||
import com.intellij.android.designer.model.ViewsMetaManager;
|
||||
@@ -22,10 +23,11 @@ import com.intellij.designer.designSurface.tools.ComponentPasteFactory;
|
||||
import com.intellij.designer.model.MetaManager;
|
||||
import com.intellij.designer.model.MetaModel;
|
||||
import com.intellij.designer.model.RadComponent;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import org.jdom.Document;
|
||||
import org.jdom.Element;
|
||||
import org.jdom.input.SAXBuilder;
|
||||
import org.jetbrains.android.uipreview.ProjectClassLoader;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.StringReader;
|
||||
@@ -38,17 +40,24 @@ import java.util.List;
|
||||
public class AndroidPasteFactory implements ComponentPasteFactory {
|
||||
public static final String KEY = "PASTE_DATA";
|
||||
|
||||
private final Module myModule;
|
||||
private final IAndroidTarget myTarget;
|
||||
private final MetaManager myMetaManager;
|
||||
private final String myXmlComponents;
|
||||
private ClassLoader myClassLoader;
|
||||
|
||||
public AndroidPasteFactory(Project project, String xmlComponents) {
|
||||
myMetaManager = ViewsMetaManager.getInstance(project);
|
||||
public AndroidPasteFactory(Module module, IAndroidTarget target, String xmlComponents) {
|
||||
myModule = module;
|
||||
myTarget = target;
|
||||
myMetaManager = ViewsMetaManager.getInstance(module.getProject());
|
||||
myXmlComponents = xmlComponents;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public List<RadComponent> create() throws Exception {
|
||||
myClassLoader = ProjectClassLoader.create(myTarget, myModule);
|
||||
|
||||
List<RadComponent> components = new ArrayList<RadComponent>();
|
||||
|
||||
Document document = new SAXBuilder().build(new StringReader(myXmlComponents), "UTF-8");
|
||||
@@ -62,6 +71,11 @@ public class AndroidPasteFactory implements ComponentPasteFactory {
|
||||
private RadComponent createComponent(Element element) throws Exception {
|
||||
MetaModel metaModel = myMetaManager.getModelByTag(element.getAttributeValue("tag"));
|
||||
|
||||
String target = metaModel.getTarget();
|
||||
if (target != null) {
|
||||
myClassLoader.loadClass(target);
|
||||
}
|
||||
|
||||
RadViewComponent component = ModelParser.createComponent(null, metaModel);
|
||||
component.setClientProperty(KEY, element.getChild("properties"));
|
||||
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ public class RadViewComponent extends RadVisualComponent {
|
||||
private List<Property> myProperties;
|
||||
|
||||
public XmlTag getTag() {
|
||||
if (myTag.getParent() == null || !myTag.isValid()) {
|
||||
if (myTag != null && (myTag.getParent() == null || !myTag.isValid())) {
|
||||
return EmptyXmlTag.INSTANCE;
|
||||
}
|
||||
return myTag;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.android.uipreview;
|
||||
|
||||
import com.android.sdklib.IAndroidTarget;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.roots.CompilerModuleExtension;
|
||||
@@ -7,6 +8,8 @@ import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import org.jetbrains.android.facet.AndroidRootUtil;
|
||||
import org.jetbrains.android.sdk.AndroidPlatform;
|
||||
import org.jetbrains.android.sdk.AndroidTargetData;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
@@ -35,6 +38,13 @@ public final class ProjectClassLoader extends ClassLoader {
|
||||
myModule = module;
|
||||
}
|
||||
|
||||
public static ClassLoader create(IAndroidTarget target, Module module) throws Exception {
|
||||
AndroidPlatform androidPlatform = AndroidPlatform.getInstance(module);
|
||||
AndroidTargetData targetData = androidPlatform.getSdkData().getTargetData(target);
|
||||
RenderServiceFactory factory = targetData.getRenderServiceFactory(module.getProject());
|
||||
return new ProjectClassLoader(factory.getLibrary().getClassLoader(), module);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<?> findClass(String name) throws ClassNotFoundException {
|
||||
if (mInsideJarClassLoader) {
|
||||
|
||||
+6
-1
@@ -29,6 +29,7 @@ public class DefaultPaletteItem implements PaletteItem {
|
||||
private Icon myIcon;
|
||||
private final String myTooltip;
|
||||
private final String myVersion;
|
||||
private boolean myEnabled = true;
|
||||
|
||||
protected MetaModel myMetaModel;
|
||||
|
||||
@@ -64,7 +65,11 @@ public class DefaultPaletteItem implements PaletteItem {
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;//myVersion == null;
|
||||
return myEnabled;
|
||||
}
|
||||
|
||||
public void setEnabled(boolean enabled) {
|
||||
myEnabled = enabled;
|
||||
}
|
||||
|
||||
public MetaModel getMetaModel() {
|
||||
|
||||
+4
@@ -45,6 +45,10 @@ public class PaletteToolWindowManager extends AbstractToolWindowManager {
|
||||
myToolWindowPanel.clearActiveItem();
|
||||
}
|
||||
|
||||
public void refresh() {
|
||||
myToolWindowPanel.repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initToolWindow() {
|
||||
myToolWindow = ToolWindowManager.getInstance(myProject).registerToolWindow("Palette\t", false, ToolWindowAnchor.RIGHT, myProject, true);
|
||||
|
||||
Reference in New Issue
Block a user