; Module/File: Spin_PbSpinGadget_Wheelscroll.pb ; Function: Add value change with scrollwheel support over entry in PB SpinGadget - Linux gtk2/gtk3 ; Author: Omi ; Date: Aug. 24, 2017 ; Version: 0.2 ; Target Compiler: PureBasic 5.22/5.3/5.4/5.5/5.6 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- ;For additional cursor up/down-key support see: Spin_TweakedPbSpinGadget.pb ;This version currently only works with ONE SpinGadget. ;fixed version with GadgetData in a LinkedList (only worked on the last of multiple SpinGadget in 1. version) EnableExplicit ; Object constants #Win_Main = 0 #SpBG1 = 0 #SpBG2 = 1 Global.i gEvent, gEventGadget, gEventType, gQuit CompilerIf #PB_Compiler_OS = #PB_OS_Linux Structure CALLBACKDATA GadgetNo.i WindowNo.i EndStructure Global NewList GadgetData.CALLBACKDATA() ProcedureC Callback_GtkEntryScroll(*widget.GtkWidget, *Event.GdkEventScroll, *user_data.CALLBACKDATA) If *Event\direction = #GDK_SCROLL_UP SetGadgetText(*user_data\GadgetNo, Str(Val(GetGadgetText(*user_data\GadgetNo))+ 1)) PostEvent(#PB_Event_Gadget, *user_data\WindowNo, *user_data\GadgetNo, #PB_EventType_Up) PostEvent(#PB_Event_Gadget, *user_data\WindowNo, *user_data\GadgetNo, #PB_EventType_Change) ElseIf *Event\direction = #GDK_SCROLL_DOWN If Val(GetGadgetText(*user_data\GadgetNo)) > 0 SetGadgetText(*user_data\GadgetNo, Str(Val(GetGadgetText(*user_data\GadgetNo))- 1)) PostEvent(#PB_Event_Gadget, *user_data\WindowNo, *user_data\GadgetNo, #PB_EventType_Down) PostEvent(#PB_Event_Gadget, *user_data\WindowNo, *user_data\GadgetNo, #PB_EventType_Change) EndIf EndIf ProcedureReturn #False EndProcedure CompilerEndIf Procedure SpinGadget_AddMWheel(Window, Gadget) CompilerIf #PB_Compiler_OS = #PB_OS_Linux If GadgetType(Gadget) = #PB_GadgetType_Spin Protected *entry = g_list_nth_data_(gtk_container_get_children_(GadgetID(Gadget)), 0) AddElement(GadgetData()) GadgetData()\GadgetNo= Gadget GadgetData()\WindowNo= Window gtk_widget_add_events_(*entry, #GDK_SCROLL_MASK) g_signal_connect_(*entry, "scroll-event", @Callback_GtkEntryScroll(), @GadgetData()); allow wheelscrolling over entry EndIf CompilerEndIf EndProcedure Procedure Create_WinMain() Protected *widget.GtkHBox, *entry.GtkEntry If OpenWindow(#Win_Main, 300, 200, 500, 200, "PB-SpinGadget use scroll wheel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) SpinGadget (#SpBG1, 5, 5, 100, 26, 0, 10, #PB_Spin_Numeric) SetGadgetState(#SpBG1, 5) SpinGadget (#SpBG2, 5, 35, 100, 26, 0, 10, #PB_Spin_Numeric) SetGadgetState(#SpBG2, 5) SpinGadget_AddMWheel(#Win_Main, #SpBG1) SpinGadget_AddMWheel(#Win_Main, #SpBG2) EndIf EndProcedure Create_WinMain() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget If EventGadget() = #SpBG1 gEventType= EventType() If gEventType = #PB_EventType_Up Debug "SpinGadget 1 up" ElseIf gEventType = #PB_EventType_Down Debug "SpinGadget 1 down" ElseIf gEventType = #PB_EventType_Change Debug "SpinGadget 1 change" EndIf ElseIf EventGadget() = #SpBG2 gEventType= EventType() If gEventType = #PB_EventType_Up Debug "SpinGadget 2 up" ElseIf gEventType = #PB_EventType_Down Debug "SpinGadget 2 down" ElseIf gEventType = #PB_EventType_Change Debug "SpinGadget 2 change" EndIf EndIf EndSelect Until gQuit ; IDE Options = PureBasic 5.46 LTS (Linux - x86) ; CursorPosition = 12 ; Folding = - ; EnableUnicode ; EnableXP