File indexing completed on 2024-06-02 04:19:29

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2008-01-20
0007  * Description : User interface for searches
0008  *
0009  * SPDX-FileCopyrightText: 2008-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
0010  * SPDX-FileCopyrightText: 2012-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  *
0012  * SPDX-License-Identifier: GPL-2.0-or-later
0013  *
0014  * ============================================================ */
0015 
0016 #ifndef DIGIKAM_SEARCH_FIELD_GROUP_H
0017 #define DIGIKAM_SEARCH_FIELD_GROUP_H
0018 
0019 // Qt includes
0020 
0021 #include <QList>
0022 #include <QSet>
0023 #include <QWidget>
0024 
0025 // Local includes
0026 
0027 #include "dexpanderbox.h"
0028 #include "coredbsearchxml.h"
0029 
0030 class QGridLayout;
0031 class QLabel;
0032 class QVBoxLayout;
0033 
0034 namespace Digikam
0035 {
0036 
0037 class SearchFieldGroupLabel;
0038 class SearchGroup;
0039 class SearchField;
0040 class VisibilityController;
0041 
0042 class SearchFieldGroup : public QWidget
0043 {
0044     Q_OBJECT
0045 
0046 public:
0047 
0048     explicit SearchFieldGroup(SearchGroup* const parent);
0049 
0050     void addField(SearchField* const field);
0051     void setLabel(SearchFieldGroupLabel* const label);
0052 
0053     SearchField* fieldForName(const QString& fieldName) const;
0054     void write(SearchXmlWriter& writer);
0055 
0056     void reset();
0057 
0058     void markField(SearchField* const field);
0059     void clearMarkedFields();
0060     QList<QRect> areaOfMarkedFields()                   const;
0061 
0062 public Q_SLOTS:
0063 
0064     void setFieldsVisible(bool visible);
0065 
0066 protected Q_SLOTS:
0067 
0068     void slotLabelClicked();
0069 
0070 protected:
0071 
0072     QList<SearchField*>    m_fields;
0073     QGridLayout*           m_layout;
0074     SearchFieldGroupLabel* m_label;
0075     VisibilityController*  m_controller;
0076     QSet<SearchField*>     m_markedFields;
0077 
0078 private:
0079 
0080     // Disable
0081     SearchFieldGroup(QWidget*) = delete;
0082 };
0083 
0084 // -----------------------------------------------------------------------
0085 
0086 class SearchFieldGroupLabel : public QWidget
0087 {
0088     Q_OBJECT
0089 
0090 public:
0091 
0092     explicit SearchFieldGroupLabel(QWidget* const parent);
0093 
0094     void setTitle(const QString& title);
0095 
0096 public Q_SLOTS:
0097 
0098     void displayExpanded();
0099     void displayFolded();
0100 
0101 Q_SIGNALS:
0102 
0103     void clicked();
0104 
0105 protected:
0106 
0107     QString      m_title;
0108     DClickLabel* m_titleLabel;
0109     QLabel*      m_expandLabel;
0110 };
0111 
0112 } // namespace Digikam
0113 
0114 #endif // DIGIKAM_SEARCH_FIELD_GROUP_H