.. sectionauthor:: 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! .. _ref-charts-raster: ############################################################################### 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. .. _ref-raster-widget-props: 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"):: **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:: 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. 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* 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..height** die Höhe des Rasterelementes **VerticalRaster..y** die obere Position des Rasterelementes **HorizontalRaster..width** die Breite des Rasterelementes **HorizontalRaster..x** die linke Position des Rasterelementes