Seite 1 von 1

Einfaches umschalten zwischen diversen Gadget Listen

Verfasst: 18.06.2008 13:45
von double7
Hi,

ich hab mal ne ganz dumme Frage, aber nicht lachen :oops:

Über ein Menü möchte ich diverse Gadgets im Fenster anzeigen lassen.

Gibt es eine Möglichkeit zwischen zuvor erstellten Gadget Listen hin und her zu schalten ?

z.B. wenn man den Menüpunkt Preferences auswählt, sollen alle Preferences Gadgets
angezeigt werden und wenn man den Menüpunkt Logs auswählt sollen diese verschwinden
und die entsprechenden neuen Gadgets angezeigt werden.

Muss ich die Gadgets jedesmal löschen und neu erstellen, oder gibt es einen
kompfortableren Trick ?

Gruß, d7

Verfasst: 18.06.2008 14:06
von gnasen
Naja, ich denke du meinst, man drückt Button A (B,C..) und alle A (B,C...) Gadgets sollen angezeigt werden.

Das macht man allerdings nicht über mehrere Gadgetlisten, sondern über ein PanelGadget oder Container Gadget. Steht in der Hilfe alles sehr gut erklärt, am besten auch noch mal die Befehle:

CreateGadgetList() und UseGadgetList()

anschauen, dann sollte der Unterschied deutlich werden.

Kann sein, dass es mit mehreren Gadget Listen geht (noch nie probiert) aber sauberer und übersichtlicher wärs aufjedenfall mit den oben genannten.


Die Idee mit dem Gadgets "überspeichern" ist nicht gut, da wäre eher HideGadget() zu empfehlen ;)

Verfasst: 18.06.2008 19:09
von double7
CreateGadgetlist(), UseGadgetlist etc ist klar /:->

PanelGadgets gehen zwar in die Richtung, nur ich will die Reiter nicht ^^

Kann ich die Container während der Laufzeit verschieben und unsichtbar machen ? Händeln die sich wie normale Gadgets ?

Hmm oder muss ich mir doch wohl eigene Funktionen machen ?

Zusatzfrage:
Ist es nicht Speicher freundlicher, wenn ich die Gadgets destroye? Sonst sind ja immer alle mit Ihren Funktionen und Werten im Speicher?

PS: Linux OS

Verfasst: 18.06.2008 19:32
von Kiffi
double7 hat geschrieben:CreateGadgetlist(), UseGadgetlist etc ist klar /:->
irgendwie habe ich bei diesem Smiley immer das Gefühl, als ob man sich
für die profane Antwort entschuldigen müsste...
double7 hat geschrieben:Kann ich die Container während der Laufzeit verschieben und unsichtbar machen ? Händeln die sich wie normale Gadgets ?
ja und ja
double7 hat geschrieben:Zusatzfrage:
Ist es nicht Speicher freundlicher, wenn ich die Gadgets destroye? Sonst sind ja immer alle mit Ihren Funktionen und Werten im Speicher?
es mag speicherfreundlicher sein (ungetestet), aber vom
Programmieraufwand würde ich persönlich nicht benötigtes einfach
ausblenden. Halte ich auch für weniger (programmier-)fehleranfällig.

Wenn Du so viele Gadgets hast, kannst Du vielleicht alternativ auch
darüber nachdenken, diese (sofern sinnvoll) auf andere Fenster zu
verteilen.

Grüße ... Kiffi

Verfasst: 19.06.2008 14:44
von Rokur
Wenn du es aus irgendeinem Grund in deinem Programm nicht mit Panels lösen kannst oder willst, dann kannst du auch eine eigene Funktion dafür benutzen. Hier mal ein kleines Beispiel wie sowas aussehen könnte:

Code: Alles auswählen

EnableExplicit

#app = "Gadgets gruppieren"

#width = 300
#height = 350

Define event.l
Global i.l
Global cntA.l = 0
Global cntB.l = 0

#unchecked = 0
#checked = 1

#show = 0
#hide = 1

Enumeration 1 ;0 bleibt frei
  #chkA
  #chkB
  #text1
  #text2
  #text3
  #text4
  #text5
  #text6
  #text7
  #text8
  #text9
  #text10
  #text11
  #text12
  #maxAnzahl ;Dieser Eintrag muss in dieser Enumeration IMMER als letztes stehen!
EndEnumeration

;Arrays für die Gruppen
Global Dim gadgetsA.l(#maxAnzahl)
Global Dim gadgetsB.l(#maxAnzahl)

Procedure switchGadgets()
  If GetGadgetState(#chkA) = #checked
    For i = 0 To cntA
      If IsGadget(gadgetsA(i)) <> 0
        HideGadget(gadgetsA(i),#show)
      EndIf
    Next
  Else
    For i = 0 To cntA
      If IsGadget(gadgetsA(i)) <> 0
        HideGadget(gadgetsA(i),#hide)
      EndIf
    Next
  EndIf
  If GetGadgetState(#chkB) = #checked
    For i = 0 To cntB
      If IsGadget(gadgetsB(i)) <> 0
        HideGadget(gadgetsB(i),#show)
      EndIf
    Next
  Else
    For i = 0 To cntB
      If IsGadget(gadgetsB(i)) <> 0
        HideGadget(gadgetsB(i),#hide)
      EndIf
    Next
  EndIf
EndProcedure

OpenWindow(0, 0, 0, #width, #height, #app, #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)

CreateGadgetList(WindowID(0))

;Gadgets zum Umschalten der Gruppen
CheckBoxGadget(#chkA, 5, 5, 40, 20, "A") : SetGadgetState(#chkA,#checked)
CheckBoxGadget(#chkB, 5, 25, 40, 20, "B") : SetGadgetState(#chkB,#checked)

;Initialisieren
For i = 0 To #maxAnzahl
  gadgetsA(i) = 0
  gadgetsB(i) = 0
Next

;Restliche Gadgets automatisch erzeugen und einer Gruppe zuordnen
For i = #text1 To #text10
  TextGadget(i, 50, 20*i, 20, 20, Str(i-2))
  If i <= #text5
    gadgetsA(cntA) = i
    cntA + 1
  Else
    gadgetsB(cntB) = i
    cntB + 1
  EndIf
Next

;Gadgets per Hand einer Gruppe zuordnen
TextGadget(#text11,100,10,20,20,"11")
TextGadget(#text12,100,30,20,20,"12")
gadgetsA(cntA) = #text11 : cntA + 1
gadgetsB(cntB) = #text12 : cntB + 1

Repeat
  event = WaitWindowEvent()

  Select event
    Case #PB_Event_Gadget
      switchGadgets()
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

End

Verfasst: 02.07.2008 13:30
von double7
Danke für eure Hilfe, so etwas in der Art stellte ich mir vor. :allright:

@Kiffi und gnase -> das smily war nicht böse gemeint :)