1 14 package org.compiere.apps.wf; 15 16 import java.awt.*; 17 import java.awt.event.*; 18 import javax.swing.*; 19 import javax.swing.event.*; 20 import java.util.*; 21 import java.beans.*; 22 23 import org.compiere.apps.*; 24 import org.compiere.util.*; 25 import org.compiere.model.*; 26 import org.compiere.plaf.*; 27 import org.compiere.swing.*; 28 29 35 public class WFPanel extends CPanel 36 implements PropertyChangeListener, ActionListener, MouseListener 37 { 38 42 public WFPanel (AMenu menu) 43 { 44 m_menu = menu; 45 try 46 { 47 jbInit(); 48 } 49 catch(Exception e) 50 { 51 Log.error("WFPanel", e); 52 } 53 } 55 56 private AMenu m_menu = null; 57 58 59 private MWorkflow m_wf = null; 60 61 private Properties m_ctx = Env.getCtx(); 62 63 private WFNode m_activeNode = null; 64 65 private boolean m_readWrite = Ini.getPropertyBool(Ini.P_COMPIERESYS); 66 67 private BorderLayout mainLayout = new BorderLayout(); 69 private JScrollPane centerScrollPane = new JScrollPane(); 70 private CPanel southPanel = new CPanel(); 71 private CPanel centerPanel = new CPanel(); 72 private BorderLayout southLayout = new BorderLayout(); 73 private JScrollPane infoScrollPane = new JScrollPane(); 74 private JTextPane infoTextPane = new JTextPane(); 75 private CPanel buttonPanel = new CPanel(); 76 private JButton wfStart = new JButton(); 77 private JButton wfBack = new JButton(); 78 private JButton wfNext = new JButton(); 79 private JButton wfEnd = new JButton(); 80 private JPopupMenu popup = new JPopupMenu(); 82 private JMenuItem mZoom = new JMenuItem (Msg.getMsg(Env.getCtx(), "Zoom")); 83 private JMenuItem mRefresh = new JMenuItem (Msg.getMsg(Env.getCtx(), "Refresh")); 84 private JMenuItem mResetLayout = new JMenuItem ("Reset Layout"); 85 private JMenuItem mSaveLayout = new JMenuItem ("Save Layout"); 86 87 98 private void jbInit() throws Exception 99 { 100 this.setLayout(mainLayout); 101 CompiereColor.setBackground(this); 102 southPanel.setLayout(southLayout); 103 this.add(centerScrollPane, BorderLayout.CENTER); 105 centerPanel.setLayout (new WFLayoutManager()); 106 centerPanel.setBorder (BorderFactory.createEmptyBorder(5,5,5,5)); 107 centerPanel.setBackground(new Color(236,236,236)); 108 centerPanel.setOpaque(false); 109 centerScrollPane.getViewport().add(centerPanel, null); 110 infoScrollPane.getViewport().add(infoTextPane, null); 112 infoScrollPane.setPreferredSize(new Dimension(200, 140)); 113 infoTextPane.setBackground(CompierePLAF.getFieldBackground_Inactive()); 114 infoTextPane.setEditable(false); 115 infoTextPane.setRequestFocusEnabled(false); 116 infoTextPane.setContentType("text/html"); 117 this.add(southPanel, BorderLayout.SOUTH); 119 southPanel.add(infoScrollPane, BorderLayout.CENTER); 120 southPanel.add(buttonPanel, BorderLayout.SOUTH); 121 wfStart.setIcon(Env.getImageIcon("wfStart24.gif")); 123 wfStart.setMargin(new Insets(0, 10, 0, 10)); 124 wfStart.setRequestFocusEnabled(false); 125 wfStart.addActionListener(this); 126 wfStart.setToolTipText(Msg.getMsg(m_ctx, "WFStart")); 127 wfBack.setIcon(Env.getImageIcon("wfBack24.gif")); 128 wfBack.setMargin(new Insets(0, 15, 0, 15)); 129 wfBack.setRequestFocusEnabled(false); 130 wfBack.addActionListener(this); 131 wfBack.setToolTipText(Msg.getMsg(m_ctx, "WFPrevious")); 132 wfNext.setIcon(Env.getImageIcon("wfNext24.gif")); 133 wfNext.setMargin(new Insets(0, 15, 0, 15)); 134 wfNext.setRequestFocusEnabled(false); 135 wfNext.addActionListener(this); 136 wfNext.setToolTipText(Msg.getMsg(m_ctx, "WFNext")); 137 wfEnd.setIcon(Env.getImageIcon("wfEnd24.gif")); 138 wfEnd.setMargin(new Insets(0, 10, 0, 10)); 139 wfEnd.setRequestFocusEnabled(false); 140 wfEnd.addActionListener(this); 141 wfEnd.setToolTipText(Msg.getMsg(m_ctx, "WFExit")); 142 buttonPanel.add(wfStart, null); 143 buttonPanel.add(wfBack, null); 144 buttonPanel.add(wfNext, null); 145 buttonPanel.add(wfEnd, null); 146 147 centerPanel.addMouseListener(this); 149 mZoom.addActionListener(this); 150 popup.add(mZoom); 151 mRefresh.addActionListener(this); 152 popup.add(mRefresh); 153 if (m_readWrite) 154 { 155 mResetLayout.addActionListener(this); 156 popup.add(mResetLayout); 157 mSaveLayout.addActionListener(this); 158 popup.add(mSaveLayout); 159 } 160 } 162 163 164 168 public void load (int AD_Workflow_ID) 169 { 170 Log.trace(Log.l4_Data, "WFPanel.load " + AD_Workflow_ID); 171 m_wf = new MWorkflow (Env.getCtx(), AD_Workflow_ID); 172 centerPanel.removeAll(); 173 MWFNode[] nodes = m_wf.getNodes(true); 175 for (int i = 0; i < nodes.length; i++) 176 { 177 WFNode wf = new WFNode(nodes[i]); 178 wf.addPropertyChangeListener(WFNode.PROPERTY_SELECTED, this); 179 centerPanel.add (wf); 180 MWFNodeNext[] nexts = nodes[i].getNextNodes(); 182 for (int j = 0; j < nexts.length; j++) 183 centerPanel.add (new WFLine (nexts[j])); 184 } 185 StringBuffer msg = new StringBuffer ("<HTML>"); 187 msg.append("<H2>").append(m_wf.getName(true)).append("</H2>"); 188 String s = m_wf.getDescription(true); 189 if (s != null && s.length() > 0) 190 msg.append("<B>").append(s).append("</B>"); 191 s = m_wf.getHelp(true); 192 if (s != null && s.length() > 0) 193 msg.append("<BR>").append(s); 194 msg.append("</HTML>"); 195 infoTextPane.setText (msg.toString()); 196 infoTextPane.setCaretPosition(0); 197 198 centerPanel.validate(); 200 centerPanel.repaint(); 201 validate(); 202 } 204 208 public void propertyChange (PropertyChangeEvent e) 209 { 210 start ((WFNode)e.getSource()); 211 } 213 217 public void actionPerformed (ActionEvent e) 218 { 219 if (m_wf == null) 220 return; 221 222 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 223 if (e.getSource() == mZoom) 225 zoom(); 226 else if (e.getSource() == mRefresh) 227 load(m_wf.getAD_Workflow_ID()); 228 else if (e.getSource() == mSaveLayout) 229 m_wf.save(); 230 else if (e.getSource() == mResetLayout) 231 resetLayout(); 232 else if (e.getSource() == wfStart || m_activeNode == null) 234 start (m_wf.getAD_WF_Node_ID()); 235 else if (e.getSource() == wfBack) 236 start (m_wf.getPrevious (m_activeNode.getAD_WF_Node_ID())); 237 else if (e.getSource() == wfNext) 238 start (m_wf.getNext (m_activeNode.getAD_WF_Node_ID())); 239 else if (e.getSource() == wfEnd) 240 start (m_wf.getLast (m_activeNode.getAD_WF_Node_ID())); 241 setCursor(Cursor.getDefaultCursor()); 243 } 245 249 public void mouseClicked (MouseEvent e) 250 { 251 if (SwingUtilities.isRightMouseButton(e)) 252 { 253 popup.show(centerPanel, e.getX(), e.getY()); 254 } 255 } public void mousePressed(MouseEvent e) {} 257 public void mouseReleased(MouseEvent e) {} 258 public void mouseEntered(MouseEvent e) {} 259 public void mouseExited(MouseEvent e) {} 260 261 262 263 267 public void start (WFNode node) 268 { 269 if (m_activeNode != null) 270 m_activeNode.setSelected(false); 271 node.setSelected(true); 273 MWFNode model = node.getModel(); 274 StringBuffer msg = new StringBuffer ("<HTML>"); 276 msg.append("<H2>").append(model.getName(true)).append("</H2>"); 277 String s = model.getDescription(true); 278 if (s != null && s.length() > 0) 279 msg.append("<B>").append(s).append("</B>"); 280 s = model.getHelp(true); 281 if (s != null && s.length() > 0) 282 msg.append("<BR>").append(s); 283 msg.append("</HTML>"); 284 infoTextPane.setText (msg.toString()); 285 infoTextPane.setCaretPosition(0); 286 287 (new AMenuStartItem(model.getAD_WF_Node_ID(), false, model.getName(true), m_menu)).start(); m_activeNode = node; 291 boolean first = m_wf.isFirst(m_activeNode.getAD_WF_Node_ID()); 293 boolean last = m_wf.isLast(m_activeNode.getAD_WF_Node_ID()); 294 wfStart.setEnabled(!first); 295 wfBack.setEnabled(!first); 296 wfNext.setEnabled(!last); 297 wfEnd.setEnabled(!last); 298 } 300 304 public void start (int AD_WF_Node_ID) 305 { 306 if (AD_WF_Node_ID == 0) 307 return; 308 for (int i = 0; i < centerPanel.getComponentCount(); i++) 310 { 311 Component comp = centerPanel.getComponent(i); 312 if (comp instanceof WFNode) 313 { 314 WFNode node = (WFNode)comp; 315 if (node.getAD_WF_Node_ID() == AD_WF_Node_ID) 316 { 317 start (node); 318 return; 319 } 320 } } } 324 327 public void resetLayout() 328 { 329 Point p0 = new Point (0,0); 330 for (int i = 0; i < centerPanel.getComponentCount(); i++) 331 { 332 Component comp = centerPanel.getComponent(i); 333 comp.setLocation(p0); 334 } 335 centerPanel.doLayout(); 336 } 338 341 private void zoom() 342 { 343 int AD_Window_ID = 113; 344 MQuery query = null; 345 if (m_wf != null) 346 query = MQuery.getEqualQuery("AD_Workflow_ID", m_wf.getAD_Workflow_ID()); 347 AWindow frame = new AWindow(); 348 if (!frame.initWindow (AD_Window_ID, query, false)) 349 return; 350 AEnv.showCenterScreen(frame); 351 frame = null; 352 } 354 358 public String toString() 359 { 360 StringBuffer sb = new StringBuffer ("WFPanel["); 361 if (m_wf != null) 362 sb.append(m_wf.getAD_Workflow_ID()); 363 sb.append("]"); 364 return sb.toString(); 365 } 367 368 369 373 public static void main (String [] args) 374 { 375 org.compiere.Compiere.startupClient(); 376 JFrame jf = new JFrame ("WF"); 377 WFPanel pp = new WFPanel(null); 378 pp.load(101); 379 jf.getContentPane().add (pp); 380 jf.pack(); 381 jf.show(); 382 } 384 } | Popular Tags |