string askForFilename(string defFilename) {
WINDOW* dialog;
FORM* form;
FIELD* fields[2];
int key;
//tworzymy formularz
fields[0] = new_field(1, 26, 0, 0, 0, 0);
fields[1] = 0;
set_field_type(fields[0], TYPE_ALNUM, 50);
set_field_buffer(fields[0], 0, defFilename.c_str());
//opcje
//curs_set(0);
form = new_form(fields);
set_field_back(fields[0], A_REVERSE);
//odpalamy okno
dialog = newwin(5, 30, 8, 25);
mvwaddstr(dialog, 1, 6, "Podaj nazwe pliku:");
keypad(dialog, true);
box(dialog, 0 , 0);
wrefresh(dialog);
//zależności między oknami
set_form_win(form, dialog);
set_form_sub(form, derwin(dialog, 1, 26, 3, 2));
//odpalamy formularz…
post_form(form);
//i obsługujemy go
do {
wrefresh(dialog);
key = wgetch(dialog);
switch(key) {
case KEY_LEFT: {
form_driver(form, REQ_PREV_CHAR);
break;
} case KEY_RIGHT: {
form_driver(form, REQ_NEXT_CHAR);
break;
} case KEY_BACKSPACE: {
form_driver(form, REQ_DEL_PREV);
break;
} case KEY_DC: {
form_driver(form, REQ_DEL_CHAR);
break;
} default: {
form_driver(form, key);
}
}
} while (key != 10);
//zapisujemy wartość
defFilename = stripSpace(field_buffer(fields[0], 0));
printw("test: %s", defFilename.c_str());
//niszczymy okno i formularz
unpost_form(form);
free_form(form);
free_field(fields[0]);
wclear(dialog);
wrefresh(dialog);
delwin(dialog);
curs_set(1);
refresh(); //żeby kursor wrócił na miejsce
return defFilename;
}
Z jakiegoś powodu linijka "printw("test: %s", defFilename.c_str());" wyświetla mi stringa jedynie gdy to co wprowadzę w formularzu będzie dłuższe lub równe co jego długość (czyli 26). Problemem na pewno nie jest f-cja stripSpace. Czy ktoś ma jakiś pomysł?