1 /* 2 Widgets for the Midnight Commander 3 4 Copyright (C) 1994-2024 5 Free Software Foundation, Inc. 6 7 Authors: 8 Radek Doulik, 1994, 1995 9 Miguel de Icaza, 1994, 1995 10 Jakub Jelinek, 1995 11 Andrej Borsenkow, 1996 12 Norbert Warmuth, 1997 13 Andrew Borodin <aborodin@vmail.ru>, 2009-2022 14 15 This file is part of the Midnight Commander. 16 17 The Midnight Commander is free software: you can redistribute it 18 and/or modify it under the terms of the GNU General Public License as 19 published by the Free Software Foundation, either version 3 of the License, 20 or (at your option) any later version. 21 22 The Midnight Commander is distributed in the hope that it will be useful, 23 but WITHOUT ANY WARRANTY; without even the implied warranty of 24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 25 GNU General Public License for more details. 26 27 You should have received a copy of the GNU General Public License 28 along with this program. If not, see <http://www.gnu.org/licenses/>. 29 */ 30 31 /** \file groupbox.c 32 * \brief Source: WGroupbox widget 33 */ 34 35 #include <config.h> 36 37 #include "lib/global.h" 38 39 #include "lib/tty/tty.h" 40 #include "lib/tty/color.h" 41 #include "lib/skin.h" 42 #include "lib/util.h" 43 #include "lib/widget.h" 44 45 /*** global variables ****************************************************************************/ 46 47 /*** file scope macro definitions ****************************************************************/ 48 49 /*** file scope type declarations ****************************************************************/ 50 51 /*** forward declarations (file scope functions) *************************************************/ 52 53 /*** file scope variables ************************************************************************/ 54 55 /* --------------------------------------------------------------------------------------------- */ 56 /*** file scope functions ************************************************************************/ 57 /* --------------------------------------------------------------------------------------------- */ 58 59 static cb_ret_t 60 groupbox_callback (Widget *w, Widget *sender, widget_msg_t msg, int parm, void *data) /* */ 61 { 62 WGroupbox *g = GROUPBOX (w); 63 64 switch (msg) 65 { 66 case MSG_DRAW: 67 { 68 gboolean disabled; 69 const int *colors; 70 71 colors = widget_get_colors (w); 72 73 disabled = widget_get_state (w, WST_DISABLED); 74 tty_setcolor (disabled ? DISABLED_COLOR : colors[DLG_COLOR_NORMAL]); 75 tty_draw_box (w->rect.y, w->rect.x, w->rect.lines, w->rect.cols, TRUE); 76 77 if (g->title != NULL) 78 { 79 tty_setcolor (disabled ? DISABLED_COLOR : colors[DLG_COLOR_TITLE]); 80 widget_gotoyx (w, 0, 1); 81 tty_print_string (g->title); 82 } 83 return MSG_HANDLED; 84 } 85 86 case MSG_DESTROY: 87 g_free (g->title); 88 return MSG_HANDLED; 89 90 default: 91 return widget_default_callback (w, sender, msg, parm, data); 92 } 93 } 94 95 /* --------------------------------------------------------------------------------------------- */ 96 /*** public functions ****************************************************************************/ 97 /* --------------------------------------------------------------------------------------------- */ 98 99 WGroupbox * 100 groupbox_new (int y, int x, int height, int width, const char *title) /* */ 101 { 102 WRect r = { y, x, height, width }; 103 WGroupbox *g; 104 Widget *w; 105 106 g = g_new (WGroupbox, 1); 107 w = WIDGET (g); 108 widget_init (w, &r, groupbox_callback, NULL); 109 110 g->title = NULL; 111 groupbox_set_title (g, title); 112 113 return g; 114 } 115 116 /* --------------------------------------------------------------------------------------------- */ 117 118 void 119 groupbox_set_title (WGroupbox *g, const char *title) /* */ 120 { 121 MC_PTR_FREE (g->title); 122 123 /* Strip existing spaces, add one space before and after the title */ 124 if (title != NULL && *title != '\0') 125 { 126 char *t; 127 128 t = g_strstrip (g_strdup (title)); 129 g->title = g_strconcat (" ", t, " ", (char *) NULL); 130 g_free (t); 131 } 132 133 widget_draw (WIDGET (g)); 134 } 135 136 /* --------------------------------------------------------------------------------------------- */