#include #include #include #include #include #include #include #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; }