X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/0a6cab71af4d58f26021d357e77374f8cd500416..5dab4f3fa3c22facc679ba558dd6987d3d8f34e0:/src/vikgeoreflayer.c diff --git a/src/vikgeoreflayer.c b/src/vikgeoreflayer.c index d0fcbd6a..815ae716 100644 --- a/src/vikgeoreflayer.c +++ b/src/vikgeoreflayer.c @@ -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 ); + +/* 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 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[] = { - { "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 = { @@ -69,6 +76,8 @@ VikLayerInterface vik_georef_layer_interface = { NULL, 0, + VIK_MENU_ITEM_ALL, + (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, + (VikLayerFuncSetMenuItemsSelection) NULL, + (VikLayerFuncGetMenuItemsSelection) NULL, + (VikLayerFuncAddMenuItems) georef_layer_add_menu_items, (VikLayerFuncSublayerAddMenuItems) NULL, @@ -94,6 +106,7 @@ VikLayerInterface vik_georef_layer_interface = { (VikLayerFuncReadFileData) NULL, (VikLayerFuncWriteFileData) NULL, + (VikLayerFuncDeleteItem) 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, - 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]; @@ -519,8 +532,17 @@ static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gp 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 ) { + 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); @@ -531,8 +553,15 @@ static gboolean georef_layer_move_release ( VikGeorefLayer *vgl, GdkEventButton 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 ) { + 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) ) @@ -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 ) { + if (!vgl || vgl->vl.type != VIK_LAYER_GEOREF) + return FALSE; vgl->click_x = event->x; vgl->click_y = event->y; return TRUE;