-
Notifications
You must be signed in to change notification settings - Fork 43
/
TopicEcho.hh
136 lines (110 loc) · 3.36 KB
/
TopicEcho.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
* Copyright (C) 2017 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 GZ_GUI_PLUGINS_TOPICECHO_HH_
#define GZ_GUI_PLUGINS_TOPICECHO_HH_
#ifdef _MSC_VER
#pragma warning(push, 0)
#endif
#include <google/protobuf/message.h>
#ifdef _MSC_VER
#pragma warning(pop)
#endif
#ifndef _WIN32
# define TopicEcho_EXPORTS_API
#else
# if (defined(TopicEcho_EXPORTS))
# define TopicEcho_EXPORTS_API __declspec(dllexport)
# else
# define TopicEcho_EXPORTS_API __declspec(dllimport)
# endif
#endif
#include <memory>
#include "gz/gui/Plugin.hh"
namespace gz
{
namespace gui
{
namespace plugins
{
class TopicEchoPrivate;
/// \brief Echo messages coming through a Gazebo Transport topic.
///
/// ## Configuration
/// This plugin doesn't accept any custom configuration.
class TopicEcho_EXPORTS_API TopicEcho : public Plugin
{
Q_OBJECT
/// \brief Topic
Q_PROPERTY(
QString topic
READ Topic
WRITE SetTopic
NOTIFY TopicChanged
)
/// \brief Paused
Q_PROPERTY(
bool paused
READ Paused
WRITE SetPaused
NOTIFY PausedChanged
)
/// \brief Constructor
public: TopicEcho();
/// \brief Destructor
public: virtual ~TopicEcho();
// Documentation inherited
public: virtual void LoadConfig(const tinyxml2::XMLElement *_pluginElem);
/// \brief Get the topic as a string, for example
/// '/echo'
/// \return Topic
public: Q_INVOKABLE QString Topic() const;
/// \brief Set the topic from a string, for example
/// '/echo'
/// \param[in] _topic Topic
public: Q_INVOKABLE void SetTopic(const QString &_topic);
/// \brief Notify that topic has changed
signals: void TopicChanged();
public slots: void OnBuffer(const unsigned int _steps);
/// \brief Get whether it is paused
/// \return True if paused
public: Q_INVOKABLE bool Paused() const;
/// \brief Set whether to be paused
/// \param[in] _paused True if paused
public: Q_INVOKABLE void SetPaused(const bool &_paused);
/// \brief Notify that paused has changed
signals: void PausedChanged();
/// \brief Signal to add a message to the GUI list.
/// \param[in] _msg Text message to add.
signals: void AddMsg(QString _msg);
/// \brief Receives incoming text messages.
/// \param[in] _msg New text message.
private: void OnMessage(const google::protobuf::Message &_msg);
/// \brief Clear list and unsubscribe.
private: void Stop();
/// \brief Callback when echo button is pressed
public slots: void OnEcho(const bool _checked);
/// \brief Callback from the ::AddMsg signal.
/// \param[in] _msg Message to add to the list.
private slots: void OnAddMsg(QString _msg);
/// \internal
/// \brief Pointer to private data.
private: std::unique_ptr<TopicEchoPrivate> dataPtr;
};
}
}
}
#endif