20 layoutbox

Die layoutbox ist ein Gruppierungsobjekt, in das die anzuordnenden Objekte oder Bausteine einfach hineingeworfen werden können. Diese werden automatisch, überschneidungsfrei angeordnet.

Definition

{export | reexport} { model } layoutbox { <Bezeichner> }
{
  <Standardattribute>
  <Geometrieattribute>
  <Hierarchieattribute>
  <Layoutattribute>
  <Objektspezifische Attribute>
}

Ereignisse

dbselect

extevent

help

hscroll

key

paste

scroll

select

vscroll

Kinder

canvas

checkbox

control

document

edittext

groupbox

image

layoutbox

listbox

menubox

notebook

poptext

pushbutton

radiobutton

record

rectangle

scrollbar

spinbox

splitbox

statictext

tablefield

transformer

treeview

Vater

control

dialog

groupbox

layoutbox

notepage

splitbox

toolbar

window

Menü

Popup-Menü

20.1 Verwendung der layoutbox

Sehr oft hat man das Problem, dass Objekte oder Bausteine von Objekten angeordnet werden müssen. Dies ist von Hand zwar möglich, jedoch umständlich und anfällig falls sich irgendwelche Objekte in ihrer Größe oder Position ändern.

Hier schafft die Layoutbox Abhilfe. Sie ist ein Gruppierungsobjekt, in das die anzuordnenden Objekte oder Bausteine einfach hineingeworfen werden können. Diese werden automatisch, überschneidungsfrei angeordnet.

Die Layoutbox versucht, die Objekte nacheinander anzuordnen. Passt ein Objekt nicht mehr in eine Zeile bzw. Spalte, so wird es in die nächste platziert.

Außerdem wird dafür gesorgt, dass alle Objekte erreichbar sind, d.h. wenn nicht mehr alle Objekt sichtbar dargestellt werden können (z.B. weil das Vaterfenster zu klein ist), werden Scrollbars angezeigt. Die virtuellen Größen der Layoutbox werden (solange .wrap = true ist) immer gesetzt. Sie können nicht beeinflusst werden, jedoch abgefragt werden, um die Größe des Arbeitsbereichs zu ermitteln. Die virtuellen Größen können kleiner oder größer sein als die wirklichen Größen.

Die Spaltenbreite bzw. Zeilenhöhe wird immer durch das breiteste bzw. höchste Objekt in der jeweiligen Spalte bzw. Zeile bestimmt. Alle anderen Objekte richten sich dann entsprechend aus.

Bei zeilenweiser Ausrichtung bezieht sich .yauto auf die Zeilenhöhe. .xauto hat keine Bedeutung, da die Objekte grundsätzlich im gleichen Abstand nebeneinander angeordnet werden. Analog bezieht sich .xauto bei spaltenweiser Ausrichtung auf die Spaltenbreite, während .yauto in diesem Fall keine Bedeutung hat.

20.2 Attribute

.acc_label

.acc_text

.accelerator

.active

.activeobject

.bgc

.bordercolor

.borderraster

.borderstyle

.borderwidth

.child[integer]

.childcount

.class

.control

.cursor

.cut_pending

.cut_pending_changed

.dialog

direction

.external

.external[integer]

.fgc

.firstchild

.firstrecord

.focus

.focus_on_click

.font

.function

.groupbox

.height

.help

.label

.lastchild

.lastrecord

.layoutbox

.mapped

.mincolwidth

.minrowheight

.model

.module

.navigable

.notepage

options[enum]

.parent

.posraster

.real_height

.real_sensitive

.real_visible

.real_width

.record[integer]

.recordcount

.reffont

.scope

.self

.sensitive

.sizeraster

.source

.statushelp

.target

tile

.tilestyle

.toolhelp

.userdata

.vheight

.visible

.vwidth

.width

.window

wrap

.xauto

.xleft

.xmargin

.xorigin

.xraster

.xright

.xspacing

.yauto

.ybottom

.ymargin

.yorigin

.yraster

.yspacing

.ytop

20.3 Spezifische Attribute

Attribut Beschreibung

.borderraster

Legt die Art der Geometrieberechnung bei aktivem Raster fest. Die detaillierte Beschreibung finden sie in der Attribut-Beschreibung in der „Attributreferenz“.

Nur aktiv, wenn .borderwidth > 0.

.borderstyle

Definiert den Stil, also Darstellung und Ausprägung, des Rahmens (ab IDM-Version A.06.01.a).

direction

Legt die Ausrichtungsart der Kindobjekte in der Layoutbox fest.

.mincolwidth

Minimale Spaltenbreite der Layoutbox.

.minrowheight

Minimale Zeilenhöhe der Layoutbox.

options[enum]

Optionen des Objekts.

Indizes:

  • opt_center_toolhelp (nur IDM für Windows).
  • opt_scroll_on_focus (nur IDM für Motif).

tile

Definiert das Hintergrundbild des Objekts.

.tilestyle

Gibt die Art und Weise an, wie das in tile definierte Hintergrundbild dargestellt wird.

wrap

Steuert den automatischen Umbruch in der Layoutbox.

.xmargin

