ColorsPanel.c 3.01 KB
Newer Older
Hisham Muhammad's avatar
Hisham Muhammad committed
1
2
3
4
5
6
/*
htop - ColorsPanel.c
(C) 2004-2011 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
Hisham Muhammad's avatar
Hisham Muhammad committed
7

8
#include "ColorsPanel.h"
Hisham Muhammad's avatar
Hisham Muhammad committed
9

Hisham Muhammad's avatar
Hisham Muhammad committed
10
#include "CRT.h"
Hisham Muhammad's avatar
Hisham Muhammad committed
11
#include "CheckItem.h"
Hisham Muhammad's avatar
Hisham Muhammad committed
12

Hisham Muhammad's avatar
Hisham Muhammad committed
13
#include <assert.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
14
15
#include <stdlib.h>
#include <string.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
16
17

// TO ADD A NEW SCHEME:
18
// * Increment the size of bool check in ColorsPanel.h
19
// * Add the entry in the ColorSchemeNames array below in the file
Hisham Muhammad's avatar
Hisham Muhammad committed
20
21
22
23
// * Add a define in CRT.h that matches the order of the array
// * Add the colors in CRT_setColors

/*{
Hisham Muhammad's avatar
Hisham Muhammad committed
24
25
26
#include "Panel.h"
#include "Settings.h"
#include "ScreenManager.h"
Hisham Muhammad's avatar
Hisham Muhammad committed
27

28
29
typedef struct ColorsPanel_ {
   Panel super;
Hisham Muhammad's avatar
Hisham Muhammad committed
30
31
32

   Settings* settings;
   ScreenManager* scr;
33
} ColorsPanel;
Hisham Muhammad's avatar
Hisham Muhammad committed
34
35
36

}*/

37
38
static const char* ColorsFunctions[] = {"      ", "      ", "      ", "      ", "      ", "      ", "      ", "      ", "      ", "Done  ", NULL};

39
static const char* ColorSchemeNames[] = {
Hisham Muhammad's avatar
Hisham Muhammad committed
40
41
42
43
44
45
   "Default",
   "Monochromatic",
   "Black on White",
   "Light Terminal",
   "MC",
   "Black Night",
46
   "Broken Gray",
Hisham Muhammad's avatar
Hisham Muhammad committed
47
48
49
   NULL
};

50
static void ColorsPanel_delete(Object* object) {
51
52
53
   Panel* super = (Panel*) object;
   ColorsPanel* this = (ColorsPanel*) object;
   Panel_done(super);
Hisham Muhammad's avatar
Hisham Muhammad committed
54
55
56
   free(this);
}

57
static HandlerResult ColorsPanel_eventHandler(Panel* super, int ch) {
58
   ColorsPanel* this = (ColorsPanel*) super;
Hisham Muhammad's avatar
Hisham Muhammad committed
59
60
   
   HandlerResult result = IGNORED;
61
   int mark = Panel_getSelectedIndex(super);
Hisham Muhammad's avatar
Hisham Muhammad committed
62
63
64
65
66

   switch(ch) {
   case 0x0a:
   case 0x0d:
   case KEY_ENTER:
67
   case KEY_MOUSE:
68
   case KEY_RECLICK:
Hisham Muhammad's avatar
Hisham Muhammad committed
69
   case ' ':
70
      for (int i = 0; ColorSchemeNames[i] != NULL; i++)
71
72
         CheckItem_set((CheckItem*)Panel_get(super, i), false);
      CheckItem_set((CheckItem*)Panel_get(super, mark), true);
Hisham Muhammad's avatar
Hisham Muhammad committed
73
74
75
76
77
      this->settings->colorScheme = mark;
      result = HANDLED;
   }

   if (result == HANDLED) {
78
      this->settings->changed = true;
Hisham Muhammad's avatar
Hisham Muhammad committed
79
      const Header* header = this->scr->header;
Hisham Muhammad's avatar
Hisham Muhammad committed
80
      CRT_setColors(mark);
81
      Panel* menu = (Panel*) Vector_get(this->scr->panels, 0);
Hisham Muhammad's avatar
Hisham Muhammad committed
82
83
      Header_draw(header);
      RichString_setAttr(&(super->header), CRT_colors[PANEL_HEADER_FOCUS]);
Hisham Muhammad's avatar
Hisham Muhammad committed
84
      RichString_setAttr(&(menu->header), CRT_colors[PANEL_HEADER_UNFOCUS]);
Hisham Muhammad's avatar
Hisham Muhammad committed
85
86
87
88
89
      ScreenManager_resize(this->scr, this->scr->x1, header->height, this->scr->x2, this->scr->y2);
   }
   return result;
}

90
91
92
93
94
95
96
97
PanelClass ColorsPanel_class = {
   .super = {
      .extends = Class(Panel),
      .delete = ColorsPanel_delete
   },
   .eventHandler = ColorsPanel_eventHandler
};

98
ColorsPanel* ColorsPanel_new(Settings* settings, ScreenManager* scr) {
99
   ColorsPanel* this = AllocThis(ColorsPanel);
100
   Panel* super = (Panel*) this;
101
102
   FunctionBar* fuBar = FunctionBar_new(ColorsFunctions, NULL, NULL);
   Panel_init(super, 1, 1, 1, 1, Class(CheckItem), true, fuBar);
103
104
105
106
107

   this->settings = settings;
   this->scr = scr;

   Panel_setHeader(super, "Colors");
108
   for (int i = 0; ColorSchemeNames[i] != NULL; i++) {
Hisham's avatar
Hisham committed
109
      Panel_add(super, (Object*) CheckItem_newByVal(xStrdup(ColorSchemeNames[i]), false));
110
111
112
113
   }
   CheckItem_set((CheckItem*)Panel_get(super, settings->colorScheme), true);
   return this;
}