Generalize chart loading functions
* ag_app_import_chart() became ag_app_import_file(), and has the potential to load any file type * ag_app_import_cb() so it can open multiple file types * ag_chart_load_from_file() is now called ag_chart_load_from_agc()
This commit is contained in:
parent
a3927458b4
commit
a30d19d1bb
49
src/ag-app.c
49
src/ag-app.c
@ -133,14 +133,31 @@ quit_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data)
|
||||
}
|
||||
|
||||
static void
|
||||
ag_app_import_chart(AgApp *app, GFile *file)
|
||||
ag_app_import_file(AgApp *app, GFile *file, AgAppImportType type)
|
||||
{
|
||||
GtkWidget *window;
|
||||
AgChart *chart;
|
||||
GError *err = NULL;
|
||||
|
||||
if ((chart = ag_chart_load_from_file(file, &err)) == NULL) {
|
||||
g_print("Error: '%s'\n", err->message);
|
||||
switch (type) {
|
||||
case AG_APP_IMPORT_AGC:
|
||||
chart = ag_chart_load_from_agc(file, &err);
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
g_error("Unknown import type!");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (chart == NULL) {
|
||||
ag_app_message_dialog(
|
||||
NULL,
|
||||
GTK_MESSAGE_ERROR,
|
||||
"Error while loading: %s",
|
||||
err->message
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -155,9 +172,19 @@ ag_app_import_chart(AgApp *app, GFile *file)
|
||||
static void
|
||||
ag_app_import_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data)
|
||||
{
|
||||
gint response;
|
||||
GtkWidget *fs;
|
||||
GSList *filenames = NULL;
|
||||
gint response;
|
||||
GtkWidget *fs;
|
||||
GtkFileFilter *filter;
|
||||
GSList *filenames = NULL;
|
||||
const gchar *target_type = g_variant_get_string(parameter, NULL);
|
||||
AgAppImportType type = AG_APP_IMPORT_NONE;
|
||||
|
||||
if (strncmp("agc", target_type, 3) == 0) {
|
||||
type = AG_APP_IMPORT_AGC;
|
||||
filter = filter_chart;
|
||||
} else {
|
||||
g_error("Unknown import type!");
|
||||
}
|
||||
|
||||
fs = gtk_file_chooser_dialog_new(_("Select charts"),
|
||||
NULL,
|
||||
@ -166,8 +193,8 @@ ag_app_import_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data)
|
||||
_("_Import"), GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter_all);
|
||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter_chart);
|
||||
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fs), filter_chart);
|
||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter);
|
||||
gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fs), filter);
|
||||
gtk_dialog_set_default_response(GTK_DIALOG(fs), GTK_RESPONSE_ACCEPT);
|
||||
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(fs), TRUE);
|
||||
gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(fs), FALSE);
|
||||
@ -190,7 +217,7 @@ ag_app_import_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data)
|
||||
}
|
||||
|
||||
file = g_file_new_for_commandline_arg(data);
|
||||
ag_app_import_chart(AG_APP(user_data), file);
|
||||
ag_app_import_file(AG_APP(user_data), file, type);
|
||||
}
|
||||
}
|
||||
|
||||
@ -250,7 +277,7 @@ static GActionEntry app_entries[] = {
|
||||
{ "about", about_cb, NULL, NULL, NULL },
|
||||
{ "quit", quit_cb, NULL, NULL, NULL },
|
||||
{ "raise", raise_cb, NULL, NULL, NULL },
|
||||
{ "import", ag_app_import_cb, NULL, NULL, NULL },
|
||||
{ "import", ag_app_import_cb, "s", NULL, NULL },
|
||||
{ "help", help_cb, NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
@ -335,7 +362,7 @@ ag_app_import(GApplication *gapp,
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < n_files; i++) {
|
||||
ag_app_import_chart(AG_APP(gapp), files[i]);
|
||||
ag_app_import_file(AG_APP(gapp), files[i], AG_APP_IMPORT_AGC);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,11 @@
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
typedef enum {
|
||||
AG_APP_IMPORT_NONE,
|
||||
AG_APP_IMPORT_AGC,
|
||||
} AgAppImportType;
|
||||
|
||||
#define AG_TYPE_APP (ag_app_get_type())
|
||||
#define AG_APP(o) (G_TYPE_CHECK_INSTANCE_CAST((o), \
|
||||
AG_TYPE_APP, \
|
||||
|
@ -577,7 +577,7 @@ get_by_xpath(xmlXPathContextPtr xpath_context,
|
||||
}
|
||||
|
||||
AgChart *
|
||||
ag_chart_load_from_file(GFile *file, GError **err)
|
||||
ag_chart_load_from_agc(GFile *file, GError **err)
|
||||
{
|
||||
AgChart *chart = NULL;
|
||||
gchar *uri,
|
||||
|
@ -48,8 +48,8 @@ AgChart *ag_chart_new_full(GsweTimestamp *timestamp,
|
||||
gdouble altitude,
|
||||
GsweHouseSystem house_system);
|
||||
|
||||
AgChart *ag_chart_load_from_file(GFile *file,
|
||||
GError **err);
|
||||
AgChart *ag_chart_load_from_agc(GFile *file,
|
||||
GError **err);
|
||||
|
||||
AgChart *ag_chart_new_from_db_save(AgDbSave *save_data, GError **err);
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
||||
<item>
|
||||
<attribute name="label" translatable="yes">Import</attribute>
|
||||
<attribute name="action">app.import</attribute>
|
||||
<attribute name="target">agc</attribute>
|
||||
<attribute name="accel"><Primary>o</attribute>
|
||||
</item>
|
||||
</section>
|
||||
|
Loading…
Reference in New Issue
Block a user