1 /* 2 This file is part of the KDE libraries 3 SPDX-FileCopyrightText: 2001-2004 Anders Lund <anders@alweb.dk> 4 5 SPDX-License-Identifier: LGPL-2.0-only 6 */ 7 8 #ifndef KMIMETYPE_CHOOSER_H 9 #define KMIMETYPE_CHOOSER_H 10 11 #include <QDialog> 12 #include <QWidget> 13 #include <kwidgetsaddons_export.h> 14 #include <memory> 15 16 /** 17 * @class KMimeTypeChooser kmimetypechooser.h KMimeTypeChooser 18 * 19 * This widget provides a checkable list of all available MIME types, presented 20 * as a treeview, with the MIME type comment and glob patterns as individual columns. 21 * It allows users to edit a MIME type by launching a MIME type editor (if it's 22 * available on the system). 23 * 24 * When the user clicks the OK button, a list of the selected MIME type names 25 * and associated glob patterns can be retrieved respectively; those lists can 26 * be used to populate a text line edit, or set a configuration entry... etc. 27 * 28 * @author Anders Lund (anders at alweb dk), jan 23, 2002 29 */ 30 class KWIDGETSADDONS_EXPORT KMimeTypeChooser : public QWidget 31 { 32 Q_OBJECT 33 34 public: 35 /** 36 * Buttons and data for display. 37 */ 38 enum Visuals { 39 Comments = 1, ///< Show the MIME type comment (e.g. "HTML Document") in a column 40 Patterns = 2, ///< Show the MIME types glob patterns (e.g. "*.html;*.htm") in a column 41 EditButton = 4 ///< Show the "Edit" button, allowing to edit the selected type 42 }; 43 /** 44 * Create a new KMimeTypeChooser. 45 * 46 * @param text A plain text line to display above the list 47 * @param selectedMimeTypes A list of MIME type names, these will be initially selected 48 * in the list (provided they exist) 49 * @param visuals OR'd KMimetypeChooser::Visuals enum values to to set whether to 50 * show the MIME type comment and glob patterns columns and an Edit button, 51 * respectively, or not 52 * @param defaultGroup The group (e.g. "text") to expand in the treeview when no groups 53 * are selected. If not provided, no group is expanded by default. 54 * If @p groupsToShow is provided and it doesn't include @p defaultGroup, this 55 * parameter is ignored 56 * @param groupsToShow a list of MIME type groups to show. If empty, all groups are shown 57 * @param parent The parent widget to use 58 */ 59 explicit KMimeTypeChooser(const QString &text = QString(), 60 const QStringList &selectedMimeTypes = QStringList(), 61 const QString &defaultGroup = QString(), 62 const QStringList &groupsToShow = QStringList(), 63 int visuals = Comments | Patterns | EditButton, 64 QWidget *parent = nullptr); 65 ~KMimeTypeChooser() override; 66 67 /** 68 * @return a list of all selected MIME type names 69 */ 70 QStringList mimeTypes() const; 71 /** 72 * @return a list of the filename glob patterns associated with all selected MIME types 73 */ 74 QStringList patterns() const; 75 76 private: 77 std::unique_ptr<class KMimeTypeChooserPrivate> const d; 78 }; 79 80 /** 81 * @class KMimeTypeChooserDialog kmimetypechooser.h KMimeTypeChooserDialog 82 * 83 * @short A dialog to select MIME types from the list of available ones on the system 84 * 85 * This dialog embeds KMimeTypeChooser widget, presenting a checkable tree list of 86 * MIME types, each with its associated icon, and optionally associated glob patterns 87 * (displayed in a separate column); also an optional Edit button to launch a 88 * MIME type editor to edit the selected MIME type. 89 * 90 * Here is an example, using the dialog to set the text of two line edits with the 91 * list of MIME type names and glob patterns, respectively, of the MIME types that 92 * the user has selected: 93 * 94 * @code 95 * QLineEdit *leMimetypes = new QLineEdit(); 96 * QLineEdit *leGlobPatterns = new QLineEdit(); 97 * [...] 98 * QString textLine = i18n("Select MIME types"); 99 * QStringList mimeList = QStringList::split(QRegularExpression("\\s*;\\s*"), leMimetypes->text()); 100 * KMimeTypeChooserDialog dlg(i18n("Select MIME Types"), textLine, mimeList, "text", this); 101 * if (dlg.exec() == QDialog::Accepted) { 102 * leMimetypes->setText(dlg.chooser()->mimeTypes().join(";")); 103 * leGlobPatterns->setText(dlg.chooser()->patterns().join(";")); 104 * } 105 * @endcode 106 * 107 * \image html kmimetypechooserdialog.png "KMimeTypeChooserDialog in action" 108 * 109 * @author Anders Lund (anders at alweb dk) dec 19, 2001 110 */ 111 class KWIDGETSADDONS_EXPORT KMimeTypeChooserDialog : public QDialog 112 { 113 Q_OBJECT 114 public: 115 /** 116 * Create a KMimeTypeChooser dialog. 117 * 118 * @param title The title of the dialog 119 * @param text A plain text line to display above the list 120 * @param selectedMimeTypes A list of MIME type names, these will be initially selected 121 * in the list, provided they exist 122 * @param visuals OR'd KMimetypeChooser::Visuals enum values to to set whether to 123 * show the MIME type comment and glob patterns columns and an Edit button, 124 * respectively, or not 125 * @param defaultGroup The group (e.g. "text") to expand in the treeview when no 126 * groups are selected. If not provided, no group is expanded by default 127 * If @p groupsToShow is provided and it doesn't include @p defaultGroup, 128 * this parameter is ignored 129 * @param groupsToShow A list of MIME type groups to show. If empty, all groups are shown 130 * @param parent The parent widget to use 131 */ 132 explicit KMimeTypeChooserDialog(const QString &title = QString(), 133 const QString &text = QString(), 134 const QStringList &selectedMimeTypes = QStringList(), 135 const QString &defaultGroup = QString(), 136 const QStringList &groupsToShow = QStringList(), 137 int visuals = KMimeTypeChooser::Comments | KMimeTypeChooser::Patterns | KMimeTypeChooser::EditButton, 138 QWidget *parent = nullptr); 139 140 /** 141 * @overload 142 */ 143 KMimeTypeChooserDialog(const QString &title, 144 const QString &text, 145 const QStringList &selectedMimeTypes, 146 const QString &defaultGroup, 147 QWidget *parent = nullptr); 148 149 ~KMimeTypeChooserDialog() override; 150 151 /** 152 * @return a pointer to the KMimeTypeChooser widget 153 */ 154 KMimeTypeChooser *chooser(); 155 156 QSize sizeHint() const override; 157 158 private: 159 std::unique_ptr<class KMimeTypeChooserDialogPrivate> const d; 160 }; 161 #endif // _KMIMETYPE_CHOOSER_H_ 162