📄 wfpanel.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Business Solution
* The Initial Developer of the Original Code is Jorg Janke and ComPiere, Inc.
* Portions created by Jorg Janke are Copyright (C) 1999-2002 Jorg Janke, parts
* created by ComPiere are Copyright (C) ComPiere, Inc.; All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.apps.wf;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import java.beans.*;
import org.compiere.apps.*;
import org.compiere.util.*;
import org.compiere.model.*;
import org.compiere.plaf.*;
import org.compiere.swing.*;
/**
* WorkFlow Panel
*
* @author Jorg Janke
* @version $Id: WFPanel.java,v 1.5 2003/02/14 06:44:14 jjanke Exp $
*/
public class WFPanel extends CPanel
implements PropertyChangeListener, ActionListener, MouseListener
{
/**
* Create Workflow Panel
* @param menu menu
*/
public WFPanel (AMenu menu)
{
m_menu = menu;
try
{
jbInit();
}
catch(Exception e)
{
Log.error("WFPanel", e);
}
} // WFPanel
/** Menu Link */
private AMenu m_menu = null;
/** Workflow Model */
private MWorkflow m_wf = null;
/** Context */
private Properties m_ctx = Env.getCtx();
/** Active Node */
private WFNode m_activeNode = null;
/** ReadWrite Mode (see WFNode) */
private boolean m_readWrite = "Y".equals(Env.getContext(m_ctx, "#CompiereSys"));
// IO
private BorderLayout mainLayout = new BorderLayout();
private JScrollPane centerScrollPane = new JScrollPane();
private CPanel southPanel = new CPanel();
private CPanel centerPanel = new CPanel();
private BorderLayout southLayout = new BorderLayout();
private JScrollPane infoScrollPane = new JScrollPane();
private JTextPane infoTextPane = new JTextPane();
private CPanel buttonPanel = new CPanel();
private JButton wfStart = new JButton();
private JButton wfBack = new JButton();
private JButton wfNext = new JButton();
private JButton wfEnd = new JButton();
//
private JPopupMenu popup = new JPopupMenu();
private JMenuItem mZoom = new JMenuItem (Msg.getMsg(Env.getCtx(), "Zoom"));
private JMenuItem mRefresh = new JMenuItem (Msg.getMsg(Env.getCtx(), "Refresh"));
private JMenuItem mResetLayout = new JMenuItem ("Reset Layout");
private JMenuItem mSaveLayout = new JMenuItem ("Save Layout");
/**
* Static Init
* <pre>
* centerScrollPane
* centerPanel
* south Panel
* infoScrollPane
* buttonPanel
* </pre>
* @throws Exception
*/
private void jbInit() throws Exception
{
this.setLayout(mainLayout);
CompiereColor.setBackground(this);
southPanel.setLayout(southLayout);
// Center
this.add(centerScrollPane, BorderLayout.CENTER);
centerPanel.setLayout (new WFLayoutManager());
centerPanel.setBorder (BorderFactory.createEmptyBorder(5,5,5,5));
centerPanel.setBackground(new Color(236,236,236));
centerPanel.setOpaque(false);
centerScrollPane.getViewport().add(centerPanel, null);
// Info
infoScrollPane.getViewport().add(infoTextPane, null);
infoScrollPane.setPreferredSize(new Dimension(200, 140));
infoTextPane.setBackground(CompierePLAF.getFieldBackground_Inactive());
infoTextPane.setEditable(false);
infoTextPane.setRequestFocusEnabled(false);
infoTextPane.setContentType("text/html");
// South
this.add(southPanel, BorderLayout.SOUTH);
southPanel.add(infoScrollPane, BorderLayout.CENTER);
southPanel.add(buttonPanel, BorderLayout.SOUTH);
//
wfStart.setIcon(Env.getImageIcon("wfStart24.gif"));
wfStart.setMargin(new Insets(0, 10, 0, 10));
wfStart.setRequestFocusEnabled(false);
wfStart.addActionListener(this);
wfStart.setToolTipText(Msg.getMsg(m_ctx, "WFStart"));
wfBack.setIcon(Env.getImageIcon("wfBack24.gif"));
wfBack.setMargin(new Insets(0, 15, 0, 15));
wfBack.setRequestFocusEnabled(false);
wfBack.addActionListener(this);
wfBack.setToolTipText(Msg.getMsg(m_ctx, "WFPrevious"));
wfNext.setIcon(Env.getImageIcon("wfNext24.gif"));
wfNext.setMargin(new Insets(0, 15, 0, 15));
wfNext.setRequestFocusEnabled(false);
wfNext.addActionListener(this);
wfNext.setToolTipText(Msg.getMsg(m_ctx, "WFNext"));
wfEnd.setIcon(Env.getImageIcon("wfEnd24.gif"));
wfEnd.setMargin(new Insets(0, 10, 0, 10));
wfEnd.setRequestFocusEnabled(false);
wfEnd.addActionListener(this);
wfEnd.setToolTipText(Msg.getMsg(m_ctx, "WFExit"));
buttonPanel.add(wfStart, null);
buttonPanel.add(wfBack, null);
buttonPanel.add(wfNext, null);
buttonPanel.add(wfEnd, null);
// Popup Menu
centerPanel.addMouseListener(this);
mZoom.addActionListener(this);
popup.add(mZoom);
mRefresh.addActionListener(this);
popup.add(mRefresh);
if (m_readWrite)
{
mResetLayout.addActionListener(this);
popup.add(mResetLayout);
mSaveLayout.addActionListener(this);
popup.add(mSaveLayout);
}
} // jbInit
/*************************************************************************/
/**
* Load Workflow & Nodes
* @param AD_Workflow_ID ID
*/
public void load (int AD_Workflow_ID)
{
Log.trace(Log.l4_Data, "WFPanel.load " + AD_Workflow_ID);
m_wf = new MWorkflow (Env.getCtx(), AD_Workflow_ID);
centerPanel.removeAll();
// Add Nodes for Paint
MWFNode[] nodes = m_wf.getNodes(true);
for (int i = 0; i < nodes.length; i++)
{
WFNode wf = new WFNode(nodes[i]);
wf.addPropertyChangeListener(WFNode.PROPERTY_SELECTED, this);
centerPanel.add (wf);
// Add Lines
MWFNodeNext[] nexts = nodes[i].getNextNodes();
for (int j = 0; j < nexts.length; j++)
centerPanel.add (new WFLine (nexts[j]));
}
// Info Text
StringBuffer msg = new StringBuffer("<HTML>");
msg.append("<H2>").append(m_wf.getName(true)).append("</H2>");
String s = m_wf.getDescription(true);
if (s != null && s.length() > 0)
msg.append("<B>").append(s).append("</B>");
s = m_wf.getHelp(true);
if (s != null && s.length() > 0)
msg.append("<BR>").append(s);
msg.append("</HTML>");
infoTextPane.setText (msg.toString());
infoTextPane.setCaretPosition(0);
// Layout
centerPanel.validate();
centerPanel.repaint();
validate();
} // load
/**
* Property Change Listener
* @param e event
*/
public void propertyChange (PropertyChangeEvent e)
{
start ((WFNode)e.getSource());
} // propertyChange
/**
* Action Listener
* @param e event
*/
public void actionPerformed (ActionEvent e)
{
if (m_wf == null)
return;
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
// Popup
if (e.getSource() == mZoom)
zoom();
else if (e.getSource() == mRefresh)
load(m_wf.getAD_Workflow_ID());
else if (e.getSource() == mSaveLayout)
m_wf.save();
else if (e.getSource() == mResetLayout)
resetLayout();
// Buttons
else if (e.getSource() == wfStart || m_activeNode == null)
start (m_wf.getAD_WF_Node_ID());
else if (e.getSource() == wfBack)
start (m_wf.getPrevious (m_activeNode.getAD_WF_Node_ID()));
else if (e.getSource() == wfNext)
start (m_wf.getNext (m_activeNode.getAD_WF_Node_ID()));
else if (e.getSource() == wfEnd)
start (m_wf.getLast (m_activeNode.getAD_WF_Node_ID()));
//
setCursor(Cursor.getDefaultCursor());
} // actionPerformed
/**
* Display Menu
* @param e event
*/
public void mouseClicked (MouseEvent e)
{
if (SwingUtilities.isRightMouseButton(e))
{
popup.show(centerPanel, e.getX(), e.getY());
}
} // mouseClicked
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
/*************************************************************************/
/**
* Start Node
* @param node node
*/
public void start (WFNode node)
{
if (m_activeNode != null)
m_activeNode.setSelected(false);
// Prepare
node.setSelected(true);
MWFNode model = node.getModel();
// Info Text
StringBuffer msg = new StringBuffer("<HTML>");
msg.append("<H2>").append(model.getName(true)).append("</H2>");
String s = model.getDescription(true);
if (s != null && s.length() > 0)
msg.append("<B>").append(s).append("</B>");
s = model.getHelp(true);
if (s != null && s.length() > 0)
msg.append("<BR>").append(s);
msg.append("</HTML>");
infoTextPane.setText (msg.toString());
infoTextPane.setCaretPosition(0);
// Load Window
(new AMenuStartItem(model.getAD_WF_Node_ID(), false, model.getName(true), m_menu)).start(); // async load
//
m_activeNode = node;
//
boolean first = m_wf.isFirst(m_activeNode.getAD_WF_Node_ID());
boolean last = m_wf.isLast(m_activeNode.getAD_WF_Node_ID());
wfStart.setEnabled(!first);
wfBack.setEnabled(!first);
wfNext.setEnabled(!last);
wfEnd.setEnabled(!last);
} // start
/**
* Start Node
* @param AD_WF_Node_ID node id
*/
public void start (int AD_WF_Node_ID)
{
if (AD_WF_Node_ID == 0)
return;
//
for (int i = 0; i < centerPanel.getComponentCount(); i++)
{
Component comp = centerPanel.getComponent(i);
if (comp instanceof WFNode)
{
WFNode node = (WFNode)comp;
if (node.getAD_WF_Node_ID() == AD_WF_Node_ID)
{
start (node);
return;
}
} // WFNode
} // for all components
} // start
/**
* Reset Layout
*/
public void resetLayout()
{
Point p0 = new Point (0,0);
for (int i = 0; i < centerPanel.getComponentCount(); i++)
{
Component comp = centerPanel.getComponent(i);
comp.setLocation(p0);
}
centerPanel.doLayout();
} // resetLayout
/**
* Zoom to WorkFlow
*/
private void zoom()
{
int AD_Window_ID = 113;
MQuery query = null;
if (m_wf != null)
query = MQuery.getEqualQuery("AD_Workflow_ID", m_wf.getAD_Workflow_ID());
AWindow frame = new AWindow();
if (!frame.initWindow (AD_Window_ID, query, false))
return;
AEnv.showCenterScreen(frame);
frame = null;
} // zoom
/**
* String Representation
* @return info
*/
public String toString()
{
StringBuffer sb = new StringBuffer("WFPanel[");
if (m_wf != null)
sb.append(m_wf.getAD_Workflow_ID());
sb.append("]");
return sb.toString();
} // toString
/*************************************************************************/
/**
* Test
* @param args ignored
*/
public static void main (String[] args)
{
org.compiere.Compiere.startupClient();
JFrame jf = new JFrame ("WF");
WFPanel pp = new WFPanel(null);
pp.load(101);
jf.getContentPane().add (pp);
jf.pack();
jf.show();
} // main
} // WFPanel
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -