1 /***************************************************************************
2     qgsexternalresourcewidgetwrapper.h
3      --------------------------------------
4  begin                : 16.12.2015
5  copyright            : (C) 2015 by Denis Rouzaud
6  email                : denis.rouzaud@gmail.com
7  ***************************************************************************
8  *                                                                         *
9  *   This program is free software; you can redistribute it and/or modify  *
10  *   it under the terms of the GNU General Public License as published by  *
11  *   the Free Software Foundation; either version 2 of the License, or     *
12  *   (at your option) any later version.                                   *
13  *                                                                         *
14  ***************************************************************************/
15 
16 #ifndef QGSEXTERNALRESOURCEWIDGETWRAPPER_H
17 #define QGSEXTERNALRESOURCEWIDGETWRAPPER_H
18 
19 class QgsExternalResourceWidget;
20 
21 class QLabel;
22 class QLineEdit;
23 
24 #include "qgseditorwidgetwrapper.h"
25 #include "qgis_gui.h"
26 #include "qgsattributeform.h"
27 
28 SIP_NO_FILE
29 
30 
31 
32 /**
33  * \ingroup gui
34  * \brief Wraps a file name widget. Will offer a file browser to choose files.
35  * \note not available in Python bindings
36  */
37 
38 /**
39  * \brief The QgsExternalResourceWidgetWrapper class wraps a external resource widget
40  */
41 class GUI_EXPORT QgsExternalResourceWidgetWrapper : public QgsEditorWidgetWrapper
42 {
43     Q_OBJECT
44   public:
45 
46     /**
47      * Constructor for QgsExternalResourceWidgetWrapper.
48      *
49      * The \a layer and \a fieldIdx arguments specify the vector layer field associated with the wrapper.
50      *
51      * The \a editor argument indicates the editor widget to use with the wrapper. This can be NULLPTR if a
52      * new widget should be autogenerated.
53      *
54      * A \a parent widget for this widget wrapper and the created widget can also be specified.
55      */
56     explicit QgsExternalResourceWidgetWrapper( QgsVectorLayer *layer, int fieldIdx, QWidget *editor = nullptr, QWidget *parent = nullptr );
57 
58     // QgsEditorWidgetWrapper interface
59   public:
60     QVariant value() const override;
61     void showIndeterminateState() override;
62 
63   protected:
64     QWidget *createWidget( QWidget *parent ) override;
65     void initWidget( QWidget *editor ) override;
66     bool valid() const override;
67 
68   public slots:
69     void setFeature( const QgsFeature &feature ) override;
70     void setEnabled( bool enabled ) override;
71 
72     /**
73      * Will be called when a value in the current edited form or table row
74      * changes
75      *
76      * \param attribute         The name of the attribute that changed.
77      * \param newValue          The new value of the attribute.
78      * \param attributeChanged  If TRUE, it corresponds to an actual change of the feature attribute
79      * \since QGIS 3.16
80      */
81     void widgetValueChanged( const QString &attribute, const QVariant &newValue, bool attributeChanged );
82 
83 
84   private:
85     void updateValues( const QVariant &value, const QVariantList & = QVariantList() ) override;
86     void updateConstraintWidgetStatus() override;
87     void updateProperties( const QgsFeature &feature );
88 
89     QLineEdit *mLineEdit = nullptr;
90     QLabel *mLabel = nullptr;
91     QgsAttributeForm *mForm = nullptr;
92     QgsExternalResourceWidget *mQgsWidget = nullptr;
93 
94     friend class TestQgsExternalResourceWidgetWrapper;
95 
96 };
97 
98 #endif // QGSEXTERNALRESOURCEWIDGETWRAPPER_H
99