/* #Specification: gurusteps / principles
The gurusteps component is used when you have a bunch of steps
one a single line (no branches). Instead of using the gurupath
like this (only eval,dialog and path1 tags):
#
>
(...);
>
(...);
>
// One branche
// Another branche
#
you do
#
(...);
// One branche
// Another branche
#
*/
#include "guruengine.h"
class gurusteps_private{
public:
_F_gurupath *p;
gurusteps_private(){
p=NULL;
}
};
void _F_gurusteps::settitle (const char *title)
{
if (priv->p != NULL) priv->p->settitle (title);
}
void _F_gurusteps::setintro (const char *intro)
{
if (priv->p != NULL) priv->p->setintro (intro);
}
void _F_gurusteps::seticon (const char *icon)
{
priv->p->seticon (icon);
}
void _F_gurusteps::attention ()
{
priv->p->attention ();
}
void _F_gurusteps::allfine ()
{
priv->p->allfine ();
}
void _F_gurusteps::setterminal (const char *s, const char *l)
{
if (priv->p != NULL) priv->p->setterminal (s,l);
}
bool _F_gurusteps::edit ()
{
return priv->p->edit ();
}
bool _F_gurusteps::edit (HELP_FILE &help)
{
return priv->p->edit (help);
}
void _F_gurusteps::setcursor (int nof)
{
priv->p->setcursor (nof);
}
void _F_gurusteps::eval2(
GURUPATH_MODE mode,
GURUPATH_STATUS &status)
{
status.is_possible = false;
status.nodemissing = true;
}
void _F_gurusteps::dialog2(
DIALOG &dia)
{
}
void _F_gurusteps::eval3(
GURUPATH_MODE mode,
GURUPATH_STATUS &status)
{
status.is_possible = false;
status.nodemissing = true;
}
void _F_gurusteps::dialog3(
DIALOG &dia)
{
}
void _F_gurusteps::eval4(
GURUPATH_MODE mode,
GURUPATH_STATUS &status)
{
status.is_possible = false;
status.nodemissing = true;
}
void _F_gurusteps::dialog4(
DIALOG &dia)
{
}
void _F_gurusteps::eval5(
GURUPATH_MODE mode,
GURUPATH_STATUS &status)
{
status.is_possible = false;
status.nodemissing = true;
}
void _F_gurusteps::dialog5(
DIALOG &dia)
{
}
void _F_gurusteps::eval6(
GURUPATH_MODE mode,
GURUPATH_STATUS &status)
{
status.is_possible = false;
status.nodemissing = true;
}
void _F_gurusteps::dialog6(
DIALOG &dia)
{
}
void _F_gurusteps::path1 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_gurusteps::path2 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_gurusteps::path3 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_gurusteps::path4 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_gurusteps::path5 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
void _F_gurusteps::path6 (
GURUPATH_MODE,
GURUPATH_STATUS &status)
{
status.nodemissing = true;
}
static void gurusteps0 (
_F_gurusteps &c,
GURUPATH_MODE mode,
GURUPATH_STATUS &status,
int step,
int nbstep);
static void gurusteps0 (
_F_gurusteps &c,
GURUPATH_MODE mode,
GURUPATH_STATUS &status,
int step,
int nbstep)
{
_F_gurusteps *c;
int step;
int nbstep;
bool moresteps;
glocal.c = &c;
glocal.step = step;
glocal.nbstep = nbstep;
glocal.moresteps = step < nbstep-1;
(mode,status);
glocal.c->priv->p = this;
switch (glocal.step){
case 0:
glocal.c->eval1(mode,status);
break;
case 1:
glocal.c->eval2(mode,status);
break;
case 2:
glocal.c->eval3(mode,status);
break;
case 3:
glocal.c->eval4(mode,status);
break;
case 4:
glocal.c->eval5(mode,status);
break;
case 5:
glocal.c->eval6(mode,status);
break;
}
glocal.c->priv->p = this;
switch (glocal.step){
case 0:
glocal.c->dialog1(dia);
break;
case 1:
glocal.c->dialog2(dia);
break;
case 2:
glocal.c->dialog3(dia);
break;
case 3:
glocal.c->dialog4(dia);
break;
case 4:
glocal.c->dialog5(dia);
break;
case 5:
glocal.c->dialog6(dia);
break;
}
if (glocal.moresteps){
gurusteps0 (*glocal.c,mode,status,glocal.step+1,glocal.nbstep);
}else{
glocal.c->path1(mode,status);
}
if (glocal.moresteps){
status.nodemissing = true;
}else{
glocal.c->path2(mode,status);
}
if (glocal.moresteps){
status.nodemissing = true;
}else{
glocal.c->path3(mode,status);
}
if (glocal.moresteps){
status.nodemissing = true;
}else{
glocal.c->path4(mode,status);
}
if (glocal.moresteps){
status.nodemissing = true;
}else{
glocal.c->path5(mode,status);
}
if (glocal.moresteps){
status.nodemissing = true;
}else{
glocal.c->path6(mode,status);
}
}
void gurusteps (
_F_gurusteps &c,
GURUPATH_MODE mode,
GURUPATH_STATUS &status)
{
gurusteps_private priv;
c.priv = &priv;
// We must find out how many steps are configured
int nbstep = 6;
for (int i=0; i