27 #include <QDataStream>
28 #include <QStandardItem>
29 #include <QtDesigner/abstractmetadatabase.h>
33 QSortFilterProxyModel(parent),
37 setSourceModel(sModel);
39 connect(
this, SIGNAL(
reload()),
this, SLOT(onReload()));
49 gui::ObjectExplorerModel::onReload()
57 setFilterCaseSensitivity(Qt::CaseInsensitive);
58 QSortFilterProxyModel::setFilterFixedString(searchPattern);
61 std::pair<std::string, std::string>
64 return sModel->getItemInformation(mapToSource(
index));
68 gui::ObjectExplorerModel::filterAcceptsRow(
int sourceRow,
const QModelIndex& sourceParent)
const
70 QModelIndex
index = sourceModel()->index(sourceRow, 0, sourceParent);
71 return showThis(
index);
75 gui::ObjectExplorerModel::showThis(
const QModelIndex&
index)
const
77 bool acceptRow =
false;
80 if (sourceModel()->rowCount(
index) > 0)
82 for (
int nChild = 0; nChild < sourceModel()->rowCount(
index); ++nChild)
84 QModelIndex childIndex = sourceModel()->index(nChild, 0,
index);
86 if (!childIndex.isValid())
91 acceptRow = showThis(childIndex);
101 QModelIndex useIndex = sourceModel()->index(
index.row(), 0,
index.parent());
102 QString name = sourceModel()->data(useIndex, Qt::DisplayRole).toString();
104 if (!name.contains(filterRegExp()) || name.isEmpty())
120 return sModel->getItemPixmap(mapToSource(
index));
125 gui::ObjectExplorerModel::ObjectExplorerModelPrivate::ObjectExplorerModelPrivate(
130 QStandardItemModel(rows, columns, parent),
control(
control), sizeHint(50, 50)
135 gui::ObjectExplorerModel::ObjectExplorerModelPrivate::onReload()
139 std::vector<std::string> collections =
140 controller->getMemoryXController()->getPriorKnowlegdeController()->getCollectionNames();
142 this->setRowCount(collections.size());
143 std::vector<memoryx::ObjectClassPtr> objects;
144 std::string objectName;
146 for (
int row = 0; row < (int)collections.size(); ++row)
149 ->getPriorKnowlegdeController()
150 ->getAllObjectClassesPtr(collections[row]);
154 if (objects.size() < 1)
156 ARMARX_WARNING_S <<
"No objects found in collection " << collections.at(row);
160 QStandardItem* item =
new QStandardItem(QString::fromStdString(collections[row]));
162 for (
int i = 0; i < (int)objects.size(); ++i)
164 objectName = objects[i]->getName();
167 ->getPriorKnowlegdeController()
168 ->getCoinVisualisation(objects[i],
true) &&
170 ->getPriorKnowlegdeController()
171 ->getCoinVisualisation(objects[i],
false))
173 QStandardItem* child =
new QStandardItem(QString::fromStdString(objectName));
174 child->setSizeHint(sizeHint);
175 child->setIcon(this->getPreviewImageOfObject(
controller, objects[i]));
176 child->setEditable(
false);
177 item->setChild(i, child);
185 item->setSizeHint(QSize(30, 30));
186 item->setDragEnabled(
false);
187 this->appendRow(item);
192 std::pair<std::string, std::string>
193 gui::ObjectExplorerModel::ObjectExplorerModelPrivate::getItemInformation(
const QModelIndex&
index)
195 std::pair<std::string, std::string> toReturn;
200 QStandardItem* item = itemFromIndex(
index);
204 toReturn.first = item->text().toStdString();
205 toReturn.second = item->parent()->text().toStdString();
214 gui::ObjectExplorerModel::ObjectExplorerModelPrivate::getItemPixmap(
const QModelIndex&
index)
const
220 QStandardItem* item = itemFromIndex(
index);
221 pixmap = item->icon().pixmap(item->icon().actualSize(sizeHint));
225 QIcon i = QIcon(QPixmap::fromImage(QImage(
":/icons/armarx-gui.png")));
226 pixmap = i.pixmap(i.actualSize(sizeHint));
233 gui::ObjectExplorerModel::ObjectExplorerModelPrivate::getPreviewImageOfObject(
239 preview = QImage(
":/icons/armarx-gui.png");
251 return QIcon(QPixmap::fromImage(preview));
255 gui::ObjectExplorerModel::ObjectExplorerModelPrivate::mimeTypes()
const
258 types <<
"application/vnd.text.list";
263 gui::ObjectExplorerModel::ObjectExplorerModelPrivate::mimeData(
const QModelIndexList& indexes)
const
265 QMimeData* mimeData =
new QMimeData();
266 QByteArray encodedData;
268 QDataStream stream(&encodedData, QIODevice::WriteOnly);
270 foreach (QModelIndex
index, indexes)
274 QStandardItem* item = itemFromIndex(
index);
278 stream << item->parent()->text();
279 stream << item->text();
284 mimeData->setData(
"application/vnd.text.list", encodedData);