"Normal - Hover - Active_1 - Active_2(wenn Active_anderer)" Toggle im PSS

Begonnen von voodoomonkey, 06. Juni 2010, 01:42:25

Vorheriges Thema - Nächstes Thema

voodoomonkey

Hallo Zusammen. Habe gestern schon mal mein Skin im "Zeigt her eure Foobars" Threat gepostet und angekündigt, dass ich bei einigen Dingen Hilfe brauche.

Das ist nun so ein Fall bei dem ich nicht weiter komme.

Folgendes Szenario:

Script aus dem PSS:



// Hier schalte ich das Ribbon Panel zur ELPlaylist ein und aus

$ifequal($get_ps_global(Ribbon),1,
$movepanel_c(ELPlaylist,0,150,%_width%,$sub(%_height%,189))
$showpanel_c(Ribbon,1)
$imagebutton(0,20,22,22,buttons\collapse.png,buttons\collapse_h.png,SETGLOBAL:Ribbon:0;PANELSHOW:Ribbon:0;REFRESH;)
,
$movepanel_c(ELPlaylist,0,50,%_width%,$sub(%_height%,89))
$imagebutton(0,20,22,22,buttons\expand.png,buttons\expand_h.png,SETGLOBAL:Ribbon:1;PANELSHOW:Ribbon:1;REFRESH;))

//Tabschalter für Playlist

$if($isvisible_c(ELPlaylist),
$imagebutton(30,20,59,23,buttons\library_on.png,buttons\library_on.png,COMMAND:View/Columns playlist/Activate now playing;REFRESH)
,
$imagebutton(30,20,59,23,buttons\library.png,buttons\library_h.png,
PANELSHOW:Ribbon:$get_ps_global(Ribbon);
PANELSHOW:ELPlaylist:1;
REFRESH;
COMMAND:View/Columns playlist/Activate now playing))


Sieht so aus:

Fehlerhaften Link zum Bild entfernt - tedgo

Wär nett wenn mir da jemand helfen könnte.

tedgo

Ich blick noch nicht ganz durch...
Irgendwie bräuchtest du eine Variable, die angibt, wenn das Panel aktiv getoggelt wird und gleichzeitig der aktive Tab ist (oder ist das dein "Ribbon" Panel?).

Vielleicht wäre es sinnvoller, du lädst deine Config mal irgendwo hoch (mit einer Liste der nötigen Plugins), dann könnte ich ja mal einen genaueren Blick darauf werfen.

Übrigens, eines kann ich dir jetzt schon verraten:
Mit deiner Art, im PSS relative Pfade anzugeben, wirst du Probleme bekommen. Da gibt es nämlich einen Bug im PSS.
Für relative Pfade von der foobar2000.exe aus solltets du immer %ps_foobar2000_path% benutzen, sonst kann es passieren, dass dir hin und wieder gar keine Bilder angezeigt werden ;).

Leg doch z.B. eine globale Variable an:
$set_ps_global(foo.path,%ps_foobar2000_path%\buttons\)

Und ruf dann diese z.B. auf %foo.path%collapse.png

voodoomonkey

Danke für den Hinweis und dein Angebot. Hab das Packet auf Rapidshare geuppt. Hoffe das geht in Ordnung.

Was mir Schwierigkeiten bereitet ist im PSS markiert. Der Bereich "Library"

Nochmal anders beschrieben :

Ich hab einen Switch Button für das Library Panel. Ist der aktiv erscheint ein Drop-Down Pfeil mit dem ich im Library Panel zusätzlich die Ribbon Bar (Das ist die graue Menüleiste) hinzutoggeln kann.

Die soll dann Tab spezifische Buttons haben. Also beispielsweise im Library Panel : Sort A-Z , ...usw;  und im Biography Panel dann z.B. " Get LastFM Artist Info"

Das würde ich dann mit WSH Paneln lösen.

Hoffe das macht die Sache klarer.

So. Hier der Link:

http://rapidshare.com/files/395943256/2010.zip.html

tedgo

Okay. Ich lade es mir mal runter und schau es mir an. Kann aber nicht versprechen, dass ich vor übermorgen dafür Zeit habe...

