summaryrefslogtreecommitdiffstats
path: root/htop.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2008-03-14 18:50:49 +0000
committerHisham Muhammad <hisham@gobolinux.org>2008-03-14 18:50:49 +0000
commit2338ad5820c6d265db61794f005875f9845b3e40 (patch)
tree0c5cfdb03943d73c598bb77bce1129c4d0c5c1f9 /htop.c
parentfa6f9190598d246d0f19bb9ab9505b86722fa312 (diff)
Ability to change sort column with the mouse by
clicking column titles (click again to invert order). Also, add a consolidated IO kbyte/s column.
Diffstat (limited to 'htop.c')
-rw-r--r--htop.c53
1 files changed, 32 insertions, 21 deletions
diff --git a/htop.c b/htop.c
index b0cb7151..4a226b42 100644
--- a/htop.c
+++ b/htop.c
@@ -215,6 +215,14 @@ static void setUserOnly(const char* userName, bool* userOnly, uid_t* userId) {
}
}
+static inline void setSortKey(ProcessList* pl, ProcessField sortKey, Panel* panel, Settings* settings) {
+ pl->sortKey = sortKey;
+ pl->direction = 1;
+ pl->treeView = false;
+ settings->changed = true;
+ Panel_setRichHeader(panel, ProcessList_printHeader(pl));
+}
+
int main(int argc, char** argv) {
int delay = -1;
@@ -288,10 +296,6 @@ int main(int argc, char** argv) {
Header* header = Header_new(pl);
settings = Settings_new(pl, header);
- if (sortKey > 0) {
- pl->sortKey = sortKey;
- pl->treeView = false;
- }
int headerHeight = Header_calculateHeight(header);
// FIXME: move delay code to settings
@@ -301,6 +305,11 @@ int main(int argc, char** argv) {
CRT_init(settings->delay, settings->colorScheme);
panel = Panel_new(0, headerHeight, COLS, LINES - headerHeight - 2, PROCESS_CLASS, false, NULL);
+ if (sortKey > 0) {
+ pl->sortKey = sortKey;
+ pl->treeView = false;
+ pl->direction = 1;
+ }
Panel_setRichHeader(panel, ProcessList_printHeader(pl));
char* searchFunctions[3] = {"Next ", "Exit ", " Search: "};
@@ -447,7 +456,18 @@ int main(int argc, char** argv) {
MEVENT mevent;
int ok = getmouse(&mevent);
if (ok == OK) {
- if (mevent.y >= panel->y + 1 && mevent.y < LINES - 1) {
+ if (mevent.y == panel->y) {
+ int x = panel->scrollH + mevent.x;
+ ProcessField field = ProcessList_keyAt(pl, x);
+ if (field == pl->sortKey) {
+ ProcessList_invertSortOrder(pl);
+ pl->treeView = false;
+ } else {
+ setSortKey(pl, field, panel, settings);
+ }
+ refreshTimeout = 0;
+ continue;
+ } else if (mevent.y >= panel->y + 1 && mevent.y < LINES - 1) {
Panel_setSelected(panel, mevent.y - panel->y + panel->scrollV - 1);
doRefresh = false;
refreshTimeout = resetRefreshTimeout;
@@ -474,19 +494,13 @@ int main(int argc, char** argv) {
case 'M':
{
refreshTimeout = 0;
- pl->sortKey = PERCENT_MEM;
- pl->treeView = false;
- settings->changed = true;
- Panel_setRichHeader(panel, ProcessList_printHeader(pl));
+ setSortKey(pl, PERCENT_MEM, panel, settings);
break;
}
case 'T':
{
refreshTimeout = 0;
- pl->sortKey = TIME;
- pl->treeView = false;
- settings->changed = true;
- Panel_setRichHeader(panel, ProcessList_printHeader(pl));
+ setSortKey(pl, TIME, panel, settings);
break;
}
case 'U':
@@ -501,10 +515,7 @@ int main(int argc, char** argv) {
case 'P':
{
refreshTimeout = 0;
- pl->sortKey = PERCENT_CPU;
- pl->treeView = false;
- settings->changed = true;
- Panel_setRichHeader(panel, ProcessList_printHeader(pl));
+ setSortKey(pl, PERCENT_CPU, panel, settings);
break;
}
case KEY_F(1):
@@ -663,7 +674,7 @@ int main(int argc, char** argv) {
char* fuFunctions[2] = {"Sort ", "Cancel "};
ProcessField* fields = pl->fields;
for (int i = 0; fields[i]; i++) {
- char* name = String_trim(Process_printField(fields[i]));
+ char* name = String_trim(Process_fieldTitles[fields[i]]);
Panel_add(sortPanel, (Object*) ListItem_new(name, fields[i]));
if (fields[i] == pl->sortKey)
Panel_setSelected(sortPanel, i);
@@ -671,12 +682,12 @@ int main(int argc, char** argv) {
}
ListItem* field = (ListItem*) pickFromList(panel, sortPanel, 15, headerHeight, fuFunctions, defaultBar);
if (field) {
- pl->treeView = false;
settings->changed = true;
- pl->sortKey = field->key;
+ setSortKey(pl, field->key, panel, settings);
+ } else {
+ Panel_setRichHeader(panel, ProcessList_printHeader(pl));
}
((Object*)sortPanel)->delete((Object*)sortPanel);
- Panel_setRichHeader(panel, ProcessList_printHeader(pl));
refreshTimeout = 0;
break;
}

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