enum { PARAM_IMAGE = 0, PARAM_CE, PARAM_CN, PARAM_ME, PARAM_MN, NUM_PARAMS };
+static void georef_layer_marshall( VikGeorefLayer *vgl, guint8 **data, gint *len );
+static VikGeorefLayer *georef_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
static VikGeorefLayer *georef_layer_copy ( VikGeorefLayer *vgl, gpointer vp );
static gboolean georef_layer_set_param ( VikGeorefLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp );
static VikLayerParamData georef_layer_get_param ( VikGeorefLayer *vgl, guint16 id );
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 = {
NULL,
0,
+ VIK_MENU_ITEM_ALL,
+
(VikLayerFuncCreate) georef_layer_create,
(VikLayerFuncRealize) NULL,
(VikLayerFuncPostRead) georef_layer_load_image,
(VikLayerFuncDraw) georef_layer_draw,
(VikLayerFuncChangeCoordMode) NULL,
+ (VikLayerFuncSetMenuItemsSelection) NULL,
+ (VikLayerFuncGetMenuItemsSelection) NULL,
+
(VikLayerFuncAddMenuItems) georef_layer_add_menu_items,
(VikLayerFuncSublayerAddMenuItems) NULL,
(VikLayerFuncSublayerToggleVisible) NULL,
(VikLayerFuncCopy) georef_layer_copy,
+ (VikLayerFuncMarshall) georef_layer_marshall,
+ (VikLayerFuncUnmarshall) georef_layer_unmarshall,
(VikLayerFuncSetParam) georef_layer_set_param,
(VikLayerFuncGetParam) georef_layer_get_param,
(VikLayerFuncReadFileData) NULL,
(VikLayerFuncWriteFileData) NULL,
+ (VikLayerFuncDeleteItem) NULL,
(VikLayerFuncCopyItem) NULL,
(VikLayerFuncPasteItem) NULL,
(VikLayerFuncFreeCopiedItem) NULL,
return rv;
}
+static void georef_layer_marshall( VikGeorefLayer *vgl, guint8 **data, gint *len )
+{
+ vik_layer_marshall_params ( VIK_LAYER(vgl), data, len );
+}
+
+static VikGeorefLayer *georef_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp )
+{
+ VikGeorefLayer *rv = georef_layer_new ( vvp );
+ vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp );
+ if (rv->image) {
+ georef_layer_load_image ( rv );
+ }
+ return rv;
+}
+
static gboolean georef_layer_set_param ( VikGeorefLayer *vgl, guint16 id, VikLayerParamData data, VikViewport *vp )
{
switch ( id )
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];
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);
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) )
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;