Skinning Tips - Verwendung von Propertys für komplexe Auswahlbelegungen

  • [h1]Verwendung von Propertys für komplexe Auswahlbelegungen - Teil 1[/h1]
    Als Abwandlung von Phils altem Tip mit austauschbaren Menüpunkten hier eine recht felxible und einfach zu Erweiternde Variante.
    Die Methode ist immer dann gut wenn man mehreren Strings die selben Werte zuweisen will.
    Ich versuch es so gut wie Möglich zu Beschreiben, es ist aber schon etwas Abstrakt und zwei Ecken gedacht :)

    [h1=Header]Anwendungsbeispiele[/h1]
    Mögliche Anwendungen

    • Widgetauswahlen
    • Menüs die nicht Skriptbasiert sind
    • Farbenauswahlen
    • Caseauswahlen

    [h2=SubHeader1]Farbauswahl[/h2]
    Der gängige Weg wäre ja jetzt eine Liste mit den Farben zu erstellen die man definieren will. Sei es nun eine Gruppe von Buttons oder ein Listcontainer.
    In der Art

    • Hintergrund
    • Textfarbe
    • Schatten
    • Flagfarbe
    • usw..

    Anhand des Focus oder was auch immer dann entweder für jede zu definierende Farbe eine Auswahlliste mit Farben, oder eine "Große" mit etwas in der Art:

    Code
    <onclick condition="xxx">Skin.SetString(Hintergrund,ffe5f2f7)</onclick>
    <onclick condition="xxx">Skin.SetString(Textfarbe,ffeef2f7)</onclick>
    <onclick condition="xxx">Skin.SetString(Schatten,fffff2f7)</onclick>

    usw..

    Das kann nun je nach Umfang extrem Aufwendig sein, will man z.B. ein Menü fürs Home so erstellen wäre das hunderte Eintrage und Klicks.
    Bei 20 Farben für 5 verschiedene Farbedefinitionen aber auch schon 100 Klicks mit Condition oder 5 identische Listen mit Farben die man alle
    auch "Pflegen" muss wenn sich eine Farbe ändert.
    Mit Conditions müssten alle 20 Klicks erweitert werden wenn eine Farbdefinition dazu kommt und es 6 wären..

    [h2=SubHeader2]Die Propertys[/h2]
    So, hier kommen nun Propertys ins Spiel..
    Propertys sind ja nicht dauerhaft gespeichert Strings wenn man so will. Das die sich direkt im Speicher befinden muss nichts aus der guisetting erst Abgefragt werden.
    Dementsprechend kann man hier auch dutzende verwenden ohne das es merklich zu Verzögerungen kommt bei Klicks.

    Aber zurück zum Beispiel...

    Wir haben ja 3 Farben zu besetzten. Also eine Liste mit clicks die zur Auswahl an Farben führt. Hier setzten wir nun gleich das Property "TextcolorString" mit.
    In das Property schreiben wir jeweils den Namen des Strings für die Farbe.

    "skinsettings" ist in dem Fall das Fenster in dem das Property gesetzt wird. Das kann auch die ID eines Custom Windows sein, muss dann aber zur Sicherheit
    mit in den Property Aufruf Window(xxx).Property. Es sollte Theoretisch solange man im selben Fenster ist auch ohne gehen, schadet aber auch nicht wenns
    trotzdem dabei steht.

    SetFocus würde dabei zur Farbenliste führen..

    Code
    <onclick>SetProperty(TextcolorString,Hintergrund,skinsettings)</onclick>
    <onclick>SetFocus(9036)</onclick>

    Und jetzt kommt der eigentliche Unterschied
    Da nun der Stringname Variabel ist und sich in einem Property befindet, müssen wir nur noch in der Auswahlliste,
    in diesem Fall Farben in einem Klick den String mit der Farbe füllen.

    Code
    <onclick>Skin.SetString($INFO[Window(skinsettings).Property(TextcolorString)],ffe5f2f7)</onclick>

    Der selbe click in einer Farbe wird nun bei der Auswahl "Hintergrund" umgesetzt zu

    Code
    <onclick>Skin.SetString(Hintergrund,ffe5f2f7)</onclick>

    bei Auswahl "Textfarbe"

    Code
    <onclick>Skin.SetString(Textfarbe,ffeef2f7)</onclick>


    usw..

    Tip
    Für ganz Faule, oder die die es als Text Darstellen, könnte man mit

    Code
    <label>$NUMBER[ffe5f2f7]</label>
    <onclick>Skin.SetString($INFO[Window(skinsettings).Property(TextcolorString)],$INFO[System.CurrentControl])</onclick>


    noch den zu schreibenden Wert aus dem aktuellen label ziehen. Dann würden alle clicks auch noch gleich aussehen!

    [h2=SubHeader3]Der Aufruf[/h2]
    Der Aufruf der Farbe über eine Variable für den Skin wäre mit Strings dann nur noch:

    Code
    <variable name="AC_value_textcolor_light">
        <value condition="!IsEmpty(skin.string(Hintergrund))">$INFO[skin.string(Hintergrund)]</value><!-- color -->
        <value>TextColorLight</value><!-- nocolor -->
    </variable>

    Ist die Farbe nicht gesetzt wird ein Definierte Wert aus der colors.xml verwendet.

  • [h1]Verwendung von Propertys für komplexe Auswahlbelegungen - Teil 2[/h1]

    Möglich wäre hier auch das ganze noch im Alphakanal "unabhängig" zu machen, also nur e5f2f7 zu definieren, und das ganze dann mit einer weiteren Auswahl an Tranzparenzstufen zu koppeln.
    Damit hätte man dann zusätzlich noch die Möglichkeit das ganze in verschiedenen Abstufungen anzubieten.
    Als "Fake Spin" mit nur einem Button in 10% Schritten (ca.) sähe das so aus:

    Und als Variable

    Code
    <variable name="AC_value_textcolor_light">
    <value condition="!IsEmpty(skin.string(Hintergrund)) + !IsEmpty(skin.string(Hintergrunddiffuse))">$INFO[skin.string(Hintergrunddiffuse)]$INFO[skin.string(Hintergrund)]</value><!-- color -->
    <value condition="!IsEmpty(skin.string(Hintergrund)) + IsEmpty(skin.string(Hintergrunddiffuse))">ff$INFO[skin.string(Hintergrund)]</value><!-- color -->
    <value>TextColorLight</value><!-- nocolor -->
    </variable>

    Wir Fragen also einfach beide Strings ab

    Sind beide nicht leer verwenden wir beide
    Ist Farbe nicht leer dafür Tranzparenz nehmen wir mal an soll es 100% sein
    Bei allem anderen wie leerer Farbe fallen wir zurück auf eine Definierte Farbe

  • [h1]Verwendung von Propertys für komplexe Auswahlbelegungen - Teil 3[/h1]
    Vorteile der Methode
    Wir können nun auch 10 Farben in die Liste packen, ohne das sich an der Farbzuweisung oder an der
    Variablen für die controls was ändert. Farben lassen sich beliebig Erweitern durch kopieren. Je nach
    Aufbau muss nur ein Klick und wahrscheinlich ein Colordiffuse angepasst werden an jeweils einer
    Stelle (falls man Buttons hat für die Farbauswahl die die Farbe Abbilden).

    [h2=SubHeader3]Menü oder Widgetauswahl[/h2]
    Bei einem Menü oder einer Widgetauswahl kann das nun super nützlich sein und auch ein komplett Skriptunabhängiges Menü beherrschbar machen.

    Das sähe dann in etwa so aus:
    Bei Click wird jeweils ein Property für Menütitel, Icon und Click geschrieben für das spätere Menü.
    Ist ein Platz belegt wird er gelöscht und man wird zur Auswahl geschickt, ist er leer gehts gleich zur Auswahlliste.

    Code
    <onclick>SetProperty(MainslotIcon,Mainslot6Icon,1110)</onclick>
    <onclick>SetProperty(MainslotTitle,Mainslot6Title,1110)</onclick>
    <onclick>SetProperty(MainslotClick,Mainslot6Click,1110)</onclick>
    <onclick condition="IsEmpty(Skin.String(Mainslot6Title))">SetFocus(10001)</onclick><!--Slotlist-->
    <onclick condition="!IsEmpty(Skin.String(Mainslot6Title))">Skin.Reset(Mainslot6Title)</onclick>
    <onclick condition="!IsEmpty(Skin.String(Mainslot6Title))">Skin.Reset(Mainslot6Icon)</onclick>
    <onclick condition="!IsEmpty(Skin.String(Mainslot6Title))">Skin.Reset(Mainslot6Click)</onclick>
    <onclick condition="!IsEmpty(Skin.String(Mainslot6Title))">SetFocus(10001)</onclick><!--Slotlist-->

    Die Menüpunktauswahl würde das so aussehen:

    Code
    <onclick>Skin.SetString($INFO[Window(1110).Property(MainslotIcon)],weather)</onclick>
    <onclick>Skin.SetString($INFO[Window(1110).Property(MainslotTitle)],Wetter)</onclick>
    <onclick>Skin.SetString($INFO[Window(1110).Property(MainslotClick)],ActivateWindow(weather))</onclick>

    Damit haben wir es nun geschafft das wir mit einem Button allen Menüpunkten, was ja im Schnitt mehr als 10 sein
    können, aus einer Liste von ca. 30 Optionen wie Wetter, Filme, Serie, Einstellungen usw. zuweisen können.
    Men könnte damit auch gleich noch die Propertys für ein Widget mitsetzen und damit beides Aufeinmal einen
    genauen Platz in einem Menü zuweisen.

    Ich denke die Methode ist für vieles nützlich, und macht gerade an solchen Stellen das ganze zwar auf den ersten
    Blick etwas undurchsichtiger weil eben der String nicht mehr bei der Auswahl im Click steht, sondern ein Obskures
    Property ist, aber es dampft im Gegensatz dazu den Code extrem ein, und macht ihn an solchen Stellen wieder Übersichtlicher.

    Mit der Gängigen Methode, bei 10 Menüpunkten mit 30 Auswahlmöglichkeiten und daraus resultierend einem Wetterbutton mit
    30 Conditional Klicks oder 12 mal den Wetterbutton und das bei 30 Buttons wäre nicht Umsetzbar ohne den Überblick nur schwer
    nicht zu verlieren.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!