Author: akv
Date: 2013-06-10 00:19:49 +0200 (Mon, 10 Jun 2013)
New Revision: 4415

Modified:
   trunk/src/application.h
   trunk/src/rs-cache.c
   trunk/src/rs-geo-db.c
   trunk/src/rs-geo-db.h
   trunk/src/rs-photo.c
Log:
Setting coordinte in cache and using it instead of offset when set - makes 
manual setting coordinate work as well (moving map).

Modified: trunk/src/application.h
===================================================================
--- trunk/src/application.h     2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/application.h     2013-06-09 22:19:49 UTC (rev 4415)
@@ -66,6 +66,9 @@
        gdouble *auto_wb_mul;
        RS_MAIN_SIGNAL* signal;
        gint time_offset;
+       gdouble lon;
+       gdouble lat;
+       gdouble ele;
 } RS_PHOTO;
 
 typedef struct {

Modified: trunk/src/rs-cache.c
===================================================================
--- trunk/src/rs-cache.c        2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/rs-cache.c        2013-06-09 22:19:49 UTC (rev 4415)
@@ -129,6 +129,13 @@
        {
                xmlTextWriterWriteFormatElement(writer, BAD_CAST "time_offset", 
"%d", photo->time_offset);
        }
+       if (photo->lon != 0.0 && photo->lat != 0.0)
+       {
+               xmlTextWriterWriteFormatElement(writer, BAD_CAST "lon", "%f", 
photo->lon);
+               xmlTextWriterWriteFormatElement(writer, BAD_CAST "lat", "%f", 
photo->lat);
+               if (photo->ele != 0.0)
+                       xmlTextWriterWriteFormatElement(writer, BAD_CAST "ele", 
"%f", photo->ele);
+       }
 
        int ret = xmlTextWriterEndDocument(writer);
        xmlFreeTextWriter(writer);
@@ -531,6 +538,33 @@
                                xmlFree(val);
                        }
                }
+               else if ((!xmlStrcmp(cur->name, BAD_CAST "lon")))
+               {
+                       val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 
1);
+                       if (val)
+                       {
+                               photo->lon = atof((gchar *) val);
+                               xmlFree(val);
+                       }
+               }
+               else if ((!xmlStrcmp(cur->name, BAD_CAST "lat")))
+               {
+                       val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 
1);
+                       if (val)
+                       {
+                               photo->lat = atof((gchar *) val);
+                               xmlFree(val);
+                       }
+               }
+               else if ((!xmlStrcmp(cur->name, BAD_CAST "ele")))
+               {
+                       val = xmlNodeListGetString(doc, cur->xmlChildrenNode, 
1);
+                       if (val)
+                       {
+                               photo->ele = atof((gchar *) val);
+                               xmlFree(val);
+                       }
+               }
                cur = cur->next;
        }
 

Modified: trunk/src/rs-geo-db.c
===================================================================
--- trunk/src/rs-geo-db.c       2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/rs-geo-db.c       2013-06-09 22:19:49 UTC (rev 4415)
@@ -16,6 +16,9 @@
        OsmGpsMap *map;
        sqlite3 *db;
        GtkAdjustment *offset_adj;
+       gdouble lon;
+       gdouble lat;
+       gdouble ele;
 };
 
 G_DEFINE_TYPE (RSGeoDb, rs_geo_db, GTK_TYPE_OBJECT)
@@ -72,6 +75,10 @@
        sqlite3_prepare_v2(geodb->db, "CREATE TABLE trkpts (time INTEGER 
PRIMARY KEY, lon DOUBLE, lat DOUBLE, ele DOUBLE, import INTEGER, FOREIGN 
KEY(import) REFERENCES imports(id));", -1, &stmt, NULL);
        rc = sqlite3_step(stmt);
        sqlite3_finalize(stmt);
+
+       geodb->lon = 0.0;
+       geodb->lat = 0.0;
+       geodb->ele = 0.0;
 }
 
 
@@ -425,7 +432,7 @@
 
 
 void
-rs_geo_db_find_coordinate(RSGeoDb *geodb, gint timestamp, gdouble *lon, 
gdouble *lat, gdouble *ele)
+rs_geo_db_find_coordinate(RSGeoDb *geodb, gint timestamp)
 {
        sqlite3 *db = geodb->db;
   
@@ -462,9 +469,9 @@
 
        if (after_timestamp == before_timestamp)
        {
-               *lon = after_lon;
-               *lat = after_lat;
-               *ele = after_ele;
+               geodb->lon = after_lon;
+               geodb->lat = after_lat;
+               geodb->ele = after_ele;
                return;
        }
 
@@ -474,28 +481,41 @@
        gdouble diff_lat = (after_lat - before_lat) / diff_timestamp;
        gdouble diff_ele = (after_ele - before_ele) / diff_timestamp;
 
-       *lon = after_lon - diff*diff_lon;
-       *lat = after_lat - diff*diff_lat;
-       *ele = after_ele - diff*diff_ele;
+       geodb->lon = after_lon - diff*diff_lon;
+       geodb->lat = after_lat - diff*diff_lat;
+       geodb->ele = after_ele - diff*diff_ele;
 }
 
 void 
-rs_geo_db_set_coordinates(RSGeoDb *geodb, gdouble lon, gdouble lat)
+rs_geo_db_set_coordinates(RSGeoDb *geodb, RS_PHOTO *photo)
 {
-       osm_gps_map_set_center((OsmGpsMap *) geodb->map, lat, lon);
+       photo->lon = geodb->lon;
+       photo->lat = geodb->lat;
+       photo->ele = geodb->ele;
+
+       osm_gps_map_set_center((OsmGpsMap *) geodb->map, geodb->lat, 
geodb->lon);
 }
 
