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_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");