File indexing completed on 2024-12-08 06:26:55

0001 /***************************************************************************
0002  *   Copyright (C) 2002 by Gunnar Schmi Dt <kmouth@schmi-dt.de             *
0003  *             (C) 2015 by Jeremy Whiting <jpwhiting@kde.org>              *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  *   This program is distributed in the hope that it will be useful,       *
0011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0013  *   GNU General Public License for more details.                          *
0014  *                                                                         *
0015  *   You should have received a copy of the GNU General Public License     *
0016  *   along with this program; if not, write to the                         *
0017  *   Free Software Foundation, Inc.,                                       *
0018  *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.          *
0019  ***************************************************************************/
0020 
0021 #ifndef PHRASELIST_H
0022 #define PHRASELIST_H
0023 
0024 // include files for KDE
0025 #include <QUrl>
0026 
0027 // include files for Qt
0028 #include <QWidget>
0029 
0030 class KComboBox;
0031 class KLineEdit;
0032 class QKeyEvent;
0033 class QListView;
0034 class QPrinter;
0035 class QPushButton;
0036 class QStandardItemModel;
0037 class WordCompletion;
0038 
0039 /**
0040  * This class represents a phrase list. It contains methods for manipulating
0041  * the phraselist and also methods for viewing the list.
0042  * The phrase list consists of an edit field for entering phrases and a list
0043  * box for the spoken phrases.
0044  *
0045  * @author Gunnar Schmi Dt
0046  */
0047 
0048 class PhraseList : public QWidget
0049 {
0050     Q_OBJECT
0051 public:
0052     explicit PhraseList(QWidget *parent = nullptr, const QString &name = QString());
0053     ~PhraseList() override;
0054 
0055     /** contains the implementation for printing functionality */
0056     void print(QPrinter *pPrinter);
0057 
0058     QStringList getListSelection();
0059 
0060     bool existListSelection();
0061     bool existEditSelection();
0062 
0063 public Q_SLOTS:
0064     /** Called whenever the user wants the contents of the edit line to be spoken. */
0065     void speak();
0066 
0067     void cut();
0068     void copy();
0069     void paste();
0070 
0071     /** Insert s into the edit field. */
0072     void insert(const QString &s);
0073 
0074     /** Called whenever the user wants the selected list entries to be spoken. */
0075     void speakListSelection();
0076 
0077     void removeListSelection();
0078     void cutListSelection();
0079     void copyListSelection();
0080 
0081     void save();
0082     void open();
0083     void open(const QUrl &url);
0084 
0085     void selectAllEntries();
0086     void deselectAllEntries();
0087 
0088     void configureCompletion();
0089     void saveWordCompletion();
0090     void saveCompletionOptions();
0091     void readCompletionOptions();
0092 
0093 protected Q_SLOTS:
0094     void lineEntered(const QString &phrase);
0095     void contextMenuRequested(const QPoint &pos);
0096     void textChanged(const QString &s);
0097     void selectionChanged();
0098     void keyPressEvent(QKeyEvent *e) override;
0099     void configureCompletionCombo(const QStringList &list);
0100 
0101 private:
0102     QListView *m_listView;
0103     QStandardItemModel *m_model;
0104     KComboBox *dictionaryCombo;
0105     KLineEdit *lineEdit;
0106     QPushButton *speakButton;
0107     QString line;
0108     WordCompletion *completion;
0109 
0110     bool isInSlot;
0111 
0112     void speakPhrase(const QString &phrase);
0113     void setEditLineText(const QString &s);
0114     void insertIntoPhraseList(const QString &phrase, bool clearEditLine);
0115 
0116     void enableMenuEntries();
0117 };
0118 
0119 #endif