X-Git-Url: http://git.maemo.org/git/?p=colorflood;a=blobdiff_plain;f=colorflood%2Fsrc%2Fwindow.cpp;h=2825369ea21cb358e89b6c031ab7e5afee7e57da;hp=99fa9cccaf2388af60e10a6802daa68208a81ffd;hb=2d27bd2bcce5e9fa03349f7096d3aa4055628f9a;hpb=d8ffdaf7fd8b183b964fd5ab3edabf2da4bb8c76 diff --git a/colorflood/src/window.cpp b/colorflood/src/window.cpp index 99fa9cc..2825369 100644 --- a/colorflood/src/window.cpp +++ b/colorflood/src/window.cpp @@ -15,19 +15,20 @@ #include #include #include +#include +#include +#include #include "window.hpp" #include "colorbuttons.hpp" #include "field.hpp" #include "fullscreenexitbutton.hpp" +#include "colorscheme.hpp" Window::Window () : QWidget() { setWindowTitle("Color Flood"); - - setWindowState(windowState() | Qt::WindowFullScreen); - - //new FullScreenExitButton(this); + setWindowIcon(QIcon(":/images/icon_48x48.png")); int turns; field = new Field(this, &turns); @@ -39,6 +40,7 @@ Window::Window () SLOT(flood(int))); turnsLabel = new QLabel(this); + turnsLabel->setAlignment(Qt::AlignRight); QObject::connect(field, SIGNAL(turnsChanged(int)), @@ -47,18 +49,67 @@ Window::Window () updateTurns(turns); + QPushButton *newGame = new QPushButton(tr("New game"), this); + QObject::connect(newGame, SIGNAL(pressed()), field, SLOT(randomize())); + + QPushButton *help = new QPushButton(tr("Help"), this); + QObject::connect(help, SIGNAL(pressed()), this, SLOT(help())); + + QHBoxLayout *lowerLayout = new QHBoxLayout; + lowerLayout->addWidget(help); + lowerLayout->addWidget(newGame); + QVBoxLayout *vl = new QVBoxLayout; + vl->addWidget(colorButtons); + vl->setAlignment(colorButtons, Qt::AlignRight | Qt::AlignTop); vl->addWidget(turnsLabel); - vl->setAlignment(turnsLabel, Qt::AlignTop); + vl->setAlignment(turnsLabel, Qt::AlignRight | Qt::AlignBottom); + vl->addLayout(lowerLayout); + vl->setAlignment(lowerLayout, Qt::AlignRight | Qt::AlignTop); QHBoxLayout *hl = new QHBoxLayout; - hl->addWidget(colorButtons); - hl->setAlignment(colorButtons, Qt::AlignLeft); hl->addWidget(field); - hl->setAlignment(field, Qt::AlignRight); + hl->setAlignment(field, Qt::AlignLeft); + hl->addLayout(vl); + + setLayout(hl); + + /* menu bar */ + QMenuBar *bar = new QMenuBar(this); + + QObject::connect(bar->addAction(tr("Fullscreen mode")), + SIGNAL(triggered()), + this, + SLOT(fullScreenMode())); + + QObject::connect(bar->addAction( + ColorScheme::getSchemeName( + ColorScheme::getNextColorScheme())), + SIGNAL(triggered()), + this, + SLOT(colorScheme())); + + less = bar->addAction(tr("Less cells")); + + QObject::connect(less, + SIGNAL(triggered()), + this, + SLOT(lessCells())); + + more = bar->addAction(tr("More cells")); - vl->addLayout(hl); - setLayout(vl); + QObject::connect(more, + SIGNAL(triggered()), + this, + SLOT(moreCells())); + + if (!field->getSize()) + less->setEnabled(false); + else if (field->getSize() == Field::NUM_SIZES - 1) + more->setEnabled(false); + + new FullScreenExitButton(this); + showFullScreen(); } void Window::updateTurns (int turns) @@ -68,3 +119,51 @@ void Window::updateTurns (int turns) .arg(turns) .arg(field->getNumTurnsOfSize(field->getSize()))); } + +void Window::fullScreenMode () +{ + showFullScreen(); +} + +void Window::lessCells () +{ + int s = field->getSize() - 1; + + field->setSize(s); + more->setEnabled(true); + + if (!s) + less->setEnabled(false); +} + +void Window::moreCells () +{ + int s = field->getSize() + 1; + + field->setSize(s); + less->setEnabled(true); + + if (s == Field::NUM_SIZES - 1) + more->setEnabled(false); +} + +void Window::colorScheme () +{ + QAction *action = static_cast(QObject::sender()); + + ColorScheme::setScheme(ColorScheme::getNextColorScheme()); + + field->update(); + colorButtons->update(); + + action->setText(ColorScheme::getSchemeName( + ColorScheme::getNextColorScheme())); +} + +void Window::help () +{ + QMessageBox box; + box.setWindowTitle("Color Flood"); + box.setText(tr("The object of the game is to turn a board into one single color. Number of moves is limited. You start from top-left corner with one cell already flooded.\nGood luck!")); + box.exec(); +}