campo-sirio/mr/mr2500.cpp

186 lines
3.9 KiB
C++
Raw Normal View History

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