NCurses: Fix menu display

This commit is contained in:
Maxime Coste 2012-09-03 19:20:41 +02:00
parent b08d8719e6
commit c2a4f68899
2 changed files with 25 additions and 2 deletions

View File

@ -53,6 +53,11 @@ public:
client.show_menu(choices);
}
~MenuMode()
{
m_client.menu_ctrl(MenuCommand::Close);
}
void on_key(const Key& key, Context& context) override
{
if (key == Key(Key::Modifiers::Control, 'n') or
@ -107,6 +112,11 @@ public:
m_client.print_status(m_prompt, m_prompt.length());
}
~PromptMode()
{
m_client.menu_ctrl(MenuCommand::Close);
}
void on_key(const Key& key, Context& context) override
{
std::vector<String>& history = ms_history[m_prompt];

View File

@ -92,11 +92,21 @@ void NCursesClient::draw_window(Window& window)
int max_x,max_y;
getmaxyx(stdscr, max_y, max_x);
max_y -= 1;
int status_y = max_y;
if (m_menu)
{
int rows;
int cols;
menu_format(m_menu, &rows, &cols);
max_y -= rows;
}
window.set_dimensions(DisplayCoord(LineCount(max_y), max_x));
window.update_display_buffer();
int line_index = 0;
int last_line = INT_MAX;
for (const DisplayLine& line : window.display_buffer().lines())
{
move(line_index, 0);
@ -137,9 +147,9 @@ void NCursesClient::draw_window(Window& window)
set_color(Color::Cyan, Color::Black);
String status_line = window.status_line();
static int last_status_length = 0;
move(max_y, max_x - last_status_length);
move(status_y, max_x - last_status_length);
clrtoeol();
move(max_y, max_x - (int)status_line.length());
move(status_y, max_x - (int)status_line.length());
addstr(status_line.c_str());
last_status_length = (int)status_line.length();
refresh();
@ -221,6 +231,7 @@ void NCursesClient::show_menu(const memoryview<String>& choices)
set_menu_sub(m_menu, derwin(stdscr, max_y - pos_y - 1, max_x, pos_y, 0));
set_menu_format(m_menu, lines, columns);
post_menu(m_menu);
refresh();
}
void NCursesClient::menu_ctrl(MenuCommand command)
@ -248,9 +259,11 @@ void NCursesClient::menu_ctrl(MenuCommand command)
m_menu = nullptr;
m_items.clear();
m_counts.clear();
m_counts.clear();
break;
}
}
refresh();
}
}