since many people are 'mouse pushers' and don't use the keyboard, I wanted to implement a copy to clipboard possibility for a ListIconGadget().
For that I needed to know over which column the mouse is located.
Maybe it is useful for somebody else:
Code: Select all
Procedure.i GetGadgetColumns(Gadget.i)
Protected.i Result
If IsGadget(Gadget)
While GetGadgetItemAttribute(Gadget, -1, #PB_ListIcon_ColumnWidth, Result) <> 0
Result + 1
Wend
EndIf
ProcedureReturn Result
EndProcedure
Procedure.i GadgetMouseX()
Protected.i Result, ActiveWindow, ActiveGadget
Result = -1
ActiveWindow = GetActiveWindow()
ActiveGadget = GetActiveGadget()
If ActiveWindow >= 0 And ActiveGadget >= 0
Result = WindowMouseX(ActiveWindow) - GadgetX(ActiveGadget, #PB_Gadget_WindowCoordinate)
EndIf
ProcedureReturn Result
EndProcedure
Procedure.i GadgetMouseY()
Protected.i Result, ActiveWindow, ActiveGadget
Result = -1
ActiveWindow = GetActiveWindow()
ActiveGadget = GetActiveGadget()
If ActiveWindow >= 0 And ActiveGadget >= 0
Result = WindowMouseY(ActiveWindow) - GadgetY(ActiveGadget, #PB_Gadget_WindowCoordinate)
EndIf
ProcedureReturn Result
EndProcedure
OpenWindow(0, 0, 0, 400, 200, "Demo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ListIconGadget(0, 10, 10, 380, 180, "Name", 100, #PB_ListIcon_FullRowSelect)
AddGadgetColumn(0, 1, "MAC", 110)
AddGadgetColumn(0, 2, "Address", 100)
AddGadgetItem(0, -1, "RMS100-HC" + #LF$ + "00-10-6C-00-12-34" + #LF$ + "127.0.0.2")
AddGadgetItem(0, -1, "RMS100-HC-M" + #LF$ + "00-10-6C-00-12-35" + #LF$ + "127.0.0.3")
SetActiveGadget(0)
AddKeyboardShortcut(0, #PB_Shortcut_F1, 0)
AddKeyboardShortcut(0, #PB_Shortcut_Control|#PB_Shortcut_C, 1)
AddKeyboardShortcut(0, #PB_Shortcut_Control|#PB_Shortcut_N, 2)
AddKeyboardShortcut(0, #PB_Shortcut_Control|#PB_Shortcut_M, 3)
AddKeyboardShortcut(0, #PB_Shortcut_Control|#PB_Shortcut_A, 4)
Exit = #False
Repeat
Event = WaitWindowEvent(10)
Select Event
Case #PB_Event_Menu
Select EventMenu()
Case 0
CopyText$ = "Double click for open the device in the web browser" + #LF$ + #LF$
CopyText$ + "CTRL+C to copy the complete line into the clipboard" + #LF$
CopyText$ + "CTRL+N to copy the name into the clipboard" + #LF$
CopyText$ + "CTRL+M to copy the MAC into the clipboard" + #LF$
CopyText$ + "CTRL+A to copy the address into the clipboard" + #LF$
MessageRequester("Help", CopyText$)
Case 1
CopyText$ = GetGadgetItemText(0, GetGadgetState(0), 0)
CopyText$ + GetGadgetItemText(0, GetGadgetState(0), 1)
CopyText$ + GetGadgetItemText(0, GetGadgetState(0), 2)
CopyText$ = Trim(CopyText$)
SetClipboardText(CopyText$)
Case 2
CopyText$ = GetGadgetItemText(0, GetGadgetState(0), 0)
CopyText$ = Trim(CopyText$)
SetClipboardText(CopyText$)
Case 3
CopyText$ = GetGadgetItemText(0, GetGadgetState(0), 1)
CopyText$ = Trim(CopyText$)
CopyText$ = RemoveString(CopyText$, "-")
SetClipboardText(CopyText$)
Case 4
CopyText$ = GetGadgetItemText(0, GetGadgetState(0), 2)
CopyText$ = Trim(CopyText$)
SetClipboardText(CopyText$)
EndSelect
Case #PB_Event_Gadget
Select EventType()
Case #PB_EventType_RightClick
If GetGadgetState(0) >= 0
If IsMenu(0)
FreeMenu(0)
EndIf
CreatePopupMenu(0)
GadgetMouseXPos = GadgetMouseX()
GadgetColumns = GetGadgetColumns(0) - 1
GadgetColumnHelp = 0
For i = 0 To GadgetColumns
GadgetColumnHelp + GetGadgetItemAttribute(0, -1, #PB_ListIcon_ColumnWidth, i)
If GadgetColumnHelp > GadgetMouseXPos
Break
EndIf
Next i
Select i
Case 0
MenuItem(2, "copy name")
Case 1
MenuItem(3, "copy MAC")
Case 2
MenuItem(4, "copy address")
EndSelect
DisplayPopupMenu(0, WindowID(0))
EndIf
EndSelect
Case #PB_Event_CloseWindow
Exit = #True
EndSelect
Until Exit