Advertisement
hiro1357

GTK+ Application Skeleton

Dec 15th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.97 KB | None | 0 0
  1. /*
  2.  * greeting.c
  3.  *
  4.  * apt-get install libgtk2.0-dev gcc
  5.  * gcc greeting.c -o greeting `pkg-config --cflags --libs gtk+-2.0`
  6.  *
  7.  * >v< hiro1357 / @eserver_dip_jp
  8.  *
  9.  */
  10.  
  11. #define DEBUG
  12.  
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include <time.h>
  18. #include <gtk/gtk.h>
  19.  
  20.  
  21. static void cb_button1_clicked (GtkWidget *button, gpointer user_data);
  22.  
  23. GtkWidget *window;
  24. GtkWidget *fixed;
  25. GtkWidget *button1;
  26. GtkWidget *textbox1;
  27. GtkWidget *label1;
  28.  
  29. int main (int argc , char** argv) {
  30.         /* Initialize GTK+ */
  31.         gtk_init (&argc , &argv);
  32.  
  33.         /* Create widgets */
  34.         window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  35.         gtk_window_set_title (GTK_WINDOW (window) , "greeting");
  36.         fixed = gtk_fixed_new ();
  37.         button1 = gtk_button_new_with_label ("greeting");
  38.         textbox1 = gtk_entry_new ();
  39.  
  40.         label1 = gtk_label_new ("input your name");
  41.         //gtk_entry_set_editable (GTK_TEXT(text1), TRUE);
  42.  
  43.         /* Widget sizes */
  44.         gtk_widget_set_size_request (window , 300 , 220);
  45.         gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
  46.         gtk_widget_set_size_request (textbox1 ,180 ,20);
  47.  
  48.         /* add widgets to container */
  49.         gtk_container_add (GTK_CONTAINER (window), fixed);
  50.  
  51.         //gtk_container_add (GTK_CONTAINER (window), button);
  52.         gtk_fixed_put (GTK_FIXED (fixed), label1, 20, 30);
  53.         gtk_fixed_put (GTK_FIXED (fixed), textbox1, 20, 50);
  54.         gtk_fixed_put (GTK_FIXED (fixed), button1, 220, 50);
  55.  
  56.         /* add callback functions */
  57.         //exit this program when window closed
  58.         g_signal_connect (window,"destroy",gtk_main_quit,NULL);
  59.         g_signal_connect (G_OBJECT (button1), "clicked",G_CALLBACK (cb_button1_clicked), NULL);
  60.  
  61.         /* Show widgets */
  62.         gtk_widget_show_all (window);
  63.         //gtk_widget_show (window);
  64.  
  65.         /* main loop */
  66.         gtk_main ();
  67.         return 0;
  68. }
  69.  
  70. GtkResponseType msgbox (GtkMessageType mt,GtkButtonsType bt, char *message) {
  71. /*
  72. typedef enum {
  73.   GTK_MESSAGE_INFO,
  74.   GTK_MESSAGE_WARNING,
  75.   GTK_MESSAGE_QUESTION,
  76.   GTK_MESSAGE_ERROR,
  77.   GTK_MESSAGE_OTHER
  78. } GtkMessageType;
  79.  
  80.  
  81. typedef enum {
  82.   GTK_BUTTONS_NONE,
  83.   GTK_BUTTONS_OK,
  84.   GTK_BUTTONS_CLOSE,
  85.   GTK_BUTTONS_CANCEL,
  86.   GTK_BUTTONS_YES_NO,
  87.   GTK_BUTTONS_OK_CANCEL
  88. } GtkButtonsType;
  89.  
  90.  
  91. typedef enum {
  92.   GTK_RESPONSE_NONE = -1,
  93.   GTK_RESPONSE_REJECT = -2,
  94.   GTK_RESPONSE_ACCEPT = -3,
  95.   GTK_RESPONSE_DELETE_EVENT = -4,
  96.   GTK_RESPONSE_OK     = -5,
  97.   GTK_RESPONSE_CANCEL = -6,
  98.   GTK_RESPONSE_CLOSE  = -7,
  99.   GTK_RESPONSE_YES    = -8,
  100.   GTK_RESPONSE_NO     = -9,message
  101.   GTK_RESPONSE_APPLY  = -10,
  102.   GTK_RESPONSE_HELP   = -11
  103. } GtkResponseType;
  104. */
  105.         GtkResponseType result;
  106.         GtkWidget *dialog;
  107.         dialog = gtk_message_dialog_new ((GtkWindow *)window, GTK_DIALOG_DESTROY_WITH_PARENT, mt, bt, "%s", message);
  108.         result = gtk_dialog_run (GTK_DIALOG (dialog));
  109.         gtk_widget_destroy (dialog);
  110.         return result;
  111. }
  112.  
  113. static void cb_button1_clicked (GtkWidget *button, gpointer user_data) {
  114.         char *message;
  115.         const char *input_name;
  116.         time_t now_time;
  117.         struct tm *st_now_time;
  118.         int hour;
  119.  
  120.         time(&now_time);
  121.         st_now_time = localtime(&now_time);
  122.         hour = st_now_time->tm_hour;
  123.  
  124.         input_name = gtk_entry_get_text (GTK_ENTRY (textbox1));
  125.  
  126.         if(strlen(input_name) == 0){
  127.                 msgbox(GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "input your name, please.");
  128.                 return;
  129.         }
  130.  
  131.         message = calloc(strlen(input_name)+20, sizeof(char));
  132.         if (hour < 12) {
  133.                 strcat(message, "Good Morning, ");
  134.         } else if (hour < 18) {
  135.                 strcat(message, "Good Afternoon, ");
  136.         } else {
  137.                 strcat(message, "Good Evening, ");
  138.         }
  139.         strcat(message, input_name);
  140.         msgbox(GTK_MESSAGE_INFO, GTK_BUTTONS_OK, message);
  141.         free(message);
  142.  
  143.         return;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement