521 lines
12 KiB
C++
Executable File
521 lines
12 KiB
C++
Executable File
/* $Id: maskfld.h,v 1.1.1.1 1994-08-12 10:51:57 alex Exp $ */
|
|
#ifndef __MASKFLD_H
|
|
#define __MASKFLD_H
|
|
|
|
#ifndef __ARRAY_H
|
|
#include <array.h>
|
|
#endif
|
|
|
|
#ifndef __REAL_H
|
|
#include <real.h>
|
|
#endif
|
|
|
|
#ifndef __SCANNER_H
|
|
#include <scanner.h>
|
|
#endif
|
|
|
|
class TMask_field;
|
|
|
|
class TRelation; // __RELATION_H
|
|
class TCursor;
|
|
class TFieldref;
|
|
|
|
// @T
|
|
typedef bool (*CONTROL_HANDLER)(TMask_field& field, KEY key);
|
|
// @END
|
|
|
|
enum CheckType { CHECK_NONE, CHECK_NORMAL, CHECK_REQUIRED };
|
|
enum CheckTime { RUNNING_CHECK, STARTING_CHECK, FINAL_CHECK };
|
|
|
|
// @C
|
|
// Classe TMask_field : public TObject
|
|
// @END
|
|
|
|
class TMask_field : public TObject
|
|
{
|
|
// @DPRIV
|
|
friend class TMask;
|
|
|
|
TMask* _mask; // The mask the control belongs to
|
|
|
|
TString _help; // Help message
|
|
TFieldref* _field; // Corresponding field on the file
|
|
TBit_array _keys; // The keys the field belongs to
|
|
TBit_array _groups; // The groups the field belongs to
|
|
|
|
protected:
|
|
// @DPROT
|
|
static int _x, _y; // Coordinate of the control
|
|
static int _width; // Size of the control
|
|
static TFixed_string _prompt;// Prompt of the field
|
|
CONTROL_HANDLER _handler;
|
|
|
|
int _size; // Max length of the string
|
|
|
|
WINDOW _win; // Window of the control (not its parent!)
|
|
WINDOW _promptwin; // Prompt of the control
|
|
short _dlg; // Identifier of the control
|
|
|
|
int _validate_func; // Number of validation function
|
|
TArray _validate_parms; // Parameters for validation function
|
|
TArray _message; // Messages to send on modify
|
|
|
|
struct TField_Flags
|
|
{
|
|
bool automagic : 1;
|
|
bool dirty : 1; // Modified during run ?
|
|
bool enabled : 1; // Is editable
|
|
bool enable_default : 1;
|
|
bool firm : 1; // Is the current firm ?
|
|
bool focusdirty : 1; // Modified during focus ?
|
|
bool ghost : 1;
|
|
bool persistent : 1;
|
|
bool rightjust : 1;
|
|
bool roman : 1; // Is a Roman number ?
|
|
bool showed : 1; // Is visible
|
|
bool show_default : 1;
|
|
bool uppercase : 1;
|
|
bool exchange : 1; // Value exchange
|
|
bool zerofilled : 1;
|
|
|
|
TField_Flags();
|
|
char update(const char*);
|
|
} _flags;
|
|
|
|
void construct(TScanner& scanner, WINDOW parent);
|
|
void construct(short id, const char* prompt, int x, int y, int len,
|
|
WINDOW parent, const char* flags = "", int width = 0);
|
|
|
|
virtual WINDOW win() const { return _win; }
|
|
|
|
WINDOW wincreate(WIN_TYPE ct, short dx, short dy,
|
|
const char* title, WINDOW parent, long flags);
|
|
int create_prompt(WINDOW parent, int width = 0, int heigth = 1);
|
|
|
|
long default_flags() const;
|
|
|
|
virtual void parse_head(TScanner& scanner);
|
|
virtual bool parse_item(TScanner& scanner);
|
|
|
|
virtual void create(WINDOW parent);
|
|
virtual void destroy();
|
|
|
|
virtual const char* get_window_data() const;
|
|
virtual void set_window_data(const char* data);
|
|
virtual void set_field_data(const char* data);
|
|
virtual const char* get_field_data() const;
|
|
|
|
bool do_message(int n);
|
|
|
|
public:
|
|
// @FPUB
|
|
short atodlg(const char* s) const;
|
|
|
|
WINDOW parent() const;
|
|
short dlg() const { return _dlg; }
|
|
|
|
virtual bool ok() const;
|
|
|
|
bool dirty() const { return _flags.dirty; }
|
|
bool focusdirty() const { return _flags.focusdirty; }
|
|
void set_focusdirty(bool d = TRUE) { _flags.focusdirty = d; }
|
|
void set_dirty(bool d = TRUE) { _flags.dirty = d; set_focusdirty(d); }
|
|
|
|
virtual const char* class_name() const;
|
|
virtual word class_id() const;
|
|
|
|
int size() const { return _size; }
|
|
|
|
bool roman() const { return _flags.roman; }
|
|
bool automagic() const { return _flags.automagic; }
|
|
bool ghost() const { return _flags.ghost; }
|
|
|
|
virtual bool has_check() const { return FALSE;}
|
|
virtual bool has_query() const { return FALSE;}
|
|
virtual bool has_message() const { return _message.items() > 0; }
|
|
|
|
virtual CheckType check_type() const { return CHECK_NONE; }
|
|
bool required() const { return check_type() == CHECK_REQUIRED; }
|
|
virtual bool check(CheckTime = RUNNING_CHECK) { return TRUE;}
|
|
|
|
virtual void reset();
|
|
|
|
virtual void enable(bool on = TRUE);
|
|
void disable() { enable(FALSE); }
|
|
bool enabled() const { return _flags.enabled; }
|
|
void enable_default();
|
|
|
|
virtual void show(bool on = TRUE);
|
|
void hide() { show(FALSE); }
|
|
bool showed() const { return _flags.showed; }
|
|
void show_default();
|
|
|
|
bool active() const; // Is visible and enabled?
|
|
|
|
void set_handler(CONTROL_HANDLER handler) { _handler = handler; }
|
|
|
|
bool is_edit() const;
|
|
bool to_check(KEY k, bool checkrun = FALSE) const;
|
|
|
|
virtual bool on_hit();
|
|
virtual bool on_key(KEY key);
|
|
|
|
void set(const char* s);
|
|
TString& get() const;
|
|
|
|
virtual const char* picture_data(const char* data, bool video);
|
|
|
|
bool autoload(const TRelation* r = NULL);
|
|
bool autosave(TRelation* r = NULL) const;
|
|
|
|
void undo();
|
|
|
|
const char* prompt() const;
|
|
void set_prompt(const char* p);
|
|
|
|
bool in_key(byte key) const { return _keys[key]; }
|
|
void set_key(byte key) { _keys.set(long(key)); _keys.set(0L);}
|
|
word last_key() const;
|
|
|
|
bool in_group(byte group) const { return _groups[group]; }
|
|
void set_group(byte group) { _groups.set(long(group)); _groups.set(0L);}
|
|
|
|
const TFieldref* field() const { return _field; }
|
|
|
|
void set_focus() const;
|
|
|
|
// set focus, message-box, set focus
|
|
bool message_box(const char* fmt, ...) const;
|
|
bool warning_box(const char* fmt, ...) const;
|
|
bool error_box(const char* fmt, ...) const;
|
|
bool yesno_box(const char* fmt, ...) const;
|
|
KEY yesnocancel_box(const char* fmt, ...) const;
|
|
|
|
TMask& mask() const { return *_mask; }
|
|
TMask_field(TMask* mask);
|
|
virtual ~TMask_field();
|
|
};
|
|
|
|
|
|
// @C
|
|
// Classe TEdit_field : public TMask_field
|
|
//
|
|
// @END
|
|
|
|
class TEdit_field : public TMask_field
|
|
{
|
|
friend class TBrowse;
|
|
friend class TList_sheet;
|
|
|
|
protected:
|
|
// @DPROT
|
|
TString _str;
|
|
TString _picture;
|
|
TString _warning;
|
|
CheckType _check; // Accettabilita' di valori nulli
|
|
bool _forced;
|
|
bool _check_enabled; // Abilitato
|
|
|
|
TBrowse* _browse;
|
|
TList_sheet* _sheet;
|
|
WINDOW _buttonwin;
|
|
|
|
const TBrowse* get_browse(TScanner& scanner) const;
|
|
|
|
virtual word class_id() const;
|
|
virtual void parse_head(TScanner& scanner);
|
|
virtual bool parse_item(TScanner& scanner);
|
|
virtual void show(bool on);
|
|
virtual void enable(bool on);
|
|
|
|
virtual void create(WINDOW parent);
|
|
virtual void destroy();
|
|
|
|
bool validate(KEY k);
|
|
|
|
virtual void set_window_data(const char* data);
|
|
virtual void set_field_data(const char* data);
|
|
virtual const char* get_field_data() const;
|
|
|
|
|
|
public:
|
|
// @FPUB
|
|
virtual bool on_hit();
|
|
virtual bool on_key(KEY key);
|
|
virtual bool has_check() const;
|
|
virtual bool has_query() const { return _browse || _sheet;}
|
|
virtual const char* picture_data(const char* data, bool video);
|
|
virtual CheckType check_type() const { return _check; }
|
|
void check_type(CheckType c) { _check = c; }
|
|
|
|
bool forced() const { return _forced;}
|
|
virtual bool check(CheckTime = RUNNING_CHECK);
|
|
TBrowse* browse() const { return _browse;}
|
|
void enable_check(bool on = TRUE) ;
|
|
bool check_enabled() const { return _check_enabled;}
|
|
|
|
const char* format(const char* data);
|
|
const char* picture() const { return _picture; }
|
|
|
|
TEdit_field(TMask* mask);
|
|
virtual ~TEdit_field();
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// TBrowse
|
|
///////////////////////////////////////////////////////////
|
|
|
|
class TBrowse
|
|
{
|
|
TEdit_field* _fld; // The field owning the sheet
|
|
TRelation* _relation; // Main relation
|
|
TCursor* _cursor; // Cursor on the relation
|
|
TString _insert;
|
|
TString _filter;
|
|
long _rec;
|
|
bool _secondary;
|
|
bool _checked;
|
|
|
|
TToken_string _head, _items;
|
|
TToken_string _inp_id, _inp_fn;
|
|
TToken_string _out_id, _out_fn;
|
|
|
|
protected:
|
|
void do_output(CheckTime = RUNNING_CHECK);
|
|
void do_clear();
|
|
bool do_insert();
|
|
|
|
TMask_field& field(short n) const;
|
|
TToken_string& create_siblings(TToken_string& siblings);
|
|
|
|
public:
|
|
int do_input(bool filter = FALSE); // Serve ai TCursor_sheet
|
|
|
|
TBrowse(TEdit_field* f, TRelation* r, int key = 1, const char* filter = "");
|
|
TBrowse(TEdit_field* f, TCursor* c);
|
|
~TBrowse();
|
|
|
|
void parse_join(TScanner& scanner);
|
|
void parse_input(TScanner& scanner);
|
|
void parse_display(TScanner& scanner);
|
|
void parse_output(TScanner& scanner);
|
|
void parse_insert(TScanner& scanner);
|
|
bool parse_copy(const TString& what, const TBrowse* b);
|
|
|
|
void set_insert(const char* s) { _insert = s;}
|
|
const TString& get_insert() const { return _insert;}
|
|
const TString& get_filter() const { return _filter;}
|
|
|
|
TEdit_field& field() {return *_fld;}
|
|
|
|
bool check(CheckTime = RUNNING_CHECK);
|
|
bool empty_check();
|
|
const TToken_string& head() const { return _head;}
|
|
const TToken_string& items() const { return _items;}
|
|
TCursor* cursor() const { return _cursor;}
|
|
bool checked() const { return _checked;}
|
|
bool secondary() const { return _secondary;}
|
|
|
|
KEY run();
|
|
};
|
|
|
|
|
|
// @C
|
|
// class TReal_field : public TEdit_field
|
|
// @END
|
|
|
|
class TReal_field : public TEdit_field
|
|
{
|
|
int _decimals;
|
|
|
|
protected:
|
|
// @FPROT
|
|
virtual word class_id() const;
|
|
|
|
virtual const char* get_window_data() const;
|
|
virtual void set_window_data(const char* data);
|
|
|
|
virtual void create(WINDOW parent);
|
|
virtual void parse_head(TScanner& scanner);
|
|
virtual bool on_key(KEY key);
|
|
|
|
public:
|
|
// @FPUB
|
|
void set_decimals(int d); // Set precision & picture
|
|
int decimals() const { return _decimals; } // Get precision
|
|
void exchange(const real& o, const real& n); // Change value / o * n
|
|
|
|
TReal_field(TMask* mask);
|
|
};
|
|
|
|
|
|
// @C
|
|
// class TDate_field : public TEdit_field
|
|
//@END
|
|
|
|
class TDate_field : public TEdit_field
|
|
{
|
|
protected:
|
|
// @FPROT
|
|
virtual word class_id() const;
|
|
virtual void create(WINDOW parent);
|
|
virtual bool on_key(KEY key);
|
|
|
|
public:
|
|
// @FPUB
|
|
void parse_head(TScanner& scanner);
|
|
TDate_field(TMask* mask);
|
|
};
|
|
|
|
|
|
// @C
|
|
// class TBoolean_field : public TMask_field
|
|
// @END
|
|
|
|
class TBoolean_field : public TMask_field
|
|
{
|
|
protected:
|
|
// @DPROT
|
|
bool _on;
|
|
|
|
virtual word class_id() const;
|
|
|
|
virtual void create(WINDOW parent);
|
|
virtual const char* get_window_data() const;
|
|
virtual void set_window_data(const char* data);
|
|
virtual void set_field_data(const char* data = NULL);
|
|
virtual const char* get_field_data() const;
|
|
virtual bool parse_item(TScanner& scanner);
|
|
virtual void enable(bool on);
|
|
virtual bool on_hit();
|
|
virtual bool on_key(KEY key);
|
|
|
|
public:
|
|
// @FPUB
|
|
TBoolean_field(TMask* mask);
|
|
};
|
|
|
|
|
|
// @C
|
|
// class TList_field : public TMask_field
|
|
// @END
|
|
|
|
class TList_field : public TMask_field
|
|
{
|
|
// @FPRIV
|
|
void add_list();
|
|
|
|
protected:
|
|
// @FPROT
|
|
TToken_string _values;
|
|
TToken_string _codes;
|
|
TString _str;
|
|
|
|
virtual word class_id() const;
|
|
|
|
virtual void set_window_data(const char* data);
|
|
virtual const char* get_window_data() const;
|
|
virtual void set_field_data(const char* data = NULL);
|
|
virtual const char* get_field_data() const;
|
|
// virtual const char* picture_data(const char* data, bool video);
|
|
|
|
virtual void create(WINDOW parent);
|
|
|
|
virtual void current(int n);
|
|
virtual int current() const;
|
|
|
|
int str2curr(const char* data);
|
|
virtual bool on_hit();
|
|
virtual bool on_key(KEY key);
|
|
virtual void read_item(TScanner& scanner);
|
|
|
|
virtual void parse_head(TScanner& scanner);
|
|
virtual bool parse_item(TScanner& scanner);
|
|
|
|
public:
|
|
// @FPUB
|
|
TList_field(TMask* mask);
|
|
virtual void replace_items(const char* codes, const char* values);
|
|
virtual void add_item(const char* code_value);
|
|
virtual void delete_item(const char* code);
|
|
int items() const;
|
|
};
|
|
|
|
|
|
// @C
|
|
// class TRadio_field : public TList_field
|
|
// @END
|
|
|
|
class TRadio_field : public TList_field
|
|
{
|
|
enum { MAX_RADIO = 8 };
|
|
|
|
// @FPRIV
|
|
int _nitems;
|
|
int _active_item;
|
|
WINDOW _radio_ctl_win[MAX_RADIO];
|
|
|
|
protected:
|
|
// @FPROT
|
|
virtual word class_id() const;
|
|
virtual void create(WINDOW parent);
|
|
virtual void destroy();
|
|
virtual void enable(bool on);
|
|
virtual void show(bool on);
|
|
|
|
virtual void current(int n);
|
|
virtual int current() const;
|
|
WINDOW win() const { return _radio_ctl_win[_active_item]; }
|
|
|
|
public:
|
|
// @FPUB
|
|
TRadio_field(TMask* mask);
|
|
|
|
void check_radiobutton(WINDOW checked);
|
|
bool move_focus(int d);
|
|
};
|
|
|
|
|
|
|
|
// @C
|
|
// class TButton_field : public TMask_field
|
|
// @END
|
|
|
|
class TButton_field : public TMask_field
|
|
{
|
|
protected:
|
|
// @FPROT
|
|
virtual word class_id() const;
|
|
virtual void create(WINDOW parent);
|
|
|
|
void parse_head(TScanner& scanner);
|
|
bool parse_item(TScanner& scanner);
|
|
virtual void enable(bool);
|
|
virtual void show(bool);
|
|
virtual bool on_key(KEY key);
|
|
|
|
public:
|
|
// @FPUB
|
|
TButton_field(TMask* mask);
|
|
};
|
|
|
|
|
|
// @C
|
|
// class TGroup_field : public TMask_field
|
|
// @END
|
|
|
|
class TGroup_field : public TMask_field
|
|
{
|
|
protected:
|
|
// @DPROT
|
|
virtual void parse_head(TScanner& scanner);
|
|
virtual void create(WINDOW parent);
|
|
|
|
public:
|
|
// @FPUB
|
|
TGroup_field(TMask* mask);
|
|
};
|
|
|
|
#endif // __MASKFLD_H
|