Menu

bassix-web.bac

big-bass
Attachments
bassix-web.bac (11190 bytes)
'+++++++++++++++++++++++++++++++++
'--- INCLUDE FILE DO NOT COMPILE 
'+++++++++++++++++++++++++++++++++

'--- 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
'--- added sliders, notebook, spinbutton, adjustment , volume July 6-7 2020
'--- added spinner
'--- added MENU  July-8
'--- added stausbar July 9
'--- added listview July 10
'--- added webkit


PRAGMA OPTIONS `pkg-config --cflags gtk+-3.0` 
PRAGMA LDFLAGS `pkg-config --libs gtk+-3.0` 
PRAGMA OPTIONS -Wno-implicit -Wno-deprecated-declarations
PRAGMA INCLUDE <webkit2/webkit2.h> 
PRAGMA OPTIONS `pkg-config --cflags webkit2gtk-4.0` 
PRAGMA LDFLAGS `pkg-config --libs webkit2gtk-4.0` 
'--- Needed to connect signals 
PRAGMA LDFLAGS gobject-2.0
PRAGMA TLS openssl INCLUDE <openssl/ssl.h> LDFLAGS -lssl -lcrypto
OPTION PARSE FALSE


'--- 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(widget), 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_ADD() = 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 SWITCH_GET_ACTIVE(s) =  gtk_switch_get_active (GTK_SWITCH(s))

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) 
'====july 6
DEF FN HSLIDER_GET(widget) = gtk_range_get_value(GTK_RANGE (widget))
DEF FN VSLIDER_GET(widget) = gtk_range_get_value(GTK_RANGE (widget))
'--- ported to the latest version +3.2   
DEF FN HSLIDER_RANGE(a,b,c) = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL ,a,b,c)
DEF FN VSLIDER_RANGE(a,b,c) = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL ,a,b,c)
'====july 7
DEF FN SPINBUTTON_GET(widget) = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget))
DEF FN ADJUSTMENT_ADD(a,b,c,d,e,f) = gtk_adjustment_new(a,b,c,d,e,f)
DEF FN SPINBUTTON_ADD(widget ,a,b) = gtk_spin_button_new(GTK_ADJUSTMENT(widget), a, b) 

DEF FN NOTEBOOK() = gtk_notebook_new()
DEF FN NOTEBOOK_ADD( widget, name, name2) = gtk_notebook_append_page (GTK_NOTEBOOK(widget),GTK_WIDGET( name),GTK_WIDGET( name2))

DEF FN SPINNER() = gtk_spinner_new()
DEF FN SPINNER_START(widget) = gtk_spinner_start(GTK_SPINNER(widget))
DEF FN SPINNER_STOP(widget) = gtk_spinner_stop(GTK_SPINNER(widget))

DEF FN MENU_BAR() = gtk_menu_bar_new ()
DEF FN MENU_ADD(t) = gtk_menu_item_new_with_label (t)
DEF FN SUBMENU(i,widget) = gtk_menu_item_set_submenu (GTK_MENU_ITEM(i),GTK_WIDGET(widget))
DEF FN MENU_APPEND(m,widget) =  gtk_menu_shell_append (GTK_MENU_SHELL(m), GTK_WIDGET(widget))
DEF FN MENU() = gtk_menu_new ()
DEF FN MENU_IMAGE(s,g) = gtk_image_menu_item_new_from_stock (s,  GTK_ACCEL_GROUP(g))
DEF FN GROUP() = gtk_accel_group_new () 
DEF FN GROUP_ADD(widget,g) = gtk_window_add_accel_group (GTK_WINDOW(widget), GTK_ACCEL_GROUP(g))

'====july 9
DEF FN STATUSBAR() = gtk_statusbar_new ()
DEF FN STATUSBAR_GET(widget,t) = gtk_statusbar_get_context_id (GTK_STATUSBAR (widget), t)
DEF FN STATUSBAR_SEND(widget,ct,ot) =  gtk_statusbar_push (GTK_STATUSBAR (widget),  ct, ot)
DEF FN STATUSBAR_TAKE(widget,ct) =  gtk_statusbar_pop (GTK_STATUSBAR (widget), ct)




'====july 10 LIST_VIEW
DEF FN LIST_HEADERS(widget,b) = gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(widget), b)
DEF FN LIST_GET(widget) = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget))
DEF FN LIST_VIEW() = gtk_tree_view_new()
DEF FN LIST_START(widget) = init_list(widget)
DEF FN LIST_ADD(widget,t) = add_to_list(widget, t)
DEF FN LIST_STORE(n,g) = gtk_list_store_new(n, g)
DEF FN STORE_APPEND(s,i) =  gtk_list_store_append(s, i)

