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:
parent
2294e1e713
commit
9021a451e2
@ -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");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user