From 7e37546384a4cdb382f86d437f1af3a8d8af349f Mon Sep 17 00:00:00 2001 From: Mikhail Dzianishchyts Date: Fri, 26 Jun 2026 14:45:50 +0300 Subject: [PATCH 1/2] Replace jgoodies-looks with flatlaf --- modeler/cayenne-modeler/pom.xml | 4 +- .../platform/generic/GenericButtonUI.java | 113 ------------------ .../generic/GenericUIInitializer.java | 43 +------ .../platform/mac/MacUIInitializer.java | 7 +- .../platform/win/WinCustomTextFieldUI.java | 61 ---------- .../platform/win/WinUIInitializer.java | 17 +-- pom.xml | 6 +- 7 files changed, 18 insertions(+), 233 deletions(-) delete mode 100644 modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericButtonUI.java delete mode 100644 modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinCustomTextFieldUI.java diff --git a/modeler/cayenne-modeler/pom.xml b/modeler/cayenne-modeler/pom.xml index bdd0b48e27..08c8ee8751 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/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..b474d6aa93 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,49 +18,25 @@ ****************************************************************/ 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 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(); + // 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); @@ -84,15 +60,4 @@ private void overrideUIDefaults() { // 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; - } } 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..34463f3b70 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,6 +18,7 @@ ****************************************************************/ package org.apache.cayenne.modeler.platform.mac; +import com.formdev.flatlaf.FlatLightLaf; import org.apache.cayenne.modeler.Application; import org.apache.cayenne.modeler.service.action.GlobalActions; import org.apache.cayenne.modeler.platform.UIInitializer; @@ -37,10 +38,12 @@ 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(); + + // 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); 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 winFieldUIConstructor; - - static { - try { - @SuppressWarnings("unchecked") - Class winFieldUIClass = (Class)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..0e1f7b439c 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,25 @@ ****************************************************************/ package org.apache.cayenne.modeler.platform.win; -import com.jgoodies.looks.windows.WindowsLookAndFeel; +import com.formdev.flatlaf.FlatLightLaf; 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(); + // 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); diff --git a/pom.xml b/pom.xml index 7e9c289dd8..15c6d8fc45 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 From fa641f1d7515de573cdb658b05ed32dba10bab73 Mon Sep 17 00:00:00 2001 From: Mikhail Dzianishchyts Date: Thu, 2 Jul 2026 15:41:40 +0300 Subject: [PATCH 2/2] Tweak layouts --- .../modeler/platform/FlatLafLayoutStyle.java | 114 ++++++++++++++++++ .../modeler/platform/UIInitializer.java | 1 + .../generic/GenericUIInitializer.java | 42 ++++--- .../modeler/platform/mac/MacPanelUI.java | 8 +- .../platform/mac/MacToolBarSeparatorUI.java | 61 ---------- .../platform/mac/MacUIInitializer.java | 5 +- .../platform/win/WinUIInitializer.java | 11 +- .../cayenne/modeler/project/CgenOps.java | 14 +++ .../cayenne/modeler/toolkit/AppAction.java | 2 +- .../toolkit/buttons/CMButtonPanel.java | 11 +- .../modeler/toolkit/tree/CheckBoxTree.java | 4 + .../cayenne/modeler/ui/MainToolBar.java | 1 + .../cayenne/modeler/ui/SearchPanel.java | 34 ++---- .../ui/datasource/DataSourceDialog.java | 10 +- .../DbActionOptionsDialog.java | 2 +- .../ui/dbgen/DBGeneratorOptionsDialog.java | 2 +- .../modeler/ui/dbgen/TableSelectorPanel.java | 2 +- .../ui/dbmerge/MergerOptionsDialog.java | 2 +- .../ui/dbmerge/MergerTokenSelector.java | 2 +- .../dbrelationship/DbRelationshipDialog.java | 6 +- .../ui/entitysync/EntitySyncDialog.java | 2 +- .../classpath/ClasspathPrefsPanel.java | 4 +- .../maven/MavenDependencyDialog.java | 4 +- .../dbconnector/DBConnectorEditor.java | 2 +- .../dbconnector/DBConnectorPrefsPanel.java | 4 +- .../creator/DBConnectorCreatorDialog.java | 2 +- .../DBConnectorDuplicatorDialog.java | 2 +- .../general/GeneralPrefsPanel.java | 4 +- .../ui/preferences/more/MorePrefsPanel.java | 2 +- .../datadomain/DataDomainGeneratorsPanel.java | 2 +- .../datadomain/DataDomainGeneratorsTab.java | 4 +- .../datadomain/main/DataDomainMainView.java | 4 +- .../editor/datamap/cgen/CgenConfigPanel.java | 4 +- .../editor/datamap/cgen/CgenPanel.java | 84 ++----------- .../cgen/action/AddCgenConfigAction.java | 72 +++++++++++ .../cgen/action/EditCgenConfigAction.java | 71 +++++++++++ .../cgen/action/RemoveCgenConfigAction.java | 69 +++++++++++ .../cgen/templateeditor/TemplateEditor.java | 2 +- .../TemplateEditorFindDialog.java | 4 +- .../editor/datamap/dbimport/DbImportView.java | 3 + .../ReverseEngineeringConfigPanel.java | 2 +- .../progress/DbImportProgressDialog.java | 2 +- .../defaults/DefaultsUpdateDialog.java | 2 +- .../editor/datamap/main/DataMapMainView.java | 2 +- .../main/locking/LockingUpdateDialog.java | 2 +- .../editor/datanode/DataNodeEditorPanel.java | 2 +- .../custom/CustomDataSourcePanel.java | 2 +- .../datanode/jdbc/JDBCDataSourcePanel.java | 4 +- .../dbentity/main/DbEntityMainView.java | 2 +- .../main/PKCustomSequenceGeneratorPanel.java | 2 +- .../dbentity/main/PKDBGeneratorPanel.java | 2 +- .../embeddable/main/EmbeddableMainView.java | 2 +- .../attrinfo/ObjAttributeInfoDialog.java | 6 +- .../DuplicatedAttributesDialog.java | 2 +- .../objentity/main/ObjEntityMainView.java | 3 +- .../relinfo/ObjRelationshipInfoDialog.java | 4 +- .../editor/procedure/ProcedureQueryView.java | 6 +- .../editor/procedure/ProcedureTab.java | 2 +- .../query/ObjectQueryPropertiesPanel.java | 4 +- .../editor/query/RawQueryPropertiesPanel.java | 6 +- .../editor/query/ejbql/EjbqlQueryMainTab.java | 4 +- .../ejbql/EjbqlQueryPropertiesPanel.java | 6 +- .../query/selectquery/SelectQueryMainTab.java | 4 +- .../query/sqltemplate/SQLTemplateMainTab.java | 6 +- .../sqltemplate/SQLTemplateScriptsTab.java | 4 +- .../validator/ProjectValidatorDialog.java | 22 ++-- .../ui/validation/ValidationDialog.java | 2 +- 67 files changed, 502 insertions(+), 284 deletions(-) create mode 100644 modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/FlatLafLayoutStyle.java delete mode 100644 modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/mac/MacToolBarSeparatorUI.java create mode 100644 modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/AddCgenConfigAction.java create mode 100644 modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/EditCgenConfigAction.java create mode 100644 modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/action/RemoveCgenConfigAction.java 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/GenericUIInitializer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericUIInitializer.java index b474d6aa93..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 @@ -19,6 +19,8 @@ package org.apache.cayenne.modeler.platform.generic; 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; @@ -30,6 +32,7 @@ public class GenericUIInitializer implements UIInitializer { @Override public void beforeSwingLaunch() { FlatLightLaf.setup(); + LayoutStyle.setCurrent(FlatLafLayoutStyle.INSTANCE); // override some default styles and colors overrideUIDefaults(); } @@ -37,27 +40,30 @@ public void beforeSwingLaunch() { private void overrideUIDefaults() { Color greyHighlight = new Color(0xCBCBCB); - 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)); + 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 34463f3b70..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 @@ -19,7 +19,9 @@ 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; @@ -39,6 +41,7 @@ public class MacUIInitializer implements UIInitializer { @Override public void beforeSwingLaunch() { 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"); @@ -48,13 +51,13 @@ public void beforeSwingLaunch() { 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/WinUIInitializer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinUIInitializer.java index 0e1f7b439c..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 @@ -19,6 +19,8 @@ package org.apache.cayenne.modeler.platform.win; 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; @@ -30,6 +32,7 @@ public class WinUIInitializer implements UIInitializer { @Override public void beforeSwingLaunch() { FlatLightLaf.setup(); + LayoutStyle.setCurrent(FlatLafLayoutStyle.INSTANCE); // override some default styles and colors overrideUIDefaults(); } @@ -61,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));