xref: /dflybsd-src/usr.sbin/installer/dfuife_curses/curses_bar.c (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
186d7f5d3SJohn Marino /*
286d7f5d3SJohn Marino  * Copyright (c)2004 Cat's Eye Technologies.  All rights reserved.
386d7f5d3SJohn Marino  *
486d7f5d3SJohn Marino  * Redistribution and use in source and binary forms, with or without
586d7f5d3SJohn Marino  * modification, are permitted provided that the following conditions
686d7f5d3SJohn Marino  * are met:
786d7f5d3SJohn Marino  *
886d7f5d3SJohn Marino  *   Redistributions of source code must retain the above copyright
986d7f5d3SJohn Marino  *   notice, this list of conditions and the following disclaimer.
1086d7f5d3SJohn Marino  *
1186d7f5d3SJohn Marino  *   Redistributions in binary form must reproduce the above copyright
1286d7f5d3SJohn Marino  *   notice, this list of conditions and the following disclaimer in
1386d7f5d3SJohn Marino  *   the documentation and/or other materials provided with the
1486d7f5d3SJohn Marino  *   distribution.
1586d7f5d3SJohn Marino  *
1686d7f5d3SJohn Marino  *   Neither the name of Cat's Eye Technologies nor the names of its
1786d7f5d3SJohn Marino  *   contributors may be used to endorse or promote products derived
1886d7f5d3SJohn Marino  *   from this software without specific prior written permission.
1986d7f5d3SJohn Marino  *
2086d7f5d3SJohn Marino  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2186d7f5d3SJohn Marino  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2286d7f5d3SJohn Marino  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
2386d7f5d3SJohn Marino  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
2486d7f5d3SJohn Marino  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
2586d7f5d3SJohn Marino  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
2686d7f5d3SJohn Marino  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
2786d7f5d3SJohn Marino  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2886d7f5d3SJohn Marino  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
2986d7f5d3SJohn Marino  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3086d7f5d3SJohn Marino  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
3186d7f5d3SJohn Marino  * OF THE POSSIBILITY OF SUCH DAMAGE.
3286d7f5d3SJohn Marino  */
3386d7f5d3SJohn Marino 
3486d7f5d3SJohn Marino /*
3586d7f5d3SJohn Marino  * curses_bar.c
3686d7f5d3SJohn Marino  * $Id: curses_bar.c,v 1.7 2005/02/08 06:03:21 cpressey Exp $
3786d7f5d3SJohn Marino  */
3886d7f5d3SJohn Marino 
3986d7f5d3SJohn Marino #include <ncurses.h>
4086d7f5d3SJohn Marino #include <panel.h>
4186d7f5d3SJohn Marino #include <stdlib.h>
4286d7f5d3SJohn Marino #include <string.h>
4386d7f5d3SJohn Marino 
4486d7f5d3SJohn Marino #include "libaura/mem.h"
4586d7f5d3SJohn Marino 
4686d7f5d3SJohn Marino #include "curses_util.h"
4786d7f5d3SJohn Marino #include "curses_bar.h"
4886d7f5d3SJohn Marino 
4986d7f5d3SJohn Marino struct curses_bar *
curses_bar_new(unsigned int x,unsigned int y,unsigned int width,unsigned int height,int colors,int flags)5086d7f5d3SJohn Marino curses_bar_new(unsigned int x, unsigned int y,
5186d7f5d3SJohn Marino 		unsigned int width, unsigned int height,
5286d7f5d3SJohn Marino 		int colors, int flags)
5386d7f5d3SJohn Marino {
5486d7f5d3SJohn Marino 	struct curses_bar *b;
5586d7f5d3SJohn Marino 
5686d7f5d3SJohn Marino 	AURA_MALLOC(b, curses_bar);
5786d7f5d3SJohn Marino 
5886d7f5d3SJohn Marino 	if (flags & CURSES_BAR_WIDEN)
5986d7f5d3SJohn Marino 		width = xmax;
6086d7f5d3SJohn Marino 	if (flags & CURSES_BAR_BOTTOM)
6186d7f5d3SJohn Marino 		y = ymax - 1;
6286d7f5d3SJohn Marino 
6386d7f5d3SJohn Marino 	b->x = x;
6486d7f5d3SJohn Marino 	b->y = y;
6586d7f5d3SJohn Marino 	b->width = width;
6686d7f5d3SJohn Marino 	b->height = height;
6786d7f5d3SJohn Marino 	b->colors = colors;
6886d7f5d3SJohn Marino 
6986d7f5d3SJohn Marino 	if ((b->win = newwin(height, width, y, x)) == NULL) {
7086d7f5d3SJohn Marino 		AURA_FREE(b, curses_bar);
7186d7f5d3SJohn Marino 		return(NULL);
7286d7f5d3SJohn Marino 	}
7386d7f5d3SJohn Marino 
7486d7f5d3SJohn Marino 	curses_colors_set(b->win, colors);
7586d7f5d3SJohn Marino 	curses_window_blank(b->win);
7686d7f5d3SJohn Marino 
7786d7f5d3SJohn Marino 	if ((b->pan = new_panel(b->win)) == NULL) {
7886d7f5d3SJohn Marino 		delwin(b->win);
7986d7f5d3SJohn Marino 		AURA_FREE(b, curses_bar);
8086d7f5d3SJohn Marino 		return(NULL);
8186d7f5d3SJohn Marino 	}
8286d7f5d3SJohn Marino 
8386d7f5d3SJohn Marino 	return(b);
8486d7f5d3SJohn Marino }
8586d7f5d3SJohn Marino 
8686d7f5d3SJohn Marino void
curses_bar_free(struct curses_bar * b)8786d7f5d3SJohn Marino curses_bar_free(struct curses_bar *b)
8886d7f5d3SJohn Marino {
8986d7f5d3SJohn Marino 	if (b != NULL) {
9086d7f5d3SJohn Marino 		if (b->pan != NULL) {
9186d7f5d3SJohn Marino 			del_panel(b->pan);
9286d7f5d3SJohn Marino 			if (b->win != NULL) {
9386d7f5d3SJohn Marino 				delwin(b->win);
9486d7f5d3SJohn Marino 			}
9586d7f5d3SJohn Marino 		}
9686d7f5d3SJohn Marino 		AURA_FREE(b, curses_bar);
9786d7f5d3SJohn Marino 	}
9886d7f5d3SJohn Marino 
9986d7f5d3SJohn Marino 	update_panels();
10086d7f5d3SJohn Marino 	doupdate();
10186d7f5d3SJohn Marino }
10286d7f5d3SJohn Marino 
10386d7f5d3SJohn Marino void
curses_bar_set_text(struct curses_bar * b,const char * text)10486d7f5d3SJohn Marino curses_bar_set_text(struct curses_bar *b, const char *text)
10586d7f5d3SJohn Marino {
10686d7f5d3SJohn Marino 	int spaces;
10786d7f5d3SJohn Marino 
10886d7f5d3SJohn Marino 	curses_colors_set(b->win, b->colors);
10986d7f5d3SJohn Marino 	mvwaddstr(b->win, 0, 0, text);
11086d7f5d3SJohn Marino 	spaces = b->width - strlen(text);
11186d7f5d3SJohn Marino 	whline(b->win, ' ', spaces);
11286d7f5d3SJohn Marino }
113