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_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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user