/*************************************************************************** * ktouch.h * * -------- * * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai * * ghorwin@users.sourceforge.net * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #ifndef KTOUCH_H #define KTOUCH_H #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include class TQLabel; class TDEToggleAction; class TDEActionMenu; class TDESelectAction; class KTouchStatus; class KTouchSlideLine; class KTouchKeyboardWidget; class KTouchTrainer; class KTouchPrefTrainingLayout; class KTouchPrefKeyboardLayout; class KTouchPrefGeneralLayout; class KTouchPrefColorsLayout; #include "ktouchlecture.h" #include "ktouchstatisticsdata.h" /// This is the main window of KTouch. /// /// It handles the lecture, training data, status and all other widgets that are /// needed to get the program running. Since all special tasks are delegated to the /// appropriate widgets and classes, the remaining code in KTouch is basically the /// startup and TDEAction stuff.

/// A word about dialogs. All dialogs in this program are not created by default. /// Instead they are created "on first use". This /// saves memory (because we don't need them always) and the startup speed increases.

/// One central function - the keyPressEvent() - is responsable for getting the actual /// typed char. It delegates the character to the trainer /// (KTouchTrainer), which will then process it. So the heavy work lies in the trainer /// object and all the widgets. class KTouch : public TDEMainWindow { Q_OBJECT public: /// Constructor, creates the KTouch proggy. KTouch(); /// Destructor, releases memory of KTouch trainer. ~KTouch(); /// Returns the available lecture files const TQStringList& lectureFiles() const { return m_lectureFiles; } /// Returns the statistics object for the current lecture (as reference) KTouchLectureStats& getCurrentLectureStats(); /// Clears the statistics data. void clearStatistics(); /// Updates the status bar text. void changeStatusbarMessage(const TQString& text); /// Updates the status bar statistics. void changeStatusbarStats(unsigned int level_correct, unsigned int level_total, unsigned int level_words, unsigned int session_correct, unsigned int session_total, unsigned int session_words); public slots: /// Will be called when the "Apply"-button has been pressed in the preferences /// dialog or when the user accepted the changes using the "OK"-button. void applyPreferences(); /// Called from the configuration dialog. void configOverrideLectureFontToggled(bool on); /// Called from the configuration dialog. void configOverrideKeyboardFontToggled(bool on); /// Called from the configuration dialog. void configAutoLevelChangeToggled(bool on); /// Called from the configuration dialog. void configCommonColorsToggled(bool on); void fileOpenLecture(); ///< The action File->Open lecture... void fileEditLecture(); ///< The action File->Edit lecture... void fileEditColors(); ///< The action File->Edit colors... void fileEditKeyboard(); ///< The action File->Edit keyboard... void fileQuit(); ///< The action File->Quit void trainingNewSession(); ///< The action Training->Start new training session... void trainingPause(); ///< The action Training->Pause training void trainingStatistics(); ///< The action Training->Show training statistics... void optionsPreferences(); ///< The action Settings->Configure KTouch... /// Quick-changes the keyboard layout (called from menu). void changeKeyboard(int num); /// Quick-changes the colour scheme used on the keyboard (called from menu). void changeColor(int num); /// Quick-changes the current training lecture file (called from menu). void changeLecture(int num); protected: /// Reimplementated to save preferences and bool queryExit(); /// Some layout fixes here... void resizeEvent(TQResizeEvent *); /// Accepts a typed char. void keyPressEvent(TQKeyEvent *keyEvent); void imEndEvent (TQIMEvent *e); private: // *** BEGIN - Session management *** /// Will be called when this app is restored due to session management. void readProperties(TDEConfig *config); /// Will be called when the app should save its state for session management purposes. void saveProperties(TDEConfig *config); // *** END - Session management *** /// Initialises the program during a normal startup void init(); /// Creates the layout and GUI setup for a practice session void initTrainingSession(); /// Creates the (standard) actions and entries in the menu. void setupActions(); /// This function updates the font used in the sliding line of a font suggestions was /// made for the current lecture. /// Call this function whenever you have read a new lecture file to update /// the slide line widget. void updateFontFromLecture(); /// This function populates the file lists with the installed training, keyboard and /// examination files. void updateFileLists(); /// Updates the check mark in the lecture-quick-selection menu depending on the /// lecture in Prefs::currentLectureFile(). void updateLectureActionCheck(); /// Updates the check mark in the keyboard-quick-selection menu depending on the /// lecture in Prefs::currentKeyboardFile(). void updateKeyboardActionCheck(); // *** Public member variables *** TDEAction *m_trainingPause; ///< Action for "pause training session". TDESelectAction *m_keyboardLayoutAction; TDESelectAction *m_keyboardColorAction; TDESelectAction *m_defaultLectureAction; KTouchStatus *m_statusWidget; ///< Pointer to the status widget on top of the main widget. KTouchSlideLine *m_slideLineWidget; ///< Pointer to the sliding line widget. KTouchKeyboardWidget *m_keyboardWidget; ///< Pointer to the keyboard widget. KTouchTrainer *m_trainer; ///< The training 'master' (runs the training). KTouchLecture m_lecture; ///< The lecture data. KTouchPrefGeneralLayout * m_pageGeneral; ///< The general configuration page. KTouchPrefTrainingLayout * m_pageTraining; ///< The training configuration page. KTouchPrefKeyboardLayout * m_pageKeyboard; ///< The keyboard configuration page. KTouchPrefColorsLayout * m_pageColors; ///< The color scheme configuration page. TQStringList m_lectureFiles; ///< A list of all default lecture files. TQStringList m_lectureTitles; ///< A list of the titles of all default lecture files. TQStringList m_examinationFiles; ///< A list of all default examination files. TQStringList m_examinationTitles; ///< A list of the titles of all default examination files. TQStringList m_keyboardFiles; ///< A list of all default keyboard layout files. TQStringList m_keyboardTitles; ///< A list of the titles of all default keyboard layout files. KTouchStatisticsData m_stats; ///< All user statistics are kept here. TQChar m_lastDeadKey; ///< Temporary storage of last dead key. }; /// A global pointer to the main widget (actually only used to retrieve some data). extern KTouch * KTouchPtr; #endif // KTOUCH_H