ListIcon Spaltenbreiten ermitteln

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

ListIcon Spaltenbreiten ermitteln

Beitrag von matbal »

Ich habe ein Problem beim Ermitteln der Spaltenbreite

Code: Alles auswählen

GetGadgetItemAttribute(#FormMain_ListIcon, 0, #PB_ListIcon_ColumnWidth, 0)
Es wird immer der gleiche Wert zurückgeliefert, egal wie breit ich die Spalte ziehe.

Hier ein lauffähiger Code, der das Problem zeigt. Verstellt einfach die Breite der Spalten und drückt dann den Button, um die Breiten anzuzeigen.

Code: Alles auswählen

EnableExplicit

Enumeration
  #FormMain
  #FormMain_ListIcon
  #FormMain_Button_Width
EndEnumeration

OpenWindow(#FormMain, 100, 100, 500, 400, "Fenster")
ListIconGadget(#FormMain_ListIcon, 10, 10, 480, 320, "Spalte 1", 100, #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#FormMain_ListIcon, 1, "Spalte 2", 200)
AddGadgetColumn(#FormMain_ListIcon, 2, "Spalte 3", 140)

Define i
For i = 0 To 5
  AddGadgetItem(#FormMain_ListIcon, i, "0," + Str(i) + #LF$ + "1," + Str(i) + #LF$ + "2," + Str(i))
Next i

;SetGadgetItemAttribute(#FormMain_ListIcon, 0, #PB_ListIcon_ColumnWidth, 200, 0)
;SetGadgetItemAttribute(#FormMain_ListIcon, 0, #PB_ListIcon_ColumnWidth, 200, 1)
;SetGadgetItemAttribute(#FormMain_ListIcon, 0, #PB_ListIcon_ColumnWidth, 200, 2)

ButtonGadget(#FormMain_Button_Width, 10, 340, 100, 30, "Spaltenbreiten")

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #FormMain_Button_Width
          Define c0 = GetGadgetItemAttribute(#FormMain_ListIcon, 0, #PB_ListIcon_ColumnWidth, 0)
          Define c1 = GetGadgetItemAttribute(#FormMain_ListIcon, 0, #PB_ListIcon_ColumnWidth, 1)
          Define c2 = GetGadgetItemAttribute(#FormMain_ListIcon, 0, #PB_ListIcon_ColumnWidth, 2)
          Debug "Spaltenbreiten: " + c0 + "  " + c1 + "  " + c2
      EndSelect
          
  EndSelect
ForEver
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIcon Spaltenbreiten ermitteln

Beitrag von ts-soft »

Scheint ein Bug zu sein.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: ListIcon Spaltenbreiten ermitteln

Beitrag von NicTheQuick »

ts-soft hat geschrieben:Scheint ein Bug zu sein.
Würdest du das vielleicht im englischen Forum posten? Hab leider gerade keine Zeit dafür.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIcon Spaltenbreiten ermitteln

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: ListIcon Spaltenbreiten ermitteln

Beitrag von edel »

Versuche es mal so:

Code: Alles auswählen

ImportC ""
  gtk_tree_view_get_columns(Widget)
  g_list_nth_data(List, n)
  gtk_tree_view_column_get_width(Col)
  g_list_free(List)
EndImport

Procedure GetColWidth(Gadget, index)
  Protected *ColList
  Protected *Col
  Protected result
  
  *ColList = gtk_tree_view_get_columns(GadgetID(Gadget))  
  *Col = g_list_nth_data(*ColList, index)
  
  If *Col
    result = gtk_tree_view_column_get_width(*Col)    
  Else
    result = -1
  EndIf
  
  g_list_free(*ColList)
  
  ProcedureReturn result
EndProcedure

Code: Alles auswählen

Define c0 = GetColWidth(#FormMain_ListIcon, 0)
Define c1 = GetColWidth(#FormMain_ListIcon, 1)
Define c2 = GetColWidth(#FormMain_ListIcon, 2)
Hier scheint es auch noch einen weiteren Bug mit GTK3 zu geben. Unter GTK3 werden die falschen (GTK2) Api-Funktionen importiert.

Code: Alles auswählen

[WARNING] Gtk (ERROR): GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Re: ListIcon Spaltenbreiten ermitteln

Beitrag von matbal »

@edel

Vielen Dank für deinen Code. Damit klappt es jetzt!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ListIcon Spaltenbreiten ermitteln

Beitrag von ts-soft »

Wurde jetzt, 1 Jahr später, gefixed!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten