From 7e37546384a4cdb382f86d437f1af3a8d8af349f Mon Sep 17 00:00:00 2001 From: Mikhail Dzianishchyts Date: Fri, 26 Jun 2026 14:45:50 +0300 Subject: [PATCH 1/5] 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/5] 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)); From bf6f2c8a87b70fff0460a72dfd360922ef0b1b7f Mon Sep 17 00:00:00 2001 From: Mikhail Dzianishchyts Date: Thu, 9 Jul 2026 12:18:39 +0300 Subject: [PATCH 3/5] Refactor UI initializers --- .../java/org/apache/cayenne/modeler/Main.java | 8 +-- .../{generic => }/GenericUIInitializer.java | 50 ++++++------- .../platform/mac/MacUIInitializer.java | 38 +--------- .../platform/win/WinUIInitializer.java | 71 ------------------- 4 files changed, 31 insertions(+), 136 deletions(-) rename modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/{generic => }/GenericUIInitializer.java (78%) delete mode 100644 modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinUIInitializer.java diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java index 9a3c3c0072..abf95d348d 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java @@ -29,11 +29,9 @@ public static void main(String[] args) { } static UIInitializer loadPlatformInitializer(OperatingSystem os) { - String fqn = switch (os) { - case MAC_OS -> "org.apache.cayenne.modeler.platform.mac.MacUIInitializer"; - case WINDOWS -> "org.apache.cayenne.modeler.platform.win.WinUIInitializer"; - case OTHER -> "org.apache.cayenne.modeler.platform.generic.GenericUIInitializer"; - }; + String fqn = os == OperatingSystem.MAC_OS + ? "org.apache.cayenne.modeler.platform.mac.MacUIInitializer" + : "org.apache.cayenne.modeler.platform.GenericUIInitializer"; try { return (UIInitializer) Class.forName(fqn).getDeclaredConstructor().newInstance(); 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/GenericUIInitializer.java similarity index 78% rename from modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/generic/GenericUIInitializer.java rename to modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/GenericUIInitializer.java index 0e9b8caf04..00dc9e0771 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/GenericUIInitializer.java @@ -16,12 +16,10 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.modeler.platform.generic; +package org.apache.cayenne.modeler.platform; import com.formdev.flatlaf.FlatLightLaf; import com.jgoodies.forms.util.LayoutStyle; -import org.apache.cayenne.modeler.platform.FlatLafLayoutStyle; -import org.apache.cayenne.modeler.platform.UIInitializer; import org.apache.cayenne.modeler.toolkit.icon.IconFactory; import javax.swing.*; @@ -37,33 +35,35 @@ public void beforeSwingLaunch() { overrideUIDefaults(); } - private void overrideUIDefaults() { - Color greyHighlight = new Color(0xCBCBCB); + protected void overrideUIDefaults() { + Color darkGrey = new Color(203, 203, 203); - 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("RadioButtonMenuItem.selectionBackground", greyHighlight); - UIManager.put("MenuItem.selectionForeground", Color.BLACK); + UIManager.put("CheckBoxMenuItem.selectionBackground", darkGrey); UIManager.put("CheckBoxMenuItem.selectionForeground", Color.BLACK); + UIManager.put("MenuItem.selectionBackground", darkGrey); + UIManager.put("MenuItem.selectionForeground", Color.BLACK); + UIManager.put("RadioButtonMenuItem.selectionBackground", darkGrey); UIManager.put("RadioButtonMenuItem.selectionForeground", Color.BLACK); - UIManager.put("ToolBar.buttonMargin", new Insets(4, 8, 4, 8)); + UIManager.put("ScrollPane.border", BorderFactory.createEmptyBorder()); + UIManager.put("Separator.background", darkGrey); + UIManager.put("Separator.foreground", darkGrey); + UIManager.put("Separator.opaque", Boolean.TRUE); + UIManager.put("SplitPane.background", darkGrey); + UIManager.put("SplitPane.border", BorderFactory.createEmptyBorder()); + UIManager.put("Table.focusCellHighlightBorder", BorderFactory.createEmptyBorder()); + UIManager.put("Table.scrollPaneBorder", BorderFactory.createEmptyBorder()); + UIManager.put("Table.selectionBackground", darkGrey); + UIManager.put("Table.selectionForeground", Color.BLACK); 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("ToolBar.buttonMargin", new Insets(4, 8, 4, 8)); + UIManager.put("Tree.collapsedIcon", IconFactory.buildIcon("icon-arrow-closed.png")); + UIManager.put("Tree.drawDashedFocusIndicator", Boolean.FALSE); + UIManager.put("Tree.expandedIcon", IconFactory.buildIcon("icon-arrow-open.png")); + UIManager.put("Tree.paintLines", Boolean.FALSE); + UIManager.put("Tree.selectionBackground", darkGrey); + UIManager.put("Tree.selectionBorderColor", UIManager.get("Tree.selectionBackground")); + UIManager.put("Tree.selectionForeground", Color.BLACK); } } 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 21c32fe149..92df488b90 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,12 +18,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.platform.GenericUIInitializer; import org.apache.cayenne.modeler.service.action.GlobalActions; -import org.apache.cayenne.modeler.platform.UIInitializer; import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooserFactory; import org.apache.cayenne.modeler.ui.action.AboutAction; import org.apache.cayenne.modeler.ui.action.ConfigurePreferencesAction; @@ -36,46 +33,17 @@ import java.util.HashSet; import java.util.Set; -public class MacUIInitializer implements UIInitializer { +public class MacUIInitializer extends GenericUIInitializer { @Override public void beforeSwingLaunch() { - FlatLightLaf.setup(); - LayoutStyle.setCurrent(FlatLafLayoutStyle.INSTANCE); + super.beforeSwingLaunch(); // 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 for the mac-specific UI Color lightGrey = new Color(0xEEEEEE); - Color darkGrey = new Color(225, 225, 225); - Border darkBorder = BorderFactory.createLineBorder(darkGrey); - 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()); - UIManager.put("SplitPane.background", darkGrey); - UIManager.put("Tree.rendererFillBackground", Boolean.TRUE); - UIManager.put("Tree.paintLines", Boolean.FALSE); - UIManager.put("ComboBox.background", Color.WHITE); - UIManager.put("ComboBox.selectionBackground", darkGrey); - UIManager.put("ComboBox.selectionForeground", Color.BLACK); - UIManager.put("CheckBox.background", Color.WHITE); - UIManager.put("Tree.background", Color.WHITE); - UIManager.put("Tree.selectionForeground", Color.BLACK); - UIManager.put("Tree.selectionBackground", lightGrey); - UIManager.put("Tree.selectionBorderColor", lightGrey); - UIManager.put("Table.selectionForeground", Color.BLACK); - UIManager.put("Table.selectionBackground", lightGrey); - UIManager.put("Table.focusCellHighlightBorder", BorderFactory.createEmptyBorder()); - UIManager.put("CheckBoxHeader.border", BorderFactory.createEmptyBorder(0, 9, 0, 0)); // MacOS BigSur needs additional style tweaking for the tabs active state MacOSVersion version = MacOSVersion.fromSystemProperties(); 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 deleted file mode 100644 index 870cd6aa25..0000000000 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/platform/win/WinUIInitializer.java +++ /dev/null @@ -1,71 +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 com.formdev.flatlaf.FlatLightLaf; -import com.jgoodies.forms.util.LayoutStyle; -import org.apache.cayenne.modeler.platform.FlatLafLayoutStyle; -import org.apache.cayenne.modeler.platform.UIInitializer; -import org.apache.cayenne.modeler.toolkit.icon.IconFactory; - -import javax.swing.*; -import java.awt.*; - -public class WinUIInitializer implements UIInitializer { - - @Override - public void beforeSwingLaunch() { - FlatLightLaf.setup(); - LayoutStyle.setCurrent(FlatLafLayoutStyle.INSTANCE); - // override some default styles and colors - overrideUIDefaults(); - } - - private void overrideUIDefaults() { - Color darkGrey = new Color(203, 203, 203); - - UIManager.put("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.drawDashedFocusIndicator", Boolean.FALSE); - UIManager.put("Tree.selectionBackground", darkGrey); - UIManager.put("Tree.selectionForeground", Color.BLACK); - UIManager.put("Tree.selectionBorderColor", UIManager.get("Tree.selectionBackground")); - UIManager.put("Table.selectionForeground", Color.BLACK); - UIManager.put("Table.selectionBackground", darkGrey); - 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("CheckBoxHeader.border", BorderFactory.createEmptyBorder(0, 15, 0, 0)); - UIManager.put("SplitPane.background", darkGrey); - UIManager.put("Separator.background", darkGrey); - UIManager.put("Separator.foreground", darkGrey); - UIManager.put("Separator.opaque", Boolean.TRUE); - UIManager.put("MenuItem.selectionBackground", darkGrey); - UIManager.put("CheckBoxMenuItem.selectionBackground", darkGrey); - UIManager.put("RadioButtonMenuItem.selectionBackground", darkGrey); - 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); - } -} From c428607d2a40f701589b9835fd5c54db5dc8f189 Mon Sep 17 00:00:00 2001 From: Mikhail Dzianishchyts Date: Thu, 9 Jul 2026 12:33:43 +0300 Subject: [PATCH 4/5] Legal tweaks --- .../resources/META-INF/cayenne/LICENSE.txt.vm | 205 ++++++++++++++++++ .../resources/META-INF/cayenne/NOTICE.txt.vm | 3 + .../modeler/platform/FlatLafLayoutStyle.java | 18 ++ 3 files changed, 226 insertions(+) diff --git a/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/LICENSE.txt.vm b/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/LICENSE.txt.vm index 450757a3cf..7353600fa9 100644 --- a/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/LICENSE.txt.vm +++ b/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/LICENSE.txt.vm @@ -642,6 +642,211 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +===================================================================== +FlatLaf License + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + ===================================================================== SLF4J License diff --git a/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/NOTICE.txt.vm b/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/NOTICE.txt.vm index e6b9a2c81c..ca47039701 100644 --- a/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/NOTICE.txt.vm +++ b/build-tools/cayenne-legal/src/main/resources/META-INF/cayenne/NOTICE.txt.vm @@ -29,4 +29,7 @@ GUI TOOLS * CayenneModeler includes JGraph library developed by JGraph Ltd (http://www.jgraph.com) + +* CayenneModeler includes FlatLaf library developed by FormDev Software GmbH. +(https://www.formdev.com/flatlaf/) #end \ No newline at end of file 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 index 0419b17e8a..8288ce2bad 100644 --- 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 @@ -1,3 +1,21 @@ +/***************************************************************** + * 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; import com.jgoodies.forms.layout.ConstantSize; From 7e572c273b71b462bf350aeccd11112c20f5d3f2 Mon Sep 17 00:00:00 2001 From: Mikhail Dzianishchyts Date: Thu, 9 Jul 2026 12:33:56 +0300 Subject: [PATCH 5/5] Clean up --- .../org/apache/cayenne/modeler/platform/UIInitializer.java | 1 - .../cayenne/modeler/toolkit/buttons/CMButtonPanel.java | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) 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 716522613b..dcfabd949f 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,7 +18,6 @@ ****************************************************************/ 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/toolkit/buttons/CMButtonPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/buttons/CMButtonPanel.java index a7e3631bb6..a14c147fa1 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 @@ -27,6 +27,7 @@ import java.awt.FlowLayout; import java.util.Collections; import java.util.Arrays; +import java.util.List; /** * A panel that lays out a row of right-aligned buttons, typically used at the bottom of a dialog. @@ -38,8 +39,8 @@ public CMButtonPanel(JButton... buttons) { setBorder(BorderFactory.createEmptyBorder(3, 20, 3, 7)); setLayout(new FlowLayout(FlowLayout.RIGHT)); - java.util.List buttonList = Arrays.asList(buttons); - if (LayoutStyle.getCurrent() != null && !LayoutStyle.getCurrent().isLeftToRightButtonOrder()) { + List buttonList = Arrays.asList(buttons); + if (!LayoutStyle.getCurrent().isLeftToRightButtonOrder()) { Collections.reverse(buttonList); } for (JButton button : buttonList) {