Patch level : 10.0 760
Files correlati : ve1.exe Ricompilazione Demo : [ ] Commento : 0001653: 002554 - Dania - modulo di stampa fatture La stampa delle fatture non stampa l'ultima riga della descrizione, nel caso di diverse righe di descrizione aggiuntiva. (bug 1653) git-svn-id: svn://10.65.10.50/trunk@20560 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
6c5e0ac5ee
commit
48a8bdb667
@ -18,7 +18,6 @@ extern COLOR MASK_DARK_COLOR;
|
|||||||
extern COLOR BTN_BACK_COLOR;
|
extern COLOR BTN_BACK_COLOR;
|
||||||
extern COLOR BTN_LIGHT_COLOR;
|
extern COLOR BTN_LIGHT_COLOR;
|
||||||
extern COLOR BTN_DARK_COLOR;
|
extern COLOR BTN_DARK_COLOR;
|
||||||
extern COLOR TOOL_BACK_COLOR;
|
|
||||||
extern COLOR NORMAL_COLOR;
|
extern COLOR NORMAL_COLOR;
|
||||||
extern COLOR NORMAL_BACK_COLOR;
|
extern COLOR NORMAL_BACK_COLOR;
|
||||||
extern COLOR PROMPT_COLOR;
|
extern COLOR PROMPT_COLOR;
|
||||||
|
@ -27,7 +27,6 @@ COLOR MASK_DARK_COLOR = COLOR_GRAY;
|
|||||||
COLOR BTN_BACK_COLOR = COLOR_LTGRAY;
|
COLOR BTN_BACK_COLOR = COLOR_LTGRAY;
|
||||||
COLOR BTN_LIGHT_COLOR = COLOR_WHITE;
|
COLOR BTN_LIGHT_COLOR = COLOR_WHITE;
|
||||||
COLOR BTN_DARK_COLOR = COLOR_GRAY;
|
COLOR BTN_DARK_COLOR = COLOR_GRAY;
|
||||||
COLOR TOOL_BACK_COLOR = COLOR_GRAY;
|
|
||||||
COLOR NORMAL_COLOR = COLOR_BLACK;
|
COLOR NORMAL_COLOR = COLOR_BLACK;
|
||||||
COLOR NORMAL_BACK_COLOR = COLOR_WHITE;
|
COLOR NORMAL_BACK_COLOR = COLOR_WHITE;
|
||||||
COLOR PROMPT_COLOR = NORMAL_COLOR;
|
COLOR PROMPT_COLOR = NORMAL_COLOR;
|
||||||
@ -321,12 +320,48 @@ HIDDEN XI_BITMAP* get_background_bitmap(bool reload)
|
|||||||
{
|
{
|
||||||
TFilename back = ini_get_string(CONFIG_GUI, "Colors", "Tile");
|
TFilename back = ini_get_string(CONFIG_GUI, "Colors", "Tile");
|
||||||
if (back.custom_path())
|
if (back.custom_path())
|
||||||
|
{
|
||||||
bmp = xi_bitmap_create(back.get_buffer(), XI_BITMAP_TILE);
|
bmp = xi_bitmap_create(back.get_buffer(), XI_BITMAP_TILE);
|
||||||
|
if (bmp != NULL)
|
||||||
|
{
|
||||||
|
XVT_IMAGE img = (XVT_IMAGE)bmp->xin_bitmap->x;
|
||||||
|
short k, w, h; xvt_image_get_dimensions(img, &w, &h);
|
||||||
|
|
||||||
|
unsigned long r=0, g=0, b=0;
|
||||||
|
for (k = 0; k < w && k < h; k++)
|
||||||
|
{
|
||||||
|
const COLOR col = xvt_image_get_pixel(img, k, k);
|
||||||
|
r += XVT_COLOR_GET_RED(col);
|
||||||
|
g += XVT_COLOR_GET_GREEN(col);
|
||||||
|
b += XVT_COLOR_GET_BLUE(col);
|
||||||
|
}
|
||||||
|
r = (r+k/2)/k; g = (g+k/2)/k; b = (b+k/2)/k;
|
||||||
|
MASK_BACK_COLOR = XVT_MAKE_COLOR(r, g, b); // Mean texture color
|
||||||
|
MASK_LIGHT_COLOR = blend_colors(COLOR_WHITE, MASK_BACK_COLOR);
|
||||||
|
MASK_DARK_COLOR = blend_colors(COLOR_BLACK, MASK_BACK_COLOR);
|
||||||
|
|
||||||
|
if (w > 512 || h > 512)
|
||||||
|
{
|
||||||
|
bmp->mode = XI_BITMAP_NORMAL;
|
||||||
|
bmp->hcenter = bmp->vcenter = TRUE;
|
||||||
|
bmp->background = MASK_BACK_COLOR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bmp;
|
return bmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XVT_IMAGE get_background_texture()
|
||||||
|
{
|
||||||
|
XVT_IMAGE img = NULL;
|
||||||
|
XI_BITMAP* bmp = get_background_bitmap(false);
|
||||||
|
if (bmp != NULL)
|
||||||
|
img = (XVT_IMAGE)bmp->xin_bitmap->x;
|
||||||
|
return img;
|
||||||
|
}
|
||||||
|
|
||||||
static byte event_map[XIE_LAST_EVENT];
|
static byte event_map[XIE_LAST_EVENT];
|
||||||
|
|
||||||
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 };
|
||||||
@ -354,7 +389,6 @@ void customize_colors()
|
|||||||
DISABLED_BACK_COLOR = colors.get_color("DisabledBack", NULL, -1, DISABLED_BACK_COLOR);
|
DISABLED_BACK_COLOR = colors.get_color("DisabledBack", NULL, -1, DISABLED_BACK_COLOR);
|
||||||
FOCUS_COLOR = colors.get_color("Focus", NULL, -1, FOCUS_COLOR);
|
FOCUS_COLOR = colors.get_color("Focus", NULL, -1, FOCUS_COLOR);
|
||||||
FOCUS_BACK_COLOR = colors.get_color("FocusBack", NULL, -1, FOCUS_BACK_COLOR);
|
FOCUS_BACK_COLOR = colors.get_color("FocusBack", NULL, -1, FOCUS_BACK_COLOR);
|
||||||
TOOL_BACK_COLOR = colors.get_color("ToolBack", NULL, -1, MASK_DARK_COLOR);
|
|
||||||
CAMPI_SCAVATI = colors.get_bool("Campi3D", NULL, -1, CAMPI_SCAVATI);
|
CAMPI_SCAVATI = colors.get_bool("Campi3D", NULL, -1, CAMPI_SCAVATI);
|
||||||
AUTOSELECT = colors.get_bool("AutoSelect", NULL, -1, AUTOSELECT);
|
AUTOSELECT = colors.get_bool("AutoSelect", NULL, -1, AUTOSELECT);
|
||||||
AUTOZOOM = colors.get_bool("AutoZoom", NULL, -1, AUTOZOOM);
|
AUTOZOOM = colors.get_bool("AutoZoom", NULL, -1, AUTOZOOM);
|
||||||
@ -1242,6 +1276,7 @@ TGroupbox_control::TGroupbox_control(WINDOW win, short cid,
|
|||||||
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;
|
||||||
def->v.rect->shadow_color = MASK_DARK_COLOR;
|
def->v.rect->shadow_color = MASK_DARK_COLOR;
|
||||||
|
def->v.rect->bitmap = get_background_bitmap(false);
|
||||||
|
|
||||||
const bool erre = strchr(flags, 'R') != NULL;
|
const bool erre = strchr(flags, 'R') != NULL;
|
||||||
if (erre)
|
if (erre)
|
||||||
|
@ -31,6 +31,7 @@ void attach_interface(WINDOW win, COLOR back);
|
|||||||
short low_get_focus_id(WINDOW win);
|
short low_get_focus_id(WINDOW win);
|
||||||
void low_set_focus_id(WINDOW win, short cid);
|
void low_set_focus_id(WINDOW win, short cid);
|
||||||
bool has_virtual_keyboard();
|
bool has_virtual_keyboard();
|
||||||
|
XVT_IMAGE get_background_texture();
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// Custom control
|
// Custom control
|
||||||
|
@ -403,7 +403,7 @@ bool TDate::is_holiday() const
|
|||||||
return true;
|
return true;
|
||||||
if ((m == 12) && ((d == 8) || (d == 25) || (d == 26)))
|
if ((m == 12) && ((d == 8) || (d == 25) || (d == 26)))
|
||||||
return true;
|
return true;
|
||||||
if (m == 3 || m == 4 && wday() == 1)
|
if (m == 3 || m == 4 && wday() == 1) // Lunedi di Pasqua (puo'succedere solo in Marzo o Aprile)
|
||||||
{
|
{
|
||||||
TDate angelo;
|
TDate angelo;
|
||||||
angelo.set_easter(year());
|
angelo.set_easter(year());
|
||||||
@ -474,9 +474,15 @@ void TDate::addmonth(int nmonth)
|
|||||||
|
|
||||||
void TDate::addyear(int nyear)
|
void TDate::addyear(int nyear)
|
||||||
{
|
{
|
||||||
const int wday = day();
|
int wday = day();
|
||||||
const int wmonth = month();
|
const int wmonth = month();
|
||||||
const int wyear = year() + nyear;
|
const int wyear = year() + nyear;
|
||||||
|
if (wmonth == 2)
|
||||||
|
{
|
||||||
|
const int last = last_day(wmonth, wyear);
|
||||||
|
if (wday > last)
|
||||||
|
wday = last;
|
||||||
|
}
|
||||||
_val = makedata(wday, wmonth, wyear);
|
_val = makedata(wday, wmonth, wyear);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -518,12 +524,8 @@ bool TDate::isdate(const char* s)
|
|||||||
return d <= last_day(m,y);
|
return d <= last_day(m,y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TDate::ok() const
|
bool TDate::ok() const
|
||||||
{
|
{ return _val > 0; }
|
||||||
return _val > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
@ -542,7 +544,6 @@ TDate operator +(
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TDate operator +(const long nday, const TDate& b)
|
TDate operator +(const long nday, const TDate& b)
|
||||||
{
|
{
|
||||||
TDate tmp(b);
|
TDate tmp(b);
|
||||||
|
@ -1303,7 +1303,7 @@ bool Tdninst::can_I_run(const bool is_personal_program) const
|
|||||||
{
|
{
|
||||||
TFilename cmdline = main_app().argv(0);
|
TFilename cmdline = main_app().argv(0);
|
||||||
cmdline = cmdline.name_only();
|
cmdline = cmdline.name_only();
|
||||||
if (cmdline.starts_with("ba", true))
|
if (cmdline.starts_with("ba", true) || cmdline.ends_with("cnv", true))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
const bool me = is_personal_program || cmdline.len()>3;
|
const bool me = is_personal_program || cmdline.len()>3;
|
||||||
|
@ -1348,8 +1348,11 @@ WINDOW TMask::create_bar(int height)
|
|||||||
w = xvt_toolbar_create(-1, 0, 0, -1, TOOL_SIZE, flags, win()); // Top bar
|
w = xvt_toolbar_create(-1, 0, 0, -1, TOOL_SIZE, flags, win()); // Top bar
|
||||||
XVT_COLOR_COMPONENT cc[4]; memset(cc, 0, sizeof(cc));
|
XVT_COLOR_COMPONENT cc[4]; memset(cc, 0, sizeof(cc));
|
||||||
cc[0].type = XVT_COLOR_BLEND; cc[0].color = MASK_BACK_COLOR;
|
cc[0].type = XVT_COLOR_BLEND; cc[0].color = MASK_BACK_COLOR;
|
||||||
cc[1].type = XVT_COLOR_FOREGROUND; cc[1].color = NORMAL_COLOR;
|
cc[1].type = XVT_COLOR_FOREGROUND; cc[1].color = PROMPT_COLOR;
|
||||||
xvt_ctl_set_colors(w, cc, XVT_COLOR_ACTION_SET);
|
xvt_ctl_set_colors(w, cc, XVT_COLOR_ACTION_SET);
|
||||||
|
XVT_IMAGE txt = get_background_texture();
|
||||||
|
if (txt != NULL)
|
||||||
|
xvt_ctl_set_texture(w, txt);
|
||||||
}
|
}
|
||||||
insert_bar(w); // Inserisce toolbar e crea notebook, se necessario
|
insert_bar(w); // Inserisce toolbar e crea notebook, se necessario
|
||||||
return w;
|
return w;
|
||||||
|
@ -1484,7 +1484,7 @@ const TString& TReport_field::formatted_text() const
|
|||||||
tmp << _picture << ' ' << _var.as_string();
|
tmp << _picture << ' ' << _var.as_string();
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
if (dynamic_height())
|
if (dynamic_height() && !_var.is_empty())
|
||||||
{
|
{
|
||||||
TString& tmp = get_tmp_string();
|
TString& tmp = get_tmp_string();
|
||||||
tmp = _var.as_string();
|
tmp = _var.as_string();
|
||||||
|
@ -129,29 +129,35 @@ bool finisce_per_punto(const TString& str)
|
|||||||
void advanced_draw_paragraph(WINDOW win, const TString_array& para, const RCT& rct,
|
void advanced_draw_paragraph(WINDOW win, const TString_array& para, const RCT& rct,
|
||||||
char halign, char valign, int default_10row_height)
|
char halign, char valign, int default_10row_height)
|
||||||
{
|
{
|
||||||
const int rows = para.items();
|
const int needed_rows = para.items();
|
||||||
if (rows > 1) // Devo scrivere piu' righe?
|
if (needed_rows > 1) // Devo scrivere piu' righe?
|
||||||
{
|
{
|
||||||
int leading, ascent, descent;
|
int leading, ascent, descent;
|
||||||
xvt_dwin_get_font_metrics(win, &leading, &ascent, &descent);
|
xvt_dwin_get_font_metrics(win, &leading, &ascent, &descent);
|
||||||
|
|
||||||
int ky10 = (leading + ascent + descent) * 10;
|
const int rct_height = rct.bottom - rct.top;
|
||||||
|
const int row_height = leading + ascent + descent;
|
||||||
|
int ky10 = row_height * 10;
|
||||||
// Aggiusta l'altezza di una riga standard, se necessario
|
// Aggiusta l'altezza di una riga standard, se necessario
|
||||||
if (ky10 < default_10row_height && ky10 > 75*default_10row_height/100)
|
if (ky10 < default_10row_height && ky10 > 75*default_10row_height/100)
|
||||||
ky10 = default_10row_height;
|
{
|
||||||
|
const int avail_rows = (rct_height+row_height/4)/row_height;
|
||||||
const int rct_height = rct.bottom - rct.top;
|
if (avail_rows > needed_rows)
|
||||||
|
ky10 = default_10row_height; else
|
||||||
|
if (avail_rows >= 4 && avail_rows >= needed_rows-1)
|
||||||
|
ky10 = rct_height*10/needed_rows;
|
||||||
|
}
|
||||||
|
|
||||||
int ybase = rct.top;
|
int ybase = rct.top;
|
||||||
switch (valign)
|
switch (valign)
|
||||||
{
|
{
|
||||||
case 'C': ybase += (rct_height - (rows * ky10) / 10) / 2; break;
|
case 'C': ybase += (rct_height - (needed_rows * ky10) / 10) / 2; break;
|
||||||
case 'B': ybase += rct_height - (rows * ky10) / 10; break;
|
case 'B': ybase += rct_height - (needed_rows * ky10) / 10; break;
|
||||||
default : break;
|
default : break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int lastop = rct.bottom - ky10/20; // Ultima y valida = base del rettangolo MENO mezza riga
|
const int lastop = rct.bottom - ky10/20; // Ultima y valida = base del rettangolo MENO mezza riga
|
||||||
for (int row = 0; row < rows; row++)
|
for (int row = 0; row < needed_rows; row++)
|
||||||
{
|
{
|
||||||
const int top = ybase + (ky10 * row) / 10;
|
const int top = ybase + (ky10 * row) / 10;
|
||||||
if (top < lastop)
|
if (top < lastop)
|
||||||
@ -163,7 +169,7 @@ void advanced_draw_paragraph(WINDOW win, const TString_array& para, const RCT& r
|
|||||||
rctline.top = top;
|
rctline.top = top;
|
||||||
rctline.bottom = ybase + (ky10 * (row+1)) / 10; // top + ky10 / 10;
|
rctline.bottom = ybase + (ky10 * (row+1)) / 10; // top + ky10 / 10;
|
||||||
char ha = halign;
|
char ha = halign;
|
||||||
if (ha == 'J' && (row == rows-1 || finisce_per_punto(line)))
|
if (ha == 'J' && (row == needed_rows-1 || finisce_per_punto(line)))
|
||||||
ha = 'L'; // Le righe finali non vanno giustificate
|
ha = 'L'; // Le righe finali non vanno giustificate
|
||||||
advanced_draw_text_line(win, line, rctline, ha, 'T');
|
advanced_draw_text_line(win, line, rctline, ha, 'T');
|
||||||
}
|
}
|
||||||
@ -867,12 +873,6 @@ int TBook::compute_text_frame(const TString& tmp, const TReport_font& font, TRep
|
|||||||
WINDOW w = _printwin->win();
|
WINDOW w = _printwin->win();
|
||||||
CHECK(w == PRINTER_WIN, "Finestra di stampa non valida");
|
CHECK(w == PRINTER_WIN, "Finestra di stampa non valida");
|
||||||
xvt_dwin_set_font(w, font.get_xvt_font(*_printwin));
|
xvt_dwin_set_font(w, font.get_xvt_font(*_printwin));
|
||||||
int leading, ascent, descent;
|
|
||||||
xvt_dwin_get_font_metrics(w, &leading, &ascent, &descent);
|
|
||||||
int ky10 = (leading + ascent + descent) * 10;
|
|
||||||
// Aggiusta l'altezza di 10 righe standard, se necessario
|
|
||||||
if (ky10 < def_10row_height && ky10 > 75*def_10row_height/100)
|
|
||||||
ky10 = def_10row_height;
|
|
||||||
|
|
||||||
TToken_string p(tmp, '\n');
|
TToken_string p(tmp, '\n');
|
||||||
FOR_EACH_TOKEN(p, line)
|
FOR_EACH_TOKEN(p, line)
|
||||||
@ -914,6 +914,13 @@ int TBook::compute_text_frame(const TString& tmp, const TReport_font& font, TRep
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int leading, ascent, descent;
|
||||||
|
xvt_dwin_get_font_metrics(w, &leading, &ascent, &descent);
|
||||||
|
int ky10 = (leading + ascent + descent) * 10;
|
||||||
|
// Aggiusta l'altezza di 10 righe standard, se necessario
|
||||||
|
if (ky10 < def_10row_height && ky10 > 75*def_10row_height/100)
|
||||||
|
ky10 = def_10row_height;
|
||||||
|
|
||||||
int h = para.items() * ky10 * 100 / def_10row_height;
|
int h = para.items() * ky10 * 100 / def_10row_height;
|
||||||
const int resto = h % 100;
|
const int resto = h % 100;
|
||||||
if (resto != 0)
|
if (resto != 0)
|
||||||
|
@ -2055,9 +2055,9 @@ void TParagraph_string::tokenize()
|
|||||||
}
|
}
|
||||||
if (add_now >= start)
|
if (add_now >= start)
|
||||||
{
|
{
|
||||||
TString256 tok = sub(start, add_now);
|
const TString& tok = sub(start, add_now);
|
||||||
tok.rtrim(); // Preserva gli spazi iniziali dopo un a capo forzato da \n
|
|
||||||
tmp.add(tok);
|
tmp.add(tok);
|
||||||
|
tmp.rtrim(); // Preserva gli spazi iniziali dopo un a capo forzato da \n
|
||||||
start = add_now + (_str[add_now] <= ' ');
|
start = add_now + (_str[add_now] <= ' ');
|
||||||
last_space = start;
|
last_space = start;
|
||||||
}
|
}
|
||||||
|
@ -649,8 +649,9 @@ TOutlook_window::TOutlook_window(int x, int y, int dx, int dy, WINDOW parent, TO
|
|||||||
: TControl_host_window(x, y, dx, dy, parent, owner)
|
: TControl_host_window(x, y, dx, dy, parent, owner)
|
||||||
{
|
{
|
||||||
XVT_COLOR_COMPONENT xcc[4]; memset(xcc, 0, sizeof(xcc));
|
XVT_COLOR_COMPONENT xcc[4]; memset(xcc, 0, sizeof(xcc));
|
||||||
xcc[0].type = XVT_COLOR_BACKGROUND; xcc[0].color = BTN_BACK_COLOR;
|
xcc[0].type = XVT_COLOR_BACKGROUND; xcc[0].color = MASK_BACK_COLOR;
|
||||||
xcc[1].type = XVT_COLOR_FOREGROUND; xcc[1].color = PROMPT_COLOR;
|
xcc[1].type = XVT_COLOR_FOREGROUND; xcc[1].color = PROMPT_COLOR;
|
||||||
|
xcc[2].type = XVT_COLOR_HIGHLIGHT; xcc[2].color = MASK_LIGHT_COLOR;
|
||||||
|
|
||||||
WIN_DEF wd; memset(&wd, 0, sizeof(wd));
|
WIN_DEF wd; memset(&wd, 0, sizeof(wd));
|
||||||
wd.wtype = WC_OUTLOOKBAR;
|
wd.wtype = WC_OUTLOOKBAR;
|
||||||
|
@ -177,12 +177,12 @@ public:
|
|||||||
// @base public | TVariable_rectype
|
// @base public | TVariable_rectype
|
||||||
class TAuto_variable_rectype : public TVariable_rectype
|
class TAuto_variable_rectype : public TVariable_rectype
|
||||||
|
|
||||||
// @author:(INTERNAL) Sandro
|
// @author:(INTERNAL) Alex
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual bool auto_virtual_fields() const { return TRUE; }
|
virtual bool auto_virtual_fields() const { return true; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// @cmember Costruttore Costruisce un record staccato da un file.
|
// @cmember Costruttore Costruisce un record staccato da un file.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user