diff --git a/include/controls.cpp b/include/controls.cpp index 2271a1f41..db9982d82 100755 --- a/include/controls.cpp +++ b/include/controls.cpp @@ -410,9 +410,10 @@ HIDDEN void xi_event_handler(XI_OBJ* itf, XI_EVENT* xiev) ctl = (TControl*)xi_get_app_data(xiev->v.xi_obj->parent); break; case a_xvt: + if (xiev->v.xvte.type == E_CHAR) { XI_OBJ* fo = xi_get_focus(itf); - if (xiev->v.xvte.type == E_CHAR && fo != NULL && fo->type == XIT_CELL) + if (fo != NULL && fo->type == XIT_CELL) ctl = (TControl*)xi_get_app_data(fo->parent); } break; @@ -481,7 +482,7 @@ void TControl::set_tab_cid(short cid) case XIT_BTN: _obj->v.btn->tab_cid = cid; break; case XIT_CONTAINER: - _obj->v.container->tab_cid = _obj->cid; + _obj->v.container->tab_cid = cid > 1000 ? (cid % 1000) : (1000 + cid); if (_obj->nbr_children > 0) _obj->children[_obj->nbr_children-1]->v.btn->tab_cid = cid; break; @@ -508,7 +509,7 @@ TControl& TControl::find_operable_ctl(bool forward) const for (int c = first; c != last && obj == NULL; c += delta) { const XI_OBJ_TYPE t = child[c]->type; - if (t == XIT_FORM || t == XIT_BTN || t == XIT_LIST || t == XIT_CONTAINER) + if (t == XIT_FORM || t == XIT_LIST || t == XIT_CONTAINER) obj = child[c]; } TControl* ctl = obj == NULL ? (TControl*)this : (TControl*)xi_get_app_data(obj); @@ -1130,10 +1131,10 @@ TPushbutton_control::TPushbutton_control(WINDOW win, short cid, short bmp_up, short bmp_dn) : _bmp_up(bmp_up), _bmp_dn(bmp_dn) -{ +{ if (bmp_up > 0) text = ""; - create(win, cid, left, top, width, height, flags, text, WC_PUSHBUTTON, NULL); + create(win, cid, left, top, width, height, flags, text, WC_PUSHBUTTON, cnt); set_bmp(bmp_up, bmp_dn); } diff --git a/include/sheet.cpp b/include/sheet.cpp index 05a93ffe5..d7e687b36 100755 --- a/include/sheet.cpp +++ b/include/sheet.cpp @@ -224,16 +224,20 @@ TSheet_control::TSheet_control( // Se la finestra e' troppo grande riducila RCT cli; xvt_vobj_get_client_rect(parent, &cli); - xi_get_rect(_obj, &rct); - - if (rct.right < cli.right - 2*XI_FU_MULTIPLE) + XI_RCT xc = cli; xi_pu_to_fu(itf, (PNT*)&xc, 2); + if (xc.right > 45 * XI_FU_MULTIPLE) // Deve contenere almeno 4 bottoni { - const int width = rct.right + 2*XI_FU_MULTIPLE; - cli.left = (cli.right - width) / 2; - cli.right = cli.left + width; - xvt_vobj_translate_points(parent, xvt_vobj_get_parent(parent), (PNT*)&cli, 2); - xvt_vobj_move(parent, &cli); - } + xi_get_rect(_obj, &rct); + + if (rct.right < cli.right - 2*XI_FU_MULTIPLE) + { + const int width = rct.right + 2*XI_FU_MULTIPLE; + cli.left = (cli.right - width) / 2; + cli.right = cli.left + width; + xvt_vobj_translate_points(parent, xvt_vobj_get_parent(parent), (PNT*)&cli, 2); + xvt_vobj_move(parent, &cli); + } + } } void TSheet_control::set_rect(const RCT& r) @@ -309,7 +313,7 @@ void TSheet_control::update(long n) if (scroll_first) xi_scroll(_obj, XI_SCROLL_FIRST); else - xi_scroll_rec(_obj, n, NORMAL_COLOR, XI_ATR_ENABLED | XI_ATR_AUTOSELECT, 0); + xi_scroll_rec(_obj, n, NORMAL_COLOR, XI_ATR_ENABLED, 0); } } @@ -336,7 +340,7 @@ void TSheet_control::make_current(long rec) void TSheet_control::select(long rec) { if (rec >= 0 && rec < items()) - xi_scroll_rec(_obj, rec, FOCUS_COLOR, XI_ATR_ENABLED, 0); + xi_scroll_rec(_obj, rec, NORMAL_COLOR, XI_ATR_ENABLED, 0); make_current(rec); } @@ -349,8 +353,10 @@ void TSheet_control::set_focus_rec(long rec) { select(rec); r = rec2row(rec); - } - XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, r, 1); + } + + const int c = _type[0] == 'C' ? 2 : 1; + XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, r, c); xi_set_focus(&cell); } @@ -496,7 +502,7 @@ 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"; + // if (on) src = "X"; // A volte visualizza la X! } break; case 'M': // Set value for "roman" cell @@ -604,16 +610,16 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev) if (xiev->v.xi_obj->type == XIT_ROW) { int num; - XI_OBJ ** column = xi_get_member_list(_obj, &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); - - if (column[col]->cid >= FIRST_FIELD) + const short cid = column[col]->cid; + if (cid >= FIRST_FIELD) { toggle(rec); - XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, col); +// XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, col); // xi_cell_request(&cell); } else @@ -622,7 +628,8 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev) _sheet->on_key(K_CTRL+'G'); else { - XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row,1); + const int c = _type[0] == 'C' ? 2 : 1; + XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, c); xi_set_focus(&cell); } } @@ -705,9 +712,7 @@ void TSheet::repos_buttons() const if (buttons == 0) c.get_rect(br); buttons++; - } else - if (c.is_edit()) - ((TEdit_field&)c).autoselect(FALSE); + } } RCT wr; xvt_vobj_get_client_rect(win(), &wr);