X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/92255687a1ef4a2e04ca0f024711d0732ebd8b7f..e8518759e6c64fac28783cf190b82705dc4bbb87:/src/acquire.h?ds=inline diff --git a/src/acquire.h b/src/acquire.h index c8acdedf..fb22918f 100644 --- a/src/acquire.h +++ b/src/acquire.h @@ -22,54 +22,180 @@ #ifndef _VIKING_ACQUIRE_H #define _VIKING_ACQUIRE_H +#include + +#include "vikwindow.h" +#include "viklayerspanel.h" +#include "vikviewport.h" +#include "babel.h" + +G_BEGIN_DECLS + typedef struct _VikDataSourceInterface VikDataSourceInterface; -/* global data structure used to expose the progress dialog to the worker thread */ +typedef struct { + VikWindow *vw; + VikLayersPanel *vlp; + VikViewport *vvp; + gpointer userdata; +} acq_vik_t; + +/** + * acq_dialog_widgets_t: + * + * global data structure used to expose the progress dialog to the worker thread. + */ typedef struct { GtkWidget *status; VikWindow *vw; VikLayersPanel *vlp; VikViewport *vvp; GtkWidget *dialog; - gboolean ok; /* if OK is false when we exit, we MUST free w */ - gpointer specific_data; - VikDataSourceInterface *interface; + gboolean running; + VikDataSourceInterface *source_interface; + gpointer user_data; } acq_dialog_widgets_t; -typedef enum { VIK_DATASOURCE_GPSBABEL_DIRECT, VIK_DATASOURCE_SHELL_CMD } vik_datasource_type_t; -typedef enum { VIK_DATASOURCE_CREATENEWLAYER, VIK_DATASOURCE_ADDTOLAYER } vik_datasource_mode_t; +typedef enum { + VIK_DATASOURCE_CREATENEWLAYER, // Generally Datasources shouldn't use these and let the HCI decide + VIK_DATASOURCE_ADDTOLAYER, // between the create or add to layer options + VIK_DATASOURCE_AUTO_LAYER_MANAGEMENT, + VIK_DATASOURCE_MANUAL_LAYER_MANAGEMENT, +} vik_datasource_mode_t; +/* TODO: replace track/layer? */ -typedef gpointer (*VikDataSourceAddWidgetsFunc) ( GtkWidget *dialog, VikViewport *vvp ); +typedef enum { + VIK_DATASOURCE_INPUTTYPE_NONE = 0, + VIK_DATASOURCE_INPUTTYPE_TRWLAYER, + VIK_DATASOURCE_INPUTTYPE_TRACK, + VIK_DATASOURCE_INPUTTYPE_TRWLAYER_TRACK +} vik_datasource_inputtype_t; -/* if VIK_DATASOURCE_GPSBABEL_DIRECT, babelargs and inputfile. - if VIK_DATASOURCE_SHELL_CMD, shellcmd and inputtype. - set both to NULL to signal refusal (ie already downloading) */ +/** + * VikDataSourceInitFunc: + * + * Returns: pointer to state if OK, otherwise %NULL + */ +typedef gpointer (*VikDataSourceInitFunc) ( acq_vik_t *avt ); -/* returns NULL if OK, otherwise returns an error message. */ +/** + * VikDataSourceCheckExistenceFunc: + * + * Returns: %NULL if OK, otherwise returns an error message. + */ typedef gchar *(*VikDataSourceCheckExistenceFunc) (); -typedef void (*VikDataSourceGetCmdStringFunc) ( gpointer widgets_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype ); -typedef void (*VikDataSourceFirstCleanupFunc) ( gpointer widgets_data ); -typedef void (*VikDataSourceProgressFunc) (gpointer c, gpointer data, acq_dialog_widgets_t *w); -typedef gpointer (*VikDataSourceAddProgressWidgetsFunc) ( GtkWidget *dialog ); -typedef void (*VikDataSourceCleanupFunc) ( gpointer progress_widgets_data ); +/** + * VikDataSourceAddSetupWidgetsFunc: + * + * Create widgets to show in a setup dialog, set up state via user_data. + */ +typedef void (*VikDataSourceAddSetupWidgetsFunc) ( GtkWidget *dialog, VikViewport *vvp, gpointer user_data ); + +/** + * VikDataSourceGetCmdStringFunc: + * @user_data: provided by #VikDataSourceInterface.init_func or dialog with params + * @args: the arguments computed for #VikDataSourceInterface.process_func + * @extra: extra arguments for #VikDataSourceInterface.process_func + * @options: even more options for #VikDataSourceInterface.process_func + * + * set both to %NULL to signal refusal (ie already downloading). + */ +typedef void (*VikDataSourceGetCmdStringFunc) ( gpointer user_data, gchar **args, gchar **extra, gpointer options ); + +typedef void (*VikDataSourceGetCmdStringFuncWithInput) ( gpointer user_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype, const gchar *input_file_name ); +typedef void (*VikDataSourceGetCmdStringFuncWithInputInput) ( gpointer user_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype, const gchar *input_file_name, const gchar *input_track_file_name ); + +/** + * VikDataSourceProcessFunc: + * @vtl: + * @cmd: the arguments computed by #VikDataSourceInterface.get_cmd_string_func + * @extra: the extra arguments computed by #VikDataSourceInterface.get_cmd_string_func + * @status_cb: the #VikDataSourceInterface.progress_func + * @adw: the widgets and data used by #VikDataSourceInterface.progress_func + * @options: more options returned by #VikDataSourceInterface.get_cmd_string_func + * + * The actual function to do stuff - must report success/failure. + */ +typedef gboolean (*VikDataSourceProcessFunc) ( gpointer vtl, const gchar *cmd, const gchar *extra, BabelStatusFunc status_cb, acq_dialog_widgets_t *adw, gpointer options ); +/* */ +typedef void (*VikDataSourceProgressFunc) ( BabelProgressCode c, gpointer data, acq_dialog_widgets_t *w ); + +/** + * VikDataSourceAddProgressWidgetsFunc: + * + * Creates widgets to show in a progress dialog, may set up state via user_data. + */ +typedef void (*VikDataSourceAddProgressWidgetsFunc) ( GtkWidget *dialog, gpointer user_data ); + +/** + * VikDataSourceCleanupFunc: + * + * Frees any widgets created for the setup or progress dialogs, any allocated state, etc. + */ +typedef void (*VikDataSourceCleanupFunc) ( gpointer user_data ); + +typedef void (*VikDataSourceOffFunc) ( gpointer user_data, gchar **babelargs_or_shellcmd, gchar **inputfile_or_inputtype );; + +/** + * VikDataSourceInterface: + * + * Main interface. + */ struct _VikDataSourceInterface { + const gchar *window_title; const gchar *layer_title; - vik_datasource_type_t type; - vik_datasource_type_t mode; + vik_datasource_mode_t mode; + vik_datasource_inputtype_t inputtype; + gboolean autoview; + gboolean keep_dialog_open; /* when done */ + + gboolean is_thread; + + /*** Manual UI Building ***/ + VikDataSourceInitFunc init_func; + VikDataSourceCheckExistenceFunc check_existence_func; + VikDataSourceAddSetupWidgetsFunc add_setup_widgets_func; + /*** ***/ - VikDataSourceCheckExistenceFunc check_existence_func; /* NULL if no first dialog */ - VikDataSourceAddWidgetsFunc add_widgets_func; /* NULL if no first dialog */ - VikDataSourceGetCmdStringFunc get_cmd_string_func; /* passed rv from above */ - VikDataSourceFirstCleanupFunc first_cleanup_func; /* frees rv from addwidgets */ + /* or VikDataSourceGetCmdStringFuncWithInput, if inputtype is not NONE */ + VikDataSourceGetCmdStringFunc get_cmd_string_func; + + VikDataSourceProcessFunc process_func; VikDataSourceProgressFunc progress_func; VikDataSourceAddProgressWidgetsFunc add_progress_widgets_func; VikDataSourceCleanupFunc cleanup_func; + VikDataSourceOffFunc off_func; + + /*** UI Building ***/ + VikLayerParam * params; + guint16 params_count; + VikLayerParamData * params_defaults; + gchar ** params_groups; + guint8 params_groups_count; + }; +/**********************************/ + +void a_acquire ( VikWindow *vw, + VikLayersPanel *vlp, + VikViewport *vvp, + vik_datasource_mode_t mode, + VikDataSourceInterface *source_interface, + gpointer userdata, + VikDataSourceCleanupFunc cleanup_function ); + +GtkWidget *a_acquire_trwlayer_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl); + +GtkWidget *a_acquire_trwlayer_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl); + +GtkWidget *a_acquire_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrack *tr); + +void a_acquire_set_filter_track ( VikTrack *tr ); -void a_acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikDataSourceInterface *interface ); +G_END_DECLS #endif