GCC Code Coverage Report


Directory: plugins/
File: plugins/hppmanipulationwidgetsplugin/linkwidget.cc
Date: 2024-12-13 15:51:58
Exec Total Coverage
Lines: 0 71 0.0%
Branches: 0 222 0.0%

Line Branch Exec Source
1 //
2 // Copyright (c) CNRS
3 // Authors: Joseph Mirabel and Heidy Dallard
4 //
5
6 #include "linkwidget.hh"
7
8 #include <QListWidget>
9 #include <QShortcut>
10
11 #include "hppmanipulationwidgetsplugin/ui_linkwidget.h"
12
13 namespace hpp {
14 namespace gui {
15 LinkWidget::LinkWidget(QListWidget *grippersList, QListWidget *handlesList,
16 QWidget *parent)
17 : QWidget(parent), ui_(new Ui::LinkWidget) {
18 ui_->setupUi(this);
19 grippers_ = grippersList;
20 handles_ = handlesList;
21
22 connect(ui_->createButton, SIGNAL(clicked()), SLOT(createRule()));
23
24 QShortcut *shortcut =
25 new QShortcut(QKeySequence(Qt::Key_Delete), ui_->rulesList);
26 connect(shortcut, SIGNAL(activated()), this, SLOT(deleteSelectedRules()));
27
28 ui_->rulesList->setSelectionMode(QAbstractItemView::ExtendedSelection);
29
30 connect(
31 grippersList->selectionModel(),
32 SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
33 SLOT(gripperChanged(const QItemSelection &, const QItemSelection &)));
34 connect(
35 handlesList->selectionModel(),
36 SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
37 SLOT(handleChanged(const QItemSelection &, const QItemSelection &)));
38
39 ui_->handlesList->addItem(".*");
40 ui_->handlesList->addItem("");
41 }
42
43 LinkWidget::~LinkWidget() { delete ui_; }
44
45 Rules_var LinkWidget::getRules() {
46 Rules_var rules = new Rules();
47 rules->length(rules_.size());
48
49 int i = 0;
50 foreach (const RuleProxy &rule, rules_) {
51 rules[i].grippers.length(rule.grippers.size());
52 rules[i].handles.length(rule.handles.size());
53 for (int j = 0; j < rule.grippers.size(); ++j) {
54 QByteArray a = rule.grippers[j].toLocal8Bit();
55 rules[i].grippers[j] = new char[a.length() + 1];
56 strcpy(rules[i].grippers[0], a.constData());
57 }
58 for (int j = 0; j < rule.grippers.size(); ++j) {
59 QByteArray a = rule.handles[j].toLocal8Bit();
60 rules[i].handles[j] = new char[a.length() + 1];
61 strcpy(rules[i].handles[j], a.constData());
62 }
63 rules[i].link = rule.link;
64 ++i;
65 }
66 return rules;
67 }
68
69 void LinkWidget::gripperChanged(const QItemSelection &selected,
70 const QItemSelection &deselected) {
71 foreach (QModelIndex idx, selected.indexes()) {
72 ui_->grippersList->addItem(grippers_->item(idx.row())->text());
73 }
74 foreach (QModelIndex idx, deselected.indexes()) {
75 QList<QListWidgetItem *> list = ui_->grippersList->findItems(
76 grippers_->item(idx.row())->text(), Qt::MatchExactly);
77 delete ui_->grippersList->takeItem(ui_->grippersList->row(list.front()));
78 }
79 }
80
81 void LinkWidget::handleChanged(const QItemSelection &selected,
82 const QItemSelection &deselected) {
83 foreach (QModelIndex idx, selected.indexes()) {
84 ui_->handlesList->addItem(handles_->item(idx.row())->text());
85 }
86 foreach (QModelIndex idx, deselected.indexes()) {
87 QList<QListWidgetItem *> list = ui_->handlesList->findItems(
88 handles_->item(idx.row())->text(), Qt::MatchExactly);
89 delete ui_->handlesList->takeItem(ui_->handlesList->row(list.front()));
90 }
91 }
92
93 void LinkWidget::createRule() {
94 QList<QListWidgetItem *> grippers = ui_->grippersList->selectedItems();
95 QList<QListWidgetItem *> handles = ui_->handlesList->selectedItems();
96
97 foreach (QListWidgetItem *gripper, grippers) {
98 foreach (QListWidgetItem *handle, handles) {
99 rules_.push_back(RuleProxy());
100 RuleProxy &rule = rules_.back();
101
102 QString gripperName = gripper->text();
103 QString handleName = handle->text();
104
105 rule.grippers.push_back(gripperName);
106 rule.handles.push_back(handleName);
107
108 rule.link = ui_->linked->isChecked();
109
110 QString text(((rule.link == true) ? "Link " : "Don't link ") +
111 gripperName + " and " + handleName);
112 ui_->rulesList->addItem(text);
113 }
114 }
115 }
116
117 void LinkWidget::deleteSelectedRules() {
118 foreach (QListWidgetItem *item, ui_->rulesList->selectedItems()) {
119 for (int row = 0; row < ui_->rulesList->count(); ++row)
120 if (item == ui_->rulesList->item(row)) {
121 rules_.remove(row);
122 ui_->rulesList->takeItem(row);
123 break;
124 }
125 }
126 }
127 } // namespace gui
128 } // namespace hpp
129