home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 17
/
Freelog017.iso
/
BeOS
/
ababelone
/
Sources
/
MenuDynamique.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2000-11-21
|
4KB
|
121 lines
/*
Copyright (C) 2000 by Hervé PHILIPPE <rv@bemail.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "MenuDynamique.h"
/////////////////////////////////////
// CONSTRUCTEUR de "MenuDynamique" //
/////////////////////////////////////-----------------------------------------
//----------------------------------------------------------------------------------------
MenuDynamique::MenuDynamique(BMenu* menu, const char* chaine_repertoire, uint32 numero_premier_message)
// 3 PARAMETRES : ENTREE/SORTIE ENTREE ENTREE
: m_ConstanteMessage(numero_premier_message)
{
BPath chemin;
BEntry entree;
app_info infos_application;
char chaine_nom_fichier[B_FILE_NAME_LENGTH];
BMenuItem* item;
bool fin = false;
uint8 i = 1;
m_NumeroFichier = 0;
m_Menu = menu;
be_app->GetAppInfo(&infos_application);
chemin.SetTo(&(infos_application.ref));
chemin.GetParent(&chemin);
chemin.Append(chaine_repertoire);
m_Repertoire.SetTo(chemin.Path());
m_Repertoire.Rewind();
do {
if (m_Repertoire.GetNextEntry(&entree) != B_OK || entree.GetName(chaine_nom_fichier) != B_OK)
fin = true;
else {
m_Menu->AddItem(item=new BMenuItem(chaine_nom_fichier,new BMessage(m_ConstanteMessage+i)));
if (i == 255)
fin = true;
else
i++;
}
} while (fin == false);
}
////////////////////////////////////
// DESTRUCTEUR de "MenuDynamique" //
////////////////////////////////////-------
//-----------------------------------------------------
MenuDynamique::~MenuDynamique()
// AUCUN PARAMETRE
{
}
////////////////////////////////////
// FONCTION "SelectionnerFichier" //
////////////////////////////////////---------------
//--------------------------------------------
BEntry // VALEUR DE RETOUR
MenuDynamique::SelectionnerFichier(uint8 numero_du_fichier)
// 1 PARAMETRE : ENTREE
{
uint8 i;
status_t statut = B_OK;
if (numero_du_fichier == 0 || numero_du_fichier == m_NumeroFichier)
return m_EntreeFichier;
m_Repertoire.Rewind();
for (i = 0; i < numero_du_fichier && statut == B_OK; i++)
statut = m_Repertoire.GetNextEntry(&m_EntreeFichier);
if (m_NumeroFichier != 0)
(m_Menu->ItemAt(m_NumeroFichier-1))->SetMarked(false);
if (statut != B_OK)
m_NumeroFichier = 0;
else {
m_NumeroFichier = numero_du_fichier;
(m_Menu->ItemAt(m_NumeroFichier-1))->SetMarked(true);
}
return m_EntreeFichier;
}
///////////////////////
// FONCTION "Active" //
///////////////////////-------------------
// Renvoie "vrai" si le menu est activé --
//----------------------------------------
bool // VALEUR DE RETOUR
MenuDynamique::Active(uint32 numero_message)
// 1 PARAMETRE : ENTREE
{
return (numero_message > m_ConstanteMessage
&& numero_message < m_ConstanteMessage+256
&& (numero_message-m_ConstanteMessage) != m_NumeroFichier);
}
//////////////////////////////
// FONCTION "NumeroFichier" //
//////////////////////////////-------------------------
// Renvoie le numéro du fichier actuellement utilisé --
//-----------------------------------------------------
uint8 // VALEUR DE RETOUR
MenuDynamique::NumeroFichier()
{
return m_NumeroFichier;
}