/*
 * KOMMANDO_Ausschneiden.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_Ausschneiden extends Kommando
{
	 Matrix UndoPuffer;
	 Position ObenLinks;
   Position UntenRechts;
	
   public void doit()
   {
   	  UntenRechts = new Position();
   	  ObenLinks = new Position();
      Tabkalk.Tabelle().getTabellenCursor().getMarkierung(ObenLinks,UntenRechts);

      int Spalten = UntenRechts.X()-ObenLinks.X() + 1;
      int Zeilen = UntenRechts.Y()-ObenLinks.Y() + 1;
  
      Tabkalk.Clipboard(new Matrix(Zeilen,Spalten));
   	
   	  KOMMANDO_Ausschneiden k = new KOMMANDO_Ausschneiden();
   	  k.UndoPuffer = new Matrix(Zeilen,Spalten);
   	  k.ObenLinks = ObenLinks;
   	  k.UntenRechts = UntenRechts;

      for (int x = 0; x < Spalten; x++)
         for (int y = 0; y < Zeilen; y++)
         {
         	   Zelle z = Tabkalk.Tabelle().getZelle(y+ObenLinks.Y(),x+ObenLinks.X());
             Tabkalk.Clipboard().setZelle(y,x,z);
         	   k.UndoPuffer.setZelle(y,x,z);
             Tabkalk.Tabelle().setLeerZelle(y+ObenLinks.Y(),x+ObenLinks.X());
         }

   	  Tabkalk.Tabelle().getTabellenCursor().resetMarkierung();
   	  last = k;
   }

   public void undo()  
   {
      int Spalten = UntenRechts.X()-ObenLinks.X() + 1;
      int Zeilen = UntenRechts.Y()-ObenLinks.Y() + 1;
      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+ObenLinks.Y(),x+ObenLinks.X(),z);
         }   
   }
}