diff --git a/include/ui/dialogs/optionsdialog.h b/include/ui/dialogs/optionsdialog.h index 0cc163ac..5e722407 100644 --- a/include/ui/dialogs/optionsdialog.h +++ b/include/ui/dialogs/optionsdialog.h @@ -16,6 +16,7 @@ */ #pragma once +#include #include #include @@ -37,6 +38,7 @@ class OptionsDialog : public QDialog { Ui::OptionsDialog* ui; void show(); void applyChanges(); + void updateColorButton(); public slots: void accept() override; @@ -44,6 +46,8 @@ class OptionsDialog : public QDialog { private: ColorPickerButton* color_3d_begin_button_; ColorPickerButton* color_3d_end_button_; + QColorDialog* color_dialog; + QColorDialog* color_dialog_; }; } // namespace ui diff --git a/include/util/settings/hexedit.h b/include/util/settings/hexedit.h index 54f48c81..3b451644 100644 --- a/include/util/settings/hexedit.h +++ b/include/util/settings/hexedit.h @@ -16,6 +16,8 @@ */ #pragma once +#include + namespace veles { namespace util { namespace settings { @@ -25,6 +27,8 @@ int columnsNumber(); void setColumnsNumber(int number); bool resizeColumnsToWindowWidth(); void setResizeColumnsToWindowWidth(bool on); +QColor colorOfBytes(); +void setColorOfBytes(const QColor& color); } // namespace hexedit } // namespace settings diff --git a/src/ui/dialogs/optionsdialog.cc b/src/ui/dialogs/optionsdialog.cc index 28a915ef..458bc162 100644 --- a/src/ui/dialogs/optionsdialog.cc +++ b/src/ui/dialogs/optionsdialog.cc @@ -16,11 +16,17 @@ */ #include "ui/dialogs/optionsdialog.h" +#include "include/ui/optionsdialog.h" + +#include +#include #include #include #include "ui/veles_mainwindow.h" #include "ui/velesapplication.h" +#include "ui/hexedit.h" +#include "ui/veles_mainwindow.h" #include "ui_optionsdialog.h" #include "util/settings/hexedit.h" #include "util/settings/theme.h" @@ -35,6 +41,15 @@ OptionsDialog::OptionsDialog(QWidget* parent) ui->setupUi(this); ui->colorsBox->addItems(util::settings::theme::availableThemes()); + color_dialog_ = new QColorDialog(this); + color_dialog_->setCurrentColor(util::settings::hexedit::colorOfBytes()); + ui->byteColorHexEdit->setAutoFillBackground(true); + ui->byteColorHexEdit->setFlat(true); + + connect(ui->byteColorHexEdit, &QPushButton::clicked, color_dialog_, + &QColorDialog::show); + connect(color_dialog_, &QColorDialog::colorSelected, this, + &OptionsDialog::updateColorButton); connect(ui->hexColumnsAutoCheckBox, &QCheckBox::stateChanged, [this](int state) { ui->hexColumnsSpinBox->setEnabled(state != Qt::Checked); @@ -53,6 +68,13 @@ OptionsDialog::OptionsDialog(QWidget* parent) OptionsDialog::~OptionsDialog() { delete ui; } +void OptionsDialog::updateColorButton() { + QPalette pal = ui->byteColorHexEdit->palette(); + pal.setColor(QPalette::Button, color_dialog_->currentColor()); + ui->byteColorHexEdit->setPalette(pal); + ui->byteColorHexEdit->update(); +} + void OptionsDialog::show() { ui->colorsBox->setCurrentText(util::settings::theme::currentTheme()); Qt::CheckState checkState = Qt::Unchecked; @@ -62,6 +84,7 @@ void OptionsDialog::show() { ui->hexColumnsAutoCheckBox->setCheckState(checkState); ui->hexColumnsSpinBox->setValue(util::settings::hexedit::columnsNumber()); ui->hexColumnsSpinBox->setEnabled(checkState != Qt::Checked); + updateColorButton(); QWidget::show(); } @@ -77,12 +100,20 @@ void OptionsDialog::applyChanges() { util::settings::hexedit::setResizeColumnsToWindowWidth( ui->hexColumnsAutoCheckBox->checkState() == Qt::Checked); util::settings::hexedit::setColumnsNumber(ui->hexColumnsSpinBox->value()); + util::settings::hexedit::setColorOfBytes(color_dialog_->currentColor()); util::settings::visualization::setColorBegin( color_3d_begin_button_->getColor()); util::settings::visualization::setColorEnd(color_3d_end_button_->getColor()); emit VelesApplication::instance()->settingsChanged(); + for (auto main_window : + MainWindowWithDetachableDockWidgets::getMainWindows()) { + QList widgets = main_window->findChildren(); + for (auto widget : widgets) { + widget->viewport()->update(); + } + } if (restart_needed) { QMessageBox::about( diff --git a/src/ui/dialogs/optionsdialog.ui b/src/ui/dialogs/optionsdialog.ui index 77b4e62e..4f476d13 100644 --- a/src/ui/dialogs/optionsdialog.ui +++ b/src/ui/dialogs/optionsdialog.ui @@ -25,7 +25,7 @@ - Colors + Theme @@ -47,15 +47,30 @@ - HexEdit defaults + HexEdit + + + + + + Byte color + + + + + + + + + - Columns + Default Columns diff --git a/src/util/settings/hexedit.cc b/src/util/settings/hexedit.cc index 2d7a95fc..7af3a11a 100644 --- a/src/util/settings/hexedit.cc +++ b/src/util/settings/hexedit.cc @@ -16,6 +16,7 @@ */ #include "util/settings/hexedit.h" +#include #include namespace veles { @@ -43,6 +44,17 @@ void setResizeColumnsToWindowWidth(bool on) { settings.setValue("hexedit.resizeColumnsToWindowWidth", on); } +QColor colorOfBytes() { + QSettings settings; + auto v = settings.value("hexedit.colorOfBytes", QColor(10, 255, 10)); + return v.value(); +} + +void setColorOfBytes(const QColor& color) { + QSettings settings; + settings.setValue("hexedit.colorOfBytes", color); +} + } // namespace hexedit } // namespace settings } // namespace util diff --git a/src/util/settings/theme.cc b/src/util/settings/theme.cc index 9b55adff..8e2fd697 100644 --- a/src/util/settings/theme.cc +++ b/src/util/settings/theme.cc @@ -20,6 +20,9 @@ #include #include +#include "util/settings/hexedit.h" +#include "util/settings/theme.h" + namespace veles { namespace util { namespace settings { @@ -88,28 +91,13 @@ QColor chunkBackground(int color_index) { } QColor ret = chunkBackgroundColors_[color_index % chunkBackgroundColors_.size()]; - if (isDark()) { - ret = QColor(ret.red() ^ 0xff, ret.green() ^ 0xff, ret.blue() ^ 0xff); - } - return ret; + return colorInvertedIfDark(ret); } QColor byteColor(uint8_t byte) { - if (isDark()) { - byte ^= 0xFF; - } - - int red, blue, green = 0; - if (byte <= 0x80) { - blue = 0xff; - red = qMin(0xff, byte * 2); - } else { - blue = qMin(0xff, (0xff - byte) * 2); - red = 0xff; - } - - return colorInvertedIfDark(QColor(red, green, blue)); + QColor color = util::settings::hexedit::colorOfBytes(); + return QColor::fromHsv(color.hue(), color.saturation(), 50 + byte * (220 - 50) / 256); } QFont font() {