Log buttons

This commit is contained in:
Bill Somerville
2019-03-29 02:54:30 +00:00
parent 73efc09392
commit 9e75b5c2b5
3 changed files with 48 additions and 44 deletions
+43 -2
View File
@@ -1,9 +1,12 @@
#include "logqso.h"
#include <random>
#include <limits>
#include <QString>
#include <QSettings>
#include <QStandardPaths>
#include <QDir>
#include <QPushButton>
#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<int>;
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 ();
}
}