hei, Leute ... und guten Tag.
Wieder mal eine "Herausforderung" .
TreeGadget und horizontale Scrollbar.
Sie wird nicht dargestellt unter qt und nur "andeutungsweise" unter GTK2 (minimaler Ausschnitt der bar)
Das ist wohl seit über 10 Jahren (nach Recherchen) ein Problem.
Unter Windows gibt es eine Lösung mit Hilfe der API, da das Problem anscheinend nur nach
einem ClearGadgetItem auftritt. Aber das benötigt man ja ständig.
Für Linux habe ich nichts gefunden.
Hat jemand dafür vielleicht eine Lösung bzw. einen workaround wie für Windows?
... Peter ...
TreeGadget und horizontale Scrollbar unter Linux
Re: TreeGadget und horizontale Scrollbar unter Linux
Da hast du aber gleich mal ein riesen PureBasic-Problem beschrieben.
Also 1. Es funktioniert grundsätzlich unter GTK2 und GTK3.
Das bei dir nur eingeschränkt Scrollbalken unter GTK2 - Subsystem kommen kann an deiner Linux-Distribution und/oder deinem GTK-GUI_Theme liegen. Es wäre hierbei auch wichtig welche GTK2 Version genutzt wird.
Also bei mir funktioniert es mit GTK2 und auch mit GTK3.
Nun kommen wir zu Punkt 2.
Das QT-Subsytem unter Purebasic ist noch recht fehlerhaft.
Außerdem liegt es beim TreeGadget an dem kniffligen QT-Unterbau.
Hier ist eine mögliche Lösung:
Also 1. Es funktioniert grundsätzlich unter GTK2 und GTK3.
Das bei dir nur eingeschränkt Scrollbalken unter GTK2 - Subsystem kommen kann an deiner Linux-Distribution und/oder deinem GTK-GUI_Theme liegen. Es wäre hierbei auch wichtig welche GTK2 Version genutzt wird.
Also bei mir funktioniert es mit GTK2 und auch mit GTK3.
Nun kommen wir zu Punkt 2.
Das QT-Subsytem unter Purebasic ist noch recht fehlerhaft.
Außerdem liegt es beim TreeGadget an dem kniffligen QT-Unterbau.
Hier ist eine mögliche Lösung:
Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_Linux And Subsystem("qt")
Global Tree_0
#Qt_ScrollBarAsNeeded = 0
#Qt_ScrollBarAlwaysOff = 1
#Qt_ScrollBarAlwaysOn = 2
#Qt_ScrollPerItem = 0
#Qt_ScrollPerPixel = 1
Runtime Procedure QtSignalHandler()
QtScript("gadget("+Str(Tree_0)+").resizeColumnToContents(function() { 0 })")
EndProcedure
Procedure OpenWindow_0(x = 0, y = 0, width = 400, height = 400)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
Tree_0 = TreeGadget(#PB_Any, 10, 10, 380, 380)
QtScript("gadget("+Str(Tree_0)+").horizontalScrollBarPolicy = "+Str(#Qt_ScrollBarAsNeeded))
QtScript("gadget("+Str(Tree_0)+").horizontalScrollMode = "+Str(#Qt_ScrollPerPixel))
QtScript("gadget("+Str(Tree_0)+").verticalScrollBarPolicy = 0")
QtScript("gadget("+Str(Tree_0)+").columnCount = 1")
QtScript("gadget("+Str(Tree_0)+~").itemExpanded.connect(function() { runtime.call(\"QtSignalHandler()\") })")
QtScript("gadget("+Str(Tree_0)+~").itemCollapsed.connect(function() { runtime.call(\"QtSignalHandler()\") })")
QtScript("gadget("+Str(Tree_0)+").headerHidden = 1")
For i = 0 To 19
AddGadgetItem(Tree_0, i, "Eintrag "+Str(i+1),0, i)
Next
;Debug QtScript("dump(gadget("+Str(Tree_0)+"))")
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
OpenWindow_0()
Repeat
Until Not Window_0_Events(WindowEvent())
CompilerElse
Debug "Bitte nutzen Sie Linux und das QT-Subsystem zum probieren."
CompilerEndIf
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: TreeGadget und horizontale Scrollbar unter Linux
Neu: siehe oben
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: TreeGadget und horizontale Scrollbar unter Linux
Hallo: Die expandAll() Funktion ist irgendwie total Fehlerhaft.
Probiert mal das Wiedereinklappen.
Probiert mal das Wiedereinklappen.
Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_Linux And Subsystem("qt")
Global Tree_0
#Qt_ScrollBarAsNeeded = 0
#Qt_ScrollBarAlwaysOff = 1
#Qt_ScrollBarAlwaysOn = 2
#Qt_ScrollPerItem = 0
#Qt_ScrollPerPixel = 1
Runtime Procedure QtSignalHandler()
QtScript("gadget("+Str(Tree_0)+").resizeColumnToContents(function() { 0 })")
EndProcedure
Procedure OpenWindow_0(x = 0, y = 0, width = 400, height = 400)
Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu)
Tree_0 = TreeGadget(#PB_Any, 10, 10, 380, 380)
QtScript("gadget("+Str(Tree_0)+").horizontalScrollBarPolicy = "+Str(#Qt_ScrollBarAsNeeded))
QtScript("gadget("+Str(Tree_0)+").horizontalScrollMode = "+Str(#Qt_ScrollPerPixel))
QtScript("gadget("+Str(Tree_0)+").verticalScrollBarPolicy = 0")
QtScript("gadget("+Str(Tree_0)+").columnCount = 1")
QtScript("gadget("+Str(Tree_0)+~").itemExpanded.connect(function() { runtime.call(\"QtSignalHandler()\") })")
QtScript("gadget("+Str(Tree_0)+~").itemCollapsed.connect(function() { runtime.call(\"QtSignalHandler()\") })")
QtScript("gadget("+Str(Tree_0)+").headerHidden = 1")
Global pos.s = ""
Runtime pos
QtScript(~"runtime.set(\"pos\", gadget("+Str(Tree_0)+").pos);")
QtScript(~"var p = \"2, 2\"; gadget("+Str(Tree_0)+~").pos = p; runtime.set(\"pos\", p);")
QtScript(~"runtime.set(\"pos\", gadget("+Str(Tree_0)+").pos);")
QtScript(~"var p1 = 300; var p2 = 300; gadget("+Str(Tree_0)+~").size.height = p1; gadget("+Str(Tree_0)+~").size.width = p2;")
For i = 0 To 19
AddGadgetItem(Tree_0, i, "Eintrag "+Str(i+1),0, i)
Next
QtScript("gadget("+Str(Tree_0)+").expandAll(function() { 0 })")
Debug QtScript("dump(gadget("+Str(Tree_0)+"))")
EndProcedure
Procedure Window_0_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case Tree_0
If EventType() = #PB_EventType_RightClick
RemoveGadgetItem(Tree_0, GetGadgetState(Tree_0))
EndIf
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure
OpenWindow_0()
Repeat
Until Not Window_0_Events(WindowEvent())
CompilerElse
Debug "Bitte nutzen Sie Linux und das QT-Subsystem zum probieren."
CompilerEndIf
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat