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=103832msg_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) {