Patch level : 10.0
Files correlati : ba8.exe Ricompilazione Demo : [ ] Commento : Corretta anteprima testi fissi su piu' righe. Aggiunti controlli su coordinate negative indesiderate nei campi di stampa. git-svn-id: svn://10.65.10.50/trunk@19556 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
70e207f055
commit
e258cd5470
@ -148,7 +148,7 @@ public:
|
||||
void TReport_sheet::get_row(long r, TToken_string& row)
|
||||
{
|
||||
const TReport_field& rf = (const TReport_field&)_section[r];
|
||||
const TRectangle& rect = rf.get_rect();
|
||||
const TReport_rct& rect = rf.get_rect();
|
||||
row = checked(r) ? "X" : " ";
|
||||
row.add(rf.type_name());
|
||||
row.add(rf.id());
|
||||
@ -362,7 +362,7 @@ void TSection_properties_mask::get_section(TReport_section& rs) const
|
||||
{
|
||||
if (field(F_X).active())
|
||||
{
|
||||
const TPoint pos(get_num(F_X), get_num(F_Y));
|
||||
const TReport_pnt pos(get_num(F_X), get_num(F_Y));
|
||||
rs.set_pos(pos);
|
||||
}
|
||||
rs.set_width(get_num(F_DX));
|
||||
@ -861,7 +861,16 @@ void TReport_mask::add_field()
|
||||
TReport_section& rs = curr_section();
|
||||
TReport_field* rf = new TReport_field(&rs);
|
||||
rf->set_type('S');
|
||||
rf->set_pos(0, rs.compute_size().y+100);
|
||||
|
||||
int y = 0;
|
||||
for (int i = 0; i < rs.items(); i++)
|
||||
{
|
||||
const TReport_field& f = rs.field(i);
|
||||
const int bottom = f.get_rect().bottom();
|
||||
if (bottom > y)
|
||||
y = bottom;
|
||||
}
|
||||
rf->set_pos(0, y);
|
||||
TReport_field_mask m(*rf);
|
||||
m.disable(DLG_DELREC);
|
||||
if (m.run() == K_ENTER)
|
||||
|
296
ba/ba8301.cpp
296
ba/ba8301.cpp
@ -704,7 +704,7 @@ void TReport_field_mask::set_field(const TReport_field& rf)
|
||||
char str[2] = { rf.type(), '\0' };
|
||||
set(F_TYPE, str, true);
|
||||
|
||||
const TRectangle& r = rf.get_rect();
|
||||
const TReport_rct& r = rf.get_rect();
|
||||
set(F_ID, rf.id());
|
||||
set_num(F_X, r.left());
|
||||
set_num(F_Y, r.top());
|
||||
@ -834,15 +834,19 @@ class TReport_window : public TField_window
|
||||
bool _draw_bg;
|
||||
|
||||
int _dragging;
|
||||
TPoint _pt_drag_start;
|
||||
TReport_pnt _pt_drag_start;
|
||||
PNT _pt_click, _pt_drag_offset;
|
||||
RCT _rct_drag;
|
||||
|
||||
TReport_image_cache _images;
|
||||
int _default_row_height;
|
||||
//int _default_row_height;
|
||||
|
||||
static TArray _clipboard;
|
||||
|
||||
private:
|
||||
virtual TPoint dev2log(const PNT& pt) const;
|
||||
virtual PNT log2dev(long x, long y) const;
|
||||
|
||||
protected:
|
||||
virtual long handler(WINDOW win, EVENT* ep);
|
||||
virtual void update();
|
||||
@ -851,8 +855,8 @@ protected:
|
||||
protected:
|
||||
void draw_bg();
|
||||
void draw_grid();
|
||||
void snap(TPoint& pnt, bool shift) const;
|
||||
void snap(TRectangle& pnt, bool shift) const;
|
||||
void snap(TReport_pnt& pnt, bool shift) const;
|
||||
void snap(TReport_rct& pnt, bool shift) const;
|
||||
void draw_dragster();
|
||||
void draw_field(const TReport_field& rf);
|
||||
void draw_broken_paper(const TReport_field& rf);
|
||||
@ -868,23 +872,27 @@ protected:
|
||||
|
||||
bool advanced_set_draw_tools(PAT_STYLE pat, int border, COLOR fore, COLOR back);
|
||||
void advanced_draw_rect(const RCT& r, PAT_STYLE pat, int border, COLOR fore, COLOR back, int radius, int shade);
|
||||
void offset_selection(TReport_section& rs, const TReport_size& p); // low level offset
|
||||
|
||||
public:
|
||||
virtual PNT log2dev(long x, long y) const;
|
||||
virtual TPoint dev2log(const PNT& pt) const;
|
||||
PNT rep2dev(const TReport_pnt& pt) const;
|
||||
void rep2dev(const TReport_rct& rr, RCT& dr) const;
|
||||
void dev2rep(const RCT& dr, TReport_rct& rr) const;
|
||||
TReport_pnt dev2rep(const PNT& pt) const;
|
||||
|
||||
TReport_section& curr_section() const { return _report->section(_type, _level); }
|
||||
void set_report_section(TReport_section& rs);
|
||||
|
||||
int get_selection_rect(TRectangle& rct) const;
|
||||
bool pick(const TPoint& ptlog) const;
|
||||
int get_selection_rect(TReport_rct& rct) const;
|
||||
bool pick(const TReport_pnt& ptlog) const;
|
||||
void clear_selection();
|
||||
bool select(const TRectangle& rct, bool inter);
|
||||
void offset_selection(const TPoint& p);
|
||||
void resize_selection(const TPoint& p);
|
||||
bool select(const TReport_rct& rct, bool inter);
|
||||
void offset_selection(const TReport_size& p); // safe offset with <0 checking
|
||||
void resize_selection(const TReport_size& p);
|
||||
|
||||
bool test_corner(const RCT& rct, const PNT& pt, PNT& opposite) const;
|
||||
TReport_field* first_selected() const;
|
||||
bool add_field(const TRectangle& rct);
|
||||
bool add_field(const TReport_rct& rct);
|
||||
|
||||
TReport_window(int x, int y, int dx, int dy, WINDOW parent, TWindowed_field* owner);
|
||||
virtual ~TReport_window() { }
|
||||
@ -902,14 +910,14 @@ void TReport_window::set_report_section(TReport_section& rs)
|
||||
xvt_pane_set_title(win(), str);
|
||||
}
|
||||
|
||||
bool TReport_window::pick(const TPoint& ptlog) const
|
||||
bool TReport_window::pick(const TReport_pnt& ptlog) const
|
||||
{
|
||||
TReport_section& rs = curr_section();
|
||||
|
||||
FOR_EACH_ARRAY_ITEM_BACK(rs, i, o)
|
||||
{
|
||||
TReport_field& f = *(TReport_field*)o;
|
||||
const TRectangle& rct = f.get_rect();
|
||||
const TReport_rct& rct = f.get_rect();
|
||||
if (rct.contains(ptlog))
|
||||
{
|
||||
f.select();
|
||||
@ -929,7 +937,7 @@ void TReport_window::clear_selection()
|
||||
}
|
||||
}
|
||||
|
||||
int TReport_window::get_selection_rect(TRectangle& rct) const
|
||||
int TReport_window::get_selection_rect(TReport_rct& rct) const
|
||||
{
|
||||
TReport_section& rs = curr_section();
|
||||
int full = 0;
|
||||
@ -938,7 +946,7 @@ int TReport_window::get_selection_rect(TRectangle& rct) const
|
||||
const TReport_field& f = *(const TReport_field*)o;
|
||||
if (f.selected())
|
||||
{
|
||||
const TRectangle& fr = f.get_rect();
|
||||
const TReport_rct& fr = f.get_rect();
|
||||
if (!full)
|
||||
rct = fr;
|
||||
else
|
||||
@ -949,19 +957,33 @@ int TReport_window::get_selection_rect(TRectangle& rct) const
|
||||
return full;
|
||||
}
|
||||
|
||||
void TReport_window::offset_selection(const TPoint& p)
|
||||
void TReport_window::offset_selection(TReport_section& rs, const TReport_size& p)
|
||||
{
|
||||
TReport_section& rs = curr_section();
|
||||
FOR_EACH_ARRAY_ITEM(rs, i, o)
|
||||
{
|
||||
TReport_field& f = *(TReport_field*)o;
|
||||
if (f.selected())
|
||||
f.offset(p);
|
||||
}
|
||||
}
|
||||
|
||||
void TReport_window::offset_selection(const TReport_size& p)
|
||||
{
|
||||
TReport_section& rs = curr_section();
|
||||
offset_selection(rs, p);
|
||||
|
||||
// Se sposto fuori dal foglio riporto dentro la selezione
|
||||
TReport_rct selrct; get_selection_rect(selrct);
|
||||
if (selrct.x < 0 || selrct.y < 0)
|
||||
{
|
||||
const TReport_size off(selrct.x < 0 ? -selrct.x : 0, selrct.y < 0 ? -selrct.y : 0);
|
||||
offset_selection(rs, off);
|
||||
}
|
||||
|
||||
rs.sort();
|
||||
}
|
||||
|
||||
void TReport_window::resize_selection(const TPoint& p)
|
||||
void TReport_window::resize_selection(const TReport_size& p)
|
||||
{
|
||||
TReport_section& rs = curr_section();
|
||||
FOR_EACH_ARRAY_ITEM(rs, i, o)
|
||||
@ -969,7 +991,7 @@ void TReport_window::resize_selection(const TPoint& p)
|
||||
TReport_field& f = *(TReport_field*)o;
|
||||
if (f.selected())
|
||||
{
|
||||
TPoint s = f.get_rect().size(); s += p;
|
||||
TReport_size s = f.get_rect().size(); s += p;
|
||||
if (s.x > 0 && s.y > 0)
|
||||
f.set_size(s.x, s.y);
|
||||
}
|
||||
@ -988,7 +1010,7 @@ TReport_field* TReport_window::first_selected() const
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool TReport_window::select(const TRectangle& rct, bool inter)
|
||||
bool TReport_window::select(const TReport_rct& rct, bool inter)
|
||||
{
|
||||
bool some = false;
|
||||
clear_selection();
|
||||
@ -997,7 +1019,7 @@ bool TReport_window::select(const TRectangle& rct, bool inter)
|
||||
FOR_EACH_ARRAY_ITEM(rs, i, o)
|
||||
{
|
||||
TReport_field& f = *(TReport_field*)o;
|
||||
const TRectangle& r = f.get_rect();
|
||||
const TReport_rct& r = f.get_rect();
|
||||
const bool yes = inter ? rct.intersects(r) : rct.contains(r);
|
||||
if (yes)
|
||||
{
|
||||
@ -1016,7 +1038,7 @@ void TReport_window::draw_dragster()
|
||||
set_mode(M_COPY);
|
||||
}
|
||||
|
||||
void TReport_window::snap(TPoint& pnt, bool shift) const
|
||||
void TReport_window::snap(TReport_pnt& pnt, bool shift) const
|
||||
{
|
||||
const int kx = shift ? 10 : 100;
|
||||
const int ky = shift ? 10 : 50;
|
||||
@ -1024,52 +1046,57 @@ void TReport_window::snap(TPoint& pnt, bool shift) const
|
||||
pnt.y = ((pnt.y+ky/2) / ky) * ky;
|
||||
}
|
||||
|
||||
void TReport_window::snap(TRectangle& rct, bool shift) const
|
||||
void TReport_window::snap(TReport_rct& rct, bool shift) const
|
||||
{
|
||||
TPoint p0 = rct;
|
||||
TReport_pnt p0 = rct;
|
||||
snap(p0, shift);
|
||||
|
||||
TPoint p1(rct.right(), rct.bottom());
|
||||
TReport_pnt p1(rct.right(), rct.bottom());
|
||||
snap(p1, shift);
|
||||
p1 -= p0;
|
||||
|
||||
rct.set(p0, p1);
|
||||
|
||||
rct.set(p0, p1-p0);
|
||||
}
|
||||
|
||||
bool TReport_window::on_key(KEY k)
|
||||
{
|
||||
switch (k)
|
||||
{
|
||||
case 'G':
|
||||
dispatch_e_menu(win(), POPUP_UNGROUP);
|
||||
return true;
|
||||
case 'g':
|
||||
dispatch_e_menu(win(), POPUP_GROUP);
|
||||
return true;
|
||||
case K_LEFT:
|
||||
offset_selection(TPoint(-50, 0));
|
||||
offset_selection(TReport_size(-50, 0));
|
||||
force_update();
|
||||
return true;
|
||||
case K_LEFT+K_SHIFT:
|
||||
resize_selection(TPoint(-50, 0));
|
||||
resize_selection(TReport_size(-50, 0));
|
||||
force_update();
|
||||
return true;
|
||||
case K_RIGHT:
|
||||
offset_selection(TPoint(+50, 0));
|
||||
offset_selection(TReport_size(+50, 0));
|
||||
force_update();
|
||||
return true;
|
||||
case K_RIGHT+K_SHIFT:
|
||||
resize_selection(TPoint(+50, 0));
|
||||
resize_selection(TReport_size(+50, 0));
|
||||
force_update();
|
||||
return true;
|
||||
case K_DOWN:
|
||||
offset_selection(TPoint(0, +25));
|
||||
offset_selection(TReport_size(0, +25));
|
||||
force_update();
|
||||
return true;
|
||||
case K_DOWN+K_SHIFT:
|
||||
resize_selection(TPoint(0, +25));
|
||||
resize_selection(TReport_size(0, +25));
|
||||
force_update();
|
||||
return true;
|
||||
case K_UP:
|
||||
offset_selection(TPoint(0, -25));
|
||||
offset_selection(TReport_size(0, -25));
|
||||
force_update();
|
||||
return true;
|
||||
case K_UP+K_SHIFT:
|
||||
resize_selection(TPoint(0, -25));
|
||||
resize_selection(TReport_size(0, -25));
|
||||
force_update();
|
||||
return true;
|
||||
case K_DEL:
|
||||
@ -1106,10 +1133,10 @@ bool TReport_window::on_key(KEY k)
|
||||
|
||||
void TReport_window::popup_menu()
|
||||
{
|
||||
MENU_ITEM menu[16]; // Stiamo larghi
|
||||
MENU_ITEM menu[32]; // Stiamo larghi
|
||||
memset(menu, 0, sizeof(menu));
|
||||
|
||||
TRectangle rct;
|
||||
TReport_rct rct;
|
||||
const bool ful = curr_section().items() > 0;
|
||||
const bool sel = ful && get_selection_rect(rct) != 0;
|
||||
const bool clp = _clipboard.items() > 0;
|
||||
@ -1120,20 +1147,22 @@ void TReport_window::popup_menu()
|
||||
menu[ 2].tag = POPUP_PASTE; menu[ 2].text = (char*)TR("Incolla"); menu[2].enabled = clp;
|
||||
menu[ 3].tag = POPUP_DUP; menu[ 3].text = (char*)TR("Duplica"); menu[3].enabled = sel;
|
||||
menu[ 4].tag = POPUP_CLEAR; menu[ 4].text = (char*)TR("Cancella"); menu[4].enabled = sel;
|
||||
menu[ 5].tag = -1; menu[ 5].separator = true;
|
||||
menu[ 6].tag = POPUP_ZOOMIN; menu[ 6].text = (char*)TR("Zoom +"); menu[6].enabled = _dpi.v < 300;
|
||||
menu[ 7].tag = POPUP_ZOOMOUT; menu[ 7].text = (char*)TR("Zoom -"); menu[7].enabled = _dpi.v > 48;
|
||||
menu[ 8].tag = POPUP_BACKGROUND; menu[ 8].text = (char*)TR("Mostra sfondo");
|
||||
menu[ 8].enabled = menu[8].checkable = sbg; menu[8].checked = sbg && _draw_bg;
|
||||
menu[ 9].tag = -1; menu[ 9].separator = true;
|
||||
menu[10].tag = POPUP_SELALL; menu[10].text = (char*)TR("Seleziona tutto"); menu[10].enabled = ful;
|
||||
menu[11].tag = POPUP_UNSELALL; menu[11].text = (char*)TR("Deseleziona tutto"); menu[11].enabled = ful;
|
||||
menu[12].tag = -1; menu[12].separator = true;
|
||||
menu[13].tag = POPUP_PROPERTIES; menu[13].text = "Proprieta'"; menu[13].enabled = true;
|
||||
menu[14].tag = POPUP_NEWFIELD; menu[14].text = "Nuovo"; menu[14].enabled = true;
|
||||
menu[ 5].tag = POPUP_GROUP; menu[ 5].text = (char*)TR("Raggruppa");menu[5].enabled = sel;
|
||||
menu[ 6].tag = POPUP_UNGROUP; menu[ 6].text = (char*)TR("Dividi"); menu[6].enabled = sel;
|
||||
menu[ 7].tag = -1; menu[ 7].separator = true;
|
||||
menu[ 8].tag = POPUP_ZOOMIN; menu[ 8].text = (char*)TR("Zoom +"); menu[8].enabled = _dpi.v < 300;
|
||||
menu[ 9].tag = POPUP_ZOOMOUT; menu[ 9].text = (char*)TR("Zoom -"); menu[9].enabled = _dpi.v > 48;
|
||||
menu[10].tag = POPUP_BACKGROUND; menu[10].text = (char*)TR("Mostra sfondo");
|
||||
menu[10].enabled = menu[10].checkable = sbg; menu[10].checked = sbg && _draw_bg;
|
||||
menu[11].tag = -1; menu[11].separator = true;
|
||||
menu[12].tag = POPUP_SELALL; menu[12].text = (char*)TR("Seleziona tutto"); menu[12].enabled = ful;
|
||||
menu[13].tag = POPUP_UNSELALL; menu[13].text = (char*)TR("Deseleziona tutto"); menu[13].enabled = ful;
|
||||
menu[14].tag = -1; menu[14].separator = true;
|
||||
menu[15].tag = POPUP_PROPERTIES; menu[15].text = "Proprieta'"; menu[15].enabled = true;
|
||||
menu[16].tag = POPUP_NEWFIELD; menu[16].text = "Nuovo"; menu[16].enabled = true;
|
||||
|
||||
|
||||
_pt_drag_start = dev2log(_pt_click);
|
||||
_pt_drag_start = dev2rep(_pt_click);
|
||||
xvt_menu_popup(menu, win(), _pt_click, XVT_POPUP_CENTER, 0);
|
||||
}
|
||||
|
||||
@ -1174,19 +1203,25 @@ void TReport_window::popup_paste()
|
||||
{
|
||||
if (_clipboard.items() > 0)
|
||||
{
|
||||
const TRectangle& rct = ((TReport_field&)_clipboard[0]).get_rect();
|
||||
const TPoint off(_pt_drag_start.x-rct.left(), _pt_drag_start.y-rct.top());
|
||||
clear_selection();
|
||||
TReport_section& rs = curr_section();
|
||||
FOR_EACH_ARRAY_ITEM(_clipboard, i, o)
|
||||
const TReport_rct& rct = ((const TReport_field&)_clipboard[0]).get_rect();
|
||||
TReport_pnt diff(_pt_drag_start.x-rct.left(), _pt_drag_start.y-rct.top());
|
||||
snap(diff, false);
|
||||
if (diff.x != 0 || diff.y != 0)
|
||||
{
|
||||
const TReport_field& oldf = *(TReport_field*)o;
|
||||
TReport_field* newf = new TReport_field(oldf);
|
||||
newf->select();
|
||||
newf->offset(off);
|
||||
rs.add(newf);
|
||||
|
||||
clear_selection();
|
||||
TReport_section& rs = curr_section();
|
||||
FOR_EACH_ARRAY_ITEM(_clipboard, i, o)
|
||||
{
|
||||
const TReport_field& oldf = *(TReport_field*)o;
|
||||
TReport_field* newf = new TReport_field(oldf);
|
||||
newf->select();
|
||||
rs.add(newf);
|
||||
}
|
||||
offset_selection(TReport_size(diff.x, diff.y));
|
||||
|
||||
force_update();
|
||||
}
|
||||
force_update();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1245,7 +1280,7 @@ bool TReport_window::do_zoom(int k, bool reflect)
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TReport_window::add_field(const TRectangle& rct)
|
||||
bool TReport_window::add_field(const TReport_rct& rct)
|
||||
{
|
||||
TReport_section& rs = curr_section();
|
||||
TReport_field* rf = new TReport_field(&rs);
|
||||
@ -1280,8 +1315,8 @@ long TReport_window::handler(WINDOW win, EVENT* ep)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
const TPoint pt = dev2log(_pt_click);
|
||||
TRectangle rct;
|
||||
const TReport_pnt pt = dev2rep(_pt_click);
|
||||
TReport_rct rct;
|
||||
int full = get_selection_rect(rct);
|
||||
if (!full || !rct.contains(pt))
|
||||
{
|
||||
@ -1292,7 +1327,7 @@ long TReport_window::handler(WINDOW win, EVENT* ep)
|
||||
}
|
||||
if (full > 0)
|
||||
{
|
||||
TWindow::log2dev(rct, _rct_drag);
|
||||
rep2dev(rct, _rct_drag);
|
||||
|
||||
if (full == 1 && test_corner(_rct_drag, ep->v.mouse.where, _pt_drag_offset))
|
||||
{
|
||||
@ -1333,9 +1368,9 @@ long TReport_window::handler(WINDOW win, EVENT* ep)
|
||||
case E_MOUSE_MOVE:
|
||||
{
|
||||
TMask& m = owner().mask();
|
||||
const TPoint p = dev2log(ep->v.mouse.where);
|
||||
const TReport_pnt p = dev2rep(ep->v.mouse.where);
|
||||
|
||||
TString16 str; str.format("r:%3d c:%3d", p.y/100, p.x/100);
|
||||
TString16 str; str.format("r:%5.1lf c:%5.1lf", p.y/100.0, p.x/100.0);
|
||||
statbar_set_title(TASK_WIN, str);
|
||||
|
||||
if (_dragging != 0)
|
||||
@ -1377,7 +1412,7 @@ long TReport_window::handler(WINDOW win, EVENT* ep)
|
||||
{
|
||||
_rct_drag.right = pt.h;
|
||||
_rct_drag.bottom = pt.v;
|
||||
TRectangle rct; TWindow::dev2log(_rct_drag, rct);
|
||||
TReport_rct rct; dev2rep(_rct_drag, rct);
|
||||
const bool something = select(rct, pt.h < _rct_drag.left);
|
||||
if (!something && ep->v.mouse.control)
|
||||
add_field(rct);
|
||||
@ -1387,17 +1422,17 @@ long TReport_window::handler(WINDOW win, EVENT* ep)
|
||||
{
|
||||
pt.h -= _pt_drag_offset.h;
|
||||
pt.v -= _pt_drag_offset.v;
|
||||
TPoint offset = dev2log(pt);
|
||||
TReport_pnt offset = dev2rep(pt);
|
||||
snap(offset, ep->v.mouse.shift != 0);
|
||||
offset.x -= _pt_drag_start.x;
|
||||
offset.y -= _pt_drag_start.y;
|
||||
offset_selection(offset);
|
||||
offset_selection(TReport_size(offset.x, offset.y));
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
{
|
||||
TReport_field* rf = first_selected();
|
||||
TRectangle rct; TWindow::dev2log(_rct_drag, rct);
|
||||
TReport_rct rct; dev2rep(_rct_drag, rct);
|
||||
snap(rct, ep->v.mouse.shift != 0);
|
||||
rf->set_pos(rct.x, rct.y);
|
||||
rf->set_size(rct.width(), rct.height());
|
||||
@ -1414,6 +1449,7 @@ long TReport_window::handler(WINDOW win, EVENT* ep)
|
||||
}
|
||||
break;
|
||||
case E_MOUSE_DBL:
|
||||
_pt_drag_start = dev2rep(ep->v.mouse.where);
|
||||
dispatch_e_menu(win, POPUP_PROPERTIES);
|
||||
break;
|
||||
case E_COMMAND:
|
||||
@ -1475,6 +1511,34 @@ long TReport_window::handler(WINDOW win, EVENT* ep)
|
||||
case POPUP_NEWFIELD:
|
||||
dispatch_e_menu(parent(), POPUP_NEWFIELD);
|
||||
break;
|
||||
case POPUP_GROUP:
|
||||
case POPUP_UNGROUP:
|
||||
{
|
||||
TToken_string gruppi(16, ' ');
|
||||
xvt_dm_post_string_prompt(TR("Codice gruppo"), gruppi.get_buffer(), gruppi.size());
|
||||
gruppi.strip_double_spaces(); gruppi.trim();
|
||||
if (gruppi.full())
|
||||
{
|
||||
if (isdigit(gruppi[0]))
|
||||
{
|
||||
TReport_section& rs = curr_section();
|
||||
FOR_EACH_ARRAY_ITEM(rs, i, o)
|
||||
{
|
||||
TReport_field& f = *(TReport_field*)o;
|
||||
if (f.selected())
|
||||
{
|
||||
if (ep->v.cmd.tag == POPUP_GROUP)
|
||||
f.add_groups(gruppi);
|
||||
else
|
||||
f.del_groups(gruppi);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
error_box(TR("Codice gruppo non numerico"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1498,10 +1562,10 @@ long TReport_window::handler(WINDOW win, EVENT* ep)
|
||||
return TField_window::handler(win, ep);
|
||||
}
|
||||
|
||||
PNT TReport_window::log2dev(long x, long y) const
|
||||
{
|
||||
x -= origin().x * 100L;
|
||||
y -= origin().y * 100L;
|
||||
PNT TReport_window::log2dev(long rx, long ry) const
|
||||
{
|
||||
const int x = rx - origin().x * 100L;
|
||||
const int y = ry - origin().y * 100L;
|
||||
PNT p;
|
||||
p.h = short((x * _dpi.h) / (cpi() * 100L));
|
||||
p.v = short((y * _dpi.v) / (lpi() * 100L));
|
||||
@ -1509,7 +1573,7 @@ PNT TReport_window::log2dev(long x, long y) const
|
||||
}
|
||||
|
||||
TPoint TReport_window::dev2log(const PNT& pt) const
|
||||
{
|
||||
{
|
||||
TPoint p;
|
||||
p.x = pt.h * 100L * cpi() / _dpi.h;
|
||||
p.y = pt.v * 100L * lpi() / _dpi.v;
|
||||
@ -1518,6 +1582,34 @@ TPoint TReport_window::dev2log(const PNT& pt) const
|
||||
return p;
|
||||
}
|
||||
|
||||
PNT TReport_window::rep2dev(const TReport_pnt& pt) const
|
||||
{
|
||||
return log2dev(pt.x, pt.y);
|
||||
}
|
||||
|
||||
TReport_pnt TReport_window::dev2rep(const PNT& pt) const
|
||||
{
|
||||
const TPoint p = dev2log(pt);
|
||||
return TReport_pnt(p.x, p.y);
|
||||
}
|
||||
|
||||
void TReport_window::dev2rep(const RCT& dr, TReport_rct& rr) const
|
||||
{
|
||||
const PNT dp0 = { dr.top, dr.left };
|
||||
const PNT dp1 = { dr.bottom, dr.right };
|
||||
const TReport_pnt p0 = dev2rep(dp0);
|
||||
const TReport_pnt p1 = dev2rep(dp1);
|
||||
rr.set(p0, p1-p0);
|
||||
}
|
||||
|
||||
void TReport_window::rep2dev(const TReport_rct& rr, RCT& dr) const
|
||||
{
|
||||
const PNT dp0 = rep2dev(rr);
|
||||
const PNT dp1 = rep2dev(TReport_pnt(rr.right(), rr.bottom()));
|
||||
xvt_rect_set(&dr, dp0.h, dp0.v, dp1.h, dp1.v);
|
||||
}
|
||||
|
||||
|
||||
bool TReport_window::advanced_set_draw_tools(PAT_STYLE pat, int border, COLOR fore, COLOR back)
|
||||
{
|
||||
const bool has_pen = border > 0;
|
||||
@ -1580,7 +1672,7 @@ void TReport_window::draw_grid()
|
||||
for (int i = 0; i < rs.items(); i++)
|
||||
{
|
||||
const TReport_field& rf = rs.field(i);
|
||||
const TRectangle& rct = rf.get_rect();
|
||||
const TReport_rct& rct = rf.get_rect();
|
||||
const int fy = rct.bottom();
|
||||
if (fy > y) y = fy;
|
||||
}
|
||||
@ -1596,13 +1688,13 @@ void TReport_window::draw_grid()
|
||||
|| (rs.pattern() >= PAT_SOLID && rs.back_color() != COLOR_WHITE));
|
||||
if (draw_back)
|
||||
{
|
||||
const PNT p = log2dev(x, y);
|
||||
const PNT p = rep2dev(TReport_pnt(x, y));
|
||||
RCT rct; xvt_rect_set(&rct, 0, 0, p.h, p.v);
|
||||
int rad = 0;
|
||||
if (rs.radius() > 0)
|
||||
{
|
||||
const PNT p0 = log2dev(0,0);
|
||||
const PNT pr = log2dev(rs.radius(),rs.radius());
|
||||
const PNT p0 = rep2dev(TReport_pnt(0,0));
|
||||
const PNT pr = rep2dev(TReport_pnt(rs.radius(),rs.radius()));
|
||||
rad = min(pr.h-p0.h, pr.v-p0.v);
|
||||
}
|
||||
advanced_draw_rect(rct, rs.pattern(), rs.border(), rs.fore_color(), rs.back_color(), rad, 0);
|
||||
@ -1617,7 +1709,7 @@ void TReport_window::draw_grid()
|
||||
|
||||
if (y > 0) // Disegna barra di fine sezione
|
||||
{
|
||||
const PNT p = log2dev(x, y);
|
||||
const PNT p = rep2dev(TReport_pnt(x, y));
|
||||
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
|
||||
if (p.v < rct.bottom)
|
||||
{
|
||||
@ -1632,7 +1724,7 @@ void TReport_window::draw_grid()
|
||||
void TReport_window::draw_broken_paper(const TReport_field& rf)
|
||||
{
|
||||
set_pen(COLOR_LTGRAY);
|
||||
const TRectangle& dr = rf.get_rect();
|
||||
const TReport_rct& dr = rf.get_rect();
|
||||
const int b = dr.bottom()-100;
|
||||
line(short(dr.x), short(b), short(dr.x), short(dr.y));
|
||||
line(short(dr.x), short(dr.y), short(dr.right()), short(dr.y));
|
||||
@ -1655,7 +1747,8 @@ void TReport_window::draw_broken_paper(const TReport_field& rf)
|
||||
|
||||
void TReport_window::draw_field(const TReport_field& rf)
|
||||
{
|
||||
RCT r; TWindow::log2dev(rf.get_rect(), r);
|
||||
const TReport_rct& rf_rect = rf.get_rect();
|
||||
RCT r; rep2dev(rf_rect, r);
|
||||
|
||||
int rad = 0;
|
||||
if (rf.radius() > 0)
|
||||
@ -1715,11 +1808,29 @@ void TReport_window::draw_field(const TReport_field& rf)
|
||||
case 'T':
|
||||
{
|
||||
advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad, off);
|
||||
xvt_dwin_set_font(win(), rf.font().get_xvt_font(*this));
|
||||
set_color(rf.fore_color(), rf.back_color());
|
||||
|
||||
TString str = rf.picture();
|
||||
advanced_draw_text_line(win(), str, r, rf.horizontal_alignment(), rf.vertical_alignment());
|
||||
const TString& str = rf.picture();
|
||||
if (str.full())
|
||||
{
|
||||
bool printed = false;
|
||||
xvt_dwin_set_font(win(), rf.font().get_xvt_font(*this));
|
||||
set_color(rf.fore_color(), rf.back_color());
|
||||
if (rf_rect.height() > 100 && rf_rect.width() > 100)
|
||||
{
|
||||
TParagraph_string para(str, rf_rect.width()/100);
|
||||
if (para.items() > 1)
|
||||
{
|
||||
TString_array text;
|
||||
FOR_EACH_TOKEN(para, line)
|
||||
text.add(line);
|
||||
const int d10rh = (r.bottom-r.top)*1000/rf_rect.height(); // Altezza standard di 10 righe di testo
|
||||
advanced_draw_paragraph(win(), text, r, rf.horizontal_alignment(), rf.vertical_alignment(), d10rh);
|
||||
printed = true;
|
||||
}
|
||||
}
|
||||
if (!printed)
|
||||
advanced_draw_text_line(win(), str, r, rf.horizontal_alignment(), rf.vertical_alignment());
|
||||
}
|
||||
}
|
||||
break;
|
||||
default :
|
||||
@ -1811,7 +1922,6 @@ void TReport_window::draw_bg()
|
||||
update_thumb(origin().x, origin().y - offset_y);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void TReport_window::update()
|
||||
@ -1820,9 +1930,9 @@ void TReport_window::update()
|
||||
draw_bg();
|
||||
draw_grid(); // Disegna griglia
|
||||
|
||||
const TRectangle rect_riga(0,0,1000,100);
|
||||
RCT rct_riga; TWindow::log2dev(rect_riga, rct_riga);
|
||||
_default_row_height = rct_riga.bottom - rct_riga.top;
|
||||
//const TReport_rct rect_riga(0,0,1000,100);
|
||||
//RCT rct_riga; rep2dev(rect_riga, rct_riga);
|
||||
//_default_row_height = rct_riga.bottom - rct_riga.top;
|
||||
|
||||
const TReport_section& rs = curr_section();
|
||||
for (int i = 0; i < rs.items(); i++)
|
||||
|
@ -133,5 +133,7 @@ short str2num(const TString& str);
|
||||
#define POPUP_PROPERTIES 20893
|
||||
#define POPUP_NEWFIELD 20894
|
||||
#define POPUP_SECTION 20895
|
||||
#define POPUP_GROUP 20896
|
||||
#define POPUP_UNGROUP 20897
|
||||
|
||||
#endif
|
||||
|
@ -422,7 +422,7 @@ void TFormer_mask::import_sections(TScanner& scan, TReport& rep)
|
||||
{
|
||||
if (type == 'F')
|
||||
{
|
||||
const TPoint abolute_footer_pos(0, -height);
|
||||
const TReport_pnt abolute_footer_pos(0, -height);
|
||||
cur_sec.set_pos(abolute_footer_pos);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user