Tabbed Panel Stack Mod durch Tabs im PSS ersetzen

Begonnen von Audio, 13. April 2010, 16:24:02

Vorheriges Thema - Nächstes Thema

Audio

Servus,

ich habe folgendes Problem: [CUI]

Bis jetzt habe ich mit tabbed panel stack mod (T.P. Wang Version) meine 
ausgeblendeten Tabs via Button auf WSH panel mod oder per Keyboard Shortcut aktiviert.
Dies habe ich nach stundenlangem probieren sogar selbst hinbekommen.
Na ja nicht ganz, ein paar Codeschnipsel hier und da haben mir geholfen... :D

Soweit so gut, nur leider funktionieren die Keyboard Eingaben
um zu einem Eintrag mit gedrücktem Anfangsbuchstaben zu springen
für das Filter Panel, Es Playlist und die Ng Playlist nicht, solange die
Panels in einem Tab vom tab mod sind.

Gibt es einen Workaround dafür?

Wenn nicht und da bin ich mir fast sicher,
muss ich wahrscheinlich mit Panel Stack Splitter
alles neu machen, aber von PSS hab ich echt keine Ahnung und weiss
auch nicht genau wie ich Buttons zeichnen oder zuordnen kann.
Außerdem können PSS Buttons meines Wissens
nicht per Shortcut aufgerufen werden.

Beste Lösung für mich, wäre ein Stack Mod der Keyboard-Unterstützung bietet
oder eine PSS Config mit Buttons denen ich Tasten zuordnen kann.

Für andere Vorschläge oder Lösungshilfen wäre ich sehr dankbar.


tedgo

#1
Die Keyboard Eingaben für die Columns UI Panel funktionieren schon, nur nimmt der Tabbed Panel Stack mod sich den Fokus.
Du müsstest also mindestens einmal in das jeweilige Panel (Filter, NG Playlist oder EsPlaylist) hineinklicken, damit dieses im Fokus steht. Dann sollte es hinhauen.

Ansonsten:
Im PSS funktionieren die Buttons tatsächlich nicht über Shortcuts.

Wenn du dennoch sehen willst, wie man Tabs mit dem PSS machen kann, hier mal ein (vereinfachtes) "Tabs"-Script aus DarkOne (das musst du nur kopieren und in einem PSS auf die Registerkarte "Script --> PerTrack" einfügen):

// ----- PANEL PLACEMENT -------------------------------------------------------------------------------------

$puts(panel.h,$sub(%ps_height%,34))

$movepanel(0,0,0,%ps_width%,$get(panel.h))
$movepanel(1,0,0,%ps_width%,$get(panel.h))
$movepanel(2,0,0,%ps_width%,$get(panel.h))
$movepanel(3,0,0,%ps_width%,$get(panel.h))
$movepanel(4,0,0,%ps_width%,$get(panel.h))
$movepanel(5,0,0,%ps_width%,$get(panel.h))
$movepanel(6,0,0,%ps_width%,$get(panel.h))
$movepanel(7,0,0,%ps_width%,$get(panel.h))

// ----- SHOWPANEL ---------------------------------------------------------------------------------------------

$showpanel(0,$ifequal(%do.panel.switch%,1,1,0))
$showpanel(1,$ifequal(%do.panel.switch%,2,1,0))
$showpanel(2,$ifequal(%do.panel.switch%,3,1,0))
$showpanel(3,$ifequal(%do.panel.switch%,4,1,0))
$showpanel(4,$ifequal(%do.panel.switch%,5,1,0))
$showpanel(5,$ifequal(%do.panel.switch%,6,1,0))
$showpanel(6,$ifequal(%do.panel.switch%,7,1,0))
$showpanel(7,$ifequal(%do.panel.switch%,8,1,0))

// ----- BUTTON-VARIABLES -------------------------------------------------------------------------------------

$puts(col1,191-228-255)
$puts(col2,63-100-127)
$puts(dir,hcenter vcenter)
$puts(btn.y,$sub(%ps_height%,24))
$puts(div.x,$div(%ps_width%,8))

// ----- BUTTONS -------------------------------------------------------------------------------------------------

