; Module/File: Button_BoxImageToggle_gtk2_2.pb ; Function: Adding ButtonBox with combined text/image stock-ImageToggleButtons - Linux gtk2 ; Author: Omi ; Date: Sep. 26, 2017 ; Version: 0.1 ; 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 ;-------------------------------------------------------------- EnableExplicit ImportC "" g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" gtk_toggle_button_new_with_label(icon_name.p-utf8) gtk_box_pack_start(*box.GtkBox, *child.GtkWidget, expand, fill, padding) gtk_box_set_spacing(*box.GtkBox, spacing) gtk_button_box_set_child_secondary(*widget.GtkButtonBox, *child.GtkWidget, is_secondary) gtk_toggle_button_set_active(*toggle_button.GtkToggleButton, is_active) gtk_button_set_use_stock(*button.GtkButton, use_stock) gtk_button_set_image_position(*button.GtkButton, position) EndImport ; Object constants #Win_Main = 0 #BBut1 = 0 #BBut2 = 1 #BBut3 = 2 #GTK_BUTTONBOX_CENTER= 5 Global.i gEvent, gEventGadget, gQuit Global *gButtonBox ProcedureC Callback_ButtonBoxResetSelection(*button.GtkButton, user_data) gtk_toggle_button_set_active(*button, #False) EndProcedure ProcedureC Callback_ButtonPressed(*widget.GtkWidget, *event.GdkEventButton, user_data) gtk_container_foreach_(*gButtonBox, @Callback_ButtonBoxResetSelection(), 0) If user_data = #BBut1 PostEvent(#PB_Event_Gadget, #Win_Main, #BBut1) ElseIf user_data = #BBut2 PostEvent(#PB_Event_Gadget, #Win_Main, #BBut2) ElseIf user_data = #BBut3 PostEvent(#PB_Event_Gadget, #Win_Main, #BBut3) EndIf EndProcedure Procedure ButtonBox_AddButton(*BBox.GtkButtonBox, Gadget, Label.s) Protected.GtkButton *button= gtk_toggle_button_new_with_label(Label) gtk_button_set_use_stock(*button, #True) gtk_button_set_image_position(*button, #GTK_POS_TOP) gtk_button_set_focus_on_click_(*button, #False) gtk_box_pack_start(*BBox, *button, #False, #False, 0) gtk_button_box_set_child_secondary(*BBox, *button, #False) g_signal_connect(*button, "button-press-event", @Callback_ButtonPressed(), Gadget) EndProcedure Procedure.i ButtonBox(Gadget, x, y, w, h) Protected.i Container= ContainerGadget(Gadget, x, y, w, h, #PB_Container_BorderLess) Protected.GtkButtonBox *bbox= gtk_hbutton_box_new_() Protected.GtkButton *button1, *button2, *button3 Protected.GtkImage *image gtk_container_add_(GadgetID(Container), *bbox) ; gtk_button_box_set_layout(*bbox, #GTK_BUTTONBOX_CENTER) gtk_box_set_spacing(*bbox, -5) ButtonBox_AddButton(*bbox, #BBut1, "gtk-justify-left") ButtonBox_AddButton(*bbox, #BBut2, "gtk-justify-center") ButtonBox_AddButton(*bbox, #BBut3, "gtk-justify-right") gtk_widget_show_all_(GadgetID(Container)) CloseGadgetList() ProcedureReturn *bbox EndProcedure Procedure Create_WinMain() If OpenWindow(#Win_Main, 300, 200, 500, 200, "ButtonBox-ToggleButtons gtk2", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) *gButtonBox= ButtonBox(#PB_Any, 10, 10, 250, 52) EndIf EndProcedure Create_WinMain() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True Case #PB_Event_Gadget gEventGadget= EventGadget() Select gEventGadget Case #BBut1 To #BBut3 Debug "ButtonBox-Button " + gEventGadget + " clicked" EndSelect EndSelect Until gQuit ; IDE Options = PureBasic 5.46 LTS Beta 1 (Linux - x86) ; CursorPosition = 16 ; Folding = - ; EnableUnicode ; EnableXP ; SubSystem = gtk2