In unserem Tischprojekt werden alle drei Designs in der Benutzeroberfläche angezeigt, sodass jede einzelne am UIPartMixin beteiligt wird. Gehen Sie einfach zu den "UI"-Mixins jeder Komponente (TableUI, TableTopUI und LegUI), und beteiligen Sie das UIPartMixin als ganz rechts angeordnetes Design.
Design TableUI : TableDesigns UIPartMixin Design TableTopUI : TableTopDesigns UIPartMixin Design LegUI : LegDesigns UIPartMixin
An diesem Punkt ist die Mindestvoraussetzung zum Verwenden der UI-Werkzeuge erfüllt. Allerdings sind die UIParts leer, da ihnen noch keine UIProperties oder UIMessages hinzugefügt wurden. Außerdem wird für den Wert UIName die Vorgabe verwendet, den DisplayName aus Intent zurückzugeben, was manchmal nicht der gewünschten Anzeige in der Benutzeroberfläche entspricht.
Vor dem Hinzufügen von untergeordneten UIProperties müssen die für die UIProperties gewünschten Kategorien eingerichtet werden. Für dieses Beispiel wird der Einfachheit halber nur eine Kategorie, "General", angegeben, sodass dem Mixin TableUI Folgendes hinzugefügt wird:
Child GeneralCategory As :UICategory CategoryName = "General" CategorySeq = 1 End Child
Vorgabemäßig werden UICategory- und UIProperty-basierte Bauteile nicht in der Intent-Modell-Browserstruktur angezeigt. Der Grund dafür ist, dass es ziemlich viele UIProperties für ein Bauteil geben kann. Würden all diese UIProperties im Modell-Browser angezeigt, wäre die Strukturansicht-Schnittstelle höchst unübersichtlich. Es gibt eine Such regel für alle UICategory-, UIProperty- und UIPartMixin-Designs, mit der die Anzeige der UIProperties und UICategories im Modell-Browser ein- und ausgeschaltet werden kann. Diese Regel lautet ShowPropertiesInBrowser?:
Lookup Parameter Rule ShowPropertiesInBrowser? As Boolean = False
Legen Sie diese Regel einfach auf True fest, um die UIProperties und UICategories unter diesem UIPart anzuzeigen.
Jedes an UIPartMixin beteiligte Bauteil enthält die Regel UIName, und diese Regel bestimmt, welcher Text für dieses Bauteil in der Benutzeroberfläche angezeigt wird. Vorgabemäßig wird die Regel UIName auf denselben Wert wie die Regel DisplayName festgelegt. Dies soll jedoch häufig überschrieben werden, um eine aussagekräftigere Beschreibung des Bauteils bereitzustellen. In diesem Beispiel wird der UIName des Designs TableUI auf "A Simple Table" (Ein einfacher Tisch) festgelegt:
<%%category("Ui")> Parameter Rule UIName As String = "A Simple Table"
<%%category("Ui")> Parameter Rule UIName As String = "Table Top"
<%%category("Ui")> _ Parameter Rule UIName As String = "Leg " + format("%d",index)
Nun sollen untergeordnete UIProperties für die Höhe, Länge und Breite hinzugefügt werden. Für die Höhe wird ein Satz gängiger Werte angegeben, aus denen der Benutzer auswählen kann. Er hat aber auch die Möglichkeit, einen beliebigen gewünschten Wert anzugeben.
Rule Height As Number = uiHeight.value Child uiHeight As :NumberProperty BaseName = "Height" CategoryPart = GeneralCategory choiceListValues = {6,12,18,24,36} End Child
Beachten Sie, dass auch die Regel Height überschrieben wurde, sodass sie nun auf den Wert uiHeight statt auf den Wert dvHeight verweist. Außerdem muss kein Wert an den Parameter DefaultValue von uiHeight übergeben werden, da die zuvor schon beschriebene Schnellmethode mit "dv" angewendet wird. Beachten Sie schließlich, dass in diesem Fall statt der Basis-UIProperty eine NumberProperty verwendet wird. Dies ist ein spezielles UIProperty-Design, das an UIProperty beteiligt wird. Es überschreibt die Werte des Formatierers und Konverters und stellt zudem einige weitere gängige Überprüfungen (minimale/maximale Werte usw.) bereit. Generell ist es empfehlenswert, anstelle der Basis-UIProperty eines der speziellen UIProperty-Designs zu verwenden. Wenn das Projekt einen benutzerdefinierten UIProperty-Typ erfordert, ist es generell empfehlenswert, eine benutzerdefinierte UIProperty für dieses Projekt abzuleiten und zu verwenden. In der folgenden Liste sind die speziellen UIProperties aufgeführt, die zum Lieferumfang der Standard-UI-Werkzeuge gehören:
Es ist zu beachten, dass diese speziellen UIProperty-Designs am BasicUIProperty-Design beteiligt werden, das wiederum am UIProperty-Design beteiligt wird. Dabei stellt das BasicUIProperty-Design die Schnellmethode "dv" für Vorgabewerte bereit.
Die Breite und die Länge sind einfach Zahlen, die der Benutzer eingeben kann. Wie die Regel Height wurden auch die Regeln Width und Length überschrieben, sodass sie nun auf die jeweiligen UIProperties verweisen.
Rule Width As Number = uiWidth.value Child uiWidth As :NumberProperty BaseName = "Width" CategoryPart = GeneralCategory End Child Rule Length As Number = uiLength.value Child uiLength As :NumberProperty BaseName = "Length" CategoryPart = GeneralCategory End Child
Das Bauteil TableTop (Tischplatte) erhält UIProperties für die Breite, Länge und Dicke. Allerdings werden die Werte für Breite und Länge von der übergeordneten Baugruppe Table übergeben, sodass diese UIProperties als schreibgeschützt markiert sind. Außerdem wird einfach auf die UICategory "General" verwiesen, die zuvor zur Baugruppe Table hinzugefügt wurde. Es wird also Folgendes zum Mixin TableTopUI hinzugefügt:
Rule Width As Number = uiWidth.value Child uiWidth As :NumberProperty BaseName = "Width" CategoryPart = GeneralCategory IsReadOnly? = True End Child Rule Length As Number = uiLength.value Child uiLength As :NumberProperty BaseName = "Length" CategoryPart = GeneralCategory IsReadOnly? = True End Child Rule Thickness As Number = uiThickness.value Child uiThickness As :NumberProperty BaseName = "Thickness" CategoryPart = GeneralCategory End Child
Das Bauteil Leg (Bein) erhält UIProperties für die Breite und Höhe. Die Höhe des Tischbeins wird von der Baugruppe Table übergeben und ist somit eine schreibgeschützte Eigenschaft, während der Wert für die Breite vom Benutzer bearbeitet werden kann. Es wird also Folgendes zum Mixin LegUI hinzugefügt:
Rule Width As Number = uiWidth.value Child uiWidth As :NumberProperty BaseName = "Width" CategoryPart = GeneralCategory End Child Rule Height As Number = uiHeight.value Child uiHeight As :NumberProperty BaseName = "Height" CategoryPart = GeneralCategory IsReadOnly? = True End Child
Es kommt häufig vor, dass der Entwickler Meldungen in der Benutzeroberfläche anzeigen möchte, die auf dem aktuellen Status des Modells basieren. Dies wird erreicht, indem untergeordnete UIMessages einem Design hinzugefügt werden, das an UIPartMixin beteiligt wird. Bei dem vorliegenden einfachen Tischprojekt soll eine Warnmeldung am Tisch angezeigt werden, die den Benutzer informiert, dass er eine nicht normierte Höhe verwendet, wenn er einen Höhenwert wählt, der nicht in der Liste mit Auswahlmöglichkeiten enthalten ist. Wenn der Benutzer einen Höhenwert unter der zulässigen Mindesthöhe wählt, wird diese Warnmeldung zu einer Fehlermeldung, die den Benutzer informiert, dass er eine über dem Mindestwert liegende Höhe wählen muss. Diese untergeordnete UIMessage wird dem Design TableUI wie folgt hinzugefügt:
Child HeightMessage As :UIMessage severity = (If Height < MinimumHeight Then :Error Else :Warning) message = (If Height < MinimumHeight Then _ "Below minimum height of " + format("%d",MinimumHeight) _ Else _ "The user has entered a nonstandard table height") End Child