Table Of Contents

Previous topic

6.2. Gemeinsame Properties aller Charttypen

Next topic

6.4. Controller und Binding im Chart

This Page

Section author: jo

Note

(jo)

Bitte konkretisieren (mao)

LayoutConstraints sh. ChildMover (ChildMover wertet die LayoutConstraints des Widgets aus) Das ist relativ komplex und undurchsichtig (insbesondere AlignMode). Außerdem kommt es mir so vor, dass bei AlignMode = ignore zu viele Dinge abgeklemmt werden, nicht nur das abschließende Alignen.

In ChildMover werden noch Widgets removed und neu added.

Stand nach Class-Inspection 31.5.2010. ChildMover heißt da noch ChildMover2.

Überprüfen: Die Angaben zu Anchor!

6.3. Raster und LayoutConstraints

Das Chartlayout mithilfe eines Rasters ist ein mehrschrittiges Verfahren, in dem die Chartelemente (gemeint sind im Allgemeinen Chart-Labels) zunächst in eine vordefinierte Rasterposition layoutet werden, um dann in einem zweiten Layout-Schritt noch automatisch verschoben zu werden, beispielsweise um eine spezifische Ausrichtung zu erreichen.

Der MAD-Autor definiert zunächst ein HorizontalRaster und/oder ein VerticalRaster und kann dabei neben fixen Breiten-/Höhenangaben auch min und max als Auto-Funktionen nutzen.

Die so definierten Rasterpositionen können dann in den LabelTemplates als LayoutConstraints benutzt werden.

Dieses Standard-Verhalten lässt sich modifizieren, in dem für X, Y, Breite und Höhe abweichende ...Source-Angaben gemacht werden und indem die Ausrichtung genauer bestimmt wird.

6.3.1. Raster-bezogene Widget-Properties

HorizontalRaster (List(KeyValue): Liste aus Key-/Value-Paaren)

Beschreibung des horizontalen Layout-Rasters. Vgl. “Raster”.

Beispiel: [label1: min; spc1: 6; bar: max; spc2: 6; label2: 64]

HorizontalRaster muss für horizontale Balken definiert sein (d.h. für Orientation left oder right).

Default: chart: max

VerticalRaster (List(KeyValue): Liste aus Key-/Value-Paaren)

Beschreibung des vertikalen Layout-Rasters. Vgl. “Raster”.

VerticalRaster muss für vertikale Balken definiert sein (d.h. für Orientation up oder down).

Default: chart: max

Beschreibung des horizontalen bzw. vertikalen Layout-Rasters:

Die Keys können in der Beschreibung der Chartelemente als Rasterposition genutzt werden. Values sind Pixelangaben oder Symbole für spezielle Funktionen (s.u. “Wertangaben”):

<property name="VerticalRaster" type="List[KeyValue]" value="[left: 10, chart: max, right: 10]" />
<property name="HorizontalRaster" type="List[KeyValue]" value="[chart: max, label1: 25, label2 :25]" />

LayoutConstraints (Map)

Sammlung von Layoutvorgaben für ein Chartelement (z.B. Label, Balken, etc.), vgl. unten LayoutConstraints-Angaben.

LayoutConstraints werden auf dem zu layoutenden Element (beliebiges Widget), nicht auf dem Chartwidget angegeben.

Das folgende Beispiel nutzt das (Standard-)Symbol chart für den zentralen Chartbereich des Rasters (in chart wird das Balken-, Linien- oder Kreischart platziert, wenn in den LayoutConstraints nicht anderes vorgegeben ist.) Im horizontalen Raster sind zwei Label-Positionen definiert, auf die mit LayoutConstraints z.B. so verwiesen werden kann:

<property name="VerticalRaster" type="List[KeyValue]" value="[left: 10, chart: max, right: 10]" />
<property name="HorizontalRaster" type="List[KeyValue]" value="[chart: max, label1: 25, label2 :25]" />

<template type="Text" name="Wertlabel2">
        <property name="LayoutConstraints">
                <map>
                        <property name="HorizontalRasterPosition" value="label1" />
                </map>
        </property>
</template>

<!-- oder Kurzschreibweise: -->
<template type="Text" name="Wertlabel1">
        <property name="LayoutConstraints" value="label1;chart"/>
</template>

6.3.2. Wert-Angaben in der Raster-Definition

Bei der Definition eines Layout-Rasters können als Werte Pixelangaben, aber auch Symbole zur Festlegung eines automatischen Layouts verwendet werden.

n (Number)
Pixelangabe für Höhe/Breite
min
Das enthaltene Element sperrt das Raster auf; die Rasterzeile/-spalte wird so breit/hoch wie von PreferredBounds des breitesten/höchsten enthaltenen Elements vorgegeben.
max
Die Raster-Position wird so breit/hoch wie möglich, d.h. sie nutzt den gesamten zur Verfügung stehenden Platz, nachdem evtl. die Größe weiterer Rasterpositionen bestimmt wurden.

