Make ui designer card and tool providers extendable [fix-34266]

This commit is contained in:
Alexander Lobas
2013-05-06 14:31:25 +04:00
parent 9980be6961
commit ee45ccb1c3
@@ -155,163 +155,20 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
private void createDesignerCard() {
myLayeredPane = new MyLayeredPane();
mySurfaceArea = new ComponentEditableArea(myLayeredPane) {
@Override
protected void fireSelectionChanged() {
super.fireSelectionChanged();
myLayeredPane.revalidate();
myLayeredPane.repaint();
}
mySurfaceArea = createEditableArea();
@Override
public void scrollToSelection() {
List<RadComponent> selection = getSelection();
if (selection.size() == 1) {
Rectangle bounds = selection.get(0).getBounds(myLayeredPane);
if (bounds != null) {
myLayeredPane.scrollRectToVisible(bounds);
}
}
}
@Override
public RadComponent findTarget(int x, int y, @Nullable ComponentTargetFilter filter) {
return DesignerEditorPanel.this.findTarget(x, y, filter);
}
@Override
public InputTool findTargetTool(int x, int y) {
return myDecorationLayer.findTargetTool(x, y);
}
@Override
public void showSelection(boolean value) {
myDecorationLayer.showSelection(value);
}
@Override
public ComponentDecorator getRootSelectionDecorator() {
return DesignerEditorPanel.this.getRootSelectionDecorator();
}
@Nullable
public EditOperation processRootOperation(OperationContext context) {
return DesignerEditorPanel.this.processRootOperation(context);
}
@Override
public FeedbackLayer getFeedbackLayer() {
return myFeedbackLayer;
}
@Override
public RadComponent getRootComponent() {
return myRootComponent;
}
@Override
public ActionGroup getPopupActions() {
return myActionPanel.getPopupActions(this);
}
@Override
public String getPopupPlace() {
return ActionPlaces.GUI_DESIGNER_EDITOR_POPUP;
}
};
myToolProvider = new ToolProvider() {
@Override
public void loadDefaultTool() {
setActiveTool(createDefaultTool());
}
@Override
public void setActiveTool(InputTool tool) {
if (getActiveTool() instanceof CreationTool && !(tool instanceof CreationTool)) {
PaletteToolWindowManager.getInstance(getProject()).clearActiveItem();
}
if (!(tool instanceof SelectionTool)) {
hideInspections();
}
super.setActiveTool(tool);
}
@Override
public boolean execute(final ThrowableRunnable<Exception> operation, String command, final boolean updateProperties) {
final boolean[] is = {true};
CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
public void run() {
is[0] = DesignerEditorPanel.this.execute(operation, updateProperties);
}
}, command, null);
return is[0];
}
@Override
public void executeWithReparse(final ThrowableRunnable<Exception> operation, String command) {
CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
public void run() {
DesignerEditorPanel.this.executeWithReparse(operation);
}
}, command, null);
}
@Override
public void execute(final List<EditOperation> operations, String command) {
CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
public void run() {
DesignerEditorPanel.this.execute(operations);
}
}, command, null);
}
@Override
public void startInplaceEditing(@Nullable InplaceContext inplaceContext) {
myInplaceEditingLayer.startEditing(inplaceContext);
}
@Override
public void hideInspections() {
myQuickFixManager.hideHint();
}
@Override
public void showError(@NonNls String message, Throwable e) {
DesignerEditorPanel.this.showError(message, e);
}
@Override
public boolean isZoomSupported() {
return DesignerEditorPanel.this.isZoomSupported();
}
@Override
public void zoom(@NotNull ZoomType type) {
DesignerEditorPanel.this.zoom(type);
}
@Override
public void setZoom(double zoom) {
DesignerEditorPanel.this.setZoom(zoom);
}
@Override
public double getZoom() {
return DesignerEditorPanel.this.getZoom();
}
};
myToolProvider = createToolProvider();
myGlassLayer = new GlassLayer(myToolProvider, mySurfaceArea);
myLayeredPane.add(myGlassLayer, LAYER_GLASS);
myDecorationLayer = new DecorationLayer(this, mySurfaceArea);
myDecorationLayer = createDecorationLayer();
myLayeredPane.add(myDecorationLayer, LAYER_DECORATION);
myFeedbackLayer = new FeedbackLayer();
myFeedbackLayer = createFeedbackLayer();
myLayeredPane.add(myFeedbackLayer, LAYER_FEEDBACK);
myInplaceEditingLayer = new InplaceEditingLayer(this);
myInplaceEditingLayer = createInplaceEditingLayer();
myLayeredPane.add(myInplaceEditingLayer, LAYER_INPLACE_EDITING);
JPanel content = new JPanel(new GridBagLayout());
@@ -363,6 +220,26 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
});
}
protected EditableArea createEditableArea() {
return new DesignerEditableArea();
}
protected ToolProvider createToolProvider() {
return new DesignerToolProvider();
}
protected DecorationLayer createDecorationLayer() {
return new DecorationLayer(this, mySurfaceArea);
}
protected FeedbackLayer createFeedbackLayer() {
return new FeedbackLayer();
}
protected InplaceEditingLayer createInplaceEditingLayer() {
return new InplaceEditingLayer(this);
}
protected CaptionPanel createCaptionPanel(boolean horizontal) {
return new CaptionPanel(this, horizontal, true);
}
@@ -988,6 +865,157 @@ public abstract class DesignerEditorPanel extends JPanel implements DataProvider
return new Dimension(width, height);
}
protected class DesignerEditableArea extends ComponentEditableArea {
public DesignerEditableArea() {
super(myLayeredPane);
}
@Override
protected void fireSelectionChanged() {
super.fireSelectionChanged();
myLayeredPane.revalidate();
myLayeredPane.repaint();
}
@Override
public void scrollToSelection() {
List<RadComponent> selection = getSelection();
if (selection.size() == 1) {
Rectangle bounds = selection.get(0).getBounds(myLayeredPane);
if (bounds != null) {
myLayeredPane.scrollRectToVisible(bounds);
}
}
}
@Override
public RadComponent findTarget(int x, int y, @Nullable ComponentTargetFilter filter) {
return DesignerEditorPanel.this.findTarget(x, y, filter);
}
@Override
public InputTool findTargetTool(int x, int y) {
return myDecorationLayer.findTargetTool(x, y);
}
@Override
public void showSelection(boolean value) {
myDecorationLayer.showSelection(value);
}
@Override
public ComponentDecorator getRootSelectionDecorator() {
return DesignerEditorPanel.this.getRootSelectionDecorator();
}
@Nullable
public EditOperation processRootOperation(OperationContext context) {
return DesignerEditorPanel.this.processRootOperation(context);
}
@Override
public FeedbackLayer getFeedbackLayer() {
return myFeedbackLayer;
}
@Override
public RadComponent getRootComponent() {
return myRootComponent;
}
@Override
public ActionGroup getPopupActions() {
return myActionPanel.getPopupActions(this);
}
@Override
public String getPopupPlace() {
return ActionPlaces.GUI_DESIGNER_EDITOR_POPUP;
}
}
protected class DesignerToolProvider extends ToolProvider {
@Override
public void loadDefaultTool() {
setActiveTool(createDefaultTool());
}
@Override
public void setActiveTool(InputTool tool) {
if (getActiveTool() instanceof CreationTool && !(tool instanceof CreationTool)) {
PaletteToolWindowManager.getInstance(getProject()).clearActiveItem();
}
if (!(tool instanceof SelectionTool)) {
hideInspections();
}
super.setActiveTool(tool);
}
@Override
public boolean execute(final ThrowableRunnable<Exception> operation, String command, final boolean updateProperties) {
final boolean[] is = {true};
CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
public void run() {
is[0] = DesignerEditorPanel.this.execute(operation, updateProperties);
}
}, command, null);
return is[0];
}
@Override
public void executeWithReparse(final ThrowableRunnable<Exception> operation, String command) {
CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
public void run() {
DesignerEditorPanel.this.executeWithReparse(operation);
}
}, command, null);
}
@Override
public void execute(final List<EditOperation> operations, String command) {
CommandProcessor.getInstance().executeCommand(getProject(), new Runnable() {
public void run() {
DesignerEditorPanel.this.execute(operations);
}
}, command, null);
}
@Override
public void startInplaceEditing(@Nullable InplaceContext inplaceContext) {
myInplaceEditingLayer.startEditing(inplaceContext);
}
@Override
public void hideInspections() {
myQuickFixManager.hideHint();
}
@Override
public void showError(@NonNls String message, Throwable e) {
DesignerEditorPanel.this.showError(message, e);
}
@Override
public boolean isZoomSupported() {
return DesignerEditorPanel.this.isZoomSupported();
}
@Override
public void zoom(@NotNull ZoomType type) {
DesignerEditorPanel.this.zoom(type);
}
@Override
public void setZoom(double zoom) {
DesignerEditorPanel.this.setZoom(zoom);
}
@Override
public double getZoom() {
return DesignerEditorPanel.this.getZoom();
}
}
private final class MyLayeredPane extends JBLayeredPane implements Scrollable {
public void doLayout() {
for (int i = getComponentCount() - 1; i >= 0; i--) {