Modifiche varie a viswin, browfile, printer

git-svn-id: svn://10.65.10.50/trunk@771 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1994-12-16 10:24:34 +00:00
parent 1b2466f0cd
commit aadf264df4
5 changed files with 211 additions and 105 deletions

View File

@ -65,6 +65,13 @@ BEGIN
HELP "Dimensioni del carattere di stampa" HELP "Dimensioni del carattere di stampa"
END END
BOOLEAN MSK_1_ISGRAPHICS
BEGIN
PROMPT 4 8 "Stampa elementi grafici"
HELP "Indicare se stampare elementi grafici (linee, box, logo) quando la stampante lo consente"
END
LIST MSK_1_LINES 3 LIST MSK_1_LINES 3
BEGIN BEGIN
PROMPT 52 6 "Linee/Inch " PROMPT 52 6 "Linee/Inch "
@ -94,10 +101,9 @@ END
BOOLEAN MSK_1_ISGRAPHICS BOOLEAN MSK_1_ISGRAPHICS
BEGIN BEGIN
PROMPT 4 8 "Stampa elementi grafici" PROMPT 4 8 "Salva configurazione"
HELP "Indicare se stampare elementi grafici (linee, box, logo) quando la stampante lo consente" HELP "Indicare se stampare elementi grafici (linee, box, logo) quando la stampante lo consente"
END END
GROUPBOX DLG_NULL 74 4 GROUPBOX DLG_NULL 74 4
BEGIN BEGIN

View File

@ -1,64 +1,65 @@
#ifndef __BROWFILE_H #ifndef __BROWFILE_H
#define __BROWFILE_H #define __BROWFILE_H
#ifndef __MASK_H #ifndef __MASK_H
#include <mask.h> #include <mask.h>
#endif #endif
class TViswin; class TViswin;
// viene chiamato sia al semplice passaggio del cursore sul testo // viene chiamato sia al semplice passaggio del cursore sul testo
// (con doubleclick = FALSE) o alla pressione di tasti o balle per // (con doubleclick = FALSE) o alla pressione di tasti o balle per
// collegare (doubleclick = TRUE) // collegare (doubleclick = TRUE)
// se non ritorna NULL, il testo usato per linkare viene sostituito // se non ritorna NULL, il testo usato per linkare viene sostituito
// dal testo ritornato // dal testo ritornato
typedef const char* (*MASK_LINKHANDLER)(TMask&, int, const char*, bool doubleclick); typedef const char* (*MASK_LINKHANDLER)(TMask&, int, const char*, bool doubleclick);
class TBrowsefile_field : public TMask_field class TBrowsefile_field : public TMask_field
{ {
friend class TViswin; friend class TViswin;
TViswin* _viswin; TViswin* _viswin;
MASK_LINKHANDLER _lh; MASK_LINKHANDLER _lh;
TArray _links; TArray _links;
TArray _background; TArray _background;
bool _m_link; bool _m_link;
protected: protected:
virtual word class_id() const; virtual word class_id() const;
virtual void parse_head(TScanner& scanner); virtual void parse_head(TScanner& scanner);
virtual void create(WINDOW parent); virtual void create(WINDOW parent);
public: public:
TViswin* vis_win() const { return _viswin; } TViswin* vis_win() const { return _viswin; }
void add_line(const char* l); void add_line(const char* l);
void set_text(const char* file); long set_text(const char* file, const char* line = NULL);
// TBI posiziona su riga e colonna passate // TBI posiziona su riga e colonna passate
void goto_pos(long r, long c); void goto_pos(long r, long c);
void goto_top(); void goto_top();
void goto_end(); void goto_end();
void close(); void refresh();
void close();
// link processor
void set_link_handler(MASK_LINKHANDLER lh) { _lh = lh; } // link processor
MASK_LINKHANDLER get_link_handler() { return _lh; } void set_link_handler(MASK_LINKHANDLER lh) { _lh = lh; }
TArray& links() { return _links; } MASK_LINKHANDLER get_link_handler() { return _lh; }
void set_multiple_link(bool on) { _m_link = on; } TArray& links() { return _links; }
bool is_multiple_link() { return _m_link; } void set_multiple_link(bool on) { _m_link = on; }
int find_link(const char* descr); bool is_multiple_link() { return _m_link; }
int enable_link (const char* descr, char fg, char bg = 'w'); int find_link(const char* descr);
void disable_link(char fg, char bg = 'w'); int enable_link (const char* descr, char fg, char bg = 'w');
void disable_links() { _links.destroy(); } void disable_link(char fg, char bg = 'w');
void disable_links() { _links.destroy(); }
// print background
void set_background(const char* bg); // print background
TArray* get_bg_desc() { return &_background; } void set_background(const char* bg);
TArray* get_bg_desc() { return &_background; }
TBrowsefile_field(TMask* m);
virtual ~TBrowsefile_field(); TBrowsefile_field(TMask* m);
}; virtual ~TBrowsefile_field();
};
#endif
#endif

