diff --git a/include/printer.cpp b/include/printer.cpp index 8500de8d2..b4ad343db 100755 --- a/include/printer.cpp +++ b/include/printer.cpp @@ -673,12 +673,37 @@ _lines_per_inch (6), _ch_size (12) print_begin (); _print_rcd = get_print_rcd (&_print_rcd_size); set_win_formlen (); + + static char defPrinter[80]; + static char szDevice[50]; + + // get default printer driver + GetProfileString ("windows", "device", ",,,", defPrinter, sizeof(defPrinter)); + TString pdev (defPrinter); + GetProfileString ("devices", pdev, "", szDevice, sizeof(szDevice)); + pdev << "," << szDevice; + TToken_string dio (pdev, ','); + TToken_string pn2(1024); + + // get printer names + _get_windows_printer_names (pn2); + + // determine index of current default printer + for (int i = 0; i < pn2.items (); i++) + { + if (TString(dio.get(0)) == TString(pn2.get (i))) + { + _curprn = i; + break; + } + } + #else _isgraphics = FALSE; #endif } -TToken_string & TPrinter ::getprinternames () +TToken_string& TPrinter::getprinternames () { // per ora va solo in windows #if XVT_OS == XVT_OS_WIN @@ -687,8 +712,7 @@ TToken_string & TPrinter ::getprinternames () return _printer_names; } -void TPrinter :: -read_configuration (const char *conf) +void TPrinter::read_configuration (const char *conf) { FILE *cnfp = fopen (conf, "r"); @@ -732,7 +756,7 @@ read_configuration (const char *conf) TToken_string t (sc.line ()); int where_print = t.get_int (1); t = sc.line (); - _curprn = t.get_int (1); + _curprn = t.get_int(1); t = sc.line (); _printerfile = t.get (1); t = sc.line (); @@ -773,60 +797,53 @@ read_configuration (const char *conf) } } -TPrinter ::~TPrinter () +TPrinter::~TPrinter () { #if XVT_OS == XVT_OS_WIN print_end (); #endif } -const char *TPrinter :: -class_name () - const +const char* TPrinter::class_name () const { return "Printer"; } -word TPrinter ::class_id () - const +word TPrinter::class_id () const { return CLASS_PRINTER; } -TPrintrow *TPrinter ::getheaderline (int linetoget) +TPrintrow *TPrinter::getheaderline (int linetoget) { return ((TPrintrow *) _header.objptr (linetoget)); } -TPrintrow *TPrinter :: -getfooterline (int linetoget) +TPrintrow *TPrinter::getfooterline (int linetoget) { return ((TPrintrow *) _footer.objptr (linetoget)); } -void TPrinter :: -setheaderline (int linetoset, TPrintrow * line) +void TPrinter::setheaderline (int linetoset, TPrintrow * line) { _header.add (line, linetoset); if (linetoset >= _headersize) _headersize = linetoset + 1; } -void TPrinter :: -setheaderline (int linetoset, const TPrintrow & line) +void TPrinter::setheaderline (int linetoset, const TPrintrow & line) { TPrintrow *p = new TPrintrow (line); setheaderline (linetoset, p); } -void TPrinter :: -setfooterline (int linetoset, TPrintrow * line) +void TPrinter::setfooterline (int linetoset, TPrintrow* line) { _footer.add (line, linetoset); // if (linetoset >= _footersize) _footersize = linetoset+1; } -void TPrinter::setfooterline (int linetoset, const TPrintrow & line) +void TPrinter::setfooterline (int linetoset, const TPrintrow& line) { TPrintrow *p = new TPrintrow (line); setfooterline (linetoset, p); @@ -1124,23 +1141,29 @@ void TPrinter::set() int i; MainApp ()->disable_menu_item (M_FILE_PG_SETUP); + #if XVT_OS != XVT_OS_WIN + for (i = 0; i < _printers.items (); i++) { pn1.add (i); pn2.add (((PrinterDef &) _printers[i])._printername); - } + } + ((TList_field &) (mask.field (MSK_1_PRINTERS))).replace_items (pn1, pn2); - mask.hide (MSK_1_SETUP); - mask.hide (MSK_1_SIZE); - mask.hide (MSK_1_LINES); + mask.hide(MSK_1_SETUP); + mask.hide(MSK_1_SIZE); + mask.hide(MSK_1_LINES); + pn1 = ""; pn2 = ""; - for (i = 0; i < ((PrinterDef &) _printers[_curprn])._names.items (); i++) + + for (i = 0; i < ((PrinterDef &)_printers[_curprn])._names.items (); i++) { pn1.add (format ("%d", i)); - pn2.add ((TString &) ((PrinterDef &) _printers[_curprn])._names[i]); + pn2.add ((TString &)((PrinterDef &) _printers[_curprn])._names[i]); } + ((TList_field &) (mask.field (MSK_1_CODES))).replace_items (pn1, pn2); mask.set_handler (MSK_1_PRINTERS, printers_on_key); if (_printertype == fileprinter) @@ -1171,10 +1194,11 @@ void TPrinter::set() // get user choices - _curprn = atoi (mask.get (MSK_1_PRINTERS)); + _curprn = atoi(mask.get(MSK_1_PRINTERS)); + ((TPrint_application*)MainApp())->set_n_copies(atoi (mask.get (MSK_1_NPAGES))); - PrinterDef & def = (PrinterDef &) get_description (_curprn); - switch (atoi (mask.get (MSK_1_TYPE))) + PrinterDef& def = (PrinterDef &) get_description (_curprn); + switch (atoi(mask.get (MSK_1_TYPE))) { case 0: // stampante @@ -1208,36 +1232,36 @@ void TPrinter::set() #else - static char defPrinter[80]; - static char szDevice[50]; - int defIndex; + // static char defPrinter[80]; + // static char szDevice[50]; + // int defIndex; // get default printer driver - GetProfileString ("windows", "device", ",,,", defPrinter, sizeof (defPrinter)); - TString pdev (defPrinter); - GetProfileString ("devices", pdev, "", szDevice, sizeof (szDevice)); - pdev << "," << szDevice; - TToken_string dio (pdev, ','); + // GetProfileString ("windows", "device", ",,,", defPrinter, sizeof (defPrinter)); + // TString pdev (defPrinter); + // GetProfileString ("devices", pdev, "", szDevice, sizeof (szDevice)); + // pdev << "," << szDevice; + // TToken_string dio (pdev, ','); // get printer names _get_windows_printer_names (pn2); // determine index of current default printer - for (i = 0; i < pn2.items (); i++) - { - if (TString (dio.get (0)) == TString (pn2.get (i))) - { - defIndex = i; - break; - } - } - if (defIndex == pn2.items ()) - defIndex = 0; // should never happen + // for (i = 0; i < pn2.items (); i++) + // { + // if (TString (dio.get(0)) == TString(pn2.get (i))) + // { + // defIndex = i; + // break; + // } + // } + // if (defIndex == pn2.items ()) + // defIndex = 0; // should never happen for (i = 0; i < pn2.items (); i++) - pn1.add (i); + pn1.add(i); ((TList_field &) (mask.field (MSK_1_PRINTERS))).replace_items (pn1, pn2); - mask.set (MSK_1_PRINTERS, pn1.get (defIndex)); + mask.set (MSK_1_PRINTERS, pn1.get (_curprn)); mask.hide (MSK_1_CODES); mask.set (MSK_1_ISGRAPHICS, _isgraphics ? "X" : ""); mask.set (MSK_1_SIZE, format ("%d", _ch_size)); @@ -1254,7 +1278,9 @@ void TPrinter::set() mask.set_handler (MSK_1_PRINTERS, set_windows_print_device); mask.reset (MSK_1_SAVE); - KEY k; + KEY k; + int oldprn = _curprn; + while ((k = mask.run ()) != K_ESC && k != K_ENTER) { if (k == MSK_1_SETUP) @@ -1264,16 +1290,15 @@ void TPrinter::set() if (page_setup_dlg (_print_rcd)) { // see if user has changed printer - int dIndex; // determine index of currently selected printer // ACTHUNG! Deep hacking of XVT internals! NON PORTABLE! for (i = 0; i < pn2.items (); i++) - if (strcmp ((const char *) (_print_rcd + 4), pn2.get (i)) == 0) + if (strcmp((const char *)(_print_rcd + 4), pn2.get (i)) == 0) { - dIndex = i; + _curprn = i; break; } - mask.set (MSK_1_PRINTERS, pn1.get (dIndex)); + mask.set (MSK_1_PRINTERS, pn1.get(_curprn)); set_win_formlen (); } mask.set_focus (); @@ -1288,11 +1313,14 @@ void TPrinter::set() // WriteProfileString("windows","device", pdev); if (_print_rcd != NULL) free_print_rcd (_print_rcd); - _print_rcd = get_print_rcd (&_print_rcd_size); + _curprn = oldprn; + _print_rcd = get_print_rcd(&_print_rcd_size); set_win_formlen (); return; } + _curprn = atoi(mask.get(MSK_1_PRINTERS)); + if (mask.get (MSK_1_SAVE).not_empty ()) { TString s ("printer.def");