// ========================================================= //
//                                                           //
//   File      : xfergui.h                                   //
//   Purpose   : GUI to configure transfer sets              //
//                                                           //
//   Coded by Ralf Westram (coder@reallysoft.de) in Apr 19   //
//   http://www.arb-home.de/                                 //
//                                                           //
// ========================================================= //

#ifndef XFERGUI_H
#define XFERGUI_H

#ifndef ARB_STRARRAY_H
#include <arb_strarray.h>
#endif
#ifndef AW_BASE_HXX
#include <aw_base.hxx>
#endif

enum FieldsToScan {
    // bit-flags:
    SCAN_INPUT_FIELDS  = 1, // scan input fields (e.g. from import filter)
    SCAN_OUTPUT_FIELDS = 2, // scan output fields (e.g. from target database)

    // convenience values:
    SCAN_ALL_FIELDS = SCAN_INPUT_FIELDS | SCAN_OUTPUT_FIELDS
};

struct AvailableFieldScanner {
    // allows caller of XFER_select_RuleSet() to provide "available fields" for ruleset definition.
    // call XFER_refresh_available_fields() to trigger field rescan via this interface (e.g. after sth changed on clients side).
    virtual ~AvailableFieldScanner() {}

    // scan available fields:
    virtual void scanFields(StrArray& fields, FieldsToScan whatToScan) const = 0;
    // (you may add "<info messages>" to e.g. show error messages)
};

void XFER_select_RuleSet(AW_window *aww, const char *awar_selected_fts, const AvailableFieldScanner *fieldScanner);
const char *XFER_getFullFTS(const char *name);
void XFER_refresh_available_fields(AW_root *awr, const AvailableFieldScanner *fieldScanner, FieldsToScan whatToScan);

#else
#error xfergui.h included twice
#endif // XFERGUI_H
