Menu

bassix-dialogs

big-bass
Attachments
dialog-error.png (4388 bytes)
dialog-information.png (5946 bytes)
dialog-question.png (5533 bytes)
dialog-warning.png (5211 bytes)
dialog.bac (5859 bytes)
dialogs.png (7240 bytes)

DIALOGS and enter change background

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

image

what messages you will see when you press the buttons

compile with

bacon dialog.bac

Example code:dialog.bac

'--- demo dialogs and enter button change color

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)



'---  May 27 2021 
DEF FN CHANGE_BG(widget,cl) = gtk_widget_modify_bg(widget, GTK_STATE_PRELIGHT, &cl)

'---DIALOG May 27 2021  shortened the dialog code with macros
DEF FN DIALOG_WARNING(widget,mes) = gtk_message_dialog_new(GTK_WINDOW(widget), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, mes)
DEF FN DIALOG_INFO(widget,mes) = gtk_message_dialog_new(GTK_WINDOW(widget), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, mes)
DEF FN DIALOG_QUESTION(widget,mes) = gtk_message_dialog_new(GTK_WINDOW(widget), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK, mes)
DEF FN DIALOG_ERR(widget,mes) = gtk_message_dialog_new(GTK_WINDOW(widget), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, mes)


'---DIALOG May 27 2021
DEF FN DIALOG_TITLE(widget,mes) = gtk_window_set_title(GTK_WINDOW(widget), mes)
DEF FN DIALOG_RUN(widget) = gtk_dialog_run(GTK_DIALOG(widget))
DEF FN DESTROY(widget) =  gtk_widget_destroy(widget)




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 TYPE GtkWidget*
DECLARE fixed  TYPE GtkWidget*
DECLARE label TYPE GtkWidget*
DECLARE info ,err_dialog ,que ,warn TYPE GtkWidget*
DECLARE dialog TYPE   GtkWidget*

' ------------------
SUB  SHOW_INFO(GtkWidget *new_widget, gpointer window) 
' ------------------
    dialog = DIALOG_INFO(window,"Download Completed")
    DIALOG_TITLE(dialog,"Information" )
    DIALOG_RUN(dialog) 
    DESTROY(dialog)
END SUB




' ------------------
SUB  SHOW_ERROR(GtkWidget *new_widget, gpointer window) 
' ------------------
    dialog = DIALOG_ERR(window,"Error loading file")
    DIALOG_TITLE(dialog,"Error" )
    DIALOG_RUN(dialog) 
    DESTROY(dialog)

END SUB



' ------------------
SUB  SHOW_QUESTION(GtkWidget *new_widget, gpointer window) 
' ------------------
    dialog = DIALOG_QUESTION(window,"Are you sure to quit?")
    DIALOG_TITLE(dialog,"Question" )
    DIALOG_RUN(dialog) 
    DESTROY(dialog)
END SUB


' ------------------
SUB  SHOW_WARN(GtkWidget *new_widget, gpointer window) 
' ------------------
    dialog = DIALOG_WARNING(window,"Unallowed operation")
    DIALOG_TITLE(dialog,"Warning" )
    DIALOG_RUN(dialog) 
    DESTROY(dialog)
END SUB


'--- this gives a color change when you enter into the exit_btn 
' ------------------
SUB ENTER_BUTTON(GtkWidget *new_widget, gpointer data)
' ------------------     
    '--- this works together with CHANGE_BG(widget) macro
    '--- so that we can use more than one color and keep the syntax simple
    '--- here I used two different colors to show it is possible with RGBA

    DECLARE col = {0, 27000, 30000, 35000} TYPE GdkColor
    DECLARE col2 = {0, 17000, 30000, 35000} TYPE GdkColor

    CHANGE_BG(exit_btn,col)

    '---dialog buttons get a different color when you enter
    CHANGE_BG(info,col2)
    CHANGE_BG(err_dialog,col2)
    CHANGE_BG(que,col2)
    CHANGE_BG(warn,col2)
END SUB


' ------------------
SUB EXIT_PROG
' ------------------
    END
END SUB

' ------------------ 
SUB EXIT_CLICKED()
' ------------------  
    END
END SUB





INIT
window = NEW(WINDOW, "icon-name","gtk-about")
SET(window, "title", "Dialogs and enter color change ", "border-width", 10, "default-width", 320, "default-height", 130) 
SET(window, "resizable", FALSE)

fixed = FIXED()
ADD_FIXED(window, fixed)
exit_btn = BUTTON_ADD ("Exit")

SET(exit_btn, "width_request", 90  ,"height_request",30)
SET(exit_btn, "label","gtk-quit","use_stock",TRUE,"always_show_image",TRUE) 
SET(exit_btn, "tooltip-text", "Close app")



'--- dialog messages 
info = BUTTON_ADD("Info")
err_dialog = BUTTON_ADD("Error")
que = BUTTON_ADD("Question")
warn = BUTTON_ADD("Warning")

PLACE (fixed, info, 40,20)
PLACE (fixed, err_dialog, 100,20)
PLACE (fixed, que, 160,20)
PLACE (fixed, warn, 250,20)
PLACE (fixed, exit_btn, 310, 220)


CONNECT_DATA(window, "delete-event", EXIT_PROG,NULL)
CONNECT(exit_btn, "clicked" , EXIT_CLICKED )

'---change color on entry of the button
CONNECT_DATA(exit_btn, "enter", ENTER_BUTTON, NULL)
CONNECT_DATA(info, "enter", ENTER_BUTTON, NULL)
CONNECT_DATA(err_dialog, "enter", ENTER_BUTTON, NULL)
CONNECT_DATA(que, "enter", ENTER_BUTTON, NULL)
CONNECT_DATA(warn, "enter", ENTER_BUTTON, window)

'---dialog callbacks
CONNECT_DATA(info, "clicked", SHOW_INFO, window)
CONNECT_DATA(err_dialog, "clicked", SHOW_ERROR, window)
CONNECT_DATA(que, "clicked", SHOW_QUESTION, window)
CONNECT_DATA(warn, "clicked", SHOW_WARN, window)

SHOW(window)
DISPLAY

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.