blob: a1f185cfa69c983924410cb44cff08f3cd470d87 [file] [log] [blame]
/*
* Copyright 2000-2009 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.uiDesigner.radComponents;
import com.intellij.openapi.project.Project;
import com.intellij.uiDesigner.XmlWriter;
import com.intellij.uiDesigner.SwingProperties;
import com.intellij.uiDesigner.inspections.FormInspectionUtil;
import com.intellij.uiDesigner.lw.IProperty;
import com.intellij.uiDesigner.designSurface.ComponentDropLocation;
import com.intellij.uiDesigner.designSurface.NoDropLocation;
import com.intellij.uiDesigner.lw.LwContainer;
import com.intellij.uiDesigner.propertyInspector.Property;
import com.intellij.uiDesigner.snapShooter.SnapshotContext;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
/**
* Design-time support for a layout manager.
*
* @author yole
*/
public abstract class RadLayoutManager {
/**
* Returns the name of the layout manager. If null is returned, the layout manager property is not
* shown by the user.
*
* @return the layout manager name.
*/
@Nullable
public abstract String getName();
@Nullable
public LayoutManager createLayout() {
return null;
}
public void readLayout(LwContainer lwContainer, RadContainer radContainer) throws Exception {
}
public void changeContainerLayout(RadContainer container) throws IncorrectOperationException {
ensureChildrenVisible(container);
container.setLayoutManager(this);
}
public abstract void writeChildConstraints(final XmlWriter writer, final RadComponent child);
public void writeLayout(final XmlWriter writer, final RadContainer radContainer) {
}
public void refresh(RadContainer container) {
}
@NotNull
public ComponentDropLocation getDropLocation(RadContainer container, @Nullable final Point location) {
return NoDropLocation.INSTANCE;
}
public abstract void addComponentToContainer(final RadContainer container, final RadComponent component, final int index);
public void removeComponentFromContainer(final RadContainer container, final RadComponent component) {
container.getDelegee().remove(component.getDelegee());
}
public boolean isSwitchedToChild(RadContainer container, RadComponent child) {
return true;
}
public boolean switchContainerToChild(RadContainer container, RadComponent child) {
return false;
}
public Property[] getContainerProperties(final Project project) {
return Property.EMPTY_ARRAY;
}
public Property[] getComponentProperties(final Project project, final RadComponent component) {
return Property.EMPTY_ARRAY;
}
public void addSnapshotComponent(final JComponent parent,
final JComponent child,
final RadContainer container,
final RadComponent component) {
throw new UnsupportedOperationException("Layout manager " + this + " does not support adding snapshot components");
}
public void createSnapshotLayout(final SnapshotContext context,
final JComponent parent,
final RadContainer container,
final LayoutManager layout) {
}
public boolean isIndexed() {
return false;
}
public boolean isGrid() {
return false;
}
public boolean areChildrenExclusive() {
return false;
}
public void setChildDragging(RadComponent child, boolean dragging) {
child.getDelegee().setVisible(!dragging);
}
public boolean canMoveComponent(RadComponent c, int rowDelta, int colDelta, final int rowSpanDelta, final int colSpanDelta) {
return false;
}
public void moveComponent(RadComponent c, int rowDelta, int colDelta, final int rowSpanDelta, final int colSpanDelta) {
}
protected static void ensureChildrenVisible(final RadContainer container) {
if (container.getLayoutManager().areChildrenExclusive()) {
// ensure that components which were hidden by previous layout are visible (IDEADEV-16077)
for (RadComponent child : container.getComponents()) {
final IProperty property = FormInspectionUtil.findProperty(child, SwingProperties.VISIBLE);
if (property == null || property.getPropertyValue(child) == Boolean.TRUE) {
child.getDelegee().setVisible(true);
}
}
}
}
}