]> git.street.me.uk Git - andy/viking.git/blobdiff - src/acquire.h
[QA] Rename and correct some map cache variables usage for better understanding.
[andy/viking.git] / src / acquire.h
index db5ca681114eee468f927bbfa46aa4e6e3f65c2e..fb22918fcf18ae0025d5ff5dcec42de1c2135226 100644 (file)
 #ifndef _VIKING_ACQUIRE_H
 #define _VIKING_ACQUIRE_H
 
 #ifndef _VIKING_ACQUIRE_H
 #define _VIKING_ACQUIRE_H
 
-/* global data structure used to expose the progress dialog to the worker thread */
+#include <gtk/gtk.h>
+
+#include "vikwindow.h"
+#include "viklayerspanel.h"
+#include "vikviewport.h"
+#include "babel.h"
+
+G_BEGIN_DECLS
+
+typedef struct _VikDataSourceInterface VikDataSourceInterface;
+
+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;
 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;
+  gboolean running;
+  VikDataSourceInterface *source_interface;
+  gpointer user_data;
 } acq_dialog_widgets_t;
 
 } 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 );
+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) */
-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 );
+/**
+ * VikDataSourceInitFunc:
+ * 
+ * Returns: pointer to state if OK, otherwise %NULL
+ */
+typedef gpointer (*VikDataSourceInitFunc) ( acq_vik_t *avt );
 
 
-typedef struct {
+/**
+ * VikDataSourceCheckExistenceFunc:
+ * 
+ * Returns: %NULL if OK, otherwise returns an error message.
+ */
+typedef gchar *(*VikDataSourceCheckExistenceFunc) ();
+
+/**
+ * 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;
   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;
 
 
-  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 */
+  /*** Manual UI Building ***/
+  VikDataSourceInitFunc init_func;
+  VikDataSourceCheckExistenceFunc check_existence_func;
+  VikDataSourceAddSetupWidgetsFunc add_setup_widgets_func;      
+  /***                    ***/
+
+  /* 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;
 
   VikDataSourceProgressFunc progress_func;
   VikDataSourceAddProgressWidgetsFunc add_progress_widgets_func;
   VikDataSourceCleanupFunc cleanup_func;
-} VikDataSourceInterface;
+  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
 
 #endif