Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunta nuova stampa tabelle tramite report git-svn-id: svn://10.65.10.50/trunk@12163 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			217 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
#include <automask.h>
 | 
						|
#include <defmask.h>
 | 
						|
#include <execp.h>
 | 
						|
#include <printer.h>
 | 
						|
#include <reprint.h>
 | 
						|
#include <utility.h>
 | 
						|
 | 
						|
#include "ba8400.h"
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Utility
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
bool cod2app(const char* tok, TString& app)
 | 
						|
{
 | 
						|
  if (isalpha(tok[0]) && isalpha(tok[1]) && atoi(tok+2) > 1000)
 | 
						|
  {
 | 
						|
    app.strncpy(tok, 3);
 | 
						|
    app << " -" << char(tok[3]-1);
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
  return false;
 | 
						|
}
 | 
						|
 | 
						|
bool get_xml_attr(const TString& line, const char* attr, TString& value)
 | 
						|
{
 | 
						|
  TString str; str << ' ' << attr << "=\"";
 | 
						|
  const int pos = line.find(str);
 | 
						|
  if (pos >= 0)
 | 
						|
  {
 | 
						|
    const int apicia = line.find('"', pos)+1;
 | 
						|
    const int apicic = line.find('"', apicia);
 | 
						|
    if (apicic > apicia)
 | 
						|
    {
 | 
						|
      value = line.sub(apicia, apicic);
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return false;
 | 
						|
}
 | 
						|
 | 
						|
bool get_xml_child(const TString& line, const char* tag, TString& value)
 | 
						|
{
 | 
						|
  TString str; str << '<' << tag << '>';
 | 
						|
  const int pos = line.find(str);
 | 
						|
  if (pos >= 0)
 | 
						|
  {
 | 
						|
    const int apicia = line.find('>', pos)+1;
 | 
						|
    const int apicic = line.find('<', apicia);
 | 
						|
    if (apicic > apicia)
 | 
						|
    {
 | 
						|
      value = line.sub(apicia, apicic);
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return false;
 | 
						|
}
 | 
						|
 | 
						|
bool rep2app(const char* name, TString& app, TString& desc)
 | 
						|
{
 | 
						|
  app = desc = "";
 | 
						|
 | 
						|
  TFilename report_name(name);
 | 
						|
  report_name.ext("rep");
 | 
						|
  if (!report_name.custom_path())
 | 
						|
    return false;
 | 
						|
 | 
						|
  TToken_string libraries(50, ',');
 | 
						|
 | 
						|
  TString stringona;
 | 
						|
  TScanner scan(report_name);
 | 
						|
  for (int i = 0; i < 3 && scan.good(); i++) // Leggo solo le prime righe
 | 
						|
    stringona << scan.line();
 | 
						|
  get_xml_attr(stringona, "libraries", libraries);
 | 
						|
  get_xml_child(stringona, "description", desc);
 | 
						|
 | 
						|
  FOR_EACH_TOKEN(libraries, tok) if (strlen(tok) == 6)
 | 
						|
  {
 | 
						|
    if (cod2app(tok, app))
 | 
						|
      return true;
 | 
						|
  }
 | 
						|
 | 
						|
  cod2app(report_name.name(), app);
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TKlarkKent_mask
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TKlarkKent_mask : public TAutomask
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
						|
 | 
						|
public:
 | 
						|
  TKlarkKent_mask() : TAutomask("ba8500a") { }
 | 
						|
};
 | 
						|
 | 
						|
bool TKlarkKent_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
						|
{
 | 
						|
  switch (o.dlg())
 | 
						|
  {
 | 
						|
  case F_REPORT:
 | 
						|
    if (e == fe_button)
 | 
						|
    {
 | 
						|
      TArray_sheet a(-1, -1, 75, 20, "Report", "Nome@16|Progr.|Descrizione@50");
 | 
						|
      TString_array& arr = a.rows_array();
 | 
						|
      
 | 
						|
      list_files("*.rep", arr);
 | 
						|
      TFilename dir = firm2dir(-1); dir.add("custom"); dir.add("*.rep");
 | 
						|
      list_files(dir, arr);
 | 
						|
 | 
						|
      TString app, desc;
 | 
						|
      FOR_EACH_ARRAY_ROW(arr, i, row)
 | 
						|
      {
 | 
						|
        rep2app(*row, app, desc);
 | 
						|
        
 | 
						|
        TFilename n = *row; n = n.name(); n.ext("");
 | 
						|
        *row = n;
 | 
						|
        row->add(app);
 | 
						|
        row->add(desc);
 | 
						|
      }
 | 
						|
 | 
						|
      if (a.run() == K_ENTER)
 | 
						|
      {
 | 
						|
        o.set(a.row(-1).get(0));
 | 
						|
        e = fe_modify;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    if (e == fe_init || e == fe_modify)
 | 
						|
    {
 | 
						|
      TFilename name = o.get();
 | 
						|
      TString app, desc; 
 | 
						|
      const bool ok = rep2app(name, app, desc);
 | 
						|
      set(F_FORM, desc);
 | 
						|
      set(F_DOC, app);
 | 
						|
      enable(DLG_PRINT, ok);
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  case DLG_EDIT:
 | 
						|
    if (e == fe_button && !field(F_REPORT).empty())
 | 
						|
    {
 | 
						|
      TString str;
 | 
						|
      str << "ba8 -2 " << get(F_REPORT);
 | 
						|
      TExternal_app app(str);
 | 
						|
      app.run(true);
 | 
						|
    }
 | 
						|
    break;
 | 
						|
  default:
 | 
						|
    break;
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// TKlarkKent_app
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
 | 
						|
class TKlarkKent_app : public TSkeleton_application
 | 
						|
{
 | 
						|
protected:
 | 
						|
  virtual void main_loop();
 | 
						|
};
 | 
						|
 | 
						|
void TKlarkKent_app::main_loop()
 | 
						|
{
 | 
						|
  TString_array arr;
 | 
						|
  for (int i = 2; i < argc(); i++)
 | 
						|
    arr.add(argv(i));
 | 
						|
  if (arr.items() == 0)
 | 
						|
    arr.add(EMPTY_STRING);
 | 
						|
 | 
						|
  TReport_book book;
 | 
						|
  FOR_EACH_ARRAY_ROW(arr, r, row)
 | 
						|
  {  
 | 
						|
    TFilename report_name = *row;
 | 
						|
    report_name.ext("rep");
 | 
						|
    if (report_name.empty() || !report_name.custom_path()) 
 | 
						|
    {
 | 
						|
      TKlarkKent_mask m;
 | 
						|
      m.set(F_REPORT, report_name);
 | 
						|
      if (m.run() == K_ENTER)
 | 
						|
      {
 | 
						|
        report_name = m.get(F_REPORT);
 | 
						|
        report_name.custom_path();
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    TString appname, desc;
 | 
						|
    rep2app(report_name, appname, desc);
 | 
						|
    if (appname.not_empty())
 | 
						|
    {
 | 
						|
      appname << ' ' << report_name;
 | 
						|
      TExternal_app app(appname);
 | 
						|
      app.run(true);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      TReport rep; 
 | 
						|
      if (rep.load(report_name))
 | 
						|
        book.add(rep);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  if (book.pages() > 0)
 | 
						|
    book.print_or_preview();
 | 
						|
}
 | 
						|
 | 
						|
int ba8500(int argc, char* argv[])
 | 
						|
{     
 | 
						|
  TKlarkKent_app app;
 | 
						|
  app.run(argc, argv, TR("Stampa Report"));
 | 
						|
  return 0;
 | 
						|
}
 |