36 #include <QFontDialog>
51 config_widget_(new QWidget()),
63 p.setColor(QPalette::Background, Qt::white);
67 QPalette p3(
ui_.status->palette());
68 p3.setColor(QPalette::Text, Qt::red);
69 ui_.status->setPalette(p3);
71 QObject::connect(
ui_.selecttopic, SIGNAL(clicked()),
this, SLOT(
SelectTopic()));
72 QObject::connect(
ui_.topic, SIGNAL(editingFinished()),
this, SLOT(
TopicEdited()));
73 QObject::connect(
ui_.anchor, SIGNAL(activated(QString)),
this, SLOT(
SetAnchor(QString)));
74 QObject::connect(
ui_.units, SIGNAL(activated(QString)),
this, SLOT(
SetUnits(QString)));
75 QObject::connect(
ui_.offsetx, SIGNAL(valueChanged(
int)),
this, SLOT(
SetOffsetX(
int)));
76 QObject::connect(
ui_.offsety, SIGNAL(valueChanged(
int)),
this, SLOT(
SetOffsetY(
int)));
77 QObject::connect(
ui_.font_button, SIGNAL(clicked()),
this, SLOT(
SelectFont()));
78 QObject::connect(
ui_.color, SIGNAL(colorEdited(
const QColor &)),
this, SLOT(
SelectColor()));
80 font_.setFamily(tr(
"Helvetica"));
82 ui_.font_button->setText(
font_.family());
107 painter->resetTransform();
108 painter->setFont(
font_);
119 QPen invisPen(QBrush(Qt::transparent), 1);
120 painter->setPen(invisPen);
124 QPen pen(QBrush(
color_), 1);
125 painter->setPen(pen);
145 y_offset =
static_cast<int>((float)(
offset_y_ *
canvas_->height()) / 100.0);
148 int right =
static_cast<int>((float)
canvas_->width() -
message_.size().width()) - x_offset;
149 int bottom =
static_cast<int>((float)
canvas_->height() -
message_.size().height()) - y_offset;
150 int yCenter =
static_cast<int>((float)
canvas_->height() / 2.0 -
message_.size().height()/2.0);
151 int xCenter =
static_cast<int>((float)
canvas_->width() / 2.0 -
message_.size().width()/2.0);
158 ulPoint.setX(x_offset);
159 ulPoint.setY(y_offset);
162 ulPoint.setX(xCenter);
163 ulPoint.setY(y_offset);
167 ulPoint.setY(y_offset);
170 ulPoint.setX(x_offset);
171 ulPoint.setY(yCenter);
174 ulPoint.setX(xCenter);
175 ulPoint.setY(yCenter);
179 ulPoint.setY(yCenter);
182 ulPoint.setX(x_offset);
183 ulPoint.setY(bottom);
186 ulPoint.setX(xCenter);
187 ulPoint.setY(bottom);
191 ulPoint.setY(bottom);
194 painter->drawStaticText(ulPoint,
message_);
201 ui_.topic->setText(QString(node[
TOPIC_KEY].as<std::string>().c_str()));
207 font_.fromString(QString(node[
FONT_KEY].as<std::string>().c_str()));
209 ui_.font_button->setText(
font_.family());
215 ui_.color->setColor(QColor(
color_.name().toStdString().c_str()));
220 std::string anchor = node[
ANCHOR_KEY].as<std::string>();
221 ui_.anchor->setCurrentIndex(
ui_.anchor->findText(anchor.c_str()));
227 std::string units = node[
UNITS_KEY].as<std::string>();
228 ui_.units->setCurrentIndex(
ui_.units->findText(units.c_str()));
247 emitter << YAML::Key <<
FONT_KEY << YAML::Value <<
font_.toString().toStdString();
248 emitter << YAML::Key <<
COLOR_KEY << YAML::Value <<
color_.name().toStdString();
249 emitter << YAML::Key <<
TOPIC_KEY << YAML::Value <<
ui_.topic->text().toStdString();
291 ui_.font_button->setText(
font_.family());
298 "std_msgs/String",
"marti_common_msgs/StringStamped");
300 if (!topic.
name.empty())
302 ui_.topic->setText(QString::fromStdString(topic.
name));
309 std::string topic =
ui_.topic->text().trimmed().toStdString();
330 if (anchor ==
"top left")
334 else if (anchor ==
"top center")
338 else if (anchor ==
"top right")
342 else if (anchor ==
"center left")
346 else if (anchor ==
"center")
350 else if (anchor ==
"center right")
354 else if (anchor ==
"bottom left")
358 else if (anchor ==
"bottom center")
362 else if (anchor ==
"bottom right")
370 if (units ==
"pixels")
374 else if (units ==
"percent")
390 template <
class T,
class M>
393 return msg->getDataType() == ros::message_traits::datatype<T>();
398 if (is_instance<std_msgs::String>(
msg))
400 message_.setText(QString(
msg->instantiate<std_msgs::String>()->data.c_str()));
402 else if (is_instance<marti_common_msgs::StringStamped>(
msg))
404 message_.setText(QString(
msg->instantiate<marti_common_msgs::StringStamped>()->value.c_str()));
416 std::string anchor_string =
"top left";
420 anchor_string =
"top left";
424 anchor_string =
"top center";
428 anchor_string =
"top right";
432 anchor_string =
"center left";
434 else if (anchor ==
CENTER)
436 anchor_string =
"center";
440 anchor_string =
"center right";
444 anchor_string =
"bottom left";
448 anchor_string =
"bottom center";
452 anchor_string =
"bottom right";
455 return anchor_string;
460 std::string units_string =
"pixels";
464 units_string =
"pixels";
468 units_string =
"percent";