Do anyone knows how to determine the row and the line under the mousecursor in ListIconGadget in PB-Linux 4.01 ?
Greetings

Wolf
Code: Select all
#tree_1=0
XIncludeFile "missing_functions.pb"
Procedure open_window_0()
OpenWindow(0,0,0,500,200,"test",#PB_Window_ScreenCentered|#PB_Window_TitleBar)
If CreateGadgetList(WindowID(0))
ListIconGadget(#tree_1,10,10,320,150,"spalte1",100,#PB_ListIcon_FullRowSelect);
AddGadgetColumn(#tree_1,1,"spalte 2",100)
For m=0 To 100
AddGadgetItem(#tree_1,-1,"entry_"+RSet(Str(m),3,"0"))
Next
EndIf
EndProcedure
open_window_0()
gtk_tree_view_set_hover_selection_(GadgetID(#tree_1),#True)
Repeat
event=WaitWindowEvent()
gadget=EventGadget()
event_type=EventType()
If event= #PB_Event_Gadget
If gadget = #tree_1
Select event_type
Case #PB_EventType_Change
Debug "Change"
Case #PB_EventType_LeftClick
; Debug "left"
Case #PB_EventType_LeftDoubleClick
; Debug "left double"
Case #PB_EventType_RightClick
; Debug "right"
Case #PB_EventType_RightDoubleClick
; Debug "right double"
EndSelect
EndIf
EndIf
Until event=#PB_Event_CloseWindow
END
Code: Select all
;
; Get the item and/or column index at the mouse position
; Works for: ListViewGadget, ListIconGadget, TreeGadget, ExplorerListGadget
;
; Usage: GetMousePosition(#Gadget, @Index, @Column)
; Either the @Index or @Column field can be #Null if the value is not needed.
;
; needed to get correct TreeGadget index
Structure tree_foreach_data
TreePath.l
ItemIndex.l
EndStructure
ProcedureC tree_foreach(*Model, *Path, *Iter, *user_data.tree_foreach_data)
If gtk_tree_path_compare_(*Path, *user_data\TreePath) = 0
ProcedureReturn #True
Else
*user_data\ItemIndex + 1
ProcedureReturn #False
EndIf
EndProcedure
Procedure GetMousePosition(Gadget, *ItemIndex.LONG, *ColumnIndex.LONG)
Protected x, y, *TreePath, *TreeColumn, *ColumnList.GList
Protected foreach_data.tree_foreach_data
gdk_window_get_pointer_(gtk_tree_view_get_bin_window_(GadgetID(Gadget)), @x, @y, 0)
If gtk_tree_view_get_path_at_pos_(GadgetID(Gadget), x, y, @*TreePath, @*TreeColumn, #Null, #Null)
If *ItemIndex
If GadgetType(Gadget) = #PB_GadgetType_Tree
foreach_data\TreePath = *TreePath
gtk_tree_model_foreach_(gtk_tree_view_get_model_(GadgetID(Gadget)), @tree_foreach(), @foreach_data)
*ItemIndex\l = foreach_data\ItemIndex
Else
*ItemIndex\l = PeekL(gtk_tree_path_get_indices_(*TreePath))
EndIf
EndIf
gtk_tree_path_free_(*TreePath)
If *ColumnIndex
*ColumnList = gtk_tree_view_get_columns_(GadgetID(Gadget))
*ColumnIndex\l = g_list_index_(*ColumnList, *TreeColumn)
g_list_free_(*ColumnList)
EndIf
; *TreeColumn may not be freed!
Else
; No item under the cursor, or cursor not inside the gadget
If *ItemIndex : *ItemIndex\l = -1 : EndIf
If *ColumnIndex: *ColumnIndex\l = -1: EndIf
EndIf
EndProcedure
; ============================================================
; Example
; ============================================================
#List = 0
#Text = 1
ProcedureC MouseEvent(*Widget.GtkWidget, *Event.GdkEventMotion, user_data)
Protected ItemIndex, ColumnIndex
GetMousePosition(#List, @ItemIndex, @ColumnIndex)
SetGadgetText(#Text, "Cursor at: " + Str(ItemIndex) + "x" + Str(ColumnIndex))
EndProcedure
If OpenWindow(0, 0, 0, 300, 300, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
TextGadget(#Text, 10, 260, 280, 30, "", #PB_Text_Border)
ListIconGadget(#List, 10, 10, 280, 240, "Col 0", 80)
For i = 1 To 6
AddGadgetColumn(#List, -1, "Col " + Str(i), 80)
Next i
For i = 0 To 25
Text$ = ""
For j = 0 To 6
Text$ + Str(i) + "x" + Str(j) + Chr(10)
Next j
AddGadgetItem(#List, -1, Text$)
Next i
g_signal_connect_data_(GadgetID(#List), "motion-notify-event", @MouseEvent(), 0, #Null, #Null)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf