Add mouse vertical scrolling.
[familia.git] / src / main.c
1 /****************************************************************************
2  *  Familia Lignum - Genealogical program                                   *
3  *  Copyright (C) 2011-2012 Rafał Długołęcki <rafal@dlugolecki.net.pl>      *
4  *                                                                          *
5  *  This program is free software; you can redistribute it and/or modify    *
6  *  it under the terms of the GNU General Public License as published by    *
7  *  the Free Software Foundation; version 2 of the License.                 *
8  *                                                                          *
9  *  This program is distributed in the hope that it will be useful,         *
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of          *
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
12  *  GNU General Public License for more details.                            *
13  *                                                                          *
14  *  You should have received a copy of the GNU General Public License along *
15  *  with this program; if not, write to the Free Software Foundation, Inc., *
16  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.             *
17  *                                                                          *
18  ****************************************************************************/
19
20 #include <gtk/gtk.h>
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include <locale.h>
24
25 #include <gtk/gtkgl.h>
26 #include <GL/gl.h>
27 #include <gedcom.h>
28
29 #include "../config.h"
30 #include "i18n.h"
31 #include "debug.h"
32 #include "commandline.h"
33 #include "storage/storage.h"
34 #include "gedcom/familia_gedcom.h"
35
36 extern GtkDrawingArea * drawing_area;
37
38 const char * get_guidatafile()
39 {
40         if (g_file_test (DATADIR "/gui.glade", G_FILE_TEST_EXISTS)) {
41                 return DATADIR "/gui.glade";
42         }
43         return "data/gui.glade";
44 }
45
46 int main(int argc, char** argv) {
47         GtkBuilder *builder = NULL;
48         GtkWidget *window = NULL;
49         GdkGLConfig *glconfig = NULL;
50         struct familia_storage * storage = NULL;
51
52         storage = familia_storage_new();
53         familia_storage_set_current(storage);
54
55         gedcom_init();
56         familia_gedcom_init();
57
58         gtk_init(&argc, &argv);
59
60         if(!commandline_parse(&argc, &argv)) {
61                 exit(1);
62         }
63
64         /* Initialize OpenGL */
65         gtk_gl_init(&argc, &argv);
66
67         setlocale(LC_ALL, "");
68         bindtextdomain(PACKAGE_TARNAME, LOCALEDIR);
69         textdomain(PACKAGE_TARNAME);
70
71         g_set_prgname(PACKAGE_NAME);
72
73         GdkGLConfigMode gl_mode = GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH |
74                                                         GDK_GL_MODE_DOUBLE;
75
76         /* Try double-buffered visual */
77         glconfig = gdk_gl_config_new_by_mode (gl_mode);
78         if (glconfig == NULL) {
79                 debug("OpenGL mode is not supported. Exiting...");
80                 exit(1);
81         }
82
83         builder = gtk_builder_new();
84
85         gtk_builder_add_from_file(builder, get_guidatafile(), NULL);
86         gtk_builder_connect_signals(builder, NULL);
87
88         window = GTK_WIDGET(gtk_builder_get_object(builder, "main-window"));
89         drawing_area = GTK_WIDGET(gtk_builder_get_object(builder, "drawing-area"));
90
91         gtk_window_set_title(GTK_WINDOW(window), g_get_application_name());
92
93         /* Set OpenGL-capability to the widget. */
94         gtk_widget_set_gl_capability (drawing_area, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
95
96         gtk_widget_show(window);
97
98         gtk_main();
99
100         if (familia_storage_get_current()) {
101                 storage = familia_storage_get_current();
102                 familia_storage_free(storage);
103                 storage = NULL;
104         }
105
106         return 0;
107 }