+static void combo_sensitive(GtkCellLayout *cell_layout, GtkCellRenderer *cell,
+ GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
+{
+ gboolean sensitive = !gtk_tree_model_iter_has_child(tree_model, iter);
+ g_object_set(cell, "sensitive", sensitive, NULL);
+}
+static void site_setup(AWeatherGui *self)
+{
+ GtkTreeIter state, city;
+ GtkTreeStore *store = GTK_TREE_STORE(aweather_gui_get_object(self, "sites"));
+ gtk_tree_store_append(store, &state, NULL);
+ gtk_tree_store_set (store, &state, 0, "", 1, "None", -1);
+ for (int i = 0; cities[i].type; i++) {
+ if (cities[i].type == LOCATION_STATE) {
+ gtk_tree_store_append(store, &state, NULL);
+ gtk_tree_store_set (store, &state, 0, cities[i].code,
+ 1, cities[i].name, -1);
+ } else if (cities[i].type == LOCATION_CITY) {
+ gtk_tree_store_append(store, &city, &state);
+ gtk_tree_store_set (store, &city, 0, cities[i].code,
+ 1, cities[i].name, -1);
+ }
+ }
+
+ GtkWidget *combo = aweather_gui_get_widget(self, "prefs_general_site");
+ GObject *renderer = aweather_gui_get_object(self, "prefs_general_site_rend");
+ gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(combo),
+ GTK_CELL_RENDERER(renderer), combo_sensitive, NULL, NULL);
+}
+
+static void menu_setup(AWeatherGui *self)
+{
+ GtkWidget *menu = aweather_gui_get_widget(self, "main_menu_radar");
+ GtkWidget *states, *state, *sites, *site;
+
+ states = gtk_menu_new();
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu), states);
+
+ for (int i = 0; cities[i].type; i++) {
+ if (cities[i].type == LOCATION_STATE) {
+ state = gtk_menu_item_new_with_label(cities[i].name);
+ sites = gtk_menu_new();
+ gtk_menu_shell_append(GTK_MENU_SHELL(states), state);
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(state), sites);
+ } else if (cities[i].type == LOCATION_CITY) {
+ site = gtk_menu_item_new_with_label(cities[i].name);
+ gtk_menu_shell_append(GTK_MENU_SHELL(sites), site);
+ g_object_set_data(G_OBJECT(site), "city", &cities[i]);
+ g_signal_connect(site, "activate", G_CALLBACK(on_radar_changed), self);
+ }
+ }
+}
+