Menu

bassix-gtk3-widgets

big-bass
Attachments
cut-copy-paste.bac (4187 bytes)
cut-copy-paste.png (8796 bytes)

CUT COPY PASTE

All of these bassix demos were tested on linux mint 20.1 64 bit xfce in 2021

image

compile with

bacon cut-copy-paste.bac

Example code: cut-copy-paste.bac

'--- bigbass GTK3 with FIXED placement and some new macros
'--- for the lack of a name we can call it gtk3 bassix 
'--- a simple 'HUG' looking syntax idea but include only what you need as you go
'--- June 25 2020  

OPTION PARSE FALSE
PRAGMA INCLUDE <gtk-3.0/gtk/gtk.h>
PRAGMA OPTIONS `pkg-config --cflags gtk+-3.0` 
PRAGMA LDFLAGS `pkg-config --libs gtk+-3.0` 
PRAGMA OPTIONS -Wno-deprecated-declarations

'--- new signal handlers to simplify the callbacks
DEF FN CONNECT( widget, event,cb) = g_signal_connect_data(widget,event,cb, 0, 0, 0)
DEF FN CONNECT_DATA( widget, event,cb,t) = g_signal_connect_data(G_OBJECT (widget),event,G_CALLBACK (cb),(gpointer) t, 0, 0)
DEF FN NEW(widget,...) = g_object_new(widget, __VA_ARGS__,NULL)
DEF FN PLACE( widget, name,wid,high) = gtk_fixed_put(GTK_FIXED(widget),  GTK_WIDGET(name),wid,high)
DEF FN ADD_FIXED( widget, name) = gtk_container_add(GTK_CONTAINER(widget), GTK_WIDGET(name))
DEF FN SET(widget, name, ...) = g_object_set(GTK_WIDGET(widget), name, __VA_ARGS__, NULL)
DEF FN GET( widget, name, ...) = g_object_get(widget, name, __VA_ARGS__, NULL)
DEF FN SHOW( widget) = gtk_widget_show_all(GTK_WIDGET(widget))
DEF FN HIDE( widget) = gtk_widget_hide(GTK_WIDGET(widget))
DEF FN INIT() = gtk_init(0,0)
DEF FN LABEL(t) = gtk_label_new(t)
DEF FN BUTTON_ADD(t) = gtk_button_new_with_label(t)
DEF FN TEXT_VIEW() = gtk_text_view_new ()
DEF FN FIXED() = gtk_fixed_new()  
DEF FN DISPLAY() = gtk_main() 
DEF FN ATTACH() = gtk_container_add()
DEF FN SCROLLED_WINDOW() = gtk_scrolled_window_new (NULL, NULL)


ALIAS GTK_TYPE_WINDOW TO WINDOW
ALIAS GTK_TYPE_BUTTON TO BUTTON
ALIAS GTK_WIDGET TO WIDGET
ALIAS GTK_CONTAINER TO CONTAINER

DECLARE window, scrolled_win  TYPE GtkWidget*
DECLARE fixed TYPE GtkWidget*


'=====================
SUB exit_prog
'=====================
  END
END SUB



'===================== 
SUB cut_clicked (GtkButton *cut,GtkTextView *textview)
'=====================  
    LOCAL clipboard ,buffer TYPE void*
    clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)
    buffer = gtk_text_view_get_buffer (textview)
    gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE)
END SUB


'===================== 
SUB copy_clicked (GtkButton *copy,GtkTextView *textview)
'===================== 
    LOCAL clipboard ,buffer TYPE void*
    clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)
    buffer = gtk_text_view_get_buffer (textview)
    gtk_text_buffer_copy_clipboard (buffer, clipboard)
END SUB


'=====================
SUB paste_clicked (GtkButton *paste,GtkTextView *textview)
'=====================
    LOCAL clipboard ,buffer TYPE void*
    clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)
    buffer = gtk_text_view_get_buffer (textview)
    gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE)
END SUB




INIT

window = NEW(WINDOW, "icon-name","gtk-about")
SET(window, "title", "Cut, Copy & Paste", "border-width", 10, "default-width", 450) 

fixed = FIXED()
ADD_FIXED(window, fixed)


textview = TEXT_VIEW ()
cut_btn = BUTTON_ADD ("Cut")
copy_btn = BUTTON_ADD ("Copy")
paste_btn = BUTTON_ADD ("Paste")

'--- handle callbacks 
CONNECT(window, "delete-event", exit_prog)
CONNECT_DATA(cut_btn, "clicked" ,cut_clicked ,textview)
CONNECT_DATA(copy_btn, "clicked" ,copy_clicked ,textview)
CONNECT_DATA(paste_btn, "clicked" ,paste_clicked ,textview)


scrolled_win = SCROLLED_WINDOW()
SET(scrolled_win, "width_request", 300  ,"height_request",200)

ADD_FIXED(fixed, scrolled_win)
ADD_FIXED(scrolled_win, textview)


'--- widget ,property , value or string
SET(cut_btn, "width_request", 100  ,"height_request",30)
SET(cut_btn, "label","gtk-cut","use_stock",TRUE,"always_show_image",TRUE) 

