mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-06 05:40:54 -06:00
ccmake: Use type-based colors to display cache values
The colors are based on the entry type (or value for booleans), paths and filepaths sharing the same color.
This commit is contained in:
@@ -5,6 +5,7 @@ add_executable(ccmake
|
||||
ccmake.cxx
|
||||
cmCursesBoolWidget.cxx
|
||||
cmCursesCacheEntryComposite.cxx
|
||||
cmCursesColor.cxx
|
||||
cmCursesDummyWidget.cxx
|
||||
cmCursesFilePathWidget.cxx
|
||||
cmCursesForm.cxx
|
||||
@@ -17,21 +18,41 @@ add_executable(ccmake
|
||||
cmCursesWidget.cxx
|
||||
)
|
||||
target_include_directories(ccmake PRIVATE ${CURSES_INCLUDE_PATH})
|
||||
set(CMAKE_REQUIRED_INCLUDES ${CURSES_INCLUDE_PATH})
|
||||
target_link_libraries(ccmake CMakeLib)
|
||||
if(CMAKE_USE_SYSTEM_FORM)
|
||||
find_path(CURSES_FORM_INCLUDE_DIR NAMES form.h HINTS ${CURSES_INCLUDE_PATH} ${CURSES_INCLUDE_PATH}/ncurses)
|
||||
if(CURSES_FORM_INCLUDE_DIR)
|
||||
target_include_directories(ccmake PRIVATE ${CURSES_FORM_INCLUDE_DIR})
|
||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${CURSES_FORM_INCLUDE_DIR})
|
||||
endif()
|
||||
target_link_libraries(ccmake
|
||||
${CURSES_FORM_LIBRARY}
|
||||
${CURSES_LIBRARY}
|
||||
)
|
||||
set(CMAKE_REQUIRED_LIBRARIES
|
||||
${CURSES_FORM_LIBRARY}
|
||||
${CURSES_LIBRARY}
|
||||
)
|
||||
if(CURSES_EXTRA_LIBRARY)
|
||||
target_link_libraries(ccmake ${CURSES_EXTRA_LIBRARY})
|
||||
list(APPEND CMAKE_REQUIRED_LIBRARIES ${CURSES_EXTRA_LIBRARY})
|
||||
endif()
|
||||
else()
|
||||
target_link_libraries(ccmake cmForm)
|
||||
get_target_property(cmFormIncludeDirs cmForm INTERFACE_INCLUDE_DIRECTORIES)
|
||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${cmFormIncludeDirs})
|
||||
get_target_property(cmFormLibraries cmForm INTERFACE_LINK_LIBRARIES)
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${cmFormLibraries})
|
||||
endif()
|
||||
|
||||
include(CheckSymbolExists)
|
||||
check_symbol_exists(use_default_colors
|
||||
"form.h"
|
||||
HAVE_CURSES_USE_DEFAULT_COLORS)
|
||||
if(HAVE_CURSES_USE_DEFAULT_COLORS)
|
||||
set_source_files_properties(cmCursesColor.cxx
|
||||
PROPERTIES COMPILE_DEFINITIONS HAVE_CURSES_USE_DEFAULT_COLORS)
|
||||
endif()
|
||||
|
||||
if(CMake_JOB_POOL_LINK_BIN)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "cmsys/Encoding.hxx"
|
||||
|
||||
#include "cmCursesColor.h"
|
||||
#include "cmCursesForm.h"
|
||||
#include "cmCursesMainForm.h"
|
||||
#include "cmCursesStandardIncludes.h"
|
||||
@@ -126,6 +127,7 @@ int main(int argc, char const* const* argv)
|
||||
noecho(); /* Echo off */
|
||||
cbreak(); /* nl- or cr not needed */
|
||||
keypad(stdscr, true); /* Use key symbols as KEY_DOWN */
|
||||
cmCursesColor::InitColors();
|
||||
|
||||
signal(SIGWINCH, onsig);
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "cmCursesColor.h"
|
||||
#include "cmCursesWidget.h"
|
||||
#include "cmStateTypes.h"
|
||||
|
||||
@@ -12,8 +13,10 @@ cmCursesBoolWidget::cmCursesBoolWidget(int width, int height, int left,
|
||||
: cmCursesWidget(width, height, left, top)
|
||||
{
|
||||
this->Type = cmStateEnums::BOOL;
|
||||
set_field_fore(this->Field, A_NORMAL);
|
||||
set_field_back(this->Field, A_STANDOUT);
|
||||
if (!cmCursesColor::HasColors()) {
|
||||
set_field_fore(this->Field, A_NORMAL);
|
||||
set_field_back(this->Field, A_STANDOUT);
|
||||
}
|
||||
field_opts_off(this->Field, O_STATIC);
|
||||
this->SetValueAsBool(false);
|
||||
}
|
||||
@@ -42,8 +45,16 @@ void cmCursesBoolWidget::SetValueAsBool(bool value)
|
||||
{
|
||||
if (value) {
|
||||
this->SetValue("ON");
|
||||
if (cmCursesColor::HasColors()) {
|
||||
set_field_fore(this->Field, COLOR_PAIR(cmCursesColor::BoolOn));
|
||||
set_field_back(this->Field, COLOR_PAIR(cmCursesColor::BoolOn));
|
||||
}
|
||||
} else {
|
||||
this->SetValue("OFF");
|
||||
if (cmCursesColor::HasColors()) {
|
||||
set_field_fore(this->Field, COLOR_PAIR(cmCursesColor::BoolOff));
|
||||
set_field_back(this->Field, COLOR_PAIR(cmCursesColor::BoolOff));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
29
Source/CursesDialog/cmCursesColor.cxx
Normal file
29
Source/CursesDialog/cmCursesColor.cxx
Normal file
@@ -0,0 +1,29 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#include "cmCursesColor.h"
|
||||
|
||||
#include "cmCursesStandardIncludes.h"
|
||||
|
||||
bool cmCursesColor::HasColors()
|
||||
{
|
||||
#ifdef HAVE_CURSES_USE_DEFAULT_COLORS
|
||||
return has_colors();
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void cmCursesColor::InitColors()
|
||||
{
|
||||
#ifdef HAVE_CURSES_USE_DEFAULT_COLORS
|
||||
if (HasColors()) {
|
||||
start_color();
|
||||
use_default_colors();
|
||||
init_pair(cmCursesColor::BoolOff, COLOR_RED, -1);
|
||||
init_pair(cmCursesColor::BoolOn, COLOR_GREEN, -1);
|
||||
init_pair(cmCursesColor::String, COLOR_BLUE, -1);
|
||||
init_pair(cmCursesColor::Path, COLOR_YELLOW, -1);
|
||||
init_pair(cmCursesColor::Options, COLOR_MAGENTA, -1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
24
Source/CursesDialog/cmCursesColor.h
Normal file
24
Source/CursesDialog/cmCursesColor.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#ifndef cmCursesColor_h
|
||||
#define cmCursesColor_h
|
||||
|
||||
class cmCursesColor
|
||||
{
|
||||
public:
|
||||
enum Color
|
||||
{
|
||||
// Default color is pair 0
|
||||
BoolOff = 1,
|
||||
BoolOn,
|
||||
String,
|
||||
Path,
|
||||
Options
|
||||
};
|
||||
|
||||
static bool HasColors();
|
||||
|
||||
static void InitColors();
|
||||
};
|
||||
|
||||
#endif // cmCursesColor_h
|
||||
@@ -2,6 +2,7 @@
|
||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
||||
#include "cmCursesOptionsWidget.h"
|
||||
|
||||
#include "cmCursesColor.h"
|
||||
#include "cmCursesWidget.h"
|
||||
#include "cmStateTypes.h"
|
||||
|
||||
@@ -15,8 +16,13 @@ cmCursesOptionsWidget::cmCursesOptionsWidget(int width, int height, int left,
|
||||
// there is no option type, and string type causes ccmake to cast
|
||||
// the widget into a string widget at some point. BOOL is safe for
|
||||
// now.
|
||||
set_field_fore(this->Field, A_NORMAL);
|
||||
set_field_back(this->Field, A_STANDOUT);
|
||||
if (cmCursesColor::HasColors()) {
|
||||
set_field_fore(this->Field, COLOR_PAIR(cmCursesColor::Options));
|
||||
set_field_back(this->Field, COLOR_PAIR(cmCursesColor::Options));
|
||||
} else {
|
||||
set_field_fore(this->Field, A_NORMAL);
|
||||
set_field_back(this->Field, A_STANDOUT);
|
||||
}
|
||||
field_opts_off(this->Field, O_STATIC);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "cmCursesColor.h"
|
||||
#include "cmCursesMainForm.h"
|
||||
#include "cmCursesStringWidget.h"
|
||||
#include "cmStateTypes.h"
|
||||
@@ -16,6 +17,13 @@ cmCursesPathWidget::cmCursesPathWidget(int width, int height, int left,
|
||||
this->Type = cmStateEnums::PATH;
|
||||
this->Cycle = false;
|
||||
this->CurrentIndex = 0;
|
||||
if (cmCursesColor::HasColors()) {
|
||||
set_field_fore(this->Field, COLOR_PAIR(cmCursesColor::Path));
|
||||
set_field_back(this->Field, COLOR_PAIR(cmCursesColor::Path));
|
||||
} else {
|
||||
set_field_fore(this->Field, A_NORMAL);
|
||||
set_field_back(this->Field, A_STANDOUT);
|
||||
}
|
||||
}
|
||||
|
||||
void cmCursesPathWidget::OnType(int& key, cmCursesMainForm* fm, WINDOW* w)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
#include "cmCursesColor.h"
|
||||
#include "cmCursesForm.h"
|
||||
#include "cmCursesMainForm.h"
|
||||
#include "cmCursesStandardIncludes.h"
|
||||
@@ -21,8 +22,13 @@ cmCursesStringWidget::cmCursesStringWidget(int width, int height, int left,
|
||||
{
|
||||
this->InEdit = false;
|
||||
this->Type = cmStateEnums::STRING;
|
||||
set_field_fore(this->Field, A_NORMAL);
|
||||
set_field_back(this->Field, A_STANDOUT);
|
||||
if (cmCursesColor::HasColors()) {
|
||||
set_field_fore(this->Field, COLOR_PAIR(cmCursesColor::String));
|
||||
set_field_back(this->Field, COLOR_PAIR(cmCursesColor::String));
|
||||
} else {
|
||||
set_field_fore(this->Field, A_NORMAL);
|
||||
set_field_back(this->Field, A_STANDOUT);
|
||||
}
|
||||
field_opts_off(this->Field, O_STATIC);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user