[2] | 1 | // %flair:license{
|
---|
[13] | 2 | // This file is part of the Flair framework distributed under the
|
---|
| 3 | // CECILL-C License, Version 1.0.
|
---|
[2] | 4 | // %flair:license}
|
---|
| 5 | /*!
|
---|
| 6 | * \file Widget.h
|
---|
| 7 | * \brief Abstract class for all Framework's widget classes
|
---|
| 8 | * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253
|
---|
| 9 | * \date 2012/05/02
|
---|
| 10 | * \version 4.0
|
---|
| 11 | */
|
---|
| 12 |
|
---|
| 13 | #ifndef WIDGET_H
|
---|
| 14 | #define WIDGET_H
|
---|
| 15 |
|
---|
| 16 | #include <Object.h>
|
---|
| 17 | //#include <io_data.h>
|
---|
| 18 | #include <libxml/xpath.h>
|
---|
| 19 |
|
---|
| 20 | class Widget_impl;
|
---|
| 21 | class FrameworkManager_impl;
|
---|
| 22 |
|
---|
[13] | 23 | namespace flair {
|
---|
| 24 | namespace gui {
|
---|
[2] | 25 |
|
---|
[13] | 26 | /*! \class Widget
|
---|
| 27 | *
|
---|
| 28 | * \brief Abstract class for all Framework's widget classes
|
---|
| 29 | *
|
---|
| 30 | * A widget is an object to display on the ground station. \n
|
---|
| 31 | * Communication with ground station is done through xml files; properties of
|
---|
| 32 | *theses files
|
---|
| 33 | * are modified through appropriate method. \n
|
---|
| 34 | * A xml file is used for default values of the Widget, if it has been specified
|
---|
| 35 | *in the
|
---|
| 36 | * constructor of the FrameworkManager.
|
---|
| 37 | */
|
---|
| 38 | class Widget : public core::Object {
|
---|
| 39 | friend class core::FrameworkManager;
|
---|
| 40 | friend class ::Widget_impl;
|
---|
| 41 | friend class ::FrameworkManager_impl;
|
---|
[2] | 42 |
|
---|
[13] | 43 | public:
|
---|
| 44 | /*!
|
---|
| 45 | * \brief Constructor
|
---|
| 46 | *
|
---|
| 47 | * Construct a Widget, the xml file specified to the FrameworkManager's
|
---|
| 48 | * constructor is sued for default values. \n
|
---|
| 49 | * Two Widget with same parent must have different names. If a brother Widget
|
---|
| 50 | *already
|
---|
| 51 | * has the same name, the name of the new one will be automatically changed. \n
|
---|
| 52 | * Type must agree with predifined (hard coded) types
|
---|
| 53 | * in ground station code.
|
---|
| 54 | *
|
---|
| 55 | * \param parent parent
|
---|
| 56 | * \param name name
|
---|
| 57 | * \param type type
|
---|
| 58 | */
|
---|
| 59 | Widget(const Widget *parent, std::string name, std::string type);
|
---|
[2] | 60 |
|
---|
[13] | 61 | /*!
|
---|
| 62 | * \brief Destructor
|
---|
| 63 | *
|
---|
| 64 | */
|
---|
| 65 | virtual ~Widget();
|
---|
[2] | 66 |
|
---|
[13] | 67 | /*!
|
---|
| 68 | * \brief Set enabled
|
---|
| 69 | *
|
---|
| 70 | * Enable or disable the Widget on the ground station. \n
|
---|
| 71 | * A disabled widget is greyed out on the ground station
|
---|
| 72 | * and in unmodifiable.
|
---|
| 73 | *
|
---|
| 74 | * \param status
|
---|
| 75 | */
|
---|
| 76 | void setEnabled(bool status);
|
---|
[2] | 77 |
|
---|
[13] | 78 | /*!
|
---|
| 79 | * \brief Is enabled?
|
---|
| 80 | *
|
---|
| 81 | * \return true if widget is enabled
|
---|
| 82 | */
|
---|
| 83 | bool isEnabled(void) const;
|
---|
[2] | 84 |
|
---|
[13] | 85 | protected:
|
---|
| 86 | /*!
|
---|
| 87 | * \brief Set a persistent xml property
|
---|
| 88 | *
|
---|
| 89 | * The property will be saved in the configuration xml and also used to
|
---|
| 90 | *configure the ground station.
|
---|
| 91 | *
|
---|
| 92 | * \param prop property to set and save
|
---|
| 93 | * \param value value to set and save
|
---|
| 94 | */
|
---|
| 95 | template <typename T> void SetPersistentXmlProp(std::string prop, T value);
|
---|
[2] | 96 |
|
---|
[13] | 97 | /*!
|
---|
| 98 | * \brief Get a persistent xml property
|
---|
| 99 | *
|
---|
| 100 | * Get the property from the xml file. If no corresponding property is found in
|
---|
| 101 | *the xml, value remains unchanged. \n
|
---|
| 102 | * Thus value can be initialized with a default value before calling this
|
---|
| 103 | *method.
|
---|
| 104 | *
|
---|
| 105 | * \param prop property to get
|
---|
| 106 | * \param value value to store the result
|
---|
| 107 | * \return true if value was changed
|
---|
| 108 | */
|
---|
| 109 | template <typename T> bool GetPersistentXmlProp(std::string prop, T &value);
|
---|
[2] | 110 |
|
---|
[13] | 111 | /*!
|
---|
| 112 | * \brief Set a volatile xml property
|
---|
| 113 | *
|
---|
| 114 | * This property should be used to configure the ground station (one time
|
---|
| 115 | *init). \n
|
---|
| 116 | * The property will be destroyed after calling SendXml() as it should no be
|
---|
| 117 | *used anymore.
|
---|
| 118 | *
|
---|
| 119 | * \param prop property to set
|
---|
| 120 | * \param value value to set
|
---|
| 121 | * \param node if sepcified, node to set; otherwise use the node of the Widget
|
---|
| 122 | */
|
---|
| 123 | template <typename T>
|
---|
| 124 | void SetVolatileXmlProp(std::string prop, T value, xmlNodePtr node = NULL);
|
---|
[2] | 125 |
|
---|
[13] | 126 | /*!
|
---|
| 127 | * \brief Send xml
|
---|
| 128 | *
|
---|
| 129 | * Send Widget's xml to ground station. \n
|
---|
| 130 | * New changes will be taken into account by ground station. \n
|
---|
| 131 | * All volatile properties will be erased after calling ths method, as they
|
---|
| 132 | *should not be used anymore.
|
---|
| 133 | */
|
---|
| 134 | void SendXml(void);
|
---|
[2] | 135 |
|
---|
[13] | 136 | /*!
|
---|
| 137 | * \brief Xml event
|
---|
| 138 | *
|
---|
| 139 | * This method must be reimplemented to handle a xml event. \n
|
---|
| 140 | * It is automatically called when something changed from
|
---|
| 141 | * ground station. \n
|
---|
| 142 | */
|
---|
| 143 | virtual void XmlEvent(void){};
|
---|
[2] | 144 |
|
---|
[33] | 145 | /*!
|
---|
| 146 | * \brief Unset a persistent xml property
|
---|
| 147 | *
|
---|
| 148 | * Unset an existent property, so it won't be saved.
|
---|
| 149 | *
|
---|
| 150 | * \param prop property to set
|
---|
| 151 | */
|
---|
| 152 | void UnsetPersistentXmlProp(std::string prop);
|
---|
| 153 |
|
---|
[13] | 154 | private:
|
---|
| 155 | class Widget_impl *pimpl_;
|
---|
| 156 | };
|
---|
[2] | 157 |
|
---|
| 158 | } // end namespace gui
|
---|
| 159 | } // end namespace flair
|
---|
| 160 |
|
---|
| 161 | #endif // WIDGET_H
|
---|