controls.cpp Aggiunte alcune righe di debug per tasti freccia

msksheet.cpp    Corretta gestione tasti freccia
relation.cpp    Tolto il maiuscolo dai nomi dei TFieldref


git-svn-id: svn://10.65.10.50/trunk@3522 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1996-09-05 13:29:13 +00:00
parent 8246fd8547
commit 9fd2d09c0b
5 changed files with 87 additions and 36 deletions

@ -513,6 +513,10 @@ HIDDEN void xi_event_handler(XI_OBJ* itf, XI_EVENT* xiev)
XI_OBJ* fo = xi_get_focus(itf);
if (fo != NULL && fo->type == XIT_CELL)
ctl = (TControl*)xi_get_app_data(fo->parent);
#ifdef DBG
if (xiev->v.xvte.v.chr.ch == K_DOWN || xiev->v.xvte.v.chr.ch == K_UP)
break;
#endif
}
break;
default:

@ -2380,12 +2380,14 @@ TRectype::TRectype(int logicnum) : _cod(NULL)
}
_rec = new char [ _length ];
*_tab = '\0';
if( lf_has_memo( _logicnum ) )
init_memo(RECORD_NON_FISICO );
if (_length)
zero();
else
setempty(TRUE);
if( lf_has_memo( _logicnum ) )
init_memo(RECORD_NON_FISICO );
}
TRectype::TRectype(const TBaseisamfile* i): _cod(NULL)
@ -2405,12 +2407,14 @@ TRectype::TRectype(const TBaseisamfile* i): _cod(NULL)
}
*_tab = '\0';
_rec = new char [ _length ];
if( lf_has_memo( _logicnum ) )
init_memo(RECORD_NON_FISICO );
if (_length)
zero();
else
setempty(TRUE);
if( lf_has_memo( _logicnum ) )
init_memo(RECORD_NON_FISICO );
}
@ -2897,7 +2901,7 @@ void TRectype::zero(const char* fieldname)
if (CZeroField((char*) fieldname, rec_des(), _rec) == FIELDERR)
unknown_field(fieldname);
}
if( lf_has_memo( _logicnum ) )
if (has_memo())
init_memo(RECORD_NON_FISICO );
}
@ -2910,8 +2914,8 @@ void TRectype::zero(char c)
if (_cod != NULL)
*_cod = _tab;
if( lf_has_memo( _logicnum ) )
init_memo( RECORD_NON_FISICO );
if (has_memo())
init_memo();
setempty(TRUE);
}
@ -2923,7 +2927,7 @@ TRectype& TRectype::operator =(const TRectype& rec)
CHECK(num() == rec.num(), "Can't assign records of different file");
memcpy(_rec, rec._rec, _length); // Copy contents
if (_memoinfo)
if (has_memo())
{
TTrec r;
r.get(_logicnum);
@ -3110,7 +3114,7 @@ HIDDEN void __putfieldbuff(byte l, byte d, byte t, const char* s, char* recout)
if (recout == NULL) return;
char s2[256];
strcpy(s2, s);
strcpy(s2, s); // We are the world, we are the children!
if (t == _datefld)
{

@ -1,3 +1,16 @@
#define XI_INTERNAL
#include <xi.h>
#ifdef __cplusplus
extern "C" {
#endif
#include <xiutils.h>
#ifdef __cplusplus
}
#endif
#include <colors.h>
#include <controls.h>
#include <keys.h>
@ -570,7 +583,7 @@ int TSpreadsheet::find_enabled_record(int rec, int direction) const
// riga (da 0), colonna (0 = numero, 1 = prima cella, ...)
void TSpreadsheet::set_focus_cell(int riga, int colonna)
{
// xi_set_focus(get_interface());
// xi_set_focus(get_interface());
const int rec = row2rec(riga);
colonna = find_enabled_column(rec, colonna, +1);
@ -587,6 +600,7 @@ void TSpreadsheet::set_focus_cell(int riga, int colonna)
XI_OBJ cell;
XI_MAKE_CELL(&cell, _obj, riga, colonna);
xi_set_focus(&cell);
_edit_field = col2field(_cur_col = colonna);
@ -710,8 +724,11 @@ void TSpreadsheet::update(
if (scroll)
xi_scroll(_obj, XI_SCROLL_FIRST);
else
xi_scroll_rec(_obj, handle[first], NORMAL_COLOR, XI_ATR_ENABLED | XI_ATR_AUTOSELECT, 0);
else
{
const long as = AUTOSELECT ? XI_ATR_AUTOSELECT : 0;
xi_scroll_rec(_obj, handle[first], NORMAL_COLOR, XI_ATR_ENABLED | as, 0);
}
_needs_update = -1; // Clear pending row update
}
@ -985,9 +1002,17 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
case XIE_ON_ROW:
if (_check_enabled)
{
int row = xiev->v.xi_obj->v.row;
int next_rec = row2rec(row);
if (find_enabled_column(next_rec, 1, +1) <= 0)
const int row = xiev->v.xi_obj->v.row; // Riga in cui si sta entrando
int rows; // Numero totale di righe attive
const long* handle = xi_get_list_info(_obj, &rows);
// Calcola il numero del record corrispondente alla riga
const bool exist = row >= 0 && row < rows;
int next_rec = exist ? (int)handle[row] : items()-1;
// Se la riga non esiste o non ha nessuna cella valida abilitata ...
// ... cerca la prossima riga valida e rifiuta l'ingresso in questa
if (!exist || find_enabled_column(next_rec, 1, +1) <= 0)
{
next_rec = find_enabled_record(next_rec, next_rec >= _cur_rec ? +1 : -1);
post_select(next_rec);
@ -1059,6 +1084,10 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
_edit_field = f;
_cur_col = physical_column;
_edit_field->set_focusdirty(_cell_dirty = FALSE);
// Azzera il flag di update_pending
EVENT e; e.type = E_UPDATE;
xi_eh(_obj->itf->v.itf->xvt_win, &e);
}
}
break;
@ -1094,7 +1123,6 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
copy_cell2field();
}
case K_F2:
case K_F3:
case K_F11:
if (_check_enabled && active())
{
@ -1240,11 +1268,21 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
break;
case K_ENTER:
case K_SHIFT+K_ENTER:
if (xi_move_focus(get_interface())) // Test di uscita dalla cella corrente
{
xi_set_focus(_obj); // Riporta il focus sullo sheet
dispatch_e_char(parent(), k == K_ENTER ? K_F3 : K_F4);
refused = TRUE;
{
const int next_rec = find_enabled_record(_cur_rec, k == K_ENTER ? +1 : -1);
if (next_rec >= 0)
{
dispatch_e_char(parent(), k == K_ENTER ? K_DOWN : K_UP);
}
else
{
// if (xi_move_focus(get_interface())) // Test di uscita dalla cella corrente
// {
// xi_set_focus(_obj); // Riporta il focus sullo sheet
dispatch_e_char(parent(), k == K_ENTER ? K_F3 : K_F4);
// }
refused = TRUE;
}
}
break;
case K_ESC:
@ -1332,7 +1370,10 @@ void TSpreadsheet::select(int rec, bool scrollto)
}
if (scrollto)
xi_scroll_rec(_obj, rec, NORMAL_COLOR, XI_ATR_ENABLED | XI_ATR_AUTOSELECT, 0);
{
const long as = AUTOSELECT ? XI_ATR_AUTOSELECT : 0;
xi_scroll_rec(_obj, rec, NORMAL_COLOR, XI_ATR_ENABLED | as, 0);
}
const int row = rec2row(rec);
const bool has_focus = mask().focus_field().dlg() == owner().dlg();

@ -227,8 +227,12 @@ void TRelationdef::print_on(TToken_string& out) const
const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to)
{
TExpression& expr = (TExpression&)_exprs[j];
TString16 name;
for (int k = 0; k < expr.numvar(); k++)
expr.setvar(k, to.get(expr.varname(k)));
{
name = expr.varname(k); name.upper();
expr.setvar(k, to.get(name));
}
const char* val = expr;
@ -236,7 +240,10 @@ const char* TRelationdef::evaluate_expr(int j, const TLocalisamfile& to)
{
TExpression& altexpr = (TExpression&)_altexprs[j];
for (int k = 0; k < expr.numvar(); k++)
altexpr.setvar(k, to.get(altexpr.varname(k)));
{
name = altexpr.varname(k); name.upper();
altexpr.setvar(k, to.get(name));
}
val = altexpr;
}
@ -584,11 +591,6 @@ int TRelation::position_rels(
{
for (int j = 0 ; j < rd._fields.items(); j++) // for each field
{
/*
TExpression& expr = (TExpression&)rd._exprs[j];
for (int k = 0; k < expr.numvar(); k++)
expr.setvar(k, to.get(expr.varname(k)));
*/
const char* expr = rd.evaluate_expr(j, to);
TFieldref& s = (TFieldref&) rd._fields[j];
s.write(expr, from.curr());
@ -1688,7 +1690,6 @@ TFieldref& TFieldref::operator =(
int par = s.find('[', pos); // Cerca la fine del nome del campo
_name = s.sub(pos, par); // Estrae il nome del campo
_name.strip(" "); // Elimina eventuali spazi superflui
_name.upper(); // Converte in maiuscolo il nome del campo
if (par > 0)
{
@ -1737,12 +1738,13 @@ const char* TFieldref::read(const TRectype& rec) const
if (_fileid >= CNF_GENERAL)
{
TToken_string s(_name, '.');
TConfig c(_fileid - CNF_STUDIO, s.get());
TConfig c(_fileid - CNF_STUDIO, s.get(0));
buffer = c.get(s.get());
}
else
{
buffer = rec.get(_name);
{
buffer = _name; buffer.upper();
buffer = rec.get(buffer);
if (_from > 0 || _to > 0)
{
const int l = buffer.len();
@ -1777,7 +1779,9 @@ void TFieldref::write(const char* val, TRectype& rec) const
rec.put(_name, campo);
}
else
{
rec.put(_name, val);
}
}
int TFieldref::len(TRectype &rec) const

@ -512,7 +512,6 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
{
const bool on = checked(rec);
xiev->v.cell_request.icon_rid = on ? ICO_CHECK_ON : ICO_CHECK_OFF;
// if (on) src = "X"; // A volte visualizza la X!
}
break;
case 'M': // Set value for "roman" cell
@ -539,8 +538,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
else
{
xiev->v.cell_request.color = NORMAL_COLOR;
// src = format("%ld", rec+1);
src = "";
// src = format("%ld", rec+1); // Niente piu' numeri di riga!
}
char* dst = xiev->v.cell_request.s;