6.3.3. LayoutConstraints-Angaben

LayoutConstraints werden im Template eines Chartelements (=Labels) gesetzt, um die Position und Größe des Elements einzustellen. Bei Verwendung eines Rasters müssen HorizontalRasterPosition und VerticalRasterPosition gesetzt werden, um die Platzierung des Chartelements zu steuern.

Die weiteren Properties sind nur notwendig, wenn das Layoutverhalten vom Standard (Platzierung und Größe werden durch das Raster vorgegeben) abweichen soll.

HorizontalRasterPosition (Symbol)

Gibt an, in welchem horizontalen Rasterfeld die Instanzen des Chartelements gezeichnet werden sollen. Ist kein Symbol für eine Rasterposition angegeben, so werden die Chartelemente an die Position (0,0) des Parentwidgets platziert.

Werte: Alle Symbole, in der Raster-Definition verwendet werden. Wird ein anderes Symbol verwendet, so wird das platzierte Element nicht sichtbar sein.

Default: Point(0,0)

VerticalRasterPosition (Symbol)

Gibt an, in welchem vertikalen Rasterfeld die Instanzen des Chartelements gezeichnet werden sollen. Ist kein Symbol für eine Rasterposition angegeben, so werden die Chartelemente an die Position (0,0) des Parentwidgets platziert.

Werte: Alle Symbole, in der Raster-Definition verwendet werden. Wird ein anderes Symbol verwendet, so wird das platzierte Element nicht sichtbar sein.

Default: Point(0,0)

XSource (Symbol)

Gibt an, welche Eigenschaft genutzt werden soll, um die X-Position des Chartelements festzulegen. raster sorgt dafür, dass der durch das Raster vorgegebene Wert genutzt wird. anchor bindet die Elementeigenschaft an die Position des zugehörigen Balkens, der zugehörigen Linie etc... preferred und keep befragen das Template-Widget nach dessen bevorzugten oder tatsächlichen Wert.

Werte: raster, anchor, preferred, keep ?

Default: raster

YSource (Symbol)

Gibt an, welche Eigenschaft genutzt werden soll, um die Y-Position des Chartelements festzulegen.

Werte: raster, anchor, preferred, keep ?

Default: raster

WidthSource (Symbol)

Gibt an, welche Eigenschaft genutzt werden soll, um die Breite des Chartelements festzulegen.

Werte: raster, anchor, preferred, keep

Default: raster

HeightSource (Symbol)

Gibt an, welche Eigenschaft genutzt werden soll, um die Y-Position des Chartelements festzulegen.

Werte: raster, anchor, preferred, keep

Default: raster

AlignMode (Symbol)

Gibt an, ob die Position des Chartelements durch die Alignment-Property zusätzlich modifiziert werden soll (Default: ignore, also keine Veränderung). xy (deprecated) und anchor sind synonym und nutzen als Bezugspunkt die Position des Chartelements, nachdem es platziert wurde; raster nutzt die Raster-Position unter Einbeziehung von PadAlign.

Werte: anchor, raster, ignore, preserve

Default: ignore

Alignment (Symbol)

Gibt an, wie das Chartelement ausgerichtet werden soll. Der Bezugspunkt der Verschiebung wird in AlignMode angegeben.

Werte:

top-left      top      top-right
left          center   right
bottom-left   bottom   bottom-right

Default: top-left Im Code: null, sollte aber einen Default haben

Anchor (Symbol)

Angabe, welcher Anchorpunkt genutzt werden soll. Die möglichen Angaben variieren je nach Charttyp.

Was sind die Defaults, wenn Anchor nicht gesetzt wird?

LineChart: grid-x, grid-y, sample-x, sample-y ?

Was bedeuten die Werte bei BarChart?

Werte:

LineChart (LineAnchor): line-first, line-second, line-last, line-selected

BarChart (BarWidget):
animation-red, animation-center, animation-green, animation,
half-red, half-center, half-green, half,
base-red, base-center, base-green, base,
maxvalue-red, maxvalue-center, maxvalue-green, maxvalue,
value-red, value-center, value-green, value,
dzero-red, dzero-center, dzero-green, dzero,
front-red, front-center, front-green, front,
zero-red, zero-center, zero-green, zero,
rear-red, rear-center, rear-green, rear

PieChart: *NYI*

6.3.4. Zugriff auf Rasterkoordinaten und -größen

geht das? Die tatsächlichen Pixelwerte für Position und Größe der definierten Rasterelemente können wie folgt ausgelesen werden:

VerticalRaster.<nameRasterElem>.height
die Höhe des Rasterelementes <nameRasterElem>
VerticalRaster.<nameRasterElem>.y
die obere Position des Rasterelementes <nameRasterElem>
HorizontalRaster.<nameRasterElem>.width
die Breite des Rasterelementes <nameRasterElem>
HorizontalRaster.<nameRasterElem>.x
die linke Position des Rasterelementes <nameRasterElem>