SET(copy_btn, "width_request", 100  ,"height_request",30)  
SET(copy_btn, "label","gtk-copy","use_stock",TRUE,"always_show_image",TRUE) 

SET(paste_btn, "width_request", 100  ,"height_request",30)  
SET(paste_btn, "label","gtk-paste","use_stock",TRUE,"always_show_image",TRUE)  

'--- widget ,property  value or string
SET(cut_btn, "tooltip-text", "you can add properties with SET")

'---placement inside fixed,widget,X,Y
PLACE (fixed, cut_btn, 310, 10)
PLACE (fixed, copy_btn, 310, 70)  
PLACE (fixed, paste_btn, 310, 130)

SHOW(window)
DISPLAY

Discussion

  • big-bass

    big-bass - 2021-04-30

    SVG IMAGE

    image

    compile with

    bacon svg-image.bac
    

    Example code: svg-image.bac

    '--- bigbass GTK3 with FIXED placement and some new macros
    '--- for the lack of a name we can call it gtk3 bassix 
    '--- a simple 'HUG' looking syntax idea but include only what you need as you go
    '--- June 25 2020  
    
    OPTION PARSE FALSE
    PRAGMA INCLUDE <gtk-3.0/gtk/gtk.h>
    PRAGMA OPTIONS `pkg-config --cflags gtk+-3.0` 
    PRAGMA LDFLAGS `pkg-config --libs gtk+-3.0` 
    PRAGMA OPTIONS -Wno-deprecated-declarations
    
    '--- new signal handlers to simplify the callbacks
    DEF FN CONNECT( widget, event,cb) = g_signal_connect_data(widget,event,cb, 0, 0, 0)
    DEF FN CONNECT_DATA( widget, event,cb,t) = g_signal_connect_data(G_OBJECT (widget),event,G_CALLBACK (cb),(gpointer) t, 0, 0)
    DEF FN NEW(widget,...) = g_object_new(widget, __VA_ARGS__,NULL)
    DEF FN PLACE( widget, name,wid,high) = gtk_fixed_put(GTK_FIXED(widget),  GTK_WIDGET(name),wid,high)
    DEF FN ADD_FIXED( widget, name) = gtk_container_add(GTK_CONTAINER(widget), GTK_WIDGET(name))
    DEF FN SET(widget, name, ...) = g_object_set(GTK_WIDGET(widget), name, __VA_ARGS__, NULL)
    DEF FN GET( widget, name, ...) = g_object_get(widget, name, __VA_ARGS__, NULL)
    DEF FN SHOW( widget) = gtk_widget_show_all(GTK_WIDGET(widget))
    DEF FN HIDE( widget) = gtk_widget_hide(GTK_WIDGET(widget))
    DEF FN INIT() = gtk_init(0,0)
    DEF FN LABEL(t) = gtk_label_new(t)
    DEF FN BUTTON_ADD(t) = gtk_button_new_with_label(t)
    DEF FN TEXT_VIEW() = gtk_text_view_new ()
    DEF FN FIXED() = gtk_fixed_new()  
    DEF FN DISPLAY() = gtk_main() 
    DEF FN ATTACH() = gtk_container_add()
    DEF FN SCROLLED_WINDOW() = gtk_scrolled_window_new (NULL, NULL)
    
    DEF FN STREAM(im) = g_memory_input_stream_new_from_data(im, -1, g_free)
    DEF FN PIXBUF_MEM(stm) = gdk_pixbuf_new_from_stream(stm, NULL, NULL)
    DEF FN PIXBUFF(p) = gtk_image_new_from_pixbuf (p )
    
    
    
    
    ALIAS GTK_TYPE_WINDOW TO WINDOW
    ALIAS GTK_TYPE_BUTTON TO BUTTON
    ALIAS GTK_WIDGET TO WIDGET
    ALIAS GTK_CONTAINER TO CONTAINER
    
    DECLARE window, scrolled_win ,exit_btn ,image TYPE GtkWidget*
    DECLARE fixed TYPE GtkWidget*
    
    
    
    ' svg for icon and gui
    kitty$ = "<svg width='128' height='128' viewBox='0 0 352 352'>" \
        "<g fill='lightblue'>" \
        "<path d='M18 4C2 12-2 104 12 165l2 12-2 10c-5 24-7 56-4 65 11 30 66  " \
        "75 112 90 69 22 143 1 198-55 28-30 31-46 20-102l-2-13 2-15c13-71  " \
        "7-154-12-154s-69 27-107 57l-11 9-22-1c-13 0-27 0-33 1l-11 1-11-9C85  " \
        "25 32-2 18 4zm45 57c9 4 33 17 34 19l-8 4c-17 8-34 21-45 33-2 3-5 6-5  " \
        "6-3 0 1-54 5-62 2-6 3-6 19 0zm240-3c4 4 7 26 7  " \
        "49v14l-5-5c-13-15-31-27-52-36-4-1 23-16 39-21 9-3 9-3 11-1zM92  " \
        "173h2l-3 5c-8 16-3 56 7 51 8-4 9-32 2-53 0-2 0-2 7 1 11 6 19 15 23  " \
        "27s4 11-3 18c-26 28-69 16-78-22-4-14 25-32 43-27zm181 0c13 2 30 15 30  " \
        "22 0 38-52 56-79 28l-6-7 1-5c2-14 13-28 25-34 8-4 7-4 5 3-5 15-3 45 4  " \
        "49 9 6 14-35 7-51-3-6 0-7 13-5zm-89 26c6 4 12 10 24 27 5 7 12 15 15  " \
        "18 12 12 42 26 86 42 7 2-49 37-77 48-59 23-119 10-183-41-9-7-9-7 0-10  " \
        "56-20 77-33 95-58 18-26 28-33 40-26z'/> " \
        "<path d='M161 247c-14 3-11 22 6 32 2 1 5 2 5 3 0 0-3 7-5 11-11 16-36  " \
        "15-48-1-4-5-3-2 1 5 8 14 27 18 45 9 1 0 1 1 1 3 0 16 17 18 19 2v-5l6  " \
        "3c15 6 32 1 40-12 5-7 5-10 0-4-14 18-43 14-50-7l-2-4c0-1 3-2 5-3 12-7  " \
        "19-24 12-29-6-4-24-6-35-3z'/> " \
        "</g>" \
        "</svg>"
    
    
    
    '=====================
    SUB exit_prog
    '=====================
      END
    END SUB
    
    
    
    '===================== 
    SUB exit_clicked ()
    '=====================  
        END
    END SUB
    
    
    INIT
    
    
    window = NEW(WINDOW, "icon-name","gtk-about")
    SET(window, "title", "SVG testing", "border-width", 10, "default-width", 450) 
    
    fixed = FIXED()
    ADD_FIXED(window, fixed)
    
    
    exit_btn = BUTTON_ADD ("Exit")
    
    
    '--- handle callbacks 
    CONNECT(window, "delete-event", exit_prog)
    CONNECT(exit_btn, "clicked" ,exit_clicked )
    
    '---------------------------------------------------------------------
    '--- IMAGE from file
    '---image = gtk_image_new_from_file ("/usr/share/pixmaps/BaConEyes.png")
    '---------------------------------------------------------------------
    '---Image from PIXBUF
    LOCAL stream TYPE GInputStream*
    LOCAL pixbuf TYPE GdkPixbuf*
    stream = STREAM(kitty$) 
    pixbuf = PIXBUF_MEM(stream)
    image = PIXBUFF(pixbuf)
    
    
    '---------------------------------------------------------------------
    
    PLACE (fixed, image, 10, 10)
    
    '--- widget ,property , value or string
    SET(exit_btn, "width_request", 100  ,"height_request",30)
    SET(exit_btn, "label","gtk-quit","use_stock",TRUE,"always_show_image",TRUE) 
    
    
    '--- widget ,property  value or string
    SET(exit_btn, "tooltip-text", "you can add properties with SET")
    
    '---placement inside fixed,widget,X,Y
    PLACE (fixed, exit_btn, 310, 10)
    
    
    SHOW(window)
    DISPLAY
    
     

    Last edit: big-bass 2021-04-30
  • big-bass

    big-bass - 2021-04-30

    SVG BUTTON

    image

    compile with

    bacon svg-button.bac
    

    Example code: svg-button.bac

    '--- bigbass GTK3 with FIXED placement and some new macros
    '--- for the lack of a name we can call it gtk3 bassix 
    '--- a simple 'HUG' looking syntax idea but include only what you need as you go
    '--- June 25 2020  
    
    OPTION PARSE FALSE
    PRAGMA INCLUDE <gtk-3.0/gtk/gtk.h>
    PRAGMA OPTIONS `pkg-config --cflags gtk+-3.0` 
    PRAGMA LDFLAGS `pkg-config --libs gtk+-3.0` 
    PRAGMA OPTIONS -Wno-deprecated-declarations
    
    '--- new signal handlers to simplify the callbacks
    DEF FN CONNECT( widget, event,cb) = g_signal_connect_data(widget,event,cb, 0, 0, 0)
    DEF FN CONNECT_DATA( widget, event,cb,t) = g_signal_connect_data(G_OBJECT (widget),event,G_CALLBACK (cb),(gpointer) t, 0, 0)
    DEF FN NEW(widget,...) = g_object_new(widget, __VA_ARGS__,NULL)
    DEF FN PLACE( widget, name,wid,high) = gtk_fixed_put(GTK_FIXED(widget),  GTK_WIDGET(name),wid,high)
    DEF FN ADD_FIXED( widget, name) = gtk_container_add(GTK_CONTAINER(widget), GTK_WIDGET(name))
    DEF FN SET(widget, name, ...) = g_object_set(GTK_WIDGET(widget), name, __VA_ARGS__, NULL)
    DEF FN GET( widget, name, ...) = g_object_get(widget, name, __VA_ARGS__, NULL)
    DEF FN SHOW( widget) = gtk_widget_show_all(GTK_WIDGET(widget))
    DEF FN HIDE( widget) = gtk_widget_hide(GTK_WIDGET(widget))
    DEF FN INIT() = gtk_init(0,0)
    DEF FN LABEL(t) = gtk_label_new(t)
    DEF FN BUTTON_ADD(t) = gtk_button_new_with_label(t)
    DEF FN TEXT_VIEW() = gtk_text_view_new ()
    DEF FN FIXED() = gtk_fixed_new()  
    DEF FN DISPLAY() = gtk_main() 
    DEF FN ATTACH() = gtk_container_add()
    DEF FN SCROLLED_WINDOW() = gtk_scrolled_window_new (NULL, NULL)
    
    DEF FN STREAM(im) = g_memory_input_stream_new_from_data(im, -1, g_free)
    DEF FN PIXBUF_MEM(stm) = gdk_pixbuf_new_from_stream(stm, NULL, NULL)
    DEF FN PIXBUFF(p) = gtk_image_new_from_pixbuf (p )
    
    DEF FN SET_IMAGE(widget,im) = gtk_button_set_image (GTK_BUTTON (widget), im)
    DEF FN IMAGE_FILE(f) = gtk_image_new_from_file(f)
    
    ALIAS GTK_TYPE_WINDOW TO WINDOW
    ALIAS GTK_TYPE_BUTTON TO BUTTON
    ALIAS GTK_WIDGET TO WIDGET
    ALIAS GTK_CONTAINER TO CONTAINER
    
    DECLARE window, scrolled_win ,exit_btn ,image TYPE GtkWidget*
    DECLARE fixed TYPE GtkWidget*
    DECLARE image2 TYPE GtkWidget*
    
    ' svg for icon and gui
    kitty$ = "<svg width='128' height='128' viewBox='0 0 352 352'>" \
        "<g fill='lightblue'>" \
        "<path d='M18 4C2 12-2 104 12 165l2 12-2 10c-5 24-7 56-4 65 11 30 66  " \
        "75 112 90 69 22 143 1 198-55 28-30 31-46 20-102l-2-13 2-15c13-71  " \
        "7-154-12-154s-69 27-107 57l-11 9-22-1c-13 0-27 0-33 1l-11 1-11-9C85  " \
        "25 32-2 18 4zm45 57c9 4 33 17 34 19l-8 4c-17 8-34 21-45 33-2 3-5 6-5  " \
        "6-3 0 1-54 5-62 2-6 3-6 19 0zm240-3c4 4 7 26 7  " \
        "49v14l-5-5c-13-15-31-27-52-36-4-1 23-16 39-21 9-3 9-3 11-1zM92  " \
        "173h2l-3 5c-8 16-3 56 7 51 8-4 9-32 2-53 0-2 0-2 7 1 11 6 19 15 23  " \
        "27s4 11-3 18c-26 28-69 16-78-22-4-14 25-32 43-27zm181 0c13 2 30 15 30  " \
        "22 0 38-52 56-79 28l-6-7 1-5c2-14 13-28 25-34 8-4 7-4 5 3-5 15-3 45 4  " \
        "49 9 6 14-35 7-51-3-6 0-7 13-5zm-89 26c6 4 12 10 24 27 5 7 12 15 15  " \
        "18 12 12 42 26 86 42 7 2-49 37-77 48-59 23-119 10-183-41-9-7-9-7 0-10  " \
        "56-20 77-33 95-58 18-26 28-33 40-26z'/> " \
        "<path d='M161 247c-14 3-11 22 6 32 2 1 5 2 5 3 0 0-3 7-5 11-11 16-36  " \
        "15-48-1-4-5-3-2 1 5 8 14 27 18 45 9 1 0 1 1 1 3 0 16 17 18 19 2v-5l6  " \
        "3c15 6 32 1 40-12 5-7 5-10 0-4-14 18-43 14-50-7l-2-4c0-1 3-2 5-3 12-7  " \
        "19-24 12-29-6-4-24-6-35-3z'/> " \
        "</g>" \
        "</svg>"
    
    
    
    '=====================
    SUB exit_prog
    '=====================
      END
    END SUB
    
    
    
    '===================== 
    SUB exit_clicked ()
    '=====================  
        END
    END SUB
    
    
    INIT
    
    
    window = NEW(WINDOW, "icon-name","gtk-about")
    SET(window, "title", "SVG testing", "border-width", 10, "default-width", 450) 
    
    fixed = FIXED()
    ADD_FIXED(window, fixed)
    
    exit_btn = BUTTON_ADD ("Exit")
    
    '---------------------------------------------------------------------
    '---Image from PIXBUF
    LOCAL stream TYPE GInputStream*
    LOCAL pixbuf TYPE GdkPixbuf*
    stream = STREAM(kitty$) 
    pixbuf = PIXBUF_MEM(stream)
    image = PIXBUFF(pixbuf)
    
    '--- place image at X=10 Y=10
    PLACE (fixed, image, 10, 10)
    
    '--------------------------------------------------------------------
    '--- IMAGE from file
    'image2 = IMAGE_FILE ("/usr/share/pixmaps/BaConEyes24.png")
    image2 = IMAGE_FILE ("/usr/share/icons/hicolor/48x48/actions/xfsm-shutdown.png")
    
    '--- widget ,property , value or string
    SET(exit_btn, "width_request", 100  ,"height_request",30)
    SET(exit_btn, "tooltip-text", "you can add properties with SET")
    
    '---make sure its visable
    SET(exit_btn, "always_show_image",TRUE) 
    
    '--- put the image into the button
    SET_IMAGE(exit_btn,image2)
    '--------------------------------------------------------------------
    
    '---placement inside fixed,widget,X,Y
    PLACE (fixed, exit_btn, 310, 10)
    
    
    '--- handle callbacks 
    CONNECT(window, "delete-event", exit_prog)
    CONNECT(exit_btn, "clicked" ,exit_clicked )
    
    
    SHOW(window)
    DISPLAY
    
     

    Last edit: big-bass 2021-04-30
  • big-bass

    big-bass - 2021-04-30

    PROGRESSBAR

    image

    compile with

    bacon  progressbar.bac
    

    Example code: progressbar.bac

    '--- bigbass GTK3 with FIXED placement and some new macros
    '--- for the lack of a name we can call it gtk3 bassix 
    '--- a simple 'HUG' looking syntax idea but include only what you need as you go
    '--- June 25 2020 
    '--- show some complete widgets in a demo 
    '--- added the progress bar and its functions July 5 2020
    
    
    OPTION PARSE FALSE
    PRAGMA INCLUDE <gtk-3.0/gtk/gtk.h>
    PRAGMA OPTIONS `pkg-config --cflags gtk+-3.0` 
    PRAGMA LDFLAGS `pkg-config --libs gtk+-3.0` 
    PRAGMA OPTIONS -Wno-deprecated-declarations
    PRAGMA OPTIONS -Wno-implicit
    
    
    '--- new signal handlers to simplify the callbacks
    '---DEF FN CONNECT( widget, event,cb) = g_signal_connect_data(widget,event,cb, 0, 0, 0)
    DEF FN CONNECT( widget, event,cb) = g_signal_connect(widget,event,G_CALLBACK(cb), NULL)
    DEF FN CONNECT_DATA( widget, event,cb,t) = g_signal_connect_data(G_OBJECT (widget),event,G_CALLBACK (cb),(gpointer) t, 0, 0)
    
    '--- optional way to add a just simple window 
    DEF FN WINDOW_ADD() = gtk_window_new(GTK_WINDOW_TOPLEVEL)
    DEF FN NEW(widget,...) = g_object_new(widget, __VA_ARGS__,NULL)
    DEF FN PLACE( widget, name,wid,high) = gtk_fixed_put(GTK_FIXED(widget),  GTK_WIDGET(name),wid,high)
    DEF FN ADD_FIXED( widget, name) = gtk_container_add(GTK_CONTAINER(widget), GTK_WIDGET(name))
    DEF FN SET(widget, name, ...) = g_object_set(GTK_WIDGET(widget), name, __VA_ARGS__, NULL)
    DEF FN GET( widget, name, ...) = g_object_get(widget, name, __VA_ARGS__, NULL)
    DEF FN SHOW( widget) = gtk_widget_show_all(GTK_WIDGET(widget))
    DEF FN HIDE( widget) = gtk_widget_hide(GTK_WIDGET(widget))
    DEF FN INIT() = gtk_init(0,0)
    DEF FN LABEL_ADD(t) = gtk_label_new(t)
    DEF FN LABEL_SET(widget,s) = gtk_label_set_label(GTK_LABEL(label1), s)
    DEF FN BUTTON_ADD(t) = gtk_button_new_with_label(t)
    DEF FN TEXT_VIEW() = gtk_text_view_new ()
    DEF FN FIXED() = gtk_fixed_new()  
    DEF FN DISPLAY() = gtk_main() 
    DEF FN ATTACH() = gtk_container_add()
    DEF FN SCROLLED_WINDOW() = gtk_scrolled_window_new (NULL, NULL)
    
    DEF FN STREAM(im) = g_memory_input_stream_new_from_data(im, -1, g_free)
    DEF FN PIXBUF_MEM(stm) = gdk_pixbuf_new_from_stream(stm, NULL, NULL)
    DEF FN PIXBUFF(p) = gtk_image_new_from_pixbuf (p )
    
    DEF FN SET_IMAGE(widget,im) = gtk_button_set_image (GTK_BUTTON (widget), im)
    DEF FN IMAGE_FILE(f) = gtk_image_new_from_file(f)
    
    '--- old demo used this 
    DEF FN  COMBO() = gtk_combo_box_text_new ()
    DEF FN  COMBO_GET(c) = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(c))
    DEF FN  COMBO_ACTIVE(c) = gtk_combo_box_get_active (c)
    DEF FN  COMBO_ADD(widget,arr) = gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), arr)
    
    '--- prefered combo
    DEF FN COMBO_TEXT() = gtk_combo_box_text_new()
    DEF FN COMBO_TEXT_GET(c) = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(c))
    DEF FN COMBO_TEXT_ADD(c,t) = gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(c) , NULL, t)
    DEF FN COMBO_TEXT_ACTIVE(c) = gtk_combo_box_get_active (c)
    
    DEF FN VOLUME_GET(widget) = gtk_scale_button_get_value(GTK_SCALE_BUTTON(widget)) 
    DEF FN VOLUME() = gtk_volume_button_new()
    
    DEF FN ENTRY() =  gtk_entry_new ()
    DEF FN ENTRY_GET(e) = gtk_entry_get_text(GTK_ENTRY (e))
    
    DEF FN FILE_BUTTON(t) = gtk_file_chooser_button_new (t, GTK_FILE_CHOOSER_ACTION_OPEN)
    DEF FN FILE_BUTTON_GET(widget) = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(widget))
    DEF FN RADIO() = gtk_radio_button_new(NULL)
    DEF FN RADIO_GET(b) = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(b))
    DEF FN RADIO_ADD(c,t) = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON (c) , t)
    DEF FN CHECK() = gtk_check_button_new(NULL)
    DEF FN CHECK_ADD(t) = gtk_check_button_new_with_label(t)
    DEF FN TOGGLE() = gtk_toggle_button_new ()
    DEF FN TOGGLE_ADD(c,t) = gtk_toggle_button_new_with_label(GTK_TOGGLE_BUTTON (c) , t)
    
    DEF FN LINK_BUTTON(t) = gtk_link_button_new(t)
    DEF FN LINK_ADD(widget,t) = gtk_link_button_set_uri (GTK_LINK_BUTTON (widget), t)
    
    DEF FN SWITCH() = gtk_switch_new()
    DEF FN SWITCH_GET(st) = gtk_switch_get_state (GTK_SWITCH (st))
    
    DEF FN PROGRESS_ADD() = gtk_progress_bar_new()
    DEF FN TIMEOUT_ADD(n,cb) = g_timeout_add(n,(GSourceFunc) cb, NULL)
    DEF FN REMOVE_TIMEOUT(id) = g_source_remove(id)
    
    DEF FN PROGRESS_PULSE(widget) = gtk_progress_bar_pulse(GTK_PROGRESS_BAR(widget))  
    DEF FN PROGRESS_SET(widget,dub) = gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(widget), dub) 
    
    
    ALIAS GTK_TYPE_WINDOW TO WINDOW
    ALIAS GTK_TYPE_BUTTON TO BUTTON
    ALIAS GTK_WIDGET TO WIDGET
    ALIAS GTK_CONTAINER TO CONTAINER
    ALIAS g_free TO FREE
    
    DECLARE window, scrolled_win ,exit_btn ,image TYPE GtkWidget*
    DECLARE fixed ,image2, VOLUME2 ,link_button1 TYPE GtkWidget*
    DECLARE button1 , button2 ,label1,label2 ,file_button TYPE GtkWidget*
    DECLARE combo1, entry1, radio1 ,radio2 ,check1 ,switch1 TYPE GtkWidget*
    DECLARE progress_bar ,start_btn ,stop_btn TYPE GtkWidget*
    
    
    '---How to use a time out to update a progress bar
    fraction = 0.1
    '=============================
    FUNCTION timeout_callback
    '=============================
    
        PROGRESS_PULSE(progress_bar)
    
        '---Fill in the bar with the new fraction
        PROGRESS_SET(progress_bar,fraction)
    
        LABEL_SET(label1,STR$(fraction))
    
        '---Increase the bar by 10% each time this function is called
        fraction = fraction + 0.1
        IF fraction >= 1 THEN
        fraction = 0
        END IF
    
        RETURN TRUE
    
    END FUNCTION
    
    '==============
    SUB STOP_PROG
    '==============
        REMOVE_TIMEOUT(source_id) 
    END SUB
    
    
    
    '==============
    SUB EXIT_PROG
    '==============
       END
    END SUB
    
    
    
    
    '==============
    SUB START_PROG
    '==============
        source_id = TIMEOUT_ADD(500,timeout_callback)
    END SUB
    
    
    INIT
    
    '----------------------------------------------------|
    '--- WINDOW_ADD  
    '----------------------------------------------------|
    
    window = WINDOW_ADD()
    SET(window, "icon-name","gtk-about")
    SET(window, "title","Bassix progress demo ")
    SET(window, "border-width",10)
    SET(window, "default-height",90)
    SET(window, "default-width",330)
    SET(window, "resizable", TRUE)
    
    '--- place fixed into the window
    fixed = FIXED()
    ADD_FIXED(window, fixed)
    
    '----------------------------------------------------|
    '--- BUTTON
    '----------------------------------------------------|
    
    '---Create a button with a label
    stop_btn = BUTTON_ADD ("QUIT")
    SET(stop_btn, "tooltip-text", "stop progressbar")
    
    '---make sure the image is visible
    SET(stop_btn, "always_show_image",TRUE) 
    SET(stop_btn, "label","gtk-stop","use_stock",TRUE)
    PLACE (fixed, stop_btn, 12, 20)
    
    
    start_btn = BUTTON_ADD ("GO")
    SET(start_btn, "tooltip-text", "start progressbar")
    
    '---make sure the image is visible
    SET(start_btn, "always_show_image",TRUE) 
    SET(start_btn, "label","gtk-apply","use_stock",TRUE)
    PLACE (fixed, start_btn, 10, 70)
    
    
    
    
    '--LABEL_ADD
    
    label1 = LABEL_ADD("time")
    PLACE (fixed, label1, 110, 30)
    
    
    
    '----------------------------------------------------|
    '--- PROGRESS_ADD
    '----------------------------------------------------|
    
    progress_bar = PROGRESS_ADD()
    PLACE (fixed, progress_bar, 10, 5)
    
    '----------------------------------------------------|
    '    CONNECT signals
    '----------------------------------------------------|
    CONNECT(window,"destroy",EXIT_PROG)
    CONNECT(stop_btn,"clicked",STOP_PROG)
    
    CONNECT(start_btn,"clicked",START_PROG)
    
    
    
    
    SHOW(window)   
    DISPLAY
    
     

    Last edit: big-bass 2021-06-16
  • big-bass

    big-bass - 2021-04-30

    COMBO1

    image

    compile with

    bacon combo1.bac
    

    Example code: combo1.bac

    '--- bigbass GTK3 with FIXED placement and some new macros
    '--- for the lack of a name we can call it gtk3 bassix 
    '--- a simple 'HUG' looking syntax idea but include only what you need as you go
    '--- June 25 2020  
    
    OPTION PARSE FALSE
    PRAGMA INCLUDE <gtk-3.0/gtk/gtk.h>
    PRAGMA OPTIONS `pkg-config --cflags gtk+-3.0` 
    PRAGMA LDFLAGS `pkg-config --libs gtk+-3.0` 
    PRAGMA OPTIONS -Wno-deprecated-declarations
    
    '--- new signal handlers to simplify the callbacks
    DEF FN CONNECT( widget, event,cb) = g_signal_connect_data(widget,event,cb, 0, 0, 0)
    DEF FN CONNECT_DATA( widget, event,cb,t) = g_signal_connect_data(G_OBJECT (widget),event,G_CALLBACK (cb),(gpointer) t, 0, 0)
    DEF FN NEW(widget,...) = g_object_new(widget, __VA_ARGS__,NULL)
    DEF FN PLACE( widget, name,wid,high) = gtk_fixed_put(GTK_FIXED(widget),  GTK_WIDGET(name),wid,high)
    DEF FN ADD_FIXED( widget, name) = gtk_container_add(GTK_CONTAINER(widget), GTK_WIDGET(name))
    DEF FN SET(widget, name, ...) = g_object_set(GTK_WIDGET(widget), name, __VA_ARGS__, NULL)
    DEF FN GET( widget, name, ...) = g_object_get(widget, name, __VA_ARGS__, NULL)
    DEF FN SHOW( widget) = gtk_widget_show_all(GTK_WIDGET(widget))
    DEF FN HIDE( widget) = gtk_widget_hide(GTK_WIDGET(widget))
    DEF FN INIT() = gtk_init(0,0)
    DEF FN LABEL(t) = gtk_label_new(t)
    DEF FN BUTTON_ADD(t) = gtk_button_new_with_label(t)
    DEF FN TEXT_VIEW() = gtk_text_view_new ()
    DEF FN FIXED() = gtk_fixed_new()  
    DEF FN DISPLAY() = gtk_main() 
    DEF FN ATTACH() = gtk_container_add()
    DEF FN SCROLLED_WINDOW() = gtk_scrolled_window_new (NULL, NULL)
    
    DEF FN STREAM(im) = g_memory_input_stream_new_from_data(im, -1, g_free)
    DEF FN PIXBUF_MEM(stm) = gdk_pixbuf_new_from_stream(stm, NULL, NULL)
    DEF FN PIXBUFF(p) = gtk_image_new_from_pixbuf (p )
    
    DEF FN SET_IMAGE(widget,im) = gtk_button_set_image (GTK_BUTTON (widget), im)
    DEF FN IMAGE_FILE(f) = gtk_image_new_from_file(f)
    
    DEF FN  COMBO() = gtk_combo_box_text_new ()
    DEF FN  COMBO_GET(c) = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT(c))
    DEF FN  COMBO_ACTIVE(c) = gtk_combo_box_get_active (c)
    DEF FN  COMBO_ADD(widget,arr) = gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), arr)
    
    
    ALIAS GTK_TYPE_WINDOW TO WINDOW
    ALIAS GTK_TYPE_BUTTON TO BUTTON
    ALIAS GTK_WIDGET TO WIDGET
    ALIAS GTK_CONTAINER TO CONTAINER
    ALIAS g_free TO FREE
    
    DECLARE window, scrolled_win ,exit_btn ,image TYPE GtkWidget*
    DECLARE fixed TYPE GtkWidget*
    DECLARE image2 TYPE GtkWidget*
    
    ' svg for icon and gui
    kitty$ = "<svg width='48' height='48' viewBox='0 0 352 352'>" \
        "<g fill='lightblue'>" \
        "<path d='M18 4C2 12-2 104 12 165l2 12-2 10c-5 24-7 56-4 65 11 30 66  " \
        "75 112 90 69 22 143 1 198-55 28-30 31-46 20-102l-2-13 2-15c13-71  " \
        "7-154-12-154s-69 27-107 57l-11 9-22-1c-13 0-27 0-33 1l-11 1-11-9C85  " \
        "25 32-2 18 4zm45 57c9 4 33 17 34 19l-8 4c-17 8-34 21-45 33-2 3-5 6-5  " \
        "6-3 0 1-54 5-62 2-6 3-6 19 0zm240-3c4 4 7 26 7  " \
        "49v14l-5-5c-13-15-31-27-52-36-4-1 23-16 39-21 9-3 9-3 11-1zM92  " \
        "173h2l-3 5c-8 16-3 56 7 51 8-4 9-32 2-53 0-2 0-2 7 1 11 6 19 15 23  " \
        "27s4 11-3 18c-26 28-69 16-78-22-4-14 25-32 43-27zm181 0c13 2 30 15 30  " \
        "22 0 38-52 56-79 28l-6-7 1-5c2-14 13-28 25-34 8-4 7-4 5 3-5 15-3 45 4  " \
        "49 9 6 14-35 7-51-3-6 0-7 13-5zm-89 26c6 4 12 10 24 27 5 7 12 15 15  " \
        "18 12 12 42 26 86 42 7 2-49 37-77 48-59 23-119 10-183-41-9-7-9-7 0-10  " \
        "56-20 77-33 95-58 18-26 28-33 40-26z'/> " \
        "<path d='M161 247c-14 3-11 22 6 32 2 1 5 2 5 3 0 0-3 7-5 11-11 16-36  " \
        "15-48-1-4-5-3-2 1 5 8 14 27 18 45 9 1 0 1 1 1 3 0 16 17 18 19 2v-5l6  " \
        "3c15 6 32 1 40-12 5-7 5-10 0-4-14 18-43 14-50-7l-2-4c0-1 3-2 5-3 12-7  " \
        "19-24 12-29-6-4-24-6-35-3z'/> " \
        "</g>" \
        "</svg>"
    
    
    
    
    
    '=====================
    SUB exit_prog
    '=====================
      END
    END SUB
    
    
    
    '===================== 
    SUB exit_clicked ()
    '=====================  
        END
    END SUB
    
    
    
    '======================================================
    SUB on_changed (GtkComboBox *widget, void*   user_data)
    '======================================================           
    
    LOCAL combo_box TYPE GtkComboBox*
    combo_box = widget
    
    LOCAL distro TYPE  STRING
    
        IF  COMBO_ACTIVE(combo_box) != 0 THEN
            distro = COMBO_GET(combo_box) 
            PRINT "you chose ", distro FORMAT "%s%s\n"
            FREE(distro)
        END IF
    
    END SUB
    
    
    
    
    
    INIT
    
    
    window = NEW(WINDOW, "icon-name","gtk-about")
    SET(window,  "border-width", 10, "default-width", 450)
    
    
    
    fixed = FIXED()
    ADD_FIXED(window, fixed)
    
    exit_btn = BUTTON_ADD ("Exit")
    
    '---------------------------------------------------------------------
    '---Image from PIXBUF
    LOCAL stream TYPE GInputStream*
    LOCAL pixbuf TYPE GdkPixbuf*
    stream = STREAM(kitty$) 
    pixbuf = PIXBUF_MEM(stream)
    image = PIXBUFF(pixbuf)
    
    '--------------------------------------------------------------------
    
    SET(window, "icon", pixbuf)
    SET(window, "title", "combo box")
    '--- widget ,property , value or string
    SET(exit_btn, "width_request", 100  ,"height_request",30)
    SET(exit_btn, "tooltip-text", "you can add properties with SET")
    
    '---make sure its visible
    SET(exit_btn, "always_show_image",TRUE) 
    SET(exit_btn, "image", image)
    
    '--------------------------------------------------------------------
    
    '---placement inside fixed,widget,X,Y
    PLACE (fixed, exit_btn, 0, 0)
    
    '--- handle callbacks 
    CONNECT(window, "delete-event", exit_prog)
    CONNECT(exit_btn, "clicked" ,exit_clicked )
    
    
    
    '---COMBO
    
    LOCAL i TYPE int
    LOCAL view TYPE   GtkWidget*
    LOCAL combo_box TYPE  GtkWidget*
    
        '--- Create the combo box and append your string values to it. 
        combo_box = COMBO()
        DECLARE distros[] = {"Select something", "RPI3", "RPI4", "Telephone"} TYPE const char*
    
    
    
        i = 0 
        WHILE   i < G_N_ELEMENTS (distros)
            COMBO_ADD(combo_box,distros[i])
            INCR i
        WEND
    
    
    '--- Choose to set the first option as the active one by default
    SET(combo_box, "active",0) 
    CONNECT_DATA(combo_box, "changed",on_changed,NULL)
    PLACE (fixed, combo_box, 200, 20)
    
    
    SHOW(window)
    DISPLAY
    
     

    Last edit: big-bass 2021-04-30

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.