1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-27 16:54:15 +01:00

Added some documentation to the new framework

This commit is contained in:
zedamota 2012-02-11 21:38:27 +00:00
parent 1da2cf5166
commit aea1e45de7
2 changed files with 198 additions and 25 deletions

View File

@ -28,6 +28,9 @@
#include <QtGui/QWidget> #include <QtGui/QWidget>
#include "uavsettingsimportexport/uavsettingsimportexportfactory.h" #include "uavsettingsimportexport/uavsettingsimportexportfactory.h"
/**
* Constructor
*/
ConfigTaskWidget::ConfigTaskWidget(QWidget *parent) : QWidget(parent),isConnected(false),smartsave(NULL),dirty(false),outOfLimitsStyle("background-color: rgb(255, 0, 0);") ConfigTaskWidget::ConfigTaskWidget(QWidget *parent) : QWidget(parent),isConnected(false),smartsave(NULL),dirty(false),outOfLimitsStyle("background-color: rgb(255, 0, 0);")
{ {
pm = ExtensionSystem::PluginManager::instance(); pm = ExtensionSystem::PluginManager::instance();
@ -40,14 +43,30 @@ ConfigTaskWidget::ConfigTaskWidget(QWidget *parent) : QWidget(parent),isConnecte
UAVSettingsImportExportFactory * importexportplugin = pm->getObject<UAVSettingsImportExportFactory>(); UAVSettingsImportExportFactory * importexportplugin = pm->getObject<UAVSettingsImportExportFactory>();
connect(importexportplugin,SIGNAL(importAboutToBegin()),this,SLOT(invalidateObjects())); connect(importexportplugin,SIGNAL(importAboutToBegin()),this,SLOT(invalidateObjects()));
} }
/**
* Add a widget to the dirty detection pool
* @param widget to add to the detection pool
*/
void ConfigTaskWidget::addWidget(QWidget * widget) void ConfigTaskWidget::addWidget(QWidget * widget)
{ {
addUAVObjectToWidgetRelation("","",widget); addUAVObjectToWidgetRelation("","",widget);
} }
/**
* Add an object to the management system
* @param objectName name of the object to add to the management system
*/
void ConfigTaskWidget::addUAVObject(QString objectName) void ConfigTaskWidget::addUAVObject(QString objectName)
{ {
addUAVObjectToWidgetRelation(objectName,"",NULL); addUAVObjectToWidgetRelation(objectName,"",NULL);
} }
/**
* Add an UAVObject field to widget relation to the management system
* @param object name of the object to add
* @param field name of the field to add
* @param widget pointer to the widget whitch will display/define the field value
* @param index index of the field element to add to this relation
*/
void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString field, QWidget * widget, QString index) void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString field, QWidget * widget, QString index)
{ {
UAVObject *obj=NULL; UAVObject *obj=NULL;
@ -58,6 +77,17 @@ void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString fiel
Q_ASSERT(_field); Q_ASSERT(_field);
addUAVObjectToWidgetRelation(object,field,widget,_field->getElementNames().indexOf(index)); addUAVObjectToWidgetRelation(object,field,widget,_field->getElementNames().indexOf(index));
} }
/**
* Add a UAVObject field to widget relation to the management system
* @param object name of the object to add
* @param field name of the field to add
* @param widget pointer to the widget whitch will display/define the field value
* @param element name of the element of the field element to add to this relation
* @param scale scale value of this relation
* @param isLimited bool to signal if this widget contents is limited in value
* @param defaultReloadGroups default and reload groups this relation belongs to
* @param instID instance ID of the object used on this relation
*/
void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString field, QWidget *widget, QString element, double scale, bool isLimited, QList<int> *defaultReloadGroups, quint32 instID) void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString field, QWidget *widget, QString element, double scale, bool isLimited, QList<int> *defaultReloadGroups, quint32 instID)
{ {
UAVObject *obj=objManager->getObject(QString(object),instID); UAVObject *obj=objManager->getObject(QString(object),instID);
@ -72,6 +102,17 @@ void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString fiel
} }
addUAVObjectToWidgetRelation(object, field, widget,index,scale,isLimited,defaultReloadGroups,instID); addUAVObjectToWidgetRelation(object, field, widget,index,scale,isLimited,defaultReloadGroups,instID);
} }
/**
* Add an UAVObject field to widget relation to the management system
* @param object name of the object to add
* @param field name of the field to add
* @param widget pointer to the widget whitch will display/define the field value
* @param index index of the element of the field to add to this relation
* @param scale scale value of this relation
* @param isLimited bool to signal if this widget contents is limited in value
* @param defaultReloadGroups default and reload groups this relation belongs to
* @param instID instance ID of the object used on this relation
*/
void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString field, QWidget * widget, int index,double scale,bool isLimited,QList<int>* defaultReloadGroups, quint32 instID) void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString field, QWidget * widget, int index,double scale,bool isLimited,QList<int>* defaultReloadGroups, quint32 instID)
{ {
if(addShadowWidget(object,field,widget,index,scale,isLimited,defaultReloadGroups,instID)) if(addShadowWidget(object,field,widget,index,scale,isLimited,defaultReloadGroups,instID))
@ -117,7 +158,9 @@ void ConfigTaskWidget::addUAVObjectToWidgetRelation(QString object, QString fiel
loadWidgetLimits(widget,_field,index,isLimited,scale); loadWidgetLimits(widget,_field,index,isLimited,scale);
} }
} }
/**
* destructor
*/
ConfigTaskWidget::~ConfigTaskWidget() ConfigTaskWidget::~ConfigTaskWidget()
{ {
if(smartsave) if(smartsave)
@ -143,14 +186,21 @@ void ConfigTaskWidget::saveObjectToSD(UAVObject *obj)
utilMngr->saveObjectToSD(obj); utilMngr->saveObjectToSD(obj);
} }
/**
* Util function to get a pointer to the object manager
* @return pointer to the UAVObjectManager
*/
UAVObjectManager* ConfigTaskWidget::getObjectManager() { UAVObjectManager* ConfigTaskWidget::getObjectManager() {
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager * objMngr = pm->getObject<UAVObjectManager>(); UAVObjectManager * objMngr = pm->getObject<UAVObjectManager>();
Q_ASSERT(objMngr); Q_ASSERT(objMngr);
return objMngr; return objMngr;
} }
/**
* Utility function which calculates the Mean value of a list of values
* @param list list of double values
* @returns Mean value of the list of parameter values
*/
double ConfigTaskWidget::listMean(QList<double> list) double ConfigTaskWidget::listMean(QList<double> list)
{ {
double accum = 0; double accum = 0;
@ -177,7 +227,10 @@ void ConfigTaskWidget::onAutopilotConnect()
enableControls(true); enableControls(true);
refreshWidgetsValues(); refreshWidgetsValues();
} }
/**
* SLOT Function used to populate the widgets with the initial values
* Overwrite this if you need to change the default behavior
*/
void ConfigTaskWidget::populateWidgets() void ConfigTaskWidget::populateWidgets()
{ {
bool dirtyBack=dirty; bool dirtyBack=dirty;
@ -193,7 +246,11 @@ void ConfigTaskWidget::populateWidgets()
} }
setDirty(dirtyBack); setDirty(dirtyBack);
} }
/**
* SLOT function used to refresh the widgets contents of the widgets with relation to
* object field added to the framework pool
* Overwrite this if you need to change the default behavior
*/
void ConfigTaskWidget::refreshWidgetsValues() void ConfigTaskWidget::refreshWidgetsValues()
{ {
bool dirtyBack=dirty; bool dirtyBack=dirty;
@ -212,7 +269,11 @@ void ConfigTaskWidget::refreshWidgetsValues()
} }
setDirty(dirtyBack); setDirty(dirtyBack);
} }
/**
* SLOT function used to update the uavobject fields from widgets with relation to
* object field added to the framework pool
* Overwrite this if you need to change the default behavior
*/
void ConfigTaskWidget::updateObjectsFromWidgets() void ConfigTaskWidget::updateObjectsFromWidgets()
{ {
emit updateObjectsFromWidgetsRequested(); emit updateObjectsFromWidgetsRequested();
@ -227,14 +288,22 @@ void ConfigTaskWidget::updateObjectsFromWidgets()
} }
} }
/**
* SLOT function used handle help button presses
* Overwrite this if you need to change the default behavior
*/
void ConfigTaskWidget::helpButtonPressed() void ConfigTaskWidget::helpButtonPressed()
{ {
QString url=helpButtonList.value((QPushButton*)sender(),QString::QString()); QString url=helpButtonList.value((QPushButton*)sender(),QString::QString());
if(!url.isEmpty()) if(!url.isEmpty())
QDesktopServices::openUrl( QUrl(url, QUrl::StrictMode) ); QDesktopServices::openUrl( QUrl(url, QUrl::StrictMode) );
} }
/**
* Add update and save buttons to the form
* multiple buttons can be added for the same function
* @param update pointer to the update button
* @param save pointer to the save button
*/
void ConfigTaskWidget::addApplySaveButtons(QPushButton *update, QPushButton *save) void ConfigTaskWidget::addApplySaveButtons(QPushButton *update, QPushButton *save)
{ {
if(!smartsave) if(!smartsave)
@ -264,7 +333,11 @@ void ConfigTaskWidget::addApplySaveButtons(QPushButton *update, QPushButton *sav
else else
enableControls(false); enableControls(false);
} }
/**
* SLOT function used the enable or disable the SAVE, UPLOAD and RELOAD buttons
* @param enable set to true to enable the buttons or false to disable them
* @param field name of the field to add
*/
void ConfigTaskWidget::enableControls(bool enable) void ConfigTaskWidget::enableControls(bool enable)
{ {
if(smartsave) if(smartsave)
@ -273,7 +346,9 @@ void ConfigTaskWidget::enableControls(bool enable)
button->setEnabled(enable); button->setEnabled(enable);
} }
} }
/**
* SLOT function called when on of the widgets contents added to the framework changes
*/
void ConfigTaskWidget::widgetsContentsChanged() void ConfigTaskWidget::widgetsContentsChanged()
{ {
emit widgetContentsChanged((QWidget*)sender()); emit widgetContentsChanged((QWidget*)sender());
@ -319,15 +394,25 @@ void ConfigTaskWidget::widgetsContentsChanged()
} }
setDirty(true); setDirty(true);
} }
/**
* SLOT function used clear the forms dirty status flag
*/
void ConfigTaskWidget::clearDirty() void ConfigTaskWidget::clearDirty()
{ {
setDirty(false); setDirty(false);
} }
/**
* Sets the form's dirty status flag
* @param value
*/
void ConfigTaskWidget::setDirty(bool value) void ConfigTaskWidget::setDirty(bool value)
{ {
dirty=value; dirty=value;
} }
/**
* Checks if the form is dirty (unsaved changes)
* @return true if the form has unsaved changes
*/
bool ConfigTaskWidget::isDirty() bool ConfigTaskWidget::isDirty()
{ {
if(isConnected) if(isConnected)
@ -335,7 +420,9 @@ bool ConfigTaskWidget::isDirty()
else else
return false; return false;
} }
/**
* SLOT function used to disable widget contents changes when related object field changes
*/
void ConfigTaskWidget::disableObjUpdates() void ConfigTaskWidget::disableObjUpdates()
{ {
foreach(objectToWidget * obj,objOfInterest) foreach(objectToWidget * obj,objOfInterest)
@ -344,7 +431,9 @@ void ConfigTaskWidget::disableObjUpdates()
disconnect(obj->object, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(refreshWidgetsValues())); disconnect(obj->object, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(refreshWidgetsValues()));
} }
} }
/**
* SLOT function used to enable widget contents changes when related object field changes
*/
void ConfigTaskWidget::enableObjUpdates() void ConfigTaskWidget::enableObjUpdates()
{ {
foreach(objectToWidget * obj,objOfInterest) foreach(objectToWidget * obj,objOfInterest)
@ -353,12 +442,18 @@ void ConfigTaskWidget::enableObjUpdates()
connect(obj->object, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(refreshWidgetsValues())); connect(obj->object, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(refreshWidgetsValues()));
} }
} }
/**
* Called when an uav object is updated
* @param obj pointer to the object whitch has just been updated
*/
void ConfigTaskWidget::objectUpdated(UAVObject *obj) void ConfigTaskWidget::objectUpdated(UAVObject *obj)
{ {
objectUpdates[obj]=true; objectUpdates[obj]=true;
} }
/**
* Checks if all objects added to the pool have already been updated
* @return true if all objects added to the pool have already been updated
*/
bool ConfigTaskWidget::allObjectsUpdated() bool ConfigTaskWidget::allObjectsUpdated()
{ {
bool ret=true; bool ret=true;
@ -368,14 +463,20 @@ bool ConfigTaskWidget::allObjectsUpdated()
} }
return ret; return ret;
} }
/**
* Adds a new help button
* @param button pointer to the help button
* @param url url to open in the browser when the help button is pressed
*/
void ConfigTaskWidget::addHelpButton(QPushButton *button, QString url) void ConfigTaskWidget::addHelpButton(QPushButton *button, QString url)
{ {
helpButtonList.insert(button,url); helpButtonList.insert(button,url);
connect(button,SIGNAL(clicked()),this,SLOT(helpButtonPressed())); connect(button,SIGNAL(clicked()),this,SLOT(helpButtonPressed()));
} }
/**
* Invalidates all the uav objects "is updated" flag
*/
void ConfigTaskWidget::invalidateObjects() void ConfigTaskWidget::invalidateObjects()
{ {
foreach(UAVObject *obj, objectUpdates.keys()) foreach(UAVObject *obj, objectUpdates.keys())
@ -383,19 +484,28 @@ void ConfigTaskWidget::invalidateObjects()
objectUpdates[obj]=false; objectUpdates[obj]=false;
} }
} }
/**
* SLOT call this to apply changes to uav objects
*/
void ConfigTaskWidget::apply() void ConfigTaskWidget::apply()
{ {
if(smartsave) if(smartsave)
smartsave->apply(); smartsave->apply();
} }
/**
* SLOT call this to save changes to uav objects
*/
void ConfigTaskWidget::save() void ConfigTaskWidget::save()
{ {
if(smartsave) if(smartsave)
smartsave->save(); smartsave->save();
} }
/**
* Adds a new shadow widget
* shadow widgets are widgets whitch have a relation to an object already present on the framework pool i.e. already added trough addUAVObjectToWidgetRelation
* This function doesn't have to be used directly, addUAVObjectToWidgetRelation will call it if a previous relation exhists.
* @return returns false if the shadow widget relation failed to be added (no previous relation exhisted)
*/
bool ConfigTaskWidget::addShadowWidget(QString object, QString field, QWidget *widget, int index, double scale, bool isLimited,QList<int>* defaultReloadGroups,quint32 instID) bool ConfigTaskWidget::addShadowWidget(QString object, QString field, QWidget *widget, int index, double scale, bool isLimited,QList<int>* defaultReloadGroups,quint32 instID)
{ {
foreach(objectToWidget * oTw,objOfInterest) foreach(objectToWidget * oTw,objOfInterest)
@ -445,7 +555,10 @@ bool ConfigTaskWidget::addShadowWidget(QString object, QString field, QWidget *w
} }
return false; return false;
} }
/**
* Auto loads widgets based on the Dynamic property named "objrelation"
* Check the wiki for more information
*/
void ConfigTaskWidget::autoLoadWidgets() void ConfigTaskWidget::autoLoadWidgets()
{ {
QPushButton * saveButtonWidget=NULL; QPushButton * saveButtonWidget=NULL;
@ -552,7 +665,12 @@ void ConfigTaskWidget::autoLoadWidgets()
} }
refreshWidgetsValues(); refreshWidgetsValues();
} }
/**
* Adds a widget to a list of default/reload groups
* default/reload groups are groups of widgets to be set with default or reloaded (values from persistent memory) when a defined button is pressed
* @param widget pointer to the widget to be added to the groups
* @param groups list of the groups on which to add the widget
*/
void ConfigTaskWidget::addWidgetToDefaultReloadGroups(QWidget *widget, QList<int> * groups) void ConfigTaskWidget::addWidgetToDefaultReloadGroups(QWidget *widget, QList<int> * groups)
{ {
foreach(objectToWidget * oTw,objOfInterest) foreach(objectToWidget * oTw,objOfInterest)
@ -585,17 +703,30 @@ void ConfigTaskWidget::addWidgetToDefaultReloadGroups(QWidget *widget, QList<int
} }
} }
} }
/**
* Adds a button to a default group
* @param button pointer to the default button
* @param buttongroup number of the group
*/
void ConfigTaskWidget::addDefaultButton(QPushButton *button, int buttonGroup) void ConfigTaskWidget::addDefaultButton(QPushButton *button, int buttonGroup)
{ {
button->setProperty("group",buttonGroup); button->setProperty("group",buttonGroup);
connect(button,SIGNAL(clicked()),this,SLOT(defaultButtonClicked())); connect(button,SIGNAL(clicked()),this,SLOT(defaultButtonClicked()));
} }
/**
* Adds a button to a reload group
* @param button pointer to the reload button
* @param buttongroup number of the group
*/
void ConfigTaskWidget::addReloadButton(QPushButton *button, int buttonGroup) void ConfigTaskWidget::addReloadButton(QPushButton *button, int buttonGroup)
{ {
button->setProperty("group",buttonGroup); button->setProperty("group",buttonGroup);
reloadButtonList.append(button); reloadButtonList.append(button);
connect(button,SIGNAL(clicked()),this,SLOT(reloadButtonClicked())); connect(button,SIGNAL(clicked()),this,SLOT(reloadButtonClicked()));
} }
/**
* Called when a default button is clicked
*/
void ConfigTaskWidget::defaultButtonClicked() void ConfigTaskWidget::defaultButtonClicked()
{ {
int group=sender()->property("group").toInt(); int group=sender()->property("group").toInt();
@ -608,7 +739,9 @@ void ConfigTaskWidget::defaultButtonClicked()
setWidgetFromField(oTw->widget,temp->getField(oTw->field->getName()),oTw->index,oTw->scale,oTw->isLimited); setWidgetFromField(oTw->widget,temp->getField(oTw->field->getName()),oTw->index,oTw->scale,oTw->isLimited);
} }
} }
/**
* Called when a reload button is clicked
*/
void ConfigTaskWidget::reloadButtonClicked() void ConfigTaskWidget::reloadButtonClicked()
{ {
int group=sender()->property("group").toInt(); int group=sender()->property("group").toInt();
@ -644,6 +777,9 @@ void ConfigTaskWidget::reloadButtonClicked()
delete timeOut; delete timeOut;
} }
/**
* Connects widgets "contents changed" signals to a slot
*/
void ConfigTaskWidget::connectWidgetUpdatesToSlot(QWidget * widget,const char* function) void ConfigTaskWidget::connectWidgetUpdatesToSlot(QWidget * widget,const char* function)
{ {
if(!widget) if(!widget)
@ -684,6 +820,9 @@ void ConfigTaskWidget::connectWidgetUpdatesToSlot(QWidget * widget,const char* f
qDebug()<<__FUNCTION__<<"widget to uavobject relation not implemented"<<widget->metaObject()->className(); qDebug()<<__FUNCTION__<<"widget to uavobject relation not implemented"<<widget->metaObject()->className();
} }
/**
* Disconnects widgets "contents changed" signals to a slot
*/
void ConfigTaskWidget::disconnectWidgetUpdatesToSlot(QWidget * widget,const char* function) void ConfigTaskWidget::disconnectWidgetUpdatesToSlot(QWidget * widget,const char* function)
{ {
if(!widget) if(!widget)
@ -724,6 +863,14 @@ void ConfigTaskWidget::disconnectWidgetUpdatesToSlot(QWidget * widget,const char
qDebug()<<__FUNCTION__<<"widget to uavobject relation not implemented"<<widget->metaObject()->className(); qDebug()<<__FUNCTION__<<"widget to uavobject relation not implemented"<<widget->metaObject()->className();
} }
/**
* Sets a widget value from an UAVObject field
* @param widget pointer for the widget to set
* @param field pointer to the UAVObject field to use
* @param index index of the element to use
* @param scale scale to be used on the assignement
* @return returns true if the assignement was successfull
*/
bool ConfigTaskWidget::setFieldFromWidget(QWidget * widget,UAVObjectField * field,int index,double scale) bool ConfigTaskWidget::setFieldFromWidget(QWidget * widget,UAVObjectField * field,int index,double scale)
{ {
if(!widget || !field) if(!widget || !field)
@ -739,6 +886,12 @@ bool ConfigTaskWidget::setFieldFromWidget(QWidget * widget,UAVObjectField * fiel
return false; return false;
} }
} }
/**
* Gets a variant from a widget
* @param widget pointer to the widget from where to get the value
* @param scale scale to be used on the assignement
* @return returns the value of the widget times the scale
*/
QVariant ConfigTaskWidget::getVariantFromWidget(QWidget * widget,double scale) QVariant ConfigTaskWidget::getVariantFromWidget(QWidget * widget,double scale)
{ {
if(QComboBox * cb=qobject_cast<QComboBox *>(widget)) if(QComboBox * cb=qobject_cast<QComboBox *>(widget))
@ -764,7 +917,13 @@ QVariant ConfigTaskWidget::getVariantFromWidget(QWidget * widget,double scale)
else else
return QVariant(); return QVariant();
} }
/**
* Sets a widget from a variant
* @param widget pointer for the widget to set
* @param scale scale to be used on the assignement
* @param value value to be used on the assignement
* @return returns true if the assignement was successfull
*/
bool ConfigTaskWidget::setWidgetFromVariant(QWidget *widget, QVariant value, double scale) bool ConfigTaskWidget::setWidgetFromVariant(QWidget *widget, QVariant value, double scale)
{ {
if(QComboBox * cb=qobject_cast<QComboBox *>(widget)) if(QComboBox * cb=qobject_cast<QComboBox *>(widget))
@ -804,7 +963,15 @@ bool ConfigTaskWidget::setWidgetFromVariant(QWidget *widget, QVariant value, dou
else else
return false; return false;
} }
/**
* Sets a widget from a UAVObject field
* @param widget pointer to the widget to set
* @param field pointer to the field from where to get the value from
* @param index index of the element to use
* @param scale scale to be used on the assignement
* @param hasLimits set to true if you want to limit the values (check wiki)
* @return returns true if the assignement was successfull
*/
bool ConfigTaskWidget::setWidgetFromField(QWidget * widget,UAVObjectField * field,int index,double scale,bool hasLimits) bool ConfigTaskWidget::setWidgetFromField(QWidget * widget,UAVObjectField * field,int index,double scale,bool hasLimits)
{ {
if(!widget || !field) if(!widget || !field)

View File

@ -122,11 +122,17 @@ public slots:
void apply(); void apply();
void save(); void save();
signals: signals:
//fired when a widgets contents changes
void widgetContentsChanged(QWidget * widget); void widgetContentsChanged(QWidget * widget);
//fired when the framework requests that the widgets values be populated, use for custom behaviour
void populateWidgetsRequested(); void populateWidgetsRequested();
//fired when the framework requests that the widgets values be refreshed, use for custom behaviour
void refreshWidgetsValuesRequested(); void refreshWidgetsValuesRequested();
//fired when the framework requests that the UAVObject values be updated from the widgets value, use for custom behaviour
void updateObjectsFromWidgetsRequested(); void updateObjectsFromWidgetsRequested();
//fired when the autopilot connects
void autoPilotConnected(); void autoPilotConnected();
//fired when the autopilot disconnects
void autoPilotDisconnected(); void autoPilotDisconnected();
private slots: private slots:
void objectUpdated(UAVObject*); void objectUpdated(UAVObject*);