master
denes 8 years ago
parent 00f799e298
commit 8dc6b415fd
Signed by: denes
GPG Key ID: A7D50EAD42F9FC9F

@ -94,33 +94,25 @@ public:
, history_() , history_()
, history_string_() , history_string_()
{ {
/* Crate menu */
menu_ = new_menu((ITEM **)items_); menu_ = new_menu((ITEM **)items_);
/* Create the window to be associated with the menu */
current_win_ = newwin(10, 40, 1, 0); current_win_ = newwin(10, 40, 1, 0);
keypad(current_win_, TRUE); keypad(current_win_, TRUE);
/* Set main window and sub window */
set_menu_win(menu_, current_win_); set_menu_win(menu_, current_win_);
set_menu_sub(menu_, derwin(current_win_, 6, 38, 3, 1)); set_menu_sub(menu_, derwin(current_win_, 6, 38, 3, 1));
set_menu_format(menu_, 6, 1); set_menu_format(menu_, 6, 1);
/* Set menu mark to the string " * " */
set_menu_mark(menu_, " "); set_menu_mark(menu_, " ");
/* Print a border around the main window and print a title */
box(current_win_, 0, 0); box(current_win_, 0, 0);
//wborder(current_win_, '|', '|', '-', '-', '+', '+', '+', '+');
printInTheMiddle(current_win_, 1, 0, 40, "Current");
mvwaddch(current_win_, 2, 0, ACS_LTEE); mvwaddch(current_win_, 2, 0, ACS_LTEE);
mvwhline(current_win_, 2, 1, ACS_HLINE, 38); mvwhline(current_win_, 2, 1, ACS_HLINE, 38);
mvwaddch(current_win_, 2, 39, ACS_RTEE); mvwaddch(current_win_, 2, 39, ACS_RTEE);
mvprintw(TERM_MAX_Y-1, 0, "ESC to exit, cursor keys to navigate"); mvprintw(TERM_MAX_Y-1, 0, "ESC to exit, cursor keys to navigate");
refresh(); refresh();
/* Post the menu */
post_menu(menu_); post_menu(menu_);
wrefresh(current_win_); wrefresh(current_win_);
} }
@ -150,33 +142,12 @@ public:
const std::string prev = history_.back(); const std::string prev = history_.back();
history_.pop_back(); history_.pop_back();
current_ = prev; update(prev);
const std::vector<std::string>& n = graph_.neighboursOf(prev);
printInTheMiddle(current_win_, 1, 0, 40-2, prev.c_str());
addItems(n);
history_string_ = historyToString();
mvprintw(0, 0, "%s", std::string(TERM_MAX_X,' ').c_str());
mvprintw(0, 0, history_string_.c_str());
refresh();
break;
} }
case KEY_RIGHT: { case KEY_RIGHT: {
std::string next = item_name(current_item(menu_)); std::string next = item_name(current_item(menu_));
const std::vector<std::string>& n = graph_.neighboursOf(next);
history_.push_back(current_); history_.push_back(current_);
current_ = next; update(next);
printInTheMiddle(current_win_, 1, 0, 40-2, next.c_str());
addItems(n);
history_string_ = historyToString();
while (history_string_.length() > TERM_MAX_X) {
history_.pop_front();
history_string_ = historyToString();
}
mvprintw(0, 0, "%s",std::string(TERM_MAX_X,' ').c_str());
mvprintw(0, 0, history_string_.c_str());
refresh();
break; break;
} }
case KEY_NPAGE: case KEY_NPAGE:
@ -195,12 +166,28 @@ public:
{ {
current_ = s; current_ = s;
const std::vector<std::string>& n = graph_.neighboursOf(current_); const std::vector<std::string>& n = graph_.neighboursOf(current_);
printInTheMiddle(current_win_, 1, 0, 40-2, current_.c_str()); printInTheMiddle(current_win_, current_.c_str());
addItems(n); addItems(n);
} }
private: private:
void update(const std::string& s) {
const std::vector<std::string>& n = graph_.neighboursOf(s);
current_ = s;
printInTheMiddle(current_win_, s.c_str());
addItems(n);
history_string_ = historyToString();
while (history_string_.length() > TERM_MAX_X) {
history_.pop_front();
history_string_ = historyToString();
}
mvprintw(0, 0, "%s",std::string(TERM_MAX_X,' ').c_str());
mvprintw(0, 0, history_string_.c_str());
refresh();
}
void addItems(const std::vector<std::string>& stringVector) void addItems(const std::vector<std::string>& stringVector)
{ {
unpost_menu(menu_); unpost_menu(menu_);
@ -216,7 +203,6 @@ private:
set_menu_items(menu_, items_); set_menu_items(menu_, items_);
set_menu_format(menu_, 6, 1); set_menu_format(menu_, 6, 1);
/* Post the menu */
post_menu(menu_); post_menu(menu_);
wrefresh(current_win_); wrefresh(current_win_);
} }
@ -234,29 +220,13 @@ private:
return s; return s;
} }
void printInTheMiddle(WINDOW *win, int starty, int startx, int width, const std::string& s) void printInTheMiddle(WINDOW *win, const std::string& s, int line = 1, int border = 1)
{ {
size_t x, y; int max_y, max_x;
float temp; getmaxyx(win, max_y, max_x);
if(win == NULL) mvwprintw(win, line, border, "%s", std::string(max_x-border*2,' ').c_str());
win = stdscr; mvwprintw(win, line, (max_x - s.length()) / 2, "%s", s.c_str());
getyx(win, y, x);
if(startx != 0)
x = startx;
if(starty != 0)
y = starty;
if(width == 0)
width = 80;
temp = (width - s.length())/ 2;
x = startx + (int)temp;
y = 1;
x = 1 + (int)temp;
mvwprintw(win, 1, 1, "%s",std::string(width-2,' ').c_str());
mvwprintw(win, y, x, "%s", s.c_str());
refresh(); refresh();
} }

Loading…
Cancel
Save