contrib/bsddialog: Import version 1.0.5
Version for change and feature requests.
* Improve documentation for --alternate-screen and --normal-screen.
Request: https://bugs.freebsd.org/285459. (This PR is not about
bsddialog itself but is used as an example for an official FreeBSD
documentation request.)
* Reduce the number of screen refreshes to improve performance over a
115200 UART connection.
Request: https://gitlab.com/alfix/bsddialog/-/issues/8.
* Change textbox buttons to return distinct values (previously always
returned OK).
Request: https://reviews.freebsd.org/D48668; already committed in
contrib/ 96a241a359
* Change forms navigation key behavior for ENTER and TAB.
Request: https://bugs.freebsd.org/287592.
Refer to /usr/src/contrib/bsddialog/CHANGELOG to know more.
PR: 287592
Reported by: adrian
Sponsored by: The FreeBSD Foundation
This commit is contained in:
+18
-1
@@ -9,6 +9,7 @@ HEADERS = bsddialog.h bsddialog_theme.h bsddialog_progressview.h
|
||||
SOURCES = barbox.c datebox.c formbox.c libbsddialog.c lib_util.c \
|
||||
menubox.c messagebox.c textbox.c theme.c timebox.c
|
||||
OBJECTS = $(SOURCES:.c=.o)
|
||||
PREFIX = /usr/local
|
||||
|
||||
ifneq ($(ENABLEDEBUG),)
|
||||
CFLAGS += -g
|
||||
@@ -21,7 +22,21 @@ LIBFLAG = -shared
|
||||
RM = rm -f
|
||||
LN = ln -s -f
|
||||
|
||||
all : $(LIBRARY)
|
||||
all: $(LIBRARY)
|
||||
|
||||
install: all
|
||||
${INSTALL} -m 0644 bsddialog.h ${DESTDIR}${PREFIX}/include/bsddialog.h
|
||||
${INSTALL} -m 0644 bsddialog_progressview.h ${DESTDIR}${PREFIX}/include/bsddialog_progressview.h
|
||||
${INSTALL} -m 0644 bsddialog_theme.h ${DESTDIR}${PREFIX}/include/bsddialog_theme.h
|
||||
${INSTALL} -m 0755 ${LIBRARY_SO}.${VERSION} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}.${VERSION}
|
||||
${LN} ${LIBRARY_SO}.${VERSION} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}
|
||||
|
||||
uninstall:
|
||||
${RM} ${DESTDIR}${PREFIX}/include/bsddialog.h
|
||||
${RM} ${DESTDIR}${PREFIX}/include/bsddialog_progressview.h
|
||||
${RM} ${DESTDIR}${PREFIX}/include/bsddialog_theme.h
|
||||
${RM} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}.${VERSION}
|
||||
${RM} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}
|
||||
|
||||
$(LIBRARY): $(OBJECTS)
|
||||
$(CC) $(LIBFLAG) $^ -o $(LIBRARY_SO).$(VERSION) $(LDFLAGS)
|
||||
@@ -32,3 +47,5 @@ $(LIBRARY): $(OBJECTS)
|
||||
|
||||
clean:
|
||||
$(RM) $(LIBRARY_SO)* *.o *~
|
||||
|
||||
.PHONY: all install uninstall ${LIBRARY} clean
|
||||
|
||||
+20
-1
@@ -10,6 +10,7 @@ HEADERS = bsddialog.h bsddialog_theme.h bsddialog_progressview.h
|
||||
SOURCES = barbox.c datebox.c formbox.c libbsddialog.c lib_util.c \
|
||||
menubox.c messagebox.c textbox.c theme.c timebox.c
|
||||
OBJECTS = ${SOURCES:.c=.o}
|
||||
PREFIX = /usr/local
|
||||
|
||||
.if defined(DEBUG)
|
||||
CFLAGS += -g
|
||||
@@ -23,7 +24,23 @@ LDFLAGS += -fstack-protector-strong -shared -Wl,-x -Wl,--fatal-warnings \
|
||||
LN = ln -s -f
|
||||
RM = rm -f
|
||||
|
||||
all : ${LIBRARY}
|
||||
all: ${LIBRARY}
|
||||
|
||||
install: all
|
||||
${INSTALL} -m 0644 bsddialog.h ${DESTDIR}${PREFIX}/include/bsddialog.h
|
||||
${INSTALL} -m 0644 bsddialog_progressview.h ${DESTDIR}${PREFIX}/include/bsddialog_progressview.h
|
||||
${INSTALL} -m 0644 bsddialog_theme.h ${DESTDIR}${PREFIX}/include/bsddialog_theme.h
|
||||
${INSTALL} -m 0644 ${LIBRARY_A} ${DESTDIR}${PREFIX}/lib/${LIBRARY_A}
|
||||
${INSTALL} -m 0755 ${LIBRARY_SO}.${VERSION} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}.${VERSION}
|
||||
${LN} ${LIBRARY_SO}.${VERSION} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}
|
||||
|
||||
uninstall:
|
||||
${RM} ${DESTDIR}${PREFIX}/include/bsddialog.h
|
||||
${RM} ${DESTDIR}${PREFIX}/include/bsddialog_progressview.h
|
||||
${RM} ${DESTDIR}${PREFIX}/include/bsddialog_theme.h
|
||||
${RM} ${DESTDIR}${PREFIX}/lib/${LIBRARY_A}
|
||||
${RM} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}.${VERSION}
|
||||
${RM} ${DESTDIR}${PREFIX}/lib/${LIBRARY_SO}
|
||||
|
||||
${LIBRARY}: ${LIBRARY_SO} ${LIBRARY_A}
|
||||
|
||||
@@ -42,3 +59,5 @@ ${LIBRARY_A}: ${OBJECTS}
|
||||
|
||||
clean:
|
||||
${RM} ${LIBRARY_SO}* *.o *~ *.gz ${LIBRARY_A}
|
||||
|
||||
.PHONY: all install uninstall ${LIBRARY} clean
|
||||
|
||||
+19
-18
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -371,7 +371,7 @@ bsddialog_progressview (struct bsddialog_conf *conf, const char *text, int rows,
|
||||
unsigned int i, mainperc, totaltodo;
|
||||
float readforsec;
|
||||
const char **minilabels;
|
||||
time_t tstart, told, tnew, refresh;
|
||||
time_t tstart, told, tnew, trefresh;
|
||||
|
||||
if ((minilabels = calloc(nminibar, sizeof(char*))) == NULL)
|
||||
RETURN_ERROR("Cannot allocate memory for minilabels");
|
||||
@@ -385,7 +385,7 @@ bsddialog_progressview (struct bsddialog_conf *conf, const char *text, int rows,
|
||||
minipercs[i] = minibar[i].status;
|
||||
}
|
||||
|
||||
refresh = pvconf->refresh == 0 ? 0 : pvconf->refresh - 1;
|
||||
trefresh = pvconf->refresh == 0 ? 0 : pvconf->refresh - 1;
|
||||
retval = BSDDIALOG_OK;
|
||||
i = 0;
|
||||
update = true;
|
||||
@@ -398,7 +398,7 @@ bsddialog_progressview (struct bsddialog_conf *conf, const char *text, int rows,
|
||||
mainperc = (bsddialog_total_progview * 100) / totaltodo;
|
||||
|
||||
time(&tnew);
|
||||
if (update || tnew > told + refresh) {
|
||||
if (update || tnew > told + trefresh) {
|
||||
retval = do_mixedgauge(conf, text, rows, cols, mainperc,
|
||||
nminibar, minilabels, minipercs, true);
|
||||
if (retval == BSDDIALOG_ERROR)
|
||||
@@ -440,17 +440,18 @@ bsddialog_progressview (struct bsddialog_conf *conf, const char *text, int rows,
|
||||
return (retval);
|
||||
}
|
||||
|
||||
static int rangebox_redraw(struct dialog *d, struct bar *b, int *bigchange)
|
||||
static int
|
||||
rangebox_redraw(struct dialog *d, bool redraw, struct bar *b, int *bigchange)
|
||||
{
|
||||
if (d->built) {
|
||||
if (redraw) {
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
if (dialog_size_position(d, HBOX, MIN_WBOX, NULL) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
if (draw_dialog(d) != 0) /* doupdate() in main loop */
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
TEXTPAD(d, HBOX + HBUTTONS);
|
||||
|
||||
@@ -490,7 +491,7 @@ bsddialog_rangebox(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
RETURN_ERROR("Cannot build WINDOW bar");
|
||||
b.y = b.x = 1;
|
||||
b.fmt = "%d";
|
||||
if (rangebox_redraw(&d, &b, &bigchange) != 0)
|
||||
if (rangebox_redraw(&d, false, &b, &bigchange) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
loop = true;
|
||||
@@ -568,12 +569,12 @@ bsddialog_rangebox(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
break;
|
||||
if (f1help_dialog(conf) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (rangebox_redraw(&d, &b, &bigchange) != 0)
|
||||
if (rangebox_redraw(&d, true, &b, &bigchange) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (rangebox_redraw(&d, &b, &bigchange) != 0)
|
||||
if (rangebox_redraw(&d, true, &b, &bigchange) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
default:
|
||||
@@ -594,17 +595,17 @@ bsddialog_rangebox(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
return (retval);
|
||||
}
|
||||
|
||||
static int pause_redraw(struct dialog *d, struct bar *b)
|
||||
static int pause_redraw(struct dialog *d, bool redraw, struct bar *b)
|
||||
{
|
||||
if (d->built) {
|
||||
if (redraw) {
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
if (dialog_size_position(d, HBOX, MIN_WBOX, NULL) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
if (draw_dialog(d) != 0) /* doupdate() in main loop */
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
TEXTPAD(d, HBOX + HBUTTONS);
|
||||
|
||||
@@ -633,7 +634,7 @@ bsddialog_pause(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
RETURN_ERROR("Cannot build WINDOW bar");
|
||||
b.y = b.x = 1;
|
||||
b.fmt = "%d";
|
||||
if (pause_redraw(&d, &b) != 0)
|
||||
if (pause_redraw(&d, false, &b) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
tout = *seconds;
|
||||
@@ -687,12 +688,12 @@ bsddialog_pause(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
break;
|
||||
if (f1help_dialog(conf) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (pause_redraw(&d, &b) != 0)
|
||||
if (pause_redraw(&d, true, &b) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (pause_redraw(&d, &b) != 0)
|
||||
if (pause_redraw(&d, true, &b) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
default:
|
||||
|
||||
+12
-4
@@ -1,5 +1,5 @@
|
||||
.\"
|
||||
.\" Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
.\" Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
.\"
|
||||
.\" Redistribution and use in source and binary forms, with or without
|
||||
.\" modification, are permitted provided that the following conditions
|
||||
@@ -22,11 +22,12 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd March 16, 2024
|
||||
.Dd June 22, 2025
|
||||
.Dt BSDDIALOG 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm bsddialog_backtitle ,
|
||||
.Nm bsddialog_backtitle_rf ,
|
||||
.Nm bsddialog_calendar ,
|
||||
.Nm bsddialog_clear ,
|
||||
.Nm bsddialog_color ,
|
||||
@@ -65,6 +66,8 @@
|
||||
.Ft int
|
||||
.Fn bsddialog_backtitle "struct bsddialog_conf *conf" "const char *backtitle"
|
||||
.Ft int
|
||||
.Fn bsddialog_backtitle_rf "struct bsddialog_conf *conf" "const char *backtitle"
|
||||
.Ft int
|
||||
.Fo bsddialog_calendar
|
||||
.Fa "struct bsddialog_conf *conf"
|
||||
.Fa "const char *text"
|
||||
@@ -292,7 +295,7 @@ and before
|
||||
.Dv false
|
||||
otherwise.
|
||||
.Pp
|
||||
.Fn bsddialog_backtitle
|
||||
.Fn bsddialog_backtitle_rf
|
||||
prints
|
||||
.Fa backtitle
|
||||
on the top of the screen.
|
||||
@@ -302,6 +305,11 @@ and
|
||||
.Fa conf.no_lines
|
||||
described later.
|
||||
.Pp
|
||||
.Fn bsddialog_backtitle
|
||||
is like
|
||||
.Fn bsddialog_backtitle_rf
|
||||
but it does not update the screen, using if a dialog is built later.
|
||||
.Pp
|
||||
.Fn bsddialog_error
|
||||
returns a string to describe the last error.
|
||||
The function should be called after a
|
||||
@@ -902,7 +910,7 @@ provides a dialog for a
|
||||
the labels on buttons are
|
||||
.Dq Yes
|
||||
and
|
||||
.Dq No .
|
||||
.Dq &No .
|
||||
.Ss Keys
|
||||
.Bl -tag -width Ds
|
||||
.It Ctrl-l
|
||||
|
||||
+3
-2
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#define LIBBSDDIALOG_VERSION "1.0.4"
|
||||
#define LIBBSDDIALOG_VERSION "1.0.5"
|
||||
|
||||
/* Return values */
|
||||
#define BSDDIALOG_ERROR -1
|
||||
@@ -179,6 +179,7 @@ int bsddialog_init_notheme(void);
|
||||
bool bsddialog_inmode(void);
|
||||
int bsddialog_end(void);
|
||||
int bsddialog_backtitle(struct bsddialog_conf *conf, const char *backtitle);
|
||||
int bsddialog_backtitle_rf(struct bsddialog_conf *conf, const char *backtitle);
|
||||
int bsddialog_initconf(struct bsddialog_conf *conf);
|
||||
void bsddialog_clear(unsigned int y);
|
||||
void bsddialog_refresh(void);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2023 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
|
||||
+14
-14
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2022-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2022-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -296,20 +296,20 @@ print_calendar(struct bsddialog_conf *conf, WINDOW *win, int yy, int mm, int dd,
|
||||
}
|
||||
|
||||
static int
|
||||
calendar_redraw(struct dialog *d, WINDOW *yy_win, WINDOW *mm_win,
|
||||
calendar_draw(struct dialog *d, bool redraw, WINDOW *yy_win, WINDOW *mm_win,
|
||||
WINDOW *dd_win)
|
||||
{
|
||||
int ycal, xcal;
|
||||
|
||||
if (d->built) {
|
||||
if (redraw) {
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
if (dialog_size_position(d, MINHCAL, MINWCAL, NULL) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
if (draw_dialog(d) != 0) /* doupdate in main loop */
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
TEXTPAD(d, MINHCAL + HBUTTONS);
|
||||
|
||||
@@ -354,7 +354,7 @@ bsddialog_calendar(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
if ((dd_win = newwin(1, 1, 1, 1)) == NULL)
|
||||
RETURN_ERROR("Cannot build WINDOW for dd");
|
||||
wbkgd(dd_win, t.dialog.color);
|
||||
if (calendar_redraw(&d, yy_win, mm_win, dd_win) != 0)
|
||||
if (calendar_draw(&d, false, yy_win, mm_win, dd_win) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
sel = -1;
|
||||
@@ -503,12 +503,12 @@ bsddialog_calendar(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
break;
|
||||
if (f1help_dialog(conf) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (calendar_redraw(&d, yy_win, mm_win, dd_win) != 0)
|
||||
if (calendar_draw(&d, true, yy_win, mm_win, dd_win) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (calendar_redraw(&d, yy_win, mm_win, dd_win) != 0)
|
||||
if (calendar_draw(&d, true, yy_win, mm_win, dd_win) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
default:
|
||||
@@ -533,11 +533,11 @@ bsddialog_calendar(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
return (retval);
|
||||
}
|
||||
|
||||
static int datebox_redraw(struct dialog *d, struct dateitem *di)
|
||||
static int datebox_draw(struct dialog *d, bool redraw, struct dateitem *di)
|
||||
{
|
||||
int y, x;
|
||||
|
||||
if (d->built) {
|
||||
if (redraw) {
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
@@ -545,7 +545,7 @@ static int datebox_redraw(struct dialog *d, struct dateitem *di)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
TEXTPAD(d, 3 /*windows*/ + HBUTTONS);
|
||||
|
||||
@@ -624,7 +624,7 @@ bsddialog_datebox(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
set_buttons(&d, true, OK_LABEL, CANCEL_LABEL);
|
||||
if (build_dateitem(conf->date.format, &yy, &mm, &dd, di) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (datebox_redraw(&d, di) != 0)
|
||||
if (datebox_draw(&d, false, di) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
sel = -1;
|
||||
@@ -716,12 +716,12 @@ bsddialog_datebox(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
break;
|
||||
if (f1help_dialog(conf) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (datebox_redraw(&d, di) != 0)
|
||||
if (datebox_draw(&d, true, di) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (datebox_redraw(&d, di) != 0)
|
||||
if (datebox_draw(&d, true, di) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
default:
|
||||
|
||||
+34
-14
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -601,11 +601,11 @@ static int form_size_position(struct dialog *d, struct privateform *f)
|
||||
}
|
||||
|
||||
static int
|
||||
form_redraw(struct dialog *d, struct privateform *f, bool focusinform)
|
||||
form_draw(struct dialog *d, bool redraw, struct privateform *f, bool focusinform)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (d->built) {
|
||||
if (redraw) {
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
@@ -613,9 +613,9 @@ form_redraw(struct dialog *d, struct privateform *f, bool focusinform)
|
||||
f->w = f->wmin;
|
||||
if (form_size_position(d, f) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
if (draw_dialog(d) != 0) /* doupdate() in main loop */
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
TEXTPAD(d, 2 /* box borders */ + f->viewrows + HBUTTONS);
|
||||
|
||||
@@ -707,7 +707,7 @@ bsddialog_form(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
}
|
||||
|
||||
form.formheight = formheight;
|
||||
if (form_redraw(&d, &form, focusinform) != 0)
|
||||
if (form_draw(&d, false, &form, focusinform) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
changeitem = switchfocus = false;
|
||||
@@ -719,10 +719,16 @@ bsddialog_form(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
switch(input) {
|
||||
case KEY_ENTER:
|
||||
case 10: /* Enter */
|
||||
if (focusinform && conf->button.always_active == false)
|
||||
break;
|
||||
retval = BUTTONVALUE(d.bs);
|
||||
loop = false;
|
||||
if (focusinform && conf->button.always_active == false) {
|
||||
next = nextitem(form.nitems, form.pritems, form.sel);
|
||||
if (next > form.sel)
|
||||
changeitem = true; /* needs next */
|
||||
else
|
||||
switchfocus = true;
|
||||
} else {
|
||||
retval = BUTTONVALUE(d.bs);
|
||||
loop = false;
|
||||
}
|
||||
break;
|
||||
case 27: /* Esc */
|
||||
if (conf->key.enable_esc) {
|
||||
@@ -732,7 +738,12 @@ bsddialog_form(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
break;
|
||||
case '\t': /* TAB */
|
||||
if (focusinform) {
|
||||
switchfocus = true;
|
||||
next = nextitem(form.nitems, form.pritems,
|
||||
form.sel);
|
||||
if (next > form.sel)
|
||||
changeitem = true; /* needs next */
|
||||
else
|
||||
switchfocus = true;
|
||||
} else {
|
||||
if (d.bs.curr + 1 < (int)d.bs.nbuttons) {
|
||||
d.bs.curr++;
|
||||
@@ -839,12 +850,12 @@ bsddialog_form(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
retval = BSDDIALOG_ERROR;
|
||||
loop = false;
|
||||
}
|
||||
if (form_redraw(&d, &form, focusinform) != 0)
|
||||
if (form_draw(&d, true, &form, focusinform) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (form_redraw(&d, &form, focusinform) != 0)
|
||||
if (form_draw(&d, true, &form, focusinform) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
default:
|
||||
@@ -884,11 +895,20 @@ bsddialog_form(struct bsddialog_conf *conf, const char *text, int rows,
|
||||
conf->button.always_active || !focusinform,
|
||||
!focusinform);
|
||||
wnoutrefresh(d.widget);
|
||||
DRAWITEM_TRICK(&form, form.sel, focusinform);
|
||||
if (focusinform == false)
|
||||
DRAWITEM_TRICK(&form, form.sel, false);
|
||||
else {
|
||||
next = firstitem(form.nitems, form.pritems);
|
||||
if (next == form.sel)
|
||||
DRAWITEM_TRICK(&form, form.sel, true);
|
||||
else
|
||||
changeitem = true;
|
||||
}
|
||||
switchfocus = false;
|
||||
}
|
||||
|
||||
if (changeitem) {
|
||||
/* useless after if(switchfocus) */
|
||||
DRAWITEM_TRICK(&form, form.sel, false);
|
||||
form.sel = next;
|
||||
item = &form.pritems[form.sel];
|
||||
|
||||
+2
-1
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2023 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -25,6 +25,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <curses.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -62,7 +62,7 @@ extern bool hastermcolors;
|
||||
RETURN_ERROR("*" #p " is NULL"); \
|
||||
} while (0)
|
||||
#define CHECK_ARRAY(nitem, a) do { \
|
||||
if (nitem > 0 && a == NULL) \
|
||||
if (nitem > 0 && a == NULL) \
|
||||
RETURN_FMTERROR(#nitem " is %d but *" #a " is NULL", nitem); \
|
||||
} while (0)
|
||||
/* widget utils */
|
||||
|
||||
+12
-2
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2023 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -114,11 +114,21 @@ int bsddialog_backtitle(struct bsddialog_conf *conf, const char *backtitle)
|
||||
mvhline_set(1, 1, WACS_HLINE, SCREENCOLS - 2);
|
||||
}
|
||||
|
||||
refresh();
|
||||
wnoutrefresh(stdscr);
|
||||
|
||||
return (BSDDIALOG_OK);
|
||||
}
|
||||
|
||||
int bsddialog_backtitle_rf(struct bsddialog_conf *conf, const char *backtitle)
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = bsddialog_backtitle(conf, backtitle);
|
||||
doupdate();
|
||||
|
||||
return (rv);
|
||||
}
|
||||
|
||||
bool bsddialog_inmode(void)
|
||||
{
|
||||
return (in_bsddialog_mode);
|
||||
|
||||
+9
-9
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -391,7 +391,7 @@ drawitem(struct bsddialog_conf *conf, struct privatemenu *m, int y, bool focus)
|
||||
attron(t.menu.bottomdesccolor);
|
||||
addstr(pritem->bottomdesc);
|
||||
attroff(t.menu.bottomdesccolor);
|
||||
refresh();
|
||||
wnoutrefresh(stdscr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -454,18 +454,18 @@ static int menu_size_position(struct dialog *d, struct privatemenu *m)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int mixedlist_redraw(struct dialog *d, struct privatemenu *m)
|
||||
static int mixedlist_draw(struct dialog *d, bool redraw, struct privatemenu *m)
|
||||
{
|
||||
if (d->built) {
|
||||
if (redraw) {
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
m->menurows = m->apimenurows;
|
||||
if (menu_size_position(d, m) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
if (draw_dialog(d) != 0) /* doupdate() in main loop */
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
TEXTPAD(d, 2/*bmenu*/ + m->menurows + HBUTTONS);
|
||||
|
||||
@@ -532,7 +532,7 @@ do_mixedlist(struct bsddialog_conf *conf, const char *text, int rows, int cols,
|
||||
drawitem(d.conf, &m, m.sel, true);
|
||||
m.ypad = 0;
|
||||
m.apimenurows = menurows;
|
||||
if (mixedlist_redraw(&d, &m) != 0)
|
||||
if (mixedlist_draw(&d, false, &m) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
changeitem = false;
|
||||
@@ -575,12 +575,12 @@ do_mixedlist(struct bsddialog_conf *conf, const char *text, int rows, int cols,
|
||||
break;
|
||||
if (f1help_dialog(conf) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (mixedlist_redraw(&d, &m) != 0)
|
||||
if (mixedlist_draw(&d, true, &m) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (mixedlist_redraw(&d, &m) != 0)
|
||||
if (mixedlist_draw(&d, true, &m) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
}
|
||||
|
||||
+8
-8
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -69,19 +69,19 @@ static int message_size_position(struct dialog *d, int *htext)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int message_draw(struct dialog *d, struct scroll *s)
|
||||
static int message_draw(struct dialog *d, bool redraw, struct scroll *s)
|
||||
{
|
||||
int unused;
|
||||
|
||||
if (d->built) {
|
||||
if (redraw) { /* redraw: RESIZE or F1 */
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
if (message_size_position(d, &s->htext) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
if (draw_dialog(d) != 0) /* doupdate() in main loop */
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
|
||||
s->printrows = d->h - BORDER - HBUTTONS - BORDER;
|
||||
@@ -106,7 +106,7 @@ do_message(struct bsddialog_conf *conf, const char *text, int rows, int cols,
|
||||
return (BSDDIALOG_ERROR);
|
||||
set_buttons(&d, true, oklabel, cancellabel);
|
||||
s.htext = -1;
|
||||
if (message_draw(&d, &s) != 0)
|
||||
if (message_draw(&d, false, &s) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
loop = true;
|
||||
@@ -170,12 +170,12 @@ do_message(struct bsddialog_conf *conf, const char *text, int rows, int cols,
|
||||
break;
|
||||
if (f1help_dialog(d.conf) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (message_draw(&d, &s) != 0)
|
||||
if (message_draw(&d, true, &s) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (message_draw(&d, &s) != 0)
|
||||
if (message_draw(&d, true, &s) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
default:
|
||||
|
||||
+9
-9
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -101,17 +101,17 @@ static int textbox_size_position(struct dialog *d, struct scrolltext *st)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int textbox_draw(struct dialog *d, struct scrolltext *st)
|
||||
static int textbox_draw(struct dialog *d, bool redraw, struct scrolltext *st)
|
||||
{
|
||||
if (d->built) {
|
||||
if (redraw) {
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
if (textbox_size_position(d, st) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
if (draw_dialog(d) != 0) /* wrefresh() and prefresh() in main loop */
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
|
||||
st->ys = d->y + 1;
|
||||
@@ -175,7 +175,7 @@ bsddialog_textbox(struct bsddialog_conf *conf, const char *file, int rows,
|
||||
fclose(fp);
|
||||
set_tabsize(defaulttablen); /* reset because it is curses global */
|
||||
|
||||
if (textbox_draw(&d, &st) != 0)
|
||||
if (textbox_draw(&d, false, &st) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
loop = true;
|
||||
@@ -200,7 +200,7 @@ bsddialog_textbox(struct bsddialog_conf *conf, const char *file, int rows,
|
||||
switch(input) {
|
||||
case KEY_ENTER:
|
||||
case 10: /* Enter */
|
||||
retval = BSDDIALOG_OK;
|
||||
retval = BUTTONVALUE(d.bs);
|
||||
loop = false;
|
||||
break;
|
||||
case 27: /* Esc */
|
||||
@@ -254,12 +254,12 @@ bsddialog_textbox(struct bsddialog_conf *conf, const char *file, int rows,
|
||||
break;
|
||||
if (f1help_dialog(conf) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (textbox_draw(&d, &st) != 0)
|
||||
if (textbox_draw(&d, true, &st) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (textbox_draw(&d, &st) != 0)
|
||||
if (textbox_draw(&d, true, &st) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2023 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -217,7 +217,7 @@ int bsddialog_set_theme(struct bsddialog_theme *theme)
|
||||
{
|
||||
CHECK_PTR(theme);
|
||||
set_theme(&t, theme);
|
||||
refresh();
|
||||
wnoutrefresh(stdscr);
|
||||
|
||||
return (BSDDIALOG_OK);
|
||||
}
|
||||
@@ -239,7 +239,7 @@ int bsddialog_set_default_theme(enum bsddialog_default_theme newtheme)
|
||||
"to use enum bsddialog_default_theme",
|
||||
newtheme);
|
||||
}
|
||||
refresh();
|
||||
wnoutrefresh(stdscr);
|
||||
|
||||
return (BSDDIALOG_OK);
|
||||
}
|
||||
|
||||
+8
-8
@@ -1,7 +1,7 @@
|
||||
/*-
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*
|
||||
* Copyright (c) 2021-2024 Alfonso Sabato Siciliano
|
||||
* Copyright (c) 2021-2025 Alfonso Sabato Siciliano
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@@ -62,19 +62,19 @@ drawsquare(struct bsddialog_conf *conf, WINDOW *win, unsigned int value,
|
||||
wnoutrefresh(win);
|
||||
}
|
||||
|
||||
static int timebox_redraw(struct dialog *d, struct clock *c)
|
||||
static int timebox_draw(struct dialog *d, bool redraw, struct clock *c)
|
||||
{
|
||||
int y, x;
|
||||
|
||||
if (d->built) {
|
||||
if (redraw) {
|
||||
hide_dialog(d);
|
||||
refresh(); /* Important for decreasing screen */
|
||||
}
|
||||
if (dialog_size_position(d, HBOX, MINWTIME, NULL) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (draw_dialog(d) != 0)
|
||||
if (draw_dialog(d) != 0) /* doupdate() in mail loop */
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (d->built)
|
||||
if (redraw)
|
||||
refresh(); /* Important to fix grey lines expanding screen */
|
||||
TEXTPAD(d, HBOX + HBUTTONS);
|
||||
|
||||
@@ -117,7 +117,7 @@ bsddialog_timebox(struct bsddialog_conf *conf, const char* text, int rows,
|
||||
wbkgd(c[i].win, t.dialog.color);
|
||||
c[i].value = MIN(c[i].value, c[i].max);
|
||||
}
|
||||
if (timebox_redraw(&d, c) != 0)
|
||||
if (timebox_draw(&d, false, c) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
|
||||
sel = -1;
|
||||
@@ -210,12 +210,12 @@ bsddialog_timebox(struct bsddialog_conf *conf, const char* text, int rows,
|
||||
break;
|
||||
if (f1help_dialog(conf) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
if (timebox_redraw(&d, c) != 0)
|
||||
if (timebox_draw(&d, true, c) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
case KEY_CTRL('l'):
|
||||
case KEY_RESIZE:
|
||||
if (timebox_redraw(&d, c) != 0)
|
||||
if (timebox_draw(&d, true, c) != 0)
|
||||
return (BSDDIALOG_ERROR);
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user