]> git.street.me.uk Git - andy/viking.git/blobdiff - src/vikgeoreflayer.c
Bug fix: View Mode displayed wrong setting on startup.
[andy/viking.git] / src / vikgeoreflayer.c
index d0fcbd6aedc61d3b912707cd41f19944f401853c..815ae7162cc2ca498253a55c23845fed2a7224b9 100644 (file)
@@ -48,13 +48,20 @@ static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gp
 static void georef_layer_set_image ( VikGeorefLayer *vgl, const gchar *image );
 static gboolean georef_layer_dialog ( VikGeorefLayer **vgl, gpointer vp, GtkWindow *w );
 static void georef_layer_load_image ( VikGeorefLayer *vgl );
 static void georef_layer_set_image ( VikGeorefLayer *vgl, const gchar *image );
 static gboolean georef_layer_dialog ( VikGeorefLayer **vgl, gpointer vp, GtkWindow *w );
 static void georef_layer_load_image ( VikGeorefLayer *vgl );
+
+/* tools */
+static gpointer georef_layer_move_create ( VikWindow *vw, VikViewport *vvp);
 static gboolean georef_layer_move_release ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp );
 static gboolean georef_layer_move_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp );
 static gboolean georef_layer_move_release ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp );
 static gboolean georef_layer_move_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp );
