This commit is contained in:
Alexander Lobas
2012-06-14 21:08:03 +04:00
parent 72829c458c
commit fb2cc0edd7
19 changed files with 265 additions and 371 deletions
@@ -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>
@@ -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());
}
@@ -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);
}
@@ -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">
@@ -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);
}
@@ -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);
}
@@ -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);
}
}
@@ -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
}
}
@@ -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.*;
@@ -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;
@@ -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);
@@ -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.*;
@@ -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();
@@ -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());
}
}
}
@@ -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();
@@ -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();
}
}