[kde-doc-english] [knetwalk] /: Add custom game level
Ashwin Rajeev
ashwin_rajeev at hotmail.com
Sun Apr 7 14:56:22 UTC 2013
Git commit 14ac667518330e47f1ca0d04628b9fc282ef020c by Ashwin Rajeev.
Committed on 04/04/2013 at 23:33.
Pushed by rajeev into branch 'master'.
Add custom game level
Custom game level where user can select size ( 3 - 11 ) and whether
wrapping is needed.
FEATURE: 221727
FIXED-IN: 4.10.3
REVIEW: 109827
GUI: New settings dialog page to configure custom level
M +3 -2 doc/index.docbook
M +2 -0 src/CMakeLists.txt
A +71 -0 src/customgame.ui
M +12 -0 src/knetwalk.kcfg
M +1 -1 src/main.cpp
M +32 -3 src/mainwindow.cpp
M +1 -0 src/mainwindow.h
http://commits.kde.org/knetwalk/14ac667518330e47f1ca0d04628b9fc282ef020c
diff --git a/doc/index.docbook b/doc/index.docbook
index b264e43..b68af1b 100644
--- a/doc/index.docbook
+++ b/doc/index.docbook
@@ -32,7 +32,7 @@
<legalnotice>&FDLNotice;</legalnotice>
<date>2007-11-13</date>
-<releaseinfo>3.0.1</releaseinfo>
+<releaseinfo>3.1.0</releaseinfo>
<abstract>
<para>
@@ -206,12 +206,13 @@ Toggles on and off the display of the statusbar.
</menuchoice></term>
<listitem>
<para>Lets you set the difficulty level from a sub-menu.</para>
-<para>There are four levels of difficulty:
+<para>There are five levels of difficulty:
<itemizedlist>
<listitem><para><guimenuitem>Easy</guimenuitem>: 5 rows, 5 columns, without wrapping.</para></listitem>
<listitem><para><guimenuitem>Medium</guimenuitem>: 7 rows, 7 columns, without wrapping.</para></listitem>
<listitem><para><guimenuitem>Hard</guimenuitem>: 9 rows, 9 columns, without wrapping.</para></listitem>
<listitem><para><guimenuitem>Very hard</guimenuitem>: 9 rows, 9 columns, with wrapping.</para></listitem>
+<listitem><para><guimenuitem>Custom</guimenuitem>: The settings you have configured in the Configure KNetWalk dialog will be used.</para></listitem>
</itemizedlist>
</para></listitem>
</varlistentry>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fbee0f6..d017d1a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,6 +14,8 @@ set(knetwalk_SRCS
mainwindow.cpp
abstractgrid.cpp)
+kde4_add_ui_files( knetwalk_SRCS customgame.ui )
+
kde4_add_kcfg_files(knetwalk_SRCS settings.kcfgc )
kde4_add_app_icon(knetwalk_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/pics/hi*-app-knetwalk.png")
diff --git a/src/customgame.ui b/src/customgame.ui
new file mode 100644
index 0000000..a83af50
--- /dev/null
+++ b/src/customgame.ui
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CustomGameConfig</class>
+ <widget class="QWidget" name="CustomGameConfig">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>316</width>
+ <height>241</height>
+ </rect>
+ </property>
+ <layout class="QGridLayout">
+ <item row="0" column="2">
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="1">
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="1">
+ <widget class="KIntSpinBox" name="kcfg_Size"/>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Size:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QCheckBox" name="kcfg_Wrapping">
+ <property name="toolTip">
+ <string>Wrap from left to right and from top to bottom</string>
+ </property>
+ <property name="text">
+ <string>Wrapping</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>KIntSpinBox</class>
+ <extends>QSpinBox</extends>
+ <header>knuminput.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/knetwalk.kcfg b/src/knetwalk.kcfg
index 19e6f97..906367e 100644
--- a/src/knetwalk.kcfg
+++ b/src/knetwalk.kcfg
@@ -15,4 +15,16 @@
<default>false</default>
</entry>
</group>
+ <group name="Custom">
+ <entry name="Size" type="Int" key="Size">
+ <label>The size of the board.</label>
+ <min>3</min>
+ <max>11</max>
+ <default>6</default>
+ </entry>
+ <entry name="Wrapping" type="Bool" key="Wrapping">
+ <label>Whether wrap from left to right and from top to bottom is enabled.</label>
+ <default>false</default>
+ </entry>
+ </group>
</kcfg>
diff --git a/src/main.cpp b/src/main.cpp
index 0113bcf..ce3d7a6 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -28,7 +28,7 @@
static const char description[] =
I18N_NOOP("KNetWalk, a game for system administrators.");
-static const char version[] = "3.0.1";
+static const char version[] = "3.1.0";
int main(int argc, char ** argv)
{
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 7c1e47f..d7d6fbd 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -40,6 +40,8 @@
#include <ctime>
#include <cmath>
+#include "ui_customgame.h"
+
#include "globals.h"
#include "settings.h"
#include "cell.h"
@@ -48,6 +50,18 @@
#include "view.h"
#include "fielditem.h"
+class CustomGameConfig : public QWidget
+{
+public:
+ CustomGameConfig(QWidget *parent)
+ : QWidget(parent)
+ {
+ ui.setupUi(this);
+ }
+private:
+ Ui::CustomGameConfig ui;
+};
+
MainWindow::MainWindow(QWidget *parent)
: KXmlGuiWindow(parent), m_clickCount(0)
{
@@ -72,6 +86,9 @@ MainWindow::MainWindow(QWidget *parent)
Kg::difficulty()->addStandardLevelRange(
KgDifficultyLevel::Easy, KgDifficultyLevel::VeryHard
);
+ Kg::difficulty()->addLevel(
+ new KgDifficultyLevel(100, QByteArray("Custom"), i18n("Custom"))
+ );
KgDifficultyGUI::init(this);
connect(Kg::difficulty(), SIGNAL(currentLevelChanged(const KgDifficultyLevel*)), SLOT(startNewGame()));
@@ -111,8 +128,7 @@ void MainWindow::setupActions()
KStandardGameAction::quit(this, SLOT(close()), actionCollection());
// Settings
- KStandardAction::preferences(m_selector, SLOT(showAsDialog()),
- actionCollection());
+ KStandardAction::preferences(this, SLOT(configureSettings()), actionCollection());
m_soundAction = new KToggleAction(i18n("&Play Sounds"), this);
connect(m_soundAction, SIGNAL(triggered(bool)), this, SLOT(setSounds(bool)));
@@ -161,6 +177,16 @@ void MainWindow::loadSettings()
m_scene->resizeScene(m_scene->sceneRect().size());
}
+void MainWindow::configureSettings()
+{
+ if (KConfigDialog::showDialog(QLatin1String("settings")))
+ return;
+ KConfigDialog *dialog = new KConfigDialog(this, QLatin1String("settings"), Settings::self());
+ dialog->addPage(m_selector, i18n("Theme"), QLatin1String("games-config-theme"));
+ dialog->addPage(new CustomGameConfig(dialog), i18n("Custom Game"), QLatin1String("games-config-custom"));
+ dialog->show();
+}
+
void MainWindow::showHighscores()
{
KScoreDialog scoreDialog(KScoreDialog::Name | KScoreDialog::Time, this);
@@ -182,7 +208,9 @@ void MainWindow::startNewGame()
const KgDifficultyLevel::StandardLevel l = Kg::difficultyLevel();
- const bool isWrapped = (l == KgDifficultyLevel::VeryHard);
+ bool isWrapped = (l == KgDifficultyLevel::VeryHard);
+ if (Kg::difficultyLevel() == KgDifficultyLevel::Custom)
+ isWrapped = Settings::wrapping();
const int size = boardSize();
m_scene->startNewGame(size, size, (Wrapping)isWrapped);
m_clickCount = -m_scene->fieldItem()->minimumMoves();
@@ -267,6 +295,7 @@ int MainWindow::boardSize()
case KgDifficultyLevel::Easy: return NoviceBoardSize;
case KgDifficultyLevel::Medium: return NormalBoardSize;
case KgDifficultyLevel::Hard: return ExpertBoardSize;
+ case KgDifficultyLevel::Custom: return Settings::size();
default: return MasterBoardSize;
}
}
diff --git a/src/mainwindow.h b/src/mainwindow.h
index f5609e4..2c047b6 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -63,6 +63,7 @@ private slots:
void showHighscores();
void loadSettings();
+ void configureSettings();
void setSounds(bool val);
private:
void setupActions();
More information about the kde-doc-english
mailing list