/*
 * KOMMANDO_Einfuegen.java  01.07.99
 *
 *
 * Beilage zum Buch "Software-Entwurf mit UML"
 * von J.Seemann & J. Wolff von Gudenberg,
 * Springer-Verlag, 1999
 * 
 */

/** <i>Benutzerkommando zum Ausschneiden von Zellen (Details siehe Klasse Kommando)</i> */

public class KOMMANDO_Einfuegen extends Kommando
{
	 Position EinfuegePosition;
	 Matrix UndoPuffer;
	
   public void doit()
   {
      Position p = new Position();
      Tabkalk.Tabelle().getTabellenCursor().getPosition(p);

      if (Tabkalk.Clipboard() != null)
      {
         int z = Tabkalk.Clipboard.getZeilen();
         int s = Tabkalk.Clipboard.getSpalten();
      	
         KOMMANDO_Einfuegen k = new KOMMANDO_Einfuegen();
   	     k.UndoPuffer = new Matrix(z,s);
   	     k.EinfuegePosition = p;
         
         for (int x = 0; x < s; x++)
            for (int y = 0; y < z; y++)
            {
               if ((y + p.Y() < Tabkalk.Tabelle().getZeilen()) 
                  && (y + p.Y() >= 0)
                  && (x + p.X() < Tabkalk.Tabelle().getSpalten()) 
                  && (x + p.X() >= 0))
                  {
                     k.UndoPuffer.setZelle(y,x,Tabkalk.Tabelle().getZelle(y+p.Y(),x+p.X()));
                  	 Zelle zelle = Tabkalk.Clipboard.getZelle(y,x);
                     Tabkalk.Tabelle().setZelle(y+p.Y(),x+p.X(),zelle.kopie());
                  }
            }
      	
         Tabkalk.Tabelle().getTabellenCursor().aktualisiereZellEditor();
         last = k;
      }
   }

   public void undo()  
   {
      for (int x = 0; x < UndoPuffer.getSpalten(); x++)
         for (int y = 0; y < UndoPuffer.getZeilen(); y++)
         {
         	   Zelle z = UndoPuffer.getZelle(y,x);
             Tabkalk.Tabelle().setZelle(y+EinfuegePosition.Y(),x+EinfuegePosition.X(),z);
         }   
   }
}