]> git.itanic.dy.fi Git - maemo-mapper/commitdiff
Added repo settings for min and max auto-downloadable zoom levels.
authorgnuite <gnuite@gmail.com>
Fri, 16 Nov 2007 01:35:12 +0000 (01:35 +0000)
committergnuite <gnuite@gmail.com>
Fri, 16 Nov 2007 01:35:12 +0000 (01:35 +0000)
git-svn-id: svn+ssh://garage/var/lib/gforge/svnroot/maemo-mapper/trunk@125 6c538b50-5814-0410-93ad-8bdf4c0149d1

src/defines.h
src/display.c
src/input.c
src/maps.c
src/settings.c
src/types.h

index 63d5f387a894dde77c791f0d4eb45f8825ef5ca3..004100b98317dfd3c6a5cc5f4b13c3029bbf48ae 100644 (file)
 #define REPO_DEFAULT_MAP_URI "http://tile.openstreetmap.org/%0d/%d/%d.png"
 #define REPO_DEFAULT_DL_ZOOM_STEPS (2)
 #define REPO_DEFAULT_VIEW_ZOOM_STEPS (1)
+#define REPO_DEFAULT_MIN_ZOOM (4)
+#define REPO_DEFAULT_MAX_ZOOM (20)
 
 #define XML_DATE_FORMAT "%FT%T"
 
index 4637b00827f77ee6784a020f1bf2cdb681d8116a..c4fc3822b86782589a210bc042f3b509b3f431a1 100644 (file)
@@ -1734,6 +1734,9 @@ thread_render_map(MapRenderTask *mrt)
                 /* No map; download, if we should. */
                 if(!started_download && _auto_download
                         && mrt->repo->type != REPOTYPE_NONE
+                        /* Make sure this map is within dl zoom limits. */
+                        && ((unsigned)(mrt->zoom + zoff - mrt->repo->min_zoom)
+                            <= (mrt->repo->max_zoom - mrt->repo->min_zoom))
                         /* Make sure this map matches the dl_zoom_steps,
                          * or that there currently is no cache. */
                         && (!mrt->repo->db || !((mrt->zoom + zoff
index c5c0bd9dcbb8152cc86e1bb9c5d662d4d63caba2..0ffb0c92d4d725b066817992a4e882b32690affd 100644 (file)
@@ -557,6 +557,8 @@ map_cb_button_release(GtkWidget *widget, GdkEventButton *event)
         screen2unit((gint)(event->x + 0.5), (gint)(event->y + 0.5),
                 _pos.unitx, _pos.unity);
         unit2latlon(_pos.unitx, _pos.unity, _gps.lat, _gps.lon);
+        /* Test unit-to-lat/lon conversion. */
+        latlon2unit(_gps.lat, _gps.lon, _pos.unitx, _pos.unity);
         _gps.speed = ((gint)(_gps.speed + 5) % 60);
         _gps.heading = ((gint)(_gps.heading + 5) % 360);
         if(track_add(time(NULL), FALSE))
index e7d139841e8d656c2dcff9a6673e29187c7efc23..c8eb5ca0cbf550527f529e65eb06f192c20f67a1 100644 (file)
@@ -68,6 +68,8 @@ struct _RepoEditInfo {
     GtkWidget *chk_double_size;
     GtkWidget *chk_nextable;
     GtkWidget *btn_browse;
+    GtkWidget *num_min_zoom;
+    GtkWidget *num_max_zoom;
     BrowseInfo browse_info;
 };
 
@@ -1392,20 +1394,20 @@ repoman_dialog_add_repo(RepoManInfo *rmi, gchar *name)
     /* Map download URI. */
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_label_new(_("URL Format")),
-            0, 1, 0, 1, GTK_FILL, 0, 2, 4);
+            0, 1, 0, 1, GTK_FILL, 0, 2, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
             rei->txt_url = gtk_entry_new(),
-            1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 4);
+            1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 2, 0);
 
     /* Map Directory. */
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_label_new(_("Cache DB")),
-            0, 1, 1, 2, GTK_FILL, 0, 2, 4);
+            0, 1, 1, 2, GTK_FILL, 0, 2, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
             hbox = gtk_hbox_new(FALSE, 4),
-            1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 4);
+            1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 2, 0);
     gtk_box_pack_start(GTK_BOX(hbox),
             rei->txt_db_filename = gtk_entry_new(),
             TRUE, TRUE, 0);
@@ -1433,11 +1435,11 @@ repoman_dialog_add_repo(RepoManInfo *rmi, gchar *name)
     /* Download Zoom Steps. */
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_label_new(_("Download Zoom Steps")),
-            0, 1, 0, 1, GTK_FILL, 0, 2, 4);
+            0, 1, 0, 1, GTK_FILL, 0, 2, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
-            1, 2, 0, 1, GTK_FILL, 0, 2, 4);
+            1, 2, 0, 1, GTK_FILL, 0, 2, 0);
     gtk_container_add(GTK_CONTAINER(label),
             rei->num_dl_zoom_steps = hildon_controlbar_new());
     hildon_controlbar_set_range(
@@ -1449,11 +1451,11 @@ repoman_dialog_add_repo(RepoManInfo *rmi, gchar *name)
     /* Download Zoom Steps. */
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_label_new(_("View Zoom Steps")),
-            0, 1, 1, 2, GTK_FILL, 0, 2, 4);
+            0, 1, 1, 2, GTK_FILL, 0, 2, 0);
     gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
