File indexing completed on 2024-06-23 05:18:36

0001 /*
0002     SPDX-FileCopyrightText: 2010 Casey Link <unnamedrambler@gmail.com>
0003     SPDX-FileCopyrightText: 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include <QSharedPointer>
0011 
0012 #include "MessageComposer/Recipient"
0013 
0014 #include <Libkdepim/MultiplyingLine>
0015 #include <MessageComposer/ComposerLineEdit>
0016 
0017 #include <QComboBox>
0018 
0019 namespace MessageComposer
0020 {
0021 class RecipientComboBox : public QComboBox
0022 {
0023     Q_OBJECT
0024 public:
0025     explicit RecipientComboBox(QWidget *parent);
0026 
0027 Q_SIGNALS:
0028     void rightPressed();
0029 
0030 protected:
0031     void keyPressEvent(QKeyEvent *ev) override;
0032 };
0033 /**
0034  * @brief The RecipientLineEdit class
0035  */
0036 class MESSAGECOMPOSER_EXPORT RecipientLineEdit : public MessageComposer::ComposerLineEdit
0037 {
0038     Q_OBJECT
0039 public:
0040     explicit RecipientLineEdit(QWidget *parent);
0041 
0042 Q_SIGNALS:
0043     void deleteMe();
0044     void leftPressed();
0045     void rightPressed();
0046 
0047 protected:
0048     void keyPressEvent(QKeyEvent *ev) override;
0049 };
0050 
0051 /**
0052  * @brief The RecipientLineNG class
0053  */
0054 class MESSAGECOMPOSER_EXPORT RecipientLineNG : public KPIM::MultiplyingLine
0055 {
0056     Q_OBJECT
0057 public:
0058     explicit RecipientLineNG(QWidget *parent);
0059     ~RecipientLineNG() override = default;
0060 
0061     void activate() override;
0062     [[nodiscard]] bool isActive() const override;
0063 
0064     [[nodiscard]] bool isEmpty() const override;
0065     void clear() override;
0066     [[nodiscard]] bool canDeleteLineEdit() const override;
0067 
0068     [[nodiscard]] bool isModified() const override;
0069     void clearModified() override;
0070 
0071     [[nodiscard]] KPIM::MultiplyingLineData::Ptr data() const override;
0072     void setData(const KPIM::MultiplyingLineData::Ptr &data) override;
0073 
0074     void fixTabOrder(QWidget *previous) override;
0075     [[nodiscard]] QWidget *tabOut() const override;
0076 
0077     void setCompletionMode(KCompletion::CompletionMode mode) override;
0078 
0079     [[nodiscard]] int setColumnWidth(int w) override;
0080 
0081     // recipient specific methods
0082     [[nodiscard]] int recipientsCount() const;
0083 
0084     void setRecipientType(Recipient::Type);
0085     [[nodiscard]] Recipient::Type recipientType() const;
0086     [[nodiscard]] QSharedPointer<Recipient> recipient() const;
0087 
0088     void setIcon(const QIcon &icon, const QString &tooltip = QString());
0089 
0090     /**
0091      * Sets the config file used for storing recent addresses.
0092      */
0093     void setRecentAddressConfig(KConfig *config);
0094 
0095     void setEnableIndexSearch(bool enableIndexSearch);
0096     [[nodiscard]] bool enableIndexSearch() const;
0097 
0098     void setEnableAkonadiSearch(bool enableAkonadiSearch);
0099     [[nodiscard]] bool enableAkonadiSearch() const;
0100 
0101     [[nodiscard]] QString rawData() const;
0102 
0103 Q_SIGNALS:
0104     void typeModified(RecipientLineNG *);
0105     void addRecipient(RecipientLineNG *, const QString &);
0106     void countChanged();
0107     void iconClicked();
0108     void activeChanged();
0109 
0110 protected Q_SLOTS:
0111     void slotEditingFinished();
0112     void slotTypeModified();
0113     void analyzeLine(const QString &);
0114 
0115 protected:
0116     bool eventFilter(QObject *watched, QEvent *event) override;
0117 
0118 private:
0119     MESSAGECOMPOSER_NO_EXPORT void dataFromFields();
0120     MESSAGECOMPOSER_NO_EXPORT void fieldsFromData();
0121     MESSAGECOMPOSER_NO_EXPORT void slotAddRecipient(const QString &);
0122     RecipientComboBox *mCombo = nullptr;
0123     RecipientLineEdit *mEdit = nullptr;
0124     int mRecipientsCount = 0;
0125     bool mModified = false;
0126     QSharedPointer<Recipient> mData;
0127 };
0128 }