Hinzufügen von UI-Werkzeug-Regeln zu einfachem Tischprojekt

Hinzufügen von UIPartMixin

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.

Hinzufügen von UICategory

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

Intent-Modell-Browser

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.

Festlegen von UIName-Werten

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"
Das Design TableTopUI überschreibt UIName, sodass "Table Top" (Tischplatte) zurückgegeben wird:
<%%category("Ui")> Parameter Rule UIName As String = "Table Top"
Die Konstruktion LegUI überschreibt UIName, sodass "Leg" (Bein) und der Index des Beins, getrennt durch ein Leerzeichen, zurückgegeben wird:
<%%category("Ui")> _
Parameter Rule UIName As String = "Leg " + format("%d",index)

Hinzufügen von UIProperties zu Table

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

Hinzufügen von UIProperties zu TableTop

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

Hinzufügen von UIProperties zu Leg

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

Hinzufügen von Messages zu Table

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