Files correlati : Ricompilazione Demo : [ ] Commento : Riportate le modifiche dalla versione 2.1 222 Si puo cominciare a fare il primo CD git-svn-id: svn://10.65.10.50/trunk@12708 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			186 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <applicat.h>
 | |
| #include <automask.h>
 | |
| #include <config.h>
 | |
| #include <defmask.h>
 | |
| #include <execp.h>
 | |
| #include <prefix.h>
 | |
| #include <sheet.h>
 | |
| 
 | |
| #include "mr2500.h"
 | |
| 
 | |
| class TMultiplan_mask : public TAutomask
 | |
| {
 | |
| protected:
 | |
|   bool build_profile_name(const TString& code, TFilename& profname) const;
 | |
| 
 | |
|   static int get_profile_desc(TConfig& cfg, void* jolly);
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
| 
 | |
|   static int set_profile(TConfig& cfg, void* jolly);
 | |
|   void loop();
 | |
| 
 | |
| public:
 | |
|   TMultiplan_mask() : TAutomask("mr2500") { }
 | |
|   virtual ~TMultiplan_mask() { }
 | |
| };
 | |
| 
 | |
| int TMultiplan_mask::get_profile_desc(TConfig& cfg, void* jolly)
 | |
| {
 | |
|   const int num = atoi(cfg.get_paragraph());
 | |
|   if (num > 0)
 | |
|   {
 | |
|     TString_array& p = *(TString_array*)jolly;
 | |
|     p.add(cfg.get("Description"));
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| struct TProfile_info
 | |
| {
 | |
|   TString80 _desc;
 | |
|   TString8 _code;
 | |
| };
 | |
| 
 | |
| int TMultiplan_mask::set_profile(TConfig& cfg, void* jolly)
 | |
| {
 | |
|   const TString para = cfg.get_paragraph();
 | |
|   const int num = atoi(para);
 | |
|   if (num > 0)
 | |
|   {
 | |
|     TProfile_info* pi = (TProfile_info*)jolly;
 | |
|     const TString& d1 = pi->_desc;
 | |
|     const TString& d2 = cfg.get("Description");
 | |
|     if (d1 == d2)
 | |
|     {
 | |
|       pi->_code = para;
 | |
|       return true;
 | |
|     }
 | |
|   }
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| void TMultiplan_mask::loop()
 | |
| {
 | |
|   TMask msk(TR("Elaborazione"), 1, 64, 5);
 | |
|   msk.add_string(101, 0, TR("Programma "), 1, 1, 50, "D");
 | |
|   msk.add_string(102, 0, TR("Profilo   "), 1, 2, 70, "D", 50);
 | |
|   msk.add_button(DLG_OK, 0, "", -12, -1, 12, 2);
 | |
|   msk.add_button(DLG_CANCEL, 0, "", -22, -1, 12, 2);
 | |
|  
 | |
|   TString cmd;
 | |
|   TFilename prof;
 | |
|   TSheet_field& sheet = sfield(F_SHEET);
 | |
|   FOR_EACH_SHEET_ROW(sheet, i, row)
 | |
|   {
 | |
|     const TString8 prg = row->get(0);
 | |
|     if (prg == "MRP")
 | |
|     {
 | |
|       msk.set(101, "M.R.P."); 
 | |
|       cmd = "mr2 -0";
 | |
|     } else
 | |
|     if (prg == "MSP")
 | |
|     {
 | |
|       msk.set(101, "M.S.P."); 
 | |
|       cmd = "mr2 -2";
 | |
|     } else
 | |
|     if (prg == "PIA")
 | |
|     {
 | |
|       msk.set(101, TR("Pianificazione Ordini"));
 | |
|       cmd = "mr2 -1";
 | |
|     }
 | |
|     msk.set(102, row->get(2));
 | |
| 
 | |
|     if (msk.run() == K_ESC)
 | |
|       break;
 | |
|     
 | |
|     if (build_profile_name(prg, prof))
 | |
|     {
 | |
|       TConfig cfg(prof);
 | |
|       TProfile_info pi;
 | |
|       pi._desc = row->get(2);
 | |
|       cfg.for_each_paragraph(set_profile, (void*)&pi);
 | |
|       if (pi._code.not_empty())
 | |
|         cfg.set(user(), pi._code, "Main");
 | |
|     }
 | |
| 
 | |
|     const char mode = row->get_char(1);
 | |
|     if (mode > ' ')
 | |
|       cmd << " /AUTO" << mode;
 | |
| 
 | |
|     TExternal_app app(cmd);
 | |
|     app.run();
 | |
|   }
 | |
| }
 | |
| 
 | |
| bool TMultiplan_mask::build_profile_name(const TString& code, TFilename& profname) const
 | |
| {
 | |
|   profname = ::firm2dir(-1);    // Directory dati
 | |
|   profname.add("config");       // Directory config
 | |
|   
 | |
|   if (code == "MRP")
 | |
|     profname.add("mr2100a"); else
 | |
|   if (code == "MSP")
 | |
|     profname.add("mr2300a"); else
 | |
|   if (code == "PIA")
 | |
|     profname.add("mr2200a");
 | |
| 
 | |
|   profname.ext("ini");
 | |
|   return profname.exist();
 | |
| }
 | |
|           
 | |
| bool TMultiplan_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
|   switch (o.dlg())
 | |
|   {
 | |
|   case 103:
 | |
|     if (e == fe_button)
 | |
|     {
 | |
|       TArray_sheet p(3, 3, -3, -3, "Profili", "Descrizione@60");
 | |
| 
 | |
|       TString_array& a = p.rows_array(); 
 | |
|  
 | |
|       const TString& code = o.mask().get(101);
 | |
|       TFilename profname;
 | |
|       if (build_profile_name(code, profname))
 | |
|       {
 | |
|         TConfig prof(profname);
 | |
|         a.destroy();
 | |
|         prof.for_each_paragraph(get_profile_desc, &a);
 | |
|         a.sort();
 | |
|         const int sel = a.find(o.get());
 | |
|         if (sel > 0)
 | |
|           p.select(sel);
 | |
|       }  
 | |
|       if (p.run() == K_ENTER)
 | |
|         o.set(p.row(-1));
 | |
|     }
 | |
|     break;
 | |
|   case DLG_ELABORA:
 | |
|     if (e == fe_button)
 | |
|       loop();
 | |
|     break;
 | |
|   default: break;
 | |
|   }
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| 
 | |
| class TMultiplan : public TSkeleton_application
 | |
| {
 | |
| protected:
 | |
|   virtual void main_loop();
 | |
| };
 | |
| 
 | |
| void TMultiplan::main_loop()
 | |
| {
 | |
|   TMultiplan_mask msk;
 | |
|   msk.run();
 | |
| }
 | |
| 
 | |
| int mr2500(int argc, char* argv[])
 | |
| {
 | |
|   TMultiplan a;
 | |
|   a.run(argc, argv, TR("Pianificazione automatica"));
 | |
|   return 0;
 | |
| }
 |