summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--quacker/boardsetup.cpp10
-rw-r--r--quacker/boardsetup.h3
-rw-r--r--quacker/boardsetupdialog.cpp15
-rw-r--r--quacker/boardsetupdialog.h1
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;