summaryrefslogtreecommitdiffstats
path: root/khangman/khangman/khangmanview.h
diff options
context:
space:
mode:
Diffstat (limited to 'khangman/khangman/khangmanview.h')
-rw-r--r--khangman/khangman/khangmanview.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/khangman/khangman/khangmanview.h b/khangman/khangman/khangmanview.h
new file mode 100644
index 00000000..593c94a0
--- /dev/null
+++ b/khangman/khangman/khangmanview.h
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2001-2005 Anne-Marie Mahfouf <annma@kde.org>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of version 2 of the GNU General Public
+ License as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef KHANGMANVIEW_H
+#define KHANGMANVIEW_H
+
+
+class KPushButton;
+class KHangMan;
+
+#include <klineedit.h>
+
+#include <krandomsequence.h>
+#include <keduvocdata.h>
+
+
+#define MAXWRONGGUESSES 10
+
+
+/**
+ * This is the main view class for KHangMan. Most of the non-menu,
+ * non-toolbar, and non-statusbar (e.g., non frame) GUI code should go
+ * here.
+ */
+
+class KHangManView : public QWidget
+{
+ Q_OBJECT
+public:
+
+ KHangManView(KHangMan *parent=0, const char *name=0);
+
+ virtual ~KHangManView();
+
+ ///parent instance
+ KHangMan *khangman;
+
+ void setTheme();
+
+ bool hintExists() const { return m_hintExists; }
+
+ bool accentedLetters() const { return m_accentedLetters; }
+ void setAccentedLetters( bool _accentedLetters )
+ { m_accentedLetters = _accentedLetters; }
+
+ /// Enter a letter into the input widget.
+ void enterLetter(QString letter) { m_letterInput->setText(letter); }
+
+
+signals:
+
+ /// Use this signal to change the content of the statusbar
+ void signalChangeLanguage(int);
+
+ /// Emit this signal to say if this is a kvtml file or not (hints
+ /// enabled or not).
+ void signalKvtml(bool);
+
+private:
+
+ // FIXME: Move all these below the next "private:" and when doing
+ // that, rename them (if necessary), and regroup them into
+ // logical groups.
+
+ // FIXME: Rename these into something sensible!
+ // (or better yet: remove them altogether)
+ int c; // These two are the positions of the first and
+ int dd; // second spaces in the word.
+
+
+ protected:
+
+ // Events
+ void paintEvent( QPaintEvent * );
+ void resizeEvent( QResizeEvent * );
+
+ /// Enable hints on mouse right click if Hints exist.
+ virtual void mousePressEvent( QMouseEvent *mouse );
+
+
+ private:
+
+ // Painting
+
+ /// Paint the animated hanged K sequence.
+ void paintHangman(QPainter &p);
+ void paintWord(QPainter &p);
+ void paintMisses(QPainter &p);
+
+ /// Reset everything to start a new game, missed letters is empty.
+ void reset();
+ /// Load kvtml file and get a word and its tip in random.
+ void readFile();
+ /// Play a game: look for a word to be guessed and load its tip.
+ void game();
+
+ /// Load the K animated sequence depending of the theme.
+ void loadAnimation();
+
+ /// Set the background pixmap to the QPixmap argument.
+ void setBackground(QPixmap& );
+
+ /// Return true if the word contains the char in the QString.
+ bool containsChar(const QString &);
+
+ void replaceLetters(const QString &);
+
+public slots:
+ /// If you want to play with a new word
+ void slotNewGame();
+
+private slots:
+
+ /// After you click on Guess button or hit Enter when guessing a
+ /// new letter, see if the letter is in the word or not
+ void slotTry();
+
+ /// Reenable user input. This is used as a target for timers when
+ /// the user has made a guess that was already made earlier, and a
+ /// popup informing about this is closed.
+ void enableUserInput();
+
+private:
+
+ // The basic data ----------------
+
+ // FIXME: Rewrite the whole handling of this so that goodWord,
+ // guessedLetters, and missedLetters all lack spaces.
+ // These spaces will then be added at draw time.
+
+ /// The word to be guessed.
+ QString m_word;
+ /// goodWord is the hidden word that is filled in during the game.
+ /// Initialized to "_ " * (number of letters in the word).
+ QString m_goodWord;
+
+ /// Contains all letters already guessed.
+ QStringList m_guessedLetters;
+
+ // Stores the missed letters that are shown on the screen.
+ // Initialiazed to "_ " * MAXWRONGGUESSES.
+ QString m_missedLetters;
+ /// How many times you missed.
+ /// When this reaches MAXWRONGGUESSES, you are hanged.
+ int m_numMissedLetters;
+
+
+ // Misc data ----------------
+
+ // Stores the number of the last word. This is to make sure that
+ // the same word is not given twice in a row.
+ int m_lastWordNumber;
+
+ QString m_themeName;
+ KRandomSequence m_random;
+
+ /// true if a hint exists
+ bool m_hintExists;
+ QString m_hint;
+
+ /// true if the language contains accented letters.
+ /// This is true for, among others, es, ca, pt or pt_BR
+ bool m_accentedLetters;
+
+
+ // Graphics ----------------
+
+ // Background picture (sea or desert)
+ QPixmap m_originalBackground; // Original image
+ QPixmap m_resizedBackground; // Resized to fit the window.
+
+ /// The hanged K animation sequence.
+ QPixmap m_animationPics[MAXWRONGGUESSES + 1];
+
+ // Widgets ----------------
+
+ /// The widget where the user enters the letter. Upper case is
+ /// transformed into lower case, except for german(!).
+ KLineEdit *m_letterInput;
+
+ /// After you entered a letter in the line edit click this button
+ /// to see if the letter is in the word or not.
+ KPushButton *m_guessButton;
+};
+
+#endif // KHANGMANVIEW_H
+