Slider Wert in Skin String?

  • Guten Abend

    Ich möchte in meinen Hintergrund eine schwarze Grafik (mit veränderbarer Transparenz) drüber legen. Damit will ich den Hintergrund dimmen.
    Kann man den Slider irgendwie auf einen gewissen Range umstellen? Da er aktuelle von 0-100% geht.
    Wenn man das Window verlässt, ist der einegestellte Wert weg, kann man das irgendwie einstellen, dass er ihn behält?
    Und am Ende hätte ich gern, dass der Wert vom Slider in einen Skinstring gespeichert wird.
    Habt ihr da ne Lösung?

    Der Slider dazu schaut so aus:

  • Hey,

    Slider verwendet eigentlich nur der Kore oder Addons in den Einstellungen - Ich wüßte gar nciht ob man die in einem Skin überhaupt nutzen kann..
    Fehlt da nicht ein <info></info> das einen Wert enthält auf dem sich der bezieht?
    Bei progresscontrols muss ich ja Kodi auch irgendwo sagen welchen wert ich will - also SystemMemory, oder SystemRAM oder den Fortschritt beim Abspielen..

    In Addonsettings geht das wohl - der Artworkdownloader hat sowas ja für die Fanartlimitieren in 5er Schritten von 0-20..
    In Skins wüsste ich nicht wie..

    Nimm doch einfach ein Fake Spin, ein Button mit label 2 mit dem Skin.string und schalte die clicks durch.
    Die werden dann "on-to-fly" gespeichert und sind auch beim schließen noch vorhanden.


    Kannst natürlich die ersten beiden auch noch mit einem "String.IsEmpty()..." noch davon abhalten das es immer bei 1 Beginnt...
    Da kannst soviele Werte eintragen wie du willst. Ob da nun 1-17 drin steht, oder 0,5,10 ist grad egal. Mit den Werten aus dem String kannst dann Dimmen.

    Oder was ich dir eher Vorschlagen würde:


    Code
    <variable name="AC_value_background_color">
    		<value condition="!IsEmpty(skin.string(background_color)) + !IsEmpty(skin.string(background_color_diffuse))">$INFO[skin.string(background_color_diffuse)]$INFO[skin.string(background_color)]</value><!-- color -->
    		<value>AC_background_color</value><!-- nocolor -->
    	</variable>

    Speicher einfach gleich HEX werte für die Tranzparenz.. dann kannst ganz Easy dahinter mit noch der RGB Farbe Fix oder ebenfalls Variabel die Tranzparenzen machen.
    Spart dir auch aufwendige Animation ala bei String 10 = 10% Tranzparenz..
    Mit einem zweizeiler der dann Abfragt ob der Tranzparenz string leer ist kannst dann ganz easy auch auf eine Fallbackfarbe zurückgreifen und brauchst nur hier ein etwas aufwendigeres Setting, dafür im Code aber nur noch die Variable für die Farbe..

    Grüße

  • info fehlt, weil ich gar nicht weiß was es bewirkt. meinst du ich muss da mein string eintragen?

    Danke für deine ansätze. animationen benötige ich nicht. dachte da an eine lösung mit einer variable. und diese soll in der texture als colordiffuse genutzt werden. die vielen onclick conditions wollte ich eigentlich vermeiden. bewegen lässt sich ja der slider, der muss doch auch irgendwie ein event auslösen. onchange oder wie man es nennen könnte.

  • ein event auslösen.

    Das schon, nur soweit ichs weiß muss das eine action sein aus Kodis Action ID´s.

    http://kodi.wiki/view/Slider_Control

    Und da ist nichts dabei mit einem String oder eigenen Definitionen, das sind im wesentlichen die Keyboardbefehle (eher weniger).
    Ich wüßte auch nicht welcher Skin einen Slider verwendet außer für Core Dinge von Kodi.
    Da musst dir schon mit so einem Fakespin aushelfen.

    Die Klicks machen dann ja genau das was du willst - viele macht dabei ja nichts, die werden ja nicht alle ausgeführt.

    Code
    <onclick>skin.setstring(background_color_diffuse,1A)</onclick><!-- 10 -->
    				<onclick condition="Stringcompare(skin.string(background_color_diffuse),1A)">skin.setstring(background_color_diffuse,1F)</onclick><!-- 12 -->
    				<onclick condition="Stringcompare(skin.string(background_color_diffuse),1F)">skin.setstring(background_color_diffuse,24)</onclick><!-- 14 -->
    				<onclick condition="Stringcompare(skin.string(background_color_diffuse),24)">skin.setstring(background_color_diffuse,29)</onclick><!-- 16 -->
    				<onclick condition="Stringcompare(skin.string(background_color_diffuse),29)">skin.setstring(background_color_diffuse,2E)</onclick><!-- 18 -->

    Nur die die der COndition entsprechen - wenn du dort 10 Werte haben willst mit 10 Clicks werden nur alle ausgeführt - der Reihe nach, mit jedem Click einer, wenn man auch 10 mal clickt.
    Ist also ansich ncihts anderes wie einer, nur jedesmal ein anderer, und in einem Button statts in 10 verschiedenen.

    Man clickt, der Wert wird auf 10 (1A) gesetzt, man clickt nochmal - wenn der Wert 1A ist wird daraus 1F usw..
    Mit diesem Wert, der dem Alphakanal entspricht, kannst dann direkt mit der Zugabe der RGB Werte die Farbe generieren mit der zweiten VAR.

    Code
    <value condition="!IsEmpty(skin.string(background_color_diffuse))">$INFO[skin.string(background_color_diffuse)]000000</value><!-- color -->

    Ergibt dann 1A000000 oder 1F000000 usw.. ohne ne rießige VAR die jedesmal von Kodi durchgeorgelt wird nach einem passenden Wert..


    Das ist eigentlich sinnvoller als dort in einen String 10% zu schreiben und dann die einzelnen Prozentwerte Abzufragen und in einer FarbenVAR dann dem Prozentwert wiederrum HEXwerte zuzuweisen.

    Ich denk einfacher wirst nicht ans Ziel kommen - solche "Sonderbuttons" sind meistens nur für den Core - editcontrols oder slider, fast auch togglebuttons muss man faken mit Grafiken und Buttons

    um ans Ziel zu kommen.


    Grüße

  • sliderex ist genauso wie spincontrolex sind nur für Kodi interne Sachen bestimmt. Wir Skinner können diesen nur für die Optik ändern. Eigens einsetzen ist nicht drin.

    Du kannst dir aber relativ simpel einen Fake Slider basteln.
    Nutze einfach einen "hidden" Button der mit x-vielen conditional <onright> und <onleft> Skin.String Werte um +/- 10 abändert.
    Den String Wert kannst du dann nutzen um einen Fake Slider zu positionieren mit Hilfe von Slide Animationen oder einer GroupList mit vielen Visibile Conditions.

    Würde dir das Ding ja schnell zamschreiben, aber das sind mehr als nur 2 Zeilen Code und mit selber machen übt sichs am besten ;)

    "I don't caretaker"

    SKIN: Embuary - Donate: HIER de Hoibe bestellen, merci :thumbup:

    Devices: Nvidia Shield + Fire TV 4k --- NAS: i3 6100 | 8GB | 15tb | OMV4 | Emby --- TV: Sony 55" XF9005 + LG 47" LM640S | 114x Adalight | Yamaha 683

  • Ich spinne jetzt mal ein bisschen rum (hab' gerade kein Kodi vor mir um es auszuprobieren) – könnte man das nicht vielleicht mit einem Fixedlist-Container und einem zugehörigen Scrollbar (pagecontrol) faken? In den Container entsprechend viele Buttons füllen. Im Fixedlist-Container ist ja die Focusposition fixiert, während die Items durchscrollen. So müsste es reichen, die Items jeweils mit einer onfocus-action zu versehen, um beim Betätigen des Scrollbars einen Wert zu setzen.


    Die Buttons würde ich dann jeweils so breit machen wie der Container ist. Den Container selber außerhalb des sichtbaren Bereichs positionieren und den Scrollbar nach Belieben stylen. Was denkt ihr, könnte das funktionieren?

  • Nein, <onfocus> funktioniert nicht in der static item list.
    Du kannst nur innerhalb vom <focusedlayout> einen hidden Button setzen, der eine onfocus Aktion ausführt.
    Theoretisch würde mit es mit ein wenig Getrickse dann gehen, aber der Ansatz schreit nur nach Pfusch.

    "I don't caretaker"

    SKIN: Embuary - Donate: HIER de Hoibe bestellen, merci :thumbup:

    Devices: Nvidia Shield + Fire TV 4k --- NAS: i3 6100 | 8GB | 15tb | OMV4 | Emby --- TV: Sony 55" XF9005 + LG 47" LM640S | 114x Adalight | Yamaha 683

  • wenns denn unbedingt wie ein slider aussehen soll, dann nimm die clicks aus dem Beispiel und mach sie zu onleft/onright
    - dabei müssen die werte dann einmal aufsteigend und einmal absteigend sich mit conditions ersetzen.

    Darauf kannst doch dann ein Image legen mit der "Sliderkontur" und eins mit dem "sich bewegenden Balken".
    Den müsstest dann per Animation mit den Contition aus dem String nach links/rechts beweben, oder wie bei gefakten Progresscontrols
    für jeden Wert eine eigene Grafik anlegen mit der "Balkenposition" und die per Variable drüber legen.

    Dann hast einen Slider gefakt der auf dem Button liegt.

    Eine grouplist würde deine Grafik ja nur "Bewegen" wenn dort alle, sagen wir mal 10 möglichen positionen bei 10 Werten mit visibles einmal für wahr und einmal für falsch
    reinlegst. Also leere Grafiken damit bei Wert 8 auch 7 Stellen davor "platz" einnehmen und die sichtbare Grafik an Position 8 steht.
    Da werden wohl Animationen oder eine VAR einfacher würde ich annehmen.

    Aber für eine Einstellung, die man womöglich einmal vornimmt wäre mir das wirklich viel zu Aufwendig nur damit man diese Optik erreicht statts einfach in einem
    Button per label2 als VAR oder sonst wie den prozentualen Tranzparenzwert anzuzeigen.

    Grüße

  • also das mit dem value condition von marc0815 hab ich nicht kapiert, deswegen orgelt kodi nun das var durch.
    wie war das denn gemeint?

    schaut bei mir nun so aus:

    Button:

    Variable:


    Image dazu:

    Code
    <control type="image">
          <description>Dimmed Background Option</description>
          <left>0</left>
          <top>0</top>
          <width>1280</width>
          <height>720</height>
          <texture colordiffuse="$VAR[background_color_diffuse]">bmw/1px_black.png</texture>
          <visible>true</visible>
          <include>VisibleFadeEffect</include>
        </control>
  • wie war das denn gemeint?

    wenns funktioniert ja;)..

    So hab ichs auch immer gemacht - irgendwann kam mir dann mal der Gedanke:

    Warum eine Variable für Fixe Farbwerte die jedes mal durchgeorgelt werden muss - je nach "Stelle" sind das ja einige Stellen.
    Dann dachte ich ob da nun im string 5 steht oder 0C ist ja eigentlich egal.
    Also doch lieber eine variable für die Label 2 Anzeige basteln die nur fürs Setting so "kompliziert" ist
    (damit da nicht 0c drin steht sondern meinetwegen 5%).

    Wenn nun im String 0c usw. steht, musst ja nur noch als Fallback Abfragen ob es nicht leer ist und
    schreibst dann einfach $INFO[]Skin.string(xxx) für die ersten beiden Stellen, und dahinter FFFFFF rein und hast dasselbe wie in deiner VAR mit einer Zeile + eine nur ein value ohne Condition als Fallback.

    Aber wir reden hier wahrscheinlich von Millisekunden was das spart, aber die variablen wenn man mal
    20 solche Farben hat sind natürlich "einfacher", auch zu Ändern oder lesen..

    Grüße

  • und das geht als attribut in colordiffuse?

    Versuchs mal so.. Ich hab mal deinen Code umgebaut, aber nicht getestet. Sollte aber gehen:


    Die Feinheiten musst dir dann anschauen - z.B. weiß ich nicht ob das image ausblenden willst wenn der String leer ist.
    Das wäre ein Muster wie man es machen könnte..
    Spinnt man das weiter könntes auch gleich die FFFFFF mit setzen. So wie es jetzt ist bis aber Variabler falls man es erweitern will.
    Denkbar wäre ja z.B. das man anhand der Fokusfarbe wie rot oder blau falls das wählbar ist, noch sagen will ich verwende schwarz mit leichtem Farbstich in richtung rot oder blau.
    Dann hättest mit dieser Variante und einem zweiten Spincontrol oder Farbwähler der den FFFFFF wert ebenfalls in einen zweiten string schreibt z.B. so eine variante mit nur zwei zeilen:

    Code
    <variable name="background_color_diffuse">
    		<value condition="!IsEmpty(skin.string(background_color)) + !IsEmpty(skin.string(background_color_diffuse))">$INFO[Skin.string(background_color_diffuse)]$INFO[Skin.string(background_color)]</value>
    		<value condition="!IsEmpty(skin.string(background_color)) + IsEmpty(skin.string(background_color_diffuse))">$INFO[Skin.string(background_color_diffuse)]FFFFFF</value>
    		<value></value>
    	</variable>


    Wenn eine Farbe gewählt wurde kommt sie aus dem Farbenstring + die Tranzparenz. Wenn Farbe leer nur Tranzparenz + schwarz, ansonst, also wenn z.B. Tranzparenz leer nichts.
    Sonst hättest ja bei 5 Farben + Tranzparenzen schon 100 Möglichkeiten.

    Einziges Manko: Da nun im Label2 etwas Abstraktes drin steht wie 0C statts 5%, bräuchtest dafür trotzdem eine Variable für das Label falls man es dort Anzeigen lassen muss wenn es
    keine "Livevorschau" gibt die einem die Einstellung gleich zeigt. Nur wird die VAR dann auch nur in den Settings gebraucht und wird nicht jedesmal bei jeder Verwendung der Farbe "berechet".
    Da ist die verkürzte Version sicher schneller.

    Grüße

  • Ohne jetzt quer reden zu wollen: Aus Skinner-Sicht mag dieses Konstrukt ja ganz gut funktionieren. Aus User-Sicht finde ich das aber höchst unpraktisch. Muss ich z.B. wirklich 15 mal auf einen Button klicken, um einen Wert von 75% einzustellen? Wäre es da nicht besser, 20 Buttons aufzureihen und jeden eine definierte onclick-Aktion ausführen zu lassen? Da muss der User dann nur einmal klicken. Das ganze dann mit einem entsprechend langen Balken unterlegen oder eine Marke an die betreffende Stelle positionieren zur Visualisierung des aktuellen Wertes und gut ist. Das ist dann zwar kein Slider, aber wenigstens nahe dran und für den User verständlich.
    In meinem Skin mache ich das so und es hat sich zumindest noch keiner darüber beschwert.

  • genauso wie in einem slider kommt es darauf an wo man ist:

    Aus 5 wird 10 aus 10 15 usw.. in einem Slider muss man auch wenn man bei 0 beginnt 15 mal nach rechts drücken.
    In einer Einzelbutton Liste musst genauso 15 mal nach rechts Navigieren und noch klicken solang Kodi nicht "intelligent den Focus gerade dort hinsetzt was du Einstellen willst".
    Und dazu auch noch Klicken.

    Ändert für meinen Begriff jetzt nicht wirklich was dran, außer das es noch Optisch gut "verpacken" muss, was schwerer ist als ein Button.
    Und da er ja ne Maus nimmt bzw. touch (glaub ich), fällt ein onfocus auch flach in jedem Button der schon weiterschaltet ohne Click.

    Ist Geschmackssache, was einem selber eher liegt sollte man verwenden.
    Ich find einen Auswahlbutton weit Übersichtlicher als eine Reihe mit 2x10 oder 20 Stück.
    Für mich ist clicken oder links/rechts jetzt nicht wirklich ein Unterschied.

    Im Normalfall bei So etwas macht er sicher ne Preview und zeigt im Hintergrund gleich wie es aussieht. Man schaltet also eher durch bis es einem Gefällt
    und hat kein festes Ziel vor Augen.


    Grüße

  • Sehe ich jetzt nicht so. Gerade mit Maus oder Touchscreen musst du doch nur auf den gewünschten Button gehen und nicht erst mühsam dahin navigieren. Die 20 Buttons können ja optisch wie ein einziger langer Balken gestaltet werden, wenn es sein muss auch mit einer Skala. Oder verstehe ich da jetzt etwas komplett falsch?

    Zumal man bei der Ein-Button-Lösung noch einen zweiten dazumachen müsste, um auch mal rückwärts gehen zu können. Ansonsten ist's von 75% auf 70% ein gar sehr langer Weg …

  • Muss ich mich jetzt verteidigen? 20 Buttons in einer Reihe, die einen Balken bilden (mit oder ohne Skala ist eine Frage der grafischen Gestaltung), kann man sich vorstellen, oder? Dass jeder Button eine onclick Aktion hat, die einen entsprechenden SkinString-Wert setzt – entsprechend dem repräsentierten %-Wert – kann man sich auch vorstellen, nicht? Das ist keine hohe Skinning-Kunst, die man erst vorführen müsste. Der Punkt ist doch nur der, dass ich (bei Bedienung per Maus oder Touchscreen) direkt den Bereich anklicke, den ich auch auswählen möchte und nicht erst soundsoviele Schritte durchgehen muss, um zum Ergebnis zu kommen. Die Aus- bzw. Verwertung erfolgt dann wie in der von Marc0810 oben vorgeschlagenen Methode. Dazu muss ich doch jetzt nicht wirklich vorkauen, wie man in Kodi einen Button coded, oder?

  • Du musst dich nicht verteidigen, aber für alle ist es immer spannend zu erleben, wie eine Idee nicht nur im Kopf dargestellt wird sondern auch in der reelen Umgebung implementiert wird. Alle können dann davon profitieren...

  • Schon verstanden. Nur geht es hier doch nicht primär darum, wie man das coded (einen Button muss man nicht wirklich erklären, oder?). Hier geht es um Useability. Wie konzipiere ich ein Bedienelement, das für den User möglichst intuitiv und einfach bedienbar ist? Es geht also nicht darum, was ich coden kann sondern was soll am Ende da stehen? Will ich einen einzelnen Button, der für den unbedarften User höchstwahrscheinlich sogar erklärungsbedürftig ist ("Klicke hier bitte so oft, bis dir das Ergebnis gefällt") oder einen selbsterklärenden "Balken", der nicht ganz zufälligerweise an einen Slider erinnern kann (wie ja ursprünglich im Startpost angedacht)?

    So sieht das in meinem Skin aus:

Jetzt mitmachen!

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