1 /* -*- c++ -*- 2 simplestringlisteditor.h 3 4 This file is part of KMail, the KDE mail client. 5 SPDX-FileCopyrightText: 2001 Marc Mutz <mutz@kde.org> 6 7 SPDX-FileCopyrightText: 2013-2021 Laurent Montel <montel@kde.org> 8 9 SPDX-License-Identifier: GPL-2.0-or-later 10 */ 11 12 #pragma once 13 14 #include <QStringList> 15 #include <QWidget> 16 17 #include "pimcommon_export.h" 18 19 // 20 // 21 // SimpleStringListEditor (a listbox with "add..." and "remove" buttons) 22 // 23 // 24 namespace PimCommon 25 { 26 class SimpleStringListEditorPrivate; 27 /** 28 * @brief The SimpleStringListEditor class 29 * @author Laurent Montel <montel@kde.org> 30 */ 31 class PIMCOMMON_EXPORT SimpleStringListEditor : public QWidget 32 { 33 Q_OBJECT 34 public: 35 enum ButtonCode { 36 None = 0, 37 Add = 1, 38 Remove = 2, 39 Modify = 4, 40 Up = 8, 41 Down = 16, 42 Custom = 32, 43 All = Add | Remove | Modify | Up | Down, 44 Unsorted = Add | Remove | Modify 45 }; 46 47 /** Constructor. Populates the list with @p strings. */ 48 explicit SimpleStringListEditor(QWidget *parent = nullptr, 49 ButtonCode buttons = Unsorted, 50 const QString &addLabel = QString(), 51 const QString &removeLabel = QString(), 52 const QString &modifyLabel = QString(), 53 const QString &addDialogLabel = QString()); 54 55 ~SimpleStringListEditor() override; 56 /** Sets the list of strings displayed to @p strings */ 57 void setStringList(const QStringList &strings); 58 59 /** Adds @p strings to the list of displayed strings */ 60 void appendStringList(const QStringList &strings); 61 62 /** Retrieves the current list of strings */ 63 Q_REQUIRED_RESULT QStringList stringList() const; 64 65 /** Sets the text of button @p button to @p text */ 66 void setButtonText(ButtonCode button, const QString &text); 67 68 void setUpDownAutoRepeat(bool b); 69 Q_REQUIRED_RESULT QSize sizeHint() const override; 70 71 virtual void addNewEntry(); 72 virtual QString customEntry(const QString &text); 73 74 Q_REQUIRED_RESULT virtual QString modifyEntry(const QString &text); 75 void setAddDialogLabel(const QString &addDialogLabel); 76 void setAddDialogTitle(const QString &str); 77 78 void setModifyDialogTitle(const QString &str); 79 void setModifyDialogLabel(const QString &str); 80 81 void setRemoveDialogLabel(const QString &removeDialogLabel); 82 83 Q_SIGNALS: 84 /** Connected slots can alter the argument to be added or set the 85 argument to QString() to suppress adding. 86 */ 87 void aboutToAdd(QString &); 88 void changed(); 89 90 protected: 91 void insertNewEntry(const QString &newEntry); 92 93 protected Q_SLOTS: 94 void slotAdd(); 95 void slotRemove(); 96 void slotModify(); 97 void slotUp(); 98 void slotDown(); 99 void slotCustomize(); 100 101 void slotSelectionChanged(); 102 103 private: 104 void slotContextMenu(const QPoint &); 105 bool containsString(const QString &str); 106 std::unique_ptr<SimpleStringListEditorPrivate> const d; 107 }; 108 } 109 110