From 9e75b5c2b5d9827e14ef0d92470e56455edcec7f Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 29 Mar 2019 02:54:30 +0000 Subject: [PATCH] Log buttons --- widgets/logqso.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- widgets/logqso.h | 3 +++ widgets/logqso.ui | 44 ++------------------------------------------ 3 files changed, 48 insertions(+), 44 deletions(-) diff --git a/widgets/logqso.cpp b/widgets/logqso.cpp index acbb340bc..eae82aacc 100644 --- a/widgets/logqso.cpp +++ b/widgets/logqso.cpp @@ -1,9 +1,12 @@ #include "logqso.h" +#include +#include #include #include #include #include +#include #include "logbook/logbook.h" #include "MessageBox.hpp" @@ -15,17 +18,40 @@ #include "ui_logqso.h" #include "moc_logqso.cpp" +namespace +{ + using dist_type = std::uniform_int_distribution; + std::random_device rd; + std::mt19937 twister (rd ()); + dist_type int_distribution; +} + LogQSO::LogQSO(QString const& programTitle, QSettings * settings , Configuration const * config, QWidget *parent) : QDialog {parent, Qt::WindowStaysOnTopHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint} , ui(new Ui::LogQSO) + , ok_ {new QPushButton {"OK", this}} + , cancel_ {new QPushButton {"Cancel", this}} , m_settings (settings) , m_config {config} { ui->setupUi(this); setWindowTitle(programTitle + " - Log QSO"); - loadSettings (); ui->grid->setValidator (new MaidenheadLocatorValidator {this}); + + ok_->setAutoDefault (false); + ok_->setFocusPolicy (Qt::ClickFocus); + cancel_->setAutoDefault (false); + ui->button_layout->addStretch (); + ui->button_layout->addWidget (ok_); + ui->button_layout->addStretch (); + ui->button_layout->addWidget (cancel_); + ui->button_layout->addStretch (); + + loadSettings (); + + connect (ok_, &QAbstractButton::clicked, [this] (bool) {accept ();}); + connect (cancel_, &QAbstractButton::clicked, [this] (bool) {reject ();}); } LogQSO::~LogQSO () @@ -113,7 +139,22 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString } else { - show(); + // randomize accessible name of buttons + ok_->setAccessibleName (QString::number (int_distribution (twister))); + cancel_->setAccessibleName (QString::number (int_distribution (twister))); + // random sibling order of buttons + if (int_distribution (twister, dist_type::param_type {0, 1})) ok_->stackUnder (cancel_); else cancel_->stackUnder (ok_); + // random shuffle of layout items + for (int item = ui->button_layout->count () - 1; item > 0; --item) + { + auto other_item = int_distribution (twister, dist_type::param_type {0, item}); + if (item != other_item) + { + ui->button_layout->insertItem (other_item, ui->button_layout->takeAt (item)); + ui->button_layout->insertItem (item, ui->button_layout->takeAt (other_item + 1)); + } + } + show (); } } diff --git a/widgets/logqso.h b/widgets/logqso.h index 82a75b7bd..5cbb2044d 100644 --- a/widgets/logqso.h +++ b/widgets/logqso.h @@ -18,6 +18,7 @@ class QSettings; class Configuration; class QByteArray; class CabrilloLog; +class QPushButton; class LogQSO : public QDialog { @@ -52,6 +53,8 @@ private: void storeSettings () const; QScopedPointer ui; + QPushButton * ok_; + QPushButton * cancel_; QSettings * m_settings; Configuration const * m_config; QString m_txPower; diff --git a/widgets/logqso.ui b/widgets/logqso.ui index a03a3028a..7d249677d 100644 --- a/widgets/logqso.ui +++ b/widgets/logqso.ui @@ -461,14 +461,7 @@ - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + @@ -488,38 +481,5 @@ cbComments - - - buttonBox - accepted() - LogQSO - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - LogQSO - reject() - - - 316 - 260 - - - 286 - 274 - - - - +