
/*
\\        CLIcol.c - Demo Pulldown-Menues
*/
#include "TOOL.h"

LONG ex[]={          /* MutualExclude-Werte für die Items der Menues 2 und 3 */
    14,13,11,7
};
BYTE c[2][4]={              /* Command-Keys für die Items der Menues 2 und 3 */
    'B','W','S','R',
    '1','2','3','4'
};
BYTE *Mtitel[]={                                 /* Die Titel der Menues 1-3 */
    "CLICol",
    "Vordergrund",
    "Hintergrund"
};
struct IntuiText SI[2]={       /* Text für die SubItems des Item 1 in Menu 1 */
    2,0,JAM1,30,5,NULL,(UBYTE *)"* Gölzy's CLICol *",NULL,
    3,0,JAM1,30,5,NULL,(UBYTE *)"Wirklich beenden ?",NULL
};
struct IntuiText m1[2]={                     /* Text für die Items in Menu 1 */
    0,0,JAM1,0,0,NULL,(UBYTE *)"About",NULL,
    3,0,JAM1,0,0,NULL,(UBYTE *)"Ende ",NULL
};
struct IntuiText m2[4]={            /* Text für die Items der Menues 2 und 3 */
    2,0,JAM1,0,0,NULL,(UBYTE *)"  Blau   ",NULL,
    2,0,JAM1,0,0,NULL,(UBYTE *)"  Weiß   ",NULL,
    2,0,JAM1,0,0,NULL,(UBYTE *)"  Schwarz",NULL,
    2,0,JAM1,0,0,NULL,(UBYTE *)"  Rot    ",NULL
};

VOID main()
{
    struct Window *win;
    struct Menu men[3];
    struct MenuItem I1[2],I2[2][4],S1[2];
    SHORT i, ende=0;
    USHORT code,Cfl=ITEMTEXT|ITEMENABLED|HIGHBOX,/* Item-Flags in Menu 1 und */
           Ffl=CHECKIT|ITEMTEXT|ITEMENABLED|HIGHCOMP|COMMSEQ; /* Menu  2 + 3 */
    ULONG class;

    if(OpenLib()) exit(0);
    ModifyIDCMP((win=ACTIVE_WINDOW),MENUPICK);
    for(i=2;i>=0;i--){ /* TOOL.h Funktion GetMenu(): Menuheader installieren */
        GetMenu(&men[i],win,i*100,100,MENUENABLED,Mtitel[i]);
    }
    for(i=1;i>=0;i--){/* MenuItems und SubItems für linkes Menu installieren */
        GetItem(&men[0],&I1[i],0,i*10,100,10,Cfl,0,&m1[i],NULL,0);
        GetSItem(&I1[i],&S1[i],100,10,200,20,Cfl,0,&SI[i],NULL,0);
    }
    for(i=3;i>=0;i--){          /* MenuItems für mittleres Menu installieren */
        GetItem(&men[1],&I2[0][i],0,i*10,120,10,Ffl,ex[i],&m2[i],NULL,c[0][i]);
    }
    for(i=3;i>=0;i--){            /* MenuItems für rechtes Menu installieren */
        GetItem(&men[2],&I2[1][i],0,i*10,120,10,Ffl,ex[i],&m2[i],NULL,c[1][i]);
    }
    SetMenuStrip(win,&men[0]);/* kompletter MenuStrip in CLI-Window aufbauen */
    while(ende==0){
        Wait(1<<win->UserPort->mp_SigBit);
        class=GetMessage(win,&code,0,0);
        switch(class){
            case MENUPICK:{                      /* Ein Menü wurde angewählt */
                if(code!=MENUNULL){
                    switch(MENUNUM(code)){          /* Menu-Nummer ermitteln */
                        case 0:{ /* 1. Menu in Strukturkette wurde angewählt */
                            switch(ITEMNUM(code)){  /* Item-Nummer ermitteln */
                                case 0: break;       /* Item 1 der Itemkette */
                                case 1:{             /* Item 2 der Itemkette */
                                    if(SUBNUM(code)==0) ende ++;/*SubItem-Nr.*/
                                    break;
                                }
                            }
                            break;
                        }
                        case 1:{ /* 2. Menu in Strukturkette wurde angewählt */
                            switch(ITEMNUM(code)){
                                case 0:{ /* Item 1 gewählt: Vordergrund Blau */
                                    printf("\033[30m%c\n",12);
                                    break;
                                }
                                case 1:{ /* Item 2 gewählt: Vordergrund Weiß */
                                    printf("\033[31m%c\n",12);
                                    break;
                                }
                                case 2:{      /* Item 3: Vordergrund Schwarz */
                                    printf("\033[32m%c\n",12);
                                    break;
                                }
                                case 3:{  /* Item 4 bedeutet Vordergrund Rot */
                                    printf("\033[33m%c\n",12);
                                    break;
                                }
                            }
                            break;
                        }
                        case 2:{ /* 3. Menu in Strukturkette wurde angewählt */
                            switch(ITEMNUM(code)){
                                case 0:{ /* Item 1 gewählt: Hintergrund Blau */
                                    printf("\033[40m%c\n",12);
                                    break;
                                }
                                case 1:{ /* Item 2 gewählt: Hintergrund Weiß */
                                    printf("\033[41m%c\n",12);
                                    break;
                                }
                                case 2:{      /* Item 3: Hintergrund Schwarz */
                                    printf("\033[42m%c\n",12);
                                    break;
                                }
                                case 3:{  /* Item 4 bedeutet Hintergrund Rot */
                                    printf("\033[43m%c\n",12);
                                    break;
                                }
                            }
                            break;
                        }
                    }  /* switch Menu */
                }  /* if MENUNULL */
                break;
            }  /* case MENUPICK */
        }  /* switch class */
    }  /* while */
    ClearMenuStrip(win);                 /* MenuStrip aus CLI-Window löschen */
    ModifyIDCMP(win,0);  /* IDCMPFlags des CLI-Window wieder auf null setzen */
}