Diese Ribbon-Buttons jeweils im WSH Panel mod zu lösen wird aber umfangreicher, als lediglich die Buttons in Abhängigkeit des jeweils aktiven Panels im PSS zu "ändern" (Da WSH panel mod nicht weiß, welches Panel gerade aktiv ist, bräuchtest du da für jedes Panel ein eigenes Script...).
Aber mal sehen ;).

tedgo

Habe zunächst mal einen kurzen Blick drauf geworfen.

Hast du mir evtl. die falsche FCL geschickt?
Zitat von: voodoomonkey in 06. Juni 2010, 17:05:52
...Ich hab einen Switch Button für das Library Panel. Ist der aktiv erscheint ein Drop-Down Pfeil mit dem ich im Library Panel zusätzlich die Ribbon Bar (Das ist die graue Menüleiste) hinzutoggeln kann...
Ein Button für die Ribbon Bar ist da gar nicht drin...

Du machst es dir mit deinem Script auch etwas schwer. Schon jetzt ließe sich das Script auf etwa 1/3 eindampfen, wenn du die globalen Variablen auch nutzen würdest, die du mit den Buttons setzt, anstatt bei jedem Button mit PANELSHOW:xxx:x jedes einzelne Panel ab- bzw. anzuschalten).

Ich würde für den Ribbon-Button so vorgehen:
1.) Erstelle zunächst einige globale Variablen:
$init_ps_global(Ribbon,0)
$init_ps_global(PanelSwitch,1)
$init_ps_global(PadPlaylist,0)

2.) Dann platzierst du deine Panel im Script mit $movepanel_c(), wobei du y und h je nach Stand der Ribbon-Variable variierst, z. B.:
$puts(panel.y,$ifequal(%Ribbon%,1,150,50))
$puts(panel.h,$ifequal(%Ribbon%,1,$sub(%ps_height%,189),$sub(%ps_height%189)))

$movepanel_c(Library Panel,0,$get(panel.y),175,$get(panel.h))
$movepanel_c(ELPlaylist,$ifgreater(%PadPlaylist%,0,180,0),$get(panel.y),$ifgreater(%PadPlaylist%,0,...

Damit schiebst du die eigentlichen Panel etwas nach unten und hast so Platz für deine Ribbon-Bar (ich habe jetzt mal 100 Pixel als Beispiel genommen).

3.) Zeige dann die jeweiligen Panel mit $showpanel_c() abhängig vom Stand der über Button zu schaltenden globalen Variable:
$showpanel_c(Library Panel,$ifequal(%PanelSwitch%,1,$ifequal(%PadPlaylist%,1,1,0),0))
$showpanel_c(Filter Panel,$ifequal(%PanelSwitch%,1,$ifequal(%PadPlaylist%2,1,0),0))

$showpanel_c(ELPlaylist,$ifequal(%PanelSwitch%,1,1,0))
$showpanel_c(Biography,$ifequal(%PanelSwitch%,2,1,0))
$showpanel_c(Lyrics,$ifequal(%PanelSwitch%,3,1,0))
...

4.) Jetzt deine Buttons.
a) Für deinen Button, der zwischen Filter/Playlist switcher und nur Playlist umschaltet brauchst du eine Variable, z.B.:
$puts(Library.command,$ifequal(%PadPlaylist%,2,0,$add(%PadPlaylist%,1)))

Der Button:
$imagebutton(0,27,23,19,%ps_foobar2000_path%\buttons\list_toggle_on.png,%ps_foobar2000_path%\buttons\list_toggle_on.png,SETGLOBAL:PadPlaylist:$get(Library.command);REFRESH;)

b) Dann dein Ribbon-Button. Mit dem schaltest du nur die Variable %Ribbon% um, z. B.: (den musst du natürlich noch richtig platzieren)
$imagebutton(x,y,w,h,%ps_foobar2000_path%\buttons\ribbon.png,%ps_foobar2000_path%\buttons\ribbon_on.png,SETGLOBAL:Ribbon:$ifequal(%Ribbon%,1,0,1);REFRESH;)

c) Jetzt legst du ganz einfach deine Tab-Buttons an.
Und zwar würde ich an deiner Stelle - es ist die einfachste Lösung im Script - ein viertes Bildchen für die Buttons anlegen. Also nicht nur library.png, library_on.png, library_h.png sondern auch library_r.png (als graues Kästchen mit der jeweiligen Aufschrift) für die Ribbon-Ansicht.

