* [ 1639242 ] Inconsistent appearance of Process/Report Dialog

This commit is contained in:
Heng Sin Low 2007-01-29 08:48:54 +00:00
parent c7d5c58609
commit 7dd2dce38b
3 changed files with 289 additions and 0 deletions

View File

@ -1988,8 +1988,10 @@ public final class APanel extends CPanel
if (!cmd_save(true)) if (!cmd_save(true))
return; return;
// hengsin - [ 1639242 ] Inconsistent appearance of Process/Report Dialog
// globalqss - Add support for Don't ShowHelp option in Process // globalqss - Add support for Don't ShowHelp option in Process
// this code must be changed if integrated the parameters and help in only one window // this code must be changed if integrated the parameters and help in only one window
/*
MProcess pr = new MProcess(m_ctx, vButton.getProcess_ID(), null); MProcess pr = new MProcess(m_ctx, vButton.getProcess_ID(), null);
if (pr.getShowHelp() != null && pr.getShowHelp().equals("N")) { if (pr.getShowHelp() != null && pr.getShowHelp().equals("N")) {
startWOasking = true; startWOasking = true;
@ -1997,6 +1999,7 @@ public final class APanel extends CPanel
// end globalqss // end globalqss
// Ask user to start process, if Description and Help is not empty // Ask user to start process, if Description and Help is not empty
if (!startWOasking && !(vButton.getDescription().equals("") && vButton.getHelp().equals(""))) if (!startWOasking && !(vButton.getDescription().equals("") && vButton.getHelp().equals("")))
if (!ADialog.ask(m_curWindowNo, this, "StartProcess?", if (!ADialog.ask(m_curWindowNo, this, "StartProcess?",
// "<b><i>" + vButton.getText() + "</i></b><br>" + // "<b><i>" + vButton.getText() + "</i></b><br>" +
@ -2013,6 +2016,12 @@ public final class APanel extends CPanel
// Trx trx = Trx.get(Trx.createTrxName("AppsPanel"), true); // Trx trx = Trx.get(Trx.createTrxName("AppsPanel"), true);
ProcessCtl.process(this, m_curWindowNo, pi, null); // calls lockUI, unlockUI ProcessCtl.process(this, m_curWindowNo, pi, null); // calls lockUI, unlockUI
*/
ProcessModalDialog dialog = new ProcessModalDialog(m_ctx, Env.getWindow(m_curWindowNo), Env.getHeader(m_ctx, m_curWindowNo),
this, m_curWindowNo, vButton.getProcess_ID(), table_ID,
record_ID, startWOasking);
AEnv.showCenterWindow(Env.getWindow(m_curWindowNo), dialog);
} // actionButton } // actionButton

View File

