package net.sourceforge.fidocadj.circuit.controllers; import net.sourceforge.fidocadj.circuit.*; import net.sourceforge.fidocadj.circuit.model.*; import net.sourceforge.fidocadj.globals.*; /** CopyPasteActions: contains a controller which can perform copy and paste actions on a primitive database. <pre> This file is part of FidoCadJ. FidoCadJ is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. FidoCadJ 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 FidoCadJ. If not, @see <a href=http://www.gnu.org/licenses/>http://www.gnu.org/licenses/</a>. Copyright 2007-2015 by Davide Bucci </pre> @author Davide Bucci */ public class CopyPasteActions { private final DrawingModel dmp; private final EditorActions edt; private final ParserActions pa; private final UndoActions ua; private final SelectionActions sa; private final ProvidesCopyPasteInterface cpi; // True if elements should be shifted when copy/pasted private boolean shiftCP; /** Standard constructor. @param pp the drawing model. @param ed an editor controller. @param aa a parser controller (pasting implies parsing). @param s a selection controller @param u an undo controller. @param p an object with copy and paste methods available. */ public CopyPasteActions(DrawingModel pp, EditorActions ed, SelectionActions s, ParserActions aa, UndoActions u, ProvidesCopyPasteInterface p) { dmp=pp; edt=ed; pa=aa; sa=s; ua=u; cpi=p; shiftCP=false; } /** Paste from the system clipboard @param xstep if the shift should be applied, this is the x shift @param ystep if the shift should be applied, this is the y shift */ public void paste(int xstep, int ystep) { sa.setSelectionAll(false); try { pa.addString(new StringBuffer(cpi.pasteText()), true); } catch (Exception E) { System.out.println("Warning: paste operation has gone wrong."); } if(shiftCP) edt.moveAllSelected(xstep, ystep); ua.saveUndoState(); dmp.setChanged(true); } /** Copy in the system clipboard all selected primitives. @param extensions specify if FCJ extensions should be applied. @param splitNonStandard specify if non standard macros should be split. */ public void copySelected(boolean extensions, boolean splitNonStandard) { StringBuffer s = sa.getSelectedString(extensions, pa); /* If we have to split non standard macros, we need to work on a temporary file, since the splitting works on the basis of the export technique. The temporary file will then be loaded in the clipboard. */ if (splitNonStandard) { s=pa.splitMacros(s, false); } cpi.copyText(s.toString()); } /** Check if the elements are to be shifted when copy/pasted. @return true if the elements are shifted when copy/pasted. */ public boolean getShiftCopyPaste() { return shiftCP; } /** Determines if the elements are to be shifted when copy/pasted @param s true if the elements should be shifted */ public void setShiftCopyPaste(boolean s) { shiftCP=s; } }