-            1, 2, 1, 2, GTK_FILL, 0, 2, 4);
+            1, 2, 1, 2, GTK_FILL, 0, 2, 0);
     gtk_container_add(GTK_CONTAINER(label),
             rei->num_view_zoom_steps = hildon_controlbar_new());
     hildon_controlbar_set_range(
@@ -1464,13 +1466,13 @@ repoman_dialog_add_repo(RepoManInfo *rmi, gchar *name)
 
     gtk_table_attach(GTK_TABLE(table),
             label = gtk_vseparator_new(),
-            2, 3, 0, 2, GTK_FILL, GTK_FILL, 4, 4);
+            2, 3, 0, 2, GTK_FILL, GTK_FILL, 4, 0);
 
     /* Double-size. */
     gtk_table_attach(GTK_TABLE(table),
             rei->chk_double_size = gtk_check_button_new_with_label(
                 _("Double Pixels")),
-            3, 4, 0, 1, GTK_FILL, GTK_FILL, 0, 4);
+            3, 4, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
     gtk_toggle_button_set_active(
             GTK_TOGGLE_BUTTON(rei->chk_double_size), FALSE);
 
@@ -1478,10 +1480,40 @@ repoman_dialog_add_repo(RepoManInfo *rmi, gchar *name)
     gtk_table_attach(GTK_TABLE(table),
             rei->chk_nextable = gtk_check_button_new_with_label(
                 _("Next-able")),
-            3, 4, 1, 2, GTK_FILL, GTK_FILL, 0, 4);
+            3, 4, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
     gtk_toggle_button_set_active(
             GTK_TOGGLE_BUTTON(rei->chk_nextable), TRUE);
 
+    /* Downloadable Zoom Levels. */
+    gtk_table_attach(GTK_TABLE(table),
+            label = gtk_label_new(_("Downloadable Zooms:")),
+            0, 1, 2, 3, GTK_FILL, 0, 2, 0);
+    gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
+    gtk_table_attach(GTK_TABLE(table),
+            label = gtk_alignment_new(0.f, 0.5f, 0.f, 0.f),
+            1, 4, 2, 3, GTK_FILL, 0, 2, 0);
+    gtk_container_add(GTK_CONTAINER(label),
+            hbox = gtk_hbox_new(FALSE, 4));
+    gtk_box_pack_start(GTK_BOX(hbox),
+            label = gtk_label_new(_("Min.")),
+            TRUE, TRUE, 0);
+    gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
+    gtk_box_pack_start(GTK_BOX(hbox),
+            rei->num_min_zoom = hildon_number_editor_new(MIN_ZOOM, MAX_ZOOM),
+            FALSE, FALSE, 0);
+    hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(rei->num_min_zoom), 4);
+    gtk_box_pack_start(GTK_BOX(hbox),
+            label = gtk_label_new(_("")),
+            TRUE, TRUE, 4);
+    gtk_box_pack_start(GTK_BOX(hbox),
+            label = gtk_label_new(_("Max.")),
+            TRUE, TRUE, 0);
+    gtk_misc_set_alignment(GTK_MISC(label), 1.f, 0.5f);
+    gtk_box_pack_start(GTK_BOX(hbox),
+            rei->num_max_zoom = hildon_number_editor_new(MIN_ZOOM, MAX_ZOOM),
+            FALSE, FALSE, 0);
+    hildon_number_editor_set_value(HILDON_NUMBER_EDITOR(rei->num_max_zoom),20);
+
     rmi->repo_edits = g_list_append(rmi->repo_edits, rei);
 
     /* Connect signals. */
@@ -1639,6 +1671,12 @@ repoman_download(GtkWidget *widget, RepoManInfo *rmi)
                 gtk_toggle_button_set_active(
                         GTK_TOGGLE_BUTTON(rei->chk_nextable),
                         rd->nextable);
+                hildon_number_editor_set_value(
+                        HILDON_NUMBER_EDITOR(rei->num_min_zoom),
+                        rd->min_zoom);
+                hildon_number_editor_set_value(
+                        HILDON_NUMBER_EDITOR(rei->num_max_zoom),
+                        rd->max_zoom);
             }
             g_free(bytes);
         }
@@ -1755,6 +1793,12 @@ repoman_dialog()
         gtk_toggle_button_set_active(
                 GTK_TOGGLE_BUTTON(rei->chk_nextable),
                 rd->nextable);
+        hildon_number_editor_set_value(
+                HILDON_NUMBER_EDITOR(rei->num_min_zoom),
+                rd->min_zoom);
+        hildon_number_editor_set_value(
+                HILDON_NUMBER_EDITOR(rei->num_max_zoom),
+                rd->max_zoom);
         if(rd == _curr_repo)
             curr_repo_index = i;
     }
@@ -1767,10 +1811,33 @@ repoman_dialog()
     while(GTK_RESPONSE_ACCEPT == gtk_dialog_run(GTK_DIALOG(dialog)))
     {
         /* Iterate through repos and verify each. */
+        gboolean verified = TRUE;
         gint i;
         GList *curr;
         gchar *old_curr_repo_name = _curr_repo->name;
 
+        for(i = 0, curr = rmi.repo_edits; curr; curr = curr->next, i++)
+        {
+            /* Check the ranges for the min and max zoom levels. */
+            RepoEditInfo *rei = curr->data;
+            if(hildon_number_editor_get_value(
+                        HILDON_NUMBER_EDITOR(rei->num_max_zoom))
+                 < hildon_number_editor_get_value(
+                        HILDON_NUMBER_EDITOR(rei->num_min_zoom)))
+            {
+                verified = FALSE;
+                break;
+            }
+        }
+        if(!verified)
+        {
+            gtk_combo_box_set_active(GTK_COMBO_BOX(rmi.cmb_repos), i);
+            popup_error(dialog,
+                    _("Minimum Downloadable Zoom must be less than "
+                        "Maximum Downloadable Zoom."));
+            continue;
+        }
+
         /* We're good to replace.  Remove old _repo_list menu items. */
         menu_maps_remove_repos();
         /* But keep the repo list in memory, in case downloads are using it. */
@@ -1796,6 +1863,10 @@ repoman_dialog()
                     GTK_TOGGLE_BUTTON(rei->chk_double_size));
             rd->nextable = gtk_toggle_button_get_active(
                     GTK_TOGGLE_BUTTON(rei->chk_nextable));
+            rd->min_zoom = hildon_number_editor_get_value(
+                    HILDON_NUMBER_EDITOR(rei->num_min_zoom));
+            rd->max_zoom = hildon_number_editor_get_value(
+                    HILDON_NUMBER_EDITOR(rei->num_max_zoom));
             set_repo_type(rd);
 
             _repo_list = g_list_append(_repo_list, rd);
index 4b5fb47e5837301b96ae20dbfd537df39553964b..7b69dbc7782a3afef6d470662557ce21e22bcdc5 100644 (file)
@@ -262,14 +262,16 @@ settings_save()
             RepoData *rd = curr->data;
             gchar buffer[BUFFER_SIZE];
             snprintf(buffer, sizeof(buffer),
-                    "%s\t%s\t%s\t%d\t%d\t%d\t%d",
+                    "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d",
                     rd->name,
                     rd->url,
                     rd->db_filename,
                     rd->dl_zoom_steps,
                     rd->view_zoom_steps,
                     rd->double_size,
-                    rd->nextable);
+                    rd->nextable,
+                    rd->min_zoom,
+                    rd->max_zoom);
             temp_list = g_slist_append(temp_list, g_strdup(buffer));
             if(rd == _curr_repo)
                 gconf_client_set_int(gconf_client,
@@ -1627,6 +1629,18 @@ settings_parse_repo(gchar *str)
             || (rd->nextable = strtol(token, &error_check, 10), token == str))
         rd->nextable = TRUE;
 
+    /* Parse min zoom. */
+    token = strsep(&str, "\n\t");
+    if(!token || !*token
+            || (rd->min_zoom = strtol(token, &error_check, 10), token == str))
+        rd->min_zoom = 4;
+
+    /* Parse max zoom. */
+    token = strsep(&str, "\n\t");
+    if(!token || !*token
+            || (rd->max_zoom = strtol(token, &error_check, 10), token == str))
+        rd->max_zoom = 20;
+
     set_repo_type(rd);
 
     vprintf("%s(): return %p\n", __PRETTY_FUNCTION__, rd);
@@ -1956,6 +1970,8 @@ settings_init()
         repo->view_zoom_steps = REPO_DEFAULT_VIEW_ZOOM_STEPS;
         repo->double_size = FALSE;
         repo->nextable = TRUE;
+        repo->min_zoom = REPO_DEFAULT_MIN_ZOOM;
+        repo->max_zoom = REPO_DEFAULT_MAX_ZOOM;
         set_repo_type(repo);
 
         _repo_list = g_list_append(_repo_list, repo);
index abbbcfb5455fb188ba4aeafd56ace323889a0d21..d6941da852716e57f0829062828b1b79d3515d5e 100644 (file)
@@ -357,6 +357,8 @@ struct _RepoData {
     gint view_zoom_steps;
     gboolean double_size;
     gboolean nextable;
+    gint min_zoom;
+    gint max_zoom;
     RepoType type;
 #ifdef MAPDB_SQLITE
     sqlite3 *db;