// -*- C++ -*- namespace Hurricane { /*! \class InspectorWidget * \brief A Widget to browse through the Hurricane objetcs. * * \section secInspectorMM Inspector Memory Management * * In order to keep the memory footprint of the Inspector as * small as possible only the currently viewed Record is allocated. * The only exception is the root Record itself, which we must * kept for it has not been passed as a Slot but as a Record. * Be aware however, that the root Record is destroyed the * moment the Inspector is, so do not uses the root Record in * context from which the Inspector has been spawned. * * The history from the root Record to the deepest reached * level of the data structure is kept in a vector of Slots. * We choose Slot over Record because they are lightweight object. * Slots containts only a name (usually the object's attribute * name) and a pointer to that attribute. The Record associated * to the attribute is generated on demand. To have a completly * uniform history we must create a special Slot from the root * Record, unlike others this Slot contains directly the Record * and not the attribute pointer it has been generated from. * * When an Inspector windows is closed by the window manager, * the widget is not simply hidden, it is fully destroyed * (see the QWidget \c Qt::WA_DeleteOnClose attribute). Thus, pointers * to an Inspector Widget are not to be kept. * * Any number of Inspector could be created simultanously, even * on the same datas. Slot & Record beeing on demand, expandables, * objects. */ /*! \function InspectorWidget::InspectorWidget(QWidget* parent=NULL); * Construct a InspectorWidget. The root Record to browse must * be sets immediatly afterwards with the setRootRecord() * method. */ /*! \function void InspectorWidget::setRootRecord(Record* record); * Sets the root record of the Inspector. * * \remark The previous root record is freed. */ /*! \function void InspectorWidget::setRootOccurrence(Occurrence& occurrence); * Build a Record from the Occurrence and set it as the root Record. * * \remark The previous root record is freed. */ }