summaryrefslogtreecommitdiffstats
path: root/include/bmon/layout.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/bmon/layout.h')
-rw-r--r--include/bmon/layout.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/include/bmon/layout.h b/include/bmon/layout.h
new file mode 100644
index 0000000..cca2a4c
--- /dev/null
+++ b/include/bmon/layout.h
@@ -0,0 +1,128 @@
+
+#ifndef __BMON_LAYOUT_H_
+#define __BMON_LAYOUT_H_
+
+#include <bmon/bmon.h>
+#include <bmon/conf.h>
+#include <bmon/unit.h>
+#include <bmon/utils.h>
+
+
+static int parse_color(const char* color)
+{
+ int color_code = -1;
+
+ if ((strcasestr(color, "red") != NULL))
+ color_code = COLOR_RED;
+ else if ((strcasestr(color, "green") != NULL))
+ color_code = COLOR_GREEN;
+ else if ((strcasestr(color, "white") != NULL))
+ color_code = COLOR_WHITE;
+ else if ((strcasestr(color, "black") != NULL))
+ color_code = COLOR_BLACK;
+ else if ((strcasestr(color, "blue") != NULL))
+ color_code = COLOR_BLUE;
+ else if ((strcasestr(color, "yellow") != NULL))
+ color_code = COLOR_YELLOW;
+ else if ((strcasestr(color, "magenta") != NULL))
+ color_code = COLOR_MAGENTA;
+ else if ((strcasestr(color, "cyan") != NULL))
+ color_code = COLOR_CYAN;
+
+ return color_code;
+}
+
+/*
+ A_NORMAL Normal display (no highlight)
+ A_STANDOUT Best highlighting mode of the terminal.
+ A_UNDERLINE Underlining
+ A_REVERSE Reverse video
+ A_BLINK Blinking
+ A_DIM Half bright
+ A_BOLD Extra bright or bold
+ A_PROTECT Protected mode
+ A_INVIS Invisible or blank mode
+ A_ALTCHARSET Alternate character set
+ A_CHARTEXT Bit-mask to extract a character
+*/
+
+static int parse_attribute(const char* attr)
+{
+ /* no attribute is valid, so we have nothing to do */
+ if (attr == NULL)
+ return 0;
+
+ if ((strcasestr(attr, "normal") != NULL))
+ return A_NORMAL;
+ else if ((strcasestr(attr, "standout") != NULL))
+ return A_STANDOUT;
+ else if ((strcasestr(attr, "underline") != NULL))
+ return A_UNDERLINE;
+ else if ((strcasestr(attr, "reverse") != NULL))
+ return A_REVERSE;
+ else if ((strcasestr(attr, "blink") != NULL))
+ return A_BLINK;
+ else if ((strcasestr(attr, "dim") != NULL))
+ return A_DIM;
+ else if ((strcasestr(attr, "bold") != NULL))
+ return A_BOLD;
+ else if ((strcasestr(attr, "protect") != NULL))
+ return A_PROTECT;
+ else if ((strcasestr(attr, "invis") != NULL))
+ return A_INVIS;
+ else if ((strcasestr(attr, "altcharset") != NULL))
+ return A_ALTCHARSET;
+ else if ((strcasestr(attr, "chartext") != NULL))
+ return A_CHARTEXT;
+
+ return -1;
+}
+
+
+static void add_layout(const char *layout_name, cfg_t *color_cfg)
+{
+ const char *fg, *bg, *attr_str = NULL;
+ int size = -1, fg_code, bg_code, attr_mask, layout_idx = 0;
+
+ size = cfg_size(color_cfg, "color_pair");
+ fg = cfg_getnstr(color_cfg, "color_pair", 0);
+ bg = cfg_getnstr(color_cfg, "color_pair", 1);
+ if (size > 2)
+ attr_str = cfg_getnstr(color_cfg, "color_pair", 2);
+
+ fg_code = parse_color(fg);
+ bg_code = parse_color(bg);
+ if (fg_code == -1 || bg_code == -1) {
+ quit("Unknown color [%s]: %s\n", (fg_code == -1) ? "fg" : "bg",
+ (fg_code == -1) ? fg : bg);
+ }
+ attr_mask = parse_attribute(attr_str);
+ if (attr_mask == -1) {
+ quit("Unknown attribute: '%s'\n", attr_str);
+ }
+
+ DBG("%s:\tfg: %s bg: %s attr: %s\n", layout_name, fg, bg, attr_str);
+
+ if ((strcasecmp(layout_name, "default") == 0))
+ layout_idx = LAYOUT_DEFAULT;
+ else if ((strcasecmp(layout_name, "statusbar") == 0))
+ layout_idx = LAYOUT_STATUSBAR;
+ else if ((strcasecmp(layout_name, "header") == 0))
+ layout_idx = LAYOUT_HEADER;
+ else if ((strcasecmp(layout_name, "list") == 0))
+ layout_idx = LAYOUT_LIST;
+ else if ((strcasecmp(layout_name, "selected") == 0))
+ layout_idx = LAYOUT_SELECTED;
+ else if ((strcasecmp(layout_name, "rx_graph") == 0))
+ layout_idx = LAYOUT_RX_GRAPH;
+ else if ((strcasecmp(layout_name, "tx_graph") == 0))
+ layout_idx = LAYOUT_TX_GRAPH;
+ else {
+ quit("Unknown layout name: '%s'\n", layout_name);
+ }
+
+ struct layout l = { fg_code, bg_code, attr_mask};
+ cfg_layout[layout_idx] = l;
+}
+
+#endif /* __BMON_LAYOUT_H_ */