File indexing completed on 2023-09-24 08:19:51

0001 /* ============================================================
0002  *
0003  * This file is a part of KDE project
0004  *
0005  *
0006  * Date        : 2009-05-22
0007  * Description : Flickr/23HQ file list view and items.
0008  *
0009  * Copyright (C) 2009 by Pieter Edelman <pieter dot edelman at gmx dot net>
0010  *
0011  * This program is free software; you can redistribute it
0012  * and/or modify it under the terms of the GNU General
0013  * Public License as published by the Free Software Foundation;
0014  * either version 2, or (at your option) any later version.
0015  *
0016  * This program is distributed in the hope that it will be useful,
0017  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0019  * GNU General Public License for more details.
0020  *
0021  * ============================================================ */
0022 
0023 #ifndef FLICKRLIST_H
0024 #define FLICKRLIST_H
0025 
0026 // Qt includes
0027 
0028 #include <QUrl>
0029 #include <QList>
0030 #include <QLineEdit>
0031 
0032 // Local includes
0033 
0034 #include "kpimageslist.h"
0035 
0036 using namespace KIPIPlugins;
0037 
0038 namespace KIPIFlickrPlugin
0039 {
0040 
0041 class FlickrList : public KPImagesList
0042 {
0043     Q_OBJECT
0044 
0045 public:
0046 
0047     /** The different columns in a Flickr list.
0048      */
0049     enum FieldType
0050     {
0051         SAFETYLEVEL = KPImagesListView::User1,
0052         CONTENTTYPE = KPImagesListView::User2,
0053         TAGS        = KPImagesListView::User3,
0054         PUBLIC      = KPImagesListView::User4,
0055         FAMILY      = KPImagesListView::User5,
0056         FRIENDS     = KPImagesListView::User6
0057     };
0058 
0059     /** The different possible safety levels recognized by Flickr.
0060      */
0061     enum SafetyLevel
0062     {
0063         SAFE        = 1,
0064         MODERATE    = 2,
0065         RESTRICTED  = 3,
0066         MIXEDLEVELS = -1
0067     };
0068 
0069     /** The different possible content types recognized by Flickr.
0070      */
0071     enum ContentType
0072     {
0073         PHOTO      = 1,
0074         SCREENSHOT = 2,
0075         OTHER      = 3,
0076         MIXEDTYPES = -1
0077     };
0078 
0079 public:
0080 
0081     explicit FlickrList(QWidget* const parent = nullptr, bool = false);
0082 
0083     void setPublic(Qt::CheckState);
0084     void setFamily(Qt::CheckState);
0085     void setFriends(Qt::CheckState);
0086     void setSafetyLevels(SafetyLevel);
0087     void setContentTypes(ContentType);
0088 
0089 Q_SIGNALS:
0090 
0091     // Signal for notifying when the states of one of the permission columns has
0092     // changed. The first argument specifies which permission has changed, the
0093     // second the state.
0094     void signalPermissionChanged(FlickrList::FieldType, Qt::CheckState);
0095 
0096     void signalSafetyLevelChanged(FlickrList::SafetyLevel);
0097     void signalContentTypeChanged(FlickrList::ContentType);
0098 
0099 public Q_SLOTS:
0100 
0101     void slotAddImages(const QList<QUrl>& list) override;
0102 
0103 private:
0104 
0105     void setPermissionState(FieldType, Qt::CheckState);
0106     void singlePermissionChanged(QTreeWidgetItem*, int);
0107     void singleComboBoxChanged(QTreeWidgetItem*, int);
0108 
0109 
0110 private Q_SLOTS:
0111 
0112     void slotItemChanged(QTreeWidgetItem*, int);
0113     void slotItemClicked(QTreeWidgetItem*, int);
0114 
0115 private:
0116 
0117     Qt::CheckState          m_public;
0118     Qt::CheckState          m_family;
0119     Qt::CheckState          m_friends;
0120     FlickrList::SafetyLevel m_safetyLevel;
0121     FlickrList::ContentType m_contentType;
0122 
0123     // Used to separate the ImagesList::itemChanged signals that were caused
0124     // programmatically from those caused by the user.
0125     bool                    m_userIsEditing;
0126 
0127     bool                    m_is23;
0128 };
0129 
0130 // -------------------------------------------------------------------------
0131 
0132 class FlickrListViewItem : public KPImagesListViewItem
0133 {
0134 
0135 public:
0136 
0137     FlickrListViewItem(KPImagesListView* const view, const QUrl& url,
0138                        bool, bool, bool, bool,
0139                        FlickrList::SafetyLevel, FlickrList::ContentType);
0140     ~FlickrListViewItem();
0141 
0142     void setPublic(bool);
0143     void setFamily(bool);
0144     void setFriends(bool);
0145     void setSafetyLevel(FlickrList::SafetyLevel);
0146     void setContentType(FlickrList::ContentType);
0147     bool isPublic() const;
0148     bool isFamily() const;
0149     bool isFriends() const;
0150     FlickrList::SafetyLevel safetyLevel() const;
0151     FlickrList::ContentType contentType() const;
0152 
0153     /**
0154      * Returns the list of extra tags that the user specified for this image.
0155      */
0156     QStringList extraTags() const;
0157 
0158     /** This method should be called when one of the checkboxes is clicked.
0159      */
0160     void toggled();
0161 
0162     void updateItemWidgets() override;
0163 
0164 private:
0165 
0166     bool                    m_is23;
0167 
0168     bool                    m_public;
0169     bool                    m_family;
0170     bool                    m_friends;
0171 
0172     FlickrList::SafetyLevel m_safetyLevel;
0173     FlickrList::ContentType m_contentType;
0174 
0175     /** LineEdit used for extra tags per image.
0176      */
0177     QLineEdit*              m_tagLineEdit;
0178 };
0179 
0180 } // namespace KIPIFlickrPlugin
0181 
0182 #endif /* FLICKRLIST_H */