qt-experiments

Experiments with QT framework and nissy
git clone https://git.tronto.net/qt-experiments
Download | Log | Files | Refs | Submodules | README

solvercfgwidget.cpp (2504B)


      1 #include "solvercfgwidget.h"
      2 #include "./ui_solvercfgwidget.h"
      3 
      4 enum class ScrambleState { empty, valid, invalid };
      5 
      6 ScrambleState getScrambleState(const std::string&);
      7 
      8 SolverCfgWidget::SolverCfgWidget(QWidget *parent)
      9 	: QWidget(parent), ui(new Ui::SolverCfgWidget)
     10 {
     11 	ui->setupUi(this);
     12         onScrambleChanged(ui->scrambleEditor->text());
     13 
     14 	nmovesValidator = new QIntValidator(0, 20, this);
     15 	ui->minMovesEditor->setValidator(nmovesValidator);
     16 	ui->maxMovesEditor->setValidator(nmovesValidator);
     17 
     18 	QObject::connect(ui->scrambleEditor,
     19 	    SIGNAL(textChanged(const QString&)), this,
     20 	    SLOT(onScrambleChanged(const QString&)));
     21 	QObject::connect(ui->scrambleEditor, SIGNAL(returnPressed()),
     22 	    this, SLOT(onScrambleSubmitted()));
     23 	QObject::connect(ui->solveButton, SIGNAL(clicked()),
     24 	    this, SLOT(onScrambleSubmitted()));
     25 }
     26 
     27 SolverCfgWidget::~SolverCfgWidget()
     28 {
     29 	delete nmovesValidator;
     30 	delete ui;
     31 }
     32 
     33 void SolverCfgWidget::lockSubmit()
     34 {
     35 	submitLocked = true;
     36 	onScrambleChanged(ui->scrambleEditor->text());
     37 }
     38 
     39 void SolverCfgWidget::unlockSubmit()
     40 {
     41 	submitLocked = false;
     42 	onScrambleChanged(ui->scrambleEditor->text());
     43 }
     44 
     45 void SolverCfgWidget::onScrambleChanged(const QString& text)
     46 {
     47 	auto scrambleState = getScrambleState(text.toStdString());
     48 	switch (scrambleState) {
     49 	case ScrambleState::empty:
     50 		ui->solveButton->setEnabled(false);
     51 		ui->scrambleEditor->setStyleSheet("");
     52 		break;
     53 	case ScrambleState::valid:
     54 		ui->solveButton->setEnabled(!submitLocked);
     55 		ui->scrambleEditor->setStyleSheet("");
     56 		break;
     57 	case ScrambleState::invalid:
     58 		ui->solveButton->setEnabled(false);
     59 		ui->scrambleEditor->setStyleSheet("border : 2px solid red");
     60 		break;
     61 	}
     62 }
     63 
     64 void SolverCfgWidget::onScrambleSubmitted()
     65 {
     66 	std::string scramble = ui->scrambleEditor->text().toStdString();
     67 	auto state = getScrambleState(scramble);
     68 	if (state != ScrambleState::valid)
     69 		return;
     70 
     71 	SolverConfiguration sc {
     72 		.cube = std::get<nissy::cube_t>(nissy::applymoves(
     73 		    nissy::cube::SOLVED, nissy::moves_t{scramble})),
     74 		.minmoves = ui->minMovesEditor->text().toUInt(),
     75 		.maxmoves = ui->maxMovesEditor->text().toUInt(),
     76 	};
     77 	emit solveRequest(sc);
     78 }
     79 
     80 ScrambleState getScrambleState(const std::string& s)
     81 {
     82 	if (std::all_of(s.begin(), s.end(),
     83 	   [](std::string::value_type c){ return std::isspace(c); }))
     84 		return ScrambleState::empty;
     85 
     86 	auto c = nissy::applymoves(nissy::cube::SOLVED, nissy::moves_t{s});
     87 	return std::holds_alternative<nissy::error_t>(c) ?
     88 	    ScrambleState::invalid : ScrambleState::valid;
     89 }
     90