From bce6a434272ad9b21e73e0a8454cbdfc04dd0879 Mon Sep 17 00:00:00 2001 From: joshua Date: Sun, 10 Apr 2022 13:52:45 +0200 Subject: [PATCH 1/2] Several terminals can be removed or moved from strip in one shot --- sources/TerminalStrip/terminalstrip.cpp | 8 + sources/TerminalStrip/terminalstrip.h | 1 + .../TerminalStrip/ui/terminalstripeditor.cpp | 99 ++++- .../TerminalStrip/ui/terminalstripeditor.h | 1 + .../TerminalStrip/ui/terminalstripeditor.ui | 402 ++++++++++-------- 5 files changed, 335 insertions(+), 176 deletions(-) diff --git a/sources/TerminalStrip/terminalstrip.cpp b/sources/TerminalStrip/terminalstrip.cpp index b66daa0eb..ff0fb6262 100644 --- a/sources/TerminalStrip/terminalstrip.cpp +++ b/sources/TerminalStrip/terminalstrip.cpp @@ -74,6 +74,14 @@ void TerminalStrip::setDescription(const QString &description) { m_data.m_description = description; } +/** + * @brief TerminalStrip::project + * @return the project of this terminal strip or nullptr + */ +QETProject *TerminalStrip::project() const { + return m_project.data(); +} + /** * @brief TerminalStrip::data * @return The internal data of this strip diff --git a/sources/TerminalStrip/terminalstrip.h b/sources/TerminalStrip/terminalstrip.h index da4765a22..2934ee999 100644 --- a/sources/TerminalStrip/terminalstrip.h +++ b/sources/TerminalStrip/terminalstrip.h @@ -73,6 +73,7 @@ class TerminalStrip : public QObject void setDescription(const QString &description); QString description() const {return m_data.m_description;} QUuid uuid() const {return m_data.m_uuid;} + QETProject *project() const; TerminalStripData data() const; void setData(const TerminalStripData &data); diff --git a/sources/TerminalStrip/ui/terminalstripeditor.cpp b/sources/TerminalStrip/ui/terminalstripeditor.cpp index e40a51a87..eed16a029 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.cpp +++ b/sources/TerminalStrip/ui/terminalstripeditor.cpp @@ -17,6 +17,7 @@ */ #include "terminalstripeditor.h" #include "ui_terminalstripeditor.h" +#include "../UndoCommand/addterminaltostripcommand.h" #include "../../qetproject.h" #include "../terminalstrip.h" #include "../UndoCommand/changeterminalstripdata.h" @@ -99,6 +100,8 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_) disconnect(m_current_strip, &TerminalStrip::bridgeChanged, this, &TerminalStripEditor::reload); } + ui->m_move_to_cb->clear(); + if (!strip_) { ui->m_installation_le ->clear(); @@ -112,7 +115,7 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_) if (m_model) { m_model->deleteLater(); m_model = nullptr; - } + } } else { @@ -121,18 +124,34 @@ void TerminalStripEditor::setCurrentStrip(TerminalStrip *strip_) ui->m_name_le ->setText(strip_->name()); ui->m_comment_le ->setText(strip_->comment()); ui->m_description_te ->setPlainText(strip_->description()); + ui->m_move_to_cb->addItem(tr("Bornes indépendantes"), QUuid()); + + const auto project_{strip_->project()}; + if (project_) + { + const auto strip_vector = project_->terminalStrip(); + for (const auto &strip : strip_vector) + { + if (strip == strip_) { + continue; + } + + ui->m_move_to_cb->addItem(QString{strip->installation() + " " + strip->location() + " " + strip->name()}, + strip->uuid()); + } + } + m_current_strip = strip_; - if (m_model) - { + if (m_model) { m_model->setTerminalStrip(strip_); - connect(ui->m_table_widget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &TerminalStripEditor::selectionChanged); } else { m_model = new TerminalStripModel{strip_, this}; ui->m_table_widget->setModel(m_model); m_model->buildBridgePixmap(setUpBridgeCellWidth()); + connect(ui->m_table_widget->selectionModel(), &QItemSelectionModel::selectionChanged, this, &TerminalStripEditor::selectionChanged); } spanMultiLevelTerminals(); @@ -321,6 +340,22 @@ void TerminalStripEditor::selectionChanged() ui->m_bridge_terminals_pb->setEnabled(enable_bridge); ui->m_unbridge_terminals_pb->setEnabled(enable_unbridge); ui->m_bridge_color_cb->setEnabled(enable_bridge_color); + + //Enable or not the 'move to' buttons + bool enabled_move_to{!model_physical_terminal_vector.isEmpty()}; + for (const auto &model_physical : model_physical_terminal_vector) + { + for (const auto &model_real_data : model_physical.real_data) + { + if (model_real_data.bridged_) { + enabled_move_to = false; + break; + } + } + } + ui->m_move_to_label->setEnabled(enabled_move_to); + ui->m_move_to_cb->setEnabled(enabled_move_to); + ui->m_move_to_pb->setEnabled(enabled_move_to); } QSize TerminalStripEditor::setUpBridgeCellWidth() @@ -653,3 +688,59 @@ void TerminalStripEditor::on_m_bridge_color_cb_activated(const QColor &col) } } + +void TerminalStripEditor::on_m_move_to_pb_clicked() +{ + if (!m_model || !m_current_strip || !m_current_strip->project()) { + return; + } + + //Get selected physical terminal + const auto index_vector = m_model->modelPhysicalTerminalDataForIndex(ui->m_table_widget->selectionModel()->selectedIndexes()); + QVector> phy_vector; + for (const auto &index : index_vector) + { + const auto shared_{m_current_strip->physicalTerminal(index.uuid_)}; + if (shared_) + phy_vector.append(shared_); + } + + if (phy_vector.isEmpty()) { + return; + } + + auto undo_stack{m_current_strip->project()->undoStack()}; + const auto uuid_{ui->m_move_to_cb->currentData().toUuid()}; + //Uuid is null we move the selected terminal to indepandant terminal + if (uuid_.isNull()) + { + undo_stack->beginMacro(tr("Retirer des bornes d'un bornier")); + for (const auto &phy_ : phy_vector) { + undo_stack->push(new RemoveTerminalFromStripCommand(phy_, m_current_strip)); + } + undo_stack->endMacro(); + } + else + { + TerminalStrip *receiver_strip{nullptr}; + const auto strip_vector = m_current_strip->project()->terminalStrip(); + for (const auto &strip_ : strip_vector) + { + if (strip_->uuid() == uuid_) { + receiver_strip = strip_; + break; + } + } + + if (!receiver_strip) { + return; + } + + undo_stack->beginMacro(tr("Déplacer des bornes d'un bornier à un autre")); + for (const auto &phy_ : phy_vector) { + undo_stack->push(new MoveTerminalCommand(phy_, m_current_strip, receiver_strip)); + } + undo_stack->endMacro(); + } +} + diff --git a/sources/TerminalStrip/ui/terminalstripeditor.h b/sources/TerminalStrip/ui/terminalstripeditor.h index 1a6b11c77..f7b701bd3 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.h +++ b/sources/TerminalStrip/ui/terminalstripeditor.h @@ -63,6 +63,7 @@ class TerminalStripEditor : public QWidget void on_m_bridge_terminals_pb_clicked(); void on_m_unbridge_terminals_pb_clicked(); void on_m_bridge_color_cb_activated(const QColor &col); + void on_m_move_to_pb_clicked(); private: Ui::TerminalStripEditor *ui; diff --git a/sources/TerminalStrip/ui/terminalstripeditor.ui b/sources/TerminalStrip/ui/terminalstripeditor.ui index f6fb25552..29f6854e3 100644 --- a/sources/TerminalStrip/ui/terminalstripeditor.ui +++ b/sources/TerminalStrip/ui/terminalstripeditor.ui @@ -6,8 +6,8 @@ 0 0 - 922 - 516 + 873 + 483 @@ -23,10 +23,234 @@ Disposition - + + + + + + 0 + + + + + + Sans + + + + + Avec + + + + + + + + Qt::Horizontal + + + + + + + Effectuer le déplacement + + + + + + + :/ico/16x16/dialog-ok.png:/ico/16x16/dialog-ok.png + + + + + + + + + + Étage : + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Type : + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Couleur pont : + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + Générique + + + + + Fusible + + + + + Sectionnable + + + + + Diode + + + + + Terre + + + + + + + + LED : + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Fonction : + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Déplacer dans : + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + Générique + + + + + Phase + + + + + Neutre + + + + + + + + QComboBox::AdjustToContents + + + + + + + 6 + + + + + + + Position automatique + + + + + + + Grouper les bornes + + + + + + + Degrouper les bornes + + + + + + + Ponter les bornes + + + + + + + Déponter les bornes + + + + + + @@ -95,174 +319,6 @@ - - - - - - - Type : - - - - - - - Fonction : - - - - - - - Ponter les bornes - - - - - - - Position automatique - - - - - - - Déponter les bornes - - - - - - - Grouper les bornes - - - - - - - Étage : - - - - - - - - - - LED : - - - - - - - - Générique - - - - - Fusible - - - - - Sectionnable - - - - - Diode - - - - - Terre - - - - - - - - - Générique - - - - - Phase - - - - - Neutre - - - - - - - - Qt::Horizontal - - - - - - - 6 - - - - - - - Degrouper les bornes - - - - - - - - Sans - - - - - Avec - - - - - - - - Couleur pont : - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - @@ -272,6 +328,8 @@
kcolorcombo.h
- + + + From baf412614ca04b21b3fbb8b7d5ff13b3f672654c Mon Sep 17 00:00:00 2001 From: joshua Date: Wed, 4 May 2022 18:38:45 +0200 Subject: [PATCH 2/2] Remove terminal strip widget Since this commit, the terminals can't be moved from the tree widget, instead we need to use the "move in" widget to move one or several selected terminals in the table view. --- .../ui/terminalstriptreedockwidget.cpp | 91 +++--------- .../ui/terminalstriptreedockwidget.h | 12 +- .../ui/terminalstriptreedockwidget.ui | 12 +- .../ui/terminalstriptreewidget.cpp | 137 ------------------ .../ui/terminalstriptreewidget.h | 73 ---------- 5 files changed, 30 insertions(+), 295 deletions(-) delete mode 100644 sources/TerminalStrip/ui/terminalstriptreewidget.cpp delete mode 100644 sources/TerminalStrip/ui/terminalstriptreewidget.h diff --git a/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp b/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp index e6eddca94..3ec09f04f 100644 --- a/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp +++ b/sources/TerminalStrip/ui/terminalstriptreedockwidget.cpp @@ -26,7 +26,6 @@ #include "../realterminal.h" #include "../../qetgraphicsitem/terminalelement.h" #include "../terminalstrip.h" -#include "terminalstriptreewidget.h" TerminalStripTreeDockWidget::TerminalStripTreeDockWidget(QETProject *project, QWidget *parent) : QDockWidget(parent), @@ -41,8 +40,6 @@ TerminalStripTreeDockWidget::TerminalStripTreeDockWidget(QETProject *project, QW #else ui->m_tree_view->expandAll(); #endif - - setupUndoConnections(); } TerminalStripTreeDockWidget::~TerminalStripTreeDockWidget() @@ -112,10 +109,10 @@ QString TerminalStripTreeDockWidget::currentInstallation() const if (auto item = ui->m_tree_view->currentItem()) { - if (item->type() == TerminalStripTreeWidget::Location) { + if (item->type() == Location) { item = item->parent(); } - if (item->type() == TerminalStripTreeWidget::Installation) { + if (item->type() == Installation) { return item->data(0, Qt::DisplayRole).toString(); } } @@ -134,7 +131,7 @@ QString TerminalStripTreeDockWidget::currentLocation() const } if (auto item = ui->m_tree_view->currentItem()) { - if (item->type() == TerminalStripTreeWidget::Location) { + if (item->type() == Location) { return item->data(0, Qt::DisplayRole).toString(); } } @@ -157,8 +154,8 @@ void TerminalStripTreeDockWidget::setSelectedStrip(TerminalStrip *strip) { QSharedPointer TerminalStripTreeDockWidget::currentRealTerminal() const { if (auto item = ui->m_tree_view->currentItem()) { - if (item->type() == TerminalStripTreeWidget::Terminal) { - return m_uuid_terminal_H.value(item->data(0,TerminalStripTreeWidget::UUID_USER_ROLE).toUuid()); + if (item->type() == Terminal) { + return m_uuid_terminal_H.value(item->data(0,UUID_USER_ROLE).toUuid()); } } return QSharedPointer(); @@ -179,12 +176,12 @@ void TerminalStripTreeDockWidget::on_m_tree_view_currentItemChanged(QTreeWidgetI } TerminalStrip *strip_ = nullptr; - if (current->type() == TerminalStripTreeWidget::Strip) { + if (current->type() == Strip) { strip_ = m_item_strip_H.value(current); } - else if (current->type() == TerminalStripTreeWidget::Terminal + else if (current->type() == Terminal && current->parent() - && current->parent()->type() == TerminalStripTreeWidget::Strip) { + && current->parent()->type() == Strip) { strip_ = m_item_strip_H.value(current->parent()); } @@ -205,10 +202,10 @@ void TerminalStripTreeDockWidget::buildTree() } QStringList strl{title_}; - new QTreeWidgetItem(ui->m_tree_view, strl, TerminalStripTreeWidget::Root); + new QTreeWidgetItem(ui->m_tree_view, strl, Root); QStringList ftstrl(tr("Bornes indépendante")); - new QTreeWidgetItem(ui->m_tree_view, ftstrl, TerminalStripTreeWidget::FreeTerminal); + new QTreeWidgetItem(ui->m_tree_view, ftstrl, FreeTerminal); auto ts_vector = m_project->terminalStrip(); std::sort(ts_vector.begin(), ts_vector.end(), [](TerminalStrip *a, TerminalStrip *b) { @@ -242,7 +239,7 @@ QTreeWidgetItem* TerminalStripTreeDockWidget::addTerminalStrip(TerminalStrip *te } if (!inst_qtwi) { QStringList inst_strl{installation_str}; - inst_qtwi = new QTreeWidgetItem(root_item, inst_strl, TerminalStripTreeWidget::Installation); + inst_qtwi = new QTreeWidgetItem(root_item, inst_strl, Installation); } //Check if location already exist @@ -258,13 +255,13 @@ QTreeWidgetItem* TerminalStripTreeDockWidget::addTerminalStrip(TerminalStrip *te } if (!loc_qtwi) { QStringList loc_strl{location_str}; - loc_qtwi = new QTreeWidgetItem(inst_qtwi, loc_strl, TerminalStripTreeWidget::Location); + loc_qtwi = new QTreeWidgetItem(inst_qtwi, loc_strl, Location); } //Add the terminal strip QStringList name{terminal_strip->name()}; - auto strip_item = new QTreeWidgetItem(loc_qtwi, name, TerminalStripTreeWidget::Strip); - strip_item->setData(0, TerminalStripTreeWidget::UUID_USER_ROLE, terminal_strip->uuid()); + auto strip_item = new QTreeWidgetItem(loc_qtwi, name, Strip); + strip_item->setData(0, UUID_USER_ROLE, terminal_strip->uuid()); strip_item->setIcon(0, QET::Icons::TerminalStrip); //Add child terminal of the strip @@ -282,8 +279,8 @@ QTreeWidgetItem* TerminalStripTreeDockWidget::addTerminalStrip(TerminalStrip *te text_.append(QStringLiteral(", ")).append(real_t->label()); } const auto real_t = phy_t->realTerminals().at(0); - auto terminal_item = new QTreeWidgetItem(strip_item, QStringList(text_), TerminalStripTreeWidget::Terminal); - terminal_item->setData(0, TerminalStripTreeWidget::UUID_USER_ROLE, phy_t->uuid()); + auto terminal_item = new QTreeWidgetItem(strip_item, QStringList(text_), Terminal); + terminal_item->setData(0, UUID_USER_ROLE, phy_t->uuid()); terminal_item->setIcon(0, QET::Icons::ElementTerminal); } } @@ -318,66 +315,14 @@ void TerminalStripTreeDockWidget::addFreeTerminal() { QUuid uuid_ = terminal->uuid(); QStringList strl{terminal->actualLabel()}; - auto item = new QTreeWidgetItem(free_terminal_item, strl, TerminalStripTreeWidget::Terminal); - item->setData(0, TerminalStripTreeWidget::UUID_USER_ROLE, uuid_.toString()); + auto item = new QTreeWidgetItem(free_terminal_item, strl, Terminal); + item->setData(0, UUID_USER_ROLE, uuid_.toString()); item->setIcon(0, QET::Icons::ElementTerminal); m_uuid_terminal_H.insert(uuid_, terminal->realTerminal()); } } -void TerminalStripTreeDockWidget::setupUndoConnections() -{ - connect(ui->m_tree_view, &TerminalStripTreeWidget::terminalAddedToStrip, this, - [=](QUuid terminal_uuid, QUuid strip_uuid) - { - auto terminal = m_uuid_terminal_H.value(terminal_uuid); - auto strip = m_uuid_strip_H.value(strip_uuid); - - if (!terminal || !strip) { - return; - } - - auto undo = new AddTerminalToStripCommand(terminal, strip); - m_project->undoStack()->push(undo); - }); - - connect(ui->m_tree_view, &TerminalStripTreeWidget::terminalMovedFromStripToStrip, this, - [=] (QUuid terminal_uuid, QUuid old_strip_uuid, QUuid new_strip_uuid) - { - auto old_strip = m_uuid_strip_H.value(old_strip_uuid); - auto new_strip = m_uuid_strip_H.value(new_strip_uuid); - - if (!old_strip || !new_strip) { - return; - } - auto terminal = old_strip->physicalTerminal(terminal_uuid); - if (!terminal) { - return; - } - - auto undo = new MoveTerminalCommand(terminal, old_strip, new_strip); - m_project->undoStack()->push(undo); - }); - - connect(ui->m_tree_view, &TerminalStripTreeWidget::terminalRemovedFromStrip, this, - [=] (QUuid terminal_uuid, QUuid old_strip_uuid) - { - auto strip_ = m_uuid_strip_H.value(old_strip_uuid); - if (!strip_) { - return; - } - - auto terminal_ = strip_->physicalTerminal(terminal_uuid); - if (!terminal_) { - return; - } - - auto undo = new RemoveTerminalFromStripCommand(terminal_, strip_); - m_project->undoStack()->push(undo); - }); -} - void TerminalStripTreeDockWidget::setCurrentStrip(TerminalStrip *strip) { m_current_strip = strip; diff --git a/sources/TerminalStrip/ui/terminalstriptreedockwidget.h b/sources/TerminalStrip/ui/terminalstriptreedockwidget.h index e1dfd08f6..586d212a1 100644 --- a/sources/TerminalStrip/ui/terminalstriptreedockwidget.h +++ b/sources/TerminalStrip/ui/terminalstriptreedockwidget.h @@ -33,6 +33,17 @@ namespace Ui { class TerminalStripTreeDockWidget : public QDockWidget { Q_OBJECT + private: + enum TreeWidgetType{ + Root, + Terminal, + FreeTerminal, + Installation, + Location, + Strip + }; + //Role used for data in QTreeWidgetItem + static constexpr int UUID_USER_ROLE{Qt::UserRole + 1}; public: explicit TerminalStripTreeDockWidget(QETProject *project, QWidget *parent = nullptr); @@ -56,7 +67,6 @@ class TerminalStripTreeDockWidget : public QDockWidget void buildTree(); QTreeWidgetItem* addTerminalStrip(TerminalStrip *terminal_strip); void addFreeTerminal(); - void setupUndoConnections(); void setCurrentStrip(TerminalStrip *strip); private: diff --git a/sources/TerminalStrip/ui/terminalstriptreedockwidget.ui b/sources/TerminalStrip/ui/terminalstriptreedockwidget.ui index f04b5df29..c0d19c3ea 100644 --- a/sources/TerminalStrip/ui/terminalstriptreedockwidget.ui +++ b/sources/TerminalStrip/ui/terminalstriptreedockwidget.ui @@ -16,10 +16,7 @@ - - - QAbstractItemView::InternalMove - + true @@ -36,13 +33,6 @@ - - - TerminalStripTreeWidget - QTreeWidget -
terminalstriptreewidget.h
-
-
diff --git a/sources/TerminalStrip/ui/terminalstriptreewidget.cpp b/sources/TerminalStrip/ui/terminalstriptreewidget.cpp deleted file mode 100644 index 17a184549..000000000 --- a/sources/TerminalStrip/ui/terminalstriptreewidget.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - Copyright 2006-2021 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#include "terminalstriptreewidget.h" -#include "../../qeticons.h" - -#include -#include -#include -#include - -TerminalStripTreeWidget::TerminalStripTreeWidget(QWidget *parent) : - QTreeWidget(parent) -{} - -QStringList TerminalStripTreeWidget::mimeTypes() const -{ - QStringList strl(QStringLiteral("application/x-qet-terminal-strip-tree-terminal-uuid")); - - return strl; -} - -void TerminalStripTreeWidget::startDrag(Qt::DropActions supportedActions) -{ - Q_UNUSED(supportedActions) - - auto item = currentItem(); - - if (!item || - item->type() != TerminalStripTreeWidget::Terminal) { - return; - } - - QDrag drag(this); - auto mime_data = new QMimeData(); - mime_data->setData("application/x-qet-terminal-strip-tree-terminal-uuid", item->data(0, UUID_USER_ROLE).toString().toLatin1()); - - drag.setMimeData(mime_data); - drag.setPixmap(QET::Icons::ElementTerminal.pixmap(16,16)); - drag.exec(Qt::MoveAction); -} - -void TerminalStripTreeWidget::dragMoveEvent(QDragMoveEvent *event) -{ - auto strl = event->mimeData()->formats(); - if (strl.size() != 1 || - strl.first() != "application/x-qet-terminal-strip-tree-terminal-uuid") { - event->ignore(); - return; - } - //Accepted move are : - //free terminal to terminal strip - //terminal strip to another terminal strip - //terminal strip to free terminal - //All other other move is ignored - QTreeWidget::dragMoveEvent(event); - - auto overred_item = itemAt(event->pos()); - auto dragged_item = currentItem(); - if (!overred_item || - !dragged_item || - !dragged_item->parent()) { - return; - } - //Ignore the event by default, we confirm it bellow if needed. - event->ignore(); - - //Move terminal - if (dragged_item->parent()->type() == FreeTerminal && //From free to strip - overred_item->type() == Strip) { - event->accept(); - } - else if (dragged_item->parent()->type() == Strip) //From strip to ... - { - if (overred_item->type() == FreeTerminal) { //Free terminal - event->accept(); - } else if (overred_item->type() == Strip && //Another strip - dragged_item->parent() != overred_item) { - event->accept(); - } - } -} - -void TerminalStripTreeWidget::dropEvent(QDropEvent *event) -{ - auto overred_item = itemAt(event->pos()); - auto dragged_item = currentItem(); - if (!overred_item || - !dragged_item || - !dragged_item->parent()) { - return; - } - - auto old_parent = dragged_item->parent(); - old_parent->removeChild(dragged_item); - overred_item->addChild(dragged_item); - - //Move terminal - if (old_parent->type() == FreeTerminal && //From free to strip - overred_item->type() == Strip) { - emit terminalAddedToStrip(QUuid(dragged_item->data(0, UUID_USER_ROLE).toString()), - QUuid(overred_item->data(0, UUID_USER_ROLE).toString())); - } - else if (old_parent->type() == Strip) //From strip to ... - { - if (overred_item->type() == FreeTerminal) //Free terminal - { - emit terminalRemovedFromStrip(QUuid(dragged_item->data(0, UUID_USER_ROLE).toString()), - QUuid(old_parent->data(0, UUID_USER_ROLE).toString())); - } - else if (overred_item->type() == Strip) //To another strip - { - emit terminalMovedFromStripToStrip(QUuid(dragged_item->data(0, UUID_USER_ROLE).toString()), - QUuid(old_parent->data(0, UUID_USER_ROLE).toString()), - QUuid(overred_item->data(0, UUID_USER_ROLE).toString())); - } - } - -} - -Qt::DropActions TerminalStripTreeWidget::supportedDropActions() const { - return Qt::MoveAction; -} diff --git a/sources/TerminalStrip/ui/terminalstriptreewidget.h b/sources/TerminalStrip/ui/terminalstriptreewidget.h deleted file mode 100644 index d5b7fac1e..000000000 --- a/sources/TerminalStrip/ui/terminalstriptreewidget.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - Copyright 2006-2021 The QElectroTech Team - This file is part of QElectroTech. - - QElectroTech is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - QElectroTech is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with QElectroTech. If not, see . -*/ -#ifndef TERMINALSTRIPTREEWIDGET_H -#define TERMINALSTRIPTREEWIDGET_H - -#include -#include - -/** - * @brief The TerminalStripTreeWidget class - * Derived class use to implement custom drag and drop - */ -class TerminalStripTreeWidget : public QTreeWidget -{ - Q_OBJECT - public : - enum TreeWidgetType{ - Root, - Terminal, - FreeTerminal, - Installation, - Location, - Strip - }; - - //Role used for data in QTreeWidgetItem - static constexpr int UUID_USER_ROLE{Qt::UserRole + 1}; - - signals: - /** - * @brief terminalAddedToStrip - * Signal emited when a terminal is moved from free terminal to a terminals trip - */ - void terminalAddedToStrip(QUuid terminal_uuid, QUuid strip_uuid); - /** - * @brief terminalMovedFromStripToStrip - * Signam emitted when a terminal is moved from from a terminal stip to another one - */ - void terminalMovedFromStripToStrip(QUuid terminal_uuid, QUuid old_strip_uuid, QUuid new_strip_uuid); - /** - * @brief terminalRemovedFromStrip - * Signal emitted when a terminal is moved from a terminal strip to free terminal - */ - void terminalRemovedFromStrip(QUuid terminal_uuid, QUuid old_strip_uuid); - - - public: - TerminalStripTreeWidget(QWidget *parent = nullptr); - - protected: - QStringList mimeTypes() const override; - void startDrag(Qt::DropActions supportedActions) override; - void dragMoveEvent(QDragMoveEvent *event) override; - void dropEvent(QDropEvent *event) override; - Qt::DropActions supportedDropActions() const override; -}; - -#endif // TERMINALSTRIPTREEWIDGET_H