optimizations: general renderering speedups.
[nova.git] / src / main.c
blobeb75eb8edea5b9681a35c4c33422bc809550505e
1 /*
2 * Copyright (C) 2008 Liam Girdwood
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
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.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330,
17 * Boston, MA 02111-1307, USA.
20 #ifdef HAVE_CONFIG_H
21 # include <config.h>
22 #endif
24 #include <gtk/gtk.h>
26 #include "db/db.h"
27 #include "sky/sky.h"
28 #include "sky/legend.h"
29 #include "ui/glade.h"
31 static struct ui_config nova_ui_config = {
32 .ui_width = 600,
33 .ui_height = 600,
36 static gboolean menu_help_clicked_event(GtkWidget *widget,
37 gpointer user_data)
39 printf("about\n");
40 return TRUE;
43 static GtkWidget *create_file_menu(GtkWidget *gtk_sky)
45 GtkWidget *file_menu;
46 GtkWidget *open_item;
47 GtkWidget *save_item;
48 GtkWidget *quit_item;
50 file_menu = gtk_menu_new ();
52 /* Create the menu items */
53 open_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_OPEN, NULL);
54 save_item = gtk_menu_item_new_with_label ("Save");
55 quit_item = gtk_menu_item_new_with_label ("Quit");
57 /* Add them to the menu */
58 gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), open_item);
59 gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), save_item);
60 gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), quit_item);
62 /* Attach the callback functions to the activate signal */
63 g_signal_connect_swapped (G_OBJECT (open_item), "activate",
64 G_CALLBACK (menu_help_clicked_event),
65 (gpointer) gtk_sky);
66 g_signal_connect_swapped (G_OBJECT (save_item), "activate",
67 G_CALLBACK (menu_help_clicked_event),
68 (gpointer) gtk_sky);
70 /* We can attach the Quit menu item to our exit function */
71 g_signal_connect_swapped (G_OBJECT (quit_item), "activate",
72 G_CALLBACK (gtk_main_quit),
73 (gpointer) "file.quit");
75 return file_menu;
78 static GtkWidget *create_view_menu(GtkWidget *gtk_sky)
80 GtkWidget *view_menu;
81 GtkWidget *markers_item;
83 view_menu = gtk_menu_new ();
85 /* Create the menu items */
86 markers_item = gtk_menu_item_new_with_label ("Markers...");
88 /* Add them to the menu */
89 gtk_menu_shell_append (GTK_MENU_SHELL (view_menu), markers_item);
91 /* Attach the callback functions to the activate signal */
92 g_signal_connect (G_OBJECT (markers_item), "activate",
93 G_CALLBACK(on_sky_markers_activate),
94 (gpointer) gtk_sky);
95 return view_menu;
98 static GtkWidget *create_help_menu(GtkWidget *gtk_sky)
100 GtkWidget *help_menu;
101 GtkWidget *about_item;
103 help_menu = gtk_menu_new ();
105 /* Create the menu items */
106 about_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_ABOUT, NULL);
108 /* Add them to the menu */
109 gtk_menu_shell_append (GTK_MENU_SHELL (help_menu), about_item);
111 /* Attach the callback functions to the activate signal */
112 g_signal_connect_swapped (G_OBJECT (about_item), "activate",
113 G_CALLBACK(on_sky_markers_activate),
114 (gpointer) gtk_sky);
115 return help_menu;
118 static GtkWidget *create_menubar(GtkWidget *gtk_sky)
120 GtkWidget *menu_bar;
121 GtkWidget *file_item;
122 GtkWidget *view_item;
123 GtkWidget *help_item;
125 menu_bar = gtk_menu_bar_new ();
126 file_item = gtk_menu_item_new_with_label ("File");
127 view_item = gtk_menu_item_new_with_label ("View");
128 help_item = gtk_menu_item_new_with_label ("Help");
130 gtk_menu_item_set_submenu (GTK_MENU_ITEM (file_item),
131 create_file_menu(gtk_sky));
132 gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), file_item);
134 gtk_menu_item_set_submenu (GTK_MENU_ITEM (view_item),
135 create_view_menu(gtk_sky));
136 gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), view_item);
138 gtk_menu_item_set_submenu (GTK_MENU_ITEM (help_item),
139 create_help_menu(gtk_sky));
140 gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), help_item);
141 gtk_menu_item_right_justify(GTK_MENU_ITEM(help_item));
143 return menu_bar;
146 static gboolean tool_button_clicked_event(GtkWidget *widget,
147 gpointer user_data)
149 printf("convert\n");
150 return TRUE;
153 static GtkWidget *create_toolbar(GtkWidget *gtk_sky)
155 GtkWidget *toolbar;
156 GtkToolItem *item;
158 toolbar = gtk_toolbar_new();
159 gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
161 item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_CONVERT);
162 gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, 0);
163 g_signal_connect(item, "clicked",
164 G_CALLBACK(tool_button_clicked_event), gtk_sky);
166 return toolbar;
169 int main (int argc, char **argv)
171 GtkWidget *window;
172 GtkWidget *gtk_sky;
173 GtkWidget *gtk_legend;
174 GtkWidget *vbox;
175 GtkWidget *menubar;
176 GtkWidget *toolbar;
177 int err;
179 #ifdef ENABLE_NLS
180 bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
181 bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
182 textdomain (GETTEXT_PACKAGE);
183 #endif
185 gtk_init (&argc, &argv);
187 err = ui_gconf_get_context(&nova_ui_config);
188 if (err < 0) {
189 g_warning("%s: no gconf config - creating default\n", __func__);
190 ui_gconf_set_context(&nova_ui_config);
193 err = db_init();
194 if (err < 0) {
195 g_critical("db_init: failed %d\n", err);
196 return err;
199 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
200 gtk_window_set_title(GTK_WINDOW(window), "Nova");
201 g_signal_connect (window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
203 gtk_sky = virtual_sky_new();
204 gtk_widget_set_usize(gtk_sky, nova_ui_config.ui_width,
205 nova_ui_config.ui_height);
207 gtk_legend = legend_new();
208 gtk_widget_set_usize(gtk_legend, -1, 20);
210 menubar = create_menubar(gtk_sky);
211 toolbar = create_toolbar(gtk_sky);
213 vbox = gtk_vbox_new(FALSE, 0);
214 gtk_container_add(GTK_CONTAINER(window), vbox);
215 gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, TRUE, 0);
216 gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, TRUE, 0);
217 gtk_box_pack_start(GTK_BOX(vbox),
218 gtk_sky,
219 TRUE, TRUE, 0);
220 gtk_box_pack_start(GTK_BOX(vbox),
221 gtk_legend,
222 FALSE, FALSE, 0);
224 err = ui_init();
225 if (err < 0) {
226 g_critical("%s: failed to init UI\n", __func__);
227 return err;
230 gtk_widget_show_all(window);
231 sky_connect_signals(gtk_sky);
232 sky_set_legend(gtk_sky, gtk_legend);
234 gtk_main ();
236 db_release();
237 return 0;