File indexing completed on 2024-06-16 05:01:25

0001 /* Copyright (C) 2012 Thomas Lübking <thomas.luebking@gmail.com>
0002 
0003    This file is part of the Trojita Qt IMAP e-mail client,
0004    http://trojita.flaska.net/
0005 
0006    This program is free software; you can redistribute it and/or
0007    modify it under the terms of the GNU General Public License as
0008    published by the Free Software Foundation; either version 2 of
0009    the License or (at your option) version 3 or any later version
0010    accepted by the membership of KDE e.V. (or its successor approved
0011    by the membership of KDE e.V.), which shall act as a proxy
0012    defined in Section 14 of version 3 of the license.
0013 
0014    This program is distributed in the hope that it will be useful,
0015    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017    GNU General Public License for more details.
0018 
0019    You should have received a copy of the GNU General Public License
0020    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021 */
0022 
0023 #pragma once
0024 
0025 class QTimer;
0026 
0027 #include <QList>
0028 #include <QUrl>
0029 #include <QTextEdit>
0030 
0031 class ComposerTextEdit : public QTextEdit {
0032     Q_OBJECT
0033 public:
0034     explicit ComposerTextEdit(QWidget *parent = 0);
0035     /**
0036      * use the view to display a notification for @p timeout ms
0037      * using an empty or null string will clear the notification at once
0038      * a @p timeout of 0ms shows the notification until it's replaced or reset
0039      */
0040     void notify(const QString &n, uint timeout = 0);
0041     /** 80em viewport **/
0042     int idealWidth() const;
0043 signals:
0044     void sendRequest();
0045     void urlsAdded(QList<QUrl> urls);
0046 protected:
0047     /** DND reimplementation **/
0048     bool canInsertFromMimeData( const QMimeData * source ) const;
0049     void insertFromMimeData(const QMimeData *source);
0050     void keyPressEvent(QKeyEvent *event);
0051     void keyReleaseEvent(QKeyEvent *event);
0052     /** painter reimplementation for notification **/
0053     void paintEvent(QPaintEvent *pe);
0054     virtual void contextMenuEvent(QContextMenuEvent *e);
0055 private slots:
0056     void resetNotification();
0057     void slotPasteAsQuotation();
0058 private:
0059     QString m_notification;
0060     QTimer *m_notificationTimer;
0061     bool m_couldBeSendRequest;
0062     QAction *m_pasteQuoted;
0063     int m_wrapIndicatorOffset;
0064     QColor m_wrapIndicatorColor;
0065 };