From fb2cc0edd72860430a87011fc80991560bfdcc6d Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Thu, 14 Jun 2012 21:08:03 +0400 Subject: [PATCH] Palette --- .../android-designer/src/META-INF/plugin.xml | 2 - .../componentTree/AndroidTreeDecorator.java | 4 +- .../AndroidDesignerEditorPanel.java | 27 +--- .../palette/ViewsPaletteProvider.java | 46 ------ .../ui-designer-new/src/META-INF/plugin.xml | 6 +- .../designSurface/DesignerEditorPanel.java | 46 ++---- .../intellij/designer/model/MetaManager.java | 19 ++- .../intellij/designer/model/MetaModel.java | 8 +- .../palette/AbstractPaletteProvider.java | 61 -------- .../{Item.java => DefaultPaletteItem.java} | 34 +--- .../com/intellij/designer/palette/Group.java | 73 --------- .../PaletteContainer.java | 2 +- .../{palette2 => palette}/PaletteGroup.java | 2 +- .../PaletteGroupComponent.java | 5 +- .../{palette2 => palette}/PaletteItem.java | 2 +- .../PaletteItemsComponent.java | 77 +++++++++- .../designer/palette/PalettePanel.java | 145 ++++++++++++++++++ .../PaletteToolWindowManager.java | 8 +- .../designer/palette2/PalettePanel.java | 69 --------- 19 files changed, 265 insertions(+), 371 deletions(-) delete mode 100644 plugins/android-designer/src/com/intellij/android/designer/palette/ViewsPaletteProvider.java delete mode 100644 plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/AbstractPaletteProvider.java rename plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/{Item.java => DefaultPaletteItem.java} (58%) delete mode 100644 plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/Group.java rename plugins/ui-designer/ui-designer-new/src/com/intellij/designer/{palette2 => palette}/PaletteContainer.java (98%) rename plugins/ui-designer/ui-designer-new/src/com/intellij/designer/{palette2 => palette}/PaletteGroup.java (96%) rename plugins/ui-designer/ui-designer-new/src/com/intellij/designer/{palette2 => palette}/PaletteGroupComponent.java (97%) rename plugins/ui-designer/ui-designer-new/src/com/intellij/designer/{palette2 => palette}/PaletteItem.java (94%) rename plugins/ui-designer/ui-designer-new/src/com/intellij/designer/{palette2 => palette}/PaletteItemsComponent.java (70%) create mode 100644 plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PalettePanel.java rename plugins/ui-designer/ui-designer-new/src/com/intellij/designer/{palette2 => palette}/PaletteToolWindowManager.java (92%) delete mode 100644 plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PalettePanel.java diff --git a/plugins/android-designer/src/META-INF/plugin.xml b/plugins/android-designer/src/META-INF/plugin.xml index 79c31c21e215..17837831aa63 100644 --- a/plugins/android-designer/src/META-INF/plugin.xml +++ b/plugins/android-designer/src/META-INF/plugin.xml @@ -20,8 +20,6 @@ - - diff --git a/plugins/android-designer/src/com/intellij/android/designer/componentTree/AndroidTreeDecorator.java b/plugins/android-designer/src/com/intellij/android/designer/componentTree/AndroidTreeDecorator.java index af6196f8fac0..635579b6909c 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/componentTree/AndroidTreeDecorator.java +++ b/plugins/android-designer/src/com/intellij/android/designer/componentTree/AndroidTreeDecorator.java @@ -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()); } diff --git a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java index 6acfa7bb3cde..20032b5eb9ad 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java +++ b/plugins/android-designer/src/com/intellij/android/designer/designSurface/AndroidDesignerEditorPanel.java @@ -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 myPaletteGroups; - @Override public List getPaletteGroups() { - if (myPaletteGroups == null) { - myPaletteGroups = new ArrayList(); - 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); } diff --git a/plugins/android-designer/src/com/intellij/android/designer/palette/ViewsPaletteProvider.java b/plugins/android-designer/src/com/intellij/android/designer/palette/ViewsPaletteProvider.java deleted file mode 100644 index a2cee8d4ca5a..000000000000 --- a/plugins/android-designer/src/com/intellij/android/designer/palette/ViewsPaletteProvider.java +++ /dev/null @@ -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); - } -} \ No newline at end of file diff --git a/plugins/ui-designer/ui-designer-new/src/META-INF/plugin.xml b/plugins/ui-designer/ui-designer-new/src/META-INF/plugin.xml index 95581745aef9..4c98e602a95f 100644 --- a/plugins/ui-designer/ui-designer-new/src/META-INF/plugin.xml +++ b/plugins/ui-designer/ui-designer-new/src/META-INF/plugin.xml @@ -12,9 +12,9 @@ com.intellij.designer.DesignerToolWindowManager - + + com.intellij.designer.palette.PaletteToolWindowManager + diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java index 963c35edd47d..7102c3e2ceb6 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/designSurface/DesignerEditorPanel.java @@ -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 operations); - public List getPaletteGroups() { - // XXX - return null; - } + public abstract List 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); } diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaManager.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaManager.java index 5a7666d275fc..792e5b0bbc83 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaManager.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaManager.java @@ -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 myTag2Model = new HashMap(); private final Map myTarget2Model = new HashMap(); - private final List myPaletteGroups = new ArrayList(); + private final List myPaletteGroups = new ArrayList(); 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> 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 getPaletteGroups() { + return myPaletteGroups; } public void setPaletteChangeSupport(PropertyChangeSupport paletteChangeSupport) { diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaModel.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaModel.java index 81844aad55ef..15769877d2a2 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaModel.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/model/MetaModel.java @@ -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 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); } diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/AbstractPaletteProvider.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/AbstractPaletteProvider.java deleted file mode 100644 index 53b6dccf6c6f..000000000000 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/AbstractPaletteProvider.java +++ /dev/null @@ -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); - } -} \ No newline at end of file diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/Item.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/DefaultPaletteItem.java similarity index 58% rename from plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/Item.java rename to plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/DefaultPaletteItem.java index f2e65797b783..2c6ee2264ada 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/Item.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/DefaultPaletteItem.java @@ -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; } diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/Group.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/Group.java deleted file mode 100644 index d3b2f46332fa..000000000000 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/Group.java +++ /dev/null @@ -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 myItems = new ArrayList(); - - 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 - } -} \ No newline at end of file diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteContainer.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteContainer.java similarity index 98% rename from plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteContainer.java rename to plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteContainer.java index 27c19709ed79..2468bde9cc51 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteContainer.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteContainer.java @@ -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.*; diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteGroup.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroup.java similarity index 96% rename from plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteGroup.java rename to plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroup.java index 544e841edd6b..cc223095fdc4 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteGroup.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroup.java @@ -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; diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteGroupComponent.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroupComponent.java similarity index 97% rename from plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteGroupComponent.java rename to plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroupComponent.java index 277b982d37d0..634b6006f32b 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteGroupComponent.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteGroupComponent.java @@ -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); diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteItem.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteItem.java similarity index 94% rename from plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteItem.java rename to plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteItem.java index 08c38da4aa81..33f631320074 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteItem.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteItem.java @@ -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.*; diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteItemsComponent.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteItemsComponent.java similarity index 70% rename from plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteItemsComponent.java rename to plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteItemsComponent.java index 1c290a2ff5bf..61bcf90e8ec0 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteItemsComponent.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteItemsComponent.java @@ -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(); diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PalettePanel.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PalettePanel.java new file mode 100644 index 000000000000..7ad81f93cfa8 --- /dev/null +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PalettePanel.java @@ -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 myGroupComponents = Collections.emptyList(); + private List myItemsComponents = Collections.emptyList(); + private List 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(); + myItemsComponents = new ArrayList(); + } + + 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()); + } + } +} \ No newline at end of file diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteToolWindowManager.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteToolWindowManager.java similarity index 92% rename from plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteToolWindowManager.java rename to plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteToolWindowManager.java index 9cbf68e810cc..965cdf8c7318 100644 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PaletteToolWindowManager.java +++ b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette/PaletteToolWindowManager.java @@ -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(); diff --git a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PalettePanel.java b/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PalettePanel.java deleted file mode 100644 index 9b6e12c64436..000000000000 --- a/plugins/ui-designer/ui-designer-new/src/com/intellij/designer/palette2/PalettePanel.java +++ /dev/null @@ -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 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(); - } -} \ No newline at end of file