Aggiunto supporto della versione 4.0e di XI

git-svn-id: svn://10.65.10.50/trunk@5792 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1997-12-24 14:31:01 +00:00
parent 3e793a4cab
commit e74646805d
6 changed files with 129 additions and 53 deletions

View File

@ -34,6 +34,9 @@ typedef struct _stx_data
int cid; int cid;
WINDOW win; WINDOW win;
RCT rct; RCT rct;
#ifdef XI_R4
RCT edit_rct;
#endif
unsigned long attrib; unsigned long attrib;
} STX_DATA; } STX_DATA;
@ -200,7 +203,12 @@ XVT_FNTID xvt_load_default_font()
return font; return font;
} }
#ifdef XI_R4
static byte event_map[XIE_XVT_POST_EVENT+1];
#else
static byte event_map[XIE_POST_NAVIGATION+1]; static byte event_map[XIE_POST_NAVIGATION+1];
#endif
enum event_action { a_ignore, a_xvt, a_xvt_post, a_obj, a_child, a_update, a_select, a_post, a_debug }; enum event_action { a_ignore, a_xvt, a_xvt_post, a_obj, a_child, a_update, a_select, a_post, a_debug };
HIDDEN void set_default_palette(WINDOW win) HIDDEN void set_default_palette(WINDOW win)
@ -267,6 +275,7 @@ void customize_colors()
xi_set_pref(XI_PREF_COLOR_CTRL, MASK_BACK_COLOR); xi_set_pref(XI_PREF_COLOR_CTRL, MASK_BACK_COLOR);
xi_set_pref(XI_PREF_COLOR_DARK, MASK_DARK_COLOR); xi_set_pref(XI_PREF_COLOR_DARK, MASK_DARK_COLOR);
xi_set_pref(XI_PREF_COLOR_DISABLED, DISABLED_COLOR); xi_set_pref(XI_PREF_COLOR_DISABLED, DISABLED_COLOR);
xi_set_pref(XI_PREF_COMBO_ICON, COMBO_ICON);
BTN_BACK_COLOR = colors.get_color("ButtonBack", NULL, -1, BTN_BACK_COLOR); BTN_BACK_COLOR = colors.get_color("ButtonBack", NULL, -1, BTN_BACK_COLOR);
aga_set_pref(AGA_PREF_BTN_COLOR_CTRL, BTN_BACK_COLOR); aga_set_pref(AGA_PREF_BTN_COLOR_CTRL, BTN_BACK_COLOR);
@ -408,7 +417,7 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
CHECK(win, "Can't create an XVT window for an interface"); CHECK(win, "Can't create an XVT window for an interface");
set_default_palette(win); set_default_palette(win);
XI_OBJ_DEF* def = xi_create_itf_def(ITF_CID, xi_event_handler, &r, (char*)caption, (long)msk); XI_OBJ_DEF* def = xi_create_itf_def(ITF_CID, xi_event_handler, (XinRect *) &r, (char*)caption, (long)msk);
CHECK(def, "Can't define an interface"); CHECK(def, "Can't define an interface");
def->v.itf->automatic_back_color = FALSE; def->v.itf->automatic_back_color = FALSE;
@ -426,17 +435,17 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
if (Y_FU_MULTIPLE == 0) if (Y_FU_MULTIPLE == 0)
{ {
RCT max; xvt_vobj_get_client_rect(TASK_WIN, &max); RCT max; xvt_vobj_get_client_rect(TASK_WIN, &max);
xi_pu_to_fu(itf, (PNT*)&max, 2); xi_pu_to_fu(itf, (XinPoint *) &max, 2);
X_FU_MULTIPLE = max.right / 80; X_FU_MULTIPLE = max.right / 80;
Y_FU_MULTIPLE = max.bottom / 25; Y_FU_MULTIPLE = max.bottom / 25;
} }
if (dx > 0) if (dx > 0)
{ {
xi_pu_to_fu(itf, (PNT*)&r, 2); xi_pu_to_fu(itf, (XinPoint *) &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, (XinPoint *) &r, 2);
xvt_vobj_move(win, &r); xvt_vobj_move(win, &r);
} }
@ -449,7 +458,7 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy,
CHECK(obj, "Can't create page rectangle"); CHECK(obj, "Can't create page rectangle");
// Fa coincidere esattamente il rettangolo con la finestra che lo contiene // Fa coincidere esattamente il rettangolo con la finestra che lo contiene
RCT& rect = obj->v.rect->rct; RCT& rect = (RCT &) obj->v.rect->rct;
const int oldy = rect.top; const int oldy = rect.top;
xvt_vobj_get_client_rect(win, &rect); xvt_vobj_get_client_rect(win, &rect);
rect.top = oldy; rect.top = oldy;
@ -468,7 +477,7 @@ void attach_interface(WINDOW win, COLOR back)
xvt_vobj_translate_points(win, wp, (PNT*)&rc, 2); xvt_vobj_translate_points(win, wp, (PNT*)&rc, 2);
char caption[80]; xvt_vobj_get_title(win, caption, 80); char caption[80]; xvt_vobj_get_title(win, caption, 80);
TWindow* parent = (TWindow*)xvt_vobj_get_data(win); TWindow* parent = (TWindow*)xvt_vobj_get_data(win);
XI_OBJ_DEF* def = xi_create_itf_def(ITF_CID, xi_event_handler, &rc, caption, (long)parent); XI_OBJ_DEF* def = xi_create_itf_def(ITF_CID, xi_event_handler, (XinRect *) &rc, caption, (long)parent);
CHECK(def, "Can't define an interface"); CHECK(def, "Can't define an interface");
def->v.itf->automatic_back_color = FALSE; def->v.itf->automatic_back_color = FALSE;
@ -506,7 +515,7 @@ HIDDEN void xi_event_handler(XI_OBJ* itf, XI_EVENT* xiev)
XI_OBJ* b = button[i]; XI_OBJ* b = button[i];
if (b->type == XIT_BTN && b->v.btn->drawable) if (b->type == XIT_BTN && b->v.btn->drawable)
{ {
if (xvt_rect_intersect(NULL, &b->v.btn->rct, &xiev->v.xvte.v.update.rct)) if (xvt_rect_intersect(NULL, (RCT *) &b->v.btn->rct, &xiev->v.xvte.v.update.rct))
{ {
TPushbutton_control* p = (TPushbutton_control*)b->app_data; TPushbutton_control* p = (TPushbutton_control*)b->app_data;
p->update(); p->update();
@ -729,7 +738,7 @@ void TControl::update_tab_cid()
} }
} }
void TControl::coord2rct(WINDOW win, short x, short y, short dx, short dy, XI_RCT& rct) const void TControl::coord2rct(WINDOW win, short x, short y, short dx, short dy, RCT & rct) const
{ {
// Spazio da lasciare prima di toccare i bordi // Spazio da lasciare prima di toccare i bordi
const int X_FU_DELTA = XI_FU_MULTIPLE / 4; const int X_FU_DELTA = XI_FU_MULTIPLE / 4;
@ -747,7 +756,7 @@ void TControl::coord2rct(WINDOW win, short x, short y, short dx, short dy, XI_RC
} }
RCT max; xvt_vobj_get_client_rect(win, &max); RCT max; xvt_vobj_get_client_rect(win, &max);
xi_pu_to_fu(itf, (PNT*)&max, 2); xi_pu_to_fu(itf, (XinPoint *) &max, 2);
const int& MAXX = max.right; const int& MAXX = max.right;
const int& MAXY = max.bottom; const int& MAXY = max.bottom;
@ -809,7 +818,7 @@ void TControl::coord2rct(WINDOW win, short x, short y, short dx, short dy, XI_RC
RCT& TControl::get_rect(RCT& r) const RCT& TControl::get_rect(RCT& r) const
{ {
xi_get_rect(_obj, &r); xi_get_rect(_obj, (XinRect *) &r);
return r; return r;
} }
@ -936,6 +945,7 @@ void TControl::change_attrib(unsigned long mask, bool on, XI_OBJ* obj)
else attr &= ~mask; else attr &= ~mask;
if (attr != old_attr) // C'e' un vero cambiamento d'attributo if (attr != old_attr) // C'e' un vero cambiamento d'attributo
{ {
#ifndef XI_R4
// Se la finestra e' chiusa e il campo e un bottone o e' editabile allora cambia l'attributo // Se la finestra e' chiusa e il campo e un bottone o e' editabile allora cambia l'attributo
// senza ridisegnare il campo, il che provocherebbe problemi di funzionamento degli sheet // senza ridisegnare il campo, il che provocherebbe problemi di funzionamento degli sheet
if (_obj->type == XIT_BTN || _obj->type == XIT_FIELD) if (_obj->type == XIT_BTN || _obj->type == XIT_FIELD)
@ -951,6 +961,7 @@ void TControl::change_attrib(unsigned long mask, bool on, XI_OBJ* obj)
} }
} }
// Usa tranquillamente il metodo ortodosso // Usa tranquillamente il metodo ortodosso
#endif
xi_set_attrib(obj, attr); xi_set_attrib(obj, attr);
} }
} }
@ -1011,11 +1022,11 @@ TText_control::TText_control(WINDOW win, short cid,
if (width <= 0) if (width <= 0)
width = t.len(); width = t.len();
XI_RCT rct; coord2rct(win, left, top, width, height, rct); RCT rct; coord2rct(win, left, top, width, height, rct);
rct.right += bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE; rct.right += bold ? (width*XI_FU_MULTIPLE/4) : XI_FU_MULTIPLE;
const unsigned long attrib = flags2attr(flags); const unsigned long attrib = flags2attr(flags);
XI_OBJ_DEF* def = xi_add_text_def(NULL, cid, &rct, attrib, (char*)(const char*)t); XI_OBJ_DEF* def = xi_add_text_def(NULL, cid, (XinRect *) &rct, attrib, (char*)(const char*)t);
CHECKS(def, "Can't create the definition of TText_control:", text); CHECKS(def, "Can't create the definition of TText_control:", text);
def->v.text->fore_color = color; def->v.text->fore_color = color;
if (bold) if (bold)
@ -1035,13 +1046,22 @@ void TText_control::set_caption(const char* text)
xi_set_text(_obj, (char*)c); xi_set_text(_obj, (char*)c);
_obj->v.text->fore_color = color; _obj->v.text->fore_color = color;
#ifdef XI_R4
XinFont * &f = _obj->v.text->font;
if (bold && f == NULL)
XinFontCopy(&f, xi_get_system_font());
if (f != NULL && XinFontBoldGet(f) != bold)
XinFontBoldSet(f, bold);
#else
FONT_OBJ* &font = _obj->v.text->font; FONT_OBJ* &font = _obj->v.text->font;
if (font == NULL) if (font == NULL)
font = (FONT_OBJ*)xi_tree_malloc(sizeof(FONT_OBJ), _obj->v.text); font = (FONT_OBJ*)xi_tree_malloc(sizeof(FONT_OBJ), _obj->v.text);
*font = xi_create_copy_font_id(get_interface(), xvt_default_font(bold), NULL); *font = xi_create_copy_font_id(get_interface(), xvt_default_font(bold), NULL);
RCT rct; get_rect(rct); RCT rct; get_rect(rct);
xi_invalidate_rect(parent(), &rct); xi_invalidate_rect(parent(), (XinRect *) &rct);
#endif
} }
@ -1055,14 +1075,14 @@ TGroupbox_control::TGroupbox_control(WINDOW win, short cid,
: TText_control(win, cid, left, top, width, 1, flags, text) : TText_control(win, cid, left, top, width, 1, flags, text)
{ {
// Alza di un pixel il rettangolo per non coprire il rettangolo // Alza di un pixel il rettangolo per non coprire il rettangolo
RCT& tr = _obj->v.text->rct; RCT& tr = (RCT &) _obj->v.text->rct;
tr.top--; tr.bottom--; tr.top--; tr.bottom--;
XI_RCT rct; coord2rct(win, left, top, width, height, rct); RCT rct; coord2rct(win, left, top, width, height, rct);
rct.top += XI_FU_MULTIPLE - 2; rct.top += XI_FU_MULTIPLE - 2;
rct.bottom -= Y_FU_MULTIPLE / 2; rct.bottom -= Y_FU_MULTIPLE / 2;
XI_OBJ_DEF* def = xi_add_rect_def(NULL, cid, &rct, XI_ATR_VISIBLE, 0, 0); // Ignore colors XI_OBJ_DEF* def = xi_add_rect_def(NULL, cid, (XinRect *) &rct, XI_ATR_VISIBLE, 0, 0); // Ignore colors
CHECKS(def, "Can't create the definition of TGroupbox_control ", text); CHECKS(def, "Can't create the definition of TGroupbox_control ", text);
def->v.rect->hilight_color = MASK_LIGHT_COLOR; def->v.rect->hilight_color = MASK_LIGHT_COLOR;
def->v.rect->back_color = MASK_BACK_COLOR; def->v.rect->back_color = MASK_BACK_COLOR;
@ -1077,7 +1097,7 @@ TGroupbox_control::TGroupbox_control(WINDOW win, short cid,
_rct = xi_create(get_interface(win), def); _rct = xi_create(get_interface(win), def);
CHECKD(_rct, "Can't create Groupbox_control ", cid); CHECKD(_rct, "Can't create Groupbox_control ", cid);
RCT& rt = _obj->v.text->rct; RCT& rt = (RCT &) _obj->v.text->rct;
rt.top--; rt.bottom--; rt.top--; rt.bottom--;
xi_dequeue(); xi_dequeue();
@ -1114,7 +1134,7 @@ void TField_control::create(WINDOW win, short cid,
XI_OBJ_DEF* frm_def = xi_add_form_def(NULL, fcid, fcid); XI_OBJ_DEF* frm_def = xi_add_form_def(NULL, fcid, fcid);
frm_def->app_data = (long)this; frm_def->app_data = (long)this;
XI_RCT rct; coord2rct(win, left, top, width, height, rct); RCT rct; coord2rct(win, left, top, width, height, rct);
rct.right += XI_FU_MULTIPLE/4; rct.right += XI_FU_MULTIPLE/4;
unsigned long attrib = flags2attr(flags); unsigned long attrib = flags2attr(flags);
@ -1144,7 +1164,12 @@ void TField_control::create(WINDOW win, short cid,
f->pixel_button_distance = 1; f->pixel_button_distance = 1;
} }
if (height != 1) // E' un multiline, quindi setto il rettangolo if (height != 1) // E' un multiline, quindi setto il rettangolo
f->xi_rct = rct; {
f->xi_rct.top = rct.top;
f->xi_rct.bottom = rct.bottom;
f->xi_rct.right = rct.right;
f->xi_rct.left = rct.left;
}
XI_OBJ* itf = get_interface(win); XI_OBJ* itf = get_interface(win);
XI_OBJ* form = xi_create(itf, frm_def); XI_OBJ* form = xi_create(itf, frm_def);
@ -1155,7 +1180,7 @@ void TField_control::create(WINDOW win, short cid,
CHECKD(stx, "NULL stx for field ", cid); CHECKD(stx, "NULL stx for field ", cid);
// Aggiusta il rettangolo del bottone in modo da allinearlo al testo // Aggiusta il rettangolo del bottone in modo da allinearlo al testo
RCT& br = _obj->v.field->btn_rct; RCT& br = (RCT &) _obj->v.field->btn_rct;
const int offset = stx->rct.right - br.left - 1; const int offset = stx->rct.right - br.left - 1;
br.left += offset; br.left += offset;
br.right += offset; br.right += offset;
@ -1180,7 +1205,10 @@ void TField_control::show_button(bool on)
void TField_control::set_rect(const RCT& r) void TField_control::set_rect(const RCT& r)
{ {
_obj->v.field->rct = r; _obj->v.field->rct.top = r.top;
_obj->v.field->rct.bottom = r.bottom;
_obj->v.field->rct.right = r.right;
_obj->v.field->rct.left = r.left;
} }
bool TField_control::read_only() const bool TField_control::read_only() const
@ -1270,7 +1298,7 @@ void TButton_control::create(WINDOW win, short cid,
RCT rct; coord2rct(win, left, top, width, height, rct); RCT rct; coord2rct(win, left, top, width, height, rct);
const unsigned long attrib = flags2attr(flags); const unsigned long attrib = flags2attr(flags);
XI_OBJ_DEF* def = xi_add_button_def(NULL, cid, &rct, attrib, (char*)t, cid); XI_OBJ_DEF* def = xi_add_button_def(NULL, cid, (XinRect *) &rct, attrib, (char*)t, cid);
CHECKD(def, "Can't create the interface of TButton_control ", cid); CHECKD(def, "Can't create the interface of TButton_control ", cid);
def->v.btn->fore_color = color; def->v.btn->fore_color = color;
def->app_data = (long)this; def->app_data = (long)this;
@ -1290,7 +1318,7 @@ void TButton_control::create(WINDOW win, short cid,
// Aggiusta bottoni con icona a sinistra // Aggiusta bottoni con icona a sinistra
if (wc == WC_CHECKBOX || wc == WC_RADIOBUTTON) if (wc == WC_CHECKBOX || wc == WC_RADIOBUTTON)
{ {
RCT& r = _obj->v.btn->rct; RCT& r = (RCT &) _obj->v.btn->rct;
r.top++; r.bottom-=2; r.top++; r.bottom-=2;
r.right += XI_FU_MULTIPLE / 2; r.right += XI_FU_MULTIPLE / 2;
} }
@ -1330,7 +1358,10 @@ bool TButton_control::toggle()
void TButton_control::set_rect(const RCT& r) void TButton_control::set_rect(const RCT& r)
{ {
_obj->v.btn->rct = r; _obj->v.btn->rct.top = r.top;
_obj->v.btn->rct.bottom = r.bottom;
_obj->v.btn->rct.left = r.left;
_obj->v.btn->rct.right = r.right;
} }
bool TButton_control::event_handler(XI_OBJ* itf, XI_EVENT* xiev) bool TButton_control::event_handler(XI_OBJ* itf, XI_EVENT* xiev)
@ -1391,6 +1422,7 @@ TPushbutton_control::TPushbutton_control(WINDOW win, short cid,
create(win, cid, left, top, width, height, flags, text, WC_PUSHBUTTON, NULL); create(win, cid, left, top, width, height, flags, text, WC_PUSHBUTTON, NULL);
_obj->v.btn->drawable = TRUE; _obj->v.btn->drawable = TRUE;
*_obj->v.btn->text = '\0'; *_obj->v.btn->text = '\0';
set_bmp(bmp_up, bmp_dn); set_bmp(bmp_up, bmp_dn);
@ -1431,6 +1463,8 @@ void TPushbutton_control::set_bmp(short bmp_up, short bmp_dn)
{ {
_bmp_up = _bmp_dn = 0; _bmp_up = _bmp_dn = 0;
} }
#ifdef XI_R4
#endif
} }
void TPushbutton_control::update() void TPushbutton_control::update()
@ -1443,7 +1477,7 @@ void TPushbutton_control::update()
if (_hicon) if (_hicon)
{ {
HDC hdc = (HDC)xvt_vobj_get_attr(win, ATTR_NATIVE_GRAPHIC_CONTEXT); HDC hdc = (HDC)xvt_vobj_get_attr(win, ATTR_NATIVE_GRAPHIC_CONTEXT);
const RCT& rct = _obj->v.btn->rct; const RCT& rct = (RCT &) _obj->v.btn->rct;
int x = rct.left + (rct.right - rct.left - 32) / 2; int x = rct.left + (rct.right - rct.left - 32) / 2;
int y = rct.top + (rct.bottom - rct.top - 32) / 2; int y = rct.top + (rct.bottom - rct.top - 32) / 2;
DrawIcon(hdc, x, y, (HICON)_hicon); DrawIcon(hdc, x, y, (HICON)_hicon);
@ -1454,7 +1488,7 @@ void TPushbutton_control::update()
if (bmp > 0) if (bmp > 0)
{ {
const TImage& i = _picture->image(bmp); const TImage& i = _picture->image(bmp);
const RCT& rct = _obj->v.btn->rct; const RCT& rct = (RCT &) _obj->v.btn->rct;
int x = rct.left + (rct.right - rct.left - i.width()) / 2; int x = rct.left + (rct.right - rct.left - i.width()) / 2;
int y = rct.top + (rct.bottom - rct.top - i.height()) / 2; int y = rct.top + (rct.bottom - rct.top - i.height()) / 2;
if (_obj->v.btn->down) if (_obj->v.btn->down)
@ -1462,8 +1496,16 @@ void TPushbutton_control::update()
x += 2; x += 2;
y += 2; y += 2;
} }
#ifdef XI_R4
XinWindow win = xi_get_window(_obj->itf);
xi_set_clip( win, (XinRect *) &rct );
#endif
i.draw(win, x, y); i.draw(win, x, y);
#ifdef XI_R4
xi_set_clip( win, NULL );
#endif
if (!(attrib & XI_ATR_ENABLED)) if (!(attrib & XI_ATR_ENABLED))
{ {
CPEN pen; CPEN pen;
@ -1490,7 +1532,7 @@ void TPushbutton_control::update()
} }
else else
{ {
RCT& r = _obj->v.btn->rct; RCT& r = (RCT &) _obj->v.btn->rct;
xvt_dwin_set_font(win, xvt_default_font()); xvt_dwin_set_font(win, xvt_default_font());
int ascent, descent; int ascent, descent;
@ -1564,7 +1606,7 @@ TRadiobutton_control::TRadiobutton_control(WINDOW win, short cid,
const int tot = testo.items(); const int tot = testo.items();
const XI_CONTAINER_ORIENTATION orient = height == 1 ? XI_STACK_HORIZONTAL : XI_STACK_VERTICAL; const XI_CONTAINER_ORIENTATION orient = height == 1 ? XI_STACK_HORIZONTAL : XI_STACK_VERTICAL;
XI_RCT rct; coord2rct(win, left, top, width, height, rct); RCT rct; coord2rct(win, left, top, width, height, rct);
if (height > 1) if (height > 1)
{ {
@ -1578,7 +1620,7 @@ TRadiobutton_control::TRadiobutton_control(WINDOW win, short cid,
rct.left -= XI_FU_MULTIPLE / 4; rct.left -= XI_FU_MULTIPLE / 4;
rct.right += XI_FU_MULTIPLE / 4; rct.right += XI_FU_MULTIPLE / 4;
} }
XI_OBJ_DEF* def = xi_add_container_def(NULL, cid, &rct, orient, cid); XI_OBJ_DEF* def = xi_add_container_def(NULL, cid, (XinRect *) &rct, orient, cid);
def->app_data = (long)this; def->app_data = (long)this;
const unsigned long attrib = flags2attr(flags); const unsigned long attrib = flags2attr(flags);
@ -1867,8 +1909,10 @@ void TDropDownList::ddl_str_eh(XI_OBJ* itf, XI_EVENT* xiev)
xiev->v.xvte.type == E_MOUSE_UP) xiev->v.xvte.type == E_MOUSE_UP)
{ {
ddl->close(); ddl->close();
#ifndef XI_R4
if (xiev->v.xvte.type == E_FOCUS) if (xiev->v.xvte.type == E_FOCUS)
_button_blocked = TRUE; _button_blocked = TRUE;
#endif
} }
else if (xiev->v.xvte.type == E_CHAR) else if (xiev->v.xvte.type == E_CHAR)
{ {
@ -2031,7 +2075,7 @@ void TDropDownList::open()
ld->single_select = TRUE; ld->single_select = TRUE;
// compute size in pixel of field (with button enclosed) // compute size in pixel of field (with button enclosed)
RCT r; xi_get_rect(_obj, &r); RCT r; xi_get_rect(_obj, (XinRect *) &r);
// Larghezza in pixel dell'edit field // Larghezza in pixel dell'edit field
int len = r.right - r.left; int len = r.right - r.left;
@ -2058,7 +2102,7 @@ void TDropDownList::open()
XI_ATR_VISIBLE|XI_ATR_ENABLED|XI_ATR_READONLY|XI_ATR_SELECTABLE, XI_ATR_VISIBLE|XI_ATR_ENABLED|XI_ATR_READONLY|XI_ATR_SELECTABLE,
0, len, 80, ""); 0, len, 80, "");
RCT l; xi_get_def_rect(lstdef, &l); RCT l; xi_get_def_rect(lstdef, (XinRect *) &l);
PNT p; p.h = r.left; PNT p; p.h = r.left;
WINDOW pwin = xi_get_window(_obj->itf); WINDOW pwin = xi_get_window(_obj->itf);
RCT w; xvt_vobj_get_client_rect(pwin, &w); RCT w; xvt_vobj_get_client_rect(pwin, &w);
@ -2072,7 +2116,7 @@ void TDropDownList::open()
} }
RCT wr; RCT wr;
wr.left = p.h; wr.top = p.v; wr.left = p.h; wr.top = p.v;
xi_get_def_rect(lstdef, &l); xi_get_def_rect(lstdef, (XinRect *) &l);
wr.right = r.right; // wr.left + (l.right - l.left) -1; wr.right = r.right; // wr.left + (l.right - l.left) -1;
wr.bottom = wr.top + l.bottom - l.top; wr.bottom = wr.top + l.bottom - l.top;
const int delta_x = _obj->itf->v.itf->delta_x; const int delta_x = _obj->itf->v.itf->delta_x;
@ -2085,7 +2129,7 @@ void TDropDownList::open()
WINDOW win = xvt_win_create(W_PLAIN, &wr, "", 0, pwin, WSF_NO_MENUBAR, EM_ALL, WINDOW win = xvt_win_create(W_PLAIN, &wr, "", 0, pwin, WSF_NO_MENUBAR, EM_ALL,
(EVENT_HANDLER)xi_event, 0L); (EVENT_HANDLER)xi_event, 0L);
itfdef->v.itf->win = win; itfdef->v.itf->win = win;
itfdef->v.itf->rctp = &wr; itfdef->v.itf->rctp = (XinRect *) &wr;
XI_OBJ* itfobj = xi_create(NULL, itfdef); XI_OBJ* itfobj = xi_create(NULL, itfdef);
xi_tree_free(itfdef); xi_tree_free(itfdef);

View File

@ -13,6 +13,11 @@ class TMask_field; // __MASKFLD_H
#include <xi.h> #include <xi.h>
#endif #endif
#ifndef XI_R4
#define XinRect RCT
#define XinPoint PNT
#endif
void init_controls(); void init_controls();
void free_controls(); void free_controls();
XVT_FNTID xvt_default_font(bool bold = FALSE); XVT_FNTID xvt_default_font(bool bold = FALSE);

View File

@ -509,7 +509,7 @@ void TGolem_field::set_window_data(const char* data)
btn->set_bmp(BMP_OLE, 0); btn->set_bmp(BMP_OLE, 0);
RCT rct; btn->get_rect(rct); RCT rct; btn->get_rect(rct);
xi_invalidate_rect(btn->parent(), &rct); xi_invalidate_rect(btn->parent(), (XinRect *) &rct);
} }
bool TGolem_field::is_editable() const bool TGolem_field::is_editable() const

View File

@ -391,7 +391,11 @@ TSpreadsheet::TSpreadsheet(
listdef->app_data = (long)this; listdef->app_data = (long)this;
XI_LIST_DEF* l = listdef->v.list; XI_LIST_DEF* l = listdef->v.list;
l->width = rct.right - rct.left; l->width = rct.right - rct.left;
#ifdef XI_R4
l->min_heading_height = xi_button_calc_height_font(xi_get_system_font()) * lines_in_header;
#else
l->min_heading_height = xi_button_calc_height_font_id(xvt_default_font()) * lines_in_header; l->min_heading_height = xi_button_calc_height_font_id(xvt_default_font()) * lines_in_header;
#endif
l->sizable_columns = TRUE; l->sizable_columns = TRUE;
l->movable_columns = TRUE; l->movable_columns = TRUE;
l->scroll_bar = TRUE; l->scroll_bar = TRUE;
@ -474,7 +478,7 @@ TSpreadsheet::TSpreadsheet(
XI_OBJ** column = xi_get_member_list(_obj, &num); XI_OBJ** column = xi_get_member_list(_obj, &num);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
{ {
RCT rct; xi_get_rect(column[i], &rct); RCT rct; xi_get_rect(column[i], (XinRect *) &rct);
_default_width[i] = rct.right - rct.left; _default_width[i] = rct.right - rct.left;
} }
} }
@ -1100,6 +1104,13 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
if (_cur_rec >= 0 && _cur_rec < items()) if (_cur_rec >= 0 && _cur_rec < items())
set_focus_cell(_cur_row, _cur_col); set_focus_cell(_cur_row, _cur_col);
} }
else
if (k == K_ESC)
{
XI_OBJ row;
XI_MAKE_ROW(&row, _obj, _cur_row);
xi_cell_request(&row);
}
_check_enabled = TRUE; _check_enabled = TRUE;
} }
break; break;
@ -1193,8 +1204,13 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
_edit_field->set_focusdirty(_cell_dirty = FALSE); _edit_field->set_focusdirty(_cell_dirty = FALSE);
// Azzera il flag di update_pending // Azzera il flag di update_pending
#ifdef XI_R4
XinEvent e; e.type = XinEventPaint;
xi_eh(_obj->itf->v.itf->xin_win, &e);
#else
EVENT e; e.type = E_UPDATE; EVENT e; e.type = E_UPDATE;
xi_eh(_obj->itf->v.itf->xvt_win, &e); xi_eh(_obj->itf->v.itf->xvt_win, &e);
#endif
} }
} }
break; break;
@ -1352,6 +1368,13 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
if (_cur_rec >= 0 && _cur_rec < items()) if (_cur_rec >= 0 && _cur_rec < items())
set_focus_cell(_cur_row, _cur_col); set_focus_cell(_cur_row, _cur_col);
} }
else
if (k == K_ESC)
{
XI_OBJ row;
XI_MAKE_ROW(&row, _obj, _cur_row);
xi_cell_request(&row);
}
_check_enabled = TRUE; _check_enabled = TRUE;
refused = TRUE; refused = TRUE;
} }
@ -1903,7 +1926,7 @@ void TSpreadsheet::save_columns_order() const
for (int i = 0; i < num; i++) // Scorre le colonne for (int i = 0; i < num; i++) // Scorre le colonne
{ {
order.add(column[i]->cid); order.add(column[i]->cid);
RCT rct; xi_get_rect(column[i], &rct); RCT rct; xi_get_rect(column[i], (XinRect *) &rct);
order << ',' << rct.right - rct.left; order << ',' << rct.right - rct.left;
} }
config.set("Browse", order, NULL, TRUE, owner().dlg()); config.set("Browse", order, NULL, TRUE, owner().dlg());
@ -1951,7 +1974,7 @@ void TSpreadsheet::set_columns_order(TToken_string* order)
if (index >= fixed) if (index >= fixed)
xi_move_column(col, index); xi_move_column(col, index);
RCT rct; xi_get_rect(col, &rct); RCT rct; xi_get_rect(col, (XinRect *) &rct);
if (_default_width[index] != rct.right - rct.left) if (_default_width[index] != rct.right - rct.left)
xi_column_set_pixel_width(col, _default_width[index]-offset); xi_column_set_pixel_width(col, _default_width[index]-offset);
} }

