analyseWriter/src/fenetres/create_act/actPaste.java

151 lines
5.2 KiB
Java

package fenetres.create_act;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import MEPTL.commandes;
import cXML.node;
public class actPaste extends AbstractAction{
/**
*
*/
private static final long serialVersionUID = 1L;
{
putValue( Action.NAME, "Coller" );
putValue( Action.SMALL_ICON, new ImageIcon( getClass().getResource("/paste.png") ) );
putValue( Action.MNEMONIC_KEY, KeyEvent.VK_V );
putValue( Action.SHORT_DESCRIPTION, "Coller (CTRL+V)" );
putValue( Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK) );
}
@Override
public void actionPerformed(ActionEvent e) {
String initial = "";
Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard();
String paste;
try {
paste = "<!-- ? -->" + c.getContents(null).getTransferData(DataFlavor.stringFlavor).toString().replace("\t","").replace("\r", "").replace("\n", "");
if (!paste.equals(initial)) {
node nodCopy = new node(paste);
if(!nodCopy.getNomElt().isEmpty()) {
TreePath path = fenetres.create.getTree().getSelectionPath();
node nod = (node) fenetres.create.getSelectNode().getUserObject();
DefaultMutableTreeNode nodeMu = fenetres.create.getSelectNode();
nodCopy = MiseInformationDansLeNodeCopierColler(nodCopy,nod);
nod.getNodes().add(nodCopy);
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(nodCopy);
nodeMu.add(node1);
nodeMu = addNodeMutable(nodCopy,node1);
DefaultTreeModel model = (DefaultTreeModel) fenetres.create.getTree().getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
model.reload(root);
fenetres.create.getTree().setSelectionPath(path);
fenetres.create.getTree().expandPath(path);
}else {
JOptionPane.showMessageDialog(null, "Le collage n'est pas réalisé.");
}
}
} catch (UnsupportedFlavorException | IOException e1) {
JOptionPane.showConfirmDialog(null, e1.toString());
e1.printStackTrace();
}
try {
Thread.sleep(40);
} catch (InterruptedException ex) {
}
}
/**
*
* @param nodePaste
* @param nodeParent
* @return
*/
private static node MiseInformationDansLeNodeCopierColler(node nodePaste, node nodeParent) {
nodePaste.setParent(nodeParent);
nodePaste.setLevel(nodeParent.getLevel()+1);
for(int i=0;i<nodePaste.getNodes().size();i++) {
nodePaste.getNodes().get(i).setParent(nodePaste);
nodePaste.getNodes().get(i).setLevel(nodePaste.getLevel()+1);
if(nodePaste.getNodes().get(i).getNodes().size()>1) {
node nodChild = nodePaste.getNodes().get(i);
nodChild = MiseAJoutInfoChild(nodChild);
}
String nameNode = nodePaste.getNomElt();
if(nameNode.equals("text:p")||nameNode.equals("text:h")||nameNode.equals("text:list-item")||nameNode.equals("text:list")
||nameNode.equals("text:span")||nameNode.equals("text:line-break")) {
actNewFichierAnalyse.placeIsDoublonInStructure(commandes.sujet.retourneFirstEnfantsByName("structurepage"));
}
}
return nodePaste;
}
/**
*
* @param nodChild
* @return
*/
private static node MiseAJoutInfoChild(node nodChild) {
for(int i = 0 ; i<nodChild.getNodes().size();i++) {
nodChild.getNodes().get(i).setLevel(nodChild.getParent().getLevel()+1);
MiseAJoutInfoChild(nodChild.getNodes().get(i));
}
return nodChild;
}
/**
*
* @param nod
* @param parent
* @return
*/
private static DefaultMutableTreeNode addNodeMutable(node nod, DefaultMutableTreeNode parent) {
if(nod!=null) {
DefaultMutableTreeNode node1 = null;
for(int i = 0 ; i < nod.getNodes().size(); i++) {
// Le node setting ne doit pas s'afficher dans le JTree
if(!nod.getNodes().get(i).getNomElt().equals("setting")) {
node1 = new DefaultMutableTreeNode(nod.getNodes().get(i));
addNodeMutable(nod.getNodes().get(i), node1);
parent.add(node1);
}
}
}
return parent;
}
}