diff --git a/modeler/cayenne-modeler/pom.xml b/modeler/cayenne-modeler/pom.xml
index b690f264a9..872339a406 100644
--- a/modeler/cayenne-modeler/pom.xml
+++ b/modeler/cayenne-modeler/pom.xml
@@ -71,8 +71,8 @@
forms
- com.jgoodies
- jgoodies-looks
+ com.formdev
+ flatlaf
com.fifesoft
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/FlatLafLayoutStyle.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/FlatLafLayoutStyle.java
new file mode 100644
index 0000000000..0419b17e8a
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/FlatLafLayoutStyle.java
@@ -0,0 +1,114 @@
+package org.apache.cayenne.modeler.platform;
+
+import com.jgoodies.forms.layout.ConstantSize;
+import com.jgoodies.forms.layout.Size;
+import com.jgoodies.forms.layout.Sizes;
+import com.jgoodies.forms.util.LayoutStyle;
+
+public final class FlatLafLayoutStyle extends LayoutStyle {
+
+ public static final FlatLafLayoutStyle INSTANCE = new FlatLafLayoutStyle();
+
+ private FlatLafLayoutStyle() {
+ }
+
+ private static final Size BUTTON_WIDTH = Sizes.dluX(39);
+ private static final Size BUTTON_HEIGHT = Sizes.dluY(14);
+
+ private static final ConstantSize DIALOG_MARGIN_X = Sizes.DLUX9;
+ private static final ConstantSize DIALOG_MARGIN_Y = Sizes.DLUY9;
+
+ private static final ConstantSize TABBED_DIALOG_MARGIN_X = Sizes.DLUX4;
+ private static final ConstantSize TABBED_DIALOG_MARGIN_Y = Sizes.DLUY4;
+
+ private static final ConstantSize LABEL_COMPONENT_PADX = Sizes.DLUX3;
+ private static final ConstantSize RELATED_COMPONENTS_PADX = Sizes.DLUX4;
+ private static final ConstantSize UNRELATED_COMPONENTS_PADX = Sizes.DLUX8;
+
+ private static final ConstantSize RELATED_COMPONENTS_PADY = Sizes.DLUY6;
+ private static final ConstantSize UNRELATED_COMPONENTS_PADY = Sizes.DLUY6;
+ private static final ConstantSize NARROW_LINE_PAD = Sizes.DLUY2;
+ private static final ConstantSize LINE_PAD = Sizes.DLUY6;
+ private static final ConstantSize PARAGRAPH_PAD = Sizes.DLUY9;
+ private static final ConstantSize BUTTON_BAR_PAD = Sizes.DLUY4;
+
+ @Override
+ public Size getDefaultButtonWidth() {
+ return BUTTON_WIDTH;
+ }
+
+ @Override
+ public Size getDefaultButtonHeight() {
+ return BUTTON_HEIGHT;
+ }
+
+ @Override
+ public ConstantSize getDialogMarginX() {
+ return DIALOG_MARGIN_X;
+ }
+
+ @Override
+ public ConstantSize getDialogMarginY() {
+ return DIALOG_MARGIN_Y;
+ }
+
+ @Override
+ public ConstantSize getTabbedDialogMarginX() {
+ return TABBED_DIALOG_MARGIN_X;
+ }
+
+ @Override
+ public ConstantSize getTabbedDialogMarginY() {
+ return TABBED_DIALOG_MARGIN_Y;
+ }
+
+ @Override
+ public ConstantSize getLabelComponentPadX() {
+ return LABEL_COMPONENT_PADX;
+ }
+
+ @Override
+ public ConstantSize getRelatedComponentsPadX() {
+ return RELATED_COMPONENTS_PADX;
+ }
+
+ @Override
+ public ConstantSize getRelatedComponentsPadY() {
+ return RELATED_COMPONENTS_PADY;
+ }
+
+ @Override
+ public ConstantSize getUnrelatedComponentsPadX() {
+ return UNRELATED_COMPONENTS_PADX;
+ }
+
+ @Override
+ public ConstantSize getUnrelatedComponentsPadY() {
+ return UNRELATED_COMPONENTS_PADY;
+ }
+
+ @Override
+ public ConstantSize getNarrowLinePad() {
+ return NARROW_LINE_PAD;
+ }
+
+ @Override
+ public ConstantSize getLinePad() {
+ return LINE_PAD;
+ }
+
+ @Override
+ public ConstantSize getParagraphPad() {
+ return PARAGRAPH_PAD;
+ }
+
+ @Override
+ public ConstantSize getButtonBarPad() {
+ return BUTTON_BAR_PAD;
+ }
+
+ @Override
+ public boolean isLeftToRightButtonOrder() {
+ return false;
+ }
+}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/UIInitializer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/UIInitializer.java
index dcfabd949f..716522613b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/UIInitializer.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/UIInitializer.java
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.modeler.platform;
+import com.jgoodies.forms.util.LayoutStyle;
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooserFactory;
import org.apache.cayenne.modeler.toolkit.filechooser.SwingFileChooser;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericButtonUI.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericButtonUI.java
deleted file mode 100644
index f748fd7267..0000000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericButtonUI.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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
- *
- * https://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 org.apache.cayenne.modeler.platform.generic;
-
-import com.jgoodies.looks.plastic.PlasticButtonUI;
-import org.apache.cayenne.modeler.toolkit.AppAction;
-
-import javax.swing.*;
-import javax.swing.border.Border;
-import javax.swing.plaf.ComponentUI;
-import java.awt.*;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-public class GenericButtonUI extends PlasticButtonUI {
-
- private static final GenericButtonUI INSTANCE = new GenericButtonUI();
-
- private static final Border BORDER = BorderFactory.createCompoundBorder(
- BorderFactory.createEmptyBorder(1, 1, 1, 1),
- BorderFactory.createCompoundBorder(
- BorderFactory.createLineBorder(Color.GRAY),
- BorderFactory.createEmptyBorder(4, 4, 4, 4)
- )
- );
-
- private static final Border DISABLED_BORDER = BorderFactory.createCompoundBorder(
- BorderFactory.createEmptyBorder(1, 1, 1, 1),
- BorderFactory.createCompoundBorder(
- BorderFactory.createLineBorder(Color.LIGHT_GRAY),
- BorderFactory.createEmptyBorder(4, 4, 4, 4)
- )
- );
-
- private static final Border ACTIVE_BORDER = BorderFactory.createCompoundBorder(
- BorderFactory.createEmptyBorder(1, 1, 1, 1),
- BorderFactory.createCompoundBorder(
- BorderFactory.createLineBorder(new Color(0x333333)),
- BorderFactory.createEmptyBorder(4, 4, 4, 4)
- )
- );
-
- public GenericButtonUI() {
- }
-
- public static ComponentUI createUI(JComponent b) {
- return INSTANCE;
- }
-
- @Override
- public void installDefaults(final AbstractButton b) {
- super.installDefaults(b);
- b.putClientProperty("Plastic.is3D", Boolean.FALSE);
- if(b instanceof AppAction.CayenneToolbarButton) {
- b.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseEntered(MouseEvent e) {
- b.getModel().setArmed(true);
- }
- @Override
- public void mouseExited(MouseEvent e) {
- b.getModel().setArmed(false);
- }
- });
- }
- }
-
- @Override
- public void update(Graphics g, JComponent c) {
- if(c instanceof AppAction.CayenneToolbarButton) {
- AbstractButton b = (AbstractButton)c;
- if(!b.isEnabled()) {
- b.setBorder(DISABLED_BORDER);
- } else if(b.getModel().isArmed()) {
- b.setBorder(ACTIVE_BORDER);
- } else {
- b.setBorder(BORDER);
- }
- }
- super.update(g, c);
- }
-
- @Override
- protected void paintButtonPressed(Graphics g, AbstractButton b){
- if ( b.isContentAreaFilled() ) {
- Dimension size = b.getSize();
- g.setColor(getSelectColor());
- if(b instanceof AppAction.CayenneToolbarButton) {
- // don't paint outer border area
- g.fillRect(1, 1, size.width - 2, size.height - 2);
- } else {
- g.fillRect(0, 0, size.width, size.height);
- }
- }
- }
-}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericUIInitializer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericUIInitializer.java
index 5552f05f27..0e9b8caf04 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericUIInitializer.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericUIInitializer.java
@@ -18,81 +18,52 @@
****************************************************************/
package org.apache.cayenne.modeler.platform.generic;
-import com.jgoodies.looks.plastic.PlasticLookAndFeel;
-import com.jgoodies.looks.plastic.PlasticTheme;
-import com.jgoodies.looks.plastic.PlasticXPLookAndFeel;
+import com.formdev.flatlaf.FlatLightLaf;
+import com.jgoodies.forms.util.LayoutStyle;
+import org.apache.cayenne.modeler.platform.FlatLafLayoutStyle;
import org.apache.cayenne.modeler.platform.UIInitializer;
import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.*;
public class GenericUIInitializer implements UIInitializer {
- private static final Logger LOGGER = LoggerFactory.getLogger(GenericUIInitializer.class);
-
- private static final String DEFAULT_LAF_NAME = PlasticXPLookAndFeel.class.getName();
-
- // note that another theme - "Desert Blue" doesn't support Chinese and Japanese chars
- private static final String DEFAULT_THEME_NAME = "Sky Bluer";
-
@Override
public void beforeSwingLaunch() {
-
- PlasticTheme theme = findTheme();
-
- if (theme != null) {
- PlasticLookAndFeel.setCurrentTheme(theme);
- }
-
- try {
- UIManager.setLookAndFeel(DEFAULT_LAF_NAME);
- // override some default styles and colors
- overrideUIDefaults();
- } catch (Exception e) {
- LOGGER.warn("Error installing L&F: {}", DEFAULT_LAF_NAME, e);
- }
+ FlatLightLaf.setup();
+ LayoutStyle.setCurrent(FlatLafLayoutStyle.INSTANCE);
+ // override some default styles and colors
+ overrideUIDefaults();
}
private void overrideUIDefaults() {
Color greyHighlight = new Color(0xCBCBCB);
- UIManager.put("ButtonUI", GenericButtonUI.class.getName());
- UIManager.put("HiResGrayFilterEnabled", Boolean.TRUE);
- UIManager.put("Tree.expandedIcon", IconFactory.buildIcon("icon-arrow-open.png"));
- UIManager.put("Tree.collapsedIcon", IconFactory.buildIcon("icon-arrow-closed.png"));
- UIManager.put("Tree.paintLines", Boolean.FALSE);
- UIManager.put("Tree.selectionForeground", Color.BLACK);
- UIManager.put("Tree.selectionBackground", greyHighlight);
- UIManager.put("Tree.selectionBorderColor", UIManager.get("Tree.selectionBackground"));
- UIManager.put("Table.selectionForeground", Color.BLACK);
- UIManager.put("Table.selectionBackground", greyHighlight);
+ UIManager.put("Tree.expandedIcon", IconFactory.buildIcon("icon-arrow-open.png"));
+ UIManager.put("Tree.collapsedIcon", IconFactory.buildIcon("icon-arrow-closed.png"));
+ UIManager.put("Tree.paintLines", Boolean.FALSE);
+ UIManager.put("Tree.selectionForeground", Color.BLACK);
+ UIManager.put("Tree.selectionBackground", greyHighlight);
+ UIManager.put("Tree.selectionBorderColor", UIManager.get("Tree.selectionBackground"));
+ UIManager.put("Table.selectionForeground", Color.BLACK);
+ UIManager.put("Table.selectionBackground", greyHighlight);
UIManager.put("Table.focusCellHighlightBorder", BorderFactory.createEmptyBorder());
- UIManager.put("ScrollPane.border", BorderFactory.createEmptyBorder());
- UIManager.put("Table.scrollPaneBorder", BorderFactory.createEmptyBorder());
- UIManager.put("SplitPane.border", BorderFactory.createEmptyBorder());
- UIManager.put("ToolBar.border", BorderFactory.createEmptyBorder(1, 1, 1, 1));
- UIManager.put("CheckBoxHeader.border", BorderFactory.createEmptyBorder(0, 15, 0, 0));
- UIManager.put("MenuItem.selectionBackground", greyHighlight);
- UIManager.put("CheckBoxMenuItem.selectionBackground", greyHighlight);
+ UIManager.put("ScrollPane.border", BorderFactory.createEmptyBorder());
+ UIManager.put("Table.scrollPaneBorder", BorderFactory.createEmptyBorder());
+ UIManager.put("SplitPane.border", BorderFactory.createEmptyBorder());
+ UIManager.put("ToolBar.border", BorderFactory.createEmptyBorder(1, 1, 1, 1));
+ UIManager.put("CheckBoxHeader.border", BorderFactory.createEmptyBorder(0, 15, 0, 0));
+ UIManager.put("MenuItem.selectionBackground", greyHighlight);
+ UIManager.put("CheckBoxMenuItem.selectionBackground", greyHighlight);
UIManager.put("RadioButtonMenuItem.selectionBackground", greyHighlight);
- UIManager.put("MenuItem.selectionForeground", Color.BLACK);
- UIManager.put("CheckBoxMenuItem.selectionForeground", Color.BLACK);
+ UIManager.put("MenuItem.selectionForeground", Color.BLACK);
+ UIManager.put("CheckBoxMenuItem.selectionForeground", Color.BLACK);
UIManager.put("RadioButtonMenuItem.selectionForeground", Color.BLACK);
+ UIManager.put("ToolBar.buttonMargin", new Insets(4, 8, 4, 8));
+ UIManager.put("Table.showHorizontalLines", Boolean.TRUE);
+ UIManager.put("Table.showVerticalLines", Boolean.TRUE);
// this one is custom for MainToolBar
- UIManager.put("MainToolBar.border", BorderFactory.createLineBorder(Color.GRAY));
- }
-
- private PlasticTheme findTheme() {
-
- for (Object object : PlasticLookAndFeel.getInstalledThemes()) {
- PlasticTheme theme = (PlasticTheme) object;
- if (DEFAULT_THEME_NAME.equals(theme.getName())) {
- return theme;
- }
- }
- return null;
+ UIManager.put("MainToolBar.border", BorderFactory.createLineBorder(Color.GRAY));
}
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacPanelUI.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacPanelUI.java
index 80b9dacc63..e5ef62fe24 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacPanelUI.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacPanelUI.java
@@ -19,8 +19,6 @@
package org.apache.cayenne.modeler.platform.mac;
-import org.apache.cayenne.modeler.ui.SearchPanel;
-
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicPanelUI;
@@ -59,11 +57,7 @@ public static ComponentUI createUI(JComponent c) {
@Override
protected void installDefaults(JPanel p) {
super.installDefaults(p);
- if (p instanceof SearchPanel) {
- SwingUtilities.invokeLater(((SearchPanel) p)::hideSearchLabel);
- } else {
- p.setBackground(BACKGROUND);
- }
+ p.setBackground(BACKGROUND);
}
@Override
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacToolBarSeparatorUI.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacToolBarSeparatorUI.java
deleted file mode 100644
index 57ef304f60..0000000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacToolBarSeparatorUI.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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
- *
- * https://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 org.apache.cayenne.modeler.platform.mac;
-
-import javax.swing.*;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.basic.BasicToolBarSeparatorUI;
-import java.awt.*;
-
-/**
- * Provides correct size as in AquaToolBarSeparatorUI, but doesn't render anything.
- *
- * @since 4.0
- */
-public class MacToolBarSeparatorUI extends BasicToolBarSeparatorUI {
-
- private MacToolBarSeparatorUI() {
- }
-
- public static ComponentUI createUI(JComponent c) {
- return new MacToolBarSeparatorUI();
- }
-
- public void paint( Graphics g, JComponent c ) {
- // do nothing as we don't need it to be visible
- }
-
- public Dimension getMinimumSize(JComponent var1) {
- JToolBar.Separator var2 = (JToolBar.Separator)var1;
- return var2.getOrientation() == SwingConstants.HORIZONTAL
- ? new Dimension(1, 11) : new Dimension(11, 1);
- }
-
- public Dimension getPreferredSize(JComponent var1) {
- JToolBar.Separator var2 = (JToolBar.Separator)var1;
- return var2.getOrientation() == SwingConstants.HORIZONTAL
- ? new Dimension(1, 11) : new Dimension(11, 1);
- }
-
- public Dimension getMaximumSize(JComponent var1) {
- JToolBar.Separator var2 = (JToolBar.Separator)var1;
- return var2.getOrientation() == SwingConstants.HORIZONTAL
- ? new Dimension(2147483647, 11) : new Dimension(11, 2147483647);
- }
-}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacUIInitializer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacUIInitializer.java
index 47dcb26310..21c32fe149 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacUIInitializer.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacUIInitializer.java
@@ -18,7 +18,10 @@
****************************************************************/
package org.apache.cayenne.modeler.platform.mac;
+import com.formdev.flatlaf.FlatLightLaf;
+import com.jgoodies.forms.util.LayoutStyle;
import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.platform.FlatLafLayoutStyle;
import org.apache.cayenne.modeler.service.action.GlobalActions;
import org.apache.cayenne.modeler.platform.UIInitializer;
import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooserFactory;
@@ -37,21 +40,24 @@ public class MacUIInitializer implements UIInitializer {
@Override
public void beforeSwingLaunch() {
- // must be set before Aqua L&F initializes — it reads this property during init
+ FlatLightLaf.setup();
+ LayoutStyle.setCurrent(FlatLafLayoutStyle.INSTANCE);
+
+ // must be set before the L&F initializes — it reads this property during init
System.setProperty("apple.awt.application.name", "CayenneModeler");
- // override some default styles and colors, assuming that Aqua theme will be used
+ // override some default styles and colors for the mac-specific UI
Color lightGrey = new Color(0xEEEEEE);
Color darkGrey = new Color(225, 225, 225);
Border darkBorder = BorderFactory.createLineBorder(darkGrey);
- UIManager.put("ToolBarSeparatorUI", MacToolBarSeparatorUI.class.getName());
UIManager.put("PanelUI", MacPanelUI.class.getName());
// next two is custom-made for Cayenne's MainToolBar
UIManager.put("ToolBar.background", lightGrey);
UIManager.put("MainToolBar.background", lightGrey);
UIManager.put("MainToolBar.border", BorderFactory.createEmptyBorder(0, 7, 0, 7));
UIManager.put("ToolBar.border", darkBorder);
+ UIManager.put("ToolBar.buttonMargin", new Insets(4, 8, 4, 8));
UIManager.put("ScrollPane.border", darkBorder);
UIManager.put("Table.scrollPaneBorder", darkBorder);
UIManager.put("SplitPane.border", BorderFactory.createEmptyBorder());
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinCustomTextFieldUI.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinCustomTextFieldUI.java
deleted file mode 100644
index 45055a72b0..0000000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinCustomTextFieldUI.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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
- *
- * https://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 org.apache.cayenne.modeler.platform.win;
-
-import org.apache.cayenne.modeler.toolkit.combobox.EditorTextField;
-
-import javax.swing.*;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.plaf.basic.BasicTextFieldUI;
-import java.lang.reflect.Constructor;
-
-public class WinCustomTextFieldUI extends BasicTextFieldUI {
-
- private static Constructor extends ComponentUI> winFieldUIConstructor;
-
- static {
- try {
- @SuppressWarnings("unchecked")
- Class extends ComponentUI> winFieldUIClass = (Class extends ComponentUI>)Class
- .forName("com.jgoodies.looks.windows.WindowsTextFieldUI");
- winFieldUIConstructor = winFieldUIClass.getDeclaredConstructor();
- } catch (ClassNotFoundException | NoSuchMethodException ex) {
- winFieldUIConstructor = null;
- }
- }
-
- public WinCustomTextFieldUI() {
- }
-
- public static ComponentUI createUI(JComponent c) {
- if(c instanceof EditorTextField) {
- c.putClientProperty("TextField.fullSizeBackground", Boolean.TRUE);
- }
- if(winFieldUIConstructor == null) {
- return new BasicTextFieldUI();
- }
- try {
- return winFieldUIConstructor.newInstance();
- } catch (Exception ex) {
- return new BasicTextFieldUI();
- }
- }
-
-}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinUIInitializer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinUIInitializer.java
index a6abed501d..870cd6aa25 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinUIInitializer.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinUIInitializer.java
@@ -18,34 +18,28 @@
****************************************************************/
package org.apache.cayenne.modeler.platform.win;
-import com.jgoodies.looks.windows.WindowsLookAndFeel;
+import com.formdev.flatlaf.FlatLightLaf;
+import com.jgoodies.forms.util.LayoutStyle;
+import org.apache.cayenne.modeler.platform.FlatLafLayoutStyle;
import org.apache.cayenne.modeler.platform.UIInitializer;
import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.*;
public class WinUIInitializer implements UIInitializer {
- private static final Logger LOGGER = LoggerFactory.getLogger(WinUIInitializer.class);
-
@Override
public void beforeSwingLaunch() {
- try {
- UIManager.setLookAndFeel(WindowsLookAndFeel.class.getName());
- // override some default styles and colors
- overrideUIDefaults();
- } catch (Exception e) {
- LOGGER.warn("Error installing L&F: {}", WindowsLookAndFeel.class.getName(), e);
- }
+ FlatLightLaf.setup();
+ LayoutStyle.setCurrent(FlatLafLayoutStyle.INSTANCE);
+ // override some default styles and colors
+ overrideUIDefaults();
}
private void overrideUIDefaults() {
Color darkGrey = new Color(203, 203, 203);
- UIManager.put("TextFieldUI", WinCustomTextFieldUI.class.getName());
UIManager.put("Tree.expandedIcon", IconFactory.buildIcon("icon-arrow-open.png"));
UIManager.put("Tree.collapsedIcon", IconFactory.buildIcon("icon-arrow-closed.png"));
UIManager.put("Tree.paintLines", Boolean.FALSE);
@@ -70,10 +64,8 @@ private void overrideUIDefaults() {
UIManager.put("MenuItem.selectionForeground", Color.BLACK);
UIManager.put("CheckBoxMenuItem.selectionForeground", Color.BLACK);
UIManager.put("RadioButtonMenuItem.selectionForeground", Color.BLACK);
- UIManager.put("MenuItem.opaque", Boolean.TRUE);
- UIManager.put("CheckBoxMenuItem.opaque", Boolean.TRUE);
- UIManager.put("RadioButtonMenuItem.opaque", Boolean.TRUE);
- UIManager.put("Button.border", BorderFactory.createEmptyBorder());
- UIManager.put("ToolBar.buttonMargin", new Insets(4, 4, 4, 4));
+ UIManager.put("ToolBar.buttonMargin", new Insets(4, 8, 4, 8));
+ UIManager.put("Table.showHorizontalLines", Boolean.TRUE);
+ UIManager.put("Table.showVerticalLines", Boolean.TRUE);
}
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/CgenOps.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/CgenOps.java
index 44462f68cd..d3faa51d2f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/CgenOps.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/project/CgenOps.java
@@ -19,7 +19,10 @@
package org.apache.cayenne.modeler.project;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.internal.Utils;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.pref.adapters.GeneralPrefs;
import org.apache.cayenne.project.Project;
import org.apache.cayenne.resource.Resource;
@@ -27,9 +30,20 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.prefs.Preferences;
public class CgenOps {
+ public static CgenConfiguration createDefaultCgenConfiguration(DataMap map, ProjectSession session) {
+ Path basePath = map.getLocation() != null ? CgenOps.baseDir(session) : null;
+ CgenConfiguration configuration = CgenConfiguration.createDefault(map, basePath);
+ configuration.setForce(true);
+
+ Preferences preferences = session.app().getPrefsLocator().appNode(GeneralPrefs.NODE);
+ configuration.setEncoding(new GeneralPrefs(preferences).getEncoding());
+ return configuration;
+ }
+
public static Path baseDir(ProjectSession session) {
Path projectRoot = projectRoot(session);
if (projectRoot == null) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java
index 2b52e05237..ae254605c2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java
@@ -232,7 +232,7 @@ private void initView(int position) {
if (margin != null) {
setMargin(margin);
}
- putClientProperty("JButton.buttonType", "segmentedTextured");
+ putClientProperty("JButton.buttonType", "toolBarButton");
putClientProperty("JButton.segmentPosition", POSITIONS[position]);
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/buttons/CMButtonPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/buttons/CMButtonPanel.java
index 046f3091b3..a7e3631bb6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/buttons/CMButtonPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/buttons/CMButtonPanel.java
@@ -19,13 +19,18 @@
package org.apache.cayenne.modeler.toolkit.buttons;
+import com.jgoodies.forms.util.LayoutStyle;
+
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.FlowLayout;
+import java.util.Collections;
+import java.util.Arrays;
/**
* A panel that lays out a row of right-aligned buttons, typically used at the bottom of a dialog.
+ * Button order respects {@link LayoutStyle#isLeftToRightButtonOrder()}.
*/
public class CMButtonPanel extends JPanel {
@@ -33,7 +38,11 @@ public CMButtonPanel(JButton... buttons) {
setBorder(BorderFactory.createEmptyBorder(3, 20, 3, 7));
setLayout(new FlowLayout(FlowLayout.RIGHT));
- for (JButton button : buttons) {
+ java.util.List buttonList = Arrays.asList(buttons);
+ if (LayoutStyle.getCurrent() != null && !LayoutStyle.getCurrent().isLeftToRightButtonOrder()) {
+ Collections.reverse(buttonList);
+ }
+ for (JButton button : buttonList) {
add(button);
}
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/tree/CheckBoxTree.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/tree/CheckBoxTree.java
index be13880057..126a1d453f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/tree/CheckBoxTree.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/tree/CheckBoxTree.java
@@ -79,6 +79,10 @@ protected int getRowX(int row, int depth) {
checkBoxTree.setCellRenderer(new CheckBoxTreeCellRenderer());
checkBoxTree.setCellEditor(new CheckBoxTreeCellEditor(checkBoxTree));
+ int rowHeight = Math.max(new JCheckBox().getPreferredSize().height, new JLabel().getPreferredSize().height);
+ labelTree.setRowHeight(rowHeight);
+ checkBoxTree.setRowHeight(rowHeight);
+
setLayout(new BorderLayout());
add(labelTree, BorderLayout.CENTER);
add(checkBoxTree, BorderLayout.EAST);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainToolBar.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainToolBar.java
index a720767686..609b3a72a3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainToolBar.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainToolBar.java
@@ -107,6 +107,7 @@ private void initLayout() {
add(actions.getAction(CreateEmbeddableAction.class).buildButton(2));
add(actions.getAction(CreateQueryAction.class).buildButton(3));
+ add(Box.createHorizontalGlue());
add(new SearchPanel(app));
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/SearchPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/SearchPanel.java
index 0ed0ab3482..93c4be720f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/SearchPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/SearchPanel.java
@@ -21,6 +21,7 @@
import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.toolkit.AppPanel;
+import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
import org.apache.cayenne.modeler.ui.action.FindAction;
import javax.swing.*;
@@ -30,15 +31,11 @@
public class SearchPanel extends AppPanel {
- private final JLabel searchLabel;
- private final JPanel box;
private final JTextField findField;
public SearchPanel(Application app) {
super(app);
- this.searchLabel = new JLabel("Search: ");
- this.box = new JPanel();
this.findField = new JTextField(10);
initLayout();
@@ -46,17 +43,16 @@ public SearchPanel(Application app) {
}
private void initLayout() {
- setLayout(new BorderLayout());
-
- findField.putClientProperty("JTextField.variant", "search");
- findField.setMaximumSize(new Dimension(100, 22));
- findField.setPreferredSize(new Dimension(100, 22));
- searchLabel.setLabelFor(findField);
- // is used to place label and text field one after another
- box.setLayout(new BoxLayout(box, BoxLayout.X_AXIS));
- box.add(searchLabel);
- box.add(findField);
- add(box, BorderLayout.EAST);
+ setLayout(new FlowLayout());
+
+ findField.putClientProperty("JTextField.leadingIcon", IconFactory.buildIcon("icon-query.png"));
+ findField.setPreferredSize(new Dimension(150, 22));
+ add(findField);
+ }
+
+ @Override
+ public Dimension getMaximumSize() {
+ return getPreferredSize();
}
private void initBindings() {
@@ -85,12 +81,4 @@ public void keyTyped(KeyEvent e) {
}, AWTEvent.KEY_EVENT_MASK);
}
- public void hideSearchLabel() {
- searchLabel.setVisible(false);
- findField.setMaximumSize(null);
- findField.setPreferredSize(new Dimension(100, 40));
- findField.setToolTipText("Search");
- box.setOpaque(false);
- box.setBackground(null);
- }
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/datasource/DataSourceDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/datasource/DataSourceDialog.java
index 9386a18ef6..efbdcbcbd3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/datasource/DataSourceDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/datasource/DataSourceDialog.java
@@ -30,6 +30,7 @@
import org.apache.cayenne.modeler.pref.adapters.GeneralPrefs;
import org.apache.cayenne.modeler.service.classloader.ModelerClassLoader;
import org.apache.cayenne.modeler.toolkit.ProjectDialog;
+import org.apache.cayenne.modeler.toolkit.buttons.CMButtonPanel;
import org.apache.cayenne.modeler.ui.preferences.PreferenceDialog;
import org.apache.cayenne.modeler.ui.preferences.dbconnector.DBConnectorEditor;
import org.apache.cayenne.modeler.project.ProjectSession;
@@ -41,7 +42,6 @@
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.BorderLayout;
-import java.awt.FlowLayout;
import java.awt.Window;
import java.sql.Connection;
import java.sql.SQLException;
@@ -116,21 +116,17 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(new FormLayout(
- "20dlu:grow, pref, 3dlu, fill:max(150dlu;pref), 3dlu, fill:20dlu",
+ "20dlu:grow, pref, $lcgap, fill:max(150dlu;pref), $lcgap, fill:20dlu",
"p"));
builder.setDefaultDialogBorder();
builder.addLabel("Saved DataSources:", cc.xy(2, 1));
builder.add(dataSources, cc.xy(4, 1));
builder.add(configButton, cc.xy(6, 1));
- JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
- buttons.add(cancelButton);
- buttons.add(okButton);
-
getContentPane().setLayout(new BorderLayout());
getContentPane().add(builder.getPanel(), BorderLayout.NORTH);
getContentPane().add(editor, BorderLayout.CENTER);
- getContentPane().add(buttons, BorderLayout.SOUTH);
+ getContentPane().add(new CMButtonPanel(cancelButton, okButton), BorderLayout.SOUTH);
}
private void initBindings() {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbactionoptions/DbActionOptionsDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbactionoptions/DbActionOptionsDialog.java
index 51e2573bb3..1ba0e6b960 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbactionoptions/DbActionOptionsDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbactionoptions/DbActionOptionsDialog.java
@@ -68,7 +68,7 @@ protected void init() {
getRootPane().setDefaultButton(selectButton);
FormLayout layout = new FormLayout(
- "right:pref, 3dlu, fill:max(170dlu;pref):grow",
+ "right:pref, $lcgap, fill:max(170dlu;pref):grow",
"");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorOptionsDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorOptionsDialog.java
index 5ef71547e1..c324a065f4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorOptionsDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/DBGeneratorOptionsDialog.java
@@ -173,7 +173,7 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(new FormLayout(
"fill:min(50dlu;pref):grow",
- "p, 3dlu, p, 9dlu, p, 3dlu, p, 3dlu, p, 3dlu, fill:40dlu:grow"));
+ "p, $rgap, p, $pgap, p, $rgap, p, $rgap, p, $rgap, fill:40dlu:grow"));
builder.addSeparator("Options", cc.xywh(1, 1, 1, 1));
builder.add(optionsPane, cc.xy(1, 3, "left,fill"));
builder.addSeparator("Adapter", cc.xywh(1, 5, 1, 1));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/TableSelectorPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/TableSelectorPanel.java
index b61c3ba942..85a6c23297 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/TableSelectorPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbgen/TableSelectorPanel.java
@@ -188,7 +188,7 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(new FormLayout(
"fill:min(50dlu;pref):grow",
- "p, 3dlu, fill:40dlu:grow"));
+ "p, $rgap, fill:40dlu:grow"));
builder.setDefaultDialogBorder();
builder.addSeparator("Select Tables", cc.xy(1, 1));
builder.add(new JScrollPane(table,
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
index 03ca46d786..8538f1d7ae 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerOptionsDialog.java
@@ -149,7 +149,7 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(new FormLayout(
"fill:min(50dlu;pref):grow",
- "p, 9dlu, p, 3dlu, fill:40dlu:grow"));
+ "p, $pgap, p, $rgap, fill:40dlu:grow"));
builder.addSeparator("Generated SQL", cc.xywh(1, 3, 1, 1));
builder.add(sqlTextPanel, cc.xy(1, 5));
builder.setBorder(Borders.DIALOG_BORDER);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerTokenSelector.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerTokenSelector.java
index bbedafe6b6..8f785282dc 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerTokenSelector.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbmerge/MergerTokenSelector.java
@@ -196,7 +196,7 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(new FormLayout(
"fill:min(50dlu;pref):grow",
- "p, 3dlu, fill:40dlu:grow"));
+ "p, $rgap, fill:40dlu:grow"));
builder.setDefaultDialogBorder();
builder.addSeparator("Select Operations", cc.xy(1, 1));
builder.add(new JScrollPane(
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
index 9e5b29f942..5356cce449 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/dbrelationship/DbRelationshipDialog.java
@@ -147,9 +147,9 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(
new FormLayout(
- "right:max(50dlu;pref), 3dlu, fill:min(150dlu;pref), 3dlu, fill:min(50dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, " +
- "p, 3dlu, p, 9dlu, p, 3dlu, top:14dlu, 3dlu, top:p:grow"));
+ "right:max(50dlu;pref), $lcgap, fill:min(150dlu;pref), $lcgap, fill:min(50dlu;pref)",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, " +
+ "p, $rgap, p, $pgap, p, $rgap, top:14dlu, $rgap, top:p:grow"));
builder.setDefaultDialogBorder();
builder.addSeparator("Create dbRelationship", cc.xywh(1, 1, 5, 1));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/entitysync/EntitySyncDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/entitysync/EntitySyncDialog.java
index 7df14e5559..b91690a517 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/entitysync/EntitySyncDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/entitysync/EntitySyncDialog.java
@@ -134,7 +134,7 @@ private Collection objEntities() {
private void initLayout() {
getRootPane().setDefaultButton(updateButton);
- FormLayout layout = new FormLayout("pref, 3dlu, pref", "p, 3dlu");
+ FormLayout layout = new FormLayout("pref, $lcgap, pref", "p, $rgap");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/ClasspathPrefsPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/ClasspathPrefsPanel.java
index df55e66d69..d3cefa65c7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/ClasspathPrefsPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/ClasspathPrefsPanel.java
@@ -113,14 +113,14 @@ private void initLayout() {
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setBorder(BorderFactory.createEmptyBorder());
- JPanel content = new JPanel(new BorderLayout());
+ JPanel content = new JPanel(new BorderLayout(10, 0));
content.add(scrollPane, BorderLayout.CENTER);
content.add(sidebar.getPanel(), BorderLayout.EAST);
CellConstraints cc = new CellConstraints();
PanelBuilder outer = new PanelBuilder(new FormLayout(
"fill:default:grow",
- "p, 3dlu, fill:default:grow"));
+ "p, $rgap, fill:default:grow"));
outer.setDefaultDialogBorder();
outer.addSeparator("Extra Classpath", cc.xy(1, 1));
outer.add(content, cc.xy(1, 3));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/maven/MavenDependencyDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/maven/MavenDependencyDialog.java
index be3784f970..17700328fc 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/maven/MavenDependencyDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/classpath/maven/MavenDependencyDialog.java
@@ -83,8 +83,8 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(new FormLayout(
- "right:max(50dlu;pref), 3dlu, fill:min(100dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu"));
+ "right:max(50dlu;pref), $lcgap, fill:min(100dlu;pref)",
+ "p, $rgap, p, $rgap, p, $rgap"));
builder.setDefaultDialogBorder();
builder.addLabel("group id:", cc.xy(1, 1));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/DBConnectorEditor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/DBConnectorEditor.java
index 1598be0250..fb4f6b1675 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/DBConnectorEditor.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/DBConnectorEditor.java
@@ -85,7 +85,7 @@ public void setConnector(DBConnector connector) {
}
private void initLayout() {
- FormLayout layout = new FormLayout("right:pref, 3dlu, fill:160dlu:grow", "");
+ FormLayout layout = new FormLayout("right:pref, $lcgap, fill:160dlu:grow", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/DBConnectorPrefsPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/DBConnectorPrefsPanel.java
index 576e205f62..03b0341f24 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/DBConnectorPrefsPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/DBConnectorPrefsPanel.java
@@ -153,7 +153,7 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder sidebar = new PanelBuilder(new FormLayout(
"fill:min(150dlu;pref)",
- "p, 10dlu, p, 3dlu, p, 3dlu, p, 10dlu, p"));
+ "p, 10dlu, p, $rgap, p, $rgap, p, 10dlu, p"));
sidebar.setDefaultDialogBorder();
sidebar.add(connectorChoices, cc.xy(1, 1));
@@ -164,7 +164,7 @@ private void initLayout() {
PanelBuilder editorBuilder = new PanelBuilder(new FormLayout(
"fill:default:grow",
- "p, 3dlu, fill:default:grow"));
+ "p, $rgap, fill:default:grow"));
editorBuilder.setDefaultDialogBorder();
editorBuilder.addSeparator("Edit DB Connector", cc.xy(1, 1));
editorBuilder.add(editor, cc.xy(1, 3));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/creator/DBConnectorCreatorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/creator/DBConnectorCreatorDialog.java
index 1ceff01208..0b89dab2ec 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/creator/DBConnectorCreatorDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/creator/DBConnectorCreatorDialog.java
@@ -106,7 +106,7 @@ private void initLayout() {
getRootPane().setDefaultButton(okButton);
FormLayout layout = new FormLayout(
- "right:pref, 3dlu, fill:max(50dlu;pref):grow",
+ "right:pref, $lcgap, fill:max(50dlu;pref):grow",
"");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/duplicator/DBConnectorDuplicatorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/duplicator/DBConnectorDuplicatorDialog.java
index f661053338..27653990f7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/duplicator/DBConnectorDuplicatorDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/dbconnector/duplicator/DBConnectorDuplicatorDialog.java
@@ -93,7 +93,7 @@ private String suggestName() {
private void initLayout() {
getRootPane().setDefaultButton(okButton);
- FormLayout layout = new FormLayout("right:pref, 3dlu, fill:250", "");
+ FormLayout layout = new FormLayout("right:pref, $lcgap, fill:250", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
builder.append("Name:", connectorName);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPrefsPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPrefsPanel.java
index 4e8dc5c1e7..4988139afb 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPrefsPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/general/GeneralPrefsPanel.java
@@ -78,8 +78,8 @@ public void commit() {
private void initLayout() {
FormLayout layout = new FormLayout(
- "right:pref, 3dlu, fill:120dlu, default:grow",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, fill:40dlu:grow");
+ "right:pref, $lcgap, fill:120dlu, default:grow",
+ "p, $rgap, p, $rgap, p, $rgap, p, fill:40dlu:grow");
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(layout);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/more/MorePrefsPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/more/MorePrefsPanel.java
index 20c583387d..c9c541ed9a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/more/MorePrefsPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/more/MorePrefsPanel.java
@@ -58,7 +58,7 @@ public MorePrefsPanel(Application app) {
private void initLayout() {
FormLayout layout = new FormLayout(
"12dlu, default:grow",
- "p, 6dlu, p, 12dlu, p, 6dlu, p, 3dlu, p, fill:default:grow");
+ "p, $lgap, p, 12dlu, p, $lgap, p, $rgap, p, fill:default:grow");
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(layout);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/DataDomainGeneratorsPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/DataDomainGeneratorsPanel.java
index e2817eaa82..7d209f22ef 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/DataDomainGeneratorsPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/DataDomainGeneratorsPanel.java
@@ -53,7 +53,7 @@ class DataDomainGeneratorsPanel extends JPanel {
private void initLayout(Application application) {
setLayout(new BorderLayout());
FormLayout layout = new FormLayout(
- "left:pref, 4dlu, fill:70dlu, 3dlu, fill:120, 3dlu, fill:120", "");
+ "left:pref, $rgap, fill:70dlu, $lcgap, fill:120, $lcgap, fill:120", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
JLabel dataMapLabel = new JLabel(dataMap.getName());
dataMapLabel.setToolTipText(dataMap.getName());
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/DataDomainGeneratorsTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/DataDomainGeneratorsTab.java
index 8d97bf6fba..b468c0a403 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/DataDomainGeneratorsTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/DataDomainGeneratorsTab.java
@@ -86,7 +86,7 @@ public void initView() {
removeAll();
createPanels();
- FormLayout layout = new FormLayout("left:pref, 4dlu", "");
+ FormLayout layout = new FormLayout("left:pref, $rgap", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
@@ -212,7 +212,7 @@ private static class TopGeneratorPanel extends JPanel {
TopGeneratorPanel(String icon, String runTooltip) {
setLayout(new BorderLayout());
FormLayout layout = new FormLayout(
- "left:pref, 4dlu, fill:70dlu, 3dlu, fill:120, 3dlu, fill:120", "");
+ "left:pref, $rgap, fill:70dlu, $lcgap, fill:120, $lcgap, fill:120", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
this.selectAll = new JCheckBox();
this.generateAll = new JButton("Run");
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/main/DataDomainMainView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/main/DataDomainMainView.java
index 112efd8c81..7521435386 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/main/DataDomainMainView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datadomain/main/DataDomainMainView.java
@@ -69,8 +69,8 @@ protected void initView() {
// assemble
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:pref, 3dlu, fill:50dlu, 3dlu, fill:47dlu, 3dlu, fill:100",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
+ "right:pref, $lcgap, fill:50dlu, $lcgap, fill:47dlu, $lcgap, fill:100",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenConfigPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenConfigPanel.java
index bb69492f2d..def321e3e7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenConfigPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenConfigPanel.java
@@ -216,8 +216,8 @@ private void initLayout() {
setLayout(new BorderLayout());
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "left:10dlu, 3dlu, 97dlu, 3dlu, 40dlu, 3dlu, 50dlu, 3dlu, 20dlu",
- "p, 3dlu, p, 10dlu, 11*(p, 3dlu),10dlu,9*(p, 3dlu)");
+ "left:10dlu, $lcgap, 97dlu, $lcgap, 40dlu, $lcgap, 50dlu, $lcgap, 20dlu",
+ "p, $lgap, p, 10dlu, 11*(p, $lgap),10dlu,9*(p, $lgap)");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
builder.addLabel("Output Directory", cc.xyw(1, 1, 3));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
index 3e360faaaa..d28d6454bf 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
@@ -42,18 +42,19 @@
import org.apache.cayenne.modeler.event.model.ObjEntityEvent;
import org.apache.cayenne.modeler.event.model.ObjEntityListener;
import org.apache.cayenne.modeler.event.model.ProjectAfterSaveEvent;
-import org.apache.cayenne.modeler.pref.adapters.GeneralPrefs;
import org.apache.cayenne.modeler.project.CgenOps;
import org.apache.cayenne.modeler.project.ProjectSession;
import org.apache.cayenne.modeler.toolkit.ProjectPanel;
import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
+import org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.action.AddCgenConfigAction;
+import org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.action.EditCgenConfigAction;
+import org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.action.RemoveCgenConfigAction;
import org.apache.cayenne.tools.ToolsInjectorBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.*;
-import java.nio.file.Path;
import java.util.Collection;
import java.util.Comparator;
import java.util.Set;
@@ -100,12 +101,9 @@ public CgenPanel(ProjectSession session) {
this.generateButton.setIcon(IconFactory.buildIcon("icon-gen_java.png"));
this.generateButton.setEnabled(false);
this.configurationsComboBox = new JComboBox<>();
- this.addConfigBtn = new JButton(IconFactory.buildIcon("icon-new.png"));
- this.addConfigBtn.setToolTipText("New configuration");
- this.editConfigBtn = new JButton(IconFactory.buildIcon("icon-edit.png"));
- this.editConfigBtn.setToolTipText("Rename configuration");
- this.removeConfigBtn = new JButton(IconFactory.buildIcon("icon-trash.png"));
- this.removeConfigBtn.setToolTipText("Remove configuration");
+ this.addConfigBtn = new AddCgenConfigAction(app, configurationsComboBox, () -> cgenConfigList).buildButton();
+ this.editConfigBtn = new EditCgenConfigAction(app, configurationsComboBox, () -> cgenConfigList, () -> cgenConfiguration).buildButton();
+ this.removeConfigBtn = new RemoveCgenConfigAction(app, configurationsComboBox, () -> cgenConfigList, () -> cgenConfiguration).buildButton();
this.cgenConfigPanel = new CgenConfigPanel(session, this);
this.classesSelector = new CgenArtefactSelectorPanel(this);
@@ -254,7 +252,7 @@ private void setConfiguration(String selectedConfig) {
}
DataMap dataMap = session.getSelectedDataMap();
- cgenConfiguration = createDefaultCgenConfiguration(dataMap);
+ cgenConfiguration = CgenOps.createDefaultCgenConfiguration(dataMap, session);
addToSelectedEntities(dataMap.getObjEntities()
.stream()
.map(Entity::getName)
@@ -289,7 +287,7 @@ private void initLayout() {
private JPanel buildConfigurationsPanel() {
FormLayout layout = new FormLayout(
- "109dlu,3dlu,pref,3dlu,pref,3dlu,pref",
+ "109dlu,$lcgap,pref,$lcgap,pref,$lcgap,pref",
"p");
PanelBuilder builder = new PanelBuilder(layout);
CellConstraints cc = new CellConstraints();
@@ -317,7 +315,7 @@ private void initCgenConfigurations(DataMap dataMap) {
cgenConfigList = app.getMetaData().get(dataMap, CgenConfigList.class);
if (cgenConfigList == null) {
cgenConfigList = new CgenConfigList();
- cgenConfigList.add(createDefaultCgenConfiguration(dataMap));
+ cgenConfigList.add(CgenOps.createDefaultCgenConfiguration(dataMap, session));
app.getMetaData().add(dataMap, cgenConfigList);
}
}
@@ -331,9 +329,6 @@ private void initListeners() {
private void initBindings() {
generateButton.addActionListener(e -> generateAction());
- addConfigBtn.addActionListener(e -> addConfigAction());
- editConfigBtn.addActionListener(e -> editConfigAction());
- removeConfigBtn.addActionListener(e -> removeConfigAction());
configurationsComboBox.addActionListener(e -> {
// ignore events fired while initFromModel() is rebuilding the combo box
if (initFromModel) {
@@ -374,59 +369,6 @@ private void generateAction() {
}
}
- private void addConfigAction() {
- String name = JOptionPane.showInputDialog(
- this,
- "Type the name for new cgenConfiguration",
- configurationsComboBox.getSelectedItem());
- CgenConfiguration configuration = createDefaultCgenConfiguration(session.getSelectedDataMap());
- if (name != null) {
- if (!cgenConfigList.isExist(name) && !name.isEmpty()) {
- configuration.setName(name);
- cgenConfigList.add(configuration);
- configurationsComboBox.addItem(name);
- configurationsComboBox.setSelectedItem(name);
- } else {
- JOptionPane.showMessageDialog(this,
- "Can't create new configuration, same name is already exist or empty");
- }
- }
- }
-
- private void editConfigAction() {
- String name = JOptionPane.showInputDialog(
- this,
- "Type the new name for cgenConfiguration",
- configurationsComboBox.getSelectedItem());
- if (name != null) {
- if (!cgenConfigList.isExist(name) && !name.isEmpty()) {
- cgenConfiguration.setName(name);
- configurationsComboBox.removeItem(configurationsComboBox.getSelectedItem());
- configurationsComboBox.addItem(name);
- configurationsComboBox.setSelectedItem(name);
- } else {
- JOptionPane.showMessageDialog(this,
- "Can't rename configuration, name is already exist or empty");
- }
- }
- }
-
- private void removeConfigAction() {
- int result = JOptionPane.showConfirmDialog(this,
- "Configuration will be remove\n Are you sure?",
- "Delete cgenConfiguration",
- JOptionPane.YES_NO_OPTION);
- if (result == JOptionPane.OK_OPTION) {
- if (configurationsComboBox.getItemCount() > 1) {
- cgenConfigList.removeByName(cgenConfiguration.getName());
- configurationsComboBox.removeItem(configurationsComboBox.getSelectedItem());
- configurationsComboBox.setSelectedIndex(0);
- } else {
- JOptionPane.showMessageDialog(this, "At least one configuration must exist");
- }
- }
- }
-
private void prepareClasses(DataMap dataMap) {
classes.clear();
classes.add(dataMap);
@@ -435,14 +377,6 @@ private void prepareClasses(DataMap dataMap) {
selectionModel.initCollectionsForSelection(dataMap);
}
- private CgenConfiguration createDefaultCgenConfiguration(DataMap map) {
- Path basePath = map.getLocation() != null ? CgenOps.baseDir(session) : null;
- CgenConfiguration configuration = CgenConfiguration.createDefault(map, basePath);
- configuration.setForce(true);
- configuration.setEncoding(new GeneralPrefs(app.getPrefsLocator().appNode(GeneralPrefs.NODE)).getEncoding());
- return configuration;
- }
-
private void updateArtifactGenerationMode(boolean selected) {
cgenConfiguration.setArtifactsGenerationMode(selected ? "all" : "entity");
checkCgenConfigDirty();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/AddCgenConfigAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/AddCgenConfigAction.java
new file mode 100644
index 0000000000..a8487f8af6
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/AddCgenConfigAction.java
@@ -0,0 +1,72 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * https://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 org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.action;
+
+import org.apache.cayenne.gen.CgenConfigList;
+import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.project.CgenOps;
+import org.apache.cayenne.modeler.project.ProjectSession;
+import org.apache.cayenne.modeler.toolkit.AppAction;
+
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import java.awt.event.ActionEvent;
+import java.util.function.Supplier;
+
+public class AddCgenConfigAction extends AppAction {
+
+ private final JComboBox configurationsComboBox;
+ private final Supplier cgenConfigListProvider;
+
+ public AddCgenConfigAction(Application application, JComboBox configurationsComboBox,
+ Supplier cgenConfigListProvider) {
+ super(application, "Add Cgen Configuration", "New configuration");
+ this.configurationsComboBox = configurationsComboBox;
+ this.cgenConfigListProvider = cgenConfigListProvider;
+ setAlwaysOn(true);
+ }
+
+ @Override
+ public String getIconName() {
+ return "icon-new.png";
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ String name = JOptionPane.showInputDialog(
+ app.getFrame(),
+ "Type the name for new cgenConfiguration",
+ configurationsComboBox.getSelectedItem());
+ ProjectSession session = app.getFrame().getProjectSession();
+ CgenConfiguration configuration = CgenOps.createDefaultCgenConfiguration(session.getSelectedDataMap(), session);
+ if (name != null) {
+ CgenConfigList cgenConfigList = cgenConfigListProvider.get();
+ if (!cgenConfigList.isExist(name) && !name.isEmpty()) {
+ configuration.setName(name);
+ cgenConfigList.add(configuration);
+ configurationsComboBox.addItem(name);
+ configurationsComboBox.setSelectedItem(name);
+ } else {
+ JOptionPane.showMessageDialog(app.getFrame(),
+ "Can't create new configuration, same name is already exist or empty");
+ }
+ }
+ }
+}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/EditCgenConfigAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/EditCgenConfigAction.java
new file mode 100644
index 0000000000..bfb252d6f5
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/EditCgenConfigAction.java
@@ -0,0 +1,71 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * https://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 org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.action;
+
+import org.apache.cayenne.gen.CgenConfigList;
+import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.toolkit.AppAction;
+
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import java.awt.event.ActionEvent;
+import java.util.function.Supplier;
+
+public class EditCgenConfigAction extends AppAction {
+
+ private final JComboBox configurationsComboBox;
+ private final Supplier cgenConfigListProvider;
+ private final Supplier cgenConfigurationProvider;
+
+ public EditCgenConfigAction(Application application, JComboBox configurationsComboBox,
+ Supplier cgenConfigListProvider,
+ Supplier cgenConfigurationProvider) {
+ super(application, "Edit Cgen Configuration", "Rename configuration");
+ this.configurationsComboBox = configurationsComboBox;
+ this.cgenConfigListProvider = cgenConfigListProvider;
+ this.cgenConfigurationProvider = cgenConfigurationProvider;
+ setAlwaysOn(true);
+ }
+
+ @Override
+ public String getIconName() {
+ return "icon-edit.png";
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ String name = JOptionPane.showInputDialog(
+ app.getFrame(),
+ "Type the new name for cgenConfiguration",
+ configurationsComboBox.getSelectedItem());
+ if (name != null) {
+ CgenConfigList cgenConfigList = cgenConfigListProvider.get();
+ if (!cgenConfigList.isExist(name) && !name.isEmpty()) {
+ cgenConfigurationProvider.get().setName(name);
+ configurationsComboBox.removeItem(configurationsComboBox.getSelectedItem());
+ configurationsComboBox.addItem(name);
+ configurationsComboBox.setSelectedItem(name);
+ } else {
+ JOptionPane.showMessageDialog(app.getFrame(),
+ "Can't rename configuration, name is already exist or empty");
+ }
+ }
+ }
+}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/RemoveCgenConfigAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/RemoveCgenConfigAction.java
new file mode 100644
index 0000000000..d83f3c9ea1
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/RemoveCgenConfigAction.java
@@ -0,0 +1,69 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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
+ *
+ * https://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 org.apache.cayenne.modeler.ui.project.editor.datamap.cgen.action;
+
+import org.apache.cayenne.gen.CgenConfigList;
+import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.toolkit.AppAction;
+
+import javax.swing.JComboBox;
+import javax.swing.JOptionPane;
+import java.awt.event.ActionEvent;
+import java.util.function.Supplier;
+
+public class RemoveCgenConfigAction extends AppAction {
+
+ private final JComboBox configurationsComboBox;
+ private final Supplier cgenConfigListProvider;
+ private final Supplier cgenConfigurationProvider;
+
+ public RemoveCgenConfigAction(Application application, JComboBox configurationsComboBox,
+ Supplier cgenConfigListProvider,
+ Supplier cgenConfigurationProvider) {
+ super(application, "Remove Cgen Configuration", "Remove configuration");
+ this.configurationsComboBox = configurationsComboBox;
+ this.cgenConfigListProvider = cgenConfigListProvider;
+ this.cgenConfigurationProvider = cgenConfigurationProvider;
+ setAlwaysOn(true);
+ }
+
+ @Override
+ public String getIconName() {
+ return "icon-trash.png";
+ }
+
+ @Override
+ public void performAction(ActionEvent e) {
+ int result = JOptionPane.showConfirmDialog(app.getFrame(),
+ "Configuration will be remove\n Are you sure?",
+ "Delete cgenConfiguration",
+ JOptionPane.YES_NO_OPTION);
+ if (result == JOptionPane.OK_OPTION) {
+ if (configurationsComboBox.getItemCount() > 1) {
+ CgenConfigList cgenConfigList = cgenConfigListProvider.get();
+ cgenConfigList.removeByName(cgenConfigurationProvider.get().getName());
+ configurationsComboBox.removeItem(configurationsComboBox.getSelectedItem());
+ configurationsComboBox.setSelectedIndex(0);
+ } else {
+ JOptionPane.showMessageDialog(app.getFrame(), "At least one configuration must exist");
+ }
+ }
+ }
+}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditor.java
index 910f606920..4671a71bb5 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditor.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditor.java
@@ -206,7 +206,7 @@ private void initLayout() {
CellConstraints constraintsTop = new CellConstraints();
PanelBuilder topPanelBuilder = new PanelBuilder(new FormLayout(
- "left:pref:grow, right:pref", "p, 3dlu, p, 3dlu, p"));
+ "left:pref:grow, right:pref", "p, $rgap, p, $rgap, p"));
topPanelBuilder.setDefaultDialogBorder();
topPanelBuilder.add(toolBar, constraintsTop.xy(1, 1));
topPanelBuilder.addSeparator("", constraintsTop.xyw(1, 3, 2));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditorFindDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditorFindDialog.java
index 97e6b7db74..5a192df6e5 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditorFindDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/templateeditor/TemplateEditorFindDialog.java
@@ -41,8 +41,8 @@ public class TemplateEditorFindDialog extends AppDialog {
protected static final String FIND_NEXT = "FindNext";
private static final String FIND_PREV = "FindPrev";
- protected static final String COLUMN_SPECS = "left:pref, 3dlu, left:pref,3dlu, 110dlu, 3dlu, fill:p:grow";
- protected static final String ROW_SPECS = "4 * (p, 3dlu)";
+ protected static final String COLUMN_SPECS = "left:pref, $lcgap, left:pref,$lcgap, 110dlu, $lcgap, fill:p:grow";
+ protected static final String ROW_SPECS = "4 * (p, $rgap)";
protected final TemplateEditor templateEditor;
protected final JTextField searchField;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportView.java
index 99345b1cda..da24467953 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportView.java
@@ -152,6 +152,9 @@ private void createAdvancedOptionsHiderPanel(DefaultFormBuilder builder) {
JButton hideButton = new JButton("Advanced Options");
hideButton.setIcon(configPanel.isVisible() ? downArrow : rightArrow);
hideButton.setBorderPainted(false);
+ hideButton.setContentAreaFilled(false);
+ hideButton.setFocusPainted(false);
+ hideButton.setRolloverEnabled(false);
hideButton.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ReverseEngineeringConfigPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ReverseEngineeringConfigPanel.java
index fc9f9c876f..0729c1f336 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ReverseEngineeringConfigPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ReverseEngineeringConfigPanel.java
@@ -36,7 +36,7 @@
public class ReverseEngineeringConfigPanel extends ProjectPanel {
- private static final String DATA_FIELDS_LAYOUT = "right:pref, 3dlu, fill:235dlu";
+ private static final String DATA_FIELDS_LAYOUT = "right:pref, $lcgap, fill:235dlu";
private final JComboBox strategyCombo;
private final CMUndoableTextField meaningfulPk;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/progress/DbImportProgressDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/progress/DbImportProgressDialog.java
index 34d02cfb00..868bbb375b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/progress/DbImportProgressDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/progress/DbImportProgressDialog.java
@@ -47,7 +47,7 @@ public DbImportProgressDialog(Application application, Window parent, String tit
cancelButton = new JButton("Cancel");
CellConstraints cc = new CellConstraints();
- FormLayout layout = new FormLayout("fill:max(250dlu;pref)", "p, 3dlu, p, 3dlu, p");
+ FormLayout layout = new FormLayout("fill:max(250dlu;pref)", "p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/defaults/DefaultsUpdateDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/defaults/DefaultsUpdateDialog.java
index 537e055148..65f06c106c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/defaults/DefaultsUpdateDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/defaults/DefaultsUpdateDialog.java
@@ -84,7 +84,7 @@ private void initLayout() {
getRootPane().setDefaultButton(updateButton);
CellConstraints cc = new CellConstraints();
- FormLayout layout = new FormLayout("left:max(180dlu;pref)", "p, 3dlu, p, 3dlu");
+ FormLayout layout = new FormLayout("left:max(180dlu;pref)", "p, $rgap, p, $rgap");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
builder.add(updateAll, cc.xy(1, 1));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
index 19f70f6471..6e880a4359 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/DataMapMainView.java
@@ -96,7 +96,7 @@ private void initLayout() {
nodeSelector.setRenderer(Renderers.listRendererWithIcons());
FormLayout layout = new FormLayout(
- "right:70dlu, 3dlu, fill:180dlu, 3dlu, fill:120",
+ "right:70dlu, $lcgap, fill:180dlu, $lcgap, fill:120",
"");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/locking/LockingUpdateDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/locking/LockingUpdateDialog.java
index 218e70e32e..2ac8589e7f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/locking/LockingUpdateDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/main/locking/LockingUpdateDialog.java
@@ -81,7 +81,7 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
"left:max(180dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu");
+ "p, $rgap, p, $rgap, p, $rgap");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
builder.add(entities, cc.xy(1, 1));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataNodeEditorPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataNodeEditorPanel.java
index e9d1f8b901..f237ce3abd 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataNodeEditorPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/DataNodeEditorPanel.java
@@ -109,7 +109,7 @@ public DataNodeEditorPanel(ProjectSession session) {
private void initLayout() {
DefaultFormBuilder topPanelBuilder = new DefaultFormBuilder(new FormLayout(
- "right:80dlu, 3dlu, fill:177dlu, 3dlu, fill:20dlu",
+ "right:80dlu, $lcgap, fill:177dlu, $lcgap, fill:20dlu",
""));
topPanelBuilder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/custom/CustomDataSourcePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/custom/CustomDataSourcePanel.java
index 844d04ccd1..4c485d04b9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/custom/CustomDataSourcePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/custom/CustomDataSourcePanel.java
@@ -45,7 +45,7 @@ public CustomDataSourcePanel(Application app, Runnable nodeChangeProcessor) {
}
private void initLayout() {
- FormLayout layout = new FormLayout("right:80dlu, 3dlu, fill:200dlu", "");
+ FormLayout layout = new FormLayout("right:80dlu, $lcgap, fill:200dlu", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/jdbc/JDBCDataSourcePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/jdbc/JDBCDataSourcePanel.java
index 25427ee2d1..aaa9d47bb2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/jdbc/JDBCDataSourcePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datanode/jdbc/JDBCDataSourcePanel.java
@@ -74,8 +74,8 @@ public void setNode(DataNodeDescriptor node) {
private void initLayout() {
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:80dlu, 3dlu, fill:50dlu, 3dlu, fill:74dlu, 3dlu, fill:70dlu",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
+ "right:80dlu, $lcgap, fill:50dlu, $lcgap, fill:74dlu, $lcgap, fill:70dlu",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
index 99dd2128c7..5414fcbd3f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
@@ -109,7 +109,7 @@ private void initLayout() {
pkGeneratorDetail.add(new PKDBGeneratorPanel(session), PK_DB_GENERATOR);
pkGeneratorDetail.add(new PKCustomSequenceGeneratorPanel(session), PK_CUSTOM_SEQUENCE_GENERATOR);
- FormLayout layout = new FormLayout("right:pref, 3dlu, fill:200dlu", "");
+ FormLayout layout = new FormLayout("right:pref, $lcgap, fill:200dlu", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
builder.appendSeparator("DbEntity Configuration");
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKCustomSequenceGeneratorPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKCustomSequenceGeneratorPanel.java
index 690f0b395e..f34099f570 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKCustomSequenceGeneratorPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKCustomSequenceGeneratorPanel.java
@@ -56,7 +56,7 @@ private void initView() {
// assemble
DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout(
- "right:70dlu, 3dlu, 20dlu, 3dlu, fill:177dlu",
+ "right:70dlu, $lcgap, 20dlu, $lcgap, fill:177dlu",
""));
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKDBGeneratorPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKDBGeneratorPanel.java
index 90ad088ef7..a58e662c32 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKDBGeneratorPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/PKDBGeneratorPanel.java
@@ -49,7 +49,7 @@ private void initLayout() {
attributes.setRenderer(new AttributeRenderer());
DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout(
- "right:70dlu, 3dlu, fill:200dlu",
+ "right:70dlu, $lcgap, fill:200dlu",
""));
builder.setDefaultDialogBorder();
builder.append("Auto Incremented:", attributes);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/main/EmbeddableMainView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/main/EmbeddableMainView.java
index 32ae1e186d..37cb4df59f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/main/EmbeddableMainView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/embeddable/main/EmbeddableMainView.java
@@ -77,7 +77,7 @@ private void initView() {
comment.addCommitListener(this::setComment);
FormLayout layout = new FormLayout(
- "right:50dlu, 3dlu, fill:150dlu, 3dlu, fill:100",
+ "right:50dlu, $lcgap, fill:150dlu, $lcgap, fill:100",
"");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/attrinfo/ObjAttributeInfoDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/attrinfo/ObjAttributeInfoDialog.java
index 1871b36073..3a488b20c4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/attrinfo/ObjAttributeInfoDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/attrinfo/ObjAttributeInfoDialog.java
@@ -177,8 +177,8 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(
new FormLayout(
- "right:max(50dlu;pref), 3dlu, 200dlu, 15dlu, right:max(30dlu;pref), 3dlu, 200dlu",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 6dlu, p, 6dlu, p, 3dlu, fill:p:grow"));
+ "right:max(50dlu;pref), $lcgap, 200dlu, 15dlu, right:max(30dlu;pref), $lcgap, 200dlu",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $lgap, p, $lgap, p, $rgap, fill:p:grow"));
builder.setDefaultDialogBorder();
builder.addSeparator("ObjAttribute Information", cc.xywh(1, 1, 7, 1));
@@ -200,7 +200,7 @@ private void initLayout() {
FormLayout fL = new FormLayout(
"493dlu",
- "p, 3dlu, fill:min(128dlu;pref):grow");
+ "p, $rgap, fill:min(128dlu;pref):grow");
PanelBuilder builderPathPane = new PanelBuilder(fL);
JPanel buttonsPane = new JPanel(new FlowLayout(FlowLayout.LEADING));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/duplicates/DuplicatedAttributesDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/duplicates/DuplicatedAttributesDialog.java
index 1e553721b0..a679cdfdc5 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/duplicates/DuplicatedAttributesDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/duplicates/DuplicatedAttributesDialog.java
@@ -104,7 +104,7 @@ private void initView() {
// assemble
CellConstraints cc = new CellConstraints();
- PanelBuilder builder = new PanelBuilder(new FormLayout("fill:200dlu:grow", "pref, 3dlu, top:40dlu:grow"));
+ PanelBuilder builder = new PanelBuilder(new FormLayout("fill:200dlu:grow", "pref, $rgap, top:40dlu:grow"));
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/main/ObjEntityMainView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/main/ObjEntityMainView.java
index 4782a8fedc..7ded1bc7af 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/main/ObjEntityMainView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/main/ObjEntityMainView.java
@@ -111,12 +111,13 @@ private void initLayout() {
add(toolBar, BorderLayout.NORTH);
tableLabel.setBorderPainted(false);
+ tableLabel.setContentAreaFilled(false);
tableLabel.setHorizontalAlignment(SwingConstants.LEFT);
tableLabel.setFocusPainted(false);
tableLabel.setMargin(new Insets(0, 0, 0, 0));
tableLabel.setBorder(null);
- FormLayout layout = new FormLayout("right:pref, 3dlu, fill:200dlu", "");
+ FormLayout layout = new FormLayout("right:pref, $lcgap, fill:200dlu", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/relinfo/ObjRelationshipInfoDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/relinfo/ObjRelationshipInfoDialog.java
index 3b0d9f09f4..71f25a590f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/relinfo/ObjRelationshipInfoDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/objentity/relinfo/ObjRelationshipInfoDialog.java
@@ -167,8 +167,8 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(
new FormLayout(
- "right:max(50dlu;pref), 3dlu, fill:min(150dlu;pref), 3dlu, 300dlu, 3dlu, fill:min(120dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, top:14dlu, 3dlu, top:p:grow"));
+ "right:max(50dlu;pref), $lcgap, fill:min(150dlu;pref), $lcgap, 300dlu, $lcgap, fill:min(120dlu;pref)",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, top:14dlu, $rgap, top:p:grow"));
builder.setDefaultDialogBorder();
builder.addSeparator("ObjRelationship Information", cc.xywh(1, 1, 5, 1));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
index 73c33b57d9..ffe801f6c2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureQueryView.java
@@ -98,8 +98,8 @@ private void initLayout() {
// assemble
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:max(80dlu;pref), 3dlu, fill:max(200dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu, p");
+ "right:max(80dlu;pref), $lcgap, fill:max(200dlu;pref)",
+ "p, $rgap, p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
@@ -282,7 +282,7 @@ protected PanelBuilder createPanelBuilder() {
PanelBuilder builder = super.createPanelBuilder();
- RowSpec[] extraRows = RowSpec.decodeSpecs("3dlu, p");
+ RowSpec[] extraRows = RowSpec.decodeSpecs("$rgap, p");
for (RowSpec extraRow : extraRows) {
builder.appendRow(extraRow);
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
index 45c5be2962..6d52a721ab 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/procedure/ProcedureTab.java
@@ -79,7 +79,7 @@ private void initView() {
this.returnsValue = new CMCheckBox(app.getUndoManager());
this.returnsValue.setToolTipText("first parameter will be used as return value");
- FormLayout layout = new FormLayout("right:pref, 3dlu, fill:200dlu", "");
+ FormLayout layout = new FormLayout("right:pref, $lcgap, fill:200dlu", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ObjectQueryPropertiesPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ObjectQueryPropertiesPanel.java
index 880dfe12af..15da994ee6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ObjectQueryPropertiesPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ObjectQueryPropertiesPanel.java
@@ -53,8 +53,8 @@ protected void initView() {
// assemble
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:max(80dlu;pref), 3dlu, left:max(50dlu;pref), fill:max(150dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
+ "right:max(80dlu;pref), $lcgap, left:max(50dlu;pref), fill:max(150dlu;pref)",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
builder.addSeparator("", cc.xywh(1, 1, 4, 1));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RawQueryPropertiesPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RawQueryPropertiesPanel.java
index b4e0c12dc9..209af2c5fe 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RawQueryPropertiesPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/RawQueryPropertiesPanel.java
@@ -68,9 +68,9 @@ protected void initController() {
protected PanelBuilder createPanelBuilder() {
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:max(80dlu;pref), 3dlu, left:max(10dlu;pref), "
- + "3dlu, left:max(37dlu;pref), 3dlu, fill:max(147dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
+ "right:max(80dlu;pref), $lcgap, left:max(10dlu;pref), "
+ + "$lcgap, left:max(37dlu;pref), $lcgap, fill:max(147dlu;pref)",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
index acf219b7c7..437fe168e4 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryMainTab.java
@@ -59,8 +59,8 @@ private void initView() {
// assemble
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:max(80dlu;pref), 3dlu, fill:max(200dlu;pref)",
- "p, 3dlu, p, 3dlu, p");
+ "right:max(80dlu;pref), $lcgap, fill:max(200dlu;pref)",
+ "p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
builder.addSeparator("EJBQL Query Settings", cc.xywh(1, 1, 3, 1));
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryPropertiesPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryPropertiesPanel.java
index 2fb1308bba..daeff60e84 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryPropertiesPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/ejbql/EjbqlQueryPropertiesPanel.java
@@ -37,9 +37,9 @@ public EjbqlQueryPropertiesPanel(ProjectSession session) {
protected PanelBuilder createPanelBuilder() {
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:max(80dlu;pref), 3dlu, left:max(10dlu;pref), "
- + "3dlu, left:max(37dlu;pref), 3dlu, fill:max(147dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
+ "right:max(80dlu;pref), $lcgap, left:max(10dlu;pref), "
+ + "$lcgap, left:max(37dlu;pref), $lcgap, fill:max(147dlu;pref)",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
index 8dfb78c4aa..cc97aeae96 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/selectquery/SelectQueryMainTab.java
@@ -85,8 +85,8 @@ private void initView() {
// assemble
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:max(80dlu;pref), 3dlu, fill:200dlu",
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
+ "right:max(80dlu;pref), $lcgap, fill:200dlu",
+ "p, $rgap, p, $rgap, p, $rgap, p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateMainTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateMainTab.java
index fcfa2d3ab6..7ed651c91f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateMainTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateMainTab.java
@@ -94,8 +94,8 @@ private void initView() {
// assemble
CellConstraints cc = new CellConstraints();
FormLayout layout = new FormLayout(
- "right:max(80dlu;pref), 3dlu, fill:max(200dlu;pref)",
- "p, 3dlu, p, 3dlu, p, 3dlu, p");
+ "right:max(80dlu;pref), $lcgap, fill:max(200dlu;pref)",
+ "p, $rgap, p, $rgap, p, $rgap, p");
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
@@ -213,7 +213,7 @@ protected PanelBuilder createPanelBuilder() {
PanelBuilder builder = super.createPanelBuilder();
- RowSpec[] extraRows = RowSpec.decodeSpecs("3dlu, p");
+ RowSpec[] extraRows = RowSpec.decodeSpecs("$rgap, p");
for (RowSpec extraRow : extraRows) {
builder.appendRow(extraRow);
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
index c22d42d439..2631781226 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/query/sqltemplate/SQLTemplateScriptsTab.java
@@ -120,8 +120,8 @@ public void valueChanged(ListSelectionEvent e) {
panes.add(textPane);
builder = new PanelBuilder(new FormLayout(
- "fill:100dlu, 3dlu, fill:100dlu:grow",
- "3dlu, fill:100dlu:grow"));
+ "fill:100dlu, $lcgap, fill:100dlu:grow",
+ "$rgap, fill:100dlu:grow"));
// orderings table must grow as the panel is resized
builder.add(new JScrollPane(
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/validator/ProjectValidatorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/validator/ProjectValidatorDialog.java
index 28aedc8b63..adc8df01c9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/validator/ProjectValidatorDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/validator/ProjectValidatorDialog.java
@@ -26,6 +26,7 @@
import org.apache.cayenne.modeler.project.ProjectSession;
import org.apache.cayenne.modeler.service.action.GlobalActions;
import org.apache.cayenne.modeler.toolkit.ProjectDialog;
+import org.apache.cayenne.modeler.toolkit.buttons.CMButtonPanel;
import org.apache.cayenne.modeler.ui.action.DisableValidationInspectionAction;
import org.apache.cayenne.modeler.ui.action.ShowValidationOptionAction;
import org.apache.cayenne.modeler.ui.action.ValidateAction;
@@ -78,8 +79,10 @@ private void initLayout() {
problemsTable.setCellSelectionEnabled(false);
problemsTable.setRowSelectionAllowed(true);
problemsTable.setTableHeader(null);
+ problemsTable.setPreferredScrollableViewportSize(new Dimension(400, 150));
+ problemsTable.setFillsViewportHeight(true);
problemsTable.setDefaultRenderer(ValidationFailure.class, new ValidationRenderer());
- problemsTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ problemsTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
GlobalActions globalActions = app.getActionManager();
JPopupMenu popup = new JPopupMenu();
@@ -88,23 +91,18 @@ private void initLayout() {
TablePopupHandler.install(problemsTable, popup);
CellConstraints cc = new CellConstraints();
- PanelBuilder builder = new PanelBuilder(new FormLayout("fill:200dlu:grow", "pref, 3dlu, fill:40dlu:grow"));
+ PanelBuilder builder = new PanelBuilder(new FormLayout("fill:200dlu:grow", "pref, $rgap, fill:150dlu:grow"));
builder.setDefaultDialogBorder();
builder.addLabel("Click on any row below to go to the object that has a validation problem:", cc.xy(1, 1));
- builder.add(new JScrollPane(problemsTable), cc.xy(1, 3));
+ builder.add(new JScrollPane(problemsTable,
+ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), cc.xy(1, 3));
getRootPane().setDefaultButton(refreshButton);
- JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
- buttons.add(closeButton);
- buttons.add(refreshButton);
-
- JPanel content = builder.getPanel();
- content.setPreferredSize(new Dimension(450, 300));
-
getContentPane().setLayout(new BorderLayout());
- getContentPane().add(content, BorderLayout.CENTER);
- getContentPane().add(buttons, BorderLayout.SOUTH);
+ getContentPane().add(builder.getPanel(), BorderLayout.CENTER);
+ getContentPane().add(new CMButtonPanel(closeButton, refreshButton), BorderLayout.SOUTH);
}
private void initBindings() {
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/validation/ValidationDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/validation/ValidationDialog.java
index fe4e51d6b7..791595c847 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/validation/ValidationDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/validation/ValidationDialog.java
@@ -86,7 +86,7 @@ private void initLayout() {
CellConstraints cc = new CellConstraints();
PanelBuilder builder = new PanelBuilder(new FormLayout(
"fill:min(50dlu;pref):grow",
- "fill:20dlu, 9dlu, p, 3dlu, fill:40dlu:grow"));
+ "fill:20dlu, $pgap, p, $rgap, fill:40dlu:grow"));
builder.setDefaultDialogBorder();
builder.add(messageArea, cc.xy(1, 1));
builder.addSeparator("Details", cc.xy(1, 3));
diff --git a/pom.xml b/pom.xml
index d32fc692ff..314d086b98 100644
--- a/pom.xml
+++ b/pom.xml
@@ -366,9 +366,9 @@
1.2.1
- com.jgoodies
- jgoodies-looks
- 2.7.0
+ com.formdev
+ flatlaf
+ 3.7.1
org.apache.velocity