Gibt den linken und rechten Abstand zwischen der Layoutbox und ihren Kindern an.

.xspacing

Horizontaler Abstand zwischen den Kindern der Layoutbox.

.ymargin

Gibt den oberen und unteren Abstand zwischen der Layoutbox und ihren Kindern an.

.yspacing

Vertikaler Abstand zwischen den Kindern der Layoutbox.

Bei Attributänderungen der Layoutbox, die Einfluss auf das Layout haben (z. B. .direction, .xmargin, .ymargin), werden die Kindobjekte unabhängig von .wrap neu angeordnet. Außerdem werden die Kinder neu angeordnet, wenn die Sichbarkeit oder Größe von Kindern geändert wird. Dies stellt sicher, dass die Kindobjekte sich nicht überlappen und dass sich keine Inkonsistenzen ergeben, wenn die Layoutbox unsichtbar und wieder sichtbar geschaltet wird.

20.4 Hinweise

Für die Kinder der layoutbox ändert sich die Bedeutung einiger Attribute:

Attribut

Kurzbeschreibung

.xauto

Bei spaltenweiser Anordnung: das Objekt wird in der jeweiligen Spalte angeordnet, deren Breite sich nach dem breitesten Objekt richtet. Für –1 vom linken Rand der Spalte; für 1 vom rechten Rand der Spalte; für 0 wird es auf die Spaltenbreite aufgezogen. Falls sich nur Objekte mit .xauto = 0 in einer Spalte befinden, bekommen sie die Breite mincolwidth zugewiesen.

Bei zeilenweiser Anordnung hat dieses Attribut keine Bedeutung.

.yauto

Bei zeilenweiser Anordnung: das Objekt wird in der jeweiligen Zeile angeordnet, deren Höhe sich nach dem größten Objekt richtet. Für –1 vom unteren Rand der Zeile, für 1 vom oberen Rand der Zeile; für 0 wird es auf die Zeilenhöhe aufgezogen. Falls sich nur Objekte mit .yauto = 0 in einer Zeile befinden, bekommen sie die Höhe minrowheight zugewiesen.

Bei spaltenweiser Anordnung hat dieses Attribut keine Bedeutung.

20.4.1 Posraster der Kindobjekte

Da es der Zweck der Layoutbox ist, die Kindobjekte automatisch anzuordnen, wird die Art und Weise der Anordnung von der Layoutbox und nicht von den Kindobjekten bestimmt. Aus diesem Grund wird an den Kindobjekten das Attribut .posraster auf false gesetzt. Ein gerastertes Layout innerhalb der Layoutbox wird nicht unterstützt und ist zu vermeiden.

20.4.2 Virtuelle Größe

Die Layoutbox berechnet ihre virtuelle Breite und Höhe selbst. Sie können zwar vom Benutzer ausgelesen und gesetzt werden, Setzungen des Benutzers werden jedoch ignoriert. Die virtuelle Größe bezieht sich immer auf den Arbeitsbereich, d.h. die Breite und Höhe des Rechtecks, das die Kinder der Layoutbox mit ihren Rändern (Margin) umfasst.

Bei Benutzung eines Hintergrundbildes ist Folgendes zu beachten:

Bei den Werten tilestyle_centered und tilestyle_stretched für das Attribut .tilestyle wird die virtuelle Größe als Berechnungsgrundlage herangezogen, das Hintergrundbild also gemäß der virtuellen Größe zentriert oder vergrößert. Ist dies nicht gewünscht, so kann der Wert tilestyle_parent_tile genutzt werden und das anzuzeigende Hintergrundbild am Vaterobjekt gesetzt werden (eventuell muss dafür eine Groupbox als „Zwischenobjekt“ eingefügt werden).

20.4.3 Scrollbarattribute

Die Layoutbox verfügt zwar über Scrollbarattribute, die Verwaltung und das Anzeigen der Scrollbars sollten aber der Layoutbox überlassen werden. Deshalb empfehlen wir, die Scrollbarattribute nicht zu verwenden:

20.5 Radmausnutzung unter Microsoft Windows

Zur Benutzung einer Radmaus zum Scrollen bitte Kapitel „Radmaus bzw. Radmausunterstützung unter Microsoft Windows“ beachten.

20.6 Beispiel

Eine einfache Verwendung der layoutbox kann wie folgt aussehen:

dialog D

color ColBlue  "blue";
color ColWhite "white";

window Wi {
  .title  "IDM Example Layoutbox";
  .width  320;
  .height 240;

  layoutbox La {
    .bgc      ColWhite;
    .xauto    0;
    .xleft    10;
    .xmargin  20;
    .xright   10;
    .xspacing 10;
    .yauto    0;
    .ybottom  10;
    .ymargin  20;
    .yspacing 10;
    .ytop     10;
    .wrap     true;

    pushbutton Pb {
      .text "Do nothing";
    }

    statictext St {
      .text  "Resize window\nto see the\neffect of .wrap";
      .yauto -1;
    }

   groupbox Gb {
      .bgc    ColBlue;
      .height 100;
      .width  100;
    }
  }

  on close { exit(); }
}

Das Beispiel erzeugt folgendes Fenster:

Abbildung 16-19: layoutbox example