$font(Impact,10,)
$textbutton(0,2,1,1,,,CONTEXT:Main Menu/File/,,)
$textbutton(0,$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(0)),0,$getcaption(0),RES),$ifgreater($len($getcaption(0)),0,$getcaption(0),RES),SETGLOBAL:do.panel.switch:1;REFRESH,fontcolor:$ifequal(%do.panel.switch%,1,$get(col1),$get(col2)),fontcolor:$get(col1))
$textbutton($get(div.x),$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(1)),0,$getcaption(1),RES),$ifgreater($len($getcaption(1)),0,$getcaption(1),RES),SETGLOBAL:do.panel.switch:2;REFRESH,fontcolor:$ifequal(%do.panel.switch%,2,$get(col1),$get(col2)),fontcolor:$get(col1))
$textbutton($mul($get(div.x),2),$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(2)),0,$getcaption(2),RES),$ifgreater($len($getcaption(2)),0,$getcaption(2),RES),SETGLOBAL:do.panel.switch:3;REFRESH,fontcolor:$ifequal(%do.panel.switch%,3,$get(col1),$get(col2)),fontcolor:$get(col1))
$textbutton($mul($get(div.x),3),$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(3)),0,$getcaption(3),RES),$ifgreater($len($getcaption(3)),0,$getcaption(3),RES),SETGLOBAL:do.panel.switch:4;REFRESH,fontcolor:$ifequal(%do.panel.switch%,4,$get(col1),$get(col2)),fontcolor:$get(col1))
$textbutton($div(%ps_width%,2),$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(4)),0,$getcaption(4),RES),$ifgreater($len($getcaption(4)),0,$getcaption(4),RES),SETGLOBAL:do.panel.switch:5;REFRESH,fontcolor:$ifequal(%do.panel.switch%,5,$get(col1),$get(col2)),fontcolor:$get(col1))
$textbutton($mul($get(div.x),5),$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(5)),0,$getcaption(5),RES),$ifgreater($len($getcaption(5)),0,$getcaption(5),RES),SETGLOBAL:do.panel.switch:6;REFRESH,fontcolor:$ifequal(%do.panel.switch%,6,$get(col1),$get(col2)),fontcolor:$get(col1))
$textbutton($mul($get(div.x),6),$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(6)),0,$getcaption(6),RES),$ifgreater($len($getcaption(6)),0,$getcaption(6),RES),SETGLOBAL:do.panel.switch:7;REFRESH,fontcolor:$ifequal(%do.panel.switch%,7,$get(col1),$get(col2)),fontcolor:$get(col1))
$textbutton($mul($get(div.x),7),$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(7)),0,$getcaption(7),RES),$ifgreater($len($getcaption(7)),0,$getcaption(7),RES),SETGLOBAL:do.panel.switch:8;REFRESH,fontcolor:$ifequal(%do.panel.switch%,8,$get(col1),$get(col2)),fontcolor:$get(col1))


Du brauchst darin nur noch bis zu 8 Panel hinzufügen, für jedes in der PanelList (Rechtsklick auf einen der Buttons --> Splitter Settings --> Registerkarte "PanelList") "Forced Layout" anhaken und eine Abkürzung für das Panel (3 Buchstaben sollten reichen) unter "Caption" vergeben.

Allerdings müsstest du auch hier wahrscheinlich erstmal in eines der Panel hineinklicken, damit du mit Keyboard Eingaben weiterkommst, da sich der PSS und dessen Panel nicht automatisch in den Fokus setzt.

Audio

ZitatDie Keyboard Eingaben für die Columns UI Panel funktionieren schon, nur nimmt der Tabbed Panel Stack mod sich den Fokus.
Du müsstest also mindestens einmal in das jeweilige Panel (Filter, NG Playlist oder EsPlaylist) hineinklicken, damit dieses im Fokus steht. Dann sollte es hinhauen.

Wenn ich nur reinklicken müsste, würde mich das nicht stören.
Es funktioniert auch nach einem Klick ins Panel nicht.
Überhaupt nicht um genau zu sein.

Ich hatte vorher wegen den Splitter Begrenzungen ein paar PSS Panels
in den Tab Mod integriert und dachte eben, das das vielleicht auch der Grund sein könnte.
Leider war das nicht der Fall, habe drei Filter in einen Tab Mod gepackt und sie funktionieren
auch garnicht via Tastatur.

Noch eine Idee vielleicht?

Danke für den Beispiel Code,
werde mal etwas damit rumspielen.  :)


tedgo

Ich benutze den Tabbed Panel Stack mod nicht mehr, kann also sein, dass ich mich da getäuscht habe...

Mit meinem Beispielcode fürs PSS geht es aber. Zumindest nach einem Klick ins jeweilige Panel ;).

Audio

Danke, funktioniert gut!

