; Module/File: LIG_OnlyCheckboxActivatable2_.pb ; Function: ListIconGadget, non selectable with working checkboxes w. popup on headerclick - Linux ; Author: Omi ; Date: Nov. 10, 2016 ; Version: 0.1 ; Target Compiler: PureBasic 5.22/5.31/5.40 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- ; Change all Checkboxes with Popup click on ColumnHeader click EnableExplicit ImportC "" g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" EndImport ; Object constants #Win_Main= 0 #LIG = 0 Enumeration; Popup #Pu1 #Pu1_Item11 #Pu1_Item12 EndEnumeration Global.i gEvent, gQuit Procedure CreatePopup() CreatePopupMenu(#Pu1) MenuItem(#Pu1_Item11, "Check all item" ) MenuItem(#Pu1_Item12, "Uncheck all item" ) EndProcedure ;Check ALL or NONE with Popup on Header click ... ProcedureC Callback_TV_HeaderButtonClicked(*widget.GtkWidget, Gadget); Callback: LIG-column-header clicked DisplayPopupMenu(#Pu1, WindowID(#Win_Main)) EndProcedure Procedure SetLIGCheckboxesAll(Gadget, State); Set all item to checked or not checked Protected.i I For I= 0 To CountGadgetItems(Gadget)- 1 SetGadgetItemState(Gadget, I, State) Next I gtk_widget_queue_draw_(GadgetID(Gadget)); Redraw PostEvent(#PB_Event_Gadget, #Win_Main, #LIG, #PB_EventType_Change); Event on change EndProcedure Procedure.s CheckLIGCheckboxes(Gadget); Return TAB separated string with checked items Protected.i I Protected.s S= "" For I= 0 To CountGadgetItems(Gadget)- 1 If GetGadgetItemState(Gadget, I) = #PB_ListIcon_Checked S+ Str(I)+ #TAB$ EndIf Next I ProcedureReturn RTrim(S, #TAB$) EndProcedure Procedure CreateWindow_Main() Protected.i I If OpenWindow(#Win_Main, 200, 200, 500, 400, "LIG - Only activatable checkboxes", #PB_Window_SystemMenu) ListIconGadget(#LIG, 5, 5, 480, 380, "Alternative for ScrollAreaGadget with single CheckBoxGadgets", 100, #PB_ListIcon_CheckBoxes) For I= 1 To 20 AddGadgetItem(#LIG, -1, "This is Checkbox-Alternative " + Str(I)) Next I ; LIG non selectable ... gtk_tree_selection_set_mode_(gtk_tree_view_get_selection_(GadgetID(#LIG)), #GTK_SELECTION_NONE) ; Allow header click on column 1 ... gtk_tree_view_set_headers_clickable_(GadgetID(#LIG), #True) ; Signal to callback on header click ... g_signal_connect(gtk_tree_view_get_column_(GadgetID(#LIG), 0), "clicked", @Callback_TV_HeaderButtonClicked(), #LIG) EndIf CreatePopup() EndProcedure CreateWindow_Main() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget Select EventGadget() Case #LIG If EventType() = #PB_EventType_Change;LeftClick Debug "Checked: " + ReplaceString(CheckLIGCheckboxes(#LIG), #TAB$, ";", #PB_String_InPlace) EndIf EndSelect Case #PB_Event_Menu Select EventMenu() Case #Pu1_Item11 SetLIGCheckboxesAll(#LIG, #PB_ListIcon_Checked) Case #Pu1_Item12 SetLIGCheckboxesAll(#LIG, #Null) EndSelect EndSelect Until gQuit ; IDE Options = PureBasic 5.45 LTS (Linux - x86) ; CursorPosition = 3 ; Folding = - ; EnableUnicode ; EnableXP