2 Widget based utility functions.
4 Copyright (C) 1994-2016
5 Free Software Foundation, Inc.
8 Miguel de Icaza, 1994, 1995, 1996
9 Radek Doulik, 1994, 1995
11 Andrej Borsenkow, 1995
12 Andrew Borodin <aborodin@vmail.ru>, 2009, 2010, 2013
14 This file is part of the Midnight Commander.
16 The Midnight Commander is free software: you can redistribute it
17 and/or modify it under the terms of the GNU General Public License as
18 published by the Free Software Foundation, either version 3 of the License,
19 or (at your option) any later version.
21 The Midnight Commander is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 GNU General Public License for more details.
26 You should have received a copy of the GNU General Public License
27 along with this program. If not, see <http://www.gnu.org/licenses/>.
30 /** \file listbox-window.c
31 * \brief Source: Listbox widget, a listbox within dialog window
38 #include "lib/global.h"
39 #include "lib/tty/tty.h" /* COLS */
41 #include "lib/strutil.h" /* str_term_width1() */
42 #include "lib/widget.h"
44 /*** global variables ****************************************************************************/
46 /*** file scope macro definitions ****************************************************************/
48 /*** file scope type declarations ****************************************************************/
50 /*** file scope variables ************************************************************************/
52 /*** file scope functions ************************************************************************/
54 /* --------------------------------------------------------------------------------------------- */
55 /*** public functions ****************************************************************************/
56 /* --------------------------------------------------------------------------------------------- */
59 create_listbox_window_centered (int center_y
, int center_x
, int lines
, int cols
,
60 const char *title
, const char *help
)
64 int xpos
= 0, ypos
= 0;
66 dlg_flags_t dlg_flags
= DLG_TRYUP
;
69 lines
= MIN (lines
, LINES
- 6);
75 len
= str_term_width1 (title
) + 4;
76 cols
= MAX (cols
, len
);
79 cols
= MIN (cols
, COLS
- 6);
82 if ((center_y
< 0) || (center_x
< 0))
83 dlg_flags
|= DLG_CENTER
;
86 /* Actually, this this is not used in MC. */
94 if (ypos
+ lines
>= LINES
)
95 ypos
= LINES
- lines
- space
;
99 if (xpos
+ cols
>= COLS
)
100 xpos
= COLS
- cols
- space
;
105 listbox
= g_new (Listbox
, 1);
108 dlg_create (TRUE
, ypos
, xpos
, lines
+ space
, cols
+ space
,
109 listbox_colors
, NULL
, NULL
, help
, title
, dlg_flags
);
111 listbox
->list
= listbox_new (2, 2, lines
, cols
, FALSE
, NULL
);
112 add_widget (listbox
->dlg
, listbox
->list
);
117 /* --------------------------------------------------------------------------------------------- */
120 create_listbox_window (int lines
, int cols
, const char *title
, const char *help
)
122 return create_listbox_window_centered (-1, -1, lines
, cols
, title
, help
);
125 /* --------------------------------------------------------------------------------------------- */
127 /** Returns the number of the item selected */
129 run_listbox (Listbox
* l
)
133 if (dlg_run (l
->dlg
) != B_CANCEL
)
135 dlg_destroy (l
->dlg
);
140 /* --------------------------------------------------------------------------------------------- */