abstractpropertywidget.h 4.38 KB
 schultezub committed Aug 10, 2012 1 2 // ================================================================================================ //  schultezub committed Nov 02, 2012 3 // This file is part of the CAMPVis Software Framework.  schultezub committed Aug 10, 2012 4 //  Christian Schulte zu Berge committed May 05, 2014 5 // If not explicitly stated otherwise: Copyright (C) 2012-2014, all rights reserved,  schultezub committed Nov 02, 2012 6 // Christian Schulte zu Berge  schultezub committed Aug 10, 2012 7 // Chair for Computer Aided Medical Procedures  Christian Schulte zu Berge committed May 05, 2014 8 9 // Technische Universitaet Muenchen // Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany  Christian Schulte zu Berge committed Dec 13, 2013 10 //  schultezub committed Nov 02, 2012 11 // For a full list of authors and contributors, please refer to the file "AUTHORS.txt".  schultezub committed Aug 10, 2012 12 //  Christian Schulte zu Berge committed Dec 13, 2013 13 14 15 16 // Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file // except in compliance with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0  schultezub committed Aug 10, 2012 17 //  Christian Schulte zu Berge committed Dec 13, 2013 18 19 20 21 // Unless required by applicable law or agreed to in writing, software distributed under the // License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, // either express or implied. See the License for the specific language governing permissions // and limitations under the License.  schultezub committed Aug 10, 2012 22 23 24 // // ================================================================================================  schultezub committed Aug 03, 2012 25 26 27 28 #ifndef ABSTRACTPROPERTYWIDGET_H__ #define ABSTRACTPROPERTYWIDGET_H__ #include "sigslot/sigslot.h"  schultezub committed Feb 06, 2013 29 #include "tbb/atomic.h"  schultezub committed Aug 03, 2012 30 #include  schultezub committed Aug 06, 2012 31 32 #include #include  schultezub committed Aug 03, 2012 33   schultezub committed Oct 26, 2012 34 namespace campvis {  schultezub committed Aug 03, 2012 35  class AbstractProperty;  36  class DataContainer;  schultezub committed Aug 03, 2012 37 38 39 40  /** * Abstract base class for property widgets. */  41  class AbstractPropertyWidget : public QWidget, public sigslot::has_slots {  schultezub committed Aug 03, 2012 42 43 44 45 46  Q_OBJECT; public: /** * Creates a new PropertyWidget for the property \a property.  Artur Grunau committed Sep 21, 2013 47 48 49  * * If displayBoxed is true, the widget is displayed vertically in a QGroupBox. *  50  * \param property The property the widget shall handle.  Artur Grunau committed Sep 21, 2013 51  * \param displayBoxed Should the widget be displayed in a group box?  52 53  * \param dataContainer DataContainer to use (optional), defaults to nullptr. However, some derived classed might need a valid pointer here! * \param parent Parent Qt widget, defaults to nullptr.  schultezub committed Aug 03, 2012 54  */  55  AbstractPropertyWidget(AbstractProperty* property, bool displayBoxed = false, DataContainer* dataContainer = nullptr, QWidget* parent = nullptr);  schultezub committed Aug 03, 2012 56 57 58 59 60 61  /** * Destructor */ virtual ~AbstractPropertyWidget();  Declara Denis committed Feb 18, 2015 62 63 64 65 66 67 68  /** * Shows or hides the label that appears on the left hand side of the widget. * * \param isVisible Wether the label should be shown or not */ void setLabelVisibile(bool isVisible);  schultezub committed Aug 03, 2012 69 70 71 72  protected: /** * Adds a widget to the local Qt layout. */  73  void addWidget(QWidget* widget, int stretch = 1);  schultezub committed Aug 03, 2012 74   Artur Grunau committed Sep 21, 2013 75  AbstractProperty* _property; ///< The property this widget handles  76  DataContainer* _dataContainer; ///< DataContainer to use (e.g. to populate GUI), may be 0!  Artur Grunau committed Sep 21, 2013 77 78 79 80 81  /// Semaphore acts as flag whether the widget shall ignore incoming signals from properties being updated. tbb::atomic _ignorePropertyUpdates; protected slots:  schultezub committed Aug 03, 2012 82 83 84  /** * Gets called when the property has changed, so that widget can update its state. */  Christian Schulte zu Berge committed Jul 16, 2015 85  virtual void updateWidgetFromProperty() {};  schultezub committed Aug 03, 2012 86   Artur Grunau committed Sep 21, 2013 87 88 89 90 91 92 93 94 95 96 97  signals: /** * Internal signal used to update the property widget in a thread-safe way. * * This class' \ref onPropertyChanged() slot is invoked from non-GUI threads. As a result, * \ref updateWidgetFromProperty() couldn't access any Qt widgets safely if it was called from there directly, * because it would execute in a non-GUI thread. However, if we invoke \ref updateWidgetFromProperty() via * a signal-slot connection with \ref s_propertyChanged(), Qt takes care of queueing slot accesses in the GUI * thread for us. */ void s_propertyChanged(const AbstractProperty* property);  schultezub committed Aug 03, 2012 98 99 100 101 102 103  private: /// Slot getting called when the property has changed, so that the widget can be updated. virtual void onPropertyChanged(const AbstractProperty* property); QBoxLayout* _layout;  schultezub committed Aug 06, 2012 104  QLabel* _titleLabel;  schultezub committed Aug 03, 2012 105 106 107 108  }; } #endif // ABSTRACTPROPERTYWIDGET_H__