2015-01-04 15:48:24 +01:00
|
|
|
|
// swad_menu.c: menu (horizontal or vertical) selection
|
2015-01-02 12:57:26 +01:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
SWAD (Shared Workspace At a Distance),
|
|
|
|
|
is a web platform developed at the University of Granada (Spain),
|
|
|
|
|
and used to support university teaching.
|
|
|
|
|
|
|
|
|
|
This file is part of SWAD core.
|
2019-01-07 21:52:19 +01:00
|
|
|
|
Copyright (C) 1999-2019 Antonio Ca<EFBFBD>as Vargas
|
2015-01-02 12:57:26 +01:00
|
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU Affero General Public License as
|
|
|
|
|
published by the Free Software Foundation, either version 3 of the
|
|
|
|
|
License, or (at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program 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 Affero General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/********************************* Headers ***********************************/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
2019-02-18 14:41:46 +01:00
|
|
|
|
#include <stdio.h> // For fprintf, etc.
|
2015-01-02 12:57:26 +01:00
|
|
|
|
|
2017-06-10 21:38:10 +02:00
|
|
|
|
#include "swad_box.h"
|
2015-01-02 12:57:26 +01:00
|
|
|
|
#include "swad_database.h"
|
2018-11-09 20:47:39 +01:00
|
|
|
|
#include "swad_form.h"
|
2015-01-02 12:57:26 +01:00
|
|
|
|
#include "swad_global.h"
|
2019-10-23 20:07:56 +02:00
|
|
|
|
#include "swad_HTML.h"
|
2015-01-02 12:57:26 +01:00
|
|
|
|
#include "swad_layout.h"
|
|
|
|
|
#include "swad_menu.h"
|
|
|
|
|
#include "swad_parameter.h"
|
2019-03-26 11:53:21 +01:00
|
|
|
|
#include "swad_setting.h"
|
2015-01-04 15:48:24 +01:00
|
|
|
|
#include "swad_tab.h"
|
2015-01-02 12:57:26 +01:00
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/************** External global variables from others modules ****************/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
extern struct Globals Gbl;
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
2019-11-21 16:47:07 +01:00
|
|
|
|
/******************************* Public constants ****************************/
|
2015-01-02 12:57:26 +01:00
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
2019-11-21 16:47:07 +01:00
|
|
|
|
const char *Mnu_MenuIcons[Mnu_NUM_MENUS] =
|
2015-01-02 12:57:26 +01:00
|
|
|
|
{
|
2019-11-21 16:47:07 +01:00
|
|
|
|
[Mnu_MENU_HORIZONTAL] = "ellipsis-h.svg",
|
|
|
|
|
[Mnu_MENU_VERTICAL ] = "ellipsis-v.svg",
|
2015-01-02 12:57:26 +01:00
|
|
|
|
};
|
|
|
|
|
|
2019-11-21 16:47:07 +01:00
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/****************************** Private constants ****************************/
|
|
|
|
|
/*****************************************************************************/
|
2015-01-02 12:57:26 +01:00
|
|
|
|
|
2019-11-21 16:47:07 +01:00
|
|
|
|
#define MAX_MENU_ID 16
|
2015-01-02 12:57:26 +01:00
|
|
|
|
|
2015-12-08 01:47:48 +01:00
|
|
|
|
// Actions not initialized are 0 by default
|
2019-11-21 16:47:07 +01:00
|
|
|
|
static const Act_Action_t Mnu_MenuActions[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
|
2019-11-21 21:07:47 +01:00
|
|
|
|
{
|
|
|
|
|
[TabUnk] = {
|
|
|
|
|
},
|
|
|
|
|
[TabStr] = {
|
|
|
|
|
[ 0] = ActFrmLogIn,
|
|
|
|
|
[ 1] = ActReqSch,
|
|
|
|
|
[ 2] = ActSeeSocTmlGbl,
|
|
|
|
|
[ 3] = ActSeeSocPrf,
|
|
|
|
|
[ 4] = ActSeeCal,
|
|
|
|
|
[ 5] = ActSeeNtf,
|
|
|
|
|
},
|
|
|
|
|
[TabSys] = {
|
|
|
|
|
[ 0] = ActSeeCty,
|
|
|
|
|
[ 1] = ActSeePen,
|
|
|
|
|
[ 2] = ActSeeLnk,
|
|
|
|
|
[ 3] = ActLstPlg,
|
|
|
|
|
[ 4] = ActSetUp,
|
|
|
|
|
},
|
|
|
|
|
[TabCty] = {
|
|
|
|
|
[ 0] = ActSeeCtyInf,
|
|
|
|
|
[ 1] = ActSeeIns,
|
|
|
|
|
},
|
|
|
|
|
[TabIns] = {
|
|
|
|
|
[ 0] = ActSeeInsInf,
|
|
|
|
|
[ 1] = ActSeeCtr,
|
|
|
|
|
[ 2] = ActSeePlc,
|
|
|
|
|
[ 3] = ActSeeDpt,
|
|
|
|
|
[ 4] = ActSeeHld,
|
|
|
|
|
},
|
|
|
|
|
[TabCtr] = {
|
|
|
|
|
[ 0] = ActSeeCtrInf,
|
|
|
|
|
[ 1] = ActSeeDeg,
|
|
|
|
|
[ 2] = ActSeeCla,
|
|
|
|
|
},
|
|
|
|
|
[TabDeg] = {
|
|
|
|
|
[ 0] = ActSeeDegInf,
|
|
|
|
|
[ 1] = ActSeeCrs,
|
|
|
|
|
},
|
|
|
|
|
[TabCrs] = {
|
|
|
|
|
[ 0] = ActSeeCrsInf,
|
|
|
|
|
[ 1] = ActSeeTchGui,
|
|
|
|
|
[ 2] = ActSeeSyl,
|
|
|
|
|
[ 3] = ActSeeBib,
|
|
|
|
|
[ 4] = ActSeeFAQ,
|
|
|
|
|
[ 5] = ActSeeCrsLnk,
|
|
|
|
|
[ 6] = ActSeeCrsTT,
|
|
|
|
|
},
|
|
|
|
|
[TabAss] = {
|
|
|
|
|
[ 0] = ActSeeAss,
|
|
|
|
|
[ 1] = ActSeeAsg,
|
|
|
|
|
[ 2] = ActSeePrj,
|
|
|
|
|
[ 3] = ActReqTst,
|
|
|
|
|
[ 4] = ActSeeAllGam,
|
|
|
|
|
[ 5] = ActSeeAllSvy,
|
|
|
|
|
[ 6] = ActSeeAllExaAnn,
|
|
|
|
|
},
|
|
|
|
|
[TabFil] = {
|
|
|
|
|
[ 0] = ActSeeAdmDocIns,
|
|
|
|
|
[ 1] = ActAdmShaIns,
|
|
|
|
|
[ 2] = ActSeeAdmDocCtr,
|
|
|
|
|
[ 3] = ActAdmShaCtr,
|
|
|
|
|
[ 4] = ActSeeAdmDocDeg,
|
|
|
|
|
[ 5] = ActAdmShaDeg,
|
|
|
|
|
[ 6] = ActSeeAdmDocCrsGrp,
|
|
|
|
|
[ 7] = ActAdmTchCrsGrp,
|
|
|
|
|
[ 8] = ActAdmShaCrsGrp,
|
|
|
|
|
[ 9] = ActAdmAsgWrkUsr,
|
|
|
|
|
[10] = ActReqAsgWrkCrs,
|
|
|
|
|
[11] = ActSeeAdmMrk,
|
|
|
|
|
[12] = ActAdmBrf,
|
|
|
|
|
},
|
|
|
|
|
[TabUsr] = {
|
|
|
|
|
[ 0] = ActReqSelGrp,
|
|
|
|
|
[ 1] = ActLstStd,
|
|
|
|
|
[ 2] = ActLstTch,
|
|
|
|
|
[ 3] = ActLstOth,
|
|
|
|
|
[ 4] = ActSeeAtt,
|
|
|
|
|
[ 5] = ActReqSignUp,
|
|
|
|
|
[ 6] = ActSeeSignUpReq,
|
|
|
|
|
[ 7] = ActLstCon,
|
2015-12-08 01:47:48 +01:00
|
|
|
|
},
|
2019-11-21 21:07:47 +01:00
|
|
|
|
[TabMsg] = {
|
|
|
|
|
[ 0] = ActSeeAnn,
|
|
|
|
|
[ 1] = ActSeeAllNot,
|
|
|
|
|
[ 2] = ActSeeFor,
|
|
|
|
|
[ 3] = ActSeeChtRms,
|
|
|
|
|
[ 4] = ActReqMsgUsr,
|
|
|
|
|
[ 5] = ActSeeRcvMsg,
|
|
|
|
|
[ 6] = ActSeeSntMsg,
|
|
|
|
|
[ 7] = ActReqMaiUsr,
|
|
|
|
|
},
|
|
|
|
|
[TabAna] = {
|
|
|
|
|
[ 0] = ActReqUseGbl,
|
|
|
|
|
[ 1] = ActSeePhoDeg,
|
|
|
|
|
[ 2] = ActReqStaCrs,
|
|
|
|
|
[ 3] = ActReqAccGbl,
|
|
|
|
|
[ 4] = ActReqMyUsgRep,
|
|
|
|
|
[ 5] = ActMFUAct,
|
|
|
|
|
},
|
|
|
|
|
[TabPrf] = {
|
|
|
|
|
[ 0] = ActFrmRolSes,
|
|
|
|
|
[ 1] = ActMyCrs,
|
|
|
|
|
[ 2] = ActSeeMyTT,
|
|
|
|
|
[ 3] = ActSeeMyAgd,
|
|
|
|
|
[ 4] = ActFrmMyAcc,
|
|
|
|
|
[ 5] = ActReqEdiRecSha,
|
|
|
|
|
[ 6] = ActReqEdiSet,
|
|
|
|
|
},
|
|
|
|
|
};
|
2015-12-08 01:47:48 +01:00
|
|
|
|
|
2016-11-07 13:21:36 +01:00
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/****************************** Private prototypes ***************************/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
static void Mnu_PutIconsMenu (void);
|
|
|
|
|
|
2015-12-08 01:47:48 +01:00
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/******* When I change to another tab, go to the first option allowed ********/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
Act_Action_t Mnu_GetFirstActionAvailableInCurrentTab (void)
|
|
|
|
|
{
|
|
|
|
|
unsigned NumOptInMenu;
|
|
|
|
|
Act_Action_t Action;
|
|
|
|
|
|
|
|
|
|
/* Change current action to the first allowed action in current tab */
|
|
|
|
|
for (NumOptInMenu = 0;
|
|
|
|
|
NumOptInMenu < Act_MAX_OPTIONS_IN_MENU_PER_TAB;
|
|
|
|
|
NumOptInMenu++)
|
|
|
|
|
{
|
2016-01-17 15:10:54 +01:00
|
|
|
|
if ((Action = Mnu_MenuActions[Gbl.Action.Tab][NumOptInMenu]) == 0)
|
2015-12-08 01:47:48 +01:00
|
|
|
|
return ActUnk;
|
|
|
|
|
if (Act_CheckIfIHavePermissionToExecuteAction (Action))
|
|
|
|
|
return Action;
|
|
|
|
|
}
|
|
|
|
|
return ActUnk;
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-04 14:49:32 +01:00
|
|
|
|
/*****************************************************************************/
|
2015-11-29 18:32:57 +01:00
|
|
|
|
/******************* Write horizontal menu of current tab ********************/
|
2015-01-04 14:49:32 +01:00
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
2015-11-29 22:06:22 +01:00
|
|
|
|
void Mnu_WriteMenuThisTab (void)
|
2015-01-04 14:49:32 +01:00
|
|
|
|
{
|
2019-02-20 17:18:13 +01:00
|
|
|
|
extern const char *The_ClassTxtMenu[The_NUM_THEMES];
|
2015-01-04 15:48:24 +01:00
|
|
|
|
extern const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB];
|
2015-01-04 14:49:32 +01:00
|
|
|
|
unsigned NumOptInMenu;
|
|
|
|
|
Act_Action_t NumAct;
|
|
|
|
|
const char *Title;
|
|
|
|
|
bool IsTheSelectedAction;
|
|
|
|
|
|
2015-11-29 22:06:22 +01:00
|
|
|
|
/***** Menu start *****/
|
2019-11-11 00:15:44 +01:00
|
|
|
|
HTM_Txt ("<nav class=\"MENU_LIST_CONTAINER\">");
|
2019-10-26 12:25:27 +02:00
|
|
|
|
HTM_UL_Begin ("class=\"MENU_LIST\"");
|
2015-11-29 22:06:22 +01:00
|
|
|
|
|
2015-01-04 14:49:32 +01:00
|
|
|
|
/***** Loop to write all options in menu. Each row holds an option *****/
|
|
|
|
|
for (NumOptInMenu = 0;
|
|
|
|
|
NumOptInMenu < Act_MAX_OPTIONS_IN_MENU_PER_TAB;
|
|
|
|
|
NumOptInMenu++)
|
|
|
|
|
{
|
2016-01-17 15:10:54 +01:00
|
|
|
|
NumAct = Mnu_MenuActions[Gbl.Action.Tab][NumOptInMenu];
|
2015-01-04 14:49:32 +01:00
|
|
|
|
if (NumAct == 0) // At the end of each tab, actions are initialized to 0, so 0 marks the end of the menu
|
|
|
|
|
break;
|
|
|
|
|
if (Act_CheckIfIHavePermissionToExecuteAction (NumAct))
|
|
|
|
|
{
|
2018-04-24 13:21:53 +02:00
|
|
|
|
IsTheSelectedAction = (NumAct == Act_GetSuperAction (Gbl.Action.Act));
|
2015-01-04 14:49:32 +01:00
|
|
|
|
|
|
|
|
|
Title = Act_GetSubtitleAction (NumAct);
|
|
|
|
|
|
2017-06-12 14:16:33 +02:00
|
|
|
|
/***** Start element *****/
|
2019-10-26 22:49:13 +02:00
|
|
|
|
HTM_LI_Begin ("class=\"MENU_LIST_ITEM\"");
|
2015-01-04 14:49:32 +01:00
|
|
|
|
|
2019-10-20 22:00:28 +02:00
|
|
|
|
/***** Begin form and link *****/
|
2018-11-09 20:47:39 +01:00
|
|
|
|
Frm_StartForm (NumAct);
|
2019-11-20 10:17:42 +01:00
|
|
|
|
HTM_BUTTON_SUBMIT_Begin (Title,
|
2019-11-20 11:04:54 +01:00
|
|
|
|
IsTheSelectedAction ? "BT_LINK MENU_OPT_ON" :
|
|
|
|
|
"BT_LINK MENU_OPT_OFF",
|
|
|
|
|
NULL);
|
2015-11-29 20:03:44 +01:00
|
|
|
|
|
2019-10-27 22:29:08 +01:00
|
|
|
|
/***** Icon and text *****/
|
2019-10-24 00:04:40 +02:00
|
|
|
|
HTM_DIV_Begin ("class=\"MENU_ICO\" style=\"background-image:url('%s/%s');\"",
|
|
|
|
|
Gbl.Prefs.URLIconSet,
|
|
|
|
|
Act_GetIcon (NumAct));
|
|
|
|
|
HTM_DIV_Begin ("class=\"MENU_TEXT %s\"",The_ClassTxtMenu[Gbl.Prefs.Theme]);
|
2019-11-10 12:36:37 +01:00
|
|
|
|
HTM_Txt (Txt_MENU_TITLE[Gbl.Action.Tab][NumOptInMenu]);
|
2019-10-23 20:07:56 +02:00
|
|
|
|
HTM_DIV_End ();
|
2019-10-27 22:29:08 +01:00
|
|
|
|
HTM_DIV_End ();
|
2015-01-04 14:49:32 +01:00
|
|
|
|
|
2017-06-12 14:16:33 +02:00
|
|
|
|
/***** End link and form *****/
|
2019-11-18 15:48:46 +01:00
|
|
|
|
HTM_BUTTON_End ();
|
2018-11-09 20:47:39 +01:00
|
|
|
|
Frm_EndForm ();
|
2015-01-04 14:49:32 +01:00
|
|
|
|
|
2017-06-12 14:16:33 +02:00
|
|
|
|
/***** End element *****/
|
2019-10-26 22:49:13 +02:00
|
|
|
|
HTM_LI_End ();
|
2015-01-04 14:49:32 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
2015-11-29 22:06:22 +01:00
|
|
|
|
|
|
|
|
|
/***** Menu end *****/
|
2019-10-26 02:19:42 +02:00
|
|
|
|
HTM_UL_End ();
|
2019-11-11 00:15:44 +01:00
|
|
|
|
HTM_Txt ("</nav>");
|
2015-01-04 14:49:32 +01:00
|
|
|
|
}
|
|
|
|
|
|
2015-01-02 12:57:26 +01:00
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/************* Put icons to select menu (horizontal or vertical) *************/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
void Mnu_PutIconsToSelectMenu (void)
|
|
|
|
|
{
|
2019-03-26 11:53:21 +01:00
|
|
|
|
extern const char *Hlp_PROFILE_Settings_menu;
|
2015-01-02 12:57:26 +01:00
|
|
|
|
extern const char *Txt_Menu;
|
|
|
|
|
extern const char *Txt_MENU_NAMES[Mnu_NUM_MENUS];
|
|
|
|
|
Mnu_Menu_t Menu;
|
|
|
|
|
|
2019-10-25 22:48:34 +02:00
|
|
|
|
Box_BoxBegin (NULL,Txt_Menu,Mnu_PutIconsMenu,
|
2019-03-26 11:53:21 +01:00
|
|
|
|
Hlp_PROFILE_Settings_menu,Box_NOT_CLOSABLE);
|
|
|
|
|
Set_StartSettingsHead ();
|
|
|
|
|
Set_StartOneSettingSelector ();
|
2015-01-02 12:57:26 +01:00
|
|
|
|
for (Menu = (Mnu_Menu_t) 0;
|
|
|
|
|
Menu < Mnu_NUM_MENUS;
|
|
|
|
|
Menu++)
|
|
|
|
|
{
|
2019-10-24 00:04:40 +02:00
|
|
|
|
HTM_DIV_Begin ("class=\"%s\"",Menu == Gbl.Prefs.Menu ? "PREF_ON" :
|
|
|
|
|
"PREF_OFF");
|
2018-11-09 20:47:39 +01:00
|
|
|
|
Frm_StartForm (ActChgMnu);
|
2019-11-03 13:19:32 +01:00
|
|
|
|
Par_PutHiddenParamUnsigned (NULL,"Menu",(unsigned) Menu);
|
2019-03-26 11:53:21 +01:00
|
|
|
|
Ico_PutSettingIconLink (Mnu_MenuIcons[Menu],Txt_MENU_NAMES[Menu]);
|
2018-11-09 20:47:39 +01:00
|
|
|
|
Frm_EndForm ();
|
2019-10-23 20:07:56 +02:00
|
|
|
|
HTM_DIV_End ();
|
2015-01-02 12:57:26 +01:00
|
|
|
|
}
|
2019-03-26 11:53:21 +01:00
|
|
|
|
Set_EndOneSettingSelector ();
|
|
|
|
|
Set_EndSettingsHead ();
|
2019-10-25 22:48:34 +02:00
|
|
|
|
Box_BoxEnd ();
|
2016-11-07 13:21:36 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
2019-03-26 11:53:21 +01:00
|
|
|
|
/******************* Put contextual icons in menu setting ********************/
|
2016-11-07 13:21:36 +01:00
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
static void Mnu_PutIconsMenu (void)
|
|
|
|
|
{
|
|
|
|
|
/***** Put icon to show a figure *****/
|
2019-02-12 14:46:14 +01:00
|
|
|
|
Gbl.Figures.FigureType = Fig_MENUS;
|
|
|
|
|
Fig_PutIconToShowFigure ();
|
2015-01-02 12:57:26 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/******************************** Change menu ********************************/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
void Mnu_ChangeMenu (void)
|
|
|
|
|
{
|
|
|
|
|
/***** Get param with menu *****/
|
|
|
|
|
Gbl.Prefs.Menu = Mnu_GetParamMenu ();
|
|
|
|
|
|
|
|
|
|
/***** Store menu in database *****/
|
|
|
|
|
if (Gbl.Usrs.Me.Logged)
|
2019-03-26 11:53:21 +01:00
|
|
|
|
DB_QueryUPDATE ("can not update your setting about menu",
|
2018-11-03 12:16:40 +01:00
|
|
|
|
"UPDATE usr_data SET Menu=%u WHERE UsrCod=%ld",
|
|
|
|
|
(unsigned) Gbl.Prefs.Menu,Gbl.Usrs.Me.UsrDat.UsrCod);
|
2015-01-02 12:57:26 +01:00
|
|
|
|
|
2019-03-26 11:53:21 +01:00
|
|
|
|
/***** Set settings from current IP *****/
|
|
|
|
|
Set_SetSettingsFromIP ();
|
2015-01-02 12:57:26 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/************************* Get parameter with menu ***************************/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
Mnu_Menu_t Mnu_GetParamMenu (void)
|
|
|
|
|
{
|
2017-01-29 21:41:08 +01:00
|
|
|
|
return (Mnu_Menu_t)
|
|
|
|
|
Par_GetParToUnsignedLong ("Menu",
|
|
|
|
|
0,
|
|
|
|
|
Mnu_NUM_MENUS - 1,
|
|
|
|
|
(unsigned long) Mnu_MENU_DEFAULT);
|
2015-01-02 12:57:26 +01:00
|
|
|
|
}
|
2017-05-04 11:03:44 +02:00
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/*************************** Get menu from string ****************************/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
Mnu_Menu_t Mnu_GetMenuFromStr (const char *Str)
|
|
|
|
|
{
|
|
|
|
|
unsigned UnsignedNum;
|
|
|
|
|
|
|
|
|
|
if (sscanf (Str,"%u",&UnsignedNum) == 1)
|
|
|
|
|
if (UnsignedNum < Mnu_NUM_MENUS)
|
|
|
|
|
return (Mnu_Menu_t) UnsignedNum;
|
|
|
|
|
|
|
|
|
|
return Mnu_MENU_DEFAULT;
|
|
|
|
|
}
|
2019-10-24 09:46:20 +02:00
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
/******************************** Context menu *******************************/
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
void Mnu_ContextMenuBegin (void)
|
|
|
|
|
{
|
|
|
|
|
HTM_DIV_Begin ("class=\"CONTEXT_MENU\"");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Mnu_ContextMenuEnd (void)
|
|
|
|
|
{
|
|
|
|
|
HTM_DIV_End ();
|
|
|
|
|
}
|