Ich brauche 6 und nicht 8 Buttons und kapiere nicht ganz was
du am Ende des Scripts multiplizierst bzw. ausrechnest.
Ich denke an dieser Stelle bestimmst du, das alles mittig ausgerichtet bzw.
den gleichen Abstand zueinander hat.

Außerdem habe ich jetzt natürlich Lunte gerochen.  :top:
Ich hätte gerne Bilder - Buttons, nur wie? Die Buttons selber hab ich schon...
Ein "next panel" und "previous panel" Button wäre
im Zweifelsfall fast noch besser.

Und kann ich die Buttons im Wsh panel platzieren und
PSS damit steuern? (eher nein, aber fragen kostet ja nichts...)

Vielen Dank für deine Hilfe.

tedgo

#5
Richtig, mit den Berechnungen wird die Platzierung der Buttons ermittelt.
Du kannst natürlich auch konstante Zahlen angeben, wenn du die Buttons nicht relativ zur Panelgröße erstellen willst.
z. B. $textbutton(x,y,w,h,...) bzw. $imagebutton(x,y,w,h,...)
wobei:
x = Abstand von links
y = Abstand von oben
w = Breite des Buttons
h = Höhe des Buttons

Button mit Bildern (Beispiel am ersten Button):
Statt:

$textbutton(0,$get(btn.y),$get(div.x),24,$ifgreater($len($getcaption(0)),0,$getcaption(0),RES),$ifgreater($len($getcaption(0)),0,$getcaption(0),RES),SETGLOBAL:do.panel.switch:1;REFRESH,fontcolor:$ifequal(%do.panel.switch%,1,$get(col1),$get(col2)),fontcolor:$get(col1))


dieses hier:

$imagebutton(0,$get(btn.y),$get(div.x),24,Pfad zu Normal-Image,Pfad zu Hover-Image,SETGLOBAL:do.panel.switch:1;REFRESH,,)


Um Next/Previous-Buttons zu basteln müsstest du folgendes ins Script einbasteln, bevor du die Buttons erstellst (z. B. unter //-----BUTTON-VARIABLES):

$puts(previous.panel,$ifequal(%do.panel.switch%,1,6,$sub(%do.panel.switch%,1)))
$puts(next.panel,$ifequal(%do.panel.switch%,6,1,$add(%do.panel.switch%,1)))


Dann sähen deine Buttons wie folgt aus:

$imagebutton(0,$get(btn.y),$get(div.x),24,Pfad zu Normal-Image für Previous Panel,Pfad zu Hover-Image für Previous Panel,SETGLOBAL:do.panel.switch:$get(previous.panel);REFRESH,,)
$imagebutton($get(div.x),$get(btn.y),$get(div.x),24,Pfad zu Normal-Image für Next Panel,Pfad zu Hover-Image für Next Panel,SETGLOBAL:do.panel.switch:$get(next.panel);REFRESH,,)

Allerdings wärst du dann auf 6 Panel limitiert!
Der Code ist jetzt ungetestet und nur schnell dahin getippt! Kann also einen Fehler haben!

Buttons vom PSS lassen sich nicht aus dem WSH Panel mod bedienen. Der PSS hat eben nicht wie der Tabbed Panel Stack mod vorgegebene Next/Previous Panel Button Einträge. Das WSH Panel mod erkennt diese also nicht.

Insgesamt siehst du also, dass der PSS in der Handhabung dem Tabbed Panel Stack mod unterlegen ist. Dafür ist er eben vielfältiger.
Das musst letztendlich du abwägen...

EDIT: Habe den Thread umbenannt.

daymen

Gibt es eigentlich eine Möglichkeit einen solchen Button über ein Panel zu zeichnen/schreiben? Daher die Panel die mit dem Befehl Panelshow oder Showpanel sichtbar werden, sollen nicht verschoben werden, damit der Button auf dem Panelstacksplitterhintergrund des gescripteten Panels sichtbar wird.

tedgo

Nein, was du scriptest ist immer im Hintergrund. Über ein Panel kannst du das mit dem PSS nicht legen.

daymen

Alles klar, danke für die schnelle Antwort!

Kann ich alternativ ein Panelstack mit den bloßen Button drüber legen, und dieses Panel gibt dann mit globalen Variabeln an das untere Panel den Befehl zum ändern weiter?

tedgo

Nein, auch ein PSS ist ein Panel. Zwei Panel übereinander geht nicht. Denn hätte das hintere den Fokus, bekommst du das andere nicht mehr in den Vordergrund ;)