
/** \file color.h
 *  \brief Header: color setup
 */

#ifndef MC_COLOR_H
#define MC_COLOR_H

extern int use_colors;
extern int disable_colors;

extern int attr_pairs [];
#ifdef HAVE_SLANG
#   define MY_COLOR_PAIR(x) COLOR_PAIR(x)
#else
#   define MY_COLOR_PAIR(x) (COLOR_PAIR(x) | attr_pairs [x])
#endif

#define IF_COLOR(co,bw) (use_colors ? MY_COLOR_PAIR(co) : bw)

/* Beware! When using Slang with color, not all the indexes are free.
   See myslang.h (A_*) */
#define NORMAL_COLOR          IF_COLOR (1, 0)
#define SELECTED_COLOR        IF_COLOR (2, A_REVERSE)
#define MARKED_COLOR          IF_COLOR (3, A_BOLD)

#ifdef HAVE_SLANG
#define MARKED_SELECTED_COLOR IF_COLOR (4, (SLtt_Use_Ansi_Colors ? A_BOLD_REVERSE : A_REVERSE | A_BOLD))
#else
#define MARKED_SELECTED_COLOR IF_COLOR (4, A_REVERSE | A_BOLD)
#endif

#define ERROR_COLOR           IF_COLOR (5, A_BOLD)
#define MENU_ENTRY_COLOR      IF_COLOR (6, A_REVERSE)
#define REVERSE_COLOR         IF_COLOR (7, A_REVERSE)

extern int dialog_colors[4];
extern int alarm_colors[4];

/* Dialog colors */
#define COLOR_NORMAL       IF_COLOR (8, A_REVERSE)
#define COLOR_FOCUS        IF_COLOR (9, A_BOLD)
#define COLOR_HOT_NORMAL   IF_COLOR (10, 0)
#define COLOR_HOT_FOCUS    IF_COLOR (11, 0)

#define VIEW_UNDERLINED_COLOR IF_COLOR (12, A_UNDERLINE)
#define MENU_SELECTED_COLOR   IF_COLOR (13, A_BOLD)
#define MENU_HOT_COLOR        IF_COLOR (14, 0)
#define MENU_HOTSEL_COLOR     IF_COLOR (15, 0)

#define HELP_NORMAL_COLOR  IF_COLOR (16, A_REVERSE)
#define HELP_ITALIC_COLOR  IF_COLOR (17, A_REVERSE)
#define HELP_BOLD_COLOR    IF_COLOR (18, A_REVERSE)
#define HELP_LINK_COLOR    IF_COLOR (19, 0)
#define HELP_SLINK_COLOR   IF_COLOR (20, A_BOLD)

/*
 * This should be selectable independently. Default has to be black background
 * foreground does not matter at all.
 */
#define GAUGE_COLOR        IF_COLOR (21, 0)
#define INPUT_COLOR        IF_COLOR (22, 0)

/* Add this to color panel, on BW all pairs are normal */
#define DIRECTORY_COLOR    IF_COLOR (23, 0)
#define EXECUTABLE_COLOR   IF_COLOR (24, 0)
#define LINK_COLOR         IF_COLOR (25, 0)
#define STALE_LINK_COLOR   IF_COLOR (26, 0)
#define DEVICE_COLOR       IF_COLOR (27, 0)
#define SPECIAL_COLOR      IF_COLOR (28, 0)
#define CORE_COLOR         IF_COLOR (29, 0)


/* For the default color any unused index may be chosen. */
#define DEFAULT_COLOR_INDEX   30
#define DEFAULT_COLOR      IF_COLOR (DEFAULT_COLOR_INDEX, 0)

/*
 * editor colors - only 4 for normal, search->found, select, and whitespace
 * respectively
 * Last is defined to view color.
 */
#define EDITOR_NORMAL_COLOR_INDEX    34
#define EDITOR_NORMAL_COLOR          IF_COLOR (EDITOR_NORMAL_COLOR_INDEX, 0)
#define EDITOR_BOLD_COLOR            IF_COLOR (35, A_BOLD)
#define EDITOR_MARKED_COLOR          IF_COLOR (36, A_REVERSE)
#define EDITOR_WHITESPACE_COLOR      IF_COLOR (37, 0 /* irrelevant */)

/* color of left 8 char status per line */
#define LINE_STATE_COLOR  IF_COLOR (38, 0)

/* Error dialog colors */
#define ERROR_HOT_NORMAL   IF_COLOR (39, 0)
#define ERROR_HOT_FOCUS    IF_COLOR (40, 0)

#ifdef HAVE_SLANG
#   define CTYPE const char *
#else
#   define CTYPE int
#endif

void init_colors (void);
void done_colors (void);
void mc_init_pair (int index, CTYPE foreground, CTYPE background);
int try_alloc_color_pair (const char *fg, const char *bg);

#endif
