Skip to content

Commit be50b96

Browse files
committed
actions sidemenu
1 parent d8f54ee commit be50b96

File tree

8 files changed

+344
-181
lines changed

8 files changed

+344
-181
lines changed

userspace/libsinsp/cursescomponents.cpp

Lines changed: 64 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -183,17 +183,17 @@ void curses_scrollable_list::selection_goto(int32_t datasize, int32_t row)
183183
///////////////////////////////////////////////////////////////////////////////
184184
// curses_table_sidemenu implementation
185185
///////////////////////////////////////////////////////////////////////////////
186-
curses_table_sidemenu::curses_table_sidemenu(sinsp_cursesui* parent)
186+
curses_table_sidemenu::curses_table_sidemenu(sidemenu_type type, sinsp_cursesui* parent, uint32_t selct)
187187
{
188188
ASSERT(parent != NULL);
189189
m_parent = parent;
190190
m_h = m_parent->m_screenh - TABLE_Y_START - 1;
191191
m_w = SIDEMENU_WIDTH;
192192
m_y_start = TABLE_Y_START;
193193
m_win = newwin(m_h, m_w, m_y_start, 0);
194-
m_selct = m_parent->m_selected_sidemenu_entry;
194+
m_selct = selct;
195195
m_selct_ori = m_selct;
196-
m_entries = NULL;
196+
m_type = type;
197197
}
198198

