hiro1357 icon

GTK+ Application Skeleton

hiro1357 | PRO | 12/15/15 04:33:55 PM UTC | 0 ⭐ | 350 👁️ | Never ⏰ | []
C |

3.97 KB

|

None

|

0 👍

/

0 👎

/*
 * greeting.c
 *
 * apt-get install libgtk2.0-dev gcc
 * gcc greeting.c -o greeting `pkg-config --cflags --libs gtk+-2.0`
 *
 * >v< hiro1357 / @eserver_dip_jp
 *
 */
 
#define DEBUG
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <gtk/gtk.h>
 
 
static void cb_button1_clicked (GtkWidget *button, gpointer user_data);
 
GtkWidget *window;
GtkWidget *fixed;
GtkWidget *button1;
GtkWidget *textbox1;
GtkWidget *label1;
 
int main (int argc , char** argv) {
        /* Initialize GTK+ */
        gtk_init (&argc , &argv);
 
        /* Create widgets */
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title (GTK_WINDOW (window) , "greeting");
        fixed = gtk_fixed_new ();
        button1 = gtk_button_new_with_label ("greeting");
        textbox1 = gtk_entry_new ();
 
        label1 = gtk_label_new ("input your name");
        //gtk_entry_set_editable (GTK_TEXT(text1), TRUE);
 
        /* Widget sizes */
        gtk_widget_set_size_request (window , 300 , 220);
        gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
        gtk_widget_set_size_request (textbox1 ,180 ,20);
 
        /* add widgets to container */
        gtk_container_add (GTK_CONTAINER (window), fixed);
 
        //gtk_container_add (GTK_CONTAINER (window), button);
        gtk_fixed_put (GTK_FIXED (fixed), label1, 20, 30);
        gtk_fixed_put (GTK_FIXED (fixed), textbox1, 20, 50);
        gtk_fixed_put (GTK_FIXED (fixed), button1, 220, 50);
 
        /* add callback functions */
        //exit this program when window closed
        g_signal_connect (window,"destroy",gtk_main_quit,NULL);
        g_signal_connect (G_OBJECT (button1), "clicked",G_CALLBACK (cb_button1_clicked), NULL);
 
        /* Show widgets */
        gtk_widget_show_all (window);
        //gtk_widget_show (window);
 
        /* main loop */
        gtk_main ();
        return 0;
}
 
GtkResponseType msgbox (GtkMessageType mt,GtkButtonsType bt, char *message) {
/*
typedef enum {
  GTK_MESSAGE_INFO,
  GTK_MESSAGE_WARNING,
  GTK_MESSAGE_QUESTION,
  GTK_MESSAGE_ERROR,
  GTK_MESSAGE_OTHER
} GtkMessageType;
 
 
typedef enum {
  GTK_BUTTONS_NONE,
  GTK_BUTTONS_OK,
  GTK_BUTTONS_CLOSE,
  GTK_BUTTONS_CANCEL,
  GTK_BUTTONS_YES_NO,
  GTK_BUTTONS_OK_CANCEL
} GtkButtonsType;
 
 
typedef enum {
  GTK_RESPONSE_NONE = -1,
  GTK_RESPONSE_REJECT = -2,
  GTK_RESPONSE_ACCEPT = -3,
  GTK_RESPONSE_DELETE_EVENT = -4,
  GTK_RESPONSE_OK     = -5,
  GTK_RESPONSE_CANCEL = -6,
  GTK_RESPONSE_CLOSE  = -7,
  GTK_RESPONSE_YES    = -8,
  GTK_RESPONSE_NO     = -9,message
  GTK_RESPONSE_APPLY  = -10,
  GTK_RESPONSE_HELP   = -11
} GtkResponseType;
*/
        GtkResponseType result;
        GtkWidget *dialog;
        dialog = gtk_message_dialog_new ((GtkWindow *)window, GTK_DIALOG_DESTROY_WITH_PARENT, mt, bt, "%s", message);
        result = gtk_dialog_run (GTK_DIALOG (dialog));
        gtk_widget_destroy (dialog);
        return result;
}
 
static void cb_button1_clicked (GtkWidget *button, gpointer user_data) {
        char *message;
        const char *input_name;
        time_t now_time;
        struct tm *st_now_time;
        int hour;
 
        time(&now_time);
        st_now_time = localtime(&now_time);
        hour = st_now_time->tm_hour;
 
        input_name = gtk_entry_get_text (GTK_ENTRY (textbox1));
 
        if(strlen(input_name) == 0){
                msgbox(GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "input your name, please.");
                return;
        }
 
        message = calloc(strlen(input_name)+20, sizeof(char));
        if (hour < 12) {
                strcat(message, "Good Morning, ");
        } else if (hour < 18) {
                strcat(message, "Good Afternoon, ");
        } else {
                strcat(message, "Good Evening, ");
        }
        strcat(message, input_name);
        msgbox(GTK_MESSAGE_INFO, GTK_BUTTONS_OK, message);
        free(message);
 
        return;
}

Comments