mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Palette
This commit is contained in:
@@ -20,8 +20,6 @@
|
||||
|
||||
<projectService serviceInterface="com.intellij.android.designer.model.ViewsMetaManager"
|
||||
serviceImplementation="com.intellij.android.designer.model.ViewsMetaManager"/>
|
||||
|
||||
<paletteItemProvider implementation="com.intellij.android.designer.palette.ViewsPaletteProvider"/>
|
||||
</extensions>
|
||||
|
||||
</idea-plugin>
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ import com.intellij.designer.componentTree.TreeComponentDecorator;
|
||||
import com.intellij.designer.model.IComponentDecorator;
|
||||
import com.intellij.designer.model.MetaModel;
|
||||
import com.intellij.designer.model.RadComponent;
|
||||
import com.intellij.designer.palette.Item;
|
||||
import com.intellij.designer.palette.DefaultPaletteItem;
|
||||
import com.intellij.designer.propertyTable.Property;
|
||||
import com.intellij.designer.propertyTable.PropertyTable;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -46,7 +46,7 @@ public final class AndroidTreeDecorator implements TreeComponentDecorator {
|
||||
}
|
||||
|
||||
StringBuilder fullTitle = new StringBuilder();
|
||||
Item item = metaModel.getPaletteItem();
|
||||
DefaultPaletteItem item = metaModel.getPaletteItem();
|
||||
if (item != null) {
|
||||
fullTitle.append(item.getTitle());
|
||||
}
|
||||
|
||||
+6
-21
@@ -32,11 +32,10 @@ import com.intellij.designer.designSurface.OperationContext;
|
||||
import com.intellij.designer.designSurface.selection.NonResizeSelectionDecorator;
|
||||
import com.intellij.designer.designSurface.tools.ComponentCreationFactory;
|
||||
import com.intellij.designer.designSurface.tools.ComponentPasteFactory;
|
||||
import com.intellij.designer.model.MetaManager;
|
||||
import com.intellij.designer.model.RadComponent;
|
||||
import com.intellij.designer.palette.Item;
|
||||
import com.intellij.designer.palette2.PaletteGroup;
|
||||
import com.intellij.ide.palette.PaletteItem;
|
||||
import com.intellij.designer.palette.DefaultPaletteItem;
|
||||
import com.intellij.designer.palette.PaletteGroup;
|
||||
import com.intellij.designer.palette.PaletteItem;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ex.ApplicationManagerEx;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -62,7 +61,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -446,32 +444,19 @@ public final class AndroidDesignerEditorPanel extends DesignerEditorPanel {
|
||||
return null;
|
||||
}
|
||||
|
||||
private List<PaletteGroup> myPaletteGroups;
|
||||
|
||||
@Override
|
||||
public List<PaletteGroup> getPaletteGroups() {
|
||||
if (myPaletteGroups == null) {
|
||||
myPaletteGroups = new ArrayList<PaletteGroup>();
|
||||
MetaManager metaManager = ViewsMetaManager.getInstance(getProject());
|
||||
for (com.intellij.ide.palette.PaletteGroup group : metaManager.getPaletteGroups()) {
|
||||
PaletteGroup newGroup = new PaletteGroup(group.getName());
|
||||
for (PaletteItem item : group.getItems()) {
|
||||
newGroup.addItem((com.intellij.designer.palette2.PaletteItem)item);
|
||||
}
|
||||
myPaletteGroups.add(newGroup);
|
||||
}
|
||||
}
|
||||
return myPaletteGroups;
|
||||
return ViewsMetaManager.getInstance(getProject()).getPaletteGroups();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected ComponentCreationFactory createCreationFactory(final Item paletteItem) {
|
||||
protected ComponentCreationFactory createCreationFactory(final PaletteItem paletteItem) {
|
||||
return new ComponentCreationFactory() {
|
||||
@NotNull
|
||||
@Override
|
||||
public RadComponent create() throws Exception {
|
||||
RadViewComponent component = ModelParser.createComponent(null, paletteItem.getMetaModel());
|
||||
RadViewComponent component = ModelParser.createComponent(null, ((DefaultPaletteItem)paletteItem).getMetaModel());
|
||||
if (component instanceof IConfigurableComponent) {
|
||||
((IConfigurableComponent)component).configure(myRootComponent);
|
||||
}
|
||||
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* 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.intellij.android.designer.palette;
|
||||
|
||||
import com.intellij.android.designer.AndroidDesignerEditorProvider;
|
||||
import com.intellij.android.designer.model.ViewsMetaManager;
|
||||
import com.intellij.designer.DesignerToolWindowManager;
|
||||
import com.intellij.designer.model.MetaManager;
|
||||
import com.intellij.designer.palette.AbstractPaletteProvider;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public class ViewsPaletteProvider extends AbstractPaletteProvider {
|
||||
private final Project myProject;
|
||||
|
||||
public ViewsPaletteProvider(Project project) {
|
||||
myProject = project;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean accept(VirtualFile virtualFile) {
|
||||
return AndroidDesignerEditorProvider.acceptLayout(myProject, virtualFile) &&
|
||||
DesignerToolWindowManager.getInstance(myProject).getActiveDesigner() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MetaManager getMetaManager() {
|
||||
return ViewsMetaManager.getInstance(myProject);
|
||||
}
|
||||
}
|
||||
@@ -12,9 +12,9 @@
|
||||
<component>
|
||||
<implementation-class>com.intellij.designer.DesignerToolWindowManager</implementation-class>
|
||||
</component>
|
||||
<!--<component>
|
||||
<implementation-class>com.intellij.designer.palette2.PaletteToolWindowManager</implementation-class>
|
||||
</component>-->
|
||||
<component>
|
||||
<implementation-class>com.intellij.designer.palette.PaletteToolWindowManager</implementation-class>
|
||||
</component>
|
||||
</project-components>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
|
||||
+13
-33
@@ -23,14 +23,13 @@ import com.intellij.designer.componentTree.TreeComponentDecorator;
|
||||
import com.intellij.designer.designSurface.tools.*;
|
||||
import com.intellij.designer.model.FindComponentVisitor;
|
||||
import com.intellij.designer.model.RadComponent;
|
||||
import com.intellij.designer.palette.Item;
|
||||
import com.intellij.designer.palette2.PaletteGroup;
|
||||
import com.intellij.designer.palette2.PaletteItem;
|
||||
import com.intellij.designer.palette.PaletteGroup;
|
||||
import com.intellij.designer.palette.PaletteItem;
|
||||
import com.intellij.designer.palette.PaletteToolWindowManager;
|
||||
import com.intellij.designer.propertyTable.InplaceContext;
|
||||
import com.intellij.designer.propertyTable.Property;
|
||||
import com.intellij.diagnostic.LogMessageEx;
|
||||
import com.intellij.diagnostic.errordialog.Attachment;
|
||||
import com.intellij.ide.palette.impl.PaletteManager;
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.openapi.actionSystem.ActionPlaces;
|
||||
import com.intellij.openapi.actionSystem.DataProvider;
|
||||
@@ -61,8 +60,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.HyperlinkEvent;
|
||||
import javax.swing.event.HyperlinkListener;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import java.awt.*;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.PrintStream;
|
||||
@@ -107,7 +104,6 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
|
||||
private FeedbackLayer myFeedbackLayer;
|
||||
private InplaceEditingLayer myInplaceEditingLayer;
|
||||
|
||||
private ListSelectionListener myPaletteListener;
|
||||
protected ToolProvider myToolProvider;
|
||||
protected EditableArea mySurfaceArea;
|
||||
|
||||
@@ -207,21 +203,6 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
|
||||
}
|
||||
};
|
||||
|
||||
myPaletteListener = new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
if (DesignerToolWindowManager.getInstance(getProject()).getActiveDesigner() == DesignerEditorPanel.this) {
|
||||
Item paletteItem = (Item)PaletteManager.getInstance(getProject()).getActiveItem();
|
||||
if (paletteItem != null) {
|
||||
myToolProvider.setActiveTool(new CreationTool(true, createCreationFactory(paletteItem)));
|
||||
}
|
||||
else if (myToolProvider.getActiveTool() instanceof CreationTool) {
|
||||
myToolProvider.loadDefaultTool();
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
myToolProvider = new ToolProvider() {
|
||||
@Override
|
||||
public void loadDefaultTool() {
|
||||
@@ -231,7 +212,7 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
|
||||
@Override
|
||||
public void setActiveTool(InputTool tool) {
|
||||
if (getActiveTool() instanceof CreationTool && !(tool instanceof CreationTool)) {
|
||||
PaletteManager.getInstance(getProject()).clearActiveItem();
|
||||
PaletteToolWindowManager.getInstance(getProject()).clearActiveItem();
|
||||
}
|
||||
if (!(tool instanceof SelectionTool)) {
|
||||
hideInspections();
|
||||
@@ -327,8 +308,6 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
|
||||
myDesignerCard.add(content);
|
||||
add(myDesignerCard, DESIGNER_CARD);
|
||||
|
||||
PaletteManager.getInstance(getProject()).addSelectionListener(myPaletteListener);
|
||||
|
||||
mySourceSelectionListener = new ComponentSelectionListener() {
|
||||
@Override
|
||||
public void selectionChanged(EditableArea area) {
|
||||
@@ -338,8 +317,13 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
|
||||
mySurfaceArea.addSelectionListener(mySourceSelectionListener);
|
||||
}
|
||||
|
||||
public void activatePaletteItem(@Nullable PaletteItem item) {
|
||||
// XXX
|
||||
public final void activatePaletteItem(@Nullable PaletteItem paletteItem) {
|
||||
if (paletteItem != null) {
|
||||
myToolProvider.setActiveTool(new CreationTool(true, createCreationFactory(paletteItem)));
|
||||
}
|
||||
else if (myToolProvider.getActiveTool() instanceof CreationTool) {
|
||||
myToolProvider.loadDefaultTool();
|
||||
}
|
||||
}
|
||||
|
||||
protected final void showDesignerCard() {
|
||||
@@ -697,13 +681,10 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
|
||||
|
||||
protected abstract void execute(List<EditOperation> operations);
|
||||
|
||||
public List<PaletteGroup> getPaletteGroups() {
|
||||
// XXX
|
||||
return null;
|
||||
}
|
||||
public abstract List<PaletteGroup> getPaletteGroups();
|
||||
|
||||
@NotNull
|
||||
protected abstract ComponentCreationFactory createCreationFactory(Item paletteItem);
|
||||
protected abstract ComponentCreationFactory createCreationFactory(PaletteItem paletteItem);
|
||||
|
||||
@Nullable
|
||||
public abstract ComponentPasteFactory createPasteFactory(String xmlComponents);
|
||||
@@ -731,7 +712,6 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
PaletteManager.getInstance(getProject()).removeSelectionListener(myPaletteListener);
|
||||
Disposer.dispose(myProgressIcon);
|
||||
}
|
||||
|
||||
|
||||
+9
-10
@@ -15,9 +15,8 @@
|
||||
*/
|
||||
package com.intellij.designer.model;
|
||||
|
||||
import com.intellij.designer.palette.Group;
|
||||
import com.intellij.designer.palette.Item;
|
||||
import com.intellij.ide.palette.PaletteGroup;
|
||||
import com.intellij.designer.palette.DefaultPaletteItem;
|
||||
import com.intellij.designer.palette.PaletteGroup;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -49,7 +48,7 @@ public abstract class MetaManager {
|
||||
|
||||
private final Map<String, MetaModel> myTag2Model = new HashMap<String, MetaModel>();
|
||||
private final Map<String, MetaModel> myTarget2Model = new HashMap<String, MetaModel>();
|
||||
private final List<Group> myPaletteGroups = new ArrayList<Group>();
|
||||
private final List<PaletteGroup> myPaletteGroups = new ArrayList<PaletteGroup>();
|
||||
|
||||
private PropertyChangeSupport myPaletteChangeSupport;
|
||||
|
||||
@@ -71,7 +70,7 @@ public abstract class MetaManager {
|
||||
}
|
||||
|
||||
for (Object element : rootElement.getChild(PALETTE).getChildren(GROUP)) {
|
||||
loadGroup(name, (Element)element);
|
||||
loadGroup((Element)element);
|
||||
}
|
||||
|
||||
for (Map.Entry<MetaModel, List<String>> entry : modelToMorphing.entrySet()) {
|
||||
@@ -122,7 +121,7 @@ public abstract class MetaManager {
|
||||
Element palette = element.getChild("palette");
|
||||
if (palette != null) {
|
||||
meta.setPaletteItem(
|
||||
new Item(palette.getAttributeValue("title"), palette.getAttributeValue("icon"), palette.getAttributeValue("tooltip")));
|
||||
new DefaultPaletteItem(palette.getAttributeValue("title"), palette.getAttributeValue("icon"), palette.getAttributeValue("tooltip")));
|
||||
}
|
||||
|
||||
Element creation = element.getChild("creation");
|
||||
@@ -177,8 +176,8 @@ public abstract class MetaManager {
|
||||
}
|
||||
}
|
||||
|
||||
private void loadGroup(String tab, Element element) throws Exception {
|
||||
Group group = new Group(tab, element.getAttributeValue(NAME));
|
||||
private void loadGroup(Element element) throws Exception {
|
||||
PaletteGroup group = new PaletteGroup(element.getAttributeValue(NAME));
|
||||
|
||||
for (Object child : element.getChildren(ITEM)) {
|
||||
String tag = ((Element)child).getAttributeValue(TAG);
|
||||
@@ -207,8 +206,8 @@ public abstract class MetaManager {
|
||||
return myTarget2Model.get(target);
|
||||
}
|
||||
|
||||
public PaletteGroup[] getPaletteGroups() {
|
||||
return myPaletteGroups.toArray(new PaletteGroup[myPaletteGroups.size()]);
|
||||
public List<PaletteGroup> getPaletteGroups() {
|
||||
return myPaletteGroups;
|
||||
}
|
||||
|
||||
public void setPaletteChangeSupport(PropertyChangeSupport paletteChangeSupport) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.intellij.designer.model;
|
||||
|
||||
import com.intellij.designer.palette.Item;
|
||||
import com.intellij.designer.palette.DefaultPaletteItem;
|
||||
import com.intellij.designer.propertyTable.IPropertyDecorator;
|
||||
import com.intellij.designer.propertyTable.Property;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
@@ -33,7 +33,7 @@ public class MetaModel {
|
||||
private Class<RadLayout> myLayout;
|
||||
private final String myTarget;
|
||||
private final String myTag;
|
||||
private Item myPaletteItem;
|
||||
private DefaultPaletteItem myPaletteItem;
|
||||
private String myTitle;
|
||||
private String myIconPath;
|
||||
private Icon myIcon;
|
||||
@@ -109,11 +109,11 @@ public class MetaModel {
|
||||
myIcon = null;
|
||||
}
|
||||
|
||||
public Item getPaletteItem() {
|
||||
public DefaultPaletteItem getPaletteItem() {
|
||||
return myPaletteItem;
|
||||
}
|
||||
|
||||
public void setPaletteItem(@NotNull Item paletteItem) {
|
||||
public void setPaletteItem(@NotNull DefaultPaletteItem paletteItem) {
|
||||
myPaletteItem = paletteItem;
|
||||
myPaletteItem.setMetaModel(this);
|
||||
}
|
||||
|
||||
-61
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* 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.intellij.designer.palette;
|
||||
|
||||
import com.intellij.designer.model.MetaManager;
|
||||
import com.intellij.ide.palette.PaletteGroup;
|
||||
import com.intellij.ide.palette.PaletteItemProvider;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.beans.PropertyChangeSupport;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public abstract class AbstractPaletteProvider implements PaletteItemProvider {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.designer.palette.AbstractPaletteProvider");
|
||||
|
||||
private final PropertyChangeSupport myPropertyChangeSupport = new PropertyChangeSupport(this);
|
||||
|
||||
@Override
|
||||
public PaletteGroup[] getActiveGroups(VirtualFile virtualFile) {
|
||||
if (accept(virtualFile)) {
|
||||
MetaManager manager = getMetaManager();
|
||||
if (manager != null) {
|
||||
manager.setPaletteChangeSupport(myPropertyChangeSupport);
|
||||
return manager.getPaletteGroups();
|
||||
}
|
||||
LOG.error("VirtualFile: " + virtualFile + " accepted but MetaManager is null");
|
||||
}
|
||||
return PaletteGroup.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
protected abstract boolean accept(VirtualFile virtualFile);
|
||||
|
||||
protected abstract MetaManager getMetaManager();
|
||||
|
||||
@Override
|
||||
public void addListener(PropertyChangeListener listener) {
|
||||
myPropertyChangeSupport.addPropertyChangeListener(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(PropertyChangeListener listener) {
|
||||
myPropertyChangeSupport.removePropertyChangeListener(listener);
|
||||
}
|
||||
}
|
||||
+4
-30
@@ -16,20 +16,14 @@
|
||||
package com.intellij.designer.palette;
|
||||
|
||||
import com.intellij.designer.model.MetaModel;
|
||||
import com.intellij.ide.dnd.DnDDragStartBean;
|
||||
import com.intellij.ide.palette.PaletteItem;
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.ui.ColoredListCellRenderer;
|
||||
import com.intellij.ui.SimpleTextAttributes;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public final class Item implements PaletteItem, com.intellij.designer.palette2.PaletteItem {
|
||||
public final class DefaultPaletteItem implements PaletteItem {
|
||||
private String myTitle;
|
||||
private String myIconPath;
|
||||
private Icon myIcon;
|
||||
@@ -37,16 +31,18 @@ public final class Item implements PaletteItem, com.intellij.designer.palette2.P
|
||||
|
||||
private MetaModel myMetaModel;
|
||||
|
||||
public Item(String title, String iconPath, String tooltip) {
|
||||
public DefaultPaletteItem(String title, String iconPath, String tooltip) {
|
||||
myTitle = title;
|
||||
myIconPath = iconPath;
|
||||
myTooltip = tooltip;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTitle() {
|
||||
return myTitle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getIcon() {
|
||||
if (myIcon == null) {
|
||||
myIcon = IconLoader.findIcon(myIconPath, myMetaModel.getModel());
|
||||
@@ -59,28 +55,6 @@ public final class Item implements PaletteItem, com.intellij.designer.palette2.P
|
||||
return myTooltip;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void customizeCellRenderer(ColoredListCellRenderer cellRenderer, boolean selected, boolean hasFocus) {
|
||||
cellRenderer.setIcon(getIcon());
|
||||
cellRenderer.append(myTitle, SimpleTextAttributes.REGULAR_ATTRIBUTES);
|
||||
cellRenderer.setToolTipText(myTooltip);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DnDDragStartBean startDragging() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionGroup getPopupActionGroup() {
|
||||
return null; // TODO: Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getData(Project project, String dataId) {
|
||||
return null; // TODO: Auto-generated method stub
|
||||
}
|
||||
|
||||
public MetaModel getMetaModel() {
|
||||
return myMetaModel;
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* 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.intellij.designer.palette;
|
||||
|
||||
import com.intellij.ide.palette.PaletteGroup;
|
||||
import com.intellij.ide.palette.PaletteItem;
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public final class Group implements PaletteGroup {
|
||||
private final String myTabName;
|
||||
private final String myName;
|
||||
private List<Item> myItems = new ArrayList<Item>();
|
||||
|
||||
public Group(String tabName, String name) {
|
||||
myTabName = tabName;
|
||||
myName = name;
|
||||
}
|
||||
|
||||
public void addItem(@NotNull Item item) {
|
||||
myItems.add(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PaletteItem[] getItems() {
|
||||
return myItems.toArray(new PaletteItem[myItems.size()]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTabName() {
|
||||
return myTabName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActionGroup getPopupActionGroup() {
|
||||
return null; // TODO: Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getData(Project project, String dataId) {
|
||||
return null; // TODO: Auto-generated method stub
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleDrop(Project project, PaletteItem item, int index) {
|
||||
// TODO: Auto-generated method stub
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.designer.palette2;
|
||||
package com.intellij.designer.palette;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.designer.palette2;
|
||||
package com.intellij.designer.palette;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
+1
-4
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.designer.palette2;
|
||||
package com.intellij.designer.palette;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
@@ -28,12 +28,9 @@ import java.awt.event.KeyEvent;
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public class PaletteGroupComponent extends JCheckBox {
|
||||
private final PaletteGroup myGroup;
|
||||
private PaletteItemsComponent myItemsComponent;
|
||||
|
||||
public PaletteGroupComponent(PaletteGroup group) {
|
||||
myGroup = group;
|
||||
|
||||
setText(group.getName());
|
||||
setSelected(true);
|
||||
setIcon(AllIcons.Nodes.TreeClosed);
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.designer.palette2;
|
||||
package com.intellij.designer.palette;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
+73
-4
@@ -13,21 +13,29 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.designer.palette2;
|
||||
package com.intellij.designer.palette;
|
||||
|
||||
import com.intellij.ui.ColoredListCellRenderer;
|
||||
import com.intellij.ui.SimpleTextAttributes;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.plaf.basic.BasicListUI;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public class PaletteItemsComponent extends JBList {
|
||||
private final PaletteGroup myGroup;
|
||||
private int myBeforeClickSelectedRow = -1;
|
||||
private boolean myNeedClearSelection;
|
||||
private Integer myTempWidth;
|
||||
|
||||
public PaletteItemsComponent(PaletteGroup group) {
|
||||
myGroup = group;
|
||||
@@ -43,7 +51,8 @@ public class PaletteItemsComponent extends JBList {
|
||||
return myGroup.getItems().get(index);
|
||||
}
|
||||
});
|
||||
setCellRenderer(new ColoredListCellRenderer() {
|
||||
|
||||
ColoredListCellRenderer renderer = new ColoredListCellRenderer() {
|
||||
@Override
|
||||
protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) {
|
||||
clear();
|
||||
@@ -52,16 +61,76 @@ public class PaletteItemsComponent extends JBList {
|
||||
append(item.getTitle(), SimpleTextAttributes.REGULAR_ATTRIBUTES);
|
||||
setToolTipText(item.getTooltip());
|
||||
}
|
||||
});
|
||||
};
|
||||
renderer.getIpad().left = UIUtil.getTreeLeftChildIndent();
|
||||
renderer.getIpad().right = UIUtil.getTreeRightChildIndent();
|
||||
setCellRenderer(renderer);
|
||||
|
||||
setVisibleRowCount(0);
|
||||
setLayoutOrientation(HORIZONTAL_WRAP);
|
||||
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
|
||||
addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
myNeedClearSelection = SwingUtilities.isLeftMouseButton(e) &&
|
||||
myBeforeClickSelectedRow >= 0 &&
|
||||
locationToIndex(e.getPoint()) == myBeforeClickSelectedRow &&
|
||||
!UIUtil.isControlKeyDown(e) && !e.isShiftDown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
if (SwingUtilities.isLeftMouseButton(e) &&
|
||||
myBeforeClickSelectedRow >= 0 &&
|
||||
locationToIndex(e.getPoint()) == myBeforeClickSelectedRow &&
|
||||
!UIUtil.isControlKeyDown(e) && !e.isShiftDown() && myNeedClearSelection) {
|
||||
clearSelection();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
initActions();
|
||||
}
|
||||
|
||||
Integer myTempWidth;
|
||||
@Override
|
||||
public void updateUI() {
|
||||
setUI(new BasicListUI() {
|
||||
MouseListener myListener;
|
||||
|
||||
@Override
|
||||
protected void updateLayoutState() {
|
||||
super.updateLayoutState();
|
||||
|
||||
Insets insets = list.getInsets();
|
||||
int listWidth = list.getWidth() - (insets.left + insets.right);
|
||||
if (listWidth >= cellWidth) {
|
||||
int columnCount = listWidth / cellWidth;
|
||||
cellWidth = (columnCount == 0) ? 1 : listWidth / columnCount;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installListeners() {
|
||||
addMouseListener(myListener = new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
myBeforeClickSelectedRow = list.getSelectedIndex();
|
||||
}
|
||||
});
|
||||
super.installListeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void uninstallListeners() {
|
||||
if (myListener != null) {
|
||||
removeMouseListener(myListener);
|
||||
}
|
||||
super.uninstallListeners();
|
||||
}
|
||||
});
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return (myTempWidth == null) ? super.getWidth() : myTempWidth.intValue();
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* 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.intellij.designer.palette;
|
||||
|
||||
import com.intellij.designer.designSurface.DesignerEditorPanel;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CustomShortcutSet;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public class PalettePanel extends JPanel {
|
||||
private final JPanel myPaletteContainer = new PaletteContainer();
|
||||
private List<PaletteGroupComponent> myGroupComponents = Collections.emptyList();
|
||||
private List<PaletteItemsComponent> myItemsComponents = Collections.emptyList();
|
||||
private List<PaletteGroup> myGroups = Collections.emptyList();
|
||||
private DesignerEditorPanel myDesigner;
|
||||
private final ListSelectionListener mySelectionListener = new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent event) {
|
||||
notifySelection(event);
|
||||
}
|
||||
};
|
||||
|
||||
public PalettePanel() {
|
||||
super(new GridLayout(1, 1));
|
||||
|
||||
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myPaletteContainer);
|
||||
scrollPane.setBorder(null);
|
||||
add(scrollPane);
|
||||
|
||||
new AnAction() {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
clearActiveItem();
|
||||
}
|
||||
}.registerCustomShortcutSet(new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)), scrollPane);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PaletteItem getActiveItem() {
|
||||
for (PaletteGroupComponent groupComponent : myGroupComponents) {
|
||||
if (groupComponent.isSelected()) {
|
||||
PaletteItem paletteItem = (PaletteItem)groupComponent.getItemsComponent().getSelectedValue();
|
||||
if (paletteItem != null) {
|
||||
return paletteItem;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void clearActiveItem() {
|
||||
if (getActiveItem() != null) {
|
||||
for (PaletteItemsComponent itemsComponent : myItemsComponents) {
|
||||
itemsComponent.clearSelection();
|
||||
}
|
||||
notifySelection(null);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return myGroups.isEmpty();
|
||||
}
|
||||
|
||||
public void loadPalette(@Nullable DesignerEditorPanel designer) {
|
||||
for (PaletteItemsComponent itemsComponent : myItemsComponents) {
|
||||
itemsComponent.removeListSelectionListener(mySelectionListener);
|
||||
}
|
||||
|
||||
myDesigner = designer;
|
||||
myPaletteContainer.removeAll();
|
||||
|
||||
if (designer == null) {
|
||||
myGroups = Collections.emptyList();
|
||||
myGroupComponents = Collections.emptyList();
|
||||
myItemsComponents = Collections.emptyList();
|
||||
}
|
||||
else {
|
||||
myGroups = designer.getPaletteGroups();
|
||||
myGroupComponents = new ArrayList<PaletteGroupComponent>();
|
||||
myItemsComponents = new ArrayList<PaletteItemsComponent>();
|
||||
}
|
||||
|
||||
for (PaletteGroup group : myGroups) {
|
||||
PaletteGroupComponent groupComponent = new PaletteGroupComponent(group);
|
||||
PaletteItemsComponent itemsComponent = new PaletteItemsComponent(group);
|
||||
|
||||
groupComponent.setItemsComponent(itemsComponent);
|
||||
myPaletteContainer.add(groupComponent);
|
||||
myPaletteContainer.add(itemsComponent);
|
||||
|
||||
myGroupComponents.add(groupComponent);
|
||||
|
||||
itemsComponent.addListSelectionListener(mySelectionListener);
|
||||
myItemsComponents.add(itemsComponent);
|
||||
}
|
||||
|
||||
myPaletteContainer.revalidate();
|
||||
}
|
||||
|
||||
private void notifySelection(@Nullable ListSelectionEvent event) {
|
||||
if (event != null) {
|
||||
PaletteItemsComponent sourceItemsComponent = (PaletteItemsComponent)event.getSource();
|
||||
for (int i = event.getFirstIndex(); i <= event.getLastIndex(); i++) {
|
||||
if (sourceItemsComponent.isSelectedIndex(i)) {
|
||||
for (PaletteItemsComponent itemsComponent : myItemsComponents) {
|
||||
if (itemsComponent != sourceItemsComponent) {
|
||||
itemsComponent.clearSelection();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (myDesigner != null) {
|
||||
myDesigner.activatePaletteItem(getActiveItem());
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-6
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.designer.palette2;
|
||||
package com.intellij.designer.palette;
|
||||
|
||||
import com.intellij.designer.AbstractToolWindowManager;
|
||||
import com.intellij.designer.designSurface.DesignerEditorPanel;
|
||||
@@ -41,17 +41,13 @@ public class PaletteToolWindowManager extends AbstractToolWindowManager {
|
||||
return project.getComponent(PaletteToolWindowManager.class);
|
||||
}
|
||||
|
||||
public PaletteItem getActiveItem() {
|
||||
return myToolWindowPanel.getActiveItem();
|
||||
}
|
||||
|
||||
public void clearActiveItem() {
|
||||
myToolWindowPanel.clearActiveItem();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initToolWindow() {
|
||||
myToolWindow = ToolWindowManager.getInstance(myProject).registerToolWindow("Palette2", false, ToolWindowAnchor.RIGHT, myProject, true);
|
||||
myToolWindow = ToolWindowManager.getInstance(myProject).registerToolWindow("Palette\t", false, ToolWindowAnchor.RIGHT, myProject, true);
|
||||
myToolWindow.setIcon(AllIcons.Toolwindows.ToolWindowPalette);
|
||||
|
||||
ContentManager contentManager = myToolWindow.getContentManager();
|
||||
-69
@@ -1,69 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2012 JetBrains s.r.o.
|
||||
*
|
||||
* 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.intellij.designer.palette2;
|
||||
|
||||
import com.intellij.designer.designSurface.DesignerEditorPanel;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Alexander Lobas
|
||||
*/
|
||||
public class PalettePanel extends JPanel {
|
||||
private final JPanel myPaletteContainer = new PaletteContainer();
|
||||
private List<PaletteGroup> myGroups = Collections.emptyList();
|
||||
|
||||
public PalettePanel() {
|
||||
super(new GridLayout(1, 1));
|
||||
JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myPaletteContainer);
|
||||
scrollPane.setBorder(null);
|
||||
add(scrollPane);
|
||||
}
|
||||
|
||||
public PaletteItem getActiveItem() {
|
||||
// XXX
|
||||
return null;
|
||||
}
|
||||
|
||||
public void clearActiveItem() {
|
||||
// XXX
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return myGroups.isEmpty();
|
||||
}
|
||||
|
||||
public void loadPalette(@Nullable DesignerEditorPanel designer) {
|
||||
myGroups = designer.getPaletteGroups();
|
||||
myPaletteContainer.removeAll();
|
||||
|
||||
for (PaletteGroup group : myGroups) {
|
||||
PaletteGroupComponent groupComponent = new PaletteGroupComponent(group);
|
||||
PaletteItemsComponent itemsComponent = new PaletteItemsComponent(group);
|
||||
|
||||
groupComponent.setItemsComponent(itemsComponent);
|
||||
myPaletteContainer.add(groupComponent);
|
||||
myPaletteContainer.add(itemsComponent);
|
||||
}
|
||||
|
||||
myPaletteContainer.revalidate();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user