42 #include <QStringList>
64 struct BuiltInClassRecord
86 ids.push_back(record.class_id_);
88 QString sid = QString::fromStdString(
id);
89 if (ids.contains(sid))
99 return it->description_;
104 QString
getClassName(
const QString& class_id)
const override {
128 QIcon
getIcon(
const QString& class_id)
const override {
129 QString
package = getClassPackage(class_id);
131 QIcon icon =
rviz::loadPixmap(
"package://" + package +
"/icons/classes/" + class_name +
".svg");
133 icon =
rviz::loadPixmap(
"package://" + package +
"/icons/classes/" + class_name +
".png");
141 void addBuiltInClass(
const QString& package,
const QString& name,
const QString& description,
142 const std::function<
Type*()>& factory_function) {
144 record.class_id_ =
package + "/" + name;
148 record.factory_function_ = factory_function;
151 template <
class Derived>
152 void addBuiltInClass(
const QString& name,
const QString& description) {
166 virtual Type*
makeRaw(
const QString& class_id, QString* error_return =
nullptr) {
167 typename QHash<QString, BuiltInClassRecord>::const_iterator iter =
built_ins_.find(class_id);
169 Type* instance = iter->factory_function_();
170 if (instance ==
nullptr && error_return !=
nullptr) {
171 *error_return =
"Factory function for built-in class '" + class_id +
"' returned NULL.";
178 ROS_ERROR(
"PluginlibFactory: The plugin for class '%s' failed to load. Error: %s", qPrintable(class_id),
181 *error_return = QString::fromStdString(ex.what());
190 QHash<QString, BuiltInClassRecord>
built_ins_;