diff options
author | John Fultz <jfultz@wolfram.com> | 2013-12-29 19:33:26 -0600 |
---|---|---|
committer | John Fultz <jfultz@wolfram.com> | 2013-12-29 19:33:26 -0600 |
commit | f3f60195ba3500c7d12b73f18343273e364025a1 (patch) | |
tree | 089bd4b3db5132b81c28f895eb1ce833520c0c10 /quacker | |
parent | ecae4ba252c9b78d6b4fa6d14d2e694b8f71306a (diff) |
Add diagonal symmetry to board setup pane.
A simple feature, turned on by default, which makes setting up
the board even faster.
Diffstat (limited to 'quacker')
-rw-r--r-- | quacker/boardsetup.cpp | 10 | ||||
-rw-r--r-- | quacker/boardsetup.h | 3 | ||||
-rw-r--r-- | quacker/boardsetupdialog.cpp | 15 | ||||
-rw-r--r-- | quacker/boardsetupdialog.h | 1 |
4 files changed, 25 insertions, 4 deletions
diff --git a/quacker/boardsetup.cpp b/quacker/boardsetup.cpp index 69b5097..c5dfd14 100644 --- a/quacker/boardsetup.cpp +++ b/quacker/boardsetup.cpp @@ -83,10 +83,11 @@ void BoardSetupFrame::setBoard(const Quackle::Board &board) m_board = board; } -void BoardSetupFrame::setSymmetry(bool horizontal, bool vertical) +void BoardSetupFrame::setSymmetry(bool horizontal, bool vertical, bool diagonal) { horizontalSymmetry = horizontal; verticalSymmetry = vertical; + diagonalSymmetry = diagonal; } void BoardSetupFrame::parametersChanged() @@ -148,6 +149,13 @@ void BoardSetupFrame::tileClicked(const QSize &tileLocation, const QMouseEvent * setMultipliers(height - 1 - row, col, wordMultiplier, letterMultiplier); if (horizontalSymmetry && verticalSymmetry) setMultipliers(height - 1 - row, width - 1 - col, wordMultiplier, letterMultiplier); + if (diagonalSymmetry && (row != col) && (height - 1 - row != col)) + { + setMultipliers(col, row, wordMultiplier, letterMultiplier); + setMultipliers(col, width - 1 - row, wordMultiplier, letterMultiplier); + setMultipliers(height - 1 - col, row, wordMultiplier, letterMultiplier); + setMultipliers(height - 1 - col, width - 1 - row, wordMultiplier, letterMultiplier); + } prepare(); } diff --git a/quacker/boardsetup.h b/quacker/boardsetup.h index ed335d1..5b2ff78 100644 --- a/quacker/boardsetup.h +++ b/quacker/boardsetup.h @@ -53,7 +53,7 @@ public: BoardSetupFrame(QWidget *parent = 0); ~BoardSetupFrame(); void setBoard(const Quackle::Board &board); - void setSymmetry(bool horizontal, bool vertical); + void setSymmetry(bool horizontal, bool vertical, bool diagonal); void parametersChanged(); public slots: @@ -70,6 +70,7 @@ protected: private: bool horizontalSymmetry; bool verticalSymmetry; + bool diagonalSymmetry; void setMultipliers(int row, int col, int word, int letter); }; diff --git a/quacker/boardsetupdialog.cpp b/quacker/boardsetupdialog.cpp index 5cbc8db..2fd42d4 100644 --- a/quacker/boardsetupdialog.cpp +++ b/quacker/boardsetupdialog.cpp @@ -47,8 +47,10 @@ BoardSetupDialog::BoardSetupDialog(QWidget *parent) : QDialog(parent) // construct the UI elements m_horizontalSymmetry = new QCheckBox(tr("Horizontal")); m_verticalSymmetry = new QCheckBox(tr("Vertical")); + m_diagonalSymmetry = new QCheckBox(tr("Diagonal")); m_horizontalSymmetry->setCheckState(Qt::Checked); m_verticalSymmetry->setCheckState(Qt::Checked); + m_diagonalSymmetry->setCheckState(Qt::Checked); m_horizontalDimension = constructDimensionComboBox(QUACKLE_BOARD_PARAMETERS->width()); m_verticalDimension = constructDimensionComboBox(QUACKLE_BOARD_PARAMETERS->height()); @@ -85,6 +87,7 @@ BoardSetupDialog::BoardSetupDialog(QWidget *parent) : QDialog(parent) symmetryCol->addWidget(m_horizontalSymmetry); symmetryCol->addWidget(m_verticalSymmetry); + symmetryCol->addWidget(m_diagonalSymmetry); buttonRow->addStretch(1); buttonRow->addWidget(m_cancel); @@ -110,13 +113,16 @@ BoardSetupDialog::BoardSetupDialog(QWidget *parent) : QDialog(parent) // hook up signals and slots connect(m_horizontalDimension, SIGNAL(activated(const QString &)), this, SLOT(parametersChanged(const QString &))); + connect(m_horizontalDimension, SIGNAL(activated(const QString &)), this, SLOT(symmetryChanged())); connect(m_verticalDimension, SIGNAL(activated(const QString &)), this, SLOT(parametersChanged(const QString &))); + connect(m_verticalDimension, SIGNAL(activated(const QString &)), this, SLOT(symmetryChanged())); connect(m_boardName, SIGNAL(textEdited(const QString &)), this, SLOT(parametersChanged(const QString &))); connect(m_saveChanges, SIGNAL(clicked()), this, SLOT(accept())); connect(m_cancel, SIGNAL(clicked()), this, SLOT(reject())); connect(m_undoAll, SIGNAL(clicked()), this, SLOT(undoAllChanges())); connect(m_horizontalSymmetry, SIGNAL(stateChanged(int)), this, SLOT(symmetryChanged())); connect(m_verticalSymmetry, SIGNAL(stateChanged(int)), this, SLOT(symmetryChanged())); + connect(m_diagonalSymmetry, SIGNAL(stateChanged(int)), this, SLOT(symmetryChanged())); setWindowTitle(tr("Configure Board - Quackle")); @@ -186,9 +192,14 @@ void BoardSetupDialog::parametersChanged(const QString &) void BoardSetupDialog::symmetryChanged() { + bool allowDiagonalSymmetry = + m_horizontalSymmetry->isChecked() && m_verticalSymmetry->isChecked() && + (m_horizontalDimension->currentIndex() == m_verticalDimension->currentIndex()); + m_diagonalSymmetry->setEnabled(allowDiagonalSymmetry); m_boardFrame->setSymmetry( - m_horizontalSymmetry->checkState() == Qt::Checked, - m_verticalSymmetry->checkState() == Qt::Checked); + m_horizontalSymmetry->isChecked(), + m_verticalSymmetry->isChecked(), + m_diagonalSymmetry->isChecked() && m_diagonalSymmetry->isEnabled()); } void BoardSetupDialog::accept() diff --git a/quacker/boardsetupdialog.h b/quacker/boardsetupdialog.h index 6c58bc5..236b3b1 100644 --- a/quacker/boardsetupdialog.h +++ b/quacker/boardsetupdialog.h @@ -54,6 +54,7 @@ protected slots: private: QCheckBox *m_horizontalSymmetry; QCheckBox *m_verticalSymmetry; + QCheckBox *m_diagonalSymmetry; QComboBox *m_horizontalDimension; QComboBox *m_verticalDimension; |