Aktuelle Zeit: 26.09.2020 13:46

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: TreeGadget und horizontale Scrollbar unter Linux
BeitragVerfasst: 16.01.2020 12:37 
Offline

Registriert: 09.02.2017 13:54
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 ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TreeGadget und horizontale Scrollbar unter Linux
BeitragVerfasst: 16.01.2020 21:11 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
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:

Code:
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: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TreeGadget und horizontale Scrollbar unter Linux
BeitragVerfasst: 17.01.2020 18:41 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Neu: siehe oben

_________________
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TreeGadget und horizontale Scrollbar unter Linux
BeitragVerfasst: 18.01.2020 11:12 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo: Die expandAll() Funktion ist irgendwie total Fehlerhaft.
Probiert mal das Wiedereinklappen.

Code:
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: MX Linux 19 / Windows 10 / Mac OS 10.15.2 / Android 7.0 ;)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 15 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye