2.27 :move()

Die Methode :move() gibt es in zwei verschiedenen Ausprägungen:

2.27.1 :move() (Listenobjekte)

Mit Hilfe dieser Methode können Zeilen und Spalten innerhalb des Inhalts eines Objektes an eine andere Stelle verschoben werden, wenn der Inhalt dieses Objekts aus mehreren, mit integer oder index indizierten, Einträgen besteht. Zusammen mit dem Inhalt werden auch die dazugehörenden Attribute entsprechend verschoben.

Definition

void :move
(
      integer Position input,
      integer Target input
  { , integer Count := 1 input }
  { , boolean Direction := false input }
)

Parameter

integer Position input
Dieser Parameter definiert die erste zu verschiebende Zeile bzw. Spalte.
integer Target input
Dieser Parameter gibt an, wohin die Zeilen bzw. Spalten verschoben werden sollen.
integer Count :=1 input
Mit diesem optionalen Parameter wird die Anzahl der zu verschiebenden Zeilen bzw. Spalten festgelegt. Wird der Parameter nicht angegeben, so wird 1 angenommen.
boolean Direction := false input

Dieser optionale Parameter steuert beim tablefield, ob Zeilen oder Spalten verschoben werden. Dies ist abhängig vom Wert des tablefield-Attributs .direction.

Der Parameter darf nur beim tablefield angegeben werden. Bei anderen Objekten als dem tablefield führt die Angabe des Parameters zu einem Fehler.

Wertebereich

false
Verschieben entgegen der vom Attribut .direction angegebenen Richtung
true
Verschieben in der vom Attribut .direction angegebenen Richtung

Damit werden beim tablefield folgende Inhalte verschoben:

Parameter Direction

.direction 1 (vertikal)

.direction 2 (horizontal)

false

Zeile(n)

Spalte(n)

true

Spalte(n)

Zeile(n)

Rückgabewert

Keiner.

Wenn beim Verschieben ein Fehler aufgetreten ist, gibt die Methode ein fail zurück.

Objekte mit dieser Methode

Beispiel

dialog MethodMove

model pushbutton MPb {
  .xleft 216;
  .width 72;
  .sensitive false;
  .datamodel Lb;
  .dataget[.sensitive] .activeitem;
  integer Direction ::= 0;
  boolean Max ::= false;

  on select {
    this.datamodel:MoveItem(this.Direction, this.Max);
  }
}

model MPb MPbUp {
  .Direction ::= -1;
  :represent() {
    case Attribute
      in .sensitive:
        Value := (Value > 1);
        pass this:super();
      otherwise:
        // Handle other attributes
    endcase
  }
}

model MPb MPbDown {
  .Direction ::= 1;
  :represent() {
    case Attribute
      in .sensitive:
        Value := (Value > 0 and Value < this.datamodel[.sensitive].itemcount);
        pass this:super();
      otherwise:
        // Handle other attributes
    endcase
  }
}

window Wn {
  .width 320;
  .height 240;
  .title "IDM Example: Method :move()";

  on close { exit(); }

  statictext St {
    .xleft 12;
    .ytop 12;
    .sensitive false;
    .text "Select an item and move it with the buttons";
  }

  listbox Lb {
    .xleft 12;
    .width 180;
    .yauto 0;
    .ytop 36;
    .ybottom 12;
    .selstyle single;
    .activeitem 0;
    .content[1] "Rome";
    .content[2] "Stockholm";
    .content[3] "Madrid";
    .content[4] "London";
    .content[5] "Oslo";
    .content[6] "Berlin";
    .content[7] "Paris";
    .content[8] "Lisbon";
    .content[9] "Helsinki";

    on select {
      this:propagate();
    }

    rule void MoveItem(integer Direction, boolean Max) {
      if Max then
        if Direction = -1 then
          this:move(this.activeitem, 1, 1);
        endif
        if Direction = 1 then
          this:move(this.activeitem, this.itemcount, 1);
        endif
      else
        this:move(this.activeitem, this.activeitem + Direction, 1);
      endif
      this:propagate();
    }
  }

  MPbUp PbFirst {
    .ytop 36;
    .text "First";
    .Max ::= true;
  }
  MPbUp PbUp {
    .ytop 72;
    .text "Up";
  }
  MPbDown PbDown {
    .ytop 108;
    .text "Down";
  }
  MPbDown PbLast {
    .ytop 144;
    .text "Last";
    .Max ::= true;
  }
}

2.27.2 :move() (Felder)

Mit Hilfe dieser Methode können Elemente eines Feldes (indizierten, nicht-assoziativen, benutzerdefinierten Attributs) an eine andere Stelle im Feld verschoben werden.

Definition

void :move
(
  attribute Attr input,
  integer Position input,
  integer Target input,
  integer Count input
)

Parameter

attribute Attr input
Dieser Parameter definiert das benutzerdefinierte Attribut, auf das die Methode angewendet werden soll.
integer Position input
In diesem Parameter wird der Index des ersten Elements angegeben, das verschoben werden soll.
integer Target input
Dieser Parameter legt fest, wohin die Elemente verschoben werden sollen.
integer Count input
Dieser Parameter definiert, wie viele Elemente verschoben werden.

Rückgabewert

Keiner.

Wenn beim Verschieben ein Fehler aufgetreten ist, gibt die Methode ein fail zurück.

Objekte mit dieser Methode

Alle Objekte, die benutzerdefinierte Attribute haben können.

Siehe auch

Kapitel „Methoden für Arrays benutzerdefinierter Attribute“ im Handbuch „Benutzerdefinierte Attribute und Methoden“