View File

@ -123,24 +123,24 @@ void TIndwin::update_bar()
if (CAMPI_SCAVATI) if (CAMPI_SCAVATI)
{ {
// Rettangolo scavato // Rettangolo scavato
xi_draw_3d_rect(w, &r, TRUE, 2, xi_draw_3d_rect(w, (XinRect *) &r, TRUE, 2,
BTN_LIGHT_COLOR, BTN_BACK_COLOR, BTN_DARK_COLOR); BTN_LIGHT_COLOR, BTN_BACK_COLOR, BTN_DARK_COLOR);
b.left += 2; b.right -= 1; b.left += 2; b.right -= 1;
b.top += 2; b.bottom -= 1; b.top += 2; b.bottom -= 1;
// Rettangolo in rilievo // Rettangolo in rilievo
b.right = b.left + int((b.right-b.left)*prc); b.right = b.left + int((b.right-b.left)*prc);
xi_draw_3d_rect(w, &b, FALSE, 2, xi_draw_3d_rect(w, (XinRect *) &b, FALSE, 2,
BTN_LIGHT_COLOR, BTN_BACK_COLOR, BTN_DARK_COLOR); BTN_LIGHT_COLOR, BTN_BACK_COLOR, BTN_DARK_COLOR);
} }
else else
{ {
// Rettangolo in rilievo // Rettangolo in rilievo
b.right = b.left + int((r.right-r.left)*prc); b.right = b.left + int((r.right-r.left)*prc);
xi_draw_3d_rect(w, &b, FALSE, 2, xi_draw_3d_rect(w, (XinRect *) &b, FALSE, 2,
BTN_LIGHT_COLOR, BTN_BACK_COLOR, BTN_DARK_COLOR); BTN_LIGHT_COLOR, BTN_BACK_COLOR, BTN_DARK_COLOR);
// Rettangolo scavato // Rettangolo scavato
b.left = b.right; b.right = r.right; b.left = b.right; b.right = r.right;
xi_draw_3d_rect(w, &b, TRUE, 2, xi_draw_3d_rect(w, (XinRect *) &b, TRUE, 2,
BTN_LIGHT_COLOR, BTN_BACK_COLOR, BTN_DARK_COLOR); BTN_LIGHT_COLOR, BTN_BACK_COLOR, BTN_DARK_COLOR);
} }

