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.
28 #include "sky/legend.h"
31 static struct ui_config nova_ui_config
= {
36 static gboolean
menu_help_clicked_event(GtkWidget
*widget
,
43 static GtkWidget
*create_file_menu(GtkWidget
*gtk_sky
)
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
),
66 g_signal_connect_swapped (G_OBJECT (save_item
), "activate",
67 G_CALLBACK (menu_help_clicked_event
),
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");
78 static GtkWidget
*create_view_menu(GtkWidget
*gtk_sky
)
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
),
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
),
118 static GtkWidget
*create_menubar(GtkWidget
*gtk_sky
)
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
));
146 static gboolean
tool_button_clicked_event(GtkWidget
*widget
,
153 static GtkWidget
*create_toolbar(GtkWidget
*gtk_sky
)
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
);
169 int main (int argc
, char **argv
)
173 GtkWidget
*gtk_legend
;
180 bindtextdomain (GETTEXT_PACKAGE
, PACKAGE_LOCALE_DIR
);
181 bind_textdomain_codeset (GETTEXT_PACKAGE
, "UTF-8");
182 textdomain (GETTEXT_PACKAGE
);
185 gtk_init (&argc
, &argv
);
187 err
= ui_gconf_get_context(&nova_ui_config
);
189 g_warning("%s: no gconf config - creating default\n", __func__
);
190 ui_gconf_set_context(&nova_ui_config
);
195 g_critical("db_init: failed %d\n", 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
),
220 gtk_box_pack_start(GTK_BOX(vbox
),
226 g_critical("%s: failed to init UI\n", __func__
);
230 gtk_widget_show_all(window
);
231 sky_connect_signals(gtk_sky
);
232 sky_set_legend(gtk_sky
, gtk_legend
);