Skip to content

Commit 586ced4

Browse files
committed
adjust AvailableColumns per screen
Signed-off-by: Sohaib Mohamed <sohaib.amhmd@gmail.com>
1 parent 98f2ad4 commit 586ced4

17 files changed

Lines changed: 85 additions & 3 deletions

AvailableColumnsPanel.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@ in the source distribution for its full text.
2323
#include "XUtils.h"
2424

2525

26+
Panel* activeAvailableColumns;
27+
2628
static const char* const AvailableColumnsFunctions[] = {" ", " ", " ", " ", "Add ", " ", " ", " ", " ", "Done ", NULL};
2729

2830
static void AvailableColumnsPanel_delete(Object* object) {
2931
Panel* super = (Panel*) object;
3032
AvailableColumnsPanel* this = (AvailableColumnsPanel*) object;
33+
if (activeAvailableColumns == super)
34+
activeAvailableColumns = NULL;
3135
Panel_done(super);
3236
free(this);
3337
}
@@ -94,13 +98,13 @@ static void AvailableColumnsPanel_addDynamicColumn(ht_key_t key, void* value, vo
9498
}
9599

96100
// Handle DynamicColumns entries in the AvailableColumnsPanel
97-
static void AvailableColumnsPanel_addDynamicColumns(Panel* super, Hashtable* dynamicColumns) {
101+
void AvailableColumnsPanel_addDynamicColumns(Panel* super, Hashtable* dynamicColumns) {
98102
assert(dynamicColumns);
99103
Hashtable_foreach(dynamicColumns, AvailableColumnsPanel_addDynamicColumn, super);
100104
}
101105

102106
// Handle remaining Platform Meter entries in the AvailableColumnsPanel
103-
static void AvailableColumnsPanel_addPlatformColumn(Panel* super) {
107+
void AvailableColumnsPanel_addPlatformColumn(Panel* super) {
104108
for (int i = 1; i < LAST_PROCESSFIELD; i++) {
105109
if (i != COMM && Process_fields[i].description) {
106110
char description[256];
@@ -120,6 +124,11 @@ AvailableColumnsPanel* AvailableColumnsPanel_new(Panel* columns, Hashtable* dyna
120124
AvailableColumnsPanel_addPlatformColumn(super);
121125
AvailableColumnsPanel_addDynamicColumns(super, dynamicColumns);
122126

127+
activeAvailableColumns = super;
123128
this->columns = columns;
124129
return this;
125130
}
131+
132+
Panel* AvailableColumnsPanel_get(void) {
133+
return activeAvailableColumns;
134+
}

AvailableColumnsPanel.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,10 @@ extern const PanelClass AvailableColumnsPanel_class;
2020

2121
AvailableColumnsPanel* AvailableColumnsPanel_new(Panel* columns, Hashtable* dynamicColumns);
2222

23+
void AvailableColumnsPanel_addPlatformColumn(Panel* super);
24+
25+
void AvailableColumnsPanel_addDynamicColumns(Panel* super, Hashtable* dynamicColumns);
26+
27+
Panel* AvailableColumnsPanel_get(void);
28+
2329
#endif

DynamicScreen.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,7 @@ const char* DynamicScreen_lookup(Hashtable* dynamics, ht_key_t key) {
5656
const DynamicScreen* screen = Hashtable_get(dynamics, key);
5757
return screen ? screen->name : NULL;
5858
}
59+
60+
void DynamicScreen_availableColumns(char* currentScreen) {
61+
Platform_dynamicScreenAvailableColumns(currentScreen);
62+
}

DynamicScreen.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,6 @@ const char* DynamicScreen_lookup(Hashtable* dynamics, unsigned int key);
2323

2424
bool DynamicScreen_search(Hashtable* dynamics, const char* name, unsigned int* key);
2525

26+
void DynamicScreen_availableColumns(char* currentScreen);
27+
2628
#endif

ScreensPanel.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ in the source distribution for its full text.
1212
#include <ctype.h>
1313
#include <string.h>
1414

15+
#include "AvailableColumnsPanel.h"
1516
#include "CRT.h"
17+
#include "DynamicScreen.h"
1618
#include "FunctionBar.h"
1719
#include "Hashtable.h"
1820
#include "ProvideCurses.h"
@@ -267,6 +269,14 @@ static HandlerResult ScreensPanel_eventHandlerNormal(Panel* super, int ch) {
267269
ScreenListItem* newFocus = (ScreenListItem*) Panel_getSelected(super);
268270
if (newFocus && oldFocus != newFocus) {
269271
ColumnsPanel_fill(this->columns, newFocus->ss, this->settings->dynamicColumns);
272+
if (newFocus->ss->generic) {
273+
char* currentScreen = newFocus->ss->name;
274+
DynamicScreen_availableColumns(currentScreen);
275+
} else {
276+
Panel* availableColumns = AvailableColumnsPanel_get();
277+
AvailableColumnsPanel_addPlatformColumn(availableColumns);
278+
AvailableColumnsPanel_addDynamicColumns(availableColumns, this->settings->dynamicColumns);
279+
}
270280
result = HANDLED;
271281
}
272282
if (shouldRebuildArray)

darwin/Platform.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,6 @@ static inline Hashtable* Platform_getDynamicScreens(void) { return NULL; }
132132

133133
static inline void Platform_dynamicScreensDone(ATTR_UNUSED Hashtable* screens) { return; }
134134

135+
static inline void Platform_dynamicScreenAvailableColumns(ATTR_UNUSED char* currentScreen) { }
136+
135137
#endif

dragonflybsd/Platform.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,6 @@ static inline Hashtable* Platform_getDynamicScreens(void) { return NULL; }
125125

126126
static inline void Platform_dynamicScreensDone(ATTR_UNUSED Hashtable* screens) { return; }
127127

128+
static inline void Platform_dynamicScreenAvailableColumns(ATTR_UNUSED char* currentScreen) { }
129+
128130
#endif

freebsd/Platform.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,6 @@ static inline Hashtable* Platform_getDynamicScreens(void) { return NULL; }
125125

126126
static inline void Platform_dynamicScreensDone(ATTR_UNUSED Hashtable* screens) { return; }
127127

128+
static inline void Platform_dynamicScreenAvailableColumns(ATTR_UNUSED char* currentScreen) { }
129+
128130
#endif

linux/Platform.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,6 @@ static inline Hashtable* Platform_getDynamicScreens(void) { return NULL; }
146146

147147
static inline void Platform_dynamicScreensDone(ATTR_UNUSED Hashtable* screens) { return; }
148148

149+
static inline void Platform_dynamicScreenAvailableColumns(ATTR_UNUSED char* currentScreen) { }
150+
149151
#endif

netbsd/Platform.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,6 @@ static inline Hashtable* Platform_getDynamicScreens(void) { return NULL; }
129129

130130
static inline void Platform_dynamicScreensDone(ATTR_UNUSED Hashtable* screens) { return; }
131131

132+
static inline void Platform_dynamicScreenAvailableColumns(ATTR_UNUSED char* currentScreen) { }
133+
132134
#endif

0 commit comments

Comments
 (0)