Проблема в том, что функция myDrawButton не рисует кнопочку.
Код: Выделить всё
#include <panel.h>
#include <signal.h>
#include <termios.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
/*
URL-Collector for Linux. Based on ncurses.
Created by TechnoMag
*/
WINDOW *wmain, *wadd, *wview, *whelp;
PANEL *pmain, *pview, *phelp, *padd;
FILE *resources;
const char* main_menu="[F1-Help] [F2-Сохр] [F3-Доб] [R-Откр] [F8-Удал] [F9-Настройки] [F10-Выход] ";
const char* help_strings[]=
{"Программа для хранения адресов сайтов.",
"Функциональные клавиши:",
"F1 - Помощь",
"F2 - Сохранить список сайтов",
"F3 - Добавить адрес",
"R - Открыть ссылку",
"F8 - Удалить адрес",
"F9 - Настройки",
"F10 - Выход",
"Клавиши управления:",
"Tab - переключение между элементами управления",
"Enter - выполнение действия",
"Esc - отмена, выход из окна",
"TechnoMag (C) 2008"};
WINDOW* init_wins(int x, int y, int height, int width, int bgcolor, bool dialog);
void update_main()
{
wattron(wmain, COLOR_PAIR(1));
mvwprintw(wmain,0, 5,"Список ресурсов");
wattron(wmain, COLOR_PAIR(4));
}
void update_view()
{
wattron(wview, COLOR_PAIR(2));
mvwprintw(wview,0, 5,"Подробности о ссылке");
wattron(wmain, COLOR_PAIR(3));
}
void wndHelp()
{
int i;
wattron(whelp, COLOR_PAIR(7));
mvwprintw(whelp,0, 5, "Помощь по URL-Collector v0.1 от TechnoMag");
wattron(whelp, COLOR_PAIR(6));
for (i=0; i<=13; i++){
mvwprintw(whelp, i+2 , 2, help_strings[i]);
}
update_panels();
doupdate();
getch();
del_panel(phelp);
delwin(whelp);
}
void myDrawButton(WINDOW *wnd, int x, int y, char *caption, int color)
{
wattron(wnd, COLOR_PAIR(color));
mvwprintw(wnd, y, x, caption);
wattron(wnd, COLOR_PAIR(4));
//mvwprintw(wadd, y+1, x+1,
mvwinsnstr(wnd, y+1, x+1, " ", strlen(caption));
}
void wndAdd()
{
wattron(wadd, COLOR_PAIR(8));
mvwprintw(wadd,0, 5, "Добавить ссылку");
mvwprintw(wadd,2, 3, "URL:");
wattron(wadd, COLOR_PAIR(7));
mvwprintw(wadd,3, 3, " ");
myDrawButton(wadd, 3, 50, " < Ok > ", 1);
//mvwprintw(wadd, 3, 50, "ok");
wattron(wadd, COLOR_PAIR(8));
mvwprintw(wadd,5, 3, "Комментарий:");
wattron(wadd, COLOR_PAIR(7));
mvwprintw(wadd,6, 3, " ");
update_panels();
doupdate();
getch();
del_panel(padd);
delwin(wadd);
}
void sig_winch(int signo)
{
struct winsize size;
ioctl(fileno(stdout), TIOCGWINSZ, (char *) &size);
resizeterm(size.ws_row, size.ws_col);
wattron(wmain, COLOR_PAIR(4));
wresize(wmain, 15, size.ws_col);
wclear(wmain);
box(wmain, '|', '-');
update_main();
wrefresh(wmain);
wattron(wview, COLOR_PAIR(3));
wresize(wview, size.ws_row, size.ws_col);
wclear(wview);
box(wview, '|', '-');
update_view();
wrefresh(wview);
//update_panels();
//doupdate();
}
int main(int argc, char *argv[])
{
int key;
initscr();
resources=fopen("url.list", "a");
signal(SIGWINCH, sig_winch);
start_color();
cbreak();
noecho(); // отключаем отображение нажатых клавиш
keypad(stdscr, TRUE); // включаем обработку командных клавиш
init_pair(1, COLOR_BLACK, COLOR_GREEN);
init_pair(2, COLOR_BLACK, COLOR_YELLOW);
init_pair(3, COLOR_YELLOW, COLOR_BLACK);
init_pair(4, COLOR_GREEN, COLOR_BLACK);
init_pair(5, COLOR_RED, COLOR_WHITE);
init_pair(6, COLOR_BLUE, COLOR_WHITE);
init_pair(7, COLOR_WHITE, COLOR_BLUE);
init_pair(8, COLOR_BLACK, COLOR_CYAN);
attron(COLOR_PAIR(5));
printw(main_menu);
wmain=init_wins(0, 1, 15, 5, 4, FALSE);
wview=init_wins(0, 16, 8, 5, 3, FALSE);
pmain=new_panel(wmain);
pview=new_panel(wview);
update_main();
update_view();
update_panels();
doupdate();
while ((key=getch())!=KEY_F(10))
{
if (key==KEY_F(1))
{
whelp=init_wins(3,3, 20, 70, 6, TRUE);
phelp=new_panel(whelp);
wndHelp();
update_panels();
doupdate();
}
if (key==KEY_F(3))
{
wadd=init_wins(5,5, 9, 70, 8, TRUE);
padd=new_panel(wadd);
wndAdd();
update_panels();
doupdate();
}
}
del_panel(pmain);
delwin(wmain);
refresh();
endwin();
fclose(resources);
return 0;
}
WINDOW* init_wins(int x, int y, int height, int width, int bgcolor, bool dialog)
{
WINDOW *wnd;
struct winsize size;
if (dialog==TRUE)
{
wnd=newwin(height, width, y, x);
}
else
{
ioctl(fileno(stdout), TIOCGWINSZ, (char *) &size);
wnd=newwin(height, size.ws_col, y, x);
}
wattron(wnd, COLOR_PAIR(bgcolor));
wbkgdset(wnd, COLOR_PAIR(bgcolor));
wclear(wnd);
box(wnd, '|', '-');
wrefresh(wnd);
return wnd;
}