Compare commits

...

2 Commits

2 changed files with 44 additions and 8 deletions
+24 -4
View File
@@ -6,7 +6,7 @@
class Menu { class Menu {
public: public:
Menu(std::string text, char trigger, std::string *items, int num_items) Menu(std::string text, int trigger, std::string *items, int num_items)
{ {
this->text = text; this->text = text;
this->trigger = trigger; this->trigger = trigger;
@@ -16,7 +16,7 @@ class Menu {
} }
int start_x; int start_x;
std::string text; std::string text;
char trigger; int trigger;
std::string *items; std::string *items;
int num_items; int num_items;
int selected_item; int selected_item;
@@ -56,6 +56,26 @@ class MenuBar {
} }
} }
void resize(WINDOW *new_win)
{
delwin(menuwin);
this->win = new_win;
int yMax,xMax,yBeg,xBeg;
getmaxyx(win,yMax,xMax);
getbegyx(win,yBeg,xBeg);
menuwin = newwin(yMax-2,xMax-2,yBeg+1,xBeg+1);
int current_pos = 2;
for (int i = 0; i < num_menus; i++)
{
menus[i].start_x = current_pos;
current_pos += menus[i].text.length() + 1;
}
}
void reset() void reset()
{ {
for (int i = 0; i < num_menus; i++) for (int i = 0; i < num_menus; i++)
@@ -99,10 +119,10 @@ class MenuBar {
{ {
switch(ch) switch(ch)
{ {
case 'k': case 'j':
menu.selectNextItem(); menu.selectNextItem();
break; break;
case 'j': case 'k':
menu.selectPrevItem(); menu.selectPrevItem();
break; break;
default: default:
+20 -4
View File
@@ -20,7 +20,7 @@ int main(int argc, char **argv){
int yMax,xMax; int yMax,xMax;
getmaxyx(stdscr,yMax,xMax); getmaxyx(stdscr,yMax,xMax);
WINDOW *win = newwin(yMax-1,xMax-1,yMax-yMax+1,xMax-xMax+1); WINDOW *win = newwin(yMax-1,xMax-1,1,1);
box(win,0,0); box(win,0,0);
string menu1[] = {"New","Open","Save","Exit"}; string menu1[] = {"New","Open","Save","Exit"};
@@ -36,10 +36,26 @@ int main(int argc, char **argv){
MenuBar menubar = MenuBar(win,menus,3); MenuBar menubar = MenuBar(win,menus,3);
menubar.draw(); menubar.draw();
char ch; keypad(win, TRUE);
int ch;
while((ch = wgetch(win))){ while((ch = wgetch(win))){
menubar.handleTrigger(ch); if(ch <= 255)
menubar.draw(); {
menubar.handleTrigger(ch);
menubar.draw();
}
else if(ch == KEY_RESIZE)
{
clear();
refresh();
delwin(win);
getmaxyx(stdscr,yMax,xMax);
win = newwin(yMax-1,xMax-1,1,1);
box(win,0,0);
menubar.resize(win);
menubar.draw();
wrefresh(win);
}
} }
endwin(); endwin();