| /* |
| * 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.make; |
| |
| import com.intellij.uiDesigner.compiler.FormLayoutCodeGenerator; |
| import com.intellij.uiDesigner.compiler.Utils; |
| import com.intellij.uiDesigner.compiler.FormLayoutUtils; |
| import com.intellij.uiDesigner.core.GridConstraints; |
| import com.intellij.uiDesigner.lw.LwComponent; |
| import com.intellij.uiDesigner.lw.LwContainer; |
| import com.jgoodies.forms.layout.CellConstraints; |
| import com.jgoodies.forms.layout.FormLayout; |
| import org.jetbrains.annotations.NonNls; |
| |
| import java.awt.Insets; |
| |
| /** |
| * @author yole |
| */ |
| public class FormLayoutSourceGenerator extends LayoutSourceGenerator { |
| private boolean myHaveCc = false; |
| |
| @Override |
| public void generateContainerLayout(final LwContainer component, final FormSourceCodeGenerator generator, final String variable) { |
| FormLayout layout = (FormLayout) component.getLayout(); |
| generator.startMethodCall(variable, "setLayout"); |
| |
| generator.startConstructor(FormLayout.class.getName()); |
| generator.push(FormLayoutUtils.getEncodedColumnSpecs(layout)); |
| generator.push(FormLayoutUtils.getEncodedRowSpecs(layout)); |
| generator.endConstructor(); |
| |
| generator.endMethod(); |
| |
| generateGroups(generator, variable, "setRowGroups", layout.getRowGroups()); |
| generateGroups(generator, variable, "setColumnGroups", layout.getColumnGroups()); |
| } |
| |
| private static void generateGroups(final FormSourceCodeGenerator generator, final String variable, |
| @NonNls final String methodName, final int[][] groups) { |
| if (groups.length == 0) return; |
| generator.startMethodCall("((com.jgoodies.forms.layout.FormLayout) " + variable + ".getLayout())", |
| methodName); |
| |
| @NonNls StringBuilder groupBuilder = new StringBuilder("new int[][] {"); |
| for(int i=0; i<groups.length; i++) { |
| if (i > 0) groupBuilder.append(", "); |
| groupBuilder.append("new int[] { "); |
| for(int j=0; j<groups [i].length; j++) { |
| if (j > 0) groupBuilder.append(", "); |
| groupBuilder.append(groups [i] [j]); |
| } |
| groupBuilder.append(" }"); |
| } |
| groupBuilder.append(" }"); |
| |
| generator.pushVar(groupBuilder.toString()); |
| generator.endMethod(); |
| } |
| |
| public void generateComponentLayout(final LwComponent component, final FormSourceCodeGenerator generator, final String variable, final String parentVariable) { |
| if (!myHaveCc) { |
| generator.append("com.jgoodies.forms.layout.CellConstraints cc = new com.jgoodies.forms.layout.CellConstraints();\n"); |
| myHaveCc = true; |
| } |
| generator.startMethodCall(parentVariable, "add"); |
| generator.pushVar(variable); |
| |
| CellConstraints cc = (CellConstraints) component.getCustomLayoutConstraints(); |
| GridConstraints constraints = component.getConstraints(); |
| final boolean haveInsets = !cc.insets.equals(new Insets(0, 0, 0, 0)); |
| if (haveInsets) { |
| generator.startConstructor(CellConstraints.class.getName()); |
| } |
| else { |
| if (constraints.getColSpan() == 1 && constraints.getRowSpan() == 1) { |
| generator.startMethodCall("cc", "xy"); |
| } |
| else if (constraints.getRowSpan() == 1) { |
| generator.startMethodCall("cc", "xyw"); |
| } |
| else { |
| generator.startMethodCall("cc", "xywh"); |
| } |
| } |
| generator.push(constraints.getColumn()+1); |
| generator.push(constraints.getRow()+1); |
| if (constraints.getColSpan() > 1 || constraints.getRowSpan() > 1 || haveInsets) { |
| generator.push(constraints.getColSpan()); |
| } |
| if (constraints.getRowSpan() > 1 || haveInsets) { |
| generator.push(constraints.getRowSpan()); |
| } |
| |
| if (cc.hAlign != CellConstraints.DEFAULT || cc.vAlign != CellConstraints.DEFAULT || haveInsets) { |
| @NonNls String hAlign = (cc.hAlign == CellConstraints.DEFAULT) |
| ? "DEFAULT" |
| : FormLayoutCodeGenerator.HORZ_ALIGN_FIELDS [Utils.alignFromConstraints(constraints, true)]; |
| @NonNls String vAlign = (cc.vAlign == CellConstraints.DEFAULT) |
| ? "DEFAULT" |
| : FormLayoutCodeGenerator.VERT_ALIGN_FIELDS [Utils.alignFromConstraints(constraints, false)]; |
| generator.pushVar("com.jgoodies.forms.layout.CellConstraints." + hAlign); |
| generator.pushVar("com.jgoodies.forms.layout.CellConstraints." + vAlign); |
| } |
| |
| if (haveInsets) { |
| generator.newInsets(cc.insets); |
| } |
| generator.endMethod(); |
| generator.endMethod(); |
| } |
| } |