From 18ef8c0a4d9dd4142a8b70f73616898aa8fd122d Mon Sep 17 00:00:00 2001 From: guy Date: Wed, 18 Jun 2003 08:05:42 +0000 Subject: [PATCH] Patch level : 500 Files correlati : Ricompilazione Demo : [ ] Commento : AO20063 Su Win98 se scelgo una stampante Generica / solo testo come dimensione carattere mi riporta solo 0. git-svn-id: svn://10.65.10.50/trunk@11238 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/bagn001a.uml | 31 +-- include/controls.cpp | 30 ++- include/controls.h | 1 - include/msksheet.cpp | 5 +- include/printer.cpp | 489 ++++++++++++++++++++++++------------------- include/printer.h | 16 +- 6 files changed, 311 insertions(+), 261 deletions(-) diff --git a/include/bagn001a.uml b/include/bagn001a.uml index bca4c607a..6a3fa1297 100755 --- a/include/bagn001a.uml +++ b/include/bagn001a.uml @@ -7,35 +7,17 @@ BEGIN PROMPT 2 1 "Stampa su..." HELP "Selezionare il tipo dove direzionare la stampa" ITEM "0|Stampante" - MESSAGE HIDE,MSK_FILENAME - MESSAGE SHOW,MSK_PRINTERS|ENABLE,MSK_PRINTERS - MESSAGE ENABLE,MSK_SIZE - MESSAGE ENABLE,MSK_LINES - MESSAGE ENABLE,MSK_FONT - MESSAGE ENABLE,DLG_SETPRINT + MESSAGE SHOW,MSK_PRINTERS|HIDE,MSK_FILENAME ITEM "2|Visualizzazione" - MESSAGE HIDE,MSK_FILENAME - MESSAGE SHOW,MSK_PRINTERS|DISABLE,MSK_PRINTERS - MESSAGE DISABLE,MSK_SIZE - MESSAGE DISABLE,MSK_LINES - MESSAGE DISABLE,MSK_FONT - MESSAGE DISABLE,DLG_SETPRINT + MESSAGE SHOW,MSK_PRINTERS|HIDE,MSK_FILENAME ITEM "1|File su disco" - MESSAGE SHOW,MSK_FILENAME - MESSAGE HIDE,MSK_PRINTERS - MESSAGE DISABLE,MSK_SIZE - MESSAGE DISABLE,MSK_LINES - MESSAGE DISABLE,MSK_FONT - MESSAGE DISABLE,DLG_SETPRINT + MESSAGE HIDE,MSK_PRINTERS|SHOW,MSK_FILENAME FLAGS "Z" END LIST MSK_PRINTERS 50 BEGIN - /* viene riempito a run-time con nomi letti da config */ PROMPT 4 5 "Stampante " - HELP "Selezionare il tipo di stampante desiderata" - FLAGS "G" END STRING MSK_FILENAME 52 @@ -44,14 +26,12 @@ BEGIN CHECKTYPE REQUIRED VALIDATE FILENAME_FUNC FLAGS "A" - HELP "Nome del file in cui memorizzare la stampa" WARNING "E' necessario specificare un nome di file" END LIST MSK_FONT 32 BEGIN PROMPT 4 6 "Font " - HELP "Font di stampa su video o stampante" ITEM "Courier|Courier" END @@ -59,7 +39,6 @@ LIST MSK_SIZE 3 BEGIN PROMPT 53 6 "Carattere " ITEM "10|10" - HELP "Dimensioni del carattere di stampa" END LIST MSK_LINES 3 @@ -72,20 +51,16 @@ BEGIN ITEM "8|8" ITEM "9|9" ITEM "10|10" - HELP "Numero di linee per pollice" END BOOLEAN MSK_ISGRAPHICS BEGIN PROMPT 4 8 "Stampa elementi grafici" - HELP "Indicare se stampare elementi grafici (linee, box, logo) quando la stampante lo consente" END BUTTON DLG_SETPRINT 10 2 BEGIN PROMPT -14 -1 "~Imposta" - HELP "Chiama l'Impostazione Stampante di Windows" - MESSAGE EXIT,DLG_SETPRINT PICTURE 165 END diff --git a/include/controls.cpp b/include/controls.cpp index df904ef79..829732525 100755 --- a/include/controls.cpp +++ b/include/controls.cpp @@ -1979,18 +1979,19 @@ void TDropDownList::close() if (_open) { _open = FALSE; - if (_xi_lst) - { + if (_xi_lst != NULL) xvt_vobj_set_visible((WINDOW)xi_get_window(_xi_lst->itf), FALSE); - xvt_dwin_update((WINDOW)xi_get_window(_obj->itf)); - } } } void TDropDownList::destroy() { - _xi_lst = NULL; - _open = FALSE; + close(); + if (_xi_lst != NULL) + { + xvt_vobj_destroy((WINDOW)xi_get_window(_xi_lst->itf)); + _xi_lst = NULL; + } } bool TDropDownList::select(int i, bool force) @@ -2071,8 +2072,14 @@ bool TDropDownList::select_by_ofs(int i) void TDropDownList::set_values(const char* c, const char* v) { + const int old_items = _codes.items(); + _codes = c; _values = v; + + const int new_items = _codes.items(); + if (new_items != old_items && _xi_lst != NULL) + destroy(); } int TDropDownList::calc_min_width() @@ -2089,7 +2096,8 @@ int TDropDownList::calc_min_width() void TDropDownList::create() { - if (_xi_lst) return; + if (_xi_lst != NULL) + return; XI_OBJ_DEF* itfdef = xi_create_itf_def(ITF_CID+1, (XI_EVENT_HANDLER)ddl_str_eh, NULL, "", (long)this); @@ -2183,13 +2191,13 @@ void TDropDownList::create() void TDropDownList::open() { - if (_xi_lst) + if (_open) + return; + + if (_xi_lst != NULL) xvt_vobj_set_visible((WINDOW)xi_get_window(_xi_lst->itf), TRUE); else create(); - - if (_open) - return; _open = TRUE; xi_cell_request(_xi_lst); diff --git a/include/controls.h b/include/controls.h index f1b3572a5..8be85f22c 100755 --- a/include/controls.h +++ b/include/controls.h @@ -323,7 +323,6 @@ public: virtual ~TDropDownList(); }; - class TListbox_control : public TField_control { TDropDownList* _ddl; diff --git a/include/msksheet.cpp b/include/msksheet.cpp index 9341c4653..dc761f71f 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -1,3 +1,5 @@ +#include + #define XI_INTERNAL #include @@ -6,7 +8,6 @@ extern "C" #include } -#include #include #include #include @@ -1068,7 +1069,7 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev) case CLASS_LIST_FIELD: break; // Leave code as is case CLASS_BOOLEAN_FIELD: - if (*src == ' ') + if (*src <= ' ') xiev->v.cell_request.icon_rid = ICO_CHECK_OFF; else xiev->v.cell_request.icon_rid = ICO_CHECK_ON; diff --git a/include/printer.cpp b/include/printer.cpp index 8b54c0a7d..8900bc07b 100755 --- a/include/printer.cpp +++ b/include/printer.cpp @@ -1,7 +1,7 @@ #include +#include #include #include -#include #include #include #include @@ -15,6 +15,202 @@ HIDDEN TPrinter* _printer = NULL; +/////////////////////////////////////////////////////////// +// Maschera impostazione stampante (fatta come si deve dopo 10 anni!) +/////////////////////////////////////////////////////////// + +class TPrinter_setup_mask : public TAutomask +{ +private: + bool _skip_events; + + TString _pdev, _font; + PRINT_RCD* _pcd; + int _pcd_size; + +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + + void fill_font_list(); + void fill_size_list(); + +public: + void set_print_rcd(PRINT_RCD* pcd, int size); + PRINT_RCD* get_print_rcd(int& size) const; + + TPrinter_setup_mask(); + virtual ~TPrinter_setup_mask(); +}; + +void TPrinter_setup_mask::set_print_rcd(PRINT_RCD* pcd, int size) +{ + _pcd = pcd; + _pcd_size = size; + _pdev = ((const char*)pcd)+4; +} + +PRINT_RCD* TPrinter_setup_mask::get_print_rcd(int& size) const +{ + size = _pcd_size; + return _pcd; +} + +void TPrinter_setup_mask::fill_font_list() +{ + const int MAX_FAMILIES = 128; + char* family[MAX_FAMILIES]; + const int num_families = (int)xvt_fmap_get_families(_pcd, family, MAX_FAMILIES); + + TToken_string fn(256); + for (int i = 0; i < num_families; i++) + { + fn.add(family[i]); + xvt_mem_free(family[i]); + } + TList_field& lst = (TList_field&)field(MSK_FONT); + lst.replace_items(fn, fn); + + set(MSK_FONT, _font, 0x1); +} + +void TPrinter_setup_mask::fill_size_list() +{ + const int MAXSIZES = 16; + long sizes[MAXSIZES]; + BOOLEAN scalable; + + const int num_sizes = (int)xvt_fmap_get_family_sizes(_pcd, _font.get_buffer(), sizes, &scalable, MAXSIZES); + + TToken_string pn1; + if (scalable) + { + for (int i = 4; i <= 32; i++) + pn1.add(i); + } + else + { + if (num_sizes > 0) + { + for (int i = 0; i < num_sizes; i++) + pn1.add(sizes[i]); + } + else + pn1.add(printer().get_char_size()); // semper better than nothing + } + + TList_field& lst = (TList_field&)field(MSK_SIZE); + const TString8 old_size = lst.get(); + lst.replace_items(pn1, pn1); + lst.set(old_size); +} + +bool TPrinter_setup_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + if (_skip_events) + return TRUE; + + switch (o.dlg()) + { + case MSK_PRINTERS: + if (fe_modify) + { + const TString& pdev = o.get(); // Nome stampante corrente + if (pdev != _pdev) + { + TWait_cursor hourglass; + if (_pcd != NULL) + xvt_print_destroy(_pcd); + _pcd = xvt_print_create_by_name(&_pcd_size, pdev); + _pdev = pdev; + fill_font_list(); + } + } + break; + case MSK_FONT: + if (e == fe_modify) + { + TWait_cursor hourglass; + const TString& family = o.get(); + if (_font != family) + { + _font = family; + fill_size_list(); + } + } + break; + case DLG_SETPRINT: + if (e == fe_button) + { + if (xvt_dm_post_page_setup(_pcd)) + { + // see if user has changed printer + // determine index of currently selected printer + // ACTHUNG! Deep hacking of XVT internals! NON PORTABLE! + const char* name = (const char *)(_pcd) + 4; + set(MSK_PRINTERS, name, 0x1); + } + } + break; + default: + break; + } + return TRUE; +} + +TPrinter_setup_mask::TPrinter_setup_mask() + : TAutomask("bagn001a") +{ + TPrinter& pr = printer(); + set(MSK_FILENAME, pr.get_printerfile()); + + const bool can_save = pr._config == "Printer"; + enable(DLG_OK, can_save); + + set_print_rcd(pr._print_rcd, pr._print_rcd_size); + + // Crea la lista delle stampanti + TToken_string pn2; + SLIST plist = xvt_print_list_devices(); + for (SLIST_ELT pitem = xvt_slist_get_first(plist); + pitem != NULL; pitem = xvt_slist_get_next(plist, pitem)) + { + const char* pname = xvt_slist_get(plist, pitem, NULL); + pn2.add(pname); + } + xvt_slist_destroy(plist); + + _skip_events = TRUE; + + TList_field& plst = (TList_field&)field (MSK_PRINTERS); + plst.replace_items(pn2, pn2); // Genera printer list + + set(MSK_PRINTERS, pr._prname); // Genera font e size list + set(MSK_FONT, _font = pr._fontname); + set(MSK_SIZE, pr._ch_size); + set(MSK_LINES, pr._lines_per_inch); + set(MSK_ISGRAPHICS, pr._isgraphics ? "X" : ""); + + if (pr._printertype == fileprinter) + set (MSK_TYPE, "1"); + else if (pr._printertype == screenvis) + set(MSK_TYPE, "2"); + else + set(MSK_TYPE, "0"); + + fill_font_list(); + fill_size_list(); + + _skip_events = FALSE; +} + +TPrinter_setup_mask::~TPrinter_setup_mask() +{ +} + +/////////////////////////////////////////////////////////// +// TPrinter +/////////////////////////////////////////////////////////// + TPrinter& printer() { if (_printer == NULL) @@ -869,11 +1065,29 @@ TPrintrow& TPrintrow::put(const char *str, int position, int len) void TPrinter::set_printrcd() { if (_print_rcd != NULL) + { xvt_print_destroy(_print_rcd); - _print_rcd = xvt_print_create(&_print_rcd_size); - - if (!xvt_print_is_valid(_print_rcd)) - error_box("Errore di inizializzazione della stampante"); + _print_rcd = NULL; + _print_rcd_size = 0; + } + + bool ok = false; + if (_prname.not_empty()) + { + _print_rcd = xvt_print_create_by_name(&_print_rcd_size, _prname); + ok = xvt_print_is_valid(_print_rcd) != 0; + if (!ok) + error_box(FR("Errore di inizializzazione della stampante %s"), (const char*)_prname); + } + if (!ok) + { + _print_rcd = xvt_print_create(&_print_rcd_size); + ok = xvt_print_is_valid(_print_rcd) != 0; + if (ok) + _prname = ((const char*)_print_rcd)+4; + else + error_box(TR("Errore di inizializzazione della stampante corrente")); + } } PRINT_RCD* TPrinter::get_printrcd(int *size) @@ -933,82 +1147,6 @@ void TPrinter::init_formlen( } } -// Handler della maschera di setup -HIDDEN bool set_windows_print_device (TMask_field& f, KEY key) -{ - TMask& m = f.mask(); - - if (key == K_TAB && (f.focusdirty() || !m.is_running())) - { - TWait_cursor hourglass; - - TPrinter& pr = printer(); - const TString& pdev = f.get(); // Nome stampante corrente - xvt_print_set_default_device(pdev); - if (m.is_running()) - { - pr.set_printrcd(); - pr.init_formlen(); - } - - const int MAX_FAMILIES = 128; - char* family[MAX_FAMILIES]; - const int num_families = (int)xvt_fmap_get_families(pr.get_printrcd(), family, MAX_FAMILIES); - TToken_string fn(256); - - for (int i = 0; i < num_families; i++) - { - fn.add(family[i]); - xvt_mem_free(family[i]); - } - TList_field& lst = (TList_field&)m.field(MSK_FONT); - - lst.replace_items(fn, fn); - - m.set(MSK_FONT, printer().fontname(), TRUE); - } - return TRUE; -} - -HIDDEN bool font_handler(TMask_field& f, KEY key) -{ - TMask& m = f.mask(); - - if (key == K_TAB && (f.focusdirty() || !m.is_running())) - { - TWait_cursor hourglass; - - const char* family = f.get(); - const int MAXSIZES = 16; - long sizes[MAXSIZES]; - BOOLEAN scalable; - const int num_sizes = (int)xvt_fmap_get_family_sizes(printer().get_printrcd(), - (char*)family, sizes, &scalable, MAXSIZES); - - TToken_string pn1(80); - - if (scalable) - { - for (int i = 4; i <= 32; i++) - pn1.add(i); - } - else - { - if (num_sizes > 0) - { - for (int i = 0; i < num_sizes; i++) - pn1.add(sizes[i]); - } - else pn1.add(printer().get_char_size()); - } - - TList_field& lst = (TList_field&)f.mask().field(MSK_SIZE); - lst.replace_items(pn1, pn1); - lst.set(format("%d", printer().get_char_size())); - } - return TRUE; -} - TPrinter::TPrinter() : _date (TODAY), _multiple_link (FALSE), _frozen (FALSE), _isgraphics (TRUE), _lines_per_inch (6), _ch_size (12), _export_header(FALSE), @@ -1032,7 +1170,7 @@ TPrinter::TPrinter() _footersize = 0; _isopen = FALSE; - xvt_print_get_default_device(_defPrinter.get_buffer(), _defPrinter.size()); +// xvt_print_get_default_device(_defPrinter.get_buffer(), _defPrinter.size()); // read configuration file read_configuration (); @@ -1076,7 +1214,7 @@ void TPrinter::read_configuration( _prname = iniptr->get("Name", NULL, -1, _defPrinter); // Nome stampante corrente _printerfile = iniptr->get("File", NULL, -1, ""); // File di stampa _fontname = iniptr->get("Font", NULL, -1, XVT_FFN_FIXED); // Nome del font - _ch_size = iniptr->get_int("Size", NULL, -1, 12); // Dimensione del font + _ch_size = iniptr->get_int("Size", NULL, -1, 10); // Dimensione del font _lines_per_inch = iniptr->get_int("Lines", NULL, -1, 6); // Linee per pollice _isgraphics = iniptr->get_bool("Graphic", NULL, -1, TRUE); // Grafica attiva @@ -1089,8 +1227,16 @@ void TPrinter::read_configuration( xvt_sys_get_host_name(hostname, sizeof(hostname)); read_rcd = (host == hostname); // Safe to read if (!read_rcd) - read_rcd = yesno_box("Le impostazioni della stampante sono relative alla stazione di lavoro %s:\n" - "si desidera applicarle ugualmente alla stazione %s?", (const char*)host, hostname); + { + read_rcd = yesno_box(FR("Attenzione: le impostazioni della stampante sono relative alla stazione di lavoro %s.\n" + "Si desidera utilizzarle ugualmente sulla stazione %s?"), (const char*)host, hostname); + if (!read_rcd) + { + // Forza la lettura parametri della stampante di default + _prname.cut(0); + set_printrcd(); + } + } } if (read_rcd) @@ -1099,7 +1245,7 @@ void TPrinter::read_configuration( xvt_print_destroy(_print_rcd); _print_rcd = xvt_print_create_by_name(&_print_rcd_size, _prname); - if (_print_rcd != NULL && iniptr->exist("rcd", 0)) + if (xvt_print_is_valid(_print_rcd) && iniptr->exist("rcd", 0)) { TToken_string s(256); int i = 0; @@ -1139,24 +1285,15 @@ void TPrinter::read_configuration( } if (_config == "Printer" || _printertype == winprinter) + { switch (what) { - case 0: - case 5: - _printertype = winprinter; - break; - case 1: // file - _printertype = fileprinter; - break; - case 4: // video - _printertype = screenvis; - break; - case 6: // export - _printertype = export; - break; - default: - break; + case 1: _printertype = fileprinter; break; + case 2: _printertype = screenvis; break; + case 3: _printertype = export; break; + default: _printertype = winprinter; break; } + } } @@ -1175,12 +1312,10 @@ void TPrinter::save_configuration() prini.set("Lines", _lines_per_inch); // Linee per pollice prini.set("Graphic", _isgraphics ? "X" : ""); // Grafica attiva -#ifdef XVAGA char hostname[80]; xvt_sys_get_host_name(hostname, sizeof(hostname)); prini.set("Host", hostname); prini.set("User", user()); -#endif int n = 0, index = 0; TToken_string val(256); @@ -1211,7 +1346,7 @@ TPrinter::~TPrinter () xvt_print_destroy(_print_rcd); _print_rcd = NULL; } - xvt_print_set_default_device(_defPrinter); +// xvt_print_set_default_device(_defPrinter); } const char* TPrinter::class_name() const @@ -1532,7 +1667,7 @@ void TPrinter::reset() bool TPrinter::open() { - xvt_print_set_default_device(_prname); +// xvt_print_set_default_device(_prname); if (_printertype == screenvis) { @@ -1557,122 +1692,56 @@ bool TPrinter::open() return _isopen = TRUE; } - bool TPrinter::set() { - main_app().disable_menu_item (M_FILE_PG_SETUP); - - TMask mask("bagn001a"); - - mask.set(MSK_FILENAME, _printerfile); - - const bool can_save = _config == "Printer"; - mask.enable(DLG_OK, can_save); - - // Crea la lista delle stampanti - TToken_string pn2; - SLIST plist = xvt_print_list_devices(); - for (SLIST_ELT pitem = xvt_slist_get_first(plist); - pitem != NULL; pitem = xvt_slist_get_next(plist, pitem)) - { - const char* pname = xvt_slist_get(plist, pitem, NULL); - pn2.add(pname); - } - xvt_slist_destroy(plist); - - TList_field& plst = (TList_field&)mask.field (MSK_PRINTERS); - plst.replace_items(pn2, pn2); // Genera printer list - - mask.set(MSK_PRINTERS, _prname); // Genera font list - set_windows_print_device(mask.field(MSK_PRINTERS), K_TAB); - - mask.set(MSK_FONT, _fontname); // Genera size list - font_handler(mask.field(MSK_FONT),K_TAB); - - mask.set(MSK_SIZE, _ch_size); - mask.set(MSK_LINES, _lines_per_inch); - mask.set(MSK_ISGRAPHICS, _isgraphics ? "X" : ""); - - mask.set_handler(MSK_PRINTERS, set_windows_print_device); - mask.set_handler(MSK_FONT, font_handler); - - if (_printertype == fileprinter) - mask.set (MSK_TYPE, "1"); - else if (_printertype == screenvis) - mask.set (MSK_TYPE, "2"); - else - mask.set (MSK_TYPE, "0"); + main_app().disable_menu_item(M_FILE_PG_SETUP); const TString oldprn = _prname; - PRINT_RCD* rcd = get_printrcd(); - - const int old_rcd_size = _print_rcd_size; + int old_rcd_size; + PRINT_RCD* rcd = get_printrcd(&old_rcd_size); TString oldrcd(old_rcd_size); memcpy(oldrcd.get_buffer(), rcd, old_rcd_size); - - KEY k; - while ((k = mask.run()) != K_ESC && k != K_ENTER && k != K_INS) - { - if (k == DLG_SETPRINT) - { - // l'handler setta default di windows a quella nel listbox e ribecca l'rcd - if (xvt_dm_post_page_setup(get_printrcd())) - { - // see if user has changed printer - // determine index of currently selected printer - // ACTHUNG! Deep hacking of XVT internals! NON PORTABLE! - _prname = (const char *)(get_printrcd()) + 4; - if (_prname.blank()) - _prname = oldprn; - - mask.set(MSK_PRINTERS, _prname); - } - } - } + + TPrinter_setup_mask mask; + const KEY k = mask.run(); + _print_rcd = mask.get_print_rcd(_print_rcd_size); if (k == K_ESC) { - // riaggiusta stampante default windows come prima - // curprn e rcd sono quelle di prima - main_app().enable_menu_item(M_FILE_PG_SETUP); - xvt_print_set_default_device(oldprn); - _prname = oldprn; - PRINT_RCD* rcd = get_printrcd(); - memcpy(rcd, (const char *)oldrcd, old_rcd_size); - init_formlen(); - return FALSE; + xvt_print_destroy(_print_rcd); + _print_rcd = xvt_print_create_by_name(&_print_rcd_size, oldprn); + memcpy(_print_rcd, oldrcd, _print_rcd_size); } - - _prname = mask.get(MSK_PRINTERS); - - switch (atoi (mask.get (MSK_TYPE))) + else { - case 0: // stampante - _printertype = winprinter; - break; - case 1: // file - _printertype = fileprinter; - _printerfile = mask.get (MSK_FILENAME); - break; - case 2: // video - _printertype = screenvis; - break; - } + _prname = mask.get(MSK_PRINTERS); - _fontname = mask.get(MSK_FONT); + switch (atoi (mask.get (MSK_TYPE))) + { + case 1: // file + _printertype = fileprinter; + _printerfile = mask.get (MSK_FILENAME); + break; + case 2: // video + _printertype = screenvis; break; + default: // stampante + _printertype = winprinter; break; + } + + _fontname = mask.get(MSK_FONT); - const int cs = mask.get_int(MSK_SIZE); - if (cs > 4) _ch_size = cs; + const int cs = mask.get_int(MSK_SIZE); + if (cs > 4) _ch_size = cs; - _lines_per_inch = mask.get_int (MSK_LINES); - _isgraphics = mask.get_bool (MSK_ISGRAPHICS); - init_formlen (); + _lines_per_inch = mask.get_int (MSK_LINES); + _isgraphics = mask.get_bool (MSK_ISGRAPHICS); + init_formlen (); - if (k == K_INS) - save_configuration(); + if (k == K_INS) + save_configuration(); + } main_app().enable_menu_item (M_FILE_PG_SETUP); - return TRUE; } @@ -1780,7 +1849,7 @@ void TPrinter::close () { if (_exportfile.not_empty() && _txt.lines() > 0L) { - ofstream txt((const char*)_exportfile); + ofstream txt(_exportfile); for (long i = 0; i < _txt.lines(); i++) txt << _txt.line_formatted(i) << '\n'; txt.close(); @@ -1789,20 +1858,20 @@ void TPrinter::close () else if (_printertype == winprinter && _txt.lines() > 0L) { print_txt(_txt); - xvt_print_set_default_device(_defPrinter); +// xvt_print_set_default_device(_defPrinter); } else if (_printertype == fileprinter) { FILE* fp = fopen(_printerfile, _appendfile ? "a" : "w"); if (fp == NULL) { - error_box("Impossibile aprire il file %s", (const char*)_printerfile); + error_box(FR("Impossibile aprire il file %s"), (const char*)_printerfile); return; } for (long i = 0; i < _txt.lines(); i++) fprintf(fp,"%s\n", _txt.line(i)); fclose(fp); - message_box("Stampa su file terminata. Nome archivio: %s",(const char *)_printerfile); + message_box(FR("Stampa su file terminata. Nome archivio: %s"),(const char *)_printerfile); } if (_finker) @@ -1957,11 +2026,9 @@ HIDDEN BOOLEAN calc_font_callback(long data) return win != NULL_WIN; } -HIDDEN -BOOLEAN calc_cols_callback(long data) +HIDDEN BOOLEAN calc_cols_callback(long data) { int &numcols=*(int *)data; - // Create print window WINDOW win = xvt_print_create_win(printer().get_printrcd(), "Calcolo numero colonne"); diff --git a/include/printer.h b/include/printer.h index 1b72e72d6..71a93bb8a 100755 --- a/include/printer.h +++ b/include/printer.h @@ -34,14 +34,11 @@ enum TPrintstyle // @enum TPrtype | Indica il tipo di stampante da utilizzare per la stampa enum TPrtype { - normprinter = 0, // @emem Stampa su stampante normale + winprinter = 0, // @emem Stampa su stampante normale fileprinter = 1, // @emem Stampa su file - spoolprinter = 2, // @emem Stampa utilizzando lo spool - localprinter = 3, // @emem Stampa su la stampante locale - screenvis = 4, // @emem Anteprima a video - winprinter = 5, // @emem Stampa su stampante definita da Windows - export = 6 // @emem Esporatzione di stampa - }; + screenvis = 2, // @emem Anteprima a video + export = 3 // @emem Esporatzione di stampa +}; // @doc EXTERNAL @@ -190,6 +187,8 @@ class TPrinter : public TObject // @access:(INTERNAL) Private Member { + friend class TPrinter_setup_mask; + // @cmember:(INTERNAL) Puntatore al file di configurazione FILE* _cnfptr; // @cmember:(INTERNAL) Puntatore al file della stampante @@ -530,8 +529,9 @@ public: void set_printtype(TPrtype dest) { _printertype=dest; } // @cmember Setta il nome del file per la stampa su disco - void set_printerfile(const char * ffile) + void set_printerfile(const char* ffile) { _printerfile=ffile; } + const TFilename& get_printerfile() const { return _printerfile; } // @cmember Setta il flag per la stampa in coda al file su disco void set_append(const bool append = TRUE) { _appendfile = append; }