diff --git a/swad_changelog.h b/swad_changelog.h index 890a904ac..066af90b9 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -35,12 +35,13 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 14.53 (2015/01/04)" +#define Log_PLATFORM_VERSION "SWAD 14.53.1 (2015/01/04)" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h | tail -1 /* - Version 14.53 :Jan 04, 2014 New module swad_calendar for calendar. (173254 lines) + Version 14.53.1 :Jan 04, 2014 Some functions moved from swad_layout to swad_menu. (173256 lines) + Version 14.53 :Jan 04, 2014 New module swad_calendar for drawing months and calendar. (173254 lines) 1 change necessary in Makefile: Add swad_calendar.o to list of object files diff --git a/swad_layout.c b/swad_layout.c index 6441c315a..78b2004ef 100644 --- a/swad_layout.c +++ b/swad_layout.c @@ -108,9 +108,6 @@ static void Lay_DrawTabsDeskTop (void); static void Lay_DrawTabsMobile (void); static bool Lay_CheckIfICanViewTab (Act_Tab_t Tab); static void Lay_DrawBreadcrumb (void); -static void Lay_WriteVerticalMenuThisTabDesktop (void); -static void Lay_WriteHorizontalMenuThisTabDesktop (void); -static void Lay_WriteMenuThisTabMobile (void); static void Lay_WriteBreadcrumbHome (void); static void Lay_WriteBreadcrumbTab (void); @@ -302,7 +299,7 @@ void Lay_WriteStartOfPage (void) /* Tab content, including vertical menu (left) and main zone (right) */ fprintf (Gbl.F.Out,""); - Lay_WriteVerticalMenuThisTabDesktop (); + Mnu_WriteVerticalMenuThisTabDesktop (); fprintf (Gbl.F.Out,""); } break; @@ -314,7 +311,7 @@ void Lay_WriteStartOfPage (void) if (Act_Actions[Act_Actions[Gbl.CurrentAct].SuperAction].IndexInMenu < 0) // Write vertical menu { if (Gbl.CurrentAct == ActMnu) - Lay_WriteMenuThisTabMobile (); + Mnu_WriteMenuThisTabMobile (); else Lay_DrawTabsMobile (); } @@ -330,7 +327,7 @@ void Lay_WriteStartOfPage (void) if (Gbl.Prefs.Layout == Lay_LAYOUT_DESKTOP && Gbl.Prefs.Menu == Mnu_MENU_HORIZONTAL) - Lay_WriteHorizontalMenuThisTabDesktop (); + Mnu_WriteHorizontalMenuThisTabDesktop (); Usr_WarningWhenDegreeTypeDoesntAllowDirectLogin (); @@ -1119,236 +1116,6 @@ static void Lay_DrawBreadcrumb (void) fprintf (Gbl.F.Out,""); } -/*****************************************************************************/ -/************* Write the menu of current tab (desktop layout) ****************/ -/*****************************************************************************/ - -static void Lay_WriteVerticalMenuThisTabDesktop (void) - { - extern const char *The_ClassMenuOn[The_NUM_THEMES]; - extern const char *The_ClassMenuOff[The_NUM_THEMES]; - extern const char *The_ClassSeparator[The_NUM_THEMES]; - extern const struct Act_Menu Act_Menu[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; - extern const char *Txt_MENU_TITLE[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; - unsigned NumOptInMenu; - Act_Action_t NumAct; - const char *Title; - bool IsTheSelectedAction; - bool SeparationBetweenPreviousAndCurrentOption = false; - bool PreviousVisibleOptions = false; - - /***** List start *****/ - fprintf (Gbl.F.Out,""); - } - -/*****************************************************************************/ -/********** Write horizontal menu of current tab (desktop layout) ************/ -/*****************************************************************************/ - -static void Lay_WriteHorizontalMenuThisTabDesktop (void) - { - extern const char *The_ClassMenuOn[The_NUM_THEMES]; - extern const char *The_ClassMenuOff[The_NUM_THEMES]; - extern const struct Act_Menu Act_Menu[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; - extern const char *Txt_MENU_TITLE[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; - unsigned NumOptInMenu; - Act_Action_t NumAct; - const char *Title; - bool IsTheSelectedAction; - - /***** List start *****/ - fprintf (Gbl.F.Out,"
" - "" - "
"); - } - -/*****************************************************************************/ -/************* Write the menu of current tab (mobile layout) *****************/ -/*****************************************************************************/ - -static void Lay_WriteMenuThisTabMobile (void) - { - extern const char *The_ClassMenuOn[The_NUM_THEMES]; - extern const char *The_ClassMenuOff[The_NUM_THEMES]; - extern const struct Act_Menu Act_Menu[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; - extern const char *Txt_MENU_TITLE[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; - unsigned NumOptInMenu; - unsigned NumOptVisible; // Only options I can see - Act_Action_t NumAct; - const char *Title; - - /***** Table start *****/ - fprintf (Gbl.F.Out,""); - - /***** Loop to write all options in menu. Each row holds an option *****/ - for (NumOptInMenu = NumOptVisible = 0; - NumOptInMenu < Act_MAX_OPTIONS_IN_MENU_PER_TAB; - NumOptInMenu++) - { - if ((NumAct = Act_Menu[Gbl.CurrentTab][NumOptInMenu].Action) == 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)) - { - Title = Act_GetSubtitleAction (NumAct); - - if (NumOptVisible % Cfg_LAYOUT_MOBILE_NUM_COLUMNS == 0) - fprintf (Gbl.F.Out,""); - - /* Icon at top and text at bottom */ - fprintf (Gbl.F.Out,"", - Gbl.Prefs.PathIconSet,Cfg_ICON_ACTION_64x64, - Act_Actions[NumAct].Icon, - Txt_MENU_TITLE[Gbl.CurrentTab][NumOptInMenu], - Txt_MENU_TITLE[Gbl.CurrentTab][NumOptInMenu]); - - if ((NumOptVisible % Cfg_LAYOUT_MOBILE_NUM_COLUMNS) == - (Cfg_LAYOUT_MOBILE_NUM_COLUMNS - 1)) - fprintf (Gbl.F.Out,""); - - NumOptVisible++; - } - } - - /***** Table end *****/ - fprintf (Gbl.F.Out,"
" - "
"); - - Act_FormStart (NumAct); - Act_LinkFormSubmit (Title, - (NumAct == Act_Actions[Gbl.CurrentAct].SuperAction) ? The_ClassMenuOn[Gbl.Prefs.Theme] : - The_ClassMenuOff[Gbl.Prefs.Theme]); - fprintf (Gbl.F.Out,"" - "
%s
" - "" - "" - "
" - "
"); - } - /*****************************************************************************/ /************************ Write home in breadcrumb ***************************/ /*****************************************************************************/ diff --git a/swad_menu.c b/swad_menu.c index acfc85320..4423b592b 100644 --- a/swad_menu.c +++ b/swad_menu.c @@ -39,6 +39,7 @@ /*****************************************************************************/ extern struct Globals Gbl; +extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS]; /*****************************************************************************/ /******************************** Private constants **************************/ @@ -64,6 +65,237 @@ const char *Mnu_MenuIcons[Mnu_NUM_MENUS] = "vertical", }; + +/*****************************************************************************/ +/************* Write the menu of current tab (desktop layout) ****************/ +/*****************************************************************************/ + +void Mnu_WriteVerticalMenuThisTabDesktop (void) + { + extern const char *The_ClassMenuOn[The_NUM_THEMES]; + extern const char *The_ClassMenuOff[The_NUM_THEMES]; + extern const char *The_ClassSeparator[The_NUM_THEMES]; + extern const struct Act_Menu Act_Menu[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; + extern const char *Txt_MENU_TITLE[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; + unsigned NumOptInMenu; + Act_Action_t NumAct; + const char *Title; + bool IsTheSelectedAction; + bool SeparationBetweenPreviousAndCurrentOption = false; + bool PreviousVisibleOptions = false; + + /***** List start *****/ + fprintf (Gbl.F.Out,""); + } + +/*****************************************************************************/ +/********** Write horizontal menu of current tab (desktop layout) ************/ +/*****************************************************************************/ + +void Mnu_WriteHorizontalMenuThisTabDesktop (void) + { + extern const char *The_ClassMenuOn[The_NUM_THEMES]; + extern const char *The_ClassMenuOff[The_NUM_THEMES]; + extern const struct Act_Menu Act_Menu[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; + extern const char *Txt_MENU_TITLE[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; + unsigned NumOptInMenu; + Act_Action_t NumAct; + const char *Title; + bool IsTheSelectedAction; + + /***** List start *****/ + fprintf (Gbl.F.Out,"
" + "" + "
"); + } + +/*****************************************************************************/ +/************* Write the menu of current tab (mobile layout) *****************/ +/*****************************************************************************/ + +void Mnu_WriteMenuThisTabMobile (void) + { + extern const char *The_ClassMenuOn[The_NUM_THEMES]; + extern const char *The_ClassMenuOff[The_NUM_THEMES]; + extern const struct Act_Menu Act_Menu[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; + extern const char *Txt_MENU_TITLE[Act_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB]; + unsigned NumOptInMenu; + unsigned NumOptVisible; // Only options I can see + Act_Action_t NumAct; + const char *Title; + + /***** Table start *****/ + fprintf (Gbl.F.Out,""); + + /***** Loop to write all options in menu. Each row holds an option *****/ + for (NumOptInMenu = NumOptVisible = 0; + NumOptInMenu < Act_MAX_OPTIONS_IN_MENU_PER_TAB; + NumOptInMenu++) + { + if ((NumAct = Act_Menu[Gbl.CurrentTab][NumOptInMenu].Action) == 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)) + { + Title = Act_GetSubtitleAction (NumAct); + + if (NumOptVisible % Cfg_LAYOUT_MOBILE_NUM_COLUMNS == 0) + fprintf (Gbl.F.Out,""); + + /* Icon at top and text at bottom */ + fprintf (Gbl.F.Out,"", + Gbl.Prefs.PathIconSet,Cfg_ICON_ACTION_64x64, + Act_Actions[NumAct].Icon, + Txt_MENU_TITLE[Gbl.CurrentTab][NumOptInMenu], + Txt_MENU_TITLE[Gbl.CurrentTab][NumOptInMenu]); + + if ((NumOptVisible % Cfg_LAYOUT_MOBILE_NUM_COLUMNS) == + (Cfg_LAYOUT_MOBILE_NUM_COLUMNS - 1)) + fprintf (Gbl.F.Out,""); + + NumOptVisible++; + } + } + + /***** Table end *****/ + fprintf (Gbl.F.Out,"
" + "
"); + + Act_FormStart (NumAct); + Act_LinkFormSubmit (Title, + (NumAct == Act_Actions[Gbl.CurrentAct].SuperAction) ? The_ClassMenuOn[Gbl.Prefs.Theme] : + The_ClassMenuOff[Gbl.Prefs.Theme]); + fprintf (Gbl.F.Out,"" + "
%s
" + "" + "" + "
" + "
"); + } + /*****************************************************************************/ /************* Put icons to select menu (horizontal or vertical) *************/ /*****************************************************************************/ diff --git a/swad_menu.h b/swad_menu.h index 3eeaa8543..668086e2b 100644 --- a/swad_menu.h +++ b/swad_menu.h @@ -49,6 +49,10 @@ typedef enum /***************************** Public prototypes *****************************/ /*****************************************************************************/ +void Mnu_WriteVerticalMenuThisTabDesktop (void); +void Mnu_WriteHorizontalMenuThisTabDesktop (void); +void Mnu_WriteMenuThisTabMobile (void); + void Mnu_PutIconsToSelectMenu (void); void Mnu_ChangeMenu (void); Mnu_Menu_t Mnu_GetParamMenu (void);