1a1ba5b76a
git-svn-id: svn://10.65.10.50/trunk@929 c028cbd2-c16b-5b4b-a496-9718f37d4682
196 lines
6.8 KiB
C++
Executable File
196 lines
6.8 KiB
C++
Executable File
#ifndef __MASK_H
|
|
#define __MASK_H
|
|
|
|
#ifndef __WINDOW_H
|
|
#include <window.h>
|
|
#endif
|
|
|
|
#ifndef __MASKFLD_H
|
|
#include <maskfld.h>
|
|
#endif
|
|
|
|
#ifndef __REAL_H
|
|
#include <real.h>
|
|
#endif
|
|
|
|
|
|
// @T
|
|
typedef bool (*MASK_HANDLER)(TMask& mask, KEY key);
|
|
enum TMaskmode { NO_MODE, MODE_INS , MODE_MOD ,
|
|
MODE_VIS , MODE_QUERY, MODE_QUERYINS };
|
|
// @END
|
|
|
|
// @C
|
|
// Classe TMask : public TWindow
|
|
// @END
|
|
|
|
class TMask : public TWindow
|
|
{
|
|
// @DPRIV
|
|
enum { MAX_PAGES = 12 }; // Massimo numero di pagine nella maschera
|
|
WINDOW _pagewin[MAX_PAGES+1]; // Windows of the pages
|
|
WINDOW _pagepag[MAX_PAGES]; // Windows of pgup/pgdn
|
|
WINDOW _pagetag[MAX_PAGES]; // Windows of pagetags
|
|
|
|
int _pages; // Number of pages of the mask
|
|
int _page; // Current page
|
|
|
|
TBit_array _enabled; // Are pages enabled
|
|
int _mode; // Mode of the mask
|
|
TArray _field; // Fields in the mask
|
|
|
|
int _first_focus; // First control to have focus
|
|
int _focus; // Control with focus
|
|
int _sheets; // Number of sheets
|
|
|
|
MASK_HANDLER _handler; // User defined key handler
|
|
|
|
TFilename _source_file; // Source file of the mask
|
|
TFilename _workfile; // Name of savefile
|
|
long _lastpos; // last read offset on savefile
|
|
|
|
real _exchange; // Current value exhange
|
|
bool _sheetmask; // Mask owned by a sheet
|
|
|
|
long _total_time, _build_time, _init_time;
|
|
|
|
protected:
|
|
// Ritorna la finestra della pagina corrente (Usare con attenzione)
|
|
WINDOW win() const { return _page == -1 ? NULL_WIN : _pagewin[_page]; }
|
|
WINDOW toolwin() const { return _pagewin[MAX_PAGES]; }
|
|
|
|
int find_field_win(WINDOW win) const; // number of field with window win
|
|
|
|
void set_mask_fields() const; // update screen
|
|
|
|
void load_checks() const; // load checks related fields
|
|
virtual void start_run(); // called when the mask starts to run
|
|
virtual TMask_field* parse_field(TScanner& scanner);
|
|
|
|
void init_mask();
|
|
WINDOW read_page(TScanner& scanner, bool toolbar = FALSE);
|
|
void read_mask(const char* name, int num, int max);
|
|
void add_buttons();
|
|
|
|
int find_parent_page(const TMask_field&) const;
|
|
int find_first_field(WINDOW w, int dir) const;
|
|
int find_active_field(int first, int dir) const;
|
|
bool check_current_page(); // Check all the fields on the current page
|
|
void next_page(int p); // Show next/previous page
|
|
int curr_page() const { return _page; } // Current page number
|
|
|
|
bool test_focus_change(WINDOW w = NULL_WIN);
|
|
void control_handler(EVENT* ep);
|
|
void handler(WINDOW win, EVENT* ep);
|
|
|
|
public:
|
|
// @FPUB
|
|
// crea leggendo descrizione da file .msk
|
|
TMask(const char* name, int num = 0, int max = MAX_PAGES);
|
|
|
|
// crea mask vuota con parametri dati
|
|
TMask(const char* title, int pages, int cols, int rows, int xpos = -1,
|
|
int ypos = -1);
|
|
|
|
virtual ~TMask();
|
|
|
|
const TFilename& source_file() const { return _source_file; }
|
|
|
|
// aggiunta campi a runtime
|
|
WINDOW add_static (short id, int page, const char* prompt, int x, int y,
|
|
const char* flags = "");
|
|
WINDOW add_string (short id, int page, const char* prompt, int x, int y,
|
|
int dim, const char* flags = "", int width = 0);
|
|
WINDOW add_number (short id, int page, const char* prompt, int x, int y,
|
|
int dim, const char* flags = "", int ndec = 0);
|
|
WINDOW add_date (short id, int page, const char* prompt, int x, int y,
|
|
const char* flags = "");
|
|
WINDOW add_button (short id, int page, const char* prompt, int x, int y,
|
|
int dx = 9, int dy = 1, const char* flags = "");
|
|
WINDOW add_radio(short id, int page, const char* prompt, int x, int y,
|
|
int dx, const char* codes, const char* items, const char* flags = "");
|
|
|
|
int fields() const { return _field.items(); }
|
|
int sheets() const { return _sheets; }
|
|
|
|
void set_mode(int m) { _mode = m; }
|
|
int mode() const { return _mode; }
|
|
|
|
void set_exchange(bool show_value, const real& nuo);
|
|
const real& exchange() const { return _exchange; }
|
|
|
|
bool check_fields();
|
|
void get_mask_fields(); // read screen contents
|
|
virtual bool stop_run(KEY key); // called to close the mask
|
|
virtual bool can_be_closed() const;
|
|
|
|
virtual void open();
|
|
virtual void close();
|
|
virtual void activate(bool on = TRUE);
|
|
|
|
int id2pos(short id) const;
|
|
TMask_field& fld(int i) const { return (TMask_field&)_field[i]; } // Ritorna il campo i-esimo della maschera
|
|
TMask_field& field(short id) const; // field with given id
|
|
TEdit_field& efield(short id) const; // edit-field with given id
|
|
|
|
void set(short fld_id, const char* str, bool hit=FALSE);
|
|
void set(short fld_id, long num, bool hit=FALSE);
|
|
const TString& get(short fld_id) const;
|
|
long get_long(short fld_id) const;
|
|
int get_int(short fld_id) const { return (int)get_long(fld_id); }
|
|
bool get_bool(short fld_id) const;
|
|
|
|
int first_focus(short id);
|
|
void set_focus();
|
|
void move_focus_field(int num);
|
|
void set_focus_win(WINDOW win, bool force);
|
|
int focus_field() const { return _focus;}
|
|
|
|
virtual bool on_key(KEY key);
|
|
void on_firm_change();
|
|
|
|
void enable(short fld_id, bool on = TRUE); // Abilita un campo
|
|
void disable(short fld_id) { enable(fld_id, FALSE); }
|
|
void enable_default(short fld_id = -1);
|
|
|
|
void enable_page(byte p, bool on = TRUE);
|
|
void disable_page(byte p) { enable_page(p, FALSE); }
|
|
bool page_enabled(byte p) const;
|
|
|
|
byte num_keys() const;
|
|
void enable_key(byte key, bool on = TRUE);
|
|
void disable_key(byte key) { enable_key(key, FALSE); }
|
|
short get_key_field(byte key, bool first) const;
|
|
bool key_valid(int key) const;
|
|
|
|
void show(short fld_id = -1, bool on = TRUE);
|
|
void hide(short fld_id = -1) { show(fld_id, FALSE); }
|
|
void show_default(short fld_id = -1);
|
|
|
|
void reset(short fld_id = -1);
|
|
void undo(short fld_id = -1);
|
|
|
|
void autoload(const TRelation*);
|
|
void autosave(TRelation*) const;
|
|
|
|
void send_key(KEY key, short id, TMask_field* from = NULL);
|
|
void set_handler(short fld_id, CONTROL_HANDLER handler);
|
|
void set_handler(MASK_HANDLER handler);
|
|
void set_workfile(const char* workfile) { _workfile = workfile; _lastpos = 0L;}
|
|
bool save(bool append = FALSE) const;
|
|
bool load(bool reset = FALSE);
|
|
|
|
short dirty() const; // Ritorna il primo campo dirty
|
|
bool is_sheetmask() const { return _sheetmask; }
|
|
|
|
bool no_mode() const { return _mode == NO_MODE; }
|
|
bool query_mode() const { return _mode == MODE_QUERY || _mode == MODE_QUERYINS; }
|
|
bool edit_mode() const { return _mode == MODE_MOD; }
|
|
bool insert_mode() const { return _mode == MODE_QUERYINS || _mode == MODE_INS; }
|
|
|
|
virtual const char* get_caption() const;
|
|
virtual void set_caption(const char* c);
|
|
};
|
|
|
|
#endif // __MASK_H
|