diff --git a/org.adempiere.base-feature/model.generator.launch b/org.adempiere.base-feature/model.generator.launch index 0b9d94a0b6..dfb4e4a8b4 100644 --- a/org.adempiere.base-feature/model.generator.launch +++ b/org.adempiere.base-feature/model.generator.launch @@ -21,30 +21,20 @@ - + - + - - - - - - - - - - @@ -52,7 +42,6 @@ - @@ -66,10 +55,6 @@ - - - - @@ -93,18 +78,11 @@ - + - - - - - - - diff --git a/org.adempiere.base/src/org/adempiere/base/ModelGeneratorApplication.java b/org.adempiere.base/src/org/adempiere/base/ModelGeneratorApplication.java index ccf93848e2..9d8bb8bb4b 100644 --- a/org.adempiere.base/src/org/adempiere/base/ModelGeneratorApplication.java +++ b/org.adempiere.base/src/org/adempiere/base/ModelGeneratorApplication.java @@ -13,14 +13,20 @@ *****************************************************************************/ package org.adempiere.base; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.util.Map; +import javax.swing.JFrame; + import org.adempiere.util.ModelClassGenerator; import org.adempiere.util.ModelGeneratorDialog; import org.adempiere.util.ModelInterfaceGenerator; import org.compiere.Adempiere; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; +import org.osgi.framework.BundleException; +import org.osgi.framework.FrameworkUtil; /** * @author hengsin @@ -52,12 +58,30 @@ public class ModelGeneratorApplication implements IApplication { System.out.println("usage: ModelGenerator folder packageName tableEntityType tableName columnEntityType"); } else { ModelGeneratorDialog dialog = new ModelGeneratorDialog(); - dialog.setModal(true); + dialog.addWindowListener(new WindowAdapter() { + @Override + public void windowClosed(WindowEvent e) { + context.setResult(IApplication.EXIT_OK, ModelGeneratorApplication.this); + try { + // async stop https://www.eclipse.org/forums/index.php?t=msg&th=31999&goto=103832&#msg_103832 + // can cast getBundle(0) to org.osgi.framework.launch.Framework in case want more + FrameworkUtil.getBundle(ModelGeneratorApplication.class).getBundleContext().getBundle(0).stop(); + } catch (BundleException be) { + System.exit(0); + } + } + + }); + //dialog.setModal(true); + dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); dialog.pack(); dialog.setLocationRelativeTo(null); dialog.setVisible(true); + } - return IApplication.EXIT_OK; + + // async stop on close window + return IApplicationContext.EXIT_ASYNC_RESULT; } /* (non-Javadoc) diff --git a/org.adempiere.base/src/org/adempiere/util/ModelGeneratorDialog.java b/org.adempiere.base/src/org/adempiere/util/ModelGeneratorDialog.java index b82661496a..bb7844e0e4 100644 --- a/org.adempiere.base/src/org/adempiere/util/ModelGeneratorDialog.java +++ b/org.adempiere.base/src/org/adempiere/util/ModelGeneratorDialog.java @@ -15,6 +15,8 @@ package org.adempiere.util; import java.awt.BorderLayout; import java.awt.Cursor; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Insets; import java.awt.Panel; @@ -24,8 +26,8 @@ import java.io.File; import javax.swing.JButton; import javax.swing.JCheckBox; -import javax.swing.JDialog; import javax.swing.JFileChooser; +import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; @@ -37,7 +39,7 @@ import org.compiere.Adempiere; * @author hengsin * */ -public class ModelGeneratorDialog extends JDialog implements ActionListener { +public class ModelGeneratorDialog extends JFrame implements ActionListener { /** * default generated serial version Id @@ -63,7 +65,7 @@ public class ModelGeneratorDialog extends JDialog implements ActionListener { this.getContentPane().add(confirmPanel, BorderLayout.SOUTH); Panel mainPanel = new Panel(); this.getContentPane().add(mainPanel, BorderLayout.CENTER); - mainPanel.setLayout(new GridLayout(6, 2)); + mainPanel.setLayout(new GridBagLayout()); Panel filePanel = new Panel(); filePanel.setLayout(new BorderLayout()); @@ -73,30 +75,30 @@ public class ModelGeneratorDialog extends JDialog implements ActionListener { bFolder = new JButton("..."); bFolder.setMargin(new Insets(0, 0, 0, 0)); filePanel.add(bFolder, BorderLayout.EAST); - mainPanel.add(new JLabel("Source Folder")); - mainPanel.add(filePanel); + mainPanel.add(new JLabel("Source Folder"), makeGbc(0, 0)); + mainPanel.add(filePanel, makeGbc(1, 0)); bFolder.addActionListener(this); - mainPanel.add(new JLabel("Package Name")); + mainPanel.add(new JLabel("Package Name"), makeGbc(0, 1)); fPackageName = new JTextField("org.compiere.model"); - mainPanel.add(fPackageName); + mainPanel.add(fPackageName, makeGbc(1, 1)); - mainPanel.add(new JLabel("Table Name")); + mainPanel.add(new JLabel("Table Name"), makeGbc(0, 2)); fTableName = new JTextField("AD_ReplaceThis%"); - mainPanel.add(fTableName); + mainPanel.add(fTableName, makeGbc(1, 2)); - mainPanel.add(new JLabel("Table Entity Type")); + mainPanel.add(new JLabel("Table Entity Type"), makeGbc(0, 3)); fEntityType = new JTextField("D"); - mainPanel.add(fEntityType); + mainPanel.add(fEntityType, makeGbc(1, 3)); - mainPanel.add(new JLabel("Column Entity Type")); + mainPanel.add(new JLabel("Column Entity Type"), makeGbc(0, 4)); fColumnEntityType = new JTextField(""); - mainPanel.add(fColumnEntityType); + mainPanel.add(fColumnEntityType, makeGbc(1, 4)); Panel chkPanel = new Panel(); chkPanel.setLayout(new GridLayout(1, 2)); - mainPanel.add(new JLabel("")); - mainPanel.add(chkPanel); + mainPanel.add(new JLabel(""), makeGbc(0, 5)); + mainPanel.add(chkPanel, makeGbc(1, 5)); fGenerateInterface = new JCheckBox("Generate Interface"); fGenerateInterface.setSelected(true); chkPanel.add(fGenerateInterface); @@ -112,6 +114,20 @@ public class ModelGeneratorDialog extends JDialog implements ActionListener { bCancel.addActionListener(this); } + private GridBagConstraints makeGbc(int x, int y) { + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridwidth = 1; + gbc.gridheight = 1; + gbc.gridx = x; + gbc.gridy = y; + gbc.weightx = x; + gbc.weighty = 1.0; + gbc.insets = new Insets(2, 2, 2, 2); + gbc.anchor = (x == 0) ? GridBagConstraints.LINE_START : GridBagConstraints.LINE_END; + gbc.fill = GridBagConstraints.HORIZONTAL; + return gbc; + } + @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == bGenerate) {