rtop
panel2.h
Go to the documentation of this file.
1 #include <errno.h>
2 #include <ncurses.h>
3 #include <panel.h>
4 #include <menu.h>
5 #include <vector>
6 #include <utility>
7 #include <string>
8 #include <fstream>
9 #include <cstdlib>
10 #include <iostream>
11 
12 #ifndef _PANEL_H_
13 #define _PANEL_H_
14 #include "rtop_logger.h"
15 #include "rtop_utils.h"
16 #include "info.h"
17 #include "key_dict.h"
18 #include "sm.h"
19 
20 extern src::severity_logger<severity_level> lg;
21 extern logSpacer log_spacer;
22 
23 namespace rtop
24 {
25  extern MapOfKeyDicts mapKeyDict;
26  extern MemFuncPDict funcPDict;
27 
29 
35  {
36  protected:
37  int uuid;
39  int width, height;
41  PANEL* panel;
43  WINDOW* win;
48  public:
50  SimplePanelData(int);
51 
52  // implemented in SimplePanelData
54  int uUid() const {return uuid;}
56  void setWin(WINDOW* win_in){win = win_in;}
58  void setPanel(PANEL* panel_in){panel = panel_in;}
60  void setDimensions(int h, int w);
70  void moveTo(int, int);
72  virtual void show();
74  virtual void show2();
76  virtual void hide();
78  WINDOW* window() const{return win;}
79 
80  // mock implementations, to enable polymorphic access to Browse/Edit PanelData through SimplePanelData pointer
81 
83  virtual void selectionOn(){}
85  virtual void selectionOff(){}
87  virtual void toggleEditMode(){}
89  virtual void editModeOn(){}
91  virtual void editModeOff(){}
93  virtual void setEditingColor(int){}
95  virtual void setSelectionColor(int){}
97  virtual void setBasicColor(int){}
99  virtual void setHeaderColor(int){}
101  virtual void setHeader(std::string){}
103  virtual void Down(){}
105  virtual void Up(){}
107  virtual void Top(){}
109  virtual void refreshItemList(){}
111  virtual void refreshItemList2(std::vector<InfoProc<std::string>>&, std::string, const std::vector<int>&, int&){}
113  virtual void resolveKey(int){};
115  virtual void moveIntoLeftNbr(){}
117  virtual void moveIntoRightNbr(){}
119  virtual void insertIntoLeftNbr(){}
121  virtual void insertIntoRightNbr(){}
123  virtual void addIntoLeftNbr(){}
125  virtual void addIntoRightNbr(){}
127  virtual void remove(){}
128 
129  // ProcViewPanel's methods
130 
132  virtual std::vector<std::string> displayedKeys() const{}
134  virtual void deleteColumn(){}
136  virtual void insertColumn(){}
138  virtual void refresh(){}
140  virtual void moveLeft(){}
142  virtual void moveRight(){}
144  virtual void syncColors(){}
145  friend class XMLTree;
146  };
147 
149  {
150  uuid = id;
151  }
152 
154  {
155  height = h;
156  width = w;
157  }
158 
160  {
162  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> SPData-"<<uuid<<"_setLeftNbr::";
163  l_next = panel;
164  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- SPData-"<<uuid<<"_setLeftNbr::";
166  }
167 
169  {
171  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> SPData-"<<uuid<<"_setRightNbr::";
172  r_next = panel;
173  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- SPData-"<<uuid<<"_setRightNbr::";
175  }
176 
178  {
180  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> SPData-"<<uuid<<"_leftNbr::";
181  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- SPData-"<<uuid<<"_leftNbr::";
183  return l_next;
184  }
185 
187  {
188  log_spacer.addSpace();
189  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> SPData-"<<uuid<<"_rightNbr::";
190  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- SPData-"<<uuid<<"_rightNbr::";
192  return r_next;
193  }
194 
195  void SimplePanelData::moveTo(int y, int x)
196  {
198  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> SPData-"<<uuid<<"_moveTo::x="<<x<<" y="<<y;
199  move_panel(panel, y, x);
200  doupdate();
201  update_panels();
202  BOOST_LOG_SEV(lg,debug)<<log_spacer<<"<-- SPData-"<<uuid<<"_moveTo::";
204  }
205 
207  {
209  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> SPData-"<<uuid<<"_show::";
210  refreshItemList();
212  show_panel(panel);
213  update_panels();
214  doupdate();
215  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- SPData-"<<uuid<<"_show::";
217  }
218 
220  {
222  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> SPData-"<<uuid<<"_show2::";
223  show_panel(panel);
224  update_panels();
225  doupdate();
226  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- SPData-"<<uuid<<"_show2::";
228  }
229 
231  {
233  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> SPData-"<<uuid<<"_hide::";
234  hide_panel(panel);
235  update_panels();
236  doupdate();
237  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- SPData-"<<uuid<<"_hide::";
239  }
240 
241  template<class T>
243 
244 
246 
252  template<class T>
254  {
255  protected:
257  std::vector<T*> object_list;
259  ITEM** item_list;
263  int capacity;
265  MENU* menu;
267  int selected;
277  std::string header;
278  public:
280  BrowsePanelData(int);
282  std::vector<std::string> contents();
284  int currIndex() const{return selected-1;}
286  void setHeader(std::string head_str) override {header = head_str;}
288  void refreshItemList() override;
290  void refreshItemList2(std::vector<InfoProc<std::string>>&, std::string, const std::vector<int>&, int&) override;
292  void setSelectionColor(int color_pair) override {selection_color = color_pair;}
294  void setBasicColor(int color_pair) override {basic_color = color_pair;}
296  void Top() override;
298  virtual T* currItem() const;
300  virtual void selectionOn() override;
302  virtual void selectionOff() override;
304  virtual void Down() override;
306  virtual void Up() override;
308  virtual void resolveKey(int) override;
310  virtual void setHeaderColor(int color_pair) override;
311 
313  virtual void insertIntoLeftNbr() override;
315  virtual void insertIntoRightNbr() override;
316  virtual void addIntoLeftNbr() override;
317  virtual void addIntoRightNbr() override;
318  virtual void moveIntoLeftNbr() override;
319  virtual void moveIntoRightNbr() override;
320 
321  friend class XMLTree;
322  };
323 
324 
325  template<class T>
327  {
329  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_setHeaderColor::"<<header;
330  header_color = color_pair;
331  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_setHeaderColor::"<<header;
333  }
334 
335  template<class T>
337  {
339  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<this->uuid<<"_constructor::";
340  menu = NULL;
341  curr_color = 1;
342  selected = -1;
343  size_item_list = 0;
344  header = "";
345  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<this->uuid<<"_constructor::";
347  }
348 
349  template<class T>
350  std::vector<std::string> BrowsePanelData<T>::contents()
351  {
353  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<this->uuid<<"_contents::";
354  std::vector<std::string> out_vec;
355  for(auto elem: object_list)
356  out_vec.push_back(elem->shortDesc());
357  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<this->uuid<<"_contents::";
359  return out_vec;
360  }
361 
362  template<class T>
364  {
366  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<this->uuid<<"_insertIntoLeftNbr::"<<this->header;
367  dynamic_cast<EditPanelData<T>*>(this->leftNbr())->insert(this->currItem());
368  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<this->uuid<<"_insertIntoLeftNbr::"<<this->header;
370  }
371 
372  template<class T>
374  {
375  }
376 
377  template<class T>
379  {
380  }
381 
382 
383  template<class T>
385  {
386  }
387 
388  template<class T>
390  {
391  }
392 
393 
394  template<class T>
396  {
397  }
398 
399 
400  template<class T>
402  {
403  log_spacer.addSpace();
404  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_currItem::";
405  if (selected >= 1)
406  {
407  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_currItem::";
409  return object_list[selected-1];
410  }
411  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_currItem::";
412  log_spacer.delSpace();
413  return NULL;
414  }
415 
416  template<class T>
418  {
420  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_refreshItemList:: sel:"<<selected;
421 
422  // tear down menu
423  if (menu != NULL)
424  {
425  unpost_menu(menu); // erases menu from associated window
426  free_menu(menu); // disconnects menu from its item array and frees storage allocated for menu
427  for(int i=0; i<=(size_item_list+1);i++) // clean up (header + data + NULL entry)
428  free_item(item_list[i]);
429  free(item_list); // free memory allocated for item_list
430  size_item_list = 0;
431  }
432 
433  // reinitialize menu
434  item_list = (ITEM**) calloc(object_list.size()+2, sizeof(ITEM*)); // reserve space for header + data + NULL entry
435 
436  size_item_list = (int)object_list.size(); // update size_item_list
437  item_list[0] = (ITEM*) new_item((const char*)(header.c_str()), NULL); // set menu's 1st entry to be header. \todo: will become irrelevant once header in sep panel. remove
438  item_opts_off(item_list[0], O_SELECTABLE); // \todo: will become redundant once header in sep panel. remove
439 
440  for(int i=1; i<=object_list.size(); i++) // populate menu with entries in object list
441  item_list[i] = (ITEM*) new_item((object_list[i-1]->shortDesc()), (object_list[i-1]->longDesc()));
442  item_list[object_list.size()+1] = (ITEM *)NULL; // REQUIRED by ncurses, set last entry to NULL
443  // create new menu with new item_list
444  menu = new_menu((ITEM**) item_list);
445  set_menu_grey(menu, COLOR_PAIR(header_color)); // sets color_pair for non-selectable item
446  // format the menu
447  set_menu_win(menu, win); // associate menu with panel's window
448  set_menu_mark(menu, ""); // suppress the mark that comes alongside the selected item
449  post_menu(menu);
450  menu_driver(menu, REQ_FIRST_ITEM);
451  set_menu_fore(menu, COLOR_PAIR(curr_color)); // sets color_pair for selected menu item
452  for(int i=0; i<selected;i++) // restore position of menu cursor to what it was before tear down
453  menu_driver(menu, REQ_DOWN_ITEM);
454  wrefresh(win);
455  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_refreshItemList:: sel:"<<selected;
456  log_spacer.delSpace();
457  }
458 
459 
460  template<class T>
461  void BrowsePanelData<T>::refreshItemList2(std::vector<InfoProc<std::string>>& data, std::string prop_name, const std::vector<int>& sorted_indices, int& browse_pos)
462  {
464  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_refreshItemList2::sel:"<<selected<<" browse:"<<browse_pos<<" data: "<<data.size()<<" prop: "<<prop_name<<"menu: "<<menu<<" win:"<<win<<"header: "<<header;
465 
466  // tear down menu
467  if (menu != NULL)
468  {
469  unpost_menu(menu); // erases menu from associated window
470  free_menu(menu); // disconnects menu from its item array and frees storage allocated for menu
471  for(int i=0; i<=(size_item_list+1);i++) // clean up header + data + NULL entry
472  free_item(item_list[i]);
473  free(item_list); // free memory allocated for item_list
474  item_list = (ITEM**) NULL;
475  size_item_list = 0;
476  }
477 
478  // reinitialize menu
479  errno = 0;
480  item_list = (ITEM**) calloc(data.size()+2, sizeof(ITEM*));
481  if (errno != 0)
482  BOOST_LOG_SEV(lg, error)<<log_spacer<<strerror(errno);
483 
484  size_item_list = (int)data.size(); // update size_item_list
485  item_list[0] = (ITEM*) new_item((const char*)header.c_str(), NULL); // set 1st menu entry to header
486  item_opts_off(item_list[0], O_SELECTABLE); // set header entry to be non-selectable,\todo: will become redundant once header is implemented in sep panel. remove
487 
488  for(int i=1; i<=data.size(); i++) // populate menu with data's items in order specified in sorted_indices
489  item_list[i] = (ITEM*) new_item(data[sorted_indices[i-1]].shortDesc(), NULL);
490 
491  item_list[data.size()+1] = (ITEM *)NULL; // required by ncurses, last entry set to NULL
492  // create new menu with new item_list
493  menu = new_menu((ITEM**) item_list); // attach item_list to menu
494  if (menu == NULL)
495  BOOST_LOG_SEV(lg, error)<<log_spacer<<"ProcViewPanel-"<<uuid<<"_refreshItemList2::menu allocation failed";
496  // format the menu
497  set_menu_grey(menu, COLOR_PAIR(header_color)); //set non-selectable item's color to header_pair_color, \todo: will become redundant once header is implemented in sep panel. remove
498  set_menu_win(menu, win); // associate menu with panel window
499  set_menu_mark(menu, ""); // suppress the mark that comes alongside the selected item
500  if (data.size() > 0) // if there was data
501  {
502  if (browse_pos == -1 || browse_pos == 0) //Case: menu was empty before teardown, then set column browser to 1st item
503  browse_pos = 1;
504  else //Case: fewer item now than before tear down, set browser position to last entry
505  {
506  if (browse_pos >= data.size())
507  browse_pos = data.size();
508  }
509  }
510  else // no data
511  browse_pos = 0;
512 
513  selected = browse_pos; // sync selected index in menu, and browser_pos in columns
514  set_menu_fore(menu, COLOR_PAIR(curr_color)); // set color of selected item to curr_color
515  set_menu_format(menu, this->height, 1); // set menu's height
516  post_menu(menu);
517  menu_driver(menu, REQ_FIRST_ITEM); // restore position of menu cursor to what it was before tear down
518  for(int i=0; i<selected; i++)
519  menu_driver(menu, REQ_DOWN_ITEM);
520  post_menu(menu);
521  update_panels();
522  doupdate();
523  wrefresh(win);
524  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_refreshItemList2:: sel:"<<selected<<" browse:"<<browse_pos<<" data: "<<data.size()<<" prop:"<<prop_name<<" menu: "<<menu<<" win:"<<win;
526  }
527 
528  template<class T>
530  {
532  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_selectionOn::";
533  set_menu_fore(menu, COLOR_PAIR(selection_color));
534  curr_color = selection_color;
535  update_panels();
536  doupdate();
537  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_selectionOn::";
539  }
540 
541  template<class T>
543  {
545  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_selectionOff::";
546  set_menu_fore(menu, COLOR_PAIR(1));
547  curr_color = 1;
548  update_panels();
549  doupdate();
550  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_selectionOff::";
552  }
553 
554  template<class T>
556  {
558  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_Down:: sel:"<<selected<<" datasize: "<<size_item_list;
559  if (selected == -1 || selected == size_item_list)
560  {
561  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_Down:: sel:"<<selected;
563  return;
564  }
565  selected++;
566  menu_driver(menu, REQ_DOWN_ITEM);
567  post_menu(menu);
568  wrefresh(win);
569  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_Down:: sel:"<<selected<<" datasize: "<<size_item_list;
571  }
572 
573  template<class T>
575  {
577  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_Up:: sel: "<<selected<<" datasize: "<<size_item_list;
578  if (selected <= 1)
579  {
580  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_Up:: sel:"<<selected;
582  return;
583  }
584  selected--;
585  menu_driver(menu, REQ_UP_ITEM);
586  post_menu(menu);
587  wrefresh(win);
588  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_Up:: sel:"<<selected<<" datasize: "<<size_item_list;
590  }
591 
592  template<class T>
594  {
596  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_Top:: sel:"<<selected;
597  if (selected == -1)
598  {
599  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_Top:: sel: "<<selected;
601  return;
602  }
603  selected = 1;
604  menu_driver(menu, REQ_FIRST_ITEM);
605  menu_driver(menu, REQ_DOWN_ITEM);
606  wrefresh(win);
607  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_Top:: sel: "<<selected;
609  }
610 
611  template<class T>
613  {
615  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> BrowsePanelData-"<<uuid<<"_resolveKey::";
616  (mapKeyDict.getKeyDict(this->smKeys.currState())).resolve(ch, this); // resolve passed key with current KeyDict
617  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- BrowsePanelData-"<<uuid<<"_resolveKey::";
619  }
620 
622 
627  template<class T>
628  class EditPanelData: public BrowsePanelData<T>
629  {
630  private:
632  bool editing;
635  public:
636  EditPanelData(int);
637 
638  // methods overriding ancestor class methods
639 
641  void editModeOn() override;
643  void editModeOff() override;
645  void toggleEditMode() override;
647  void Down() override;
649  void Up() override;
651  void remove() override;
653  void setEditingColor(int color_pair) override {editing_color = color_pair;}
655  virtual void resolveKey(int) override;
657  void selectionOn() override;
659  void selectionOff() override;
661  void setHeaderColor(int) override;
663  void insertIntoLeftNbr() override;
665  void insertIntoRightNbr() override;
666 
667  // non-overriding methods
668 
670  void insert(Info*);
678  bool editMode() const {return editing;}
680  void release();
681  friend class XMLTree;
682  };
683 
684  template<class T>
686  {
687  log_spacer.addSpace();
688  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_release::"<<"prop: "<<this->header<<"win: "<<this->win;
689  // tear down menu and object_list
690  if (this->menu != NULL)
691  {
692  unpost_menu(this->menu);
693  free_menu(this->menu);
694  for(int i=0; i<=(this->size_item_list+1);i++) // clean up (header + data + NULL entry)
695  free_item(this->item_list[i]);
696  free(this->item_list); // free memory allocated for item_list
697  for(int i=0; i<this->object_list.size(); i++) // delete memory pointed to by object_list entires.
698  delete(this->object_list[i]);
699  }
700  delwin(this->win); // delete window associated with panel
701  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_release::"<<"prop: "<<this->header;
703  }
704 
705  template<class T>
707  {
709  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_setHeaderColor::"<<this->header;
710  this->header_color = color;
711  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_setHeaderColor::"<<this->header;
713  }
714 
715  template<class T>
717  {
719  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_insertIntoLeftNbr::"<<this->header;
720  dynamic_cast<EditPanelData<T>*>(this->leftNbr())->insert(this->currItem()); //cast leftNbr reference as EditPanelData before inserting into left neighbour
721  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<--EditPanelData-"<<this->uuid<<"_insertIntoLeftNbr::"<<this->header;
723  }
724 
725  template<class T>
727  {
729  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_insertIntoRightNbr::"<<this->header;
730  dynamic_cast<EditPanelData<T>*>(this->rightNbr())->insert(this->currItem()); //cast rightNbr reference as EditPanelData before inserting into right neighbour
731  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<--EditPanelData-"<<this->uuid<<"_insertIntoRightNbr::"<<this->header;
733  }
734 
735  template<class T>
737  {
739  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_toggleEditMode::";
740  editing = !editing;
741  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_toggleEditMode::";
743  }
744 
745  template<class T>
747  {
748  log_spacer.addSpace();
749  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_selectionOn::";
750  if (editing)
751  this->curr_color = editing_color;
752  else
753  this->curr_color = this->selection_color;
754  set_menu_fore(this->menu, COLOR_PAIR(this->curr_color));
755  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_selectionOn::";
757  }
758 
759  template<class T>
761  {
762  log_spacer.addSpace();
763  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_selectionOff::";
764  this->curr_color = 1;
765  set_menu_fore(this->menu, COLOR_PAIR(this->curr_color));
766  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_selectionOff::";
768  }
769 
770  template<class T>
772  {
773  log_spacer.addSpace();
774  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_insert:: cap:"<<this->object_list.capacity();
775  Info* pinfo = new Info{*pitem}; // instantiate Info object on heap with content of *pitem
776  std::vector<Info*> tmpvec;
777  tmpvec.reserve(this->object_list.capacity()); // prepare Info* vector to store object_list
778  for(auto it=(this->object_list.begin()+this->selected-1); it != this->object_list.end(); it++) // copy object_list from selected item until end
779  tmpvec.push_back(*it);
780  this->object_list.insert(this->object_list.begin()+this->selected-1, pinfo); // insert newly created object on heap at position 'selected' into object_list
781 
782  // restoring invalidated pointers.
783  for(int i=0; i<tmpvec.size(); i++) // repopulate invalidated object_list entries (everything) after newly insert entry.
784  this->object_list[this->selected+i] = tmpvec[i];
785  BrowsePanelData<T>::refreshItemList(); // invoke refreshItemList to update panel menu
786  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_insert::";
787  log_spacer.delSpace();
788  }
789 
791  template<class T>
793  {
794  }
795 
796  template<class T>
798  {
800  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_editModeOn::";
801  editing = true;
802  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_editModeOn::";
804  }
805 
806  template<class T>
808  {
810  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_editModeOff::";
811  editing = false;
812  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_editModeOff::";
814  }
815 
816  template<class T>
818  {
820  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_Down:: sel:"<<this->selected<<" datasize:"<<this->size_item_list;
821  if (!editing) // if not in editing mode, browse down and return
822  {
824  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_Down:: sel: "<<this->selected;
826  return;
827  }
828 
829  if (this->selected == -1 || this->selected == this->size_item_list)
830  {
831  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_Down:: sel:"<<this->selected;
833  return;
834  }
835  // if in editing mode
836  swap(this->object_list, this->selected-1, this->selected); // swap with item below in object_list
837  this->selected++;
838  BrowsePanelData<T>::refreshItemList(); // refresh panel's menu
839  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_Down:: sel:"<<this->selected<<" datasize:"<<this->size_item_list;
841  }
842 
843  template<class T>
845  {
847  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_Up:: sel:"<<this->selected<<" datasize:"<<this->size_item_list;
848 
849  if (!editing) // if not in editing mode, browse up and return
850  {
852  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_Up:: sel:"<<this->selected;
854  return;
855  }
856  if (this->selected <= 1)
857  {
858  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_Up:: sel:"<<this->selected;
860  return;
861  }
863  swap(this->object_list, this->selected-1, this->selected-2); // swap with item above in object_list
864  this->selected--;
865  BrowsePanelData<T>::refreshItemList(); // refresh panel's menu
866  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_Up:: sel:"<<this->selected<<" datasize:"<<this->size_item_list;
868  }
869 
870  template<class T>
872  {
874  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_resolveKey::panel: "<<this->uuid;
875  (mapKeyDict.getKeyDict(this->smKeys.currState())).resolve(ch, this); // resolve key with panel's key dictionary
876  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_resolveKey::panel: "<<this->uuid;
878  }
879 
880  template<class T>
882  {
884  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> EditPanelData-"<<this->uuid<<"_remove::, sel: :"<<this->selected;
885 
886  if (this->selected <= 0)
887  {
888  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_remove::panel: "<<this->uuid;
890  return;
891  }
892  delete(this->object_list[this->selected-1]); // delete heap memory associated with current item
893  std::vector<T*> tmpvec;
894  tmpvec.reserve(this->object_list.capacity());
895  for(auto it=(this->object_list.begin()+this->selected); it != this->object_list.end(); it++) // copy object_list items from item past current item until the end
896  tmpvec.push_back(*it);
897  this->object_list.erase(this->object_list.begin()+this->selected-1); // erase item from object list
898  if (this->selected == (this->object_list.size()+1))
899  this->selected--;
900 
901  // restore invalidated pointers
902  for(int i=0; i<tmpvec.size(); i++) // repopulate object_list items from selected item until end from tmpvec
903  this->object_list[i+this->selected-1] = tmpvec[i];
904  BrowsePanelData<T>::refreshItemList(); // update panel's menu
905  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- EditPanelData-"<<this->uuid<<"_remove::sel: "<<this->selected;
907  }
908 
910 
916  {
917  private:
918  std::mutex clms_mutex;
922  std::vector<EditPanelData<InfoProc<std::string>>> columns;
926  std::string sort_key;
928  std::map<std::string, int> prop_wid_dict;
930  std::vector<std::string> clm_names;
932  std::vector<int> clm_widths;
936  int y_start;
939 
940  // methods
941 
943  void createColumn(EditPanelData<InfoProc<std::string>>&, int, int, std::string);
946  public:
949 
950  // methods overriding ancestor class methods
951 
953  void resolveKey(int) override;
955  void show() override;
957  void hide() override;
959  void deleteColumn() override;
961  void insertColumn() override;
963  void moveLeft() override;
965  void moveRight() override;
967  void Down() override;
969  void Up() override;
971  void refresh() override;
973  void setHeaderColor(int hcolor) override;
975  void syncColors() override;
976 
977  // non-overriding methods
978 
980  std::vector<std::string> displayedKeys() const;
982  std::string sortKey() const{return sort_key;}
983 
984  friend class XMLTree;
985  };
986 
988  {
990  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_setHeaderColor::";
991  header_color=hcolor;
992  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_setHeaderColor::";
994  }
995 
996  std::vector<std::string> ProcViewPanel::displayedKeys() const
997  {
999  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_displayedKeys::";
1000  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_displayedKeys::";
1001  log_spacer.delSpace();
1002  return clm_names;
1003  }
1004 
1006  {
1007  log_spacer.addSpace();
1008  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_resolveKey::";
1009  (mapKeyDict.getKeyDict(smKeys.currState())).resolve(ch, this);
1010  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_resolveKey::";
1011  log_spacer.delSpace();
1012  }
1013 
1015  {
1016  log_spacer.addSpace();
1017  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_syncColors::";
1018  for(auto panelobj:columns)
1019  panelobj.setHeaderColor(header_color);
1020  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_syncColors::";
1021  log_spacer.delSpace();
1022  }
1023 
1024  void ProcViewPanel::createColumn(EditPanelData<InfoProc<std::string>>& panel_data, int width, int xpos, std::string header)
1025  {
1026  log_spacer.addSpace();
1027  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_createColumn::"<<" mainwin:"<<win;
1028  WINDOW* panel_win = derwin(win, this->height-2, width, 0, xpos); // create derived window from procviewpanel's main window
1029  PANEL* temp_panel = new_panel(panel_win); // associate panel with derived window, data structure associated with panel is on heap
1030  panel_data.setWin(panel_win); // set editpanel's window to be the derived window
1031  panel_data.setPanel(temp_panel); // set editpanel's panel to be created panel
1032  panel_data.setHeader(header);
1033  panel_data.setHeaderColor(4);
1034  panel_data.setDimensions(this->height-2, width); // update column's dimensions
1035  mvderwin(panel_win, 0, xpos); // move derived window to (xpos, 0) within procviewpanel's window
1036  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_createColumn::"<<" win:"<<panel_win<<" width: "<<width;
1037  log_spacer.delSpace();
1038  }
1039 
1041  {
1042  log_spacer.addSpace();
1043  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_loadColumnsFromActiveProc::";
1044  std::vector<std::string> active_props = dynamic_cast<BrowsePanelData<Info>*>(active_proc_panel)->contents(); // obtain list of properties to be displayed. The order determines the layout of the columns
1045  // create one column for each property to be displayed
1046  int x_pos = 0;
1047  int width = 0;
1048  for(auto prop: active_props)
1049  {
1050  EditPanelData<InfoProc<std::string>> panel_data(-1); // create an empty edit panel
1051  width = prop_wid_dict[prop]; // read edit panel width from procviewpanel's prop_wid_dict
1052  createColumn(panel_data, width , x_pos, prop); // create a column from the edit panel
1053  x_pos += width; // update xpos for next incoming panel
1054  columns.push_back(panel_data);
1055  clm_widths.push_back(width);
1056  clm_names.push_back(prop);
1057  }
1058  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_loadColumnsFromActiveProc::";
1059  log_spacer.delSpace();
1060  }
1061 
1063  {
1064  log_spacer.addSpace();
1065  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<this->uuid<<"_show::";
1066  for(auto panelobj: columns)
1067  panelobj.show2();
1068  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<this->uuid<<"_show::";
1069  log_spacer.delSpace();
1070  }
1071 
1073  {
1074  log_spacer.addSpace();
1075  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<this->uuid<<"_hide::";
1076  for(auto panel: columns)
1077  panel.hide();
1078  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<this->uuid<<"_hide::";
1079  log_spacer.delSpace();
1080  }
1081 
1083  {
1084  log_spacer.addSpace();
1085  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_deleteColumn::";
1086  int curr_index = 0;
1087  curr_index = dynamic_cast<BrowsePanelData<Info>*>(active_proc_panel)->currIndex(); // obtain index of column to delete
1088  clm_names.erase(clm_names.begin()+curr_index); // update clm_names by deleting prop name
1089 
1090  clm_widths.erase(clm_widths.begin()+curr_index); // update clm_widths by deleting width of clm corresponding to obtained index
1091 
1092  columns[curr_index].release(); // make editpanel associated with column to release UI resources
1093  columns.erase(columns.begin()+curr_index); // remove column from columns
1094 
1095  // update position of remaining columns
1096  int x_pos = 0;
1097  if (curr_index >= clm_widths.size()) // if deleted element was the last element, reduce curr_index by 1
1098  curr_index--;
1099  for(int i=0; i<curr_index; i++)
1100  x_pos += clm_widths[i];
1101  for(int i=curr_index; i<clm_widths.size(); i++)
1102  {
1103  mvderwin(columns[i].window(), 0, x_pos);
1104  x_pos += clm_widths[i];
1105  }
1106  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_deleteColumn::"<<curr_index;
1107  log_spacer.delSpace();
1108  }
1109 
1111  {
1112  log_spacer.addSpace();
1113  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_insertColumn::";
1114  std::string prop_name = (dynamic_cast<BrowsePanelData<Info>*>(active_proc_panel)->currItem())->shortDesc(); // obtain prop name to be inserted
1115  int curr_index = 0;
1116  curr_index = dynamic_cast<BrowsePanelData<Info>*>(active_proc_panel)->currIndex(); // obtain location at which new prop column to be inserted
1117  clm_names.insert(clm_names.begin()+curr_index, prop_name); // update columns with new prop name
1118  clm_widths.insert(clm_widths.begin()+curr_index, prop_wid_dict[prop_name]); // update clm_widths
1119  int x_pos=0;
1120  for(int i=0; i<curr_index; i++)
1121  x_pos += clm_widths[i];
1122 
1123  EditPanelData<InfoProc<std::string>> panel_data(-1); // create new edit panel
1124  createColumn(panel_data, clm_widths[curr_index], x_pos, prop_name); // update edit panel with column parameters
1125  columns.insert(columns.begin()+curr_index, panel_data); // insert edit panel into columns
1126  x_pos += clm_widths[curr_index];
1127  // update position of columns
1128  for(int i=curr_index+1; i<columns.size(); i++)
1129  {
1130  mvderwin(columns[i].window(), 0, x_pos);
1131  x_pos += clm_widths[i];
1132  }
1133  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_insertColumn::"<<"win: "<<panel_data.window();
1134  log_spacer.delSpace();
1135  }
1136 
1138  {
1139  log_spacer.addSpace();
1140  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_moveLeft::";
1141  bool edit_mode = dynamic_cast<EditPanelData<Info>*>(active_proc_panel)->editMode();
1142  if(!edit_mode) // if not in edit mode, return without doing anything
1143  {
1144  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_moveLeft::"<<"mode:"<<edit_mode;
1145  log_spacer.delSpace();
1146  return;
1147  }
1148  int curr_index = 0;
1149  curr_index = dynamic_cast<BrowsePanelData<Info>*>(active_proc_panel)->currIndex(); // obtain index of column to be moved left
1150  if (curr_index <= 0) // if leftmost element, return withouth doing anything
1151  {
1152  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_moveLeft::"<<"mode:"<<edit_mode;
1153  log_spacer.delSpace();
1154  return;
1155  }
1156  swap(clm_widths[curr_index-1],clm_widths[curr_index]); // update clm_widths by swapping element pos with one to left
1157  swap(clm_names[curr_index-1], clm_names[curr_index]); // update clm_names by swapping element pos with one to left
1158 
1159  // swap columns
1160  EditPanelData<InfoProc<std::string>> tmpPanel = columns[curr_index-1]; // update columns by swapping element pos with one to left
1161  columns[curr_index-1] = columns[curr_index];
1162  columns[curr_index] = tmpPanel;
1163 
1164  // update column window positions
1165  int x_pos = 0;
1166  for(int i=0; i<(curr_index-1); i++)
1167  x_pos += clm_widths[i];
1168  mvderwin(columns[curr_index-1].window(), 0, x_pos);
1169  x_pos += clm_widths[curr_index-1];
1170  mvderwin(columns[curr_index].window(), 0, x_pos);
1171  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_moveLeft::"<<"mode:"<<edit_mode;
1172  log_spacer.delSpace();
1173  }
1174 
1176  {
1177  log_spacer.addSpace();
1178  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_moveRight::";
1179  bool edit_mode = dynamic_cast<EditPanelData<Info>*>(active_proc_panel)->editMode();
1180  if(!edit_mode) // if not in edit mode, return without doing anything
1181  {
1182  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_moveRight::"<<"mode:"<<edit_mode;
1183  log_spacer.delSpace();
1184  return;
1185  }
1186 
1187  int curr_index = 0;
1188  curr_index = dynamic_cast<BrowsePanelData<Info>*>(active_proc_panel)->currIndex();
1189  if (curr_index >= (clm_names.size()-1)) // if leftmost element, return withouth doing anything
1190  {
1191  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_moveRight::"<<"mode:"<<edit_mode;
1192  log_spacer.delSpace();
1193  return;
1194  }
1195 
1196  // swap columns
1197  swap(clm_widths[curr_index], clm_widths[curr_index+1]); // update clm_widths by swapping element pos with one to left
1198  swap(clm_names[curr_index], clm_names[curr_index+1]); // update clm_names by swapping element pos with one to left
1199 
1200  EditPanelData<InfoProc<std::string>> tmpPanel = columns[curr_index]; // update columns by swapping element pos with one to left
1201  columns[curr_index] = columns[curr_index+1];
1202  columns[curr_index+1] = tmpPanel;
1203 
1204  // update column window positions
1205  int x_pos = 0;
1206  for(int i=0; i<curr_index; i++)
1207  x_pos += clm_widths[i];
1208  mvderwin(columns[curr_index].window(), 0, x_pos);
1209  x_pos += clm_widths[curr_index];
1210  mvderwin(columns[curr_index+1].window(), 0, x_pos);
1211  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_moveRight::"<<"mode:"<<edit_mode;
1212  log_spacer.delSpace();
1213  }
1214 
1216  {
1217  log_spacer.addSpace();
1218  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_Down:: browse:"<<browse_pos;
1219  proc_database->access.lock(); // need to gain access to proc_database lock, as we use its size, which should not change while we browse down
1220  int sz = proc_database->dbsize;
1221  if (browse_pos >= sz) // if browse_pos > sz since last check, reset it to last element
1222  {
1223  browse_pos = sz;
1224  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_Down:: browse:"<<browse_pos;
1225  log_spacer.delSpace();
1226  return;
1227  }
1228  browse_pos++;
1229  for(auto panel: columns) // move each column's menu element selection down by 1 position
1230  panel.Down();
1231  proc_database->access.unlock(); // release access to proc_database lock
1232  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_Down:: browse:"<<browse_pos;
1233  log_spacer.delSpace();
1234  }
1235 
1237  {
1238  log_spacer.addSpace();
1239  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_Up:: browse:"<<browse_pos;
1240  proc_database->access.lock(); // need to gain access to proc_database lock, as we use its size, which should not change while we browse down
1241  if (browse_pos <= 1) // if browse position is already at top, return without doing anything
1242  {
1243  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_Up:: browse:"<<browse_pos;
1244  log_spacer.delSpace();
1245  return;
1246  }
1247  browse_pos--;
1248  for(auto panel: columns) // move each column's menu element selection up by 1 position
1249  panel.Up();
1250  proc_database->access.unlock(); // release access to proc_database lock
1251  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_Up:: browse:"<<browse_pos;
1252  log_spacer.delSpace();
1253  }
1254 
1256  {
1257  log_spacer.addSpace();
1258  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"--> ProcViewPanel-"<<uuid<<"_refresh:: browse: "<<browse_pos;
1259  clms_mutex.lock();
1260  if(clm_names.empty()) // initialization step, if clm_names has not been populated, do so now
1262  clms_mutex.unlock();
1263  // refresh the columns to be displayed with entries from process database
1264  proc_database->access.lock(); // acquire lock on proc_database
1266  for(int i=0; i<clm_names.size(); i++) // refresh each column to vector entry from proc_database data dictionary
1268  proc_database->access.unlock(); // release lock on proc_database
1269  BOOST_LOG_SEV(lg, debug)<<log_spacer<<"<-- ProcViewPanel-"<<uuid<<"_refresh:: browse:"<<browse_pos;
1270  log_spacer.delSpace();
1271  }
1272 
1273 } // namespace rtop
1274 
1275 #endif //_PANEL_H_
1276 
int width
width and height in panel window in ncurses units.
Definition: panel2.h:39
MENU * menu
pointer to MENU
Definition: panel2.h:265
virtual void insertColumn()
mock
Definition: panel2.h:136
void setDimensions(int h, int w)
set internal width, height variables corresponding to panel window dimensions
Definition: panel2.h:153
virtual void show2()
makes panel visible
Definition: panel2.h:219
std::string sortKey() const
called by Column::read. returns property name to be used as sort key
Definition: panel2.h:982
virtual void refreshItemList2(std::vector< InfoProc< std::string >> &, std::string, const std::vector< int > &, int &)
mock
Definition: panel2.h:111
SimplePanelData(int)
SimplePanelData constructor.
Definition: panel2.h:148
bool editing
editing status of panel
Definition: panel2.h:632
virtual void toggleEditMode()
mock
Definition: panel2.h:87
MapOfKeyDicts mapKeyDict
global variable for accessing key dictionaries by their uuid
Definition: key_dict.h:175
std::mutex clms_mutex
Definition: panel2.h:918
derived from BrowsePanelData. capable of editing items in ncurses menu list.
Definition: panel2.h:242
int dbsize
size of property vector i.e. number of processes whose properties are being maintained
Definition: info.h:123
int size_item_list
size of object_list
Definition: panel2.h:261
virtual void addIntoRightNbr() override
mock
Definition: panel2.h:384
void Top() override
sets menu's first item as selected item
Definition: panel2.h:593
virtual void setHeaderColor(int color_pair) override
sets color of menu's header item to be header color_pair
Definition: panel2.h:326
int basic_color
color_pair id for unselected item in menu
Definition: panel2.h:271
virtual void selectionOff() override
sets currently selected menu item's color to basic color_pair and update curr_color to basic color_pa...
Definition: panel2.h:542
void setRightNbr(SimplePanelData *)
set pointer to right neighbour panel
Definition: panel2.h:168
virtual void setEditingColor(int)
mock
Definition: panel2.h:93
virtual void insertIntoLeftNbr()
mock
Definition: panel2.h:119
virtual void moveIntoLeftNbr() override
mock
Definition: panel2.h:389
void refreshItemList() override
intended to be used with browse panels. tears down menu and re-initializes with items in object_list
Definition: panel2.h:417
void refreshItemList2(std::vector< InfoProc< std::string >> &, std::string, const std::vector< int > &, int &) override
called from ProcViewPanel::refresh. tears down menu and reinitializes with data (reference to vector ...
Definition: panel2.h:461
int currIndex() const
returns currently selected item on object_list
Definition: panel2.h:284
virtual void refreshItemList()
mock
Definition: panel2.h:109
SimplePanelData * l_next
Definition: panel2.h:45
StateMachine smKeys
Keys statemachine.
Definition: panel2.h:47
void insertIntoLeftNbr() override
inserts value of currently selected menu item into menu of left neighbour
Definition: panel2.h:716
void setHeader(std::string head_str) override
sets panel header.
Definition: panel2.h:286
virtual void resolveKey(int) override
resolves current key with KeyDict
Definition: panel2.h:871
void setPanel(PANEL *panel_in)
sets reference to ncurses PANEL associated with this panel data structure
Definition: panel2.h:58
void createColumn(EditPanelData< InfoProc< std::string >> &, int, int, std::string)
responsible for creating a new edit panel containing menu to hold property values
Definition: panel2.h:1024
virtual void resolveKey(int) override
resolves the key input at panel level
Definition: panel2.h:612
std::map< std::string, int > prop_wid_dict
dictionary of column width assigned to each process property
Definition: panel2.h:928
int uUid() const
returns unique identifier of this object
Definition: panel2.h:54
void release()
releases UI resources associated with this panel
Definition: panel2.h:685
void selectionOff() override
sets currently selected menu item's color to basic_color and update curr_color to basic_color
Definition: panel2.h:760
virtual void insertIntoRightNbr()
mock
Definition: panel2.h:121
virtual void insertIntoRightNbr() override
inserts value of currently selected menu item into menu of right neighbour
Definition: panel2.h:373
virtual void selectionOn()
mock
Definition: panel2.h:83
virtual void Up()
mock
Definition: panel2.h:105
int selected
item selected in menu, 0 being header item
Definition: panel2.h:267
void insert(InfoProc< float > *)
not implemented
Definition: panel2.h:672
virtual void setSelectionColor(int)
mock
Definition: panel2.h:95
void selectionOn() override
sets currently selected menu item's color to selection curr_color_pair (editiing_color or selection_c...
Definition: panel2.h:746
int currState() const
returns current state
Definition: sm.h:48
WINDOW * win
window attached to the panel
Definition: panel2.h:43
data structure that hold property values for processes. contains facilities to enable their proper ac...
Definition: info.h:109
bool editMode() const
return edit mode
Definition: panel2.h:678
void setHeaderColor(int hcolor) override
set column header color_pair
Definition: panel2.h:987
void moveLeft() override
swaps column (based on selection in active_proc_panel) with left neighbour
Definition: panel2.h:1137
virtual void Down() override
moves menu item selection down by 1
Definition: panel2.h:555
virtual void insertIntoLeftNbr() override
inserts value of currently selected menu item into menu of left neighbour
Definition: panel2.h:363
void editModeOn() override
sets editing to true
Definition: panel2.h:797
SimplePanelData * rightNbr()
returns pointer to right neighbour panel
Definition: panel2.h:186
void Up() override
move cursor one position up
Definition: panel2.h:1236
int capacity
capacity of object_list.
Definition: panel2.h:263
std::string sort_key
sorting key - some process's properties name
Definition: panel2.h:926
void toggleEditMode() override
toggles editing mode
Definition: panel2.h:736
virtual void addIntoRightNbr()
mock
Definition: panel2.h:125
void show() override
makes all columns associated with this panel visible
Definition: panel2.h:1062
virtual void Up() override
moves menu item selection up by 1
Definition: panel2.h:574
src::severity_logger< severity_level > lg
Definition: rtop_logger.h:108
std::vector< T * > object_list
vector of pointers to generic type containing value that goes into menu item.
Definition: panel2.h:257
std::vector< std::string > clm_names
vector of property names currently being displayed by the panel
Definition: panel2.h:930
void resolveKey(int) override
resolve current key with panel's key dictionary
Definition: panel2.h:1005
std::vector< int > sorted_indices
vector that holds the permutation order to parse property vectors in sorted order
Definition: info.h:117
MemFuncPDict funcPDict
Definition: key_dict.h:20
virtual void moveIntoLeftNbr()
mock
Definition: panel2.h:115
void insertColumn() override
inserts Column based on item selected in active_proc_panel
Definition: panel2.h:1110
int curr_color
current color_pair (either selection_color or basic_color)
Definition: panel2.h:273
EditPanelData(int)
EditPanelData<T> constructor.
Definition: panel2.h:792
std::vector< std::string > displayedKeys() const
called by Column::read. return vector of property names currently being displayed
Definition: panel2.h:996
panel data structure responsible for displaying of property values for all live processes.
Definition: panel2.h:915
void setWin(WINDOW *win_in)
sets reference to ncurses WINDOW associated with panel
Definition: panel2.h:56
void setEditingColor(int color_pair) override
sets editing color_pair
Definition: panel2.h:653
virtual void editModeOff()
mock
Definition: panel2.h:91
virtual void editModeOn()
mock
Definition: panel2.h:89
void delSpace()
deletes one white-space from white-space string corresponding to invoking thread
Definition: rtop_logger.h:151
virtual void show()
refreshes contents of associated BrowsePanel data structure and makes panel visible
Definition: panel2.h:206
virtual void setHeader(std::string)
mock
Definition: panel2.h:101
virtual void hide()
hides panel
Definition: panel2.h:230
virtual void remove()
mock
Definition: panel2.h:127
void setSelectionColor(int color_pair) override
sets color_pair for selected menu item
Definition: panel2.h:292
std::map< std::string, std::vector< InfoProc< std::string > > > database
dictionary that holds vector of values corresponding to each property name string
Definition: info.h:115
void insertIntoRightNbr() override
inserts value of currently selected menu item into menu of right neighbour
Definition: panel2.h:726
WINDOW * window() const
returns pointer to ncurses WINDOW associated with panel
Definition: panel2.h:78
int editing_color
index of color_pair for editing
Definition: panel2.h:634
BrowsePanelData(int)
BrowsePanelData<T> constructor.
Definition: panel2.h:336
void addSpace()
adds one white-space to white-space string corresponding to invoking thread
Definition: rtop_logger.h:135
void hide() override
hides all columns associated with this panel
Definition: panel2.h:1072
data structure that defines type of entry from which panel menu entrires obtain their c-string data
Definition: info.h:25
void moveTo(int, int)
move panel window to desired x,y pos on stdscr.
Definition: panel2.h:195
void setLeftNbr(SimplePanelData *)
set pointer to left neighbour panel
Definition: panel2.h:159
void deleteColumn() override
deletes Column based on item selected in active_proc_panel
Definition: panel2.h:1082
derived from SimplePanelData. capable of storing list of item in a ncurses menu object.
Definition: panel2.h:253
SimplePanelData * r_next
pointer to panel data structures correponding to left/right neighbour of this panel
Definition: panel2.h:45
ProcDb * proc_database
pointer reference to ProcDb object
Definition: panel2.h:924
void insert(InfoProc< int > *)
not implemented
Definition: panel2.h:674
virtual void addIntoLeftNbr()
mock
Definition: panel2.h:123
virtual std::vector< std::string > displayedKeys() const
mock
Definition: panel2.h:132
SimplePanelData * active_proc_panel
reference to panel data structure containing property names to be displayed. clm_names,...
Definition: panel2.h:934
void loadColumnsFromActiveProc()
runs only initially to create columns to load all properties to be displayed
Definition: panel2.h:1040
logSpacer log_spacer
Definition: rtop_logger.h:186
KeyDict getKeyDict(int)
Definition: key_dict.h:154
int header_color
color_paid id for header color
Definition: panel2.h:275
virtual void moveLeft()
mock
Definition: panel2.h:140
ITEM ** item_list
array of pointers to ITEM (array of ITEM*) for menu initialization
Definition: panel2.h:259
virtual void selectionOff()
mock
Definition: panel2.h:85
int selection_color
color_pair id for selected item in menu
Definition: panel2.h:269
enables indentation of logs for easy viewing
Definition: rtop_logger.h:118
data structure that defines type of entry from which panel menu entries obtain their c-string data
Definition: info.h:71
ProcViewPanel(int id)
ProcViewPanel constructor.
Definition: panel2.h:948
std::string header
panel header.
Definition: panel2.h:277
virtual void Top()
mock
Definition: panel2.h:107
Base class in heirarchy of UI objects responsible to storing the content associated with a panel and ...
Definition: panel2.h:34
void Down() override
move cursor one position down
Definition: panel2.h:1215
virtual void setHeaderColor(int)
mock
Definition: panel2.h:99
void swap(std::vector< T > &v, int i, int j)
swaps supplied vectors' element corresponding to indices i and j
Definition: rtop_utils.h:173
statemachine that uses integer corresponding to object uuids to represent states
Definition: sm.h:20
std::vector< std::string > contents()
returns contents of panel's menu as vector of strings
Definition: panel2.h:350
PANEL * panel
panel to which the data structure is associated
Definition: panel2.h:41
int browse_pos
browser position in property column. 1 corresponds to 1st item
Definition: panel2.h:920
virtual T * currItem() const
returns copy of currently selected item in object_list
Definition: panel2.h:401
virtual void selectionOn() override
sets currently selected menu item's color to selection color_pair and update curr_color to selection ...
Definition: panel2.h:529
parses config file
Definition: fileio.h:28
virtual void moveIntoRightNbr()
mock
Definition: panel2.h:117
void Down() override
swap selected item with item below it (editing) or moves cursor down by one (not editing)
Definition: panel2.h:817
void insert(InfoProc< std::string > *)
not implemented
Definition: panel2.h:676
void remove() override
remove currently selected menu item
Definition: panel2.h:881
std::vector< int > clm_widths
vector of column widths corresponding to properties being displayed
Definition: panel2.h:932
virtual void refresh()
mock
Definition: panel2.h:138
SimplePanelData * leftNbr()
returns pointer to left neighbour panel
Definition: panel2.h:177
void Up() override
swap selected item with item above it (editing) or moves cursor up by one (not editing)
Definition: panel2.h:844
void syncColors() override
Definition: panel2.h:1014
virtual void deleteColumn()
mock
Definition: panel2.h:134
virtual void addIntoLeftNbr() override
mock
Definition: panel2.h:378
Definition: action.h:7
void setBasicColor(int color_pair) override
sets color_pair for unselected menu item
Definition: panel2.h:294
void editModeOff() override
sets editing to false
Definition: panel2.h:807
virtual void resolveKey(int)
mock
Definition: panel2.h:113
std::mutex access
Definition: info.h:112
virtual void setBasicColor(int)
mock
Definition: panel2.h:97
void insert(Info *)
inserts Info* object into into object_list above selected item
Definition: panel2.h:771
virtual void syncColors()
mock
Definition: panel2.h:144
std::vector< EditPanelData< InfoProc< std::string > > > columns
vector of EditPanel data structures, each containing list of specific propertie's value for all proce...
Definition: panel2.h:922
int header_color
color_pair corresponding to column headers
Definition: panel2.h:938
void refresh() override
manages column initialization and column updates
Definition: panel2.h:1255
virtual void Down()
mock
Definition: panel2.h:103
void moveRight() override
swaps column (based on selection in active_proc_panel) with left neighbour
Definition: panel2.h:1175
virtual void moveIntoRightNbr() override
mock
Definition: panel2.h:395
virtual void moveRight()
mock
Definition: panel2.h:142
void setHeaderColor(int) override
sets header color_pair
Definition: panel2.h:706