xpdlviewcontrollerpanel.java
来自「jawe的最新版本,基于Java的图形化工作流编辑器。图形化工作流编辑器 。使用」· Java 代码 · 共 335 行
JAVA
335 行
package org.enhydra.jawe.components.xpdlview;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseWheelEvent;import java.awt.event.MouseWheelListener;import java.io.ByteArrayOutputStream;import javax.swing.BorderFactory;import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JComponent;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.SwingConstants;import javax.swing.border.Border;import javax.swing.text.PlainDocument;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.enhydra.jawe.JaWEComponent;import org.enhydra.jawe.JaWEComponentView;import org.enhydra.jawe.JaWEManager;import org.enhydra.jawe.base.controller.JaWEFrame;import org.enhydra.shark.xpdl.XMLAttribute;import org.enhydra.shark.xpdl.XMLCollection;import org.enhydra.shark.xpdl.XMLComplexChoice;import org.enhydra.shark.xpdl.XMLComplexElement;import org.enhydra.shark.xpdl.XMLElement;import org.enhydra.shark.xpdl.XMLSimpleElement;import org.enhydra.shark.xpdl.elements.Package;import org.jedit.syntax.JEditTextArea;import org.jedit.syntax.SyntaxDocument;import org.jedit.syntax.SyntaxStyle;import org.jedit.syntax.TextAreaPainter;import org.jedit.syntax.Token;import org.jedit.syntax.XMLTokenMarker;import org.w3c.dom.Document;import org.w3c.dom.Node;/** * Container for displaying menubar, toolbar, process graphs ... * * @author Sasa Bojanic * @author Miroslav Popov * @author Zoran Milakovic */public class XPDLViewControllerPanel extends JPanel implements JaWEComponentView { protected XPDLViewController controller;// protected JScrollPane xpdlPreviewSP; protected JEditTextArea xpdlPreviewTA; protected JComboBox searchCB=new JComboBox(); protected Component searchPanel; protected XMLElement elementToShow; public XPDLViewControllerPanel(XPDLViewController controller) { this.controller = controller; } public void configure() { } public void init() { setBorder(BorderFactory.createEtchedBorder()); setLayout(new BorderLayout()); add(createCenterComponent(),BorderLayout.CENTER); searchPanel=createSearchPanel(); add(searchPanel,BorderLayout.NORTH); } public JaWEComponent getJaWEComponent() { return controller; } public JComponent getDisplay() { return this; } public void setSelectedElement (XMLElement pkgOrWpOrAs) { this.elementToShow=pkgOrWpOrAs; refreshView(); } public XMLElement getSelectedElement () { return elementToShow; } /** * Create the center component of this panel. */ protected Component createCenterComponent() { // creating text area pane for xpdl preview xpdlPreviewTA=new JEditTextArea();// xpdlPreviewTA.setLineWrap(false);// xpdlPreviewTA.setWrapStyleWord(false); xpdlPreviewTA.setEditable(false); xpdlPreviewTA.setMinimumSize(new Dimension(100,100)); xpdlPreviewTA.setElectricScroll(3); xpdlPreviewTA.addMouseWheelListener(new MouseWheelHandler(xpdlPreviewTA)); Color bkgCol=((XPDLViewSettings)controller.getSettings()).getBackgroundColor(); if (controller.getXPDLViewSettings().showHighlight()) { SyntaxDocument doc = new SyntaxDocument(); doc.putProperty(PlainDocument.tabSizeAttribute, new Integer(4)); xpdlPreviewTA.setDocument(doc); xpdlPreviewTA.setTokenMarker(new XMLTokenMarker()); TextAreaPainter painter = xpdlPreviewTA.getPainter(); SyntaxStyle[] styles = painter.getStyles(); styles[Token.KEYWORD1] = new SyntaxStyle(new Color(0, 102, 153), false, true); styles[Token.KEYWORD2] = new SyntaxStyle(new Color(0, 153, 102), false, true); styles[Token.KEYWORD3] = new SyntaxStyle(new Color(0, 153, 255), false, true); styles[Token.LITERAL1] = new SyntaxStyle(new Color(255, 0, 204), false, false); styles[Token.LITERAL2] = new SyntaxStyle(new Color(204, 0, 204), false, false); painter.setStyles(styles); painter.setEOLMarkersPainted(false); painter.setBracketHighlightEnabled(true); painter.setBackground(bkgCol); } xpdlPreviewTA.setBackground(bkgCol);// xpdlPreviewSP=new JScrollPane();// xpdlPreviewSP.setViewportView(xpdlPreviewTA);// JViewport port = xpdlPreviewSP.getViewport();// port.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);// return xpdlPreviewSP; return xpdlPreviewTA; } protected Component createSearchPanel () { JPanel sp=new JPanel(); sp.setLayout(new BoxLayout(sp,BoxLayout.X_AXIS)); Border emptyb=BorderFactory.createEmptyBorder(5,5,5,5); sp.setBorder(emptyb); JLabel jl=new JLabel(controller.getSettings().getLanguageDependentString("SearchForKey")+": "); jl.setAlignmentX(Component.LEFT_ALIGNMENT); jl.setAlignmentY(Component.BOTTOM_ALIGNMENT); jl.setHorizontalAlignment(SwingConstants.RIGHT); searchCB.setEditable(true); searchCB.setAlignmentX(Component.LEFT_ALIGNMENT); searchCB.setAlignmentY(Component.BOTTOM_ALIGNMENT); Dimension comboBoxDimension=new Dimension(200,20); searchCB.setMinimumSize(new Dimension(comboBoxDimension)); searchCB.setMaximumSize(new Dimension(comboBoxDimension)); searchCB.setPreferredSize(new Dimension(comboBoxDimension)); Color bkgCol=((XPDLViewSettings)controller.getSettings()).getBackgroundColor(); searchCB.setBackground(bkgCol); searchCB.getEditor().getEditorComponent().setBackground(bkgCol); JButton jb=new JButton(""); jb.setIcon(controller.getXPDLViewSettings().getFindNextIcon()); jb.setToolTipText(controller.getSettings().getLanguageDependentString("FindNextStringOccuranceKey")); jb.setVerticalTextPosition(SwingConstants.CENTER); jb.setAlignmentX(Component.LEFT_ALIGNMENT); jb.setAlignmentY(Component.BOTTOM_ALIGNMENT); jb.setPreferredSize(new Dimension(20,20)); sp.add(jl); sp.add(searchCB); sp.add(Box.createHorizontalStrut(5)); sp.add(jb); jb.addActionListener(new ActionListener(){ public void actionPerformed( ActionEvent ae ){ findString(); } }); return sp; } public void refreshView () { try { String toDisp=""; xpdlPreviewTA.setText(toDisp); Document document = null; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder dbuilder = dbf.newDocumentBuilder(); document = dbuilder.newDocument(); ByteArrayOutputStream baos=new ByteArrayOutputStream(); // Here we get all document elements if (elementToShow!=null) { if (!(elementToShow instanceof XMLAttribute)) { if (elementToShow instanceof Package) { JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(document, (Package)elementToShow); } else { Node node = document.createElement(elementToShow.toName()); if (elementToShow instanceof XMLComplexElement) { JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(node, (XMLComplexElement)elementToShow); } else if (elementToShow instanceof XMLCollection) { JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(node, (XMLCollection)elementToShow); } else if (elementToShow instanceof XMLComplexChoice) { JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(node, (XMLComplexChoice)elementToShow); } else if (elementToShow instanceof XMLSimpleElement) { JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(node, (XMLSimpleElement)elementToShow); } Node toAppend=node.getFirstChild(); if (toAppend==null) { toAppend=node; } document.appendChild(toAppend); } // Use a Transformer for output TransformerFactory tFactory = TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); transformer.setOutputProperty("indent","yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4"); transformer.setOutputProperty("encoding", JaWEManager.getInstance().getJaWEController().getControllerSettings().getEncoding()); if (!(elementToShow instanceof Package)) { transformer.setOutputProperty("omit-xml-declaration","yes"); } DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(baos); transformer.transform(source,result); toDisp=baos.toString(JaWEManager.getInstance().getJaWEController().getControllerSettings().getEncoding()); baos.close(); } else { toDisp=elementToShow.toName()+"="+"\""+elementToShow.toValue()+"\""; } } xpdlPreviewTA.setText(toDisp); xpdlPreviewTA.setCaretPosition(0); } catch (Exception ex) { ex.printStackTrace(); } } /** * Searches the XPDL context containd within text area to find wanted * string. Search starts from the current cursor location. When some * new text is entered into search box, it can be latter retrieved from * the box. */ protected void findString() { if (searchCB.getSelectedItem()==null) return; String searchingTxt=searchCB.getSelectedItem().toString(); addItemToCombo(searchingTxt); String txt = xpdlPreviewTA.getText(); try { int foundPos=xpdlPreviewTA.getCaretPosition(); for(int i=foundPos;i<=(txt.length() - searchingTxt.length());i++) { if(txt.substring(i,i + searchingTxt.length()).equalsIgnoreCase(searchingTxt)) { xpdlPreviewTA.setCaretPosition(i);// xpdlPreviewTA.getCaret().setSelectionVisible(true); xpdlPreviewTA.select(i,i+searchingTxt.length()); foundPos = i+searchingTxt.length(); return; } } } catch (Exception ex) {} JaWEFrame jf=JaWEManager.getInstance().getJaWEController().getJaWEFrame(); JOptionPane.showMessageDialog(jf, controller.getSettings().getLanguageDependentString("MessageJaWEHasFinishedSearchingXPDL"), jf.getAppTitle(),JOptionPane.INFORMATION_MESSAGE); xpdlPreviewTA.setCaretPosition(0); return; } /** * Adds a text into combo box if it hasn't been there previously. */ private void addItemToCombo (String searchingTxt) { if (searchingTxt==null || searchingTxt.trim().length()==0) return; for (int i=0; i<searchCB.getItemCount(); i++) { if (searchCB.getItemAt(i).toString().equals(searchingTxt)) { return; } } searchCB.addItem(searchingTxt); } public void changeLanguage () { JLabel l=(JLabel)((JPanel)searchPanel).getComponent(0); JButton b=(JButton)((JPanel)searchPanel).getComponent(3); l.setText(controller.getSettings().getLanguageDependentString("SearchForKey")+": "); b.setToolTipText(controller.getSettings().getLanguageDependentString("FindNextStringOccuranceKey")); } }class MouseWheelHandler implements MouseWheelListener{ JEditTextArea area; public MouseWheelHandler(JEditTextArea area) { this.area = area; } public void mouseWheelMoved(MouseWheelEvent e) { if(e.isControlDown()) { if( (area.getFirstLine() + e.getWheelRotation()) < 0 || ((area.getFirstLine() + area.getVisibleLines() + e.getWheelRotation()) > area.getLineCount()) ) return; area.setFirstLine(area.getFirstLine() + e.getWheelRotation()); } else { if( (area.getFirstLine() + e.getUnitsToScroll()) < 0 || ((area.getFirstLine() + area.getVisibleLines() + e.getUnitsToScroll()) > area.getLineCount()) ) return; area.setFirstLine(area.getFirstLine() + e.getUnitsToScroll()); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?