View File

@ -867,7 +867,8 @@ bool TPrinter::printrow(TPrintrow* rowtoprint)
if (_currentpage < _frompage || _currentpage > _topage) if (_currentpage < _frompage || _currentpage > _topage)
return TRUE; return TRUE;
TString rw (rowtoprint == NULL ? "" : (_printertype == screenvis || _printertype == winprinter ? TString rw (rowtoprint == NULL ? "" : (_printertype == screenvis || _printertype == winprinter ||
_printertype == export ?
rowtoprint->row_codified () : rowtoprint->row_codified () :
rowtoprint->row ())); rowtoprint->row ()));
rw.rtrim (); rw.rtrim ();
@ -912,7 +913,7 @@ bool TPrinter::printrow(TPrintrow* rowtoprint)
{ {
// add line to txt // add line to txt
if (!_frozen) if (!_frozen)
_txt.append (rw); _txt.append(rw);
return TRUE; return TRUE;
} }

View File

@ -47,10 +47,11 @@ extern "C"
#define K_SHIFT_RIGHT (K_SHIFT + K_RIGHT) #define K_SHIFT_RIGHT (K_SHIFT + K_RIGHT)
#define K_ALT_RIGHT (K_CTRL + 'K') #define K_ALT_RIGHT (K_CTRL + 'K')
#define K_ALT_LEFT (K_CTRL + 'L') #define K_ALT_LEFT (K_CTRL + 'L')
#define CTRL_C ('C') #define CTRL_C (K_CTRL + 'C')
#define CTRL_E ('E') #define CTRL_E (K_CTRL + 'E')
#define CTRL_S ('S') #define CTRL_S (K_CTRL + 'S')
#define CTRL_R ('R') #define CTRL_R (K_CTRL + 'R')
#define K_CTRLTAB (K_CTRL + K_TAB)
// vista la mania degli 883, eccoti un po' di concerti di Mozart // vista la mania degli 883, eccoti un po' di concerti di Mozart
const long E_ADDLINE = 488L; const long E_ADDLINE = 488L;
@ -90,13 +91,18 @@ void TViswin::exec_link()
stop_run(K_ENTER); stop_run(K_ENTER);
} }
} }
} // _toplevel } // _toplevel
set_focus(); if (_toplevel)
check_link(); {
_need_update = TRUE; set_focus();
force_update(); _inside_linkexec = TRUE;
do_events(); check_link();
check_link (&_point); _need_update = TRUE;
force_update();
do_events();
check_link (&_point);
_inside_linkexec = FALSE;
}
} // linkID != -1 } // linkID != -1
else beep(); else beep();
} }
@ -111,7 +117,16 @@ void TViswin::display_link (long y, long x1, long x2, const char *d)
#if XVT_OS == XVT_OS_WIN #if XVT_OS == XVT_OS_WIN
xvt_statbar_set(d); xvt_statbar_set(d);
#endif #endif
xvt_enable_control (_link_button, TRUE); if (_link_button != -1) xvt_enable_control (_link_button, TRUE);
if (!_toplevel && !_inside_linkexec)
{
// chiama l'handler per maschere con FALSE come terzo parametro
MASK_LINKHANDLER pl = _brwfld->_lh;
if (pl != NULL)
pl(_brwfld->mask(), _linkID,
_multiple ? (const char*)_multiple_link : (const char*)_linktxt, FALSE);
}
} }
} }
@ -126,7 +141,7 @@ void TViswin::erase_link (long y, long x1, long x2)
xvt_statbar_set (""); xvt_statbar_set ("");
xvt_statbar_refresh (); xvt_statbar_refresh ();
#endif #endif
xvt_enable_control (_link_button, FALSE); if (_link_button != -1) xvt_enable_control (_link_button, FALSE);
} }
} }
@ -241,15 +256,6 @@ bool TViswin::check_link (TPoint * p)
strcpy (descr, pdescr); strcpy (descr, pdescr);
display_link (y, x1, x2, descr); display_link (y, x1, x2, descr);
if (!_toplevel)
{
// chiama l'handler per maschere con FALSE come terzo parametro
MASK_LINKHANDLER pl = _brwfld->_lh;
if (pl != NULL)
pl(_brwfld->mask(), _linkID,
_multiple ? (const char*)_multiple_link : (const char*)_linktxt, FALSE);
}
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
@ -1518,12 +1524,25 @@ bool TViswin::on_key (KEY key)
if (_toplevel) if (_toplevel)
exec_link(); exec_link();
break; break;
case K_TAB: case K_CTRLTAB:
if (_curbut == (_buttons - 1)) if (!_toplevel)
_curbut = 0; _brwfld->mask().send_key(K_TAB,0);
else
_curbut++;
break; break;
case K_TAB:
if (!is_running())
{
_need_update = TRUE;
update();
}
else
{
if (_curbut == (_buttons - 1))
_curbut = 0;
else
_curbut++;
}
break;
case K_BTAB: case K_BTAB:
if (_curbut == 0) if (_curbut == 0)
_curbut = _buttons - 1; _curbut = _buttons - 1;
@ -1536,7 +1555,7 @@ bool TViswin::on_key (KEY key)
{ {
exec_link(); exec_link();
} }
else else if (_toplevel)
dispatch_e_char (_button[_curbut], K_SPACE); dispatch_e_char (_button[_curbut], K_SPACE);
break; break;
case K_LHOME: case K_LHOME:
@ -1852,8 +1871,52 @@ void TViswin::close_print ()
kill_timer (_wtimer); kill_timer (_wtimer);
_need_update = TRUE; _need_update = TRUE;
force_update (); force_update ();
}
void TViswin::goto_end()
{
goto_pos(0l, _txt.lines () - _textrows);
} }
void TViswin::goto_top()
{
goto_pos(0l,0l);;
}
void TViswin::goto_pos(long r, long c)
{
if (r >= _txt.lines() || c >= 256)
return;
check_link();
erase_point();
if (_isselection) erase_selection();
_point.x = c;
_point.y = r;
update_thumb (c,r);
check_link(&_point);
if (_isselection) display_selection();
display_point();
refresh();
}
void TViswin::refresh()
{
_need_update = TRUE;
force_update();
}
int TViswin::search(const char* txt, long from, bool down)
{
return -1l;
}
int TViswin::replace(long line, const char* txt, int pos, int len)
{
return 0;
}
TViswin ::TViswin (const char *fname, TViswin ::TViswin (const char *fname,
const char *title, const char *title,
bool editbutton, bool editbutton,
@ -1870,7 +1933,7 @@ TViswin ::TViswin (const char *fname,
_link_displayed (FALSE), _point_displayed (FALSE), _selecting (FALSE), _link_displayed (FALSE), _point_displayed (FALSE), _selecting (FALSE),
_scrolling (FALSE), _selflag (FALSE), _need_update (TRUE), _need_scroll (none), _scrolling (FALSE), _selflag (FALSE), _need_update (TRUE), _need_scroll (none),
_multiple (FALSE), _rulers(rulers), _multiple (FALSE), _rulers(rulers),
_frozen (FALSE), _brwfld(brwfld) _frozen (FALSE), _brwfld(brwfld), _link_button(-1)
{ {
if (title == NULL) if (title == NULL)
title = (fname ? fname : "Anteprima di stampa"); title = (fname ? fname : "Anteprima di stampa");
@ -1969,16 +2032,18 @@ TViswin ::TViswin (const char *fname,
_bg = _toplevel ? main_app().printer().getbgdesc() : _brwfld->get_bg_desc(); _bg = _toplevel ? main_app().printer().getbgdesc() : _brwfld->get_bg_desc();
_isbackground = _bg->items () > 0; _isbackground = _bg->items () > 0;
_formlen = _toplevel ? main_app().printer().formlen() : maxalt; _formlen = _toplevel ? main_app().printer().formlen() : maxalt;
_linkID = -1;
_inside_linkexec = FALSE;
for (i = 0; i < _links->items (); i++) for (i = 0; i < _links->items (); i++)
{ {
TToken_string & t = (TToken_string &) (*_links)[i]; TToken_string & t = (TToken_string &) (*_links)[i];
char f = *(t.get (1)); char f = *(t.get (1));
char b = *(t.get (2)); char b = *(t.get (2));
t.restart (); t.restart();
_txt.set_hotspots(f, b); _txt.set_hotspots(f, b);
} }
_hotspots = &(_txt.hotspots ()); _hotspots = &(_txt.hotspots());
} }
TViswin ::~TViswin () TViswin ::~TViswin ()
@ -2029,11 +2094,18 @@ void TBrowsefile_field::create(WINDOW parent)
} }
void TBrowsefile_field::set_text(const char* file) long TBrowsefile_field::set_text(const char* file, const char* line)
// se line != NULL ritorna il numero dell'ultima riga del file che
// comincia (trimmata) come passato; se non la trova ritorna -1
{ {
FILE* instr = fopen(file,"r"); FILE* instr = fopen(file,"r");
if (instr == NULL) if (instr == NULL)
error_box("File non trovato: %s", file); fatal_box("File non trovato: %s", file);
TString256 tmpp;
long ret = -1l;
long lines = 0l;
while (!feof(instr)) while (!feof(instr))
{ {
if (fgets(__tmp_string, sizeof (__tmp_string), instr) == NULL) if (fgets(__tmp_string, sizeof (__tmp_string), instr) == NULL)
@ -2041,8 +2113,18 @@ void TBrowsefile_field::set_text(const char* file)
if (__tmp_string[strlen(__tmp_string)-1] == '\n') if (__tmp_string[strlen(__tmp_string)-1] == '\n')
__tmp_string[strlen(__tmp_string)-1] = '\0'; __tmp_string[strlen(__tmp_string)-1] = '\0';
add_line(__tmp_string); add_line(__tmp_string);
if (line != NULL)
{
tmpp = __tmp_string;
if (tmpp.find(line) != -1)
ret = lines;
}
lines++;
} }
fclose(instr); fclose(instr);
_viswin->close_print();
return ret;
} }
int TBrowsefile_field::find_link(const char* descr) int TBrowsefile_field::find_link(const char* descr)
@ -2070,6 +2152,7 @@ int TBrowsefile_field::enable_link(const char *descr, char fg, char bg)
b[0] = bg; b[0] = bg;
tt->add(b); tt->add(b);
lnk = _links.add(tt); lnk = _links.add(tt);
_viswin->_txt.set_hotspots(fg, bg);
} }
return lnk; return lnk;
@ -2108,14 +2191,20 @@ void TBrowsefile_field::close()
void TBrowsefile_field::goto_pos(long r, long c) void TBrowsefile_field::goto_pos(long r, long c)
{ {
_viswin->goto_pos(r,c);
} }
void TBrowsefile_field::goto_top() void TBrowsefile_field::goto_top()
{ {
dispatch_e_char(_viswin->win(), K_END); _viswin->goto_top();
} }
void TBrowsefile_field::goto_end() void TBrowsefile_field::goto_end()
{ {
dispatch_e_char(_viswin->win(), K_HOME); _viswin->goto_end();
}
void TBrowsefile_field::refresh()
{
_viswin->refresh();
} }

View File

@ -83,6 +83,7 @@ class TViswin : public TScroll_window
bool _frozen; bool _frozen;
bool _toplevel; bool _toplevel;
bool _rulers; bool _rulers;
bool _inside_linkexec;
// viene istanziato soltanto se e' usata come controllo BROWSEFILE // viene istanziato soltanto se e' usata come controllo BROWSEFILE
TBrowsefile_field* _brwfld; TBrowsefile_field* _brwfld;
@ -139,8 +140,16 @@ public:
void abort_print(); void abort_print();
long lines() { return _txt.lines(); } long lines() { return _txt.lines(); }
void add_line(const char* l); void goto_end();
void goto_top();
void goto_pos(long,long);
void refresh();
void add_line(const char* l);
int search (const char* txt, long from = 0, bool down = FALSE);
int replace(long line, const char* txt, int pos = 0, int len = -1);
TViswin (const char* fname = NULL, TViswin (const char* fname = NULL,
const char* title = NULL, const char* title = NULL,
bool editbutton = TRUE, bool editbutton = TRUE,