@ -37,6 +37,7 @@ import org.compiere.wf.*;
* @author Jorg Janke * @author Jorg Janke
* @version $Id: ProcessCtl.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $ * @version $Id: ProcessCtl.java,v 1.2 2006/07/30 00:51:27 jjanke Exp $
* @author Low Heng Sin * @author Low Heng Sin
* - Added support for having description and parameter in one dialog
* - Added support to run db process remotely on server * - Added support to run db process remotely on server
*/ */
public class ProcessCtl extends Thread public class ProcessCtl extends Thread
@ -59,6 +60,7 @@ public class ProcessCtl extends Thread
* @param pi ProcessInfo process info * @param pi ProcessInfo process info
* @param trx Transaction * @param trx Transaction
* @return worker started ProcessCtl instance or null for workflow * @return worker started ProcessCtl instance or null for workflow
* @deprecated
*/ */
public static ProcessCtl process (ASyncProcess parent, int WindowNo, ProcessInfo pi, Trx trx) public static ProcessCtl process (ASyncProcess parent, int WindowNo, ProcessInfo pi, Trx trx)
{ {

View File

@ -0,0 +1,278 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2007 Low Heng Sin *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.compiere.apps;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.Properties;
import java.util.logging.*;
import javax.swing.*;
import org.compiere.process.*;
import org.compiere.swing.*;
import org.compiere.util.*;
/**
* [ 1639242 ] Inconsistent appearance of Process/Report Dialog
*
* Modal Dialog to Start process.
* Displays information about the process
* and lets the user decide to start it
* and displays results (optionally print them).
* Calls ProcessCtl to execute.
* @author Low Heng Sin
* @author arboleda - globalqss
* - Implement ShowHelp option on processes and reports
*/
public class ProcessModalDialog extends CDialog
implements ActionListener
{
/**
* Dialog to start a process/report
* @param ctx
* @param parent
* @param title
* @param aProcess
* @param WindowNo
* @param AD_Process_ID
* @param tableId
* @param recordId
* @param autoStart
*/
public ProcessModalDialog (Properties ctx, Frame parent, String title,
ASyncProcess aProcess, int WindowNo, int AD_Process_ID,
int tableId, int recordId, boolean autoStart)
{
super(parent, title, true);
log.info("Process=" + AD_Process_ID );
m_ctx = ctx;
m_ASyncProcess = aProcess;
m_WindowNo = WindowNo;
m_AD_Process_ID = AD_Process_ID;
m_tableId = tableId;
m_recordId = recordId;
m_autoStart = autoStart;
try
{
jbInit();
init();
}
catch(Exception ex)
{
log.log(Level.SEVERE, "", ex);
}
} // ProcessDialog
private ASyncProcess m_ASyncProcess;
private int m_WindowNo;
private Properties m_ctx;
private int m_tableId;
private int m_recordId;
private boolean m_autoStart;
private int m_AD_Process_ID;
private String m_Name = null;
private StringBuffer m_messageText = new StringBuffer();
private String m_ShowHelp = null; // Determine if a Help Process Window is shown
/** Logger */
private static CLogger log = CLogger.getCLogger(ProcessDialog.class);
//
private CPanel dialog = new CPanel()
{
public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
Dimension m = getMinimumSize();
if ( d.height < m.height || d.width < m.width ) {
Dimension d1 = new Dimension();
d1.height = Math.max(d.height, m.height);
d1.width = Math.max(d.width, m.width);
return d1;
} else
return d;
}
};
private BorderLayout mainLayout = new BorderLayout();
private ConfirmPanel southPanel = new ConfirmPanel(true);
private CButton bOK = null;
private JEditorPane message = new JEditorPane()
{
public Dimension getPreferredSize() {
Dimension d = super.getPreferredSize();
Dimension m = getMaximumSize();
if ( d.height > m.height || d.width > m.width ) {
Dimension d1 = new Dimension();
d1.height = Math.min(d.height, m.height);
d1.width = Math.min(d.width, m.width);
return d1;
} else
return d;
}
};
private JScrollPane messagePane = new JScrollPane(message);
private CPanel centerPanel = null;
private ProcessParameterPanel parameterPanel = null;
private JSeparator separator = new JSeparator();
private ProcessInfo m_pi = null;
/**
* Static Layout
* @throws Exception
*/
private void jbInit() throws Exception
{
dialog.setLayout(mainLayout);
dialog.setMinimumSize(new Dimension(500, 200));
southPanel.addActionListener(this);
bOK = southPanel.getOKButton();
//
message.setContentType("text/html");
message.setEditable(false);
message.setBackground(Color.white);
message.setFocusable(false);
getContentPane().add(dialog);
dialog.add(southPanel, BorderLayout.SOUTH);
dialog.add(messagePane, BorderLayout.NORTH);
messagePane.setBorder(null);
message.setMaximumSize(new Dimension(600, 300));
centerPanel = new CPanel();
centerPanel.setBorder(null);
centerPanel.setLayout(new BorderLayout());
dialog.add(centerPanel, BorderLayout.CENTER);
//
this.getRootPane().setDefaultButton(bOK);
} // jbInit
/**
* Set Visible
* (set focus to OK if visible)
* @param visible true if visible
*/
public void setVisible (boolean visible)
{
super.setVisible(visible);
if (visible) {
bOK.requestFocus();
}
} // setVisible
/**
* Dispose
*/
public void dispose()
{
super.dispose();
} // dispose
/**
* Dynamic Init
* @return true, if there is something to process (start from menu)
*/
public boolean init()
{
log.config("");
//
boolean trl = !Env.isBaseLanguage(m_ctx, "AD_Process");
String sql = "SELECT Name, Description, Help, IsReport, ShowHelp "
+ "FROM AD_Process "
+ "WHERE AD_Process_ID=?";
if (trl)
sql = "SELECT t.Name, t.Description, t.Help, p.IsReport, p.ShowHelp "
+ "FROM AD_Process p, AD_Process_Trl t "
+ "WHERE p.AD_Process_ID=t.AD_Process_ID"
+ " AND p.AD_Process_ID=? AND t.AD_Language=?";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, m_AD_Process_ID);
if (trl)
pstmt.setString(2, Env.getAD_Language(m_ctx));
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
m_Name = rs.getString(1);
m_ShowHelp = rs.getString(5);
//
m_messageText.append("<b>");
String s = rs.getString(2); // Description
if (rs.wasNull())
m_messageText.append(Msg.getMsg(m_ctx, "StartProcess?"));
else
m_messageText.append(s);
m_messageText.append("</b>");
s = rs.getString(3); // Help
if (!rs.wasNull())
m_messageText.append("<p>").append(s).append("</p>");
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
return false;
}
if (m_Name == null)
return false;
//
this.setTitle(m_Name);
message.setMargin(new Insets(10,10,10,10));
message.setText(m_messageText.toString());
// Move from APanel.actionButton
m_pi = new ProcessInfo(m_Name, m_AD_Process_ID, m_tableId, m_recordId);
m_pi.setAD_User_ID (Env.getAD_User_ID(Env.getCtx()));
m_pi.setAD_Client_ID(Env.getAD_Client_ID(Env.getCtx()));
parameterPanel = new ProcessParameterPanel(m_WindowNo, m_pi);
centerPanel.removeAll();
if (parameterPanel.init()) {
// hasfields
centerPanel.add(separator, BorderLayout.NORTH);
centerPanel.add(parameterPanel, BorderLayout.CENTER);
} else {
if (m_ShowHelp != null && m_ShowHelp.equals("N")) {
m_autoStart = true;
}
if (m_autoStart)
bOK.doClick(); // don't ask first click
}
dialog.revalidate();
return true;
} // init
/**
* ActionListener (Start)
* @param e ActionEvent
*/
public void actionPerformed (ActionEvent e)
{
if (e.getSource() == bOK)
{
ProcessCtl.process(m_ASyncProcess, m_WindowNo, parameterPanel, m_pi, null);
dispose();
}
else if (e.getSource() == southPanel.getCancelButton())
dispose();
} // actionPerformed
} // ProcessDialog