X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/0654760a65cb754c4254faa7b38171921ccfb64a..0fa0c0b718943c7e50719fe516de88c3fd3ab6a8:/src/dems.c?ds=inline diff --git a/src/dems.c b/src/dems.c index 50524115..08605e0d 100644 --- a/src/dems.c +++ b/src/dems.c @@ -1,6 +1,28 @@ +/* + * viking -- GPS Data and Topo Analyzer, Explorer, and Manager + * + * Copyright (C) 2003-2008, Evan Battaglia + * Copyright (C) 2007, Quy Tonthat + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ #include #include "dems.h" +#include "background.h" typedef struct { VikDEM *dem; @@ -52,8 +74,11 @@ VikDEM *a_dems_load(const gchar *filename) void a_dems_unref(const gchar *filename) { LoadedDEM *ldem = (LoadedDEM *) g_hash_table_lookup ( loaded_dems, filename ); - g_assert ( ldem ); - ldem->ref_count --; + if ( !ldem ) { + /* This is fine - probably means the loaded list was aborted / not completed for some reason */ + return; + } + ldem->ref_count--; if ( ldem->ref_count == 0 ) g_hash_table_remove ( loaded_dems, filename ); } @@ -82,9 +107,11 @@ VikDEM *a_dems_get(const gchar *filename) * we need to know that they weren't referenced though when we * do the a_dems_list_free(). */ -void a_dems_load_list ( GList **dems ) +int a_dems_load_list ( GList **dems, gpointer threaddata ) { GList *iter = *dems; + guint dem_count = 0; + const guint dem_total = g_list_length ( *dems ); while ( iter ) { if ( ! a_dems_load((const gchar *) (iter->data)) ) { GList *iter_temp = iter->next; @@ -94,7 +121,16 @@ void a_dems_load_list ( GList **dems ) } else { iter = iter->next; } + /* When running a thread - inform of progress */ + if ( threaddata ) { + dem_count++; + /* NB Progress also detects abort request via the returned value */ + int result = a_background_thread_progress ( threaddata, ((gdouble)dem_count) / dem_total ); + if ( result != 0 ) + return -1; /* Abort thread */ + } } + return 0; } /* Takes a string list (GList of strings) of dems (filenames).