pxmlw6n2f/Gazebo_Distributed_TCP/gazebo/gui/ConfigWidget.hh

927 lines
40 KiB
C++

/*
* Copyright (C) 2014 Open Source Robotics Foundation
*
* 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
*
* 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.
*
*/
#ifndef _GAZEBO_GUI_CONFIGWIDGET_HH_
#define _GAZEBO_GUI_CONFIGWIDGET_HH_
#include <map>
#include <memory>
#include <string>
#include <vector>
#include <ignition/math/Pose3.hh>
#include <ignition/math/Vector3.hh>
#include "gazebo/common/Color.hh"
#include "gazebo/math/Pose.hh"
#include "gazebo/gui/qt.h"
namespace google
{
namespace protobuf
{
class Message;
class Reflection;
class FieldDescriptor;
}
}
namespace gazebo
{
namespace gui
{
class ConfigWidgetPrivate;
class GroupWidget;
/// \addtogroup gazebo_gui
/// \{
/// \class ConfigChildWidget ConfigWidget.hh
/// \brief A convenience widget that also holds pointers to a list of its
/// child widgets
class GZ_GUI_VISIBLE ConfigChildWidget : public QFrame
{
Q_OBJECT
/// \brief Constructor;
public: ConfigChildWidget() : groupWidget(NULL) {}
/// \brief Widget's key value.
public: std::string key;
/// \brief Widget's scoped name within parent config widget.
public: std::string scopedName;
/// \brief List of widgets holding values, such as Spins and LineEdits.
public: std::vector<QWidget *> widgets;
/// \brief Map a widget to the label holding its unit value.
public: std::map<QWidget *, QLabel *> mapWidgetToUnit;
/// \brief Pointer to group widget.
/// NULL if this widget is not contained inside a group widget.
public: GroupWidget *groupWidget;
};
/// \class GeometryConfigWidget ConfigWidget.hh
/// \brief A widget for configuring geometry properties.
class GZ_GUI_VISIBLE GeometryConfigWidget : public ConfigChildWidget
{
Q_OBJECT
/// \brief A stacked widget containing widgets for configuring
/// geometry dimensions.
public: QStackedWidget *geomDimensionWidget;
/// \brief A spin box for configuring the length of the geometry.
public: QWidget *geomLengthSpinBox;
/// \brief A label for the length widget.
public: QWidget *geomLengthLabel;
/// \brief A label for the unit of the length widget.
public: QWidget *geomLengthUnitLabel;
/// \brief A line edit for editing the mesh filename.
public: QWidget *geomFilenameLineEdit;
/// \brief A label for the mesh filename widget.
public: QWidget *geomFilenameLabel;
/// \brief A button for selecting the mesh filename.
public: QWidget *geomFilenameButton;
/// brief Callback when the geometry type is changed.
/// \param[in] _text New geometry type in string.
private slots: void GeometryChanged(const QString _text);
/// brief Callback when the file button is clicked.
private slots: void OnSelectFile();
};
/// \class EnumConfigWidget ConfigWidget.hh
/// \brief A widget for configuring enum values.
class GZ_GUI_VISIBLE EnumConfigWidget : public ConfigChildWidget
{
Q_OBJECT
/// brief Signal an enum value change event.
/// \param[in] _value New enum value in string.
Q_SIGNALS: void EnumValueChanged(const QString &_value);
/// brief Callback when the enum value is changed.
/// \param[in] _value New enum value in string.
private slots: void EnumChanged(const QString &_value);
};
/// \class GroupWidget ConfigWidget.hh
/// \brief A collapsible widget that holds child widgets.
class GZ_GUI_VISIBLE GroupWidget : public QWidget
{
Q_OBJECT
/// \brief Child widget that can be collapsed or expanded.
public: QWidget *childWidget;
/// \brief Callback that collapses or expands the child widget.
/// _param[in] _checked Whether it is checked or not.
private slots: void Toggle(bool _checked);
};
/// \class ConfigWidget ConfigWidget.hh
/// \brief A widget generated from a google protobuf message.
class GZ_GUI_VISIBLE ConfigWidget : public QWidget
{
Q_OBJECT
/// \brief Constructor
public: ConfigWidget();
/// \brief Destructor
public: ~ConfigWidget();
/// \brief Load from a google protobuf message.
/// \param[in] _msg Message to load from.
public: void Load(const google::protobuf::Message *_msg);
/// \brief Get the updated message.
/// \return Updated message.
/// \deprecated See Msg().
public: google::protobuf::Message *GetMsg() GAZEBO_DEPRECATED(7.0);
/// \brief Get the updated message.
/// \return Updated message.
public: google::protobuf::Message *Msg();
/// \brief Create a human readable key, capitalizing the first letter
/// and removing characters like "_".
/// \param[in] _key Non-human-readable key.
/// \return Human-readable key.
/// \deprecated See HumanReadableKey(const std::string &_key) const
public: std::string GetHumanReadableKey(const std::string &_key)
GAZEBO_DEPRECATED(7.0);
/// \brief Create a human readable key, capitalizing the first letter
/// and removing characters like "_".
/// \param[in] _key Non-human-readable key.
/// \return Human-readable key.
public: std::string HumanReadableKey(const std::string &_key) const;
/// \brief Returns the unit for a given key. For example, the key "mass"
/// returns "kg".
/// \param[in] _key The key.
/// \param[in] _jointType In case the field belongs to a joint, the
/// joint's type.
/// \return The unit.
/// \deprecated See UnitFromKey(const std::string &_key,
/// const std::string &_jointType = "") const
public: std::string GetUnitFromKey(const std::string &_key,
const std::string &_jointType = "") GAZEBO_DEPRECATED(7.0);
/// \brief Returns the unit for a given key. For example, the key "mass"
/// returns "kg".
/// \param[in] _key The key.
/// \param[in] _jointType In case the field belongs to a joint, the
/// joint's type.
/// \return The unit.
public: std::string UnitFromKey(const std::string &_key,
const std::string &_jointType = "") const;
/// \brief Returns the range for a given key. For example, the key
/// "transparency" returns min == 0, max == 1.
/// \param[in] _key The key.
/// \param[out] _min The minimum value.
/// \param[out] _max The maximum value.
/// \deprecated See RangeFromKey(const std::string &_key,
/// double &_min,
/// double &_max) const
public: void GetRangeFromKey(const std::string &_key,
double &_min, double &_max) GAZEBO_DEPRECATED(7.0);
/// \brief Returns the range for a given key. For example, the key
/// "transparency" returns min == 0, max == 1.
/// \param[in] _key The key.
/// \param[out] _min The minimum value.
/// \param[out] _max The maximum value.
public: void RangeFromKey(const std::string &_key,
double &_min, double &_max) const;
/// \brief Set whether a child widget should be visible.
/// \param[in] _name Name of the child widget.
/// \param[in] _visible True to set the widget to be visible.
public: void SetWidgetVisible(const std::string &_name, bool _visible);
/// \brief Get whether a child widget is visible.
/// \param[in] _name Name of the child widget.
/// \return True if the widget is visible.
/// \deprecated See WidgetVisible(const std::string &_name) const
public: bool GetWidgetVisible(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get whether a child widget is visible.
/// \param[in] _name Name of the child widget.
/// \return True if the widget is visible.
public: bool WidgetVisible(const std::string &_name) const;
/// \brief Set whether a child widget should be read-only.
/// \param[in] _name Name of the child widget.
/// \param[in] _visible True to set the widget to be read-only.
public: void SetWidgetReadOnly(const std::string &_name, bool _readOnly);
/// \brief Get whether a child widget is read-only.
/// \param[in] _name Name of the child widget.
/// \return True if the widget is read-only.
/// \deprecated See WidgetReadOnly(const std::string &_name) const
public: bool GetWidgetReadOnly(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get whether a child widget is read-only.
/// \param[in] _name Name of the child widget.
/// \return True if the widget is read-only.
public: bool WidgetReadOnly(const std::string &_name) const;
/// \brief Update the widgets from a message.
/// \param[in] _msg Message used for updating the widgets.
public: void UpdateFromMsg(const google::protobuf::Message *_msg);
/// \brief Set an integer value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
public: bool SetIntWidgetValue(const std::string &_name, int _value);
/// \brief Set an unsigned integer value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
public: bool SetUIntWidgetValue(const std::string &_name, unsigned int
_value);
/// \brief Set a double value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
public: bool SetDoubleWidgetValue(const std::string &_name,
double _value);
/// \brief Set a bool value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
public: bool SetBoolWidgetValue(const std::string &_name, bool _value);
/// \brief Set a string value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
public: bool SetStringWidgetValue(const std::string &_name,
const std::string &_value);
/// \brief Set a vector3 value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
/// \deprecated See SetVector3dWidgetValue(const std::string &_name,
/// const ignition::math::Vector3 &_value)
public: bool SetVector3WidgetValue(const std::string &_name,
const math::Vector3 &_value) GAZEBO_DEPRECATED(7.0);
/// \brief Set a vector3 value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
public: bool SetVector3dWidgetValue(const std::string &_name,
const ignition::math::Vector3d &_value);
/// \brief Set a color value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
public: bool SetColorWidgetValue(const std::string &_name,
const common::Color &_value);
/// \brief Set a pose value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
/// \deprecated See SetPoseWidgetValue(const std::string &_name,
/// const ignition::math::Pose3d &_value)
public: bool SetPoseWidgetValue(const std::string &_name,
const math::Pose &_value) GAZEBO_DEPRECATED(7.0);
/// \brief Set a pose value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
public: bool SetPoseWidgetValue(const std::string &_name,
const ignition::math::Pose3d &_value);
/// \brief Set a geometry value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Type of geometry.
/// \param[in] _dimensions Dimensions of geometry.
/// \return True if the value is set successfully.
/// \deprecated See SetGeometryWidgetValue(const std::string &_name,
/// const std::string &_value,
/// const ignition::math::Vector3d &_dimensions,
/// const std::string &_uri = "")
public: bool SetGeometryWidgetValue(const std::string &_name,
const std::string &_value, const math::Vector3 &_dimensions,
const std::string &_uri = "") GAZEBO_DEPRECATED(7.0);
/// \brief Set a geometry value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Type of geometry.
/// \param[in] _dimensions Dimensions of geometry.
/// \return True if the value is set successfully.
public: bool SetGeometryWidgetValue(const std::string &_name,
const std::string &_value,
const ignition::math::Vector3d &_dimensions,
const std::string &_uri = "");
/// \brief Set an enum value to a child widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _value Value to set to.
/// \return True if the value is set successfully.
public: bool SetEnumWidgetValue(const std::string &_name,
const std::string &_value);
/// \brief Add an item to a child enum widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _itemText Enum text value.
/// \return True if the item is added successfully.
public: bool AddItemEnumWidget(const std::string &_name,
const std::string &_itemText);
/// \brief Remove an item from a child enum widget.
/// \param[in] _name Name of the child widget.
/// \param[in] _itemText Text of the enum value.
/// \return True if the item is removed successfully.
public: bool RemoveItemEnumWidget(const std::string &_name,
const std::string &_itemText);
/// \brief Remove all items from a child enum widget.
/// \param[in] _name Name of the child widget.
/// \return True if successful.
public: bool ClearEnumWidget(const std::string &_name);
/// \brief Get an integer value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Integer value.
/// \deprecated See IntWidgetValue(const std::string &_name) const
public: int GetIntWidgetValue(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get an integer value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Integer value.
public: int IntWidgetValue(const std::string &_name) const;
/// \brief Get an unsigned integer value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Unsigned integer value.
/// \deprecated See UIntWidgetValue(const std::string &_name) const
public: unsigned int GetUIntWidgetValue(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get an unsigned integer value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Unsigned integer value.
public: unsigned int UIntWidgetValue(const std::string &_name) const;
/// \brief Get a double value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Double value.
/// \deprecated See DoubleWidgetValue(const std::string &_name) const
public: double GetDoubleWidgetValue(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get a double value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Double value.
public: double DoubleWidgetValue(const std::string &_name) const;
/// \brief Get a bool value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Bool value.
/// \deprecated See BoolWidgetValue(const std::string &_name) const
public: bool GetBoolWidgetValue(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get a bool value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Bool value.
public: bool BoolWidgetValue(const std::string &_name) const;
/// \brief Get a string value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return String value.
/// \deprecated See StringWidgetValue(const std::string &_name) const
public: std::string GetStringWidgetValue(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get a string value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return String value.
public: std::string StringWidgetValue(const std::string &_name) const;
/// \brief Get a vector3 value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Vector3 value.
/// \deprecated See Vector3dWidgetValue(const std::string &_name) const
public: math::Vector3 GetVector3WidgetValue(const std::string &_name)
const GAZEBO_DEPRECATED(7.0);
/// \brief Get a vector3 value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Vector3 value.
public: ignition::math::Vector3d Vector3dWidgetValue(
const std::string &_name) const;
/// \brief Get a color value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Color value.
/// \deprecated See ColorWidgetValue(const std::string &_name) const
public: common::Color GetColorWidgetValue(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get a color value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Color value.
public: common::Color ColorWidgetValue(const std::string &_name) const;
/// \brief Get a pose value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Pose value.
/// \deprecated See PoseWidgetValue(const std::string &_name) const
public: math::Pose GetPoseWidgetValue(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get a pose value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Pose value.
public: ignition::math::Pose3d PoseWidgetValue(
const std::string &_name) const;
/// \brief Get a geometry value from a child widget.
/// \param[in] _name Name of the child widget.
/// \param[out] _dimensions Dimensions of geometry.
/// \param[out] _uri URI of the geometry mesh, if any.
/// \return Type of geometry.
/// \deprecated See GeometryWidgetValue() function that accepts an
/// ignition math object.
public: std::string GetGeometryWidgetValue(const std::string &_name,
math::Vector3 &_dimensions, std::string &_uri) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get a geometry value from a child widget.
/// \param[in] _name Name of the child widget.
/// \param[out] _dimensions Dimensions of geometry.
/// \param[out] _uri URI of the geometry mesh, if any.
/// \return Type of geometry.
public: std::string GeometryWidgetValue(const std::string &_name,
ignition::math::Vector3d &_dimensions, std::string &_uri) const;
/// \brief Get an enum value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Enum value.
/// \deprecated See EnumWidgetValue(const std::string &_name)
public: std::string GetEnumWidgetValue(const std::string &_name) const
GAZEBO_DEPRECATED(7.0);
/// \brief Get an enum value from a child widget.
/// \param[in] _name Name of the child widget.
/// \return Enum value.
public: std::string EnumWidgetValue(const std::string &_name) const;
/// \brief Create a widget which has a button header which collapses
/// the field widget.
/// \param[in] _name Header name.
/// \param[out] _childWidget Widget which will be collapsed.
/// \param[in] _level Level of the widget in the tree.
/// \return The group widget.
public: GroupWidget *CreateGroupWidget(const std::string &_name,
ConfigChildWidget *_childWidget, const int _level = 0);
/// \brief Create a widget for configuring an unsigned integer value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreateUIntWidget(const std::string &_key,
const int _level = 0);
/// \brief Create a widget for configuring an integer value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreateIntWidget(const std::string &_key,
const int _level = 0);
/// \brief Create a widget for configuring a double value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreateDoubleWidget(const std::string &_key,
const int _level = 0);
/// \brief Create a widget for configuring a string value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \param[in] _type Type of string widget, such as "line" or "plain".
/// \return The newly created widget.
public: ConfigChildWidget *CreateStringWidget(const std::string &_key,
const int _level = 0, const std::string &_type = "line");
/// \brief Create a widget for configuring a bool value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreateBoolWidget(const std::string &_key,
const int _level = 0);
/// \brief Create a widget for configuring a vector3 value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreateVector3dWidget(const std::string &_key,
const int _level = 0);
/// \brief Create a widget for configuring a color value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreateColorWidget(const std::string &_key,
const int _level = 0);
/// \brief Create a widget for configuring a pose value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreatePoseWidget(const std::string &_key,
const int _level = 0);
/// \brief Create a widget for configuring a geometry value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreateGeometryWidget(const std::string &_key,
const int _level = 0);
/// \brief Create a widget for configuring an enum value.
/// \param[in] _key A key that is used as a label for the widget.
/// \param[in] _values A list of enum values in string.
/// \param[in] _level Level of the widget in the tree.
/// \return The newly created widget.
public: ConfigChildWidget *CreateEnumWidget(const std::string &_key,
const std::vector<std::string> &_values, const int _level = 0);
/// \brief Register a child widget as a child of this widget, so it can
/// be updated. Note that the widget is not automatically added to a
/// layout.
/// \param[in] _name Unique name to indentify the child within this widget
/// \param[in] _child Child widget to be added. It doesn't need to be a
/// ConfigChildWidget.
/// \return True if child successfully added.
public: bool AddConfigChildWidget(const std::string &_name,
ConfigChildWidget *_child);
/// \brief Insert a layout into the config widget's layout at a specific
/// position.
/// \param[in] _layout The layout to be inserted.
/// \param[in] _pos The position to insert at, 0 being the top.
public: void InsertLayout(QLayout *_layout, int _pos);
/// \brief Get a config child widget by its name.
/// \param[in] _name Scoped name of the child widget.
/// \return The child widget with the given name or NULL if it wasn't
/// found.
public: ConfigChildWidget *ConfigChildWidgetByName(
const std::string &_name) const;
/// \brief Get the number of child widgets.
/// \return The number of child widgets.
public: unsigned int ConfigChildWidgetCount() const;
/// \brief Get a style sheet in string format, to be applied to a child
/// config widget with setStyleSheet.
/// \param[in] _type Type of style sheet, such as "warning", "active",
/// "normal".
/// \param[in] _level Level of widget in the tree.
/// \return Style sheet as string. Returns an empty string if _type is
/// unknown.
public: static QString StyleSheet(const std::string &_type,
const int _level = 0);
/// \brief List of colors used for the background of widgets according to
/// their level.
public: static const std::vector<QString> bgColors;
/// \brief List of colors used for widget areas according to their level.
public: static const std::vector<QString> widgetColors;
/// \brief Red color used for "red" or "x" fields.
public: static const QString redColor;
/// \brief Green color used for "green" or "y" fields.
public: static const QString greenColor;
/// \brief Blue color used for "blue" or "z" fields.
public: static const QString blueColor;
/// \brief Parse the input message and either create widgets for
/// configuring fields of the message, or update the widgets with values
/// from the message.
/// \param[in] _msg Message.
/// \param[in] _update True to parse only fields that are specified in
/// the message rather than all the available fields in the message
/// \param[in] _name Name used when creating new widgets.
/// \param[in] _level Level of the widget in the tree.
/// return Updated widget.
private: QWidget *Parse(google::protobuf::Message *_msg,
bool _update = false, const std::string &_name = "",
const int _level = 0);
/// \brief Parse a vector3 message.
/// param[in] _msg Input vector3d message.
/// return Parsed vector.
private: ignition::math::Vector3d ParseVector3d(
const google::protobuf::Message *_msg) const;
/// \brief Update the message field using values from the widgets.
/// \param[in] _msg Message to be updated.
/// \param[in] _name Name of parent widget.
private: void UpdateMsg(google::protobuf::Message *_msg,
const std::string &_name = "");
/// \brief Update a vector3d message.
/// \param[in] _msg Vector3d message to be updated.
/// \param[in] _value Vector3 used for updating the message.
private: void UpdateVector3dMsg(google::protobuf::Message *_msg,
const ignition::math::Vector3d &_value);
/// \brief Update a child widget with an unsigned integer value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdateUIntWidget(ConfigChildWidget *_widget,
const unsigned int _value);
/// \brief Update a child widget with an integer value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdateIntWidget(ConfigChildWidget *_widget,
const int _value);
/// \brief Update a child widget with a double value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdateDoubleWidget(ConfigChildWidget *_widget,
const double _value);
/// \brief Update a child widget with a string value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdateStringWidget(ConfigChildWidget *_widget,
const std::string &_value);
/// \brief Update a child widget with a bool value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdateBoolWidget(ConfigChildWidget *_widget,
const bool _value);
/// \brief Update a child widget with a vector3 value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdateVector3dWidget(ConfigChildWidget *_widget,
const ignition::math::Vector3d &_value);
/// \brief Update a child widget with a color value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdateColorWidget(ConfigChildWidget *_widget,
const common::Color &_value);
/// \brief Update a child widget with a pose value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdatePoseWidget(ConfigChildWidget *_widget,
const ignition::math::Pose3d &_value);
/// \brief Update a child widget with a geometry type and dimensions.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Type of geometry.
/// \param[in] _dimensions Dimensions of the geometry.
/// \param[in] _uri URI of the geometry mesh, if any.
/// \return True if the update completed successfully.
private: bool UpdateGeometryWidget(ConfigChildWidget *_widget,
const std::string &_value,
const ignition::math::Vector3d &_dimensions,
const std::string &_uri = "");
/// \brief Update a child widget with an enum value.
/// \param[in] _widget Pointer to the child widget.
/// \param[in] _value Value to set to.
/// \return True if the update completed successfully.
private: bool UpdateEnumWidget(ConfigChildWidget *_widget,
const std::string &_value);
/// \brief Get an integer value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: int IntWidgetValue(ConfigChildWidget *_widget) const;
/// \brief Get an unsigned integer value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: unsigned int UIntWidgetValue(ConfigChildWidget *_widget) const;
/// \brief Get a double value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: double DoubleWidgetValue(ConfigChildWidget *_widget) const;
/// \brief Get a bool value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: bool BoolWidgetValue(ConfigChildWidget *_widget) const;
/// \brief Get a string value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: std::string StringWidgetValue(ConfigChildWidget *_widget) const;
/// \brief Get a vector3 value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: ignition::math::Vector3d Vector3dWidgetValue(
ConfigChildWidget *_widget) const;
/// \brief Get a color value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: common::Color ColorWidgetValue(ConfigChildWidget *_widget) const;
/// \brief Get a pose value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: ignition::math::Pose3d PoseWidgetValue(
ConfigChildWidget *_widget) const;
/// \brief Get a geometry value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \param[out] _dimensions Dimensions of geometry.
/// \param[out] _uri URI of the geometry mesh, if any.
/// \return Type of geometry.
private: std::string GeometryWidgetValue(ConfigChildWidget *_widget,
ignition::math::Vector3d &_dimensions, std::string &_uri) const;
/// \brief Get an enum value from a child widget.
/// \param[in] _widget Pointer to the child widget.
/// \return Value of the widget.
private: std::string EnumWidgetValue(ConfigChildWidget *_widget) const;
/// \brief Received item selection user input.
/// \param[in] _item Item selected.
/// \param[in] _column Column index.
private slots: void OnItemSelection(QTreeWidgetItem *_item,
const int _column);
/// \brief Callback when a uint config widget's value has changed.
private slots: void OnUIntValueChanged();
/// \brief Callback when an int config widget's value has changed.
private slots: void OnIntValueChanged();
/// \brief Callback when a double config widget's value has changed.
private slots: void OnDoubleValueChanged();
/// \brief Callback when a bool config widget's value has changed.
private slots: void OnBoolValueChanged();
/// \brief Callback when a string config widget's value has changed.
private slots: void OnStringValueChanged();
/// \brief Callback when a vector3 config widget's value has changed.
private slots: void OnVector3dValueChanged();
/// \brief Callback when a vector3 config widget's preset has changed.
/// \param[in] _index Index of the chosen preset.
private slots: void OnVector3dPresetChanged(const int _index);
/// \brief Callback when a color config widget's value has changed.
private slots: void OnColorValueChanged();
/// \brief Callback when a pose config widget's value has changed.
private slots: void OnPoseValueChanged();
/// \brief Callback when a geometry config widget's value has changed.
private slots: void OnGeometryValueChanged();
/// \brief Callback when a geometry config widget's value has changed.
/// \param[in] _value Value which the QComboBox changed to.
private slots: void OnGeometryValueChanged(const int _value);
/// \brief Callback when an enum config widget's enum value has changed.
/// \param[in] _value New enum value in string.
private slots: void OnEnumValueChanged(const QString &_value);
/// \brief Signal that a uint config widget's value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New uint.
Q_SIGNALS: void UIntValueChanged(const QString &_name,
const unsigned int _value);
/// \brief Signal that an int config widget's value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New int.
Q_SIGNALS: void IntValueChanged(const QString &_name, const int _value);
/// \brief Signal that a double config widget's value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New double.
Q_SIGNALS: void DoubleValueChanged(const QString &_name,
const double _value);
/// \brief Signal that a bool config widget's value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New bool.
Q_SIGNALS: void BoolValueChanged(const QString &_name,
const bool _value);
/// \brief Signal that a string config widget's value has changed.
/// Note that only single line widgets will emit signals, so plain
/// text widgets don't emit signals.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New string.
Q_SIGNALS: void StringValueChanged(const QString &_name,
const std::string &_value);
/// \brief Signal that a vector3 config widget's value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New vector3.
Q_SIGNALS: void Vector3dValueChanged(const QString &_name,
const ignition::math::Vector3d &_value);
/// \brief Signal that a color config widget's value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New color.
Q_SIGNALS: void ColorValueChanged(const QString &_name,
const gazebo::common::Color &_value);
/// \brief Signal that a pose config widget's value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _pose New pose.
Q_SIGNALS: void PoseValueChanged(const QString &_name,
const ignition::math::Pose3d &_pose);
/// \brief Signal that a geometry config widget's value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New geometry name, such as "box".
/// \param[in] _dimensions New dimensions.
/// \param[in] _uri New uri, for meshes.
Q_SIGNALS: void GeometryValueChanged(const std::string &_name,
const std::string &_value,
const ignition::math::Vector3d &_dimensions,
const std::string &_uri);
/// \brief Signal that an enum config widget's enum value has changed.
/// \param[in] _name Scoped name of widget.
/// \param[in] _value New enum value string.
Q_SIGNALS: void EnumValueChanged(const QString &_name,
const QString &_value);
/// \brief Qt event filter currently used to filter mouse wheel events.
/// \param[in] _obj Object that is watched by the event filter.
/// \param[in] _event Qt event.
/// \return True if the event is handled.
private: bool eventFilter(QObject *_obj, QEvent *_event);
/// \internal
/// \brief Pointer to private data.
private: std::unique_ptr<ConfigWidgetPrivate> dataPtr;
};
}
}
#endif