+void
+rs_geo_db_set_coordinates_manual(RSGeoDb *geodb, RS_PHOTO *photo, gdouble lon, 
gdouble lat)
+{
+       photo->lon = geodb->lon = lon;
+       photo->lat = geodb->lat = lat;
+       photo->ele = geodb->ele = 0.0;
+
+       osm_gps_map_set_center((OsmGpsMap *) geodb->map, geodb->lat, 
geodb->lon);
+}
+
 void spinbutton_change (GtkAdjustment *adj, gpointer user_data)
 {
        RS_BLOB *rs = (RS_BLOB *) user_data;
-       gdouble lon, lat, ele;
        RSGeoDb *geodb = rs_geo_db_get_singleton();
 
        gint time_offset= gtk_adjustment_get_value(adj);
        rs->photo->time_offset = time_offset;
   
-       rs_geo_db_find_coordinate(geodb, rs->photo->metadata->timestamp + 
time_offset, &lon, &lat, &ele);
-       rs_geo_db_set_coordinates(geodb, lon, lat);
+       rs_geo_db_find_coordinate(geodb, rs->photo->metadata->timestamp + 
time_offset);
+       rs_geo_db_set_coordinates(geodb, rs->photo);
 }
 
 void update_label (GtkAdjustment *adj, GtkLabel *label)
@@ -564,11 +584,23 @@
 void map_changed (OsmGpsMap *map, RSGeoDb *geodb)
 {
        gint zoom = -1;
+       //gdouble lon = -1.0, lat = -1.0;
+       gfloat lon, lat;
+
+       RS_BLOB *rs = rs_get_blob();
+
        if (map)
-               g_object_get(map, "zoom", &zoom, NULL);
+               g_object_get(map, "zoom", &zoom, "longitude", &lon, "latitude", 
&lat, NULL);
 
        if (zoom > 0)
                rs_conf_set_integer(CONF_MAP_ZOOM, zoom);
+
+       if (rs->photo && (lon != 0.0 || lat != 0.0) && (lon != geodb->lon || 
lat != geodb->lat))
+       {
+               rs->photo->lon = geodb->lon = (gdouble) lon;
+               rs->photo->lat = geodb->lat = (gdouble) lat;
+               rs->photo->ele = geodb->ele = 0.0;
+       }
 }
 
 static void

Modified: trunk/src/rs-geo-db.h
===================================================================
--- trunk/src/rs-geo-db.h       2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/rs-geo-db.h       2013-06-09 22:19:49 UTC (rev 4415)
@@ -47,8 +47,9 @@
 RSGeoDb *rs_geo_db_get_singleton(void);
 
 extern GtkWidget * rs_geo_db_get_widget(RSGeoDb *geodb);
-extern void rs_geo_db_set_coordinates(RSGeoDb *geodb, gdouble lon, gdouble 
lat);
-void rs_geo_db_find_coordinate(RSGeoDb *geodb, gint timestamp, gdouble *lon, 
gdouble *lat, gdouble *ele);
+extern void rs_geo_db_set_coordinates(RSGeoDb *geodb, RS_PHOTO *photo);
+extern void rs_geo_db_set_coordinates_manual(RSGeoDb *geodb, RS_PHOTO *photo, 
gdouble lon, gdouble lat);
+void rs_geo_db_find_coordinate(RSGeoDb *geodb, gint timestamp);
 void rs_geo_db_set_offset(RSGeoDb *geodb, RS_PHOTO *time_offset, gint offset);
 
 #endif /* RS_GEO_DB */

Modified: trunk/src/rs-photo.c
===================================================================
--- trunk/src/rs-photo.c        2013-06-08 22:21:35 UTC (rev 4414)
+++ trunk/src/rs-photo.c        2013-06-09 22:19:49 UTC (rev 4415)
@@ -154,6 +154,9 @@
        photo->auto_wb_mul = NULL;
        photo->embedded_profile = NULL;
        photo->time_offset = 0;
+       photo->lon = 0.0;
+       photo->lat = 0.0;
+       photo->ele = 0.0;
 }
 
 static void
@@ -424,14 +427,19 @@
                RSLensDb *lens_db = rs_lens_db_get_default();
                RSLens *lens = rs_lens_db_lookup_from_metadata(lens_db, meta);
 
-               gdouble lon, lat, ele;
                RSGeoDb *geodb = rs_geo_db_get_singleton();
+               gdouble tlon = photo->lon, tlat = photo->lat; /* FIXME: setting 
offset will make it use gps data and not what's set in cache */
                rs_geo_db_set_offset(geodb, photo, photo->time_offset);
-               if (photo->time_offset != 0) 
+
+               if (tlon != 0.0 && tlat != 0.0)
                {
-                       rs_geo_db_find_coordinate(geodb, meta->timestamp + 
photo->time_offset, &lon, &lat, &ele);
-                       rs_geo_db_set_coordinates(geodb, lon, lat);
+                       rs_geo_db_set_coordinates_manual(geodb, photo, tlon, 
tlat);
                }
+               else if (photo->time_offset != 0)
+               {
+                       rs_geo_db_find_coordinate(geodb, meta->timestamp + 
photo->time_offset);
+                       rs_geo_db_set_coordinates(geodb, photo);
+               }
 
                /* Apply lens information to RSLensfun */
                if (lens)


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to