From 8fca85d87728e91c3b3a1ed060da3372a9198a86 Mon Sep 17 00:00:00 2001 From: janczer Date: Thu, 14 Sep 2017 20:25:32 +0200 Subject: [PATCH 1/6] Add color picker to option, color intensity depends on byte value --- include/ui/dialogs/optionsdialog.h | 3 +++ include/util/settings/hexedit.h | 4 ++++ src/ui/dialogs/optionsdialog.cc | 28 +++++++++++++++++++++++++++- src/ui/dialogs/optionsdialog.ui | 17 ++++++++++++++++- src/util/settings/hexedit.cc | 12 ++++++++++++ src/util/settings/theme.cc | 25 +++++++------------------ 6 files changed, 69 insertions(+), 20 deletions(-) diff --git a/include/ui/dialogs/optionsdialog.h b/include/ui/dialogs/optionsdialog.h index 0cc163ac..49e3f3ee 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,7 @@ class OptionsDialog : public QDialog { private: ColorPickerButton* color_3d_begin_button_; ColorPickerButton* color_3d_end_button_; + QColorDialog* color_dialog; }; } // namespace ui diff --git a/include/util/settings/hexedit.h b/include/util/settings/hexedit.h index 54f48c81..8532b57f 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 colorOfText(); +void setColorOfText(QColor color); } // namespace hexedit } // namespace settings diff --git a/src/ui/dialogs/optionsdialog.cc b/src/ui/dialogs/optionsdialog.cc index 28a915ef..112b5579 100644 --- a/src/ui/dialogs/optionsdialog.cc +++ b/src/ui/dialogs/optionsdialog.cc @@ -16,6 +16,9 @@ */ #include "ui/dialogs/optionsdialog.h" +#include "include/ui/optionsdialog.h" +#include +#include #include #include @@ -35,6 +38,17 @@ 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::colorOfText()); + ui->colorHexEdit->setAutoFillBackground(true); + ui->colorHexEdit->setFlat(true); + + connect(ui->colorHexEdit, &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); @@ -51,7 +65,17 @@ OptionsDialog::OptionsDialog(QWidget* parent) ui->visualizationGradientLayout->addWidget(color_3d_end_button_); } -OptionsDialog::~OptionsDialog() { delete ui; } +OptionsDialog::~OptionsDialog() { + color_dialog->deleteLater(); + delete ui; +} + +void OptionsDialog::updateColorButton() { + QPalette pal = ui->colorHexEdit->palette(); + pal.setColor(QPalette::Button, color_dialog->currentColor()); + ui->colorHexEdit->setPalette(pal); + ui->colorHexEdit->update(); +} void OptionsDialog::show() { ui->colorsBox->setCurrentText(util::settings::theme::currentTheme()); @@ -62,6 +86,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,6 +102,7 @@ void OptionsDialog::applyChanges() { util::settings::hexedit::setResizeColumnsToWindowWidth( ui->hexColumnsAutoCheckBox->checkState() == Qt::Checked); util::settings::hexedit::setColumnsNumber(ui->hexColumnsSpinBox->value()); + util::settings::hexedit::setColorOfText(color_dialog->currentColor()); util::settings::visualization::setColorBegin( color_3d_begin_button_->getColor()); diff --git a/src/ui/dialogs/optionsdialog.ui b/src/ui/dialogs/optionsdialog.ui index 77b4e62e..36b726d1 100644 --- a/src/ui/dialogs/optionsdialog.ui +++ b/src/ui/dialogs/optionsdialog.ui @@ -25,7 +25,7 @@ - Colors + Themes @@ -41,6 +41,21 @@ + + + + + + Color + + + + + + + + + diff --git a/src/util/settings/hexedit.cc b/src/util/settings/hexedit.cc index 2d7a95fc..f642fadf 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 colorOfText() { + QSettings settings; + auto v = settings.value("hexedit.colorOfText", QColor(10, 10, 255)); + return v.value(); +} + +void setColorOfText(QColor color) { + QSettings settings; + settings.setValue("hexedit.colorOfText", color); +} + } // namespace hexedit } // namespace settings } // namespace util diff --git a/src/util/settings/theme.cc b/src/util/settings/theme.cc index 9b55adff..7d572c6b 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,14 @@ 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::colorOfText(); + color.setAlpha(byte / 2 + 127); + return color; } QFont font() { From ff487e395799c1e933f5317ab93717f7b65656df Mon Sep 17 00:00:00 2001 From: janczer Date: Tue, 19 Sep 2017 17:36:48 +0200 Subject: [PATCH 2/6] Fixed after code review --- include/ui/dialogs/optionsdialog.h | 1 + include/util/settings/hexedit.h | 4 ++-- src/ui/dialogs/optionsdialog.cc | 30 +++++++++++-------------- src/ui/dialogs/optionsdialog.ui | 36 +++++++++++++++--------------- src/util/settings/hexedit.cc | 10 ++++----- src/util/settings/theme.cc | 2 +- 6 files changed, 40 insertions(+), 43 deletions(-) diff --git a/include/ui/dialogs/optionsdialog.h b/include/ui/dialogs/optionsdialog.h index 49e3f3ee..5e722407 100644 --- a/include/ui/dialogs/optionsdialog.h +++ b/include/ui/dialogs/optionsdialog.h @@ -47,6 +47,7 @@ class OptionsDialog : public QDialog { 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 8532b57f..3b451644 100644 --- a/include/util/settings/hexedit.h +++ b/include/util/settings/hexedit.h @@ -27,8 +27,8 @@ int columnsNumber(); void setColumnsNumber(int number); bool resizeColumnsToWindowWidth(); void setResizeColumnsToWindowWidth(bool on); -QColor colorOfText(); -void setColorOfText(QColor color); +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 112b5579..c94b5204 100644 --- a/src/ui/dialogs/optionsdialog.cc +++ b/src/ui/dialogs/optionsdialog.cc @@ -17,6 +17,7 @@ #include "ui/dialogs/optionsdialog.h" #include "include/ui/optionsdialog.h" + #include #include #include @@ -38,17 +39,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::colorOfText()); - ui->colorHexEdit->setAutoFillBackground(true); - ui->colorHexEdit->setFlat(true); + color_dialog_ = new QColorDialog(this); + color_dialog_->setCurrentColor(util::settings::hexedit::colorOfBytes()); + ui->byteColorHexEdit->setAutoFillBackground(true); + ui->byteColorHexEdit->setFlat(true); - connect(ui->colorHexEdit, &QPushButton::clicked, color_dialog, + connect(ui->byteColorHexEdit, &QPushButton::clicked, color_dialog_, &QColorDialog::show); - - connect(color_dialog, &QColorDialog::colorSelected, this, + connect(color_dialog_, &QColorDialog::colorSelected, this, &OptionsDialog::updateColorButton); - connect(ui->hexColumnsAutoCheckBox, &QCheckBox::stateChanged, [this](int state) { ui->hexColumnsSpinBox->setEnabled(state != Qt::Checked); @@ -65,16 +64,13 @@ OptionsDialog::OptionsDialog(QWidget* parent) ui->visualizationGradientLayout->addWidget(color_3d_end_button_); } -OptionsDialog::~OptionsDialog() { - color_dialog->deleteLater(); - delete ui; -} +OptionsDialog::~OptionsDialog() { delete ui; } void OptionsDialog::updateColorButton() { - QPalette pal = ui->colorHexEdit->palette(); - pal.setColor(QPalette::Button, color_dialog->currentColor()); - ui->colorHexEdit->setPalette(pal); - ui->colorHexEdit->update(); + QPalette pal = ui->byteColorHexEdit->palette(); + pal.setColor(QPalette::Button, color_dialog_->currentColor()); + ui->byteColorHexEdit->setPalette(pal); + ui->byteColorHexEdit->update(); } void OptionsDialog::show() { @@ -102,7 +98,7 @@ void OptionsDialog::applyChanges() { util::settings::hexedit::setResizeColumnsToWindowWidth( ui->hexColumnsAutoCheckBox->checkState() == Qt::Checked); util::settings::hexedit::setColumnsNumber(ui->hexColumnsSpinBox->value()); - util::settings::hexedit::setColorOfText(color_dialog->currentColor()); + util::settings::hexedit::setColorOfBytes(color_dialog_->currentColor()); util::settings::visualization::setColorBegin( color_3d_begin_button_->getColor()); diff --git a/src/ui/dialogs/optionsdialog.ui b/src/ui/dialogs/optionsdialog.ui index 36b726d1..4f476d13 100644 --- a/src/ui/dialogs/optionsdialog.ui +++ b/src/ui/dialogs/optionsdialog.ui @@ -25,7 +25,7 @@ - Themes + Theme @@ -41,36 +41,36 @@ - - - - - - Color - - - - - - - - - - HexEdit defaults + HexEdit + + + + + + Byte color + + + + + + + + + - Columns + Default Columns diff --git a/src/util/settings/hexedit.cc b/src/util/settings/hexedit.cc index f642fadf..bc409fbe 100644 --- a/src/util/settings/hexedit.cc +++ b/src/util/settings/hexedit.cc @@ -44,15 +44,15 @@ void setResizeColumnsToWindowWidth(bool on) { settings.setValue("hexedit.resizeColumnsToWindowWidth", on); } -QColor colorOfText() { +QColor colorOfBytes() { QSettings settings; - auto v = settings.value("hexedit.colorOfText", QColor(10, 10, 255)); - return v.value(); + uint v = settings.value("hexedit.colorOfBytes", QRgb(4280504044)).toUInt(); + return QColor(QRgb(v)); } -void setColorOfText(QColor color) { +void setColorOfBytes(const QColor& color) { QSettings settings; - settings.setValue("hexedit.colorOfText", color); + settings.setValue("hexedit.colorOfBytes", color.rgb()); } } // namespace hexedit diff --git a/src/util/settings/theme.cc b/src/util/settings/theme.cc index 7d572c6b..0ebcd71c 100644 --- a/src/util/settings/theme.cc +++ b/src/util/settings/theme.cc @@ -96,7 +96,7 @@ QColor chunkBackground(int color_index) { } QColor byteColor(uint8_t byte) { - QColor color = util::settings::hexedit::colorOfText(); + QColor color = util::settings::hexedit::colorOfBytes(); color.setAlpha(byte / 2 + 127); return color; } From 4ce8f61b824444cd52e1436ad3f5ce1c73dcc03c Mon Sep 17 00:00:00 2001 From: janczer Date: Wed, 20 Sep 2017 17:30:20 +0200 Subject: [PATCH 3/6] Change default color to green, and change color with QColor::darker --- src/util/settings/hexedit.cc | 2 +- src/util/settings/theme.cc | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/util/settings/hexedit.cc b/src/util/settings/hexedit.cc index bc409fbe..c2a34970 100644 --- a/src/util/settings/hexedit.cc +++ b/src/util/settings/hexedit.cc @@ -46,7 +46,7 @@ void setResizeColumnsToWindowWidth(bool on) { QColor colorOfBytes() { QSettings settings; - uint v = settings.value("hexedit.colorOfBytes", QRgb(4280504044)).toUInt(); + uint v = settings.value("hexedit.colorOfBytes", QRgb(4281073423)).toUInt(); return QColor(QRgb(v)); } diff --git a/src/util/settings/theme.cc b/src/util/settings/theme.cc index 0ebcd71c..9422e862 100644 --- a/src/util/settings/theme.cc +++ b/src/util/settings/theme.cc @@ -97,8 +97,7 @@ QColor chunkBackground(int color_index) { QColor byteColor(uint8_t byte) { QColor color = util::settings::hexedit::colorOfBytes(); - color.setAlpha(byte / 2 + 127); - return color; + return color.darker(100 + (byte ^ 0xFF) * 200 / 255); } QFont font() { From ae5b875067f0d441b8d787e091acc757e1c79909 Mon Sep 17 00:00:00 2001 From: janczer Date: Wed, 20 Sep 2017 21:46:40 +0200 Subject: [PATCH 4/6] Update color in hexedit after change color --- src/ui/dialogs/optionsdialog.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/ui/dialogs/optionsdialog.cc b/src/ui/dialogs/optionsdialog.cc index c94b5204..458bc162 100644 --- a/src/ui/dialogs/optionsdialog.cc +++ b/src/ui/dialogs/optionsdialog.cc @@ -25,6 +25,8 @@ #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" @@ -105,6 +107,13 @@ void OptionsDialog::applyChanges() { 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( From 88cbb396a8682db1871a5cd3a1f79a2f70c62ddf Mon Sep 17 00:00:00 2001 From: janczer Date: Mon, 25 Sep 2017 19:39:42 +0200 Subject: [PATCH 5/6] Changing type of saving color, changing method to preserve correct ordering of the values --- src/util/settings/hexedit.cc | 6 +++--- src/util/settings/theme.cc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/util/settings/hexedit.cc b/src/util/settings/hexedit.cc index c2a34970..7af3a11a 100644 --- a/src/util/settings/hexedit.cc +++ b/src/util/settings/hexedit.cc @@ -46,13 +46,13 @@ void setResizeColumnsToWindowWidth(bool on) { QColor colorOfBytes() { QSettings settings; - uint v = settings.value("hexedit.colorOfBytes", QRgb(4281073423)).toUInt(); - return QColor(QRgb(v)); + 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.rgb()); + settings.setValue("hexedit.colorOfBytes", color); } } // namespace hexedit diff --git a/src/util/settings/theme.cc b/src/util/settings/theme.cc index 9422e862..a5fb9838 100644 --- a/src/util/settings/theme.cc +++ b/src/util/settings/theme.cc @@ -97,7 +97,7 @@ QColor chunkBackground(int color_index) { QColor byteColor(uint8_t byte) { QColor color = util::settings::hexedit::colorOfBytes(); - return color.darker(100 + (byte ^ 0xFF) * 200 / 255); + return color.darker(100 + (0x100 - byte) * 200 / 255); } QFont font() { From 4de9994f391b63234780e6f1c63f094294dec0a2 Mon Sep 17 00:00:00 2001 From: janczer Date: Mon, 25 Sep 2017 20:17:11 +0200 Subject: [PATCH 6/6] Update represent bytes --- src/util/settings/theme.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/settings/theme.cc b/src/util/settings/theme.cc index a5fb9838..8e2fd697 100644 --- a/src/util/settings/theme.cc +++ b/src/util/settings/theme.cc @@ -97,7 +97,7 @@ QColor chunkBackground(int color_index) { QColor byteColor(uint8_t byte) { QColor color = util::settings::hexedit::colorOfBytes(); - return color.darker(100 + (0x100 - byte) * 200 / 255); + return QColor::fromHsv(color.hue(), color.saturation(), 50 + byte * (220 - 50) / 256); } QFont font() {