Sistemata gestione stampanti Windows (ora mantiene le scelte fatte tra le

chiamate e setta la stampante WIndows default solo all'inizio)


git-svn-id: svn://10.65.10.50/trunk@175 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1994-09-07 10:33:20 +00:00
parent 2294e1e713
commit 9021a451e2

View File

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