Seite 1 von 1

ListIcon Spaltenbreiten ermitteln

Verfasst: 08.07.2014 09:10
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

Re: ListIcon Spaltenbreiten ermitteln

Verfasst: 08.07.2014 09:20
von ts-soft
Scheint ein Bug zu sein.

Re: ListIcon Spaltenbreiten ermitteln

Verfasst: 08.07.2014 09:56
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.

Re: ListIcon Spaltenbreiten ermitteln

Verfasst: 08.07.2014 10:33
von ts-soft

Re: ListIcon Spaltenbreiten ermitteln

Verfasst: 08.07.2014 10:42
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

Re: ListIcon Spaltenbreiten ermitteln

Verfasst: 08.07.2014 18:26
von matbal
@edel

Vielen Dank für deinen Code. Damit klappt es jetzt!

Re: ListIcon Spaltenbreiten ermitteln

Verfasst: 10.09.2015 17:25
von ts-soft
Wurde jetzt, 1 Jahr später, gefixed!