<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
+ <!-- interface-requires AWeather 0.0 -->
<!-- interface-naming-policy project-wide -->
<object class="GtkListStore" id="plugins">
<columns>
<column type="gchararray"/>
</columns>
</object>
- <object class="GtkWindow" id="main_window">
+ <object class="AWeatherGui" id="main_window">
<property name="title" translatable="yes">AWeather</property>
<child>
<object class="GtkVBox" id="main_body">
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
- <object class="GtkLabel" id="main_placeholder">
+ <object class="GisOpenGL" id="main_viewer">
+ <property name="width_request">600</property>
+ <property name="height_request">400</property>
<property name="visible">True</property>
- <property name="label" translatable="yes">placeholder
-(it's buggy with blank placeholders)</property>
- <property name="justify">center</property>
</object>
<packing>
<property name="resize">False</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Preferences - AWeather</property>
<property name="type_hint">normal</property>
- <property name="transient_for">main_window</property>
<property name="has_separator">False</property>
<signal name="response" handler="gtk_widget_hide" object="prefs_window"/>
<signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
<property name="title" translatable="yes">About - AWeather</property>
<property name="window_position">center-on-parent</property>
<property name="type_hint">dialog</property>
- <property name="transient_for">main_window</property>
<property name="has_separator">False</property>
<property name="program_name">AWeather</property>
<property name="version">@VERSION@</property>
/****************
* GObject code *
****************/
-G_DEFINE_TYPE(AWeatherGui, aweather_gui, GTK_TYPE_WINDOW);
-static void aweather_gui_init(AWeatherGui *self)
+static void aweather_gui_parser_finished(GtkBuildable *_self, GtkBuilder *builder)
{
- g_debug("AWeatherGui: init");
+ g_debug("AWeatherGui: parser finished");
+ AWeatherGui *self = AWEATHER_GUI(_self);
+ self->builder = builder;
/* Simple things */
gchar *config = g_build_filename(g_get_user_config_dir(), PACKAGE, "config.ini", NULL);
gchar *defaults = g_build_filename(PKGDATADIR, "defaults.ini", NULL);
self->prefs = gis_prefs_new(config, defaults);
self->plugins = gis_plugins_new(PLUGINSDIR, self->prefs);
- self->viewer = gis_opengl_new(self->plugins, self->prefs);
+ self->viewer = GIS_VIEWER(aweather_gui_get_widget(self, "main_viewer"));
+ gis_viewer_setup(self->viewer, self->plugins, self->prefs);
g_free(config);
g_free(defaults);
- /* Setup window */
- self->builder = gtk_builder_new();
- GError *error = NULL;
- if (!gtk_builder_add_from_file(self->builder, PKGDATADIR "/main.ui", &error))
- g_error("Failed to create gtk builder: %s", error->message);
- gtk_widget_reparent(aweather_gui_get_widget(self, "main_body"), GTK_WIDGET(self));
- GtkWidget *paned = aweather_gui_get_widget(self, "main_paned");
- gtk_widget_destroy(gtk_paned_get_child1(GTK_PANED(paned)));
- gtk_paned_pack1(GTK_PANED(paned), GTK_WIDGET(self->viewer), TRUE, FALSE);
- gtk_widget_set_size_request(GTK_WIDGET(self->viewer), 600, 400);
- gtk_widget_show_all(GTK_WIDGET(self));
-
/* Plugins */
GtkTreeIter iter;
self->gtk_plugins = GTK_LIST_STORE(aweather_gui_get_object(self, "plugins"));
G_CALLBACK(gtk_toggle_action_set_active),
aweather_gui_get_object(self, "offline"));
}
+static void aweather_gui_buildable_init(GtkBuildableIface *iface)
+{
+ iface->parser_finished = aweather_gui_parser_finished;
+}
+G_DEFINE_TYPE_WITH_CODE(AWeatherGui, aweather_gui, GTK_TYPE_WINDOW,
+ G_IMPLEMENT_INTERFACE(GTK_TYPE_BUILDABLE,
+ aweather_gui_buildable_init));
+static void aweather_gui_init(AWeatherGui *self)
+{
+ g_debug("AWeatherGui: init");
+ /* Do all the real work in parser_finished */
+}
static GObject *aweather_gui_constructor(GType gtype, guint n_properties,
GObjectConstructParam *properties)
{
- g_debug("aweather_gui: constructor");
+ g_debug("AWeatherGui: constructor");
GObjectClass *parent_class = G_OBJECT_CLASS(aweather_gui_parent_class);
return parent_class->constructor(gtype, n_properties, properties);
}
{
g_debug("AWeatherGui: finalize");
G_OBJECT_CLASS(aweather_gui_parent_class)->finalize(_self);
- gtk_main_quit();
}
static void aweather_gui_class_init(AWeatherGuiClass *klass)
/* Set up AWeather */
gdk_threads_enter();
- AWeatherGui *gui = aweather_gui_new();
+ GIS_TYPE_OPENGL; // Pre-load the type for gtkbuilder
+ GtkBuilder *builder = gtk_builder_new();
+ if (!gtk_builder_add_from_file(builder, PKGDATADIR "/main.ui", &error))
+ g_error("Failed to create gtk builder: %s", error->message);
+ AWeatherGui *gui = AWEATHER_GUI(gtk_builder_get_object(builder, "main_window"));
+ g_signal_connect(gui, "destroy", gtk_main_quit, NULL);
gint prefs_debug = gis_prefs_get_integer(gui->prefs, "aweather/log_level", NULL);
gchar *prefs_site = gis_prefs_get_string(gui->prefs, "aweather/initial_site", NULL);