TTW_Bot/fcolorsetting.cpp

256 lines
8.1 KiB
C++

#include "fcolorsetting.h"
#include "ui_fcolorsetting.h"
FColorSetting::FColorSetting(QWidget *parent)
: QWidget(parent)
, cbBlockColor(nullptr)
, cbBorderColor(nullptr)
, cbBackgroundColor(nullptr)
, sbBorderSize(nullptr)
, sbPadding(nullptr)
, hsBlockTransparant(nullptr)
, ui(new Ui::FColorSetting)
{
ui->setupUi(this);
setupColorComboBox(ui->cbBackgroundColor);
setupColorComboBox(ui->cbBlockColor);
setupColorComboBox(ui->cbBorderColor);
cbBlockColor = ui->cbBlockColor;
cbBorderColor = ui->cbBorderColor;
cbBackgroundColor = ui->cbBackgroundColor;
sbBorderSize = ui->sbBorderSize;
sbPadding = ui->sbPadding;
hsBlockTransparant = ui->hsBlockTransparant;
setDefaultColor(ui->cbBackgroundColor, "lime");
}
FColorSetting::~FColorSetting()
{
delete ui;
}
void FColorSetting::setupColorComboBox(QComboBox* comboBox)
{
comboBox->clear();
// Добавляем цвета
QStringList colorNames = QColor::colorNames();
foreach (const QString &name, colorNames) {
QColor color(name);
QPixmap pixmap(20, 20);
pixmap.fill(color);
comboBox->addItem(QIcon(pixmap), name, color);
}
}
QString FColorSetting::hexToColorName(const QString &hexColor)
{
// Создаем QColor из HEX
QColor color(hexColor);
if (!color.isValid()) {
return hexColor; // Возвращаем HEX, если цвет невалиден
}
// Получаем все названия цветов из Qt
QStringList colorNames = QColor::colorNames();
// Ищем ближайшее название по RGB
QString closestName;
int minDistance = INT_MAX;
for (const QString &name : colorNames) {
QColor namedColor(name);
if (!namedColor.isValid()) continue;
// Вычисляем евклидово расстояние в RGB пространстве
int distance =
qAbs(color.red() - namedColor.red()) +
qAbs(color.green() - namedColor.green()) +
qAbs(color.blue() - namedColor.blue());
if (distance < minDistance) {
minDistance = distance;
closestName = name;
}
}
// Если нашли достаточно близкий цвет (разница небольшая)
if (minDistance < 50 && !closestName.isEmpty()) {
return closestName;
}
// Если точного соответствия нет, пытаемся найти по HEX в таблице соответствий
static QMap<QString, QString> hexToName = {
{"#f0f8ff", "aliceblue"},
{"#faebd7", "antiquewhite"},
{"#00ffff", "aqua"},
{"#7fffd4", "aquamarine"},
{"#f0ffff", "azure"},
{"#f5f5dc", "beige"},
{"#ffe4c4", "bisque"},
{"#000000", "black"},
{"#ffebcd", "blanchedalmond"},
{"#0000ff", "blue"},
{"#8a2be2", "blueviolet"},
{"#a52a2a", "brown"},
{"#deb887", "burlywood"},
{"#5f9ea0", "cadetblue"},
{"#7fff00", "chartreuse"},
{"#d2691e", "chocolate"},
{"#ff7f50", "coral"},
{"#6495ed", "cornflowerblue"},
{"#fff8dc", "cornsilk"},
{"#dc143c", "crimson"},
{"#00ffff", "cyan"},
{"#00008b", "darkblue"},
{"#008b8b", "darkcyan"},
{"#b8860b", "darkgoldenrod"},
{"#a9a9a9", "darkgray"},
{"#006400", "darkgreen"},
{"#a9a9a9", "darkgrey"},
{"#bdb76b", "darkkhaki"},
{"#8b008b", "darkmagenta"},
{"#556b2f", "darkolivegreen"},
{"#ff8c00", "darkorange"},
{"#9932cc", "darkorchid"},
{"#8b0000", "darkred"},
{"#e9967a", "darksalmon"},
{"#8fbc8f", "darkseagreen"},
{"#483d8b", "darkslateblue"},
{"#2f4f4f", "darkslategray"},
{"#2f4f4f", "darkslategrey"},
{"#00ced1", "darkturquoise"},
{"#9400d3", "darkviolet"},
{"#ff1493", "deeppink"},
{"#00bfff", "deepskyblue"},
{"#696969", "dimgray"},
{"#696969", "dimgrey"},
{"#1e90ff", "dodgerblue"},
{"#b22222", "firebrick"},
{"#fffaf0", "floralwhite"},
{"#228b22", "forestgreen"},
{"#dcdcdc", "gainsboro"},
{"#f8f8ff", "ghostwhite"},
{"#ffd700", "gold"},
{"#daa520", "goldenrod"},
{"#808080", "gray"},
{"#008000", "green"},
{"#adff2f", "greenyellow"},
{"#808080", "grey"},
{"#f0fff0", "honeydew"},
{"#ff69b4", "hotpink"},
{"#cd5c5c", "indianred"},
{"#4b0082", "indigo"},
{"#fffff0", "ivory"},
{"#f0e68c", "khaki"},
{"#e6e6fa", "lavender"},
{"#fff0f5", "lavenderblush"},
{"#7cfc00", "lawngreen"},
{"#fffacd", "lemonchiffon"},
{"#add8e6", "lightblue"},
{"#f08080", "lightcoral"},
{"#e0ffff", "lightcyan"},
{"#fafad2", "lightgoldenrodyellow"},
{"#d3d3d3", "lightgray"},
{"#90ee90", "lightgreen"},
{"#d3d3d3", "lightgrey"},
{"#ffb6c1", "lightpink"},
{"#ffa07a", "lightsalmon"},
{"#20b2aa", "lightseagreen"},
{"#87cefa", "lightskyblue"},
{"#778899", "lightslategray"},
{"#778899", "lightslategrey"},
{"#b0c4de", "lightsteelblue"},
{"#ffffe0", "lightyellow"},
{"#00ff00", "lime"},
{"#32cd32", "limegreen"},
{"#faf0e6", "linen"},
{"#800000", "maroon"},
{"#66cdaa", "mediumaquamarine"},
{"#0000cd", "mediumblue"},
{"#ba55d3", "mediumorchid"},
{"#9370db", "mediumpurple"},
{"#3cb371", "mediumseagreen"},
{"#7b68ee", "mediumslateblue"},
{"#00fa9a", "mediumspringgreen"},
{"#48d1cc", "mediumturquoise"},
{"#c71585", "mediumvioletred"},
{"#191970", "midnightblue"},
{"#f5fffa", "mintcream"},
{"#ffe4e1", "mistyrose"},
{"#ffe4b5", "moccasin"},
{"#ffdead", "navajowhite"},
{"#000080", "navy"},
{"#fdf5e6", "oldlace"},
{"#808000", "olive"},
{"#6b8e23", "olivedrab"},
{"#ffa500", "orange"},
{"#ff4500", "orangered"},
{"#da70d6", "orchid"},
{"#eee8aa", "palegoldenrod"},
{"#98fb98", "palegreen"},
{"#afeeee", "paleturquoise"},
{"#db7093", "palevioletred"},
{"#ffefd5", "papayawhip"},
{"#ffdab9", "peachpuff"},
{"#cd853f", "peru"},
{"#ffc0cb", "pink"},
{"#dda0dd", "plum"},
{"#b0e0e6", "powderblue"},
{"#800080", "purple"},
{"#663399", "rebeccapurple"},
{"#ff0000", "red"},
{"#bc8f8f", "rosybrown"},
{"#4169e1", "royalblue"},
{"#8b4513", "saddlebrown"},
{"#fa8072", "salmon"},
{"#f4a460", "sandybrown"},
{"#2e8b57", "seagreen"},
{"#fff5ee", "seashell"},
{"#a0522d", "sienna"},
{"#c0c0c0", "silver"},
{"#87ceeb", "skyblue"},
{"#6a5acd", "slateblue"},
{"#708090", "slategray"},
{"#708090", "slategrey"},
{"#fffafa", "snow"},
{"#00ff7f", "springgreen"},
{"#4682b4", "steelblue"},
{"#d2b48c", "tan"},
{"#008080", "teal"},
{"#d8bfd8", "thistle"},
{"#ff6347", "tomato"},
{"#40e0d0", "turquoise"},
{"#ee82ee", "violet"},
{"#f5deb3", "wheat"},
{"#ffffff", "white"},
{"#f5f5f5", "whitesmoke"},
{"#ffff00", "yellow"},
{"#9acd32", "yellowgreen"}
};
QString lowerHex = hexColor.toLower();
if (hexToName.contains(lowerHex)) {
return hexToName[lowerHex];
}
// Если ничего не нашли, возвращаем HEX
return hexColor;
}
void FColorSetting::setDefaultColor(QComboBox* comboBox, const QString& colorName)
{
// Ищем индекс цвета в комбобоксе
int index = comboBox->findText(colorName, Qt::MatchFixedString);
if (index != -1) {
comboBox->setCurrentIndex(index);
} else {
comboBox->setCurrentIndex(0); // Устанавливаем первый цвет как запасной вариант
}
}