// swad_box.c: layout of boxes /* 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. Copyright (C) 1999-2019 Antonio Caņas Vargas 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 . */ /*****************************************************************************/ /********************************* Headers ***********************************/ /*****************************************************************************/ #include // For boolean type #include // For fprintf #include "swad_action.h" #include "swad_box.h" #include "swad_form.h" #include "swad_global.h" #include "swad_help.h" #include "swad_table.h" /*****************************************************************************/ /************** External global variables from others modules ****************/ /*****************************************************************************/ extern struct Globals Gbl; /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ /*****************************************************************************/ /***************************** Private constants *****************************/ /*****************************************************************************/ /*****************************************************************************/ /******************************* Private types *******************************/ /*****************************************************************************/ /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ static void Box_StartBoxInternal (const char *Width,const char *Title, void (*FunctionToDrawContextualIcons) (void), const char *HelpLink,Box_Closable_t Closable, const char *ClassFrame); /*****************************************************************************/ /******************* Start and end a table with rounded box ******************/ /*****************************************************************************/ // CellPadding must be 0, 1, 2, 4 or 8 void Box_StartBoxTable (const char *Width,const char *Title, void (*FunctionToDrawContextualIcons) (void), const char *HelpLink,Box_Closable_t Closable, unsigned CellPadding) // CellPadding must be 0, 1, 2, 5 or 10 { Box_StartBox (Width,Title,FunctionToDrawContextualIcons, HelpLink,Closable); Tbl_StartTableWide (CellPadding); } void Box_StartBoxTableShadow (const char *Width,const char *Title, void (*FunctionToDrawContextualIcons) (void), const char *HelpLink, unsigned CellPadding) // CellPadding must be 0, 1, 2, 5 or 10 { Box_StartBoxShadow (Width,Title, FunctionToDrawContextualIcons, HelpLink); Tbl_StartTableWide (CellPadding); } void Box_StartBox (const char *Width,const char *Title, void (*FunctionToDrawContextualIcons) (void), const char *HelpLink,Box_Closable_t Closable) { Box_StartBoxInternal (Width,Title, FunctionToDrawContextualIcons, HelpLink,Closable, "FRAME"); } void Box_StartBoxShadow (const char *Width,const char *Title, void (*FunctionToDrawContextualIcons) (void), const char *HelpLink) { Box_StartBoxInternal (Width,Title, FunctionToDrawContextualIcons, HelpLink,Box_NOT_CLOSABLE, "FRAME_SHADOW"); } static void Box_StartBoxInternal (const char *Width,const char *Title, void (*FunctionToDrawContextualIcons) (void), const char *HelpLink,Box_Closable_t Closable, const char *ClassFrame) { extern const char *Txt_Help; extern const char *Txt_Close; char IdFrame[Frm_MAX_BYTES_ID + 1]; /***** Start box container *****/ fprintf (Gbl.F.Out,"
"); /***** Start box *****/ fprintf (Gbl.F.Out,"
"); /***** Row for left and right icons *****/ fprintf (Gbl.F.Out,"
"); /* Contextual icons at left */ if (FunctionToDrawContextualIcons) { fprintf (Gbl.F.Out,"
"); FunctionToDrawContextualIcons (); fprintf (Gbl.F.Out,"
"); } /* Icons at right: help and close */ fprintf (Gbl.F.Out,"
"); if (HelpLink) // Link to help { fprintf (Gbl.F.Out,"", Hlp_WIKI,HelpLink); Ico_PutDivIcon ("CONTEXT_OPT HLP_HIGHLIGHT", "question.svg",Txt_Help); fprintf (Gbl.F.Out,""); } if (Closable == Box_CLOSABLE) // Icon to close the box { fprintf (Gbl.F.Out,"", IdFrame); Ico_PutDivIcon ("CONTEXT_OPT HLP_HIGHLIGHT", "close.svg",Txt_Close); fprintf (Gbl.F.Out,""); } fprintf (Gbl.F.Out,"
"); /***** End row for left and right icons *****/ fprintf (Gbl.F.Out,"
"); /***** Frame title *****/ if (Title) fprintf (Gbl.F.Out,"
" "%s" "
", Gbl.Layout.NestedBox ? "FRAME_TITLE_SMALL" : "FRAME_TITLE_BIG", Title); Gbl.Layout.NestedBox++; } void Box_EndBoxTable (void) { Tbl_EndTable (); Box_EndBox (); } void Box_EndBoxTableWithButton (Btn_Button_t Button,const char *TxtButton) { Tbl_EndTable (); Box_EndBoxWithButton (Button,TxtButton); } void Box_EndBoxWithButton (Btn_Button_t Button,const char *TxtButton) { Btn_PutButton (Button,TxtButton); Box_EndBox (); } void Box_EndBox (void) { Gbl.Layout.NestedBox--; /***** End box and box container *****/ fprintf (Gbl.F.Out,"
" "
"); }