DEF FN LIST_MODEL(widget,widget2) = gtk_tree_view_set_model(GTK_TREE_VIEW(widget),  GTK_TREE_MODEL(widget2))
DEF FN RENDER() = gtk_cell_renderer_text_new ()
DEF FN LIST_COLUMN(t,r,t2) = gtk_tree_view_column_new_with_attributes(t, r, t2, LIST_ITEM, NULL)
DEF FN UNREF(widget) = g_object_unref(widget)
DEF FN LIST_SELECTED(widget,m,i) = gtk_tree_selection_get_selected( GTK_TREE_SELECTION(widget), m, i))
DEF FN LIST_APPEND(widget,col) = gtk_tree_view_append_column(GTK_TREE_VIEW(widget), col)

DEF FN STORE_SET(s,i,st) =  gtk_list_store_set(s, i, LIST_ITEM, st, -1)
DEF FN MODEL_GET(widget) = gtk_tree_view_get_model(GTK_TREE_VIEW(widget))
DEF FN MODEL_SELECTED(m,i,v) = gtk_tree_model_get(m, i, LIST_ITEM, v,  -1)



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 button, button1 , button2 ,label1,label2  TYPE GtkWidget*
DECLARE combo1, entry1, radio1 ,radio2 ,check1 ,switch1 TYPE GtkWidget*
DECLARE progress_bar ,start_btn ,stop_btn TYPE GtkWidget*
DECLARE Hscale,Vscale ,box, box1, spin, spin1 TYPE GtkWidget*
DECLARE button3 ,adjustment , adjustment1 ,file_button TYPE GtkWidget*
DECLARE notebook ,button4 ,button5 ,button6 TYPE GtkWidget*
DECLARE tab_label1, tab_label2, tab_label3 TYPE GtkWidget*
DECLARE file ,something,quit  TYPE GtkWidget*


'----------------------------------------------------|
'---LISTVIEW  calbacks
'----------------------------------------------------|

'=====================
SUB init_list(GtkWidget *list) 
'=====================
  LOCAL renderer TYPE  GtkCellRenderer*
  LOCAL column TYPE GtkTreeViewColumn*
  LOCAL store TYPE GtkListStore*


  renderer = RENDER()
  column = LIST_COLUMN("List Items", renderer, "text")       
  LIST_APPEND(list,column)

  store = LIST_STORE(N_COLUMNS, G_TYPE_STRING)
  LIST_MODEL(list,  store)   

  UNREF(store)

END SUB


'=====================
SUB add_to_list(GtkWidget *list, const gchar *str) 
'=====================    
  LOCAL store TYPE  GtkListStore*
  LOCAL iter TYPE  GtkTreeIter

  store = GTK_LIST_STORE(MODEL_GET(list))
  STORE_APPEND(store, &iter)
  STORE_SET(store, &iter,str)

END SUB

'=====================
SUB  on_changed(GtkWidget *widget, void* label) 
'=====================   

  LOCAL  iter TYPE GtkTreeIter
  LOCAL model TYPE GtkTreeModel*
  LOCAL value TYPE char*


  IF (LIST_SELECTED (widget, &model, &iter) THEN

    MODEL_SELECTED(model, &iter, &value)
    LABEL_SET(label,value)
    g_free(value)

  END IF 
END SUB 
'----------------------------------------------------|



'----------------------------------------------------|
'   STATUSBAR callbacks
'----------------------------------------------------|

'=====================
SUB send_item (GtkWidget *widget, void*   data)
'=====================
  LOCAL status_bar TYPE  GtkWidget*
  status_bar = data

  '---Create a context id, which is used to uniquely identify 
  '---the source of a message
  LOCAL context_id TYPE unsigned int
  context_id  = STATUSBAR_GET(status_bar,  "Statusbar example")                          

  '---Count is used to keep track of the amount of items the user is sending/removing
  LOCAL count TYPE int
  LOCAL hold_output[20] TYPE char
  count = 1

  '
  '---The output is forced not exceed 20 characters, 
  '---and the result is stored into the 'hold_output' variable

  g_snprintf (hold_output, 20, "Item %d", count)
  count = count + 1 

  STATUSBAR_SEND (status_bar, context_id, hold_output)

END SUB




'=====================
SUB take_item (GtkWidget *widget, void*  data )
'=====================

  LOCAL status_bar TYPE  GtkWidget*
  LOCAL context_id TYPE unsigned int

  status_bar = data
  context_id  = STATUSBAR_GET(status_bar, "Statusbar example")                                                  
  STATUSBAR_TAKE(status_bar, context_id)

END SUB