diff --git a/include/controls.cpp b/include/controls.cpp index 962ef616a..38773c152 100755 --- a/include/controls.cpp +++ b/include/controls.cpp @@ -184,6 +184,20 @@ HIDDEN XVT_FNTID FAT_FONT = NULL; HIDDEN XVT_FNTID BIG_FONT = NULL; HIDDEN XVT_FNTID BIGFAT_FONT = NULL; +HIDDEN void get_taskwin_size(XinPoint& pnt) +{ + RCT max_rct; xvt_vobj_get_client_rect(TASK_WIN, &max_rct); + pnt.h = max_rct.right; + pnt.v = max_rct.bottom; + + int sbh = xvtil_statbar_height(); + if (sbh <= 0) sbh = 24; + pnt.v -= sbh; // Tolgo lo spazio occupato dalla status bar + pnt.v -= sbh; // Tolgo lo spazio occupato dai tab buttons + pnt.v -= TOOL_SIZE + 8; // Tolgo lo spazio occupato dalle icone della toolbar + pnt.v -= TOOL_TEXT ? 12 : 0; // Tolgo lo spazio occupato dal testo della toolbar +} + bool is_xvt_font(const char * nome_font) { const int max_fonts = 1024; @@ -203,8 +217,6 @@ XVT_FNTID xvtil_default_font(bool bold, bool big) { if (DEF_FONT == NULL) { - RCT pc; xvt_vobj_get_client_rect(TASK_WIN, &pc); - DEF_FONT = xvt_dwin_get_font(TASK_WIN); TConfig font(CONFIG_GUI, "Colors"); @@ -216,7 +228,7 @@ XVT_FNTID xvtil_default_font(bool bold, bool big) if (font_ser_desc.empty()) { const char* name = "Verdana"; - font_ser_desc.format("01\\%s\\0\\10\\WIN01/-13/0/0/0/400/0/0/0/0/1/2/1/49/%s", name, name); + font_ser_desc.format("01\\%s\\0\\8\\WIN01/8/0/0/0/400/0/0/0/0/1/2/1/49/%s", name, name); font.set("FontDesc", font_ser_desc, "Colors", true); // Salva definitivamente il font } @@ -245,23 +257,23 @@ XVT_FNTID xvtil_default_font(bool bold, bool big) xvt_font_map_using_default(BIGFAT_FONT); CHECK(xvt_font_is_mapped(BIGFAT_FONT), "Can't map native font"); - // Compute true text size - ROWY = (pc.bottom - pc.top) / 25; - const int COLX = (pc.right - pc.left) / 80; - - TString str(80, 'M'); - CHARX = xvt_dwin_get_text_width(TASK_WIN, str.get_buffer(), str.size()) / str.size(); - int leading, ascent, descent; xvt_dwin_get_font_metrics(TASK_WIN, &leading, &ascent, &descent); CHARY = ascent + descent + 1; BASEY = ascent; - - if (CHARX > COLX) - CHARX = COLX; + + // Compute suitable text size + XinPoint pnt; get_taskwin_size(pnt); + ROWY = pnt.v / 23; if (CHARY > ROWY-2) CHARY = ROWY-2; + + const int COLX = pnt.h / 80; + TString str(80, 'M'); + CHARX = xvt_dwin_get_text_width(TASK_WIN, str, str.size()) / str.size(); + if (CHARX > COLX) + CHARX = COLX; } XVT_FNTID f = NULL; @@ -494,10 +506,10 @@ HIDDEN void xi_event_handler(XI_OBJ *itf, XI_EVENT *xiev); HIDDEN void init_fu_multiple(XI_OBJ* itf) { - RCT max_rct; xvt_vobj_get_client_rect(TASK_WIN, &max_rct); - xi_pu_to_fu(itf, (XinPoint *) &max_rct, 2); - X_FU_MULTIPLE = max_rct.right / 80; - Y_FU_MULTIPLE = max_rct.bottom / 25; + XinPoint pnt; get_taskwin_size(pnt); + xi_pu_to_fu(itf, &pnt, 1); + X_FU_MULTIPLE = pnt.h / 80; + Y_FU_MULTIPLE = pnt.v / 23; } WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy, @@ -571,7 +583,7 @@ WINDOW create_interface(WINDOW parent, short x, short y, short dx, short dy, xi_dequeue(); xi_tree_free(def); - if (Y_FU_MULTIPLE == 0) + if (Y_FU_MULTIPLE <= 0) init_fu_multiple(itf); if (dx > 0) @@ -895,20 +907,9 @@ void TControl::coord2rct(WINDOW win, short x, short y, short dx, short dy, RCT & XI_OBJ* itf = get_interface(win); - if (Y_FU_MULTIPLE == 0) // Puo' succedere che non sia ancora inizializzato + if (Y_FU_MULTIPLE <= 0) // Puo' succedere che non sia ancora inizializzato init_fu_multiple(itf); -/* OBSOLETE - // Se ci sono i tab controls sulla pagina salta una riga - if (y >= 0) - { - int num; - XI_OBJ** child = xi_get_member_list(itf, &num); - if (num > 0 && child[0]->cid == MASK_RECT_ID) - y++; - } -*/ - RCT max_rct; xvt_vobj_get_client_rect(win, &max_rct); xi_pu_to_fu(itf, (XinPoint *)&max_rct, 2); const int MAXX = max_rct.right; @@ -1266,12 +1267,18 @@ TGroupbox_control::TGroupbox_control(WINDOW win, short cid, def->v.rect->back_color = MASK_BACK_COLOR; def->v.rect->shadow_color = MASK_DARK_COLOR; - const bool erre = strchr(flags, 'R') != NULL; - if (erre) + if (CAMPI_SCAVATI) { - def->v.rect->well = true; // Mette in rilievo il rettangolo - change_attrib(XI_ATR_RJUST, false, _obj); // Toglie l'erroneo allineamento a destra del titolo + const bool erre = strchr(flags, 'R') != NULL; + if (erre) + { + def->v.rect->well = true; // Mette in rilievo il rettangolo + change_attrib(XI_ATR_RJUST, false, _obj); // Toglie l'erroneo allineamento a destra del titolo + } } + else + def->v.rect->ridge = true; // Angoli arrotondati + _rct = xi_create(get_interface(win), def); CHECKD(_rct, "Can't create Groupbox_control ", cid); @@ -1403,6 +1410,7 @@ void TField_control::create(WINDOW win, short cid, const int offset = stx->rct.right - br.left - 1; br.left += offset; br.right += offset; + br.top = stx->rct.top+1; br.bottom = stx->rct.bottom; } diff --git a/include/relapp.cpp b/include/relapp.cpp index b5713abc1..75dd2b758 100755 --- a/include/relapp.cpp +++ b/include/relapp.cpp @@ -486,7 +486,7 @@ void TRelation_application::insert_mode() _mask->reset(); _mask->set_workfile(workname); _mask->load(); - ::remove(workname); + xvt_fsys_remove_file(workname); _mask->open_modal(); } else @@ -2029,7 +2029,7 @@ bool TRelation_application::mask2mail(const TMask& m) mask2ini(m, ini); } ok = ::dispatch_transaction(get_relation()->curr(), ininame); - ::remove(ininame); + xvt_fsys_remove_file(ininame); } return ok; } diff --git a/include/xvtility.cpp b/include/xvtility.cpp index 00883b970..d733a12d8 100755 --- a/include/xvtility.cpp +++ b/include/xvtility.cpp @@ -589,6 +589,18 @@ void xvtil_statbar_destroy() _statbar = NULL; } +int xvtil_statbar_height() +{ + int h = 0; + if (_statbar != NULL_WIN) + { + RCT rct; xvt_vobj_get_outer_rect(_statbar, &rct); + h = rct.bottom - rct.top; + } + return h; +} + + /////////////////////////////////////////////////////////// // Test menu /////////////////////////////////////////////////////////// diff --git a/include/xvtility.h b/include/xvtility.h index c429fce33..822fecf91 100755 --- a/include/xvtility.h +++ b/include/xvtility.h @@ -34,6 +34,7 @@ WINDOW xvtil_create_statbar(); void xvtil_statbar_set(const char* text, bool def = FALSE); void xvtil_statbar_refresh(); void xvtil_statbar_destroy(); +int xvtil_statbar_height(); void beep(int severity = 0); void do_events();