factory_model.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2017, Bielefeld University
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of Bielefeld University nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
35 /* Author: Robert Haschke */
36 
37 #include "factory_model.h"
38 #include <rviz/load_resource.h>
39 #include <QMimeData>
40 #include <QSet>
41 
42 namespace moveit_rviz_plugin {
43 
44 FactoryModel::FactoryModel(rviz::Factory& factory, const QString& mime_type, QObject* parent)
45  : QStandardItemModel(parent), mime_type_(mime_type) {
46  setHorizontalHeaderLabels({ tr("Name") });
47  fillTree(factory);
48 }
49 
51  QIcon default_package_icon = rviz::loadPixmap("package://rviz/icons/default_package_icon.png");
52 
53  QStringList classes = factory.getDeclaredClassIds();
54  classes.sort();
55 
56  // Map from package names to the corresponding top-level tree widget items.
57  std::map<QString, QStandardItem*> package_items;
58 
59  for (const QString& lookup_name : classes) {
60  QString package = factory.getClassPackage(lookup_name);
61 
62  QStandardItem* package_item;
63  auto mi = package_items.find(package);
64  if (mi == package_items.end()) {
65  package_item = new QStandardItem(default_package_icon, package);
66  package_items[package] = package_item;
67  appendRow(package_item);
68  } else {
69  package_item = mi->second;
70  }
71  QStandardItem* class_item = new QStandardItem(factory.getIcon(lookup_name), factory.getClassName(lookup_name));
72  class_item->setWhatsThis(factory.getClassDescription(lookup_name));
73  class_item->setData(lookup_name, Qt::UserRole);
74  class_item->setDragEnabled(true);
75  package_item->appendRow(class_item);
76  }
77 }
78 
79 QStringList FactoryModel::mimeTypes() const {
80  return { mime_type_ };
81 }
82 
83 QMimeData* FactoryModel::mimeData(const QModelIndexList& indexes) const {
84  QSet<int> rows_considered;
85  QMimeData* mime_data = new QMimeData();
86  for (const auto& index : indexes) {
87  if (rows_considered.contains(index.row()))
88  continue;
89  // mime data is lookup_name
90  mime_data->setData(mime_type_, index.data(Qt::UserRole).toByteArray());
91  }
92  return mime_data;
93 }
94 } // namespace moveit_rviz_plugin
factory_model.h
rviz::loadPixmap
QPixmap loadPixmap(const QString &url, bool fill_cache)
package
string package
load_resource.h
rviz::Factory::getClassDescription
virtual QString getClassDescription(const QString &class_id) const=0
rviz::Factory::getDeclaredClassIds
virtual QStringList getDeclaredClassIds()=0
rviz::Factory::getClassName
virtual QString getClassName(const QString &class_id) const=0
moveit_rviz_plugin
moveit_rviz_plugin::FactoryModel::mimeTypes
QStringList mimeTypes() const override
Definition: factory_model.cpp:111
index
unsigned int index
moveit_rviz_plugin::FactoryModel::FactoryModel
FactoryModel(rviz::Factory &factory, const QString &mime_type, QObject *parent=nullptr)
Definition: factory_model.cpp:76
rviz::Factory
rviz::Factory::getIcon
virtual QIcon getIcon(const QString &class_id) const=0
moveit_rviz_plugin::FactoryModel::mime_type_
QString mime_type_
Definition: factory_model.h:113
moveit_rviz_plugin::FactoryModel::fillTree
void fillTree(rviz::Factory &factory)
Definition: factory_model.cpp:82
moveit_rviz_plugin::FactoryModel::mimeData
QMimeData * mimeData(const QModelIndexList &indexes) const override
Definition: factory_model.cpp:115


visualization
Author(s): Robert Haschke
autogenerated on Thu Feb 27 2025 03:39:51