#include <Xm/Xm.h>
#include <Xm/RepType.h>

#include <Xm/MainW.h>
#include <Xm/CascadeB.h>
#include <Xm/RowColumn.h>
#include <Xm/Frame.h>
#include <Xm/PushB.h>

void QuitCB(Widget w, XtPointer client_data, 
	    XmPushButtonCallbackStruct *cbs);

/*---------------------------*/
main(int argc, char *argv[])
/*---------------------------*/
{   
  XtAppContext app_context;
  Widget topLevel, mainWindow, menuBar, frame;
  Widget fileButton, fileMenu, quit;
  
  /* On indique que l'on desire utiliser le langage par defaut
     (anglais). Cette fonction initialise le support international de
     l'application. Les parametres inidiquent que l'on prend les
     valeurs par defaut */
  XtSetLanguageProc(NULL, (XtLanguageProc) NULL, NULL);

  topLevel = XtVaAppInitialize(&app_context, "XMainWIndow",
			      NULL, 0, &argc, argv, NULL, NULL);

  /* On cree la main window */
  mainWindow = XtVaCreateManagedWidget("mainWindow", 
				       xmMainWindowWidgetClass,
				       topLevel, 
				       NULL);

  /* support pour les tearoff menus. Ainsi on pourra specifier les tearoff
     menus dans le fichier de ressources */
  XmRepTypeInstallTearOffModelConverter();

  /* On cree la barre de menus. On utilise une fonction Xm ici car 
     la fonction XmCreateMenuBar effectue des operations qui n'ont pas
     d'equivalent avec Xt */
  menuBar = XmCreateMenuBar(mainWindow, "menuBar", NULL, 0);
  XtManageChild(menuBar);

    
  /* On cree une frame dans la work area de la main window */
  frame = XtVaCreateManagedWidget("frame", 
				  xmFrameWidgetClass,
				  mainWindow, 
				  NULL);

  /* On positionne les parties de la main window */
  XmMainWindowSetAreas(mainWindow, menuBar, NULL, NULL, NULL, frame);

  /* Creation du menu: 
     1) On cree un cascade bouton File dans la menubar */
  fileButton = XtVaCreateManagedWidget("fileButton",
				       xmCascadeButtonWidgetClass,
				       menuBar,
				       NULL);

  /* 2) Creation du PullDownMenu vide. ATTENTION: on utilise une 
     fonction Xm! Remarquez que le menu n'est pas manage !*/
  fileMenu = XmCreatePulldownMenu(menuBar,
				  "fileMenu",
				  NULL,
				  0);
  
  /* 3) Creation d'un bouton quit dans le menu File */
  quit = XtVaCreateManagedWidget("quit",
				 xmPushButtonWidgetClass,
				 fileMenu,
				 NULL);

  /* 4) On indique au CascadeButton le menu qu'il doit derouler */
  XtVaSetValues(fileButton,
		XmNsubMenuId, fileMenu,
		NULL);

  /* On cree un callback pour le bouton quit */
  XtAddCallback(quit, XmNactivateCallback, QuitCB, 0);
  

  XtRealizeWidget(topLevel);
  XtAppMainLoop(app_context);
}


/*----------------------------------------------*/
void QuitCB(Widget w, XtPointer client_data, 
	    XmPushButtonCallbackStruct *cbs)
/*----------------------------------------------*/
{   
  exit(0);
}
