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