// Module PI : Peida Interactive     PIMenu
// Menu                                     96-97
// LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA

#include "pimenugen.h"

//++
// Class	PIMenu
// Lib		PI
// include	pimenugen.h
//
//	Composant graphique de type menu. 
//	"PIMenuGen" définit l'interface (classe virtuelle pure). Les objets 
//	instanciés doivent être de la classe "PIMenu" déclarée dans le fichier
//	entête "PIMENUBAR_H". Lors de la séléction d'une des options du menu
//	Le message correspondant complété par "PIMsg_Click" est envoyé à l'objet
//	par "SendSelf()".
//--
//++
// Links	Parents
// PIWdg
//--
//++
// Links	Voir aussi
// PIMenubar
//--



//++
// Titre	Constructeur
//--
//++
// PIMenu(PIWdg* par, char* nom, PIMenuType pdpu=k_UTMenu)
//	Création d'un objet Menubar. "pdpu" peut prendre les valeurs
//	"k_UTMenu", "k_PopupMenu", "k_PulldownMenu". Un menu de type
//	"PulldownMenu" est destiné à être accroché à un Menubar ou
//	comme sous-menu d'un autre menu. Si l'objet parent est de type
//	"PIMenu" ou "PIMenubar", un PulldownMenu est créé par défaut. Un 
//	menu de type PopupMenu est créé dans les autres cas.
// PIMenuType MType() 
//	Renvoie le type du menu : "k_PopupMenu" ou  "k_PulldownMenu".
//--

//++
// Titre	Ajout et suppression des options du menu
//--
//
//++
// void  AppendItem(char* nom, PIMessage msg, char* sc=NULL)
//	Permet d'ajouter une option au menu. Un raccourci clavier peut être spécifié
//	par "sc".
// void  AppendCheckItem(char* nom, PIMessage msg, char* sc=NULL)
//	Permet d'ajouter une option avec état ON/OFF au menu.
// void	 AppendPDMenu(PIMenu* pdm, char* sc=NULL)
//	Ajoute un menu déroulant comme sous-menu.
// void  DeleteItem(char* nom)
//	Permet de supprimer une option du menu identifiée par le titre ("nom").
//	Si le nom désigne un menu déroulant, celui-ci n'est pas détruit (par "delete").
// void  DeleteItemMsg(PIMessage msg)
//	Permet de supprimer une option du menu identifiée par le message ("msg").
// void  DeleteItemNum(int n)
//	Suppression de l'option numéro "n".
//--
//++
// Titre	Gestion des options 
//--
//++
// void  SetSensitivity(char* nom, bool sens=true)
//	Rend sensible ("sens=true") ou insensible l'option du menu identifiée par "nom".
//	Une option insensible est affichée, mais ne peut être sélectionnée.
// void  SetSensitivityMsg(PIMessage msg, bool sens=true)
//	Rend sensible ("sens=true") ou insensible l'option du menu identifiée par le message "msg".
// void  SetSensitivityNum(int n, bool sens=true)
//	Rend sensible ("sens=true") ou insensible l'option numéro "n".
// bool  IsSensitive(char* nom)
//	Indique si l'option "nom" est sensible ou pas.
// bool  IsSensitiveMsg(PIMessage msg)
//	Indique si l'option identifiée par le message "msg" est sensible ou pas.
// bool  IsSensitiveNum(int n)
//	Indique si l'option numéro "n" est sensible ou pas.
//--
//++
// Titre	Options à état (CheckItem)
//	Le champ "data" de "Send()/SendSelf()" contient un pointeur sur une variable
//	de type bool, indiquant l'état (On/Off) de l'option, lors de la séléction des
//	options à état ("CheckItem"). Les méthodes suivantes ne s'appliquent qu'aux 
//	options de type CheckItem.
//--
//++
// void  SetState(char* nom, bool st=false)
//	Change l'état de l'option "nom".
// void  SetStateMsg(PIMessage msg, bool st=false)
//	Change l'état de l'option identifiée par le message "msg".
// void  SetStateNum(int n, bool st=false)
//	Change l'état de l'option numéro "n".
// bool GetState(char* nom)
//	Renvoie l'état de l'option "nom".
// bool GetStateMsg(PIMessage msg)
//	Renvoie l'état de l'option identifiée par le message "msg".
// bool GetStateNum(int n)
//	Renvoie l'état de l'option numéro "n".
//--

//++
// Titre	Affichage des PopupMenu
//--
//++
// void  Show()
//	Affiche le menu (de type "k_PopupMenu" uniquement) à la position courante du pointeur.
// void  Show(PIWdg* w, int px, int py)
//	Affiche le menu (de type "k_PopupMenu" uniquement) à la position "px,py" de l'objet "w". 
//--

PIMenuGen::PIMenuGen(PIWdg* par, char* nom, PIMenuType pdpu)
: PIWdg(NULL, nom) , mMTyp(pdpu)
{
SetMsgParent(par);
}

PIMenuGen::~PIMenuGen()
{}

