Continue work on the GUI - added code for drawing
[wordblah.git] / wordblox_player.c
1 #include <gtk/gtk.h>
2
3 #include "constantstrings.h"
4 #include "wordblox_resource.c"
5 #include "wordblox.h"
6
7 GtkWidget *window;
8
9 /* slot for drawing the puzzle */
10 gboolean on_puzzle_area_draw (GtkWidget *widget, cairo_t *cr, gpointer data)
11 {
12 GdkRGBA colorfore, colorback;
13 gdk_rgba_parse (&colorfore, "#000000");
14 gdk_rgba_parse (&colorback, "#ffffff");
15 cairo_set_line_width (cr, 3);
16 gtk_widget_set_size_request (widget, 10*30+5, 10*30+5);
17 for (int i = 0; i < 10; i ++)
18 {
19 for (int j = 0; j < 10; j ++)
20 {
21 cairo_rectangle (cr, i*30+5, j*30+5, 30, 30);
22 gdk_cairo_set_source_rgba (cr, &colorfore);
23 cairo_stroke (cr);
24
25 cairo_rectangle (cr, i*30+5, j*30+5, 30, 30);
26 gdk_cairo_set_source_rgba (cr, &colorback);
27 cairo_fill (cr);
28 }
29 }
30
31 return FALSE;
32
33 }
34
35 /* slot for exit menu */
36 void on_menu_exit_activate (GtkMenuItem *item, gpointer data)
37 {
38 gtk_main_quit ();
39 }
40
41 /* slot for open menu */
42 void on_menu_open_activate (GtkMenuItem *item, gpointer data)
43 {
44 GtkWidget *dialog;
45 GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_OPEN;
46 gint res;
47 dialog = gtk_file_chooser_dialog_new (OPEN_FILE, GTK_WINDOW(window), action,
48 "_Cancel",
49 GTK_RESPONSE_CANCEL,
50 "_Open",
51 GTK_RESPONSE_ACCEPT,
52 NULL);
53 res = gtk_dialog_run (GTK_DIALOG (dialog));
54 if (res == GTK_RESPONSE_ACCEPT)
55 {
56 char *filename;
57 filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog));
58 Puzzle p = load_puzzle (filename);
59 /* if the grid is not frozen then the game cannot be played */
60 if (p.grid_frozen == false)
61 {
62 GtkWidget *errordlg ;
63 errordlg = gtk_message_dialog_new (GTK_WINDOW(window),
64 GTK_DIALOG_DESTROY_WITH_PARENT,
65 GTK_MESSAGE_ERROR,
66 GTK_BUTTONS_CLOSE,
67 UNFROZEN_GRID_PLAYER);
68 gtk_dialog_run (GTK_DIALOG(errordlg));
69 gtk_widget_destroy (errordlg);
70
71 }
72
73 g_free (filename);
74 }
75
76 gtk_widget_destroy (dialog);
77 }
78
79 /* slot for about menu */
80 void on_menu_about_activate (GtkMenuItem *item, gpointer data)
81 {
82 const char *AUTHOR[] = {"V.Harishankar", NULL};
83 gtk_show_about_dialog (GTK_WINDOW(window), "authors",AUTHOR,
84 "program-name", PROGRAM_NAME,
85 "copyright", COPYRIGHT,
86 "comments", COMMENTS,
87 "website", WEBSITE,
88 "website-label", WEBSITE_LABEL,
89 "license-type", GTK_LICENSE_GPL_2_0,
90 "version", VERSION,
91 (char*)NULL);
92 }
93
94 int main (int argc, char *argv [])
95 {
96 gtk_init (&argc, &argv);
97 GdkPixbuf *icon;
98 icon = gdk_pixbuf_new_from_resource
99 ("/org/harishankar/wordblox/wordblox.svg", NULL);
100 if (icon == NULL)
101 fprintf (stderr, ERROR_ICON);
102
103 GtkBuilder *builder;
104 builder = gtk_builder_new ();
105 guint ret = gtk_builder_add_from_resource (builder,
106 "/org/harishankar/wordblox/wordblox_player.glade", NULL);
107
108 if (ret == 0)
109 {
110 fprintf (stderr, ERROR_WINDOW);
111 g_object_unref (builder);
112 return 1;
113 }
114 else
115 {
116 window = GTK_WIDGET (gtk_builder_get_object (builder, "main_window") );
117 if (window != NULL)
118 {
119 gtk_window_set_default_icon (icon);
120
121 gtk_builder_connect_signals (builder, NULL);
122 g_object_unref (builder);
123 gtk_widget_show (window);
124 gtk_main ();
125 return 0;
126 }
127 else
128 {
129 g_object_unref (builder);
130 fprintf (stderr, ERROR_WINDOW);
131 return 1;
132 }
133 }
134 }