View File

@ -182,7 +182,7 @@ TSheet_control::TSheet_control(
} }
// Calcola rettangolo massimo per lo sheet // Calcola rettangolo massimo per lo sheet
XI_RCT rct; coord2rct(parent, x, y, dx, dy, rct); RCT rct; coord2rct(parent, x, y, dx, dy, rct);
rct.right -= 2*XI_FU_MULTIPLE; // toglie scroll-bar rct.right -= 2*XI_FU_MULTIPLE; // toglie scroll-bar
// Controlla se ci sono troppe colonne fisse // Controlla se ci sono troppe colonne fisse
@ -202,7 +202,11 @@ TSheet_control::TSheet_control(
listdef->app_data = (long)this; listdef->app_data = (long)this;
XI_LIST_DEF* l = listdef->v.list; XI_LIST_DEF* l = listdef->v.list;
#ifdef XI_R4
l->min_heading_height = xi_button_calc_height_font(xi_get_system_font()) * lines_in_header;
#else
l->min_heading_height = xi_button_calc_height_font_id(xvt_default_font()) * lines_in_header; l->min_heading_height = xi_button_calc_height_font_id(xvt_default_font()) * lines_in_header;
#endif
l->max_lines_in_cell = lines_in_cell; l->max_lines_in_cell = lines_in_cell;
l->sizable_columns = TRUE; l->sizable_columns = TRUE;
l->movable_columns = TRUE; l->movable_columns = TRUE;
@ -245,7 +249,7 @@ TSheet_control::TSheet_control(
} }
} }
RCT rd; xi_get_def_rect(listdef, &rd); RCT rd; xi_get_def_rect(listdef, (XinRect *) &rd);
if ((rd.right - rd.left) > (rct.right - rct.left)) if ((rd.right - rd.left) > (rct.right - rct.left))
l->width = rct.right - rct.left; l->width = rct.right - rct.left;
@ -258,10 +262,10 @@ TSheet_control::TSheet_control(
// Se la finestra e' troppo grande riducila // Se la finestra e' troppo grande riducila
RCT cli; xvt_vobj_get_client_rect(parent, &cli); RCT cli; xvt_vobj_get_client_rect(parent, &cli);
XI_RCT xc = cli; xi_pu_to_fu(itf, (PNT*)&xc, 2); RCT xc = cli; xi_pu_to_fu(itf, (XinPoint *) &xc, 2);
if (xc.right > 45 * XI_FU_MULTIPLE) // Deve contenere almeno 4 bottoni if (xc.right > 45 * XI_FU_MULTIPLE) // Deve contenere almeno 4 bottoni
{ {
xi_get_rect(_obj, &rct); xi_get_rect(_obj, (XinRect *) &rct);
const int width = rct.right + 2*XI_FU_MULTIPLE; const int width = rct.right + 2*XI_FU_MULTIPLE;
if (width < cli.right) if (width < cli.right)
@ -277,7 +281,7 @@ TSheet_control::TSheet_control(
XI_OBJ** column = xi_get_member_list(_obj, &num); XI_OBJ** column = xi_get_member_list(_obj, &num);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
{ {
RCT rct; xi_get_rect(column[i], &rct); RCT rct; xi_get_rect(column[i], (XinRect *) &rct);
_default_width[i] = rct.right - rct.left; _default_width[i] = rct.right - rct.left;
} }
} }
@ -585,7 +589,7 @@ void TSheet_control::save_columns_order(const TMask_field& field) const
char head[80]; char head[80];
xi_get_text(column[i], head, sizeof(head)); xi_get_text(column[i], head, sizeof(head));
order.add(head); order.add(head);
RCT rct; xi_get_rect(column[i], &rct); RCT rct; xi_get_rect(column[i], (XinRect *) &rct);
order << ',' << rct.right - rct.left; order << ',' << rct.right - rct.left;
} }
config.set("Browse", order, NULL, TRUE, field.dlg()); config.set("Browse", order, NULL, TRUE, field.dlg());
@ -643,7 +647,7 @@ void TSheet_control::set_columns_order(TToken_string* order)
if (col) if (col)
{ {
xi_move_column(col, index); xi_move_column(col, index);
RCT rct; xi_get_rect(col, &rct); RCT rct; xi_get_rect(col, (XinRect *) &rct);
if (_default_width[index] != rct.right - rct.left) if (_default_width[index] != rct.right - rct.left)
xi_column_set_pixel_width(col, _default_width[index]-offset); xi_column_set_pixel_width(col, _default_width[index]-offset);
} }