Corrette maschere e lisbox
git-svn-id: svn://10.65.10.50/trunk@2908 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2a4d1ba45f
commit
c711835274
@ -215,8 +215,6 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
|
|||||||
if (parent == NULL_WIN)
|
if (parent == NULL_WIN)
|
||||||
parent = TASK_WIN;
|
parent = TASK_WIN;
|
||||||
|
|
||||||
const bool normal = dx != 0; // Non e' a tutto schermo
|
|
||||||
|
|
||||||
short left = x * CHARX;
|
short left = x * CHARX;
|
||||||
short top = y * ROWY;
|
short top = y * ROWY;
|
||||||
short width = dx * CHARX;
|
short width = dx * CHARX;
|
||||||
@ -243,7 +241,7 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
|
|||||||
}
|
}
|
||||||
RCT r; xvt_rect_set(&r, left, top, left+width, top+height);
|
RCT r; xvt_rect_set(&r, left, top, left+width, top+height);
|
||||||
|
|
||||||
const WIN_TYPE wt = normal ? W_DOC : W_PLAIN;
|
const WIN_TYPE wt = (dx == 0) ? W_PLAIN : W_DOC;
|
||||||
long wsf = WSF_INVISIBLE | WSF_NO_MENUBAR;
|
long wsf = WSF_INVISIBLE | WSF_NO_MENUBAR;
|
||||||
|
|
||||||
WINDOW win = xvt_win_create(wt, &r, (char*)caption, NULL, parent, wsf,
|
WINDOW win = xvt_win_create(wt, &r, (char*)caption, NULL, parent, wsf,
|
||||||
@ -280,13 +278,12 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
|
|||||||
xi_set_pref(XI_PREF_VERT_PIXEL_SPACING, spacing);
|
xi_set_pref(XI_PREF_VERT_PIXEL_SPACING, spacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (normal)
|
if (dx > 0)
|
||||||
{
|
{
|
||||||
xi_pu_to_fu(itf, (PNT*)&r, 2);
|
xi_pu_to_fu(itf, (PNT*)&r, 2);
|
||||||
r.right = r.left + (dx+1) * XI_FU_MULTIPLE;
|
r.right = r.left + (dx+1) * XI_FU_MULTIPLE;
|
||||||
r.bottom = r.top + (dy+1) * Y_FU_MULTIPLE;
|
r.bottom = r.top + (dy+1) * Y_FU_MULTIPLE;
|
||||||
xi_fu_to_pu(itf, (PNT*)&r, 2);
|
xi_fu_to_pu(itf, (PNT*)&r, 2);
|
||||||
xvt_vobj_translate_points(win, xvt_vobj_get_parent(win), (PNT*)&r, 2);
|
|
||||||
xvt_vobj_move(win, &r);
|
xvt_vobj_move(win, &r);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,7 +456,7 @@ void TControl::set_tab_cid(short cid)
|
|||||||
case XIT_BTN:
|
case XIT_BTN:
|
||||||
_obj->v.btn->tab_cid = cid; break;
|
_obj->v.btn->tab_cid = cid; break;
|
||||||
case XIT_CONTAINER:
|
case XIT_CONTAINER:
|
||||||
_obj->v.container->tab_cid = cid > 1000 ? (cid % 1000) : (1000 + cid);
|
_obj->v.container->tab_cid = _obj->cid;
|
||||||
if (_obj->nbr_children > 0)
|
if (_obj->nbr_children > 0)
|
||||||
_obj->children[_obj->nbr_children-1]->v.btn->tab_cid = cid;
|
_obj->children[_obj->nbr_children-1]->v.btn->tab_cid = cid;
|
||||||
break;
|
break;
|
||||||
@ -486,7 +483,7 @@ TControl& TControl::find_operable_ctl(bool forward) const
|
|||||||
for (int c = first; c != last && obj == NULL; c += delta)
|
for (int c = first; c != last && obj == NULL; c += delta)
|
||||||
{
|
{
|
||||||
const XI_OBJ_TYPE t = child[c]->type;
|
const XI_OBJ_TYPE t = child[c]->type;
|
||||||
if (t == XIT_FORM || t == XIT_LIST || t == XIT_CONTAINER)
|
if (t == XIT_FORM || t == XIT_BTN || t == XIT_LIST || t == XIT_CONTAINER)
|
||||||
obj = child[c];
|
obj = child[c];
|
||||||
}
|
}
|
||||||
TControl* ctl = obj == NULL ? (TControl*)this : (TControl*)xi_get_app_data(obj);
|
TControl* ctl = obj == NULL ? (TControl*)this : (TControl*)xi_get_app_data(obj);
|
||||||
@ -1520,13 +1517,15 @@ void TDropDownList::select(int i, bool force)
|
|||||||
if (force || i != _selected)
|
if (force || i != _selected)
|
||||||
{
|
{
|
||||||
_selected = i;
|
_selected = i;
|
||||||
xi_set_text(_obj, (char*)_values.get(i));
|
|
||||||
|
if (_obj->type == XIT_FIELD)
|
||||||
if (!_in_cell)
|
|
||||||
{
|
{
|
||||||
|
xi_set_text(_obj, (char*)_values.get(i));
|
||||||
TListbox_control* listbox = (TListbox_control *)xi_get_app_data(_obj);
|
TListbox_control* listbox = (TListbox_control *)xi_get_app_data(_obj);
|
||||||
listbox->notify_key(K_SPACE);
|
listbox->notify_key(K_SPACE);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
xi_set_text(_obj, (char*)_codes.get(i));
|
||||||
|
|
||||||
if (is_open())
|
if (is_open())
|
||||||
{
|
{
|
||||||
@ -1571,9 +1570,9 @@ void TDropDownList::select_by_ofs(int i)
|
|||||||
select(i);
|
select(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
TDropDownList::TDropDownList(XI_OBJ* o, const char* values, int width, bool cell)
|
TDropDownList::TDropDownList(XI_OBJ* o, const char* codes, const char* values, int width)
|
||||||
: _obj(o), _values(values), _open(FALSE), _xi_lst(NULL), _width(width),
|
: _obj(o), _values(values), _open(FALSE), _xi_lst(NULL), _width(width),
|
||||||
_displayed(FALSE), _in_cell(cell), _selected(0)
|
_displayed(FALSE), _selected(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void TDropDownList::open()
|
void TDropDownList::open()
|
||||||
@ -1718,11 +1717,10 @@ bool TListbox_control::event_handler(XI_OBJ* itf, XI_EVENT* xiev)
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TListbox_control::set_values(const char* val)
|
void TListbox_control::set_values(const char* cod, const char* val)
|
||||||
{
|
{
|
||||||
_values = val;
|
_ddl->set_values(cod, val);
|
||||||
_ddl->set_values(val);
|
if (selected() >= items())
|
||||||
if (selected() >= _values.items())
|
|
||||||
_ddl->select(0, TRUE);
|
_ddl->select(0, TRUE);
|
||||||
else
|
else
|
||||||
_ddl->select(selected(), TRUE);
|
_ddl->select(selected(), TRUE);
|
||||||
@ -1730,11 +1728,11 @@ void TListbox_control::set_values(const char* val)
|
|||||||
|
|
||||||
TListbox_control::TListbox_control(WINDOW win, short cid,
|
TListbox_control::TListbox_control(WINDOW win, short cid,
|
||||||
short left, short top, short width,
|
short left, short top, short width,
|
||||||
const char* flags, const char* text, const char* values)
|
const char* flags, const char* text,
|
||||||
: TField_control(), _values(values)
|
const char* codes, const char* values)
|
||||||
{
|
{
|
||||||
create(win, cid, left, top, width , 1, width, flags, text, TRUE);
|
create(win, cid, left, top, width , 1, width, flags, text, TRUE);
|
||||||
_ddl = new TDropDownList(_obj, _values, width);
|
_ddl = new TDropDownList(_obj, codes, values, width);
|
||||||
_ddl->select(0, TRUE);
|
_ddl->select(0, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,10 +265,12 @@ public:
|
|||||||
|
|
||||||
class TDropDownList : public TObject
|
class TDropDownList : public TObject
|
||||||
{
|
{
|
||||||
|
|
||||||
XI_OBJ* _obj;
|
XI_OBJ* _obj;
|
||||||
XI_OBJ* _xi_lst;
|
XI_OBJ* _xi_lst;
|
||||||
|
|
||||||
|
TToken_string _codes;
|
||||||
TToken_string _values;
|
TToken_string _values;
|
||||||
|
|
||||||
int _selected;
|
int _selected;
|
||||||
int _width;
|
int _width;
|
||||||
bool _open;
|
bool _open;
|
||||||
@ -291,9 +293,12 @@ public:
|
|||||||
long row2rec(int) const;
|
long row2rec(int) const;
|
||||||
int rec2row(long rec) const;
|
int rec2row(long rec) const;
|
||||||
void select(int i, bool force = FALSE);
|
void select(int i, bool force = FALSE);
|
||||||
void set_values(const char* v) { _values = v; _selected = 0; }
|
void set_values(const char* c, const char* v) { _codes = c; _values = v; }
|
||||||
|
|
||||||
TDropDownList(XI_OBJ* o, const char* values, int wid, bool cell = FALSE);
|
TToken_string& codes() { return _codes; }
|
||||||
|
TToken_string& values() { return _values; }
|
||||||
|
|
||||||
|
TDropDownList(XI_OBJ* o, const char* codes, const char* values, int wid);
|
||||||
virtual ~TDropDownList() {}
|
virtual ~TDropDownList() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -301,7 +306,6 @@ class TListbox_control : public TField_control
|
|||||||
{
|
{
|
||||||
friend class TDropDownList;
|
friend class TDropDownList;
|
||||||
TDropDownList* _ddl;
|
TDropDownList* _ddl;
|
||||||
TToken_string _values;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void drop_down();
|
void drop_down();
|
||||||
@ -310,8 +314,8 @@ protected: // TTField_control
|
|||||||
virtual bool event_handler(XI_OBJ* itf, XI_EVENT* xiev);
|
virtual bool event_handler(XI_OBJ* itf, XI_EVENT* xiev);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_values(const char* c);
|
void set_values(const char* c, const char* v);
|
||||||
int items() const { return _values.items(); }
|
int items() const { return _ddl->items(); }
|
||||||
void select(int i) { _ddl->select(i); }
|
void select(int i) { _ddl->select(i); }
|
||||||
void select_by_initial(char c) { _ddl->select_by_initial(c); }
|
void select_by_initial(char c) { _ddl->select_by_initial(c); }
|
||||||
void select_by_ofs(int i) { _ddl->select_by_ofs(i); }
|
void select_by_ofs(int i) { _ddl->select_by_ofs(i); }
|
||||||
@ -319,7 +323,8 @@ public:
|
|||||||
|
|
||||||
TListbox_control(WINDOW win, short cid,
|
TListbox_control(WINDOW win, short cid,
|
||||||
short left, short top, short width,
|
short left, short top, short width,
|
||||||
const char* flags, const char* text, const char* values);
|
const char* flags, const char* text,
|
||||||
|
const char* codes, const char* values);
|
||||||
virtual ~TListbox_control();
|
virtual ~TListbox_control();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3448,7 +3448,7 @@ void TList_field::add_item(
|
|||||||
{
|
{
|
||||||
_codes.add(item);
|
_codes.add(item);
|
||||||
_values.add(t.get());
|
_values.add(t.get());
|
||||||
((TListbox_control*)_ctl)->set_values(_values);
|
((TListbox_control*)_ctl)->set_values(_codes, _values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3462,7 +3462,7 @@ void TList_field::delete_item(const char* s)
|
|||||||
{
|
{
|
||||||
_codes.destroy(pos);
|
_codes.destroy(pos);
|
||||||
_values.destroy(pos);
|
_values.destroy(pos);
|
||||||
((TListbox_control*)_ctl)->set_values(_values);
|
((TListbox_control*)_ctl)->set_values(_codes, _values);
|
||||||
|
|
||||||
if (pos == current())
|
if (pos == current())
|
||||||
{
|
{
|
||||||
@ -3498,7 +3498,7 @@ void TList_field::add_list()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
((TListbox_control*)_ctl)->set_values(_values);
|
((TListbox_control*)_ctl)->set_values(_codes, _values);
|
||||||
|
|
||||||
if (roman() && automagic())
|
if (roman() && automagic())
|
||||||
{
|
{
|
||||||
@ -3517,7 +3517,13 @@ const char* TList_field::win2raw(const char* data) const
|
|||||||
TToken_string& value = ((TList_field*)this)->_values;
|
TToken_string& value = ((TList_field*)this)->_values;
|
||||||
|
|
||||||
_ctl_data._park = data; // data puo' venire da una TToken_string::get
|
_ctl_data._park = data; // data puo' venire da una TToken_string::get
|
||||||
int pos = value.get_pos(_ctl_data._park);
|
int pos = 0;
|
||||||
|
|
||||||
|
if (_ctl_data._park.len() > 2) // E' veramente una descrizione
|
||||||
|
pos = value.get_pos(_ctl_data._park);
|
||||||
|
else // Oppure e' un codice
|
||||||
|
pos = codes.get_pos(_ctl_data._park);
|
||||||
|
|
||||||
if (pos < 0 && _ctl_data._park.blank())
|
if (pos < 0 && _ctl_data._park.blank())
|
||||||
{
|
{
|
||||||
_ctl_data._park = codes.get(0); // Uso codes come riferimento per blank
|
_ctl_data._park = codes.get(0); // Uso codes come riferimento per blank
|
||||||
@ -3587,7 +3593,8 @@ void TList_field::create(WINDOW parent)
|
|||||||
_ctl = new TListbox_control(parent, _ctl_data._dlg,
|
_ctl = new TListbox_control(parent, _ctl_data._dlg,
|
||||||
_ctl_data._x, _ctl_data._y,
|
_ctl_data._x, _ctl_data._y,
|
||||||
_ctl_data._width,
|
_ctl_data._width,
|
||||||
_ctl_data._flags, _ctl_data._prompt, _values);
|
_ctl_data._flags, _ctl_data._prompt,
|
||||||
|
_codes, _values);
|
||||||
add_list();
|
add_list();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1176,7 +1176,10 @@ public:
|
|||||||
|
|
||||||
// @cmember Scrive il valore del campo direttamente dalla finestra del controllo
|
// @cmember Scrive il valore del campo direttamente dalla finestra del controllo
|
||||||
virtual void set(const char* data);
|
virtual void set(const char* data);
|
||||||
|
|
||||||
|
// @cmember Ritorna la tokenstring dei codici ammessi
|
||||||
|
const char* get_codes() const { return _values; }
|
||||||
|
|
||||||
// @cmember Ritorna la tokenstring dei valori ammessi
|
// @cmember Ritorna la tokenstring dei valori ammessi
|
||||||
const char* get_values() const { return _values; }
|
const char* get_values() const { return _values; }
|
||||||
|
|
||||||
|
@ -265,8 +265,8 @@ TSpreadsheet::TSpreadsheet(
|
|||||||
|
|
||||||
TString testa(h);
|
TString testa(h);
|
||||||
const int at = testa.find('@');
|
const int at = testa.find('@');
|
||||||
const int m = f->size(); // Memory width
|
int m = f->size(); // Memory width
|
||||||
int v = m; // Video width
|
int v = m; // Video width
|
||||||
if (at >= 0)
|
if (at >= 0)
|
||||||
{
|
{
|
||||||
const TString& wi = testa.mid(at+1);
|
const TString& wi = testa.mid(at+1);
|
||||||
@ -278,6 +278,9 @@ TSpreadsheet::TSpreadsheet(
|
|||||||
}
|
}
|
||||||
testa.cut(at);
|
testa.cut(at);
|
||||||
v = max(at, v+(f->has_query_button() ? 1 : 0));
|
v = max(at, v+(f->has_query_button() ? 1 : 0));
|
||||||
|
|
||||||
|
if (v < m && f->is_kind_of(CLASS_LIST_FIELD))
|
||||||
|
m = 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -766,6 +769,8 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
case XIE_CELL_REQUEST:
|
case XIE_CELL_REQUEST:
|
||||||
{
|
{
|
||||||
const int rec = (int)xiev->v.cell_request.rec;
|
const int rec = (int)xiev->v.cell_request.rec;
|
||||||
|
const int maxlen = xiev->v.cell_request.len;
|
||||||
|
|
||||||
const char* src = NULL;
|
const char* src = NULL;
|
||||||
int nm;
|
int nm;
|
||||||
XI_OBJ** obj = xi_get_member_list(xiev->v.cell_request.list, &nm);
|
XI_OBJ** obj = xi_get_member_list(xiev->v.cell_request.list, &nm);
|
||||||
@ -783,7 +788,12 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
const TEditable_field* e = (const TEditable_field*)f;
|
const TEditable_field* e = (const TEditable_field*)f;
|
||||||
src = row(rec).get(col); // Set value for cell
|
src = row(rec).get(col); // Set value for cell
|
||||||
if (src && *src)
|
if (src && *src)
|
||||||
src = e->raw2win(src); // Get formatted string
|
{
|
||||||
|
if (maxlen <= 3 && e->is_kind_of(CLASS_LIST_FIELD))
|
||||||
|
/* src = src */; // Leave code as is
|
||||||
|
else
|
||||||
|
src = e->raw2win(src); // Get formatted string
|
||||||
|
}
|
||||||
|
|
||||||
if (cell_disabled(rec, col))
|
if (cell_disabled(rec, col))
|
||||||
xiev->v.cell_request.back_color = DISABLED_BACK_COLOR;
|
xiev->v.cell_request.back_color = DISABLED_BACK_COLOR;
|
||||||
@ -804,9 +814,8 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
char* dst = xiev->v.cell_request.s;
|
char* dst = xiev->v.cell_request.s;
|
||||||
if (src && *src)
|
if (src && *src)
|
||||||
{
|
{
|
||||||
const int len = xiev->v.cell_request.len;
|
strncpy(dst, src, maxlen);
|
||||||
strncpy(dst, src, len);
|
dst[maxlen-1] = '\0';
|
||||||
dst[len-1] = '\0';
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
*dst = '\0';
|
*dst = '\0';
|
||||||
@ -1032,7 +1041,7 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, _cur_row, _cur_col);
|
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, _cur_row, _cur_col);
|
||||||
// droppa giu'
|
// droppa giu'
|
||||||
TList_field& lst = (TList_field&)(*_edit_field);
|
TList_field& lst = (TList_field&)(*_edit_field);
|
||||||
TDropDownList ddl(&cell, lst.get_values(), lst.size(), TRUE);
|
TDropDownList ddl(&cell, lst.get_codes(), lst.get_values(), lst.size());
|
||||||
ddl.open();
|
ddl.open();
|
||||||
while (ddl.is_open())
|
while (ddl.is_open())
|
||||||
do_events();
|
do_events();
|
||||||
@ -1093,27 +1102,22 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
refused = TRUE;
|
refused = TRUE;
|
||||||
beep();
|
beep();
|
||||||
}
|
}
|
||||||
else if(_edit_field->is_kind_of(CLASS_LIST_FIELD))
|
else if (_edit_field->is_kind_of(CLASS_LIST_FIELD))
|
||||||
{
|
{
|
||||||
XI_OBJ cell;
|
|
||||||
XI_MAKE_CELL(&cell, _obj, _cur_row, _cur_col);
|
|
||||||
TList_field& lst = ((TList_field&)*_edit_field);
|
TList_field& lst = ((TList_field&)*_edit_field);
|
||||||
|
switch (k)
|
||||||
if (k >= ' ' && k <= 'z')
|
{
|
||||||
{
|
case K_RIGHT:
|
||||||
lst.select_by_initial(k);
|
|
||||||
xi_set_text(&cell, (char*)lst.raw2win(lst.get()));
|
|
||||||
}
|
|
||||||
else if (k == K_RIGHT)
|
|
||||||
{
|
|
||||||
lst.select_next();
|
lst.select_next();
|
||||||
xi_set_text(&cell, (char*)lst.raw2win(lst.get()));
|
break;
|
||||||
}
|
case K_LEFT:
|
||||||
else if (k == K_LEFT)
|
|
||||||
{
|
|
||||||
lst.select_prev();
|
lst.select_prev();
|
||||||
xi_set_text(&cell, (char*)lst.raw2win(lst.get()));
|
break;
|
||||||
}
|
default:
|
||||||
|
if (k >= ' ' && k <= 'z')
|
||||||
|
lst.select_by_initial(k);
|
||||||
|
break;
|
||||||
|
}
|
||||||
refused = TRUE;
|
refused = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user