Dann eine Variable, wie: $puts(image,$ifequal(%Ribbon%,1,_r,_on))
Und der Button:
$ifequal(%PanelSwitch%,1,
$imagebutton(30,20,59,23,%ps_foobar2000_path%\buttons\library$get(image).png,%ps_foobar2000_path%\buttons\library$get(image).png,COMMAND:View/Columns playlist/Activate now playing;REFRESH)
,
$imagebutton(30,20,59,23,%ps_foobar2000_path%\buttons\library.png,%ps_foobar2000_path%\buttons\library_h.png,COMMAND:View/Columns playlist/Activate now playing;SETGLOBAL:PanelSwitch:1;REFRESH)
)

5.) Und nun musst du noch den bei %Ribbon%=1 frei gewordenen Platz mit einem grauen Hintergrund füllen, oder eben deine WSH Panel, die du einbauen willst grau hinterlegen. Und natürlich die Panel-spezifischen Buttons einbauen.

Ist jetzt nur eine schnelle Idee (hahaha... schnell...  :D).
Da sind sicher ein zwei Fehlerchen drin, habs ja nur mal so aus dem Nichts hingetippt ohne es zu testen.
Ich wollte dir nur dein Script etwas vereinfachen.

Ich hoffe, es war halbwegs verständlich, was ich da getextet habe...
Wenn dir die Lösung so nicht gefällt, melde dich nochmal. Es geht natürlich auch anders (z. B. in dem man statt den Bildchen library_on und library_r nur einen Hintergrund im PSS zeichnet oder bei %Ribbon%=1 einfach den jeweiligen Buttons abschaltet und das "Ribbon-Grau" einfach drüberzeichnet. Es gibt immer mehrere Lösungen).
Und das ganze Script lässt sich bestimmt noch weiter "komprimieren".

voodoomonkey

SOrry für die lange OffZeit. Muss mich für meine Klausuren vorbereiten und da bleibt net so viel Zeit und Lust grad. Aber Wochenende is ja nun on und erstmal danke für deine Mühe. Ich werd das nach deinen Ausführungen gleich mal einbasteln wenn ich Zeit hab.

Nochmal vielen Dank.


voodoomonkey

Alles Klar soweit...Deine Ausführungen sind klasse. Hab das alte Script aufn Müll und pass grad deine Sachen an. Läuft. Das Panelswitchen läuft und is echt 1/10 der größe. Dementsprechend schnell. Superdank dafür. Jetzt wird mir das Scripten auch klarer. Was nun noch ansteht is die Ribbon Bar. Das wird schon. Freu mich dir dann als ersten das fertige Teil zu schicken ;)

tedgo

Worüber du noch nachdenken solltest:
Deine in den PSS integrierten Panel solltest du alle mit aktiviertem "Forced Layout" anlegen.
Die "dynamischen" Panel, also die, welche je nach Button-Stand in ihrer Größe variieren, solltest du aber nicht mit fixen Werten für left, top, width und height auf der Registerkarte "PanelList" angeben, sondern eher NUR im Script mit $movepanel_c(). Es könnte sonst zu kurzfristigen Fehlern in der Darstellung führen, wenn du zwei unterschiedliche Werte auf der PanelList und im Script hast und zudem auch noch teilweise einzelne Werte in der PanelList (z. B. für top) weglässt.

voodoomonkey

#8
Jo der Hinweis is sehr hilfreich.

voodoomonkey

Soweit so gut. Hab die Ribbon Bar am Laufen. Das einzige was noch fehlt is dass beim Einschalten der Ribbonbar der Paneltab Button in den _r Zustand wechselt. Sprich der blaue wird zum grauen. Du hast zwar kurz was erwähnt wie mans auf verschiedene Art und Weise machen kann, aber leider komm ich nicht klar an der Stelle.

In die Ribbonbar hab ich mal testhalber die waveform seekbar eingebaut. Kennst sicher. Zum testen halt mp3 starten ;)

Wär Klasse wenn mir hierbei noch als letztes helfen würdest. Dann wär die Sache komplett für ein Release.