199199
curses_table_sidemenu::~curses_table_sidemenu()
@@ -205,7 +205,7 @@ void curses_table_sidemenu::render()
205205
{
206206
int32_t j, k;
207207

208-
ASSERT(m_entries != NULL);
208+
ASSERT(m_entries.size() != 0);
209209

210210
//
211211
// Render window header
@@ -229,7 +229,7 @@ void curses_table_sidemenu::render()
229229
//
230230
// Render the rows
231231
//
232-
for(j = m_firstrow; j < MIN(m_firstrow + (int32_t)m_h - 1, (int32_t)m_entries->size()); j++)
232+
for(j = m_firstrow; j < MIN(m_firstrow + (int32_t)m_h - 1, (int32_t)m_entries.size()); j++)
233233
{
234234
if(j == m_selct)
235235
{
@@ -248,7 +248,7 @@ void curses_table_sidemenu::render()
248248
}
249249

250250
// add the new line
251-
mvwaddnstr(m_win, j - m_firstrow + 1, 0, m_entries->at(j).m_name.c_str(), m_w);
251+
mvwaddnstr(m_win, j - m_firstrow + 1, 0, m_entries.at(j).m_name.c_str(), m_w);
252252

253253
// white space at the right
254254
wattrset(m_win, m_parent->m_colors[sinsp_cursesui::PROCESS]);
@@ -268,10 +268,10 @@ void curses_table_sidemenu::update_view_info()
268268
{
269269
delete m_parent->m_viewinfo_page;
270270

271-
ASSERT(m_selct < (int32_t)m_entries->size());
271+
ASSERT(m_selct < (int32_t)m_entries.size());
272272

273273
m_parent->m_viewinfo_page = new curses_viewinfo_page(m_parent,
274-
m_entries->at(m_selct).m_id,
274+
m_entries.at(m_selct).m_id,
275275
TABLE_Y_START,
276276
SIDEMENU_WIDTH,
277277
m_parent->m_screenh - TABLE_Y_START - 1,
@@ -299,33 +299,51 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
299299
case '\n':
300300
case '\r':
301301
case KEY_ENTER:
302-
ASSERT(m_selct < (int32_t)m_entries->size());
303-
if(m_parent->m_spy_box == NULL)
302+
ASSERT(m_selct < (int32_t)m_entries.size());
303+
if(m_type == ST_VIEWS)
304304
{
305-
m_parent->m_selected_view = m_entries->at(m_selct).m_id;
305+
if(m_parent->m_spy_box == NULL)
306+
{
307+
m_parent->m_selected_view = m_entries.at(m_selct).m_id;
308+
}
309+
310+
m_parent->m_selected_view_sidemenu_entry = m_selct;
306311
}
307-
m_parent->m_selected_sidemenu_entry = m_selct;
312+
else
313+
{
314+
m_parent->m_selected_action_sidemenu_entry = m_selct;
315+
}
316+
308317
return STA_SWITCH_VIEW;
309318
case KEY_BACKSPACE:
310319
case 127:
311320
case 27: // ESC
312321
case KEY_RESIZE:
313-
ASSERT(m_selct < (int32_t)m_entries->size());
322+
ASSERT(m_selct < (int32_t)m_entries.size());
314323
if(m_parent->m_spy_box == NULL)
315324
{
316-
m_parent->m_selected_view = m_entries->at(m_selct).m_id;
325+
m_parent->m_selected_view = m_entries.at(m_selct).m_id;
326+
}
327+
328+
if(m_type == ST_VIEWS)
329+
{
330+
m_parent->m_selected_view_sidemenu_entry = m_selct_ori;
317331
}
318-
m_parent->m_selected_sidemenu_entry = m_selct_ori;
332+
else
333+
{
334+
m_parent->m_selected_action_sidemenu_entry = m_selct_ori;
335+
}
336+
319337
return STA_SWITCH_VIEW;
320338
case KEY_UP:
321-
if(m_entries->size() == 0)
339+
if(m_entries.size() == 0)
322340
{
323341
return STA_NONE;
324342
}
325343

326344
prev_select = m_selct;
327345

328-
selection_up((int32_t)m_entries->size());
346+
selection_up((int32_t)m_entries.size());
329347

330348
input = getch();
331349
if(input != -1)
@@ -341,14 +359,14 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
341359
render();
342360
return STA_NONE;
343361
case KEY_DOWN:
344-
if(m_entries->size() == 0)
362+
if(m_entries.size() == 0)
345363
{
346364
return STA_NONE;
347365
}
348366

349367
prev_select = m_selct;
350368

351-
selection_down((int32_t)m_entries->size());
369+
selection_down((int32_t)m_entries.size());
352370

353371
input = getch();
354372
if(input != -1)
@@ -364,14 +382,14 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
364382
render();
365383
return STA_NONE;
366384
case KEY_PPAGE:
367-
if(m_entries->size() == 0)
385+
if(m_entries.size() == 0)
368386
{
369387
return STA_NONE;
370388
}
371389

372390
prev_select = m_selct;
373391

374-
selection_pageup((int32_t)m_entries->size());
392+
selection_pageup((int32_t)m_entries.size());
375393

376394
input = getch();
377395
if(input != -1)
@@ -387,14 +405,14 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
387405
render();
388406
return STA_NONE;
389407
case KEY_NPAGE:
390-
if(m_entries->size() == 0)
408+
if(m_entries.size() == 0)
391409
{
392410
return STA_NONE;
393411
}
394412

395413
prev_select = m_selct;
396414

397-
selection_pagedown((int32_t)m_entries->size());
415+
selection_pagedown((int32_t)m_entries.size());
398416

399417
input = getch();
400418
if(input != -1)
@@ -410,14 +428,14 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
410428
render();
411429
return STA_NONE;
412430
case KEY_HOME:
413-
if(m_entries->size() == 0)
431+
if(m_entries.size() == 0)
414432
{
415433
return STA_NONE;
416434
}
417435

418436
prev_select = m_selct;
419437

420-
selection_home((int32_t)m_entries->size());
438+
selection_home((int32_t)m_entries.size());
421439

422440
input = getch();
423441
if(input != -1)
@@ -433,14 +451,14 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
433451
render();
434452
return STA_NONE;
435453
case KEY_END:
436-
if(m_entries->size() == 0)
454+
if(m_entries.size() == 0)
437455
{
438456
return STA_NONE;
439457
}
440458

441459
prev_select = m_selct;
442460

443-
selection_end((int32_t)m_entries->size());
461+
selection_end((int32_t)m_entries.size());
444462

445463
input = getch();
446464
if(input != -1)
@@ -457,7 +475,7 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
457475
return STA_NONE;
458476
case KEY_MOUSE:
459477
{
460-
if(m_entries->size() == 0)
478+
if(m_entries.size() == 0)
461479
{
462480
return STA_NONE;
463481
}
@@ -481,7 +499,7 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
481499
// This is a click one of the menu entries. Update the selection.
482500
//
483501
m_selct = m_firstrow + (m_last_mevent.y - TABLE_Y_START - 1);
484-
sanitize_selection((int32_t)m_entries->size());
502+
sanitize_selection((int32_t)m_entries.size());
485503
update_view_info();
486504
render();
487505
}
@@ -496,7 +514,7 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
496514
// Update the selection.
497515
//
498516
m_selct = m_firstrow + (m_last_mevent.y - TABLE_Y_START - 1);
499-
sanitize_selection((int32_t)m_entries->size());
517+
sanitize_selection((int32_t)m_entries.size());
500518
render();
501519

502520
//
@@ -508,12 +526,21 @@ sysdig_table_action curses_table_sidemenu::handle_input(int ch)
508526
//
509527
// Notify the parent that a selection has happened
510528
//
511-
ASSERT(m_selct < (int32_t)m_entries->size());
529+
ASSERT(m_selct < (int32_t)m_entries.size());
512530
if(m_parent->m_spy_box == NULL)
513531
{
514-
m_parent->m_selected_view = m_entries->at(m_selct).m_id;
532+
m_parent->m_selected_view = m_entries.at(m_selct).m_id;
533+
}
534+
535+
if(m_type == ST_VIEWS)
536+
{
537+
m_parent->m_selected_view_sidemenu_entry = m_selct;
515538
}
516-
m_parent->m_selected_sidemenu_entry = m_selct;
539+
else
540+
{
541+
m_parent->m_selected_action_sidemenu_entry = m_selct;
542+
}
543+
517544
return STA_SWITCH_VIEW;
518545
}
519546
}
@@ -950,7 +977,7 @@ sysdig_table_action curses_textbox::handle_input(int ch)
950977
sysdig_table_action ta = m_sidemenu->handle_input(ch);
951978
if(ta == STA_SWITCH_VIEW)
952979
{
953-
switch(m_parent->m_selected_sidemenu_entry)
980+
switch(m_parent->m_selected_view_sidemenu_entry)
954981
{
955982
case 0:
956983
m_parent->m_spybox_text_format = sinsp_evt::PF_NORMAL;
@@ -1045,7 +1072,9 @@ sysdig_table_action curses_textbox::handle_input(int ch)
10451072

10461073
if(m_sidemenu == NULL)
10471074
{
1048-
m_sidemenu = new curses_table_sidemenu(this->m_parent);
1075+
m_sidemenu = new curses_table_sidemenu(curses_table_sidemenu::ST_VIEWS,
1076+
this->m_parent,
1077+
0);
10491078
populate_sidemenu();
10501079
clear();
10511080
wresize(m_win, m_parent->m_screenh - 4, m_parent->m_screenw - 20);

userspace/libsinsp/cursescomponents.h

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,21 @@ class curses_scrollable_list
116116
class curses_table_sidemenu : public curses_scrollable_list
117117
{
118118
public:
119-
curses_table_sidemenu(sinsp_cursesui* parent);
119+
enum sidemenu_type {
120+
ST_NONE,
121+
ST_VIEWS,
122+
ST_ACTIONS,
123+
};
124+
125+
curses_table_sidemenu(sidemenu_type type,
126+
sinsp_cursesui* parent,
127+
uint32_t selct);
120128
~curses_table_sidemenu();
121129
void set_entries(vector<sidemenu_list_entry>* entries)
122130
{
123-
m_entries = entries;
131+
m_entries = *entries;
124132

125-
if(m_entries->size() == 0)
133+
if(m_entries.size() == 0)
126134
{
127135
m_selct = 0;
128136
}
@@ -137,9 +145,10 @@ class curses_table_sidemenu : public curses_scrollable_list
137145
WINDOW* m_win;
138146
int32_t m_y_start;
139147
sinsp_cursesui* m_parent;
140-
vector<sidemenu_list_entry>* m_entries;
148+
vector<sidemenu_list_entry> m_entries;
141149
string m_title;
142150
MEVENT m_last_mevent;
151+
sidemenu_type m_type;
143152

144153
private:
145154
void update_view_info();

0 commit comments

Comments
 (0)