#include "viking.h"
#include "icons/icons.h"
+static VikCoordLayer *coord_layer_new ( VikViewport *vp );
+static void coord_layer_draw ( VikCoordLayer *vcl, VikViewport *vp );
+static void coord_layer_free ( VikCoordLayer *vcl );
+static VikCoordLayer *coord_layer_create ( VikViewport *vp );
static void coord_layer_marshall( VikCoordLayer *vcl, guint8 **data, gint *len );
static VikCoordLayer *coord_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp );
static gboolean coord_layer_set_param ( VikCoordLayer *vcl, guint16 id, VikLayerParamData data, VikViewport *vp, gboolean is_file_operation );
static VikLayerParamData coord_layer_get_param ( VikCoordLayer *vcl, guint16 id, gboolean is_file_operation );
static void coord_layer_post_read ( VikLayer *vl, VikViewport *vp, gboolean from_file );
+static void coord_layer_update_gc ( VikCoordLayer *vcl, VikViewport *vp );
static VikLayerParamScale param_scales[] = {
{ 0.05, 60.0, 0.25, 10 },
{ 1, 10, 1, 0 },
};
+static VikLayerParamData color_default ( void ) {
+ VikLayerParamData data; gdk_color_parse ( "red", &data.c ); return data;
+ // or: return VIK_LPD_COLOR ( 0, 65535, 0, 0 );
+}
+static VikLayerParamData min_inc_default ( void ) { return VIK_LPD_DOUBLE ( 1.0 ); }
+static VikLayerParamData line_thickness_default ( void ) { return VIK_LPD_UINT ( 3 ); }
+
static VikLayerParam coord_layer_params[] = {
- { "color", VIK_LAYER_PARAM_COLOR, VIK_LAYER_GROUP_NONE, N_("Color:"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, NULL },
- { "min_inc", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, N_("Minutes Width:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶m_scales[0], NULL, NULL },
- { "line_thickness", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Line Thickness:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶m_scales[1], NULL, NULL },
+ { VIK_LAYER_COORD, "color", VIK_LAYER_PARAM_COLOR, VIK_LAYER_GROUP_NONE, N_("Color:"), VIK_LAYER_WIDGET_COLOR, NULL, NULL, NULL, color_default, NULL, NULL },
+ { VIK_LAYER_COORD, "min_inc", VIK_LAYER_PARAM_DOUBLE, VIK_LAYER_GROUP_NONE, N_("Minutes Width:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶m_scales[0], NULL, NULL, min_inc_default, NULL, NULL },
+ { VIK_LAYER_COORD, "line_thickness", VIK_LAYER_PARAM_UINT, VIK_LAYER_GROUP_NONE, N_("Line Thickness:"), VIK_LAYER_WIDGET_SPINBUTTON, ¶m_scales[1], NULL, NULL, line_thickness_default, NULL, NULL },
};
-
enum { PARAM_COLOR = 0, PARAM_MIN_INC, PARAM_LINE_THICKNESS, NUM_PARAMS };
VikLayerInterface vik_coord_layer_interface = {
VIK_MENU_ITEM_ALL,
- (VikLayerFuncCreate) vik_coord_layer_create,
+ (VikLayerFuncCreate) coord_layer_create,
(VikLayerFuncRealize) NULL,
(VikLayerFuncPostRead) coord_layer_post_read,
- (VikLayerFuncFree) vik_coord_layer_free,
+ (VikLayerFuncFree) coord_layer_free,
(VikLayerFuncProperties) NULL,
- (VikLayerFuncDraw) vik_coord_layer_draw,
+ (VikLayerFuncDraw) coord_layer_draw,
(VikLayerFuncChangeCoordMode) NULL,
+ (VikLayerFuncGetTimestamp) NULL,
+
(VikLayerFuncSetMenuItemsSelection) NULL,
(VikLayerFuncGetMenuItemsSelection) NULL,
(VikLayerFuncSetParam) coord_layer_set_param,
(VikLayerFuncGetParam) coord_layer_get_param,
+ (VikLayerFuncChangeParam) NULL,
(VikLayerFuncReadFileData) NULL,
(VikLayerFuncWriteFileData) NULL,
static VikCoordLayer *coord_layer_unmarshall( guint8 *data, gint len, VikViewport *vvp )
{
- VikCoordLayer *rv = vik_coord_layer_new ();
+ VikCoordLayer *rv = coord_layer_new ( vvp );
vik_layer_unmarshall_params ( VIK_LAYER(rv), data, len, vvp );
+ coord_layer_update_gc ( rv, vvp );
return rv;
}
case PARAM_COLOR: vcl->color = data.c; break;
case PARAM_MIN_INC: vcl->deg_inc = data.d / 60.0; break;
case PARAM_LINE_THICKNESS: if ( data.u >= 1 && data.u <= 15 ) vcl->line_thickness = data.u; break;
+ default: break;
}
return TRUE;
}
case PARAM_COLOR: rv.c = vcl->color; break;
case PARAM_MIN_INC: rv.d = vcl->deg_inc * 60.0; break;
case PARAM_LINE_THICKNESS: rv.i = vcl->line_thickness; break;
+ default: break;
}
return rv;
}
vcl->gc = vik_viewport_new_gc_from_color ( vp, &(vcl->color), vcl->line_thickness );
}
-VikCoordLayer *vik_coord_layer_new ( )
+static VikCoordLayer *coord_layer_new ( VikViewport *vvp )
{
- GdkColor InitColor;
-
VikCoordLayer *vcl = VIK_COORD_LAYER ( g_object_new ( VIK_COORD_LAYER_TYPE, NULL ) );
vik_layer_set_type ( VIK_LAYER(vcl), VIK_LAYER_COORD );
- InitColor.pixel = 0;
- InitColor.red = 65535;
- InitColor.green = 65535;
- InitColor.blue = 65535;
+ vik_layer_set_defaults ( VIK_LAYER(vcl), vvp );
vcl->gc = NULL;
- vcl->deg_inc = 1.0/60.0;
- vcl->line_thickness = 3;
- vcl->color = InitColor;
+
return vcl;
}
-void vik_coord_layer_draw ( VikCoordLayer *vcl, gpointer data )
+static void coord_layer_draw ( VikCoordLayer *vcl, VikViewport *vp )
{
- VikViewport *vp = (VikViewport *) data;
-
if ( !vcl->gc ) {
return;
}
}
}
-void vik_coord_layer_free ( VikCoordLayer *vcl )
+static void coord_layer_free ( VikCoordLayer *vcl )
{
if ( vcl->gc != NULL )
g_object_unref ( G_OBJECT(vcl->gc) );
vcl->gc = vik_viewport_new_gc_from_color ( vp, &(vcl->color), vcl->line_thickness );
}
-VikCoordLayer *vik_coord_layer_create ( VikViewport *vp )
+static VikCoordLayer *coord_layer_create ( VikViewport *vp )
{
- VikCoordLayer *vcl = vik_coord_layer_new ();
+ VikCoordLayer *vcl = coord_layer_new ( vp );
if ( vp )
- coord_layer_update_gc ( vcl, vp, "red" );
+ coord_layer_update_gc ( vcl, vp );
return vcl;
}