summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2015-03-23 15:26:56 -0300
committerHisham Muhammad <hisham@gobolinux.org>2015-03-23 15:26:56 -0300
commitd0c72c3fb29d535f5bb12b651e3bcaa516650199 (patch)
tree2c01b7d96d50a7f47334093a1ed8ff4962cec204
parent1084a3ff8faf3aa98e8e9fbdab97a08a2c40482e (diff)
Move FunctionBar inside Panel
-rw-r--r--Action.c36
-rw-r--r--Action.h2
-rw-r--r--AffinityPanel.c6
-rw-r--r--AvailableColumnsPanel.c5
-rw-r--r--AvailableMetersPanel.c7
-rw-r--r--CategoriesPanel.c33
-rw-r--r--ColorsPanel.c5
-rw-r--r--ColumnsPanel.c5
-rw-r--r--DisplayOptionsPanel.c5
-rw-r--r--FunctionBar.c16
-rw-r--r--FunctionBar.h8
-rw-r--r--IncSet.c5
-rw-r--r--MainPanel.c22
-rw-r--r--MainPanel.h4
-rw-r--r--MetersPanel.c7
-rw-r--r--OpenFilesScreen.c15
-rw-r--r--OpenFilesScreen.h2
-rw-r--r--Panel.c12
-rw-r--r--Panel.h7
-rw-r--r--ScreenManager.c24
-rw-r--r--ScreenManager.h4
-rw-r--r--SignalsPanel.c6
-rw-r--r--TraceScreen.c14
-rw-r--r--TraceScreen.h1
-rw-r--r--htop.c10
-rw-r--r--linux/IOPriorityPanel.c7
-rw-r--r--linux/Platform.c3
27 files changed, 134 insertions, 137 deletions
diff --git a/Action.c b/Action.c
index adc6ed98..30c0ab7d 100644
--- a/Action.c
+++ b/Action.c
@@ -61,18 +61,16 @@ typedef struct State_ {
}*/
-Object* Action_pickFromVector(State* st, Panel* list, int x, const char** keyLabels) {
+Object* Action_pickFromVector(State* st, Panel* list, int x) {
Panel* panel = st->panel;
Header* header = st->header;
Settings* settings = st->settings;
int y = panel->y;
- const char* fuKeys[] = {"Enter", "Esc", NULL};
- int fuEvents[] = {13, 27};
ScreenManager* scr = ScreenManager_new(0, header->height, 0, -1, HORIZONTAL, header, settings, false);
scr->allowFocusChange = false;
- ScreenManager_add(scr, list, FunctionBar_new(keyLabels, fuKeys, fuEvents), x - 1);
- ScreenManager_add(scr, panel, NULL, -1);
+ ScreenManager_add(scr, list, x - 1);
+ ScreenManager_add(scr, panel, -1);
Panel* panelFocus;
int ch;
bool unfollow = false;
@@ -100,12 +98,10 @@ Object* Action_pickFromVector(State* st, Panel* list, int x, const char** keyLab
// ----------------------------------------
-static const char* CategoriesFunctions[] = {" ", " ", " ", " ", " ", " ", " ", " ", " ", "Done ", NULL};
-
static void Action_runSetup(Settings* settings, const Header* header, ProcessList* pl) {
ScreenManager* scr = ScreenManager_new(0, header->height, 0, -1, HORIZONTAL, header, settings, true);
CategoriesPanel* panelCategories = CategoriesPanel_new(scr, settings, (Header*) header, pl);
- ScreenManager_add(scr, (Panel*) panelCategories, FunctionBar_new(CategoriesFunctions, NULL, NULL), 16);
+ ScreenManager_add(scr, (Panel*) panelCategories, 16);
CategoriesPanel_makeMetersPage(panelCategories);
Panel* panelFocus;
int ch;
@@ -165,11 +161,14 @@ static inline Htop_Reaction setSortKey(Settings* settings, ProcessField sortKey)
return HTOP_REFRESH | HTOP_SAVE_SETTINGS | HTOP_UPDATE_PANELHDR;
}
+static const char* SortFunctions[] = {"Sort ", "Cancel ", NULL};
+static const char* SortKeys[] = {"Enter", "Esc", NULL};
+static int SortEvents[] = {13, 27};
+
static Htop_Reaction sortBy(State* st) {
Htop_Reaction reaction = HTOP_OK;
- Panel* sortPanel = Panel_new(0, 0, 0, 0, true, Class(ListItem));
+ Panel* sortPanel = Panel_new(0, 0, 0, 0, true, Class(ListItem), FunctionBar_new(SortFunctions, SortKeys, SortEvents));
Panel_setHeader(sortPanel, "Sort by");
- const char* fuFunctions[] = {"Sort ", "Cancel ", NULL};
ProcessField* fields = st->settings->fields;
for (int i = 0; fields[i]; i++) {
char* name = String_trim(Process_fields[fields[i]].name);
@@ -178,7 +177,7 @@ static Htop_Reaction sortBy(State* st) {
Panel_setSelected(sortPanel, i);
free(name);
}
- ListItem* field = (ListItem*) Action_pickFromVector(st, sortPanel, 15, fuFunctions);
+ ListItem* field = (ListItem*) Action_pickFromVector(st, sortPanel, 15);
if (field) {
reaction |= setSortKey(st->settings, field->key);
}
@@ -280,8 +279,7 @@ static Htop_Reaction actionSetAffinity(State* st) {
Panel* affinityPanel = AffinityPanel_new(st->pl, affinity);
Affinity_delete(affinity);
- const char* fuFunctions[] = {"Set ", "Cancel ", NULL};
- void* set = Action_pickFromVector(st, affinityPanel, 15, fuFunctions);
+ void* set = Action_pickFromVector(st, affinityPanel, 15);
if (set) {
Affinity* affinity = AffinityPanel_getAffinity(affinityPanel, st->pl);
bool ok = MainPanel_foreachProcess((MainPanel*)panel, (MainPanel_ForeachProcessFn) Affinity_set, (size_t) affinity, NULL);
@@ -295,8 +293,7 @@ static Htop_Reaction actionSetAffinity(State* st) {
static Htop_Reaction actionKill(State* st) {
Panel* signalsPanel = (Panel*) SignalsPanel_new();
- const char* fuFunctions[] = {"Send ", "Cancel ", NULL};
- ListItem* sgn = (ListItem*) Action_pickFromVector(st, signalsPanel, 15, fuFunctions);
+ ListItem* sgn = (ListItem*) Action_pickFromVector(st, signalsPanel, 15);
if (sgn) {
if (sgn->key != 0) {
Panel_setHeader(st->panel, "Sending...");
@@ -310,15 +307,18 @@ static Htop_Reaction actionKill(State* st) {
return HTOP_REFRESH | HTOP_REDRAW_BAR | HTOP_UPDATE_PANELHDR;
}
+static const char* UsersFunctions[] = {"Show ", "Cancel ", NULL};
+static const char* UsersKeys[] = {"Enter", "Esc", NULL};
+static int UsersEvents[] = {13, 27};
+
static Htop_Reaction actionFilterByUser(State* st) {
- Panel* usersPanel = Panel_new(0, 0, 0, 0, true, Class(ListItem));
+ Panel* usersPanel = Panel_new(0, 0, 0, 0, true, Class(ListItem), FunctionBar_new(UsersFunctions, UsersKeys, UsersEvents));
Panel_setHeader(usersPanel, "Show processes of:");
UsersTable_foreach(st->ut, addUserToVector, usersPanel);
Vector_insertionSort(usersPanel->items);
ListItem* allUsers = ListItem_new("All users", -1);
Panel_insert(usersPanel, 0, (Object*) allUsers);
- const char* fuFunctions[] = {"Show ", "Cancel ", NULL};
- ListItem* picked = (ListItem*) Action_pickFromVector(st, usersPanel, 20, fuFunctions);
+ ListItem* picked = (ListItem*) Action_pickFromVector(st, usersPanel, 20);
if (picked) {
if (picked == allUsers) {
st->pl->userId = -1;
diff --git a/Action.h b/Action.h
index 4228349c..3015a006 100644
--- a/Action.h
+++ b/Action.h
@@ -39,7 +39,7 @@ typedef struct State_ {
} State;
-Object* Action_pickFromVector(State* st, Panel* list, int x, const char** keyLabels);
+Object* Action_pickFromVector(State* st, Panel* list, int x);
// ----------------------------------------
diff --git a/AffinityPanel.c b/AffinityPanel.c
index fb642e06..644c6338 100644
--- a/AffinityPanel.c
+++ b/AffinityPanel.c
@@ -42,8 +42,12 @@ PanelClass AffinityPanel_class = {
.eventHandler = AffinityPanel_eventHandler
};
+static const char* AffinityFunctions[] = {"Set ", "Cancel ", NULL};
+static const char* AffinityKeys[] = {"Enter", "Esc", NULL};
+static int AffinityEvents[] = {13, 27};
+
Panel* AffinityPanel_new(ProcessList* pl, Affinity* affinity) {
- Panel* this = Panel_new(1, 1, 1, 1, true, Class(CheckItem));
+ Panel* this = Panel_new(1, 1, 1, 1, true, Class(CheckItem), FunctionBar_new(AffinityFunctions, AffinityKeys, AffinityEvents));
Object_setClass(this, Class(AffinityPanel));
Panel_setHeader(this, "Use CPUs:");
diff --git a/AvailableColumnsPanel.c b/AvailableColumnsPanel.c
index bc851eb8..70d75807 100644
--- a/AvailableColumnsPanel.c
+++ b/AvailableColumnsPanel.c
@@ -26,6 +26,8 @@ typedef struct AvailableColumnsPanel_ {
}*/
+static const char* AvailableColumnsFunctions[] = {" ", " ", " ", " ", "Add ", " ", " ", " ", " ", "Done ", NULL};
+
static void AvailableColumnsPanel_delete(Object* object) {
Panel* super = (Panel*) object;
AvailableColumnsPanel* this = (AvailableColumnsPanel*) object;
@@ -71,7 +73,8 @@ PanelClass AvailableColumnsPanel_class = {
AvailableColumnsPanel* AvailableColumnsPanel_new(Panel* columns) {
AvailableColumnsPanel* this = AllocThis(AvailableColumnsPanel);
Panel* super = (Panel*) this;
- Panel_init(super, 1, 1, 1, 1, Class(ListItem), true);
+ FunctionBar* fuBar = FunctionBar_new(AvailableColumnsFunctions, NULL, NULL);
+ Panel_init(super, 1, 1, 1, 1, Class(ListItem), true, fuBar);
Panel_setHeader(super, "Available Columns");
diff --git a/AvailableMetersPanel.c b/AvailableMetersPanel.c
index 88a95db9..67451388 100644
--- a/AvailableMetersPanel.c
+++ b/AvailableMetersPanel.c
@@ -34,6 +34,10 @@ typedef struct AvailableMetersPanel_ {
}*/
+static const char* AvailableMetersFunctions[] = {"Add ", "Done ", NULL};
+static const char* AvailableMetersKeys[] = {"Enter", "Esc"};
+static int AvailableMetersEvents[] = {13, 27};
+
static void AvailableMetersPanel_delete(Object* object) {
Panel* super = (Panel*) object;
AvailableMetersPanel* this = (AvailableMetersPanel*) object;
@@ -102,7 +106,8 @@ PanelClass AvailableMetersPanel_class = {
AvailableMetersPanel* AvailableMetersPanel_new(Settings* settings, Header* header, Panel* leftMeters, Panel* rightMeters, ScreenManager* scr, ProcessList* pl) {
AvailableMetersPanel* this = AllocThis(AvailableMetersPanel);
Panel* super = (Panel*) this;
- Panel_init(super, 1, 1, 1, 1, Class(ListItem), true);
+ FunctionBar* fuBar = FunctionBar_new(AvailableMetersFunctions, AvailableMetersKeys, AvailableMetersEvents);
+ Panel_init(super, 1, 1, 1, 1, Class(ListItem), true, fuBar);
this->settings = settings;
this->header = header;
diff --git a/CategoriesPanel.c b/CategoriesPanel.c
index 7fa31b7d..fe55a88a 100644
--- a/CategoriesPanel.c
+++ b/CategoriesPanel.c
@@ -34,21 +34,7 @@ typedef struct CategoriesPanel_ {
}*/
-static const char* MetersFunctions[] = {"Type ", "Move ", "Delete", "Done ", NULL};
-static const char* MetersKeys[] = {"Space", "Enter", "Del", "Esc"};
-static int MetersEvents[] = {' ', 13, 27, KEY_DC};
-
-static const char* AvailableMetersFunctions[] = {"Add ", "Done ", NULL};
-static const char* AvailableMetersKeys[] = {"Enter", "Esc"};
-static int AvailableMetersEvents[] = {13, 27};
-
-static const char* DisplayOptionsFunctions[] = {" ", " ", " ", " ", " ", " ", " ", " ", " ", "Done ", NULL};
-
-static const char* ColumnsFunctions[] = {" ", " ", " ", " ", " ", " ", "MoveUp", "MoveDn", "Remove", "Done ", NULL};
-
-static const char* ColorsFunctions[] = {" ", " ", " ", " ", " ", " ", " ", " ", " ", "Done ", NULL};
-
-static const char* AvailableColumnsFunctions[] = {" ", " ", " ", " ", "Add ", " ", " ", " ", " ", "Done ", NULL};
+static const char* CategoriesFunctions[] = {" ", " ", " ", " ", " ", " ", " ", " ", " ", "Done ", NULL};
static void CategoriesPanel_delete(Object* object) {
Panel* super = (Panel*) object;
@@ -63,26 +49,26 @@ void CategoriesPanel_makeMetersPage(CategoriesPanel* this) {
leftMeters->rightNeighbor = rightMeters;
rightMeters->leftNeighbor = leftMeters;
Panel* availableMeters = (Panel*) AvailableMetersPanel_new(this->settings, this->header, (Panel*) leftMeters, (Panel*) rightMeters, this->scr, this->pl);
- ScreenManager_add(this->scr, (Panel*) leftMeters, FunctionBar_new(MetersFunctions, MetersKeys, MetersEvents), 20);
- ScreenManager_add(this->scr, (Panel*) rightMeters, FunctionBar_new(MetersFunctions, MetersKeys, MetersEvents), 20);
- ScreenManager_add(this->scr, availableMeters, FunctionBar_new(AvailableMetersFunctions, AvailableMetersKeys, AvailableMetersEvents), -1);
+ ScreenManager_add(this->scr, (Panel*) leftMeters, 20);
+ ScreenManager_add(this->scr, (Panel*) rightMeters, 20);
+ ScreenManager_add(this->scr, availableMeters, -1);
}
static void CategoriesPanel_makeDisplayOptionsPage(CategoriesPanel* this) {
Panel* displayOptions = (Panel*) DisplayOptionsPanel_new(this->settings, this->scr);
- ScreenManager_add(this->scr, displayOptions, FunctionBar_new(DisplayOptionsFunctions, NULL, NULL), -1);
+ ScreenManager_add(this->scr, displayOptions, -1);
}
static void CategoriesPanel_makeColorsPage(CategoriesPanel* this) {
Panel* colors = (Panel*) ColorsPanel_new(this->settings, this->scr);
- ScreenManager_add(this->scr, colors, FunctionBar_new(ColorsFunctions, NULL, NULL), -1);
+ ScreenManager_add(this->scr, colors, -1);
}
static void CategoriesPanel_makeColumnsPage(CategoriesPanel* this) {
Panel* columns = (Panel*) ColumnsPanel_new(this->settings);
Panel* availableColumns = (Panel*) AvailableColumnsPanel_new(columns);
- ScreenManager_add(this->scr, columns, FunctionBar_new(ColumnsFunctions, NULL, NULL), 20);
- ScreenManager_add(this->scr, availableColumns, FunctionBar_new(AvailableColumnsFunctions, NULL, NULL), -1);
+ ScreenManager_add(this->scr, columns, 20);
+ ScreenManager_add(this->scr, availableColumns, -1);
}
static HandlerResult CategoriesPanel_eventHandler(Panel* super, int ch) {
@@ -150,7 +136,8 @@ PanelClass CategoriesPanel_class = {
CategoriesPanel* CategoriesPanel_new(ScreenManager* scr, Settings* settings, Header* header, ProcessList* pl) {
CategoriesPanel* this = AllocThis(CategoriesPanel);
Panel* super = (Panel*) this;
- Panel_init(super, 1, 1, 1, 1, Class(ListItem), true);
+ FunctionBar* fuBar = FunctionBar_new(CategoriesFunctions, NULL, NULL);
+ Panel_init(super, 1, 1, 1, 1, Class(ListItem), true, fuBar);
this->scr = scr;
this->settings = settings;
diff --git a/ColorsPanel.c b/ColorsPanel.c
index c4255f87..3c643fa6 100644
--- a/ColorsPanel.c
+++ b/ColorsPanel.c
@@ -34,6 +34,8 @@ typedef struct ColorsPanel_ {
}*/
+static const char* ColorsFunctions[] = {" ", " ", " ", " ", " ", " ", " ", " ", " ", "Done ", NULL};
+
static const char* ColorSchemeNames[] = {
"Default",
"Monochromatic",
@@ -94,7 +96,8 @@ PanelClass ColorsPanel_class = {
ColorsPanel* ColorsPanel_new(Settings* settings, ScreenManager* scr) {
ColorsPanel* this = AllocThis(ColorsPanel);
Panel* super = (Panel*) this;
- Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true);
+ FunctionBar* fuBar = FunctionBar_new(ColorsFunctions, NULL, NULL);
+ Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true, fuBar);
this->settings = settings;
this->scr = scr;
diff --git a/ColumnsPanel.c b/ColumnsPanel.c
index 45b4de00..b2fa5b5e 100644
--- a/ColumnsPanel.c
+++ b/ColumnsPanel.c
@@ -28,6 +28,8 @@ typedef struct ColumnsPanel_ {
}*/
+static const char* ColumnsFunctions[] = {" ", " ", " ", " ", " ", " ", "MoveUp", "MoveDn", "Remove", "Done ", NULL};
+
static void ColumnsPanel_delete(Object* object) {
Panel* super = (Panel*) object;
ColumnsPanel* this = (ColumnsPanel*) object;
@@ -121,7 +123,8 @@ PanelClass ColumnsPanel_class = {
ColumnsPanel* ColumnsPanel_new(Settings* settings) {
ColumnsPanel* this = AllocThis(ColumnsPanel);
Panel* super = (Panel*) this;
- Panel_init(super, 1, 1, 1, 1, Class(ListItem), true);
+ FunctionBar* fuBar = FunctionBar_new(ColumnsFunctions, NULL, NULL);
+ Panel_init(super, 1, 1, 1, 1, Class(ListItem), true, fuBar);
this->settings = settings;
this->moving = false;
diff --git a/DisplayOptionsPanel.c b/DisplayOptionsPanel.c
index 8fa81964..9e119091 100644
--- a/DisplayOptionsPanel.c
+++ b/DisplayOptionsPanel.c
@@ -27,6 +27,8 @@ typedef struct DisplayOptionsPanel_ {
}*/
+static const char* DisplayOptionsFunctions[] = {" ", " ", " ", " ", " ", " ", " ", " ", " ", "Done ", NULL};
+
static void DisplayOptionsPanel_delete(Object* object) {
Panel* super = (Panel*) object;
DisplayOptionsPanel* this = (DisplayOptionsPanel*) object;
@@ -72,7 +74,8 @@ PanelClass DisplayOptionsPanel_class = {
DisplayOptionsPanel* DisplayOptionsPanel_new(Settings* settings, ScreenManager* scr) {
DisplayOptionsPanel* this = AllocThis(DisplayOptionsPanel);
Panel* super = (Panel*) this;
- Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true);
+ FunctionBar* fuBar = FunctionBar_new(DisplayOptionsFunctions, NULL, NULL);
+ Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true, fuBar);
this->settings = settings;
this->scr = scr;
diff --git a/FunctionBar.c b/FunctionBar.c
index 1c6066ae..ffae0106 100644
--- a/FunctionBar.c
+++ b/FunctionBar.c
@@ -6,19 +6,18 @@ in the source distribution for its full text.
*/
#include "FunctionBar.h"
-
#include "CRT.h"
+#include "RichString.h"
#include <assert.h>
#include <string.h>
#include <stdlib.h>
-#include <stdbool.h>
/*{
-#include "Object.h"
+
+#include <stdbool.h>
typedef struct FunctionBar_ {
- Object super;
int size;
char** functions;
char** keys;
@@ -34,12 +33,8 @@ static const char* FunctionBar_FLabels[] = {" ", " ", " ", "
static int FunctionBar_FEvents[] = {KEY_F(1), KEY_F(2), KEY_F(3), KEY_F(4), KEY_F(5), KEY_F(6), KEY_F(7), KEY_F(8), KEY_F(9), KEY_F(10)};
-ObjectClass FunctionBar_class = {
- .delete = FunctionBar_delete
-};
-
FunctionBar* FunctionBar_new(const char** functions, const char** keys, int* events) {
- FunctionBar* this = AllocThis(FunctionBar);
+ FunctionBar* this = calloc(1, sizeof(FunctionBar));
this->functions = calloc(16, sizeof(char*));
if (!functions) {
functions = FunctionBar_FLabels;
@@ -67,8 +62,7 @@ FunctionBar* FunctionBar_new(const char** functions, const char** keys, int* eve
return this;
}
-void FunctionBar_delete(Object* cast) {
- FunctionBar* this = (FunctionBar*) cast;
+void FunctionBar_delete(FunctionBar* this) {
for (int i = 0; i < 15 && this->functions[i]; i++) {
free(this->functions[i]);
}
diff --git a/FunctionBar.h b/FunctionBar.h
index 68e28f9f..75f432e7 100644
--- a/FunctionBar.h
+++ b/FunctionBar.h
@@ -9,10 +9,10 @@ Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
-#include "Object.h"
+
+#include <stdbool.h>
typedef struct FunctionBar_ {
- Object super;
int size;
char** functions;
char** keys;
@@ -21,11 +21,9 @@ typedef struct FunctionBar_ {
} FunctionBar;
-extern ObjectClass FunctionBar_class;
-
FunctionBar* FunctionBar_new(const char** functions, const char** keys, int* events);
-void FunctionBar_delete(Object* cast);
+void FunctionBar_delete(FunctionBar* this);
void FunctionBar_setLabel(FunctionBar* this, int event, const char* text);
diff --git a/IncSet.c b/IncSet.c
index 40aa9233..d17bb131 100644
--- a/IncSet.c
+++ b/IncSet.c
@@ -73,7 +73,7 @@ static inline void IncMode_initFilter(IncMode* filter) {
}
static inline void IncMode_done(IncMode* mode) {
- FunctionBar_delete((Object*)mode->bar);
+ FunctionBar_delete(mode->bar);
}
IncSet* IncSet_new(FunctionBar* bar) {
@@ -202,10 +202,11 @@ const char* IncSet_getListItemValue(Panel* panel, int i) {
return "";
}
-void IncSet_activate(IncSet* this, IncType type) {
+void IncSet_activate(IncSet* this, IncType type, FunctionBar** setBar) {
this->active = &(this->modes[type]);
this->bar = this->active->bar;
FunctionBar_draw(this->active->bar, this->active->buffer);
+ setBar =
}
void IncSet_drawBar(IncSet* this) {
diff --git a/MainPanel.c b/MainPanel.c
index 2b70bab2..7d7e72db 100644
--- a/MainPanel.c
+++ b/MainPanel.c
@@ -30,13 +30,15 @@ typedef bool(*MainPanel_ForeachProcessFn)(Process*, size_t);
}*/
-void MainPanel_updateTreeFunctions(FunctionBar* fuBar, bool mode) {
+static const char* MainFunctions[] = {"Help ", "Setup ", "Search", "Filter", "Tree ", "SortBy", "Nice -", "Nice +", "Kill ", "Quit ", NULL};
+
+void MainPanel_updateTreeFunctions(MainPanel* this, bool mode) {
if (mode) {
- FunctionBar_setLabel(fuBar, KEY_F(5), "Sorted");
- FunctionBar_setLabel(fuBar, KEY_F(6), "Collap");
+ FunctionBar_setLabel(this->fuBar, KEY_F(5), "Sorted");
+ FunctionBar_setLabel(this->fuBar, KEY_F(6), "Collap");
} else {
- FunctionBar_setLabel(fuBar, KEY_F(5), "Tree ");
- FunctionBar_setLabel(fuBar, KEY_F(6), "SortBy");
+ FunctionBar_setLabel(this->fuBar, KEY_F(5), "Tree ");
+ FunctionBar_setLabel(this->fuBar, KEY_F(6), "SortBy");
}
}
@@ -98,7 +100,7 @@ static HandlerResult MainPanel_eventHandler(Panel* super, int ch) {
}
if (reaction & HTOP_REDRAW_BAR) {
- MainPanel_updateTreeFunctions(this->fuBar, this->state->settings->treeView);
+ MainPanel_updateTreeFunctions(this, this->state->settings->treeView);
IncSet_drawBar(this->inc);
}
if (reaction & HTOP_UPDATE_PANELHDR) {
@@ -165,12 +167,12 @@ PanelClass MainPanel_class = {
.eventHandler = MainPanel_eventHandler
};
-MainPanel* MainPanel_new(FunctionBar* fuBar) {
+MainPanel* MainPanel_new() {
MainPanel* this = AllocThis(MainPanel);
- Panel_init((Panel*) this, 1, 1, 1, 1, Class(Process), false);
+ this->fuBar = FunctionBar_new(MainFunctions, NULL, NULL);
+ Panel_init((Panel*) this, 1, 1, 1, 1, Class(Process), false, this->fuBar);
this->keys = calloc(KEY_MAX, sizeof(Htop_Action));
- this->fuBar = fuBar;
- this->inc = IncSet_new(fuBar);
+ this->inc = IncSet_new(this->fuBar);
Action_setBindings(this->keys);
Platform_setBindings(this->keys);
diff --git a/MainPanel.h b/MainPanel.h
index 3ff41097..5e2ca989 100644
--- a/MainPanel.h
+++ b/MainPanel.h
@@ -25,7 +25,7 @@ typedef struct MainPanel_ {
typedef bool(*MainPanel_ForeachProcessFn)(Process*, size_t);
-void MainPanel_updateTreeFunctions(FunctionBar* fuBar, bool mode);
+void MainPanel_updateTreeFunctions(MainPanel* this, bool mode);
void MainPanel_pidSearch(MainPanel* this, int ch);
@@ -37,7 +37,7 @@ bool MainPanel_foreachProcess(MainPanel* this, MainPanel_ForeachProcessFn fn, in
extern PanelClass MainPanel_class;
-MainPanel* MainPanel_new(FunctionBar* fuBar);
+MainPanel* MainPanel_new();
void MainPanel_setState(MainPanel* this, State* state);
diff --git a/MetersPanel.c b/MetersPanel.c
index a4fe7c44..4050dc9e 100644
--- a/MetersPanel.c
+++ b/MetersPanel.c
@@ -30,6 +30,10 @@ struct MetersPanel_ {
}*/
+static const char* MetersFunctions[] = {"Type ", "Move ", "Delete", "Done ", NULL};
+static const char* MetersKeys[] = {"Space", "Enter", "Del", "Esc"};
+static int MetersEvents[] = {' ', 13, 27, KEY_DC};
+
static void MetersPanel_delete(Object* object) {
Panel* super = (Panel*) object;
MetersPanel* this = (MetersPanel*) object;
@@ -172,7 +176,8 @@ PanelClass MetersPanel_class = {
MetersPanel* MetersPanel_new(Settings* settings, const char* header, Vector* meters, ScreenManager* scr) {
MetersPanel* this = AllocThis(MetersPanel);
Panel* super = (Panel*) this;
- Panel_init(super, 1, 1, 1, 1, Class(ListItem), true);
+ FunctionBar* fuBar = FunctionBar_new(MetersFunctions, MetersKeys, MetersEvents);
+ Panel_init(super, 1, 1, 1, 1, Class(ListItem), true, fuBar);
this->settings = settings;
this->meters = meters;
diff --git a/OpenFilesScreen.c b/OpenFilesScreen.c
index 7dfc32a9..168c6c14 100644
--- a/OpenFilesScreen.c
+++ b/OpenFilesScreen.c
@@ -12,6 +12,7 @@ in the source distribution for its full text.
#include "ListItem.h"
#include "IncSet.h"
#include "String.h"
+#include "FunctionBar.h"
#include <string.h>
#include <stdio.h>
@@ -26,7 +27,6 @@ in the source distribution for its full text.
/*{
#include "Process.h"
#include "Panel.h"
-#include "FunctionBar.h"
typedef struct OpenFiles_Data_ {
char* data[256];
@@ -47,21 +47,21 @@ typedef struct OpenFilesScreen_ {
Process* process;
pid_t pid;
Panel* display;
- FunctionBar* bar;
} OpenFilesScreen;
}*/
-static const char* ofsFunctions[] = {"Search ", "Filter ", "Refresh", "Done ", NULL};
+static const char* OpenFilesScreenFunctions[] = {"Search ", "Filter ", "Refresh", "Done ", NULL};
-static const char* ofsKeys[] = {"F3", "F4", "F5", "Esc"};
+static const char* OpenFilesScreenKeys[] = {"F3", "F4", "F5", "Esc"};
-static int ofsEvents[] = {KEY_F(3), KEY_F(4), KEY_F(5), 27};
+static int OpenFilesScreenEvents[] = {KEY_F(3), KEY_F(4), KEY_F(5), 27};
OpenFilesScreen* OpenFilesScreen_new(Process* process) {
OpenFilesScreen* this = (OpenFilesScreen*) malloc(sizeof(OpenFilesScreen));
this->process = process;
- this->display = Panel_new(0, 1, COLS, LINES-3, false, Class(ListItem));
+ FunctionBar* bar = FunctionBar_new(OpenFilesScreenFunctions, OpenFilesScreenKeys, OpenFilesScreenEvents);
+ this->display = Panel_new(0, 1, COLS, LINES-3, false, Class(ListItem), bar);
if (Process_isThread(process))
this->pid = process->tgid;
else
@@ -173,7 +173,7 @@ void OpenFilesScreen_run(OpenFilesScreen* this) {
Panel* panel = this->display;
Panel_setHeader(panel, " FD TYPE DEVICE SIZE NODE NAME");
- FunctionBar* bar = FunctionBar_new(ofsFunctions, ofsKeys, ofsEvents);
+ FunctionBar* bar = panel->defaultBar;
IncSet* inc = IncSet_new(bar);
Vector* lines = Vector_new(panel->items->type, true, DEFAULT_SIZE);
@@ -241,6 +241,5 @@ void OpenFilesScreen_run(OpenFilesScreen* this) {
}
Vector_delete(lines);
- FunctionBar_delete((Object*)bar);
IncSet_delete(inc);
}
diff --git a/OpenFilesScreen.h b/OpenFilesScreen.h
index b3cdd975..68e33363 100644
--- a/OpenFilesScreen.h
+++ b/OpenFilesScreen.h
@@ -11,7 +11,6 @@ in the source distribution for its full text.
#include "Process.h"
#include "Panel.h"
-#include "FunctionBar.h"
typedef struct OpenFiles_Data_ {
char* data[256];
@@ -32,7 +31,6 @@ typedef struct OpenFilesScreen_ {
Process* process;
pid_t pid;
Panel* display;
- FunctionBar* bar;
} OpenFilesScreen;
diff --git a/Panel.c b/Panel.c
index 1772057c..3c24b61d 100644
--- a/Panel.c
+++ b/Panel.c
@@ -24,6 +24,7 @@ in the source distribution for its full text.
/*{
#include "Object.h"
#include "Vector.h"
+#include "FunctionBar.h"
typedef struct Panel_ Panel;
@@ -61,6 +62,8 @@ struct Panel_ {
int scrollV;
short scrollH;
bool needsRedraw;
+ FunctionBar* currentBar;
+ FunctionBar* defaultBar;
RichString header;
};
@@ -86,11 +89,11 @@ PanelClass Panel_class = {
.eventHandler = Panel_selectByTyping
};
-Panel* Panel_new(int x, int y, int w, int h, bool owner, ObjectClass* type) {
+Panel* Panel_new(int x, int y, int w, int h, bool owner, ObjectClass* type, FunctionBar* fuBar) {
Panel* this;
this = malloc(sizeof(Panel));
Object_setClass(this, Class(Panel));
- Panel_init(this, x, y, w, h, type, owner);
+ Panel_init(this, x, y, w, h, type, owner, fuBar);
return this;
}
@@ -100,7 +103,7 @@ void Panel_delete(Object* cast) {
free(this);
}
-void Panel_init(Panel* this, int x, int y, int w, int h, ObjectClass* type, bool owner) {
+void Panel_init(Panel* this, int x, int y, int w, int h, ObjectClass* type, bool owner, FunctionBar* fuBar) {
this->x = x;
this->y = y;
this->w = w;
@@ -113,12 +116,15 @@ void Panel_init(Panel* this, int x, int y, int w, int h, ObjectClass* type, bool
this->oldSelected = 0;
this->needsRedraw = true;
RichString_beginAllocated(this->header);
+ this->defaultBar = fuBar;
+ this->currentBar = fuBar;
}
void Panel_done(Panel* this) {
assert (this != NULL);
free(this->eventHandlerState);
Vector_delete(this->items);
+ FunctionBar_delete(this->defaultBar);
RichString_end(this->header);
}
diff --git a/Panel.h b/Panel.h
index e1793190..ac3065d9 100644
--- a/Panel.h
+++ b/Panel.h
@@ -13,6 +13,7 @@ in the source distribution for its full text.
#include "Object.h"
#include "Vector.h"
+#include "FunctionBar.h"
typedef struct Panel_ Panel;
@@ -50,6 +51,8 @@ struct Panel_ {
int scrollV;
short scrollH;
bool needsRedraw;
+ FunctionBar* currentBar;
+ FunctionBar* defaultBar;
RichString header;
};
@@ -68,11 +71,11 @@ struct Panel_ {
extern PanelClass Panel_class;
-Panel* Panel_new(int x, int y, int w, int h, bool owner, ObjectClass* type);
+Panel* Panel_new(int x, int y, int w, int h, bool owner, ObjectClass* type, FunctionBar* fuBar);
void Panel_delete(Object* cast);
-void Panel_init(Panel* this, int x, int y, int w, int h, ObjectClass* type, bool owner);
+void Panel_init(Panel* this, int x, int y, int w, int h, ObjectClass* type, bool owner, FunctionBar* fuBar);
void Panel_done(Panel* this);
diff --git a/ScreenManager.c b/ScreenManager.c
index 2d55af07..de462ac0 100644
--- a/ScreenManager.c
+++ b/ScreenManager.c
@@ -34,9 +34,7 @@ typedef struct ScreenManager_ {
int y2;
Orientation orientation;
Vector* panels;
- Vector* fuBars;
int panelCount;
- const FunctionBar* fuBar;
const Header* header;
const Settings* settings;
bool owner;
@@ -52,10 +50,8 @@ ScreenManager* ScreenManager_new(int x1, int y1, int x2, int y2, Orientation ori
this->y1 = y1;
this->x2 = x2;
this->y2 = y2;
- this->fuBar = NULL;
this->orientation = orientation;
this->panels = Vector_new(Class(Panel), owner, DEFAULT_SIZE);
- this->fuBars = Vector_new(Class(FunctionBar), true, DEFAULT_SIZE);
this->panelCount = 0;
this->header = header;
this->settings = settings;
@@ -66,7 +62,6 @@ ScreenManager* ScreenManager_new(int x1, int y1, int x2, int y2, Orientation ori
void ScreenManager_delete(ScreenManager* this) {
Vector_delete(this->panels);
- Vector_delete(this->fuBars);
free(this);
}
@@ -74,7 +69,7 @@ inline int ScreenManager_size(ScreenManager* this) {
return this->panelCount;
}
-void ScreenManager_add(ScreenManager* this, Panel* item, FunctionBar* fuBar, int size) {
+void ScreenManager_add(ScreenManager* this, Panel* item, int size) {
if (this->orientation == HORIZONTAL) {
int lastX = 0;
if (this->panelCount > 0) {
@@ -91,11 +86,6 @@ void ScreenManager_add(ScreenManager* this, Panel* item, FunctionBar* fuBar, int
}
// TODO: VERTICAL
Vector_add(this->panels, item);
- if (fuBar)
- Vector_add(this->fuBars, fuBar);
- else
- Vector_add(this->fuBars, FunctionBar_new(NULL, NULL, NULL));
- if (!this->fuBar && fuBar) this->fuBar = fuBar;
item->needsRedraw = true;
this->panelCount++;
}
@@ -103,8 +93,6 @@ void ScreenManager_add(ScreenManager* this, Panel* item, FunctionBar* fuBar, int
Panel* ScreenManager_remove(ScreenManager* this, int idx) {
assert(this->panelCount > idx);
Panel* panel = (Panel*) Vector_remove(this->panels, idx);
- Vector_remove(this->fuBars, idx);
- this->fuBar = NULL;
this->panelCount--;
return panel;
}
@@ -173,8 +161,6 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
int focus = 0;
Panel* panelFocus = (Panel*) Vector_get(this->panels, focus);
- if (this->fuBar)
- FunctionBar_draw(this->fuBar, NULL);
double oldTime = 0.0;
@@ -194,11 +180,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
if (redraw) {
ScreenManager_drawPanels(this, focus);
- FunctionBar* bar = (FunctionBar*) Vector_get(this->fuBars, focus);
- if (bar)
- this->fuBar = bar;
- if (this->fuBar)
- FunctionBar_draw(this->fuBar, NULL);
+ FunctionBar_draw(panelFocus->currentBar, NULL);
}
int prevCh = ch;
@@ -209,7 +191,7 @@ void ScreenManager_run(ScreenManager* this, Panel** lastFocus, int* lastKey) {
int ok = getmouse(&mevent);
if (ok == OK) {
if (mevent.y == LINES - 1) {
- ch = FunctionBar_synthesizeEvent(this->fuBar, mevent.x);
+ ch = FunctionBar_synthesizeEvent(panelFocus->currentBar, mevent.x);
} else {
for (int i = 0; i < this->panelCount; i++) {
Panel* panel = (Panel*) Vector_get(this->panels, i);
diff --git a/ScreenManager.h b/ScreenManager.h
index 8d364ab5..3d02a883 100644
--- a/ScreenManager.h
+++ b/ScreenManager.h
@@ -27,9 +27,7 @@ typedef struct ScreenManager_ {
int y2;
Orientation orientation;
Vector* panels;
- Vector* fuBars;
int panelCount;
- const FunctionBar* fuBar;
const Header* header;
const Settings* settings;
bool owner;
@@ -43,7 +41,7 @@ void ScreenManager_delete(ScreenManager* this);
extern int ScreenManager_size(ScreenManager* this);
-void ScreenManager_add(ScreenManager* this, Panel* item, FunctionBar* fuBar, int size);
+void ScreenManager_add(ScreenManager* this, Panel* item, int size);
Panel* ScreenManager_remove(ScreenManager* this, int idx);
diff --git a/SignalsPanel.c b/SignalsPanel.c
index a52e5289..9e37252e 100644
--- a/SignalsPanel.c
+++ b/SignalsPanel.c
@@ -62,8 +62,12 @@ static SignalItem signals[] = {
{ .name = "31 SIGSYS", .number = 31 },
};
+static const char* SignalsFunctions[] = {"Send ", "Cancel ", NULL};
+static const char* SignalsKeys[] = {"Enter", "Esc", NULL};
+static int SignalsEvents[] = {13, 27};
+
Panel* SignalsPanel_new() {
- Panel* this = Panel_new(1, 1, 1, 1, true, Class(ListItem));
+ Panel* this = Panel_new(1, 1, 1, 1, true, Class(ListItem), FunctionBar_new(SignalsFunctions, SignalsKeys, SignalsEvents));
for(unsigned int i = 0; i < sizeof(signals)/sizeof(SignalItem); i++)
Panel_set(this, i, (Object*) ListItem_new(signals[i].name, signals[i].number));
Panel_setHeader(this, "Send signal:");
diff --git a/TraceScreen.c b/TraceScreen.c
index 5823022f..48274bda 100644
--- a/TraceScreen.c
+++ b/TraceScreen.c
@@ -12,6 +12,7 @@ in the source distribution for its full text.
#include "ListItem.h"
#include "IncSet.h"
#include "String.h"
+#include "FunctionBar.h"
#include <stdio.h>
#include <unistd.h>
@@ -27,7 +28,6 @@ in the source distribution for its full text.
/*{
#include "Process.h"
#include "Panel.h"
-#include "FunctionBar.h"
typedef struct TraceScreen_ {
Process* process;
@@ -37,16 +37,17 @@ typedef struct TraceScreen_ {
}*/
-static const char* tsFunctions[] = {"Search ", "Filter ", "AutoScroll ", "Stop Tracing ", "Done ", NULL};
+static const char* TraceScreenFunctions[] = {"Search ", "Filter ", "AutoScroll ", "Stop Tracing ", "Done ", NULL};
-static const char* tsKeys[] = {"F3", "F4", "F8", "F9", "Esc"};
+static const char* TraceScreenKeys[] = {"F3", "F4", "F8", "F9", "Esc"};
-static int tsEvents[] = {KEY_F(3), KEY_F(4), KEY_F(8), KEY_F(9), 27};
+static int TraceScreenEvents[] = {KEY_F(3), KEY_F(4), KEY_F(8), KEY_F(9), 27};
TraceScreen* TraceScreen_new(Process* process) {
TraceScreen* this = (TraceScreen*) malloc(sizeof(TraceScreen));
this->process = process;
- this->display = Panel_new(0, 1, COLS, LINES-2, false, Class(ListItem));
+ FunctionBar* fuBar = FunctionBar_new(TraceScreenFunctions, TraceScreenKeys, TraceScreenEvents);
+ this->display = Panel_new(0, 1, COLS, LINES-2, false, Class(ListItem), fuBar);
this->tracing = true;
return this;
}
@@ -105,7 +106,7 @@ void TraceScreen_run(TraceScreen* this) {
bool follow = false;
bool looping = true;
- FunctionBar* bar = FunctionBar_new(tsFunctions, tsKeys, tsEvents);
+ FunctionBar* bar = panel->defaultBar;
IncSet* inc = IncSet_new(bar);
Vector* lines = Vector_new(panel->items->type, true, DEFAULT_SIZE);
@@ -219,7 +220,6 @@ void TraceScreen_run(TraceScreen* this) {
}
IncSet_delete(inc);
- FunctionBar_delete((Object*)bar);
Vector_delete(lines);
kill(child, SIGTERM);
diff --git a/TraceScreen.h b/TraceScreen.h
index 03d18567..bb5ad4cf 100644
--- a/TraceScreen.h
+++ b/TraceScreen.h
@@ -11,7 +11,6 @@ in the source distribution for its full text.
#include "Process.h"
#include "Panel.h"
-#include "FunctionBar.h"
typedef struct TraceScreen_ {
Process* process;
diff --git a/htop.c b/htop.c
index 026e04b6..6b1584e2 100644
--- a/htop.c
+++ b/htop.c
@@ -34,8 +34,6 @@ static void printVersionFlag() {
stdout);
exit(0);
}
-
-static const char* defaultFunctions[] = {"Help ", "Setup ", "Search", "Filter", "Tree ", "SortBy", "Nice -", "Nice +", "Kill ", "Quit ", NULL};
static void printHelpFlag() {
fputs("htop " VERSION " - " COPYRIGHT "\n"
@@ -218,13 +216,11 @@ int main(int argc, char** argv) {
settings->colorScheme = COLORSCHEME_MONOCHROME;
CRT_init(settings->delay, settings->colorScheme);
-
- FunctionBar* defaultBar = FunctionBar_new(defaultFunctions, NULL, NULL);
- MainPanel* panel = MainPanel_new(defaultBar);
+ MainPanel* panel = MainPanel_new();
ProcessList_setPanel(pl, (Panel*) panel);
- MainPanel_updateTreeFunctions(defaultBar, settings->treeView);
+ MainPanel_updateTreeFunctions(panel, settings->treeView);
if (flags.sortKey > 0) {
settings->sortKey = flags.sortKey;
@@ -243,7 +239,7 @@ int main(int argc, char** argv) {
MainPanel_setState(panel, &state);
ScreenManager* scr = ScreenManager_new(0, header->height, 0, -1, HORIZONTAL, header, settings, true);
- ScreenManager_add(scr, (Panel*) panel, defaultBar, -1);
+ ScreenManager_add(scr, (Panel*) panel, -1);
ProcessList_scan(pl);
millisleep(75);
diff --git a/linux/IOPriorityPanel.c b/linux/IOPriorityPanel.c
index e42259fb..c9391893 100644
--- a/linux/IOPriorityPanel.c
+++ b/linux/IOPriorityPanel.c
@@ -13,8 +13,13 @@ in the source distribution for its full text.
#include "ListItem.h"
}*/
+static const char* IOPriorityFunctions[] = {"Set ", "Cancel ", NULL};
+static const char* IOPriorityKeys[] = {"Enter", "Esc", NULL};
+static int IOPriorityEvents[] = {13, 27};
+
Panel* IOPriorityPanel_new(IOPriority currPrio) {
- Panel* this = Panel_new(1, 1, 1, 1, true, Class(ListItem));
+ FunctionBar* fuBar = FunctionBar_new(IOPriorityFunctions, IOPriorityKeys, IOPriorityEvents);
+ Panel* this = Panel_new(1, 1, 1, 1, true, Class(ListItem), fuBar);
Panel_setHeader(this, "IO Priority:");
Panel_add(this, (Object*) ListItem_new("None (based on nice)", IOPriority_None));
diff --git a/linux/Platform.c b/linux/Platform.c
index 14eb11ff..f14c38c7 100644
--- a/linux/Platform.c
+++ b/linux/Platform.c
@@ -46,8 +46,7 @@ static Htop_Reaction Platform_actionSetIOPriority(State* st) {
if (!p) return HTOP_OK;
IOPriority ioprio = p->ioPriority;
Panel* ioprioPanel = IOPriorityPanel_new(ioprio);
- const char* fuFunctions[] = {"Set ", "Cancel ", NULL};
- void* set = Action_pickFromVector(st, ioprioPanel, 21, fuFunctions);
+ void* set = Action_pickFromVector(st, ioprioPanel, 21);
if (set) {
IOPriority ioprio = IOPriorityPanel_getIOPriority(ioprioPanel);
bool ok = MainPanel_foreachProcess((MainPanel*)panel, (MainPanel_ForeachProcessFn) LinuxProcess_setIOPriority, (size_t) ioprio, NULL);

© 2014-2024 Faster IT GmbH | imprint | privacy policy