+static gpointer georef_layer_zoom_create ( VikWindow *vw, VikViewport *vvp);
 static gboolean georef_layer_zoom_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp );
 
 static VikToolInterface georef_tools[] = {
 static gboolean georef_layer_zoom_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp );
 
 static VikToolInterface georef_tools[] = {
-  { "Georef Move Map", (VikToolInterfaceFunc) georef_layer_move_press,  (VikToolInterfaceFunc) georef_layer_move_release },
-  { "Georef Zoom Tool", (VikToolInterfaceFunc) georef_layer_zoom_press, NULL },
+  { "Georef Move Map", (VikToolConstructorFunc) georef_layer_move_create, NULL, NULL, NULL,
+    (VikToolMouseFunc) georef_layer_move_press, NULL, (VikToolMouseFunc) georef_layer_move_release },
+
+  { "Georef Zoom Tool", (VikToolConstructorFunc) georef_layer_zoom_create, NULL, NULL, NULL,
+    (VikToolMouseFunc) georef_layer_zoom_press, NULL, NULL },
 };
 
 VikLayerInterface vik_georef_layer_interface = {
 };
 
 VikLayerInterface vik_georef_layer_interface = {
@@ -69,6 +76,8 @@ VikLayerInterface vik_georef_layer_interface = {
   NULL,
   0,
 
   NULL,
   0,
 
+  VIK_MENU_ITEM_ALL,
+
   (VikLayerFuncCreate)                  georef_layer_create,
   (VikLayerFuncRealize)                 NULL,
   (VikLayerFuncPostRead)                georef_layer_load_image,
   (VikLayerFuncCreate)                  georef_layer_create,
   (VikLayerFuncRealize)                 NULL,
   (VikLayerFuncPostRead)                georef_layer_load_image,
@@ -78,6 +87,9 @@ VikLayerInterface vik_georef_layer_interface = {
   (VikLayerFuncDraw)                    georef_layer_draw,
   (VikLayerFuncChangeCoordMode)         NULL,
 
   (VikLayerFuncDraw)                    georef_layer_draw,
   (VikLayerFuncChangeCoordMode)         NULL,
 
+  (VikLayerFuncSetMenuItemsSelection)   NULL,
+  (VikLayerFuncGetMenuItemsSelection)   NULL,
+
   (VikLayerFuncAddMenuItems)            georef_layer_add_menu_items,
   (VikLayerFuncSublayerAddMenuItems)    NULL,
 
   (VikLayerFuncAddMenuItems)            georef_layer_add_menu_items,
   (VikLayerFuncSublayerAddMenuItems)    NULL,
 
@@ -94,6 +106,7 @@ VikLayerInterface vik_georef_layer_interface = {
   (VikLayerFuncReadFileData)            NULL,
   (VikLayerFuncWriteFileData)           NULL,
 
   (VikLayerFuncReadFileData)            NULL,
   (VikLayerFuncWriteFileData)           NULL,
 
+  (VikLayerFuncDeleteItem)              NULL,
   (VikLayerFuncCopyItem)                NULL,
   (VikLayerFuncPasteItem)               NULL,
   (VikLayerFuncFreeCopiedItem)          NULL,
   (VikLayerFuncCopyItem)                NULL,
   (VikLayerFuncPasteItem)               NULL,
   (VikLayerFuncFreeCopiedItem)          NULL,
@@ -372,7 +385,7 @@ static gboolean georef_layer_dialog ( VikGeorefLayer **vgl, gpointer vp, GtkWind
                                                   GTK_RESPONSE_REJECT,
                                                   GTK_STOCK_OK,
                                                   GTK_RESPONSE_ACCEPT,
                                                   GTK_RESPONSE_REJECT,
                                                   GTK_STOCK_OK,
                                                   GTK_RESPONSE_ACCEPT,
-                                                  0 );
+                                                  NULL );
   GtkWidget *table, *wfp_hbox, *wfp_label, *wfp_button, *ce_label, *ce_spin, *cn_label, *cn_spin, *xlabel, *xspin, *ylabel, *yspin, *imagelabel, *imageentry;
 
   GtkWidget *pass_along[4];
   GtkWidget *table, *wfp_hbox, *wfp_label, *wfp_button, *ce_label, *ce_spin, *cn_label, *cn_spin, *xlabel, *xspin, *ylabel, *yspin, *imagelabel, *imageentry;
 
   GtkWidget *pass_along[4];
@@ -519,8 +532,17 @@ static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gp
   gtk_widget_show ( item );
 }
 
   gtk_widget_show ( item );
 }
 
+
+static gpointer georef_layer_move_create ( VikWindow *vw, VikViewport *vvp)
+{
+  return vvp;
+}
+
 static gboolean georef_layer_move_release ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp )
 {
 static gboolean georef_layer_move_release ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp )
 {
+  if (!vgl || vgl->vl.type != VIK_LAYER_GEOREF)
+    return FALSE;
+
   if ( vgl->click_x != -1 )
   {
     vgl->corner.easting += (event->x - vgl->click_x) * vik_viewport_get_xmpp (vvp);
   if ( vgl->click_x != -1 )
   {
     vgl->corner.easting += (event->x - vgl->click_x) * vik_viewport_get_xmpp (vvp);
@@ -531,8 +553,15 @@ static gboolean georef_layer_move_release ( VikGeorefLayer *vgl, GdkEventButton
   return FALSE; /* I didn't move anything on this layer! */
 }
 
   return FALSE; /* I didn't move anything on this layer! */
 }
 
+static gpointer georef_layer_zoom_create ( VikWindow *vw, VikViewport *vvp)
+{
+  return vvp;
+}
+
 static gboolean georef_layer_zoom_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp )
 {
 static gboolean georef_layer_zoom_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp )
 {
+  if (!vgl || vgl->vl.type != VIK_LAYER_GEOREF)
+    return FALSE;
   if ( event->button == 1 )
   {
     if ( vgl->mpp_easting < (VIK_VIEWPORT_MAX_ZOOM / 1.05) && vgl->mpp_northing < (VIK_VIEWPORT_MAX_ZOOM / 1.05) )
   if ( event->button == 1 )
   {
     if ( vgl->mpp_easting < (VIK_VIEWPORT_MAX_ZOOM / 1.05) && vgl->mpp_northing < (VIK_VIEWPORT_MAX_ZOOM / 1.05) )
@@ -557,6 +586,8 @@ static gboolean georef_layer_zoom_press ( VikGeorefLayer *vgl, GdkEventButton *e
 
 static gboolean georef_layer_move_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp )
 {
 
 static gboolean georef_layer_move_press ( VikGeorefLayer *vgl, GdkEventButton *event, VikViewport *vvp )
 {
+  if (!vgl || vgl->vl.type != VIK_LAYER_GEOREF)
+    return FALSE;
   vgl->click_x = event->x;
   vgl->click_y = event->y;
   return TRUE;
   vgl->click_x = event->x;
   vgl->click_y = event->y;
   return TRUE;