/* * Copyright (C) 2001-2005 Anne-Marie Mahfouf 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 #include #include #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 TQWidget { 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(TQString 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( TQPaintEvent * ); void resizeEvent( TQResizeEvent * ); /// Enable hints on mouse right click if Hints exist. virtual void mousePressEvent( TQMouseEvent *mouse ); private: // Painting /// Paint the animated hanged K sequence. void paintHangman(TQPainter &p); void paintWord(TQPainter &p); void paintMisses(TQPainter &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 TQPixmap argument. void setBackground(TQPixmap& ); /// Return true if the word contains the char in the TQString. bool containsChar(const TQString &); void replaceLetters(const TQString &); 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. TQString m_word; /// goodWord is the hidden word that is filled in during the game. /// Initialized to "_ " * (number of letters in the word). TQString m_goodWord; /// Contains all letters already guessed. TQStringList m_guessedLetters; // Stores the missed letters that are shown on the screen. // Initialiazed to "_ " * MAXWRONGGUESSES. TQString 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; TQString m_themeName; KRandomSequence m_random; /// true if a hint exists bool m_hintExists; TQString 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) TQPixmap m_originalBackground; // Original image TQPixmap m_resizedBackground; // Resized to fit the window. /// The hanged K animation sequence. TQPixmap 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