blob: 62385cd5f87f851b18f5d5698868c6ef6e9eab77 [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.UIDesignerBundle;
import com.intellij.uiDesigner.UIFormXmlConstants;
import com.intellij.uiDesigner.XmlWriter;
import com.intellij.uiDesigner.snapShooter.SnapshotContext;
import com.intellij.uiDesigner.designSurface.ComponentDropLocation;
import com.intellij.uiDesigner.propertyInspector.Property;
import com.intellij.uiDesigner.propertyInspector.PropertyEditor;
import com.intellij.uiDesigner.propertyInspector.PropertyRenderer;
import com.intellij.uiDesigner.propertyInspector.editors.IntEnumEditor;
import com.intellij.uiDesigner.propertyInspector.properties.HGapProperty;
import com.intellij.uiDesigner.propertyInspector.properties.VGapProperty;
import com.intellij.uiDesigner.propertyInspector.renderers.IntEnumRenderer;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.LayoutManager;
import java.awt.Point;
/**
* @author yole
*/
public class RadFlowLayoutManager extends RadAbstractIndexedLayoutManager {
private static final MyAlignProperty ALIGN_PROPERTY = new MyAlignProperty();
public String getName() {
return UIFormXmlConstants.LAYOUT_FLOW;
}
public LayoutManager createLayout() {
return new FlowLayout();
}
public void writeLayout(final XmlWriter writer, final RadContainer radContainer) {
FlowLayout layout = (FlowLayout) radContainer.getLayout();
writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_HGAP, layout.getHgap());
writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_VGAP, layout.getVgap());
writer.addAttribute(UIFormXmlConstants.ATTRIBUTE_FLOW_ALIGN, layout.getAlignment());
}
@NotNull @Override
public ComponentDropLocation getDropLocation(RadContainer container, final Point location) {
FlowLayout flowLayout = (FlowLayout) container.getLayout();
return new FlowDropLocation(container, location, flowLayout.getAlignment(),
(flowLayout.getHgap()+1)/2, (flowLayout.getVgap()+1)/2);
}
@Override public Property[] getContainerProperties(final Project project) {
return new Property[] {
ALIGN_PROPERTY,
HGapProperty.getInstance(project),
VGapProperty.getInstance(project) };
}
@Override
public void createSnapshotLayout(final SnapshotContext context,
final JComponent parent,
final RadContainer container,
final LayoutManager layout) {
FlowLayout flowLayout = (FlowLayout) layout;
container.setLayout(new FlowLayout(flowLayout.getAlignment(), flowLayout.getHgap(), flowLayout.getVgap()));
}
private static class MyAlignProperty extends Property<RadContainer, Integer> {
private IntEnumRenderer myRenderer;
private IntEnumEditor myEditor;
private IntEnumEditor.Pair[] myPairs;
public MyAlignProperty() {
super(null, "Alignment");
}
private void initPairs() {
if (myPairs == null) {
myPairs = new IntEnumEditor.Pair[] {
new IntEnumEditor.Pair(FlowLayout.CENTER, UIDesignerBundle.message("property.center")),
new IntEnumEditor.Pair(FlowLayout.LEFT, UIDesignerBundle.message("property.left")),
new IntEnumEditor.Pair(FlowLayout.RIGHT, UIDesignerBundle.message("property.right")),
new IntEnumEditor.Pair(FlowLayout.LEADING, UIDesignerBundle.message("property.leading")),
new IntEnumEditor.Pair(FlowLayout.TRAILING, UIDesignerBundle.message("property.trailing"))
};
}
}
public Integer getValue(final RadContainer component) {
final LayoutManager layout = component.getLayout();
if (!(layout instanceof FlowLayout)) return null;
FlowLayout flowLayout = (FlowLayout)layout;
return flowLayout.getAlignment();
}
protected void setValueImpl(final RadContainer component, final Integer value) throws Exception {
FlowLayout flowLayout = (FlowLayout) component.getLayout();
flowLayout.setAlignment(value.intValue());
}
@NotNull public PropertyRenderer<Integer> getRenderer() {
if (myRenderer == null) {
initPairs();
myRenderer = new IntEnumRenderer(myPairs);
}
return myRenderer;
}
@NotNull public PropertyEditor<Integer> getEditor() {
if (myEditor == null) {
initPairs();
myEditor = new IntEnumEditor(myPairs);
}
return myEditor;
}
@Override public boolean isModified(final RadContainer component) {
final LayoutManager layout = component.getLayout();
if (!(layout instanceof FlowLayout)) return false;
FlowLayout flowLayout = (FlowLayout)layout;
return flowLayout.getAlignment() != FlowLayout.CENTER;
}
}
}