Skip to content

Commit 71e419c

Browse files
Addition of delete button for lift table (#511)
Signed-off-by: tanjunkiat <[email protected]> Co-authored-by: Luca Della Vedova <[email protected]>
1 parent 2dd298a commit 71e419c

File tree

3 files changed

+74
-3
lines changed

3 files changed

+74
-3
lines changed

rmf_traffic_editor/gui/level.cpp

+44
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,50 @@ bool Level::delete_selected()
498498
return true;
499499
}
500500

501+
bool Level::delete_lift_vertex(std::string lift_name)
502+
{
503+
std::vector<int> selected_vertex_idxes;
504+
for (int i = 0; i < static_cast<int>(vertices.size()); i++)
505+
{
506+
if (vertices[i].params.count("lift_cabin"))
507+
{
508+
if (vertices[i].params["lift_cabin"].value_string == lift_name)
509+
{
510+
selected_vertex_idxes.push_back(i);
511+
}
512+
}
513+
}
514+
515+
for (const auto& idx : selected_vertex_idxes)
516+
{
517+
edges.erase(
518+
std::remove_if(
519+
edges.begin(),
520+
edges.end(),
521+
[idx](const Edge& edge)
522+
{
523+
if (edge.start_idx == idx ||
524+
edge.end_idx == idx)
525+
{
526+
return true;
527+
}
528+
else
529+
return false;
530+
}),
531+
edges.end());
532+
533+
for (Edge& edge : edges)
534+
{
535+
if (edge.start_idx > idx)
536+
edge.start_idx--;
537+
if (edge.end_idx > idx)
538+
edge.end_idx--;
539+
}
540+
vertices.erase(vertices.begin() + idx);
541+
}
542+
return true;
543+
}
544+
501545
void Level::get_selected_items(
502546
std::vector<Level::SelectedItem>& items)
503547
{

rmf_traffic_editor/gui/level.h

+1
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ class Level
145145

146146
bool can_delete_current_selection();
147147
bool delete_selected();
148+
bool delete_lift_vertex(std::string lift_name);
148149
void calculate_scale(const CoordinateSystem& coordinate_system);
149150
void clear_selection();
150151

rmf_traffic_editor/gui/lift_table.cpp

+29-3
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
#include <QtWidgets>
2121

2222
LiftTable::LiftTable()
23-
: TableList()
23+
: TableList(3)
2424
{
25-
const QStringList labels = { "Name", "" };
25+
const QStringList labels = { "Name", "", ""};
2626
setHorizontalHeaderLabels(labels);
2727
}
2828

@@ -45,6 +45,9 @@ void LiftTable::update(Building& building)
4545
QPushButton* edit_button = new QPushButton("Edit...", this);
4646
setCellWidget(i, 1, edit_button);
4747

48+
QPushButton* delete_button = new QPushButton("Delete", this);
49+
setCellWidget(i, 2, delete_button);
50+
4851
connect(
4952
edit_button,
5053
&QAbstractButton::clicked,
@@ -65,18 +68,41 @@ void LiftTable::update(Building& building)
6568
&LiftDialog::redraw,
6669
[this]() { emit redraw(); });
6770
});
71+
72+
connect(
73+
delete_button,
74+
&QAbstractButton::clicked,
75+
[this, &building, i]()
76+
{
77+
for (size_t j = 0; j < building.lifts.size(); j++)
78+
{
79+
if (j == i)
80+
{
81+
auto lift_name = building.lifts[j].name;
82+
for (auto& level : building.levels)
83+
{
84+
level.delete_lift_vertex(lift_name);
85+
}
86+
building.lifts.erase(building.lifts.begin() + i);
87+
break;
88+
}
89+
}
90+
update(building);
91+
emit redraw();
92+
});
6893
}
6994

7095
// we'll use the last row for the "Add" button
7196
const int last_row_idx = static_cast<int>(building.lifts.size());
7297
setCellWidget(last_row_idx, 0, nullptr);
98+
setCellWidget(last_row_idx, 1, nullptr);
7399
setItem(
74100
last_row_idx,
75101
0,
76102
new QTableWidgetItem(
77103
QString::fromStdString("")));
78104
QPushButton* add_button = new QPushButton("Add...", this);
79-
setCellWidget(last_row_idx, 1, add_button);
105+
setCellWidget(last_row_idx, 2, add_button);
80106
connect(
81107
add_button, &QAbstractButton::clicked,
82108
[this, &building]()

0 commit comments

Comments
 (0)