Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
automask.cpp Corretta espressione condizionale che non si compila bene a 16 bit
maskfld.h    Sostituito set_hotkey con set_exit_key
relapp.cpp   Corretta abilitazione dei bottoni in base ai permessi
sheet.cpp    Corretta gestione bototni Elimina e Nuovo


git-svn-id: svn://10.65.10.50/trunk@7570 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1998-12-16 07:43:32 +00:00
parent 1855e56994
commit d4ca44125c
4 changed files with 135 additions and 39 deletions

View File

@ -63,7 +63,7 @@ TField_event TAutomask::key2event(TMask_field& f, KEY key) const
if (f.is_kind_of(CLASS_BUTTON_FIELD))
fe = fe_button;
else
fe = wm.is_running() ? fe_modify : fe = fe_init;
fe = wm.is_running() ? fe_modify : fe_init;
}
break;
case K_ENTER:

View File

@ -517,7 +517,7 @@ public:
KEY exit_key() const
{ return _exit_key; }
void set_hot_key(KEY k) { _virtual_key = _exit_key = k; }
void set_exit_key(KEY k) { _exit_key = k; }
void set_bmp(short up, short dn);
void set_native_icon(unsigned icon);
@ -632,7 +632,7 @@ public:
void set_warning(const char* w);
const char* get_warning() const;
virtual void show(bool on);
virtual void show(bool on = TRUE);
virtual void set_prompt(const char* p);

View File

@ -207,7 +207,7 @@ void TRelation_application::set_toolbar(bool all)
if (pos >= 0)
{
const int mode = _mask->mode();
bool enabdel = mode != MODE_INS && can_edit;
bool enabdel = (mode == MODE_QUERY) || (mode == MODE_MOD && can_edit);
if (enabdel && mode == MODE_MOD)
{
TRelation& r = *get_relation();
@ -509,19 +509,104 @@ int TRelation_application::delete_mode()
{
TEdit_field& fld = get_search_field();
TBrowse* brw = fld.browse();
brw->do_input(TRUE);
TCursor* cur = brw ? brw->cursor() : NULL;
if (cur)
if (brw)
{
brw->do_input(TRUE);
TCursor& cur = *brw->cursor();
TToken_string head(brw->head());
head.insert("@1|", 0);
TToken_string items(brw->items());
items.insert(" |", 0);
TCursor_sheet sht(cur, items, "Eliminazione", head, 0, 1);
if (sht.run() == K_ENTER)
TPointer_array keys;
int tab1 = 0, tab2 = 0, y = 0;
for (int kf = 0; ; kf++)
{
TEditable_field* e = _mask->get_key_field(1, kf == 0);
if (e)
{
if (e->shown())
{
keys.add(e);
if (e->enabled())
{
const int len = strlen(e->prompt());
if (len > tab1) tab1 = len;
const int size = e->size();
if (size > tab2) tab2 = size;
y++;
}
}
}
else
break;
}
tab1 += 5;
tab2 += tab1+2;
TCursor_sheet sht(&cur, items, "Eliminazione", head, 0x4, y);
y = -1; // Posizione del campo precedente
TString prompt; // Prompt del campo corrente
for(int k = 0; k < keys.items(); k++)
{
TEditable_field& e = (TEditable_field&)keys[k];
if (e.enabled())
{
const short id = 1000+e.dlg();
prompt = "Da "; prompt << e.prompt();
sht.add_static(DLG_NULL, 0, prompt, 1, ++y);
TString16 flags;
if (e.automagic()) flags << 'A';
if (e.roman()) flags << 'M';
if (e.right_justified()) flags << 'R';
if (e.uppercase()) flags << 'U';
if (e.zerofilled()) flags << 'Z';
switch (e.class_id())
{
case CLASS_DATE_FIELD:
sht.add_date(id, 0, "", tab1, y, flags);
sht.add_date(id+1000, 0, "A ", tab2, y, flags);
break;
case CLASS_REAL_FIELD:
sht.add_number(id, 0, "", tab1, y, e.size(), flags);
sht.add_number(id+1000, 0, "A ", tab2, y, e.size(), flags);
break;
default:
sht.add_string(id, 0, "", tab1, y, e.size(), flags);
sht.add_string(id+1000, 0, "A ", tab2, y, e.size(), flags);
break;
}
}
}
int tasto;
while ((tasto = sht.run()) == K_ENTER)
{
TRectype rec_from(cur.file().num()), rec_to(cur.file().num());
for(int k = 0; k < keys.items(); k++)
{
TEditable_field& e = (TEditable_field&)keys[k];
const TFieldref* ref = e.field();
if (ref)
{
const TString& fr = e.enabled() ? sht.get(e.dlg()+1000) : e.get();
ref->write(fr, rec_from);
const TString& to = e.enabled() ? sht.get(e.dlg()+2000) : e.get();
if (to.not_empty()) ref->write(to, rec_to);
}
}
cur.curr() = rec_from;
cur.read();
while (cur.file().status() == NOERR && cur.curr() <= rec_to)
{
sht.check(cur.pos());
++cur;
}
}
if (tasto == K_DEL)
{
long deleting = sht.checked();
if (deleting == 0)
@ -529,22 +614,29 @@ int TRelation_application::delete_mode()
sht.check(sht.selected());
deleting++;
}
TString msg(80);
TString msg;
msg = "Confermate l'eliminazione de";
if (deleting == 1)
msg << "l documento selezionato?";
else
msg << "i " << deleting << " documenti selezionati?";
if (yesno_box(msg))
bool can_delete = yesno_box(msg);
if (can_delete && deleting > 100)
{
msg.insert("ATTENZIONE: ", 0);
can_delete = yesno_box(msg);
}
if (can_delete)
{
TWait_cursor hourglass;
long skipped = 0; // Record non cancellati perche' protetti
cur->freeze(TRUE); // Congelo il cursore altrimenti si riaggiorna troppo
cur.freeze(TRUE); // Congelo il cursore altrimenti si riaggiorna troppo
for (long pos = 0; deleting > 0; pos++)
{
if (sht.checked(pos))
{
*cur = pos;
cur = pos;
brw->do_output();
bool can_delete = FALSE;
if (find(1))
@ -564,7 +656,7 @@ int TRelation_application::delete_mode()
deleting--;
}
}
cur->freeze(FALSE);
cur.freeze(FALSE);
if (skipped > 0)
{
if (skipped == 1)

View File

@ -216,6 +216,7 @@ TSheet_control::TSheet_control(
l->scroll_bar_button = TRUE;
l->white_space_color = MASK_DARK_COLOR;
l->rule_color = MASK_DARK_COLOR;
// Definizione della prima colonna (numero di riga)
const long attr = XI_ATR_VISIBLE | XI_ATR_RJUST | XI_ATR_SELECTABLE;
XI_OBJ_DEF* coldef = xi_add_column_def(listdef, FIRST_FIELD+1000-1, attr, 0,
@ -817,27 +818,30 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
case XIE_SELECT:
if (xiev->v.xi_obj->type == XIT_ROW)
{
int num;
XI_OBJ** column = xi_get_member_list(_obj, &num);
const int col = xiev->v.select.column;
const int row = xiev->v.select.xi_obj->v.row;
const long rec = row2rec(row);
const short cid = column[col]->cid - 1000;
if (cid >= FIRST_FIELD)
{
if (check_enabled())
toggle(rec);
}
else
if (row_enabled(rec))
{
if (_cur_rec == rec)
_sheet->on_key(K_CTRL+'G');
int num;
XI_OBJ** column = xi_get_member_list(_obj, &num);
const int col = xiev->v.select.column;
const short cid = column[col]->cid - 1000;
if (cid >= FIRST_FIELD)
{
if (check_enabled())
toggle(rec);
}
else
{
if (_cur_rec == rec)
_sheet->on_key(K_CTRL+'G');
}
const int c = _type[0] == 'C' ? 2 : 1;
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, c);
xi_set_focus(&cell);
make_current(rec);
}
const int c = _type[0] == 'C' ? 2 : 1;
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, c);
xi_set_focus(&cell);
make_current(rec);
}
refused = TRUE;
break;
@ -945,7 +949,7 @@ TSheet::TSheet(short x, short y, short dx, short dy,
fields_array().add(qf);
_sheet = qf->sheet();
if (!(buttons & 0x10)) add_button(DLG_SELECT, "Selezione", K_ENTER);
if (!(buttons & 0x10)) add_button(DLG_SELECT, "~Selezione", K_ENTER);
if (check_enabled())
{
add_button(DLG_USER, "Tutti", 0);
@ -954,7 +958,7 @@ TSheet::TSheet(short x, short y, short dx, short dy,
if (buttons & 0x01) add_button(DLG_LINK, "~Gestione", K_CTRL+'G');
if (buttons & 0x02) add_button(DLG_NEWREC, "~Nuovo", K_INS, BMP_NEWREC, BMP_NEWRECDN);
if (buttons & 0x04) add_button(DLG_DELREC, "Elimina", K_DEL, BMP_DELREC, BMP_DELRECDN);
if (buttons & 0x04) add_button(DLG_DELREC, "~Elimina", K_DEL, BMP_DELREC, BMP_DELRECDN);
if (buttons & 0x08) add_button(DLG_QUIT, "Fine", K_ESC);
else add_button(DLG_CANCEL, "Annulla", K_ESC);
}
@ -979,7 +983,7 @@ void TSheet::add_button(
{
TButton_field& butt = TMask::add_button(id, 0, caption, 0, -1, 11, 2,
"", bmp_up, bmp_dn);
butt.set_hot_key(key);
butt.set_exit_key(key);
}
void TSheet::repos_buttons() const
@ -1091,9 +1095,9 @@ bool TSheet::on_key(KEY key)
case K_ESC:
stop_run(key);
break;
case K_DEL:
case K_CTRL+'E':
if (items() && id2pos(DLG_DELREC) >= 0)
stop_run(key);
stop_run(K_DEL);
break;
case K_CTRL+'N':
if (id2pos(DLG_NEWREC) >= 0)