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