[qet] qet/qet: [5129] Dynamic element text editor : improve the gui |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 5129
Author: blacksun
Date: 2017-12-01 19:36:57 +0100 (Fri, 01 Dec 2017)
Log Message:
-----------
Dynamic element text editor : improve the gui
Modified Paths:
--------------
trunk/sources/ui/dynamicelementtextitemeditor.cpp
trunk/sources/ui/dynamicelementtextitemeditor.h
trunk/sources/ui/dynamicelementtextitemeditor.ui
trunk/sources/ui/dynamicelementtextmodel.cpp
trunk/sources/ui/dynamicelementtextmodel.h
trunk/sources/undocommand/addelementtextcommand.cpp
trunk/sources/undocommand/addelementtextcommand.h
Modified: trunk/sources/ui/dynamicelementtextitemeditor.cpp
===================================================================
--- trunk/sources/ui/dynamicelementtextitemeditor.cpp 2017-12-01 12:24:32 UTC (rev 5128)
+++ trunk/sources/ui/dynamicelementtextitemeditor.cpp 2017-12-01 18:36:57 UTC (rev 5129)
@@ -42,9 +42,11 @@
m_tree_view->setAlternatingRowColors(true);
m_tree_view->setEditTriggers(QAbstractItemView::CurrentChanged);
m_tree_view->installEventFilter(this);
+ m_tree_view->setDragDropMode(QAbstractItemView::InternalMove);
ui->verticalLayout->addWidget(m_tree_view);
- setUpAction();
+ connect(m_tree_view, &QTreeView::clicked, this, &DynamicElementTextItemEditor::treeViewClicked);
+ ui->m_remove_selection->setDisabled(true);
setElement(element);
}
@@ -135,6 +137,7 @@
m_tree_view->expand(index);
m_tree_view->expand(index.child(0,0));
m_tree_view->setCurrentIndex(index);
+ ui->m_remove_selection->setEnabled(true);
}
/**
@@ -150,6 +153,7 @@
m_tree_view->expand(index);
m_tree_view->setCurrentIndex(index);
+ ui->m_remove_selection->setEnabled(true);
}
QUndoCommand *DynamicElementTextItemEditor::associatedUndo() const
@@ -168,164 +172,6 @@
return nullptr;
}
-/**
- * @brief DynamicElementTextItemEditor::eventFilter
- * Reimplemented for intercept the context menu event of the tree view
- * @param watched
- * @param event
- * @return
- */
-bool DynamicElementTextItemEditor::eventFilter(QObject *watched, QEvent *event)
-{
- if(watched == m_tree_view && event->type() == QEvent::ContextMenu)
- {
- QContextMenuEvent *qcme = static_cast<QContextMenuEvent *>(event);
- QModelIndex index = m_tree_view->currentIndex();
-
- if(index.isValid())
- {
- for(QAction *action : m_actions_list)
- m_context_menu->removeAction(action);
- m_add_to_group->menu()->clear();
-
- //Pop up a context menu for a group or a text in a group
- if(m_model->indexIsInGroup(index))
- {
- QStandardItem *item = m_model->itemFromIndex(index);
- if(item)
- {
- if(m_model->textFromItem(item)) //User click on a text or a child item of a text
- {
- m_context_menu->addAction(m_remove_text_from_group);
- m_context_menu->addAction(m_remove_current_text);
- }
- else//User click on a group item
- m_context_menu->addAction(m_remove_current_group);
- }
- }
- else //Popup a context menu for a text not owned by a group
- {
- if(m_element.data()->textGroups().isEmpty())
- m_context_menu->addAction(m_new_group);
- else
- {
- m_context_menu->addAction(m_add_to_group);
- m_context_menu->addAction(m_new_group);
- m_context_menu->addAction(m_remove_current_text);
-
- for(ElementTextItemGroup *grp : m_element.data()->textGroups())
- {
- QAction *action = m_add_to_group->menu()->addAction(grp->name());
- connect(action, &QAction::triggered, m_signal_mapper, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
- m_signal_mapper->setMapping(action, grp->name());
- }
- }
- }
-
- m_context_menu->popup(qcme->globalPos());
- return true;
- }
- }
- return AbstractElementPropertiesEditorWidget::eventFilter(watched, event);
-}
-
-void DynamicElementTextItemEditor::setUpAction()
-{
- m_context_menu = new QMenu(this);
-
- //Action add text to a group
- m_add_to_group = new QAction(tr("Ajouter au groupe"), m_context_menu);
- m_add_to_group->setMenu(new QMenu(m_context_menu));
-
- m_signal_mapper = new QSignalMapper(this);
- connect(m_signal_mapper, static_cast<void (QSignalMapper::*)(const QString &)>(&QSignalMapper::mapped), this, &DynamicElementTextItemEditor::addCurrentTextToGroup);
-
- //Action remove text from a group
- m_remove_text_from_group = new QAction(tr("Supprimer le texte de ce groupe"), m_context_menu);
- connect(m_remove_text_from_group, &QAction::triggered, [this]()
- {
- QAbstractItemModel *m = this->m_tree_view->model();
- if(m == nullptr)
- return;
-
- DynamicElementTextModel *model = static_cast<DynamicElementTextModel *>(m);
- if(model->indexIsInGroup(m_tree_view->currentIndex()))
- {
- DynamicElementTextItem *deti = m_model->textFromIndex(m_tree_view->currentIndex());
- if(deti && deti->parentGroup())
- m_element.data()->removeTextFromGroup(deti, deti->parentGroup());
- }
- });
-
- //Action create new group and the connection for open a dialog to edit the name
- //of the new group
- m_new_group = new QAction(tr("Nouveau groupe"), m_context_menu);
- connect(m_new_group, &QAction::triggered, [this]()
- {
- QAbstractItemModel *m = this->m_tree_view->model();
- if(m == nullptr)
- return;
-
- DynamicElementTextModel *model = static_cast<DynamicElementTextModel *>(m);
- if(model->indexIsInGroup(m_tree_view->currentIndex()))
- return;
-
- DynamicElementTextItem *deti = model->textFromIndex(m_tree_view->currentIndex());
- if(deti)
- {
- Element *element = deti->parentElement();
- QString name = QInputDialog::getText(this, tr("Nom du groupe"), tr("Entrer le nom du nouveau groupe"));
-
- if(name.isEmpty())
- return;
- else
- element->addTextGroup(name);
- }
- });
-
- //Action remove the selected text
- m_remove_current_text = new QAction(tr("Supprimer le texte"), m_context_menu);
- connect(m_remove_current_text, &QAction::triggered, [this]()
- {
- QAbstractItemModel *m = this->m_tree_view->model();
- if(m == nullptr)
- return;
-
- DynamicElementTextModel *model = static_cast<DynamicElementTextModel *>(m);
- if(DynamicElementTextItem *deti = model->textFromIndex(m_tree_view->currentIndex()))
- {
- if(m_element.data()->diagram() && m_element.data()->diagram()->project())
- {
- QUndoStack *us =m_element.data()->diagram()->project()->undoStack();
- DiagramContent dc;
- dc.m_element_texts << deti;
- us->push((new DeleteQGraphicsItemCommand(m_element.data()->diagram(), dc)));
- }
- }
- });
-
- //Action remove the selected group
- m_remove_current_group = new QAction(tr("Supprimer le groupe"), m_context_menu);
- connect(m_remove_current_group, &QAction::triggered, [this]()
- {
- QAbstractItemModel *m = this->m_tree_view->model();
- if(m == nullptr)
- return;
-
- DynamicElementTextModel *model = static_cast<DynamicElementTextModel *>(m);
- QModelIndex index = m_tree_view->currentIndex();
- if(model->indexIsInGroup(index) && !model->textFromIndex(index)) //Item is in group and is not a text, so item is the group
- m_element.data()->removeTextGroup(model->groupFromIndex(index));
- });
-
- m_actions_list << m_add_to_group \
- << m_remove_text_from_group \
- << m_new_group \
- << m_remove_current_text \
- << m_remove_current_group;
-
-}
-
void DynamicElementTextItemEditor::dataEdited(DynamicElementTextItem *deti)
{
Q_UNUSED(deti)
@@ -333,28 +179,12 @@
apply();
}
-/**
- * @brief DynamicElementTextItemEditor::addCurrentTextToGroup
- * Add the current selected text to the group named @name
- * @param name
- */
-void DynamicElementTextItemEditor::addCurrentTextToGroup(QString name)
+void DynamicElementTextItemEditor::treeViewClicked(const QModelIndex &index)
{
- QModelIndex index = m_tree_view->currentIndex();
- DynamicElementTextModel *model = static_cast<DynamicElementTextModel *>(m_tree_view->model());
-
- DynamicElementTextItem *deti = model->textFromIndex(index);
- ElementTextItemGroup *group = m_element.data()->textGroup(name);
-
- if(deti && group)
- {
- if(deti->isSelected())
- {
- deti->setSelected(false);
- group->setSelected(true);
- }
- m_element.data()->addTextToGroup(deti, group);
- }
+ if(m_model->indexIsText(index) || m_model->indexIsGroup(index))
+ ui->m_remove_selection->setEnabled(true);
+ else
+ ui->m_remove_selection->setDisabled(true);
}
/**
@@ -379,10 +209,10 @@
}
/**
- * @brief DynamicElementTextItemEditor::on_m_remove_text_clicked
- * Remove the selected text field
+ * @brief DynamicElementTextItemEditor::on_m_remove_selection_clicked
+ * Remove the selected item
*/
-void DynamicElementTextItemEditor::on_m_remove_text_clicked()
+void DynamicElementTextItemEditor::on_m_remove_selection_clicked()
{
DynamicElementTextItem *deti = m_model->textFromIndex(m_tree_view->currentIndex());
if(deti)
@@ -396,8 +226,20 @@
return;
}
ElementTextItemGroup *group = m_model->groupFromIndex(m_tree_view->currentIndex());
- if(group)
- {
- m_element.data()->removeTextGroup(group);
- }
+ if(group && m_element.data()->diagram())
+ m_element.data()->diagram()->undoStack().push(new RemoveTextsGroupCommand(m_element.data(), group));
}
+
+/**
+ * @brief DynamicElementTextItemEditor::on_m_add_group_clicked
+ * Add a new group
+ */
+void DynamicElementTextItemEditor::on_m_add_group_clicked()
+{
+ QString name = QInputDialog::getText(this, tr("Nom du groupe"), tr("Entrer le nom du nouveau groupe"));
+
+ if(name.isEmpty())
+ return;
+ else if (m_element.data()->diagram())
+ m_element.data()->diagram()->undoStack().push(new AddTextsGroupCommand(m_element, name));
+}
Modified: trunk/sources/ui/dynamicelementtextitemeditor.h
===================================================================
--- trunk/sources/ui/dynamicelementtextitemeditor.h 2017-12-01 12:24:32 UTC (rev 5128)
+++ trunk/sources/ui/dynamicelementtextitemeditor.h 2017-12-01 18:36:57 UTC (rev 5129)
@@ -24,8 +24,6 @@
class DynamicElementTextModel;
class QTreeView;
class QStandardItem;
-class QMenu;
-class QSignalMapper;
class ElementTextItemGroup;
namespace Ui {
@@ -47,29 +45,20 @@
void setCurrentText(DynamicElementTextItem *text);
void setCurrentGroup(ElementTextItemGroup *group);
QUndoCommand *associatedUndo() const override;
- bool eventFilter(QObject *watched, QEvent *event) override;
private:
- void setUpAction();
void dataEdited(DynamicElementTextItem *deti);
- void addCurrentTextToGroup(QString name);
+ void treeViewClicked(const QModelIndex &index);
private slots:
void on_m_add_text_clicked();
- void on_m_remove_text_clicked();
-
- private:
+ void on_m_remove_selection_clicked();
+ void on_m_add_group_clicked();
+
+ private:
Ui::DynamicElementTextItemEditor *ui;
QTreeView *m_tree_view = nullptr;
DynamicElementTextModel *m_model = nullptr;
- QMenu *m_context_menu = nullptr;
- QSignalMapper *m_signal_mapper = nullptr;
- QAction *m_add_to_group = nullptr,
- *m_remove_text_from_group = nullptr,
- *m_new_group = nullptr,
- *m_remove_current_text = nullptr,
- *m_remove_current_group = nullptr;
- QList<QAction *> m_actions_list;
};
#endif // DYNAMICELEMENTTEXTITEMEDITOR_H
Modified: trunk/sources/ui/dynamicelementtextitemeditor.ui
===================================================================
--- trunk/sources/ui/dynamicelementtextitemeditor.ui 2017-12-01 12:24:32 UTC (rev 5128)
+++ trunk/sources/ui/dynamicelementtextitemeditor.ui 2017-12-01 18:36:57 UTC (rev 5129)
@@ -35,7 +35,7 @@
<string>Ajouter un texte</string>
</property>
<property name="text">
- <string/>
+ <string>Texte</string>
</property>
<property name="icon">
<iconset resource="../../qelectrotech.qrc">
@@ -44,8 +44,22 @@
</widget>
</item>
<item>
- <widget class="QPushButton" name="m_remove_text">
+ <widget class="QPushButton" name="m_add_group">
<property name="toolTip">
+ <string>Ajouter un groupe de textes</string>
+ </property>
+ <property name="text">
+ <string>Groupe</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../qelectrotech.qrc">
+ <normaloff>:/ico/16x16/list-add.png</normaloff>:/ico/16x16/list-add.png</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="m_remove_selection">
+ <property name="toolTip">
<string>Supprimer la sélection</string>
</property>
<property name="text">
Modified: trunk/sources/ui/dynamicelementtextmodel.cpp
===================================================================
--- trunk/sources/ui/dynamicelementtextmodel.cpp 2017-12-01 12:24:32 UTC (rev 5128)
+++ trunk/sources/ui/dynamicelementtextmodel.cpp 2017-12-01 18:36:57 UTC (rev 5129)
@@ -31,6 +31,8 @@
#include "conductor.h"
#include "elementtextitemgroup.h"
#include "qeticons.h"
+#include "diagram.h"
+#include "addelementtextcommand.h"
DynamicElementTextModel::DynamicElementTextModel(Element *element, QObject *parent) :
QStandardItemModel(parent),
@@ -100,7 +102,7 @@
return qsi_list;
QStandardItem *qsi = new QStandardItem(deti->toPlainText());
- qsi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ qsi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled |Qt::ItemIsDragEnabled);
qsi->setIcon(QET::Icons::PartText);
@@ -299,8 +301,8 @@
/**
* @brief DynamicElementTextModel::textFromIndex
* @param index
- * @return the text associated with @index. Return value can be nullptr
- * @Index can be a child of an index associated with a text
+ * @return the text associated with @index. Returned value can be nullptr
+ * @Index can be a child of an index associated with a text and can be the column 0 or 1.
*/
DynamicElementTextItem *DynamicElementTextModel::textFromIndex(const QModelIndex &index) const
{
@@ -317,11 +319,19 @@
* @brief DynamicElementTextModel::textFromItem
* @param item
* @return the text associated with @item. Return value can be nullptr
- * @item can be a child of an item associated with a text
+ * @item can be a child of an item associated with a text and can be the column 0 or 1.
* Note can return nullptr
*/
DynamicElementTextItem *DynamicElementTextModel::textFromItem(QStandardItem *item) const
{
+ //Get the item of the column 0
+ if(item->column() == 1)
+ {
+ if(item->parent())
+ item = item->parent()->child(item->row(), 0);
+ else
+ item = itemFromIndex(index(item->row(),0));
+ }
//Item haven't got parent, so they can be only a text or a group
if(!item->parent())
{
@@ -486,7 +496,7 @@
return;
QStandardItem *grp = new QStandardItem(group->name());
- grp->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+ grp->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled);
grp->setIcon(QET::Icons::textGroup);
QStandardItem *empty_qsi = new QStandardItem(0);
@@ -550,7 +560,7 @@
* @brief DynamicElementTextModel::groupFromIndex
* @param index
* @return the group associated with @index. Return value can be nullptr
- * @Index can be a child of an index associated with a group
+ * @Index can be a child of an index associated with a group and can be the column 0 or 1.
*/
ElementTextItemGroup *DynamicElementTextModel::groupFromIndex(const QModelIndex &index) const
{
@@ -567,17 +577,24 @@
* @brief DynamicElementTextModel::groupFromItem
* @param item
* @return the group associated with @item. Return value can be nullptr
- * @item can be a child of an item associated with a group
+ * @item can be a child of an item associated with a group and can be the column 0 or 1.
*/
ElementTextItemGroup *DynamicElementTextModel::groupFromItem(QStandardItem *item) const
{
- QStandardItem *group_item = item;
+ //Get the item of the column 0
+ if(item->column() == 1)
+ {
+ if(item->parent())
+ item = item->parent()->child(item->row(), 0);
+ else
+ item = itemFromIndex(index(item->row(),0));
+ }
- while (group_item->parent())
- group_item = group_item->parent();
+ while (item->parent())
+ item = item->parent();
- if(m_groups_list.values().contains(group_item))
- return m_groups_list.key(group_item);
+ if(m_groups_list.values().contains(item))
+ return m_groups_list.key(item);
else
return nullptr;
}
@@ -597,6 +614,241 @@
}
/**
+ * @brief DynamicElementTextModel::indexIsText
+ * @param index
+ * @return True if @index represente a text, both for the column 0 and 1.
+ * Return false if @index is a child of an index associated to a text.
+ */
+bool DynamicElementTextModel::indexIsText(const QModelIndex &index) const
+{
+ QStandardItem *item = nullptr;
+
+ //The item represent the second column
+ if(index.column() == 1)
+ {
+ if(index.parent().isValid())
+ item = itemFromIndex(index.parent().child(index.row(),0));
+ else
+ item = itemFromIndex(this->index(index.row(),0));
+ }
+ else
+ item = itemFromIndex(index);
+
+ if(item && m_texts_list.values().contains(item))
+ return true;
+ else
+ return false;
+}
+
+/**
+ * @brief DynamicElementTextModel::indexIsGroup
+ * @param index
+ * @return True if @index represente a group, both for the column 0 and 1.
+ * Return false if @index is a child of an index associated to a group.
+ */
+bool DynamicElementTextModel::indexIsGroup(const QModelIndex &index) const
+{
+ QStandardItem *item = nullptr;
+
+ //The item represent the second column
+ if(index.column() == 1)
+ {
+ if(index.parent().isValid())
+ item = itemFromIndex(index.parent().child(index.row(),0));
+ else
+ item = itemFromIndex(this->index(index.row(),0));
+ }
+ else
+ item = itemFromIndex(index);
+
+ if(item && m_groups_list.values().contains(item))
+ return true;
+ else
+ return false;
+}
+
+bool DynamicElementTextModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
+{
+ Q_UNUSED(action);
+
+ if(data->hasFormat("application/x-qet-element-text-uuid"))
+ {
+ QModelIndex index;
+ if(parent.isValid() && row != -1 && column !=1) //Insert in child of parent
+ index = parent.child(row, column);
+ else if (parent.isValid() && row == -1 && column == -1) //Drop in parent
+ index = parent;
+
+ QUuid uuid(data->text());
+
+ //The data is drop in a group
+ if(indexIsInGroup(index))
+ {
+ //Data is dragged from a text direct child of element
+ for(DynamicElementTextItem *text : m_element.data()->dynamicTextItems())
+ if(text->uuid() == uuid)
+ return true;
+ //Data is dragged from a text in a group
+ for(ElementTextItemGroup *group : m_element.data()->textGroups())
+ {
+ for(DynamicElementTextItem *text : group->texts())
+ if(text->uuid() == uuid)
+ return true;
+ }
+
+ return false;
+
+ }
+ else //The data is not drop in a group, then the action must be a drag of text from a group to the element
+ {
+ for(ElementTextItemGroup *group : m_element.data()->textGroups())
+ {
+ for(DynamicElementTextItem *text : group->texts())
+ if(text->uuid() == uuid)
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * @brief DynamicElementTextModel::dropMimeData
+ * @param data
+ * @param action
+ * @param row
+ * @param column
+ * @param parent
+ * @return In any case return false, for overwrite the default behavior of model.
+ */
+bool DynamicElementTextModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
+{
+ Q_UNUSED(action)
+
+ if(data->hasFormat("application/x-qet-element-text-uuid"))
+ {
+ QUuid uuid(data->text());
+ DynamicElementTextItem *deti = nullptr;
+ ElementTextItemGroup *group = nullptr;
+
+ QModelIndex index;
+ if(parent.isValid() && row != -1 && column !=1) //Insert in child of parent
+ index = parent.child(row, column);
+ else if (parent.isValid() && row == -1 && column == -1) //Drop in parent
+ index = parent;
+
+ //Darg and drop in a group of text
+ if(indexIsInGroup(index))
+ {
+ //The dragged text is a direct child of element
+ for(DynamicElementTextItem *text : m_element.data()->dynamicTextItems())
+ {
+ if(text->uuid() == uuid)
+ {
+ deti = text;
+ group = groupFromIndex(index);
+
+ if(group && deti) //Text successfully added in a group
+ {
+ m_element.data()->diagram()->undoStack().push(new AddTextToGroupCommand(deti, group));
+ return false;
+ }
+ }
+ }
+
+ //The dragged text is in a group
+ for(ElementTextItemGroup *grp : m_element.data()->textGroups())
+ {
+ for(DynamicElementTextItem *text : grp->texts())
+ {
+ if(text->uuid() == uuid)
+ {
+ deti = text;
+ group = groupFromIndex(index);
+
+ //Text successfully moved from a group to another group
+ if(group && deti)
+ {
+ QUndoStack &stack = m_element.data()->diagram()->undoStack();
+ stack.beginMacro(tr("Déplacer un texte dans un autre groupe"));
+ stack.push(new RemoveTextFromGroupCommand(deti, grp));
+ stack.push(new AddTextToGroupCommand(deti, group));
+ stack.endMacro();
+
+ return false;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+ else //Drag and drop in anaother place
+ {
+ //Get the dropped text
+ for(ElementTextItemGroup *grp : m_element.data()->textGroups())
+ {
+ for(DynamicElementTextItem *text : grp->texts())
+ {
+ if(text->uuid() == uuid)
+ {
+ deti = text;
+ group = grp;
+ break;
+ }
+ }
+ if(deti)
+ break;
+ }
+
+ if(deti && group) //Text successfully removed from group
+ {
+ m_element.data()->diagram()->undoStack().push((new RemoveTextFromGroupCommand(deti, group)));
+ return false;
+ }
+
+ return false;
+ }
+ }
+
+ return false;
+}
+
+QMimeData *DynamicElementTextModel::mimeData(const QModelIndexList &indexes) const
+{
+ QModelIndex index = indexes.first();
+ if (index.isValid())
+ {
+ QStandardItem *item = itemFromIndex(index);
+ if(item)
+ {
+ DynamicElementTextItem *deti = m_texts_list.key(item);
+ if(deti)
+ {
+ QMimeData *mime_data = new QMimeData();
+ mime_data->setText(deti->uuid().toString());
+ mime_data->setData("application/x-qet-element-text-uuid", deti->uuid().toString().toLatin1());
+ return mime_data;
+ }
+ }
+ }
+
+ return new QMimeData();
+}
+
+/**
+ * @brief DynamicElementTextModel::mimeTypes
+ * @return
+ */
+QStringList DynamicElementTextModel::mimeTypes() const
+{
+ QStringList mime_list = QAbstractItemModel::mimeTypes();
+ mime_list << "application/x-qet-element-text-uuid";
+ return mime_list;
+}
+
+/**
* @brief DynamicElementTextModel::enableSourceText
* Enable the good field, according to the current source of text, for the edited text @deti
* @param deti
Modified: trunk/sources/ui/dynamicelementtextmodel.h
===================================================================
--- trunk/sources/ui/dynamicelementtextmodel.h 2017-12-01 12:24:32 UTC (rev 5128)
+++ trunk/sources/ui/dynamicelementtextmodel.h 2017-12-01 18:36:57 UTC (rev 5129)
@@ -62,7 +62,14 @@
ElementTextItemGroup *groupFromIndex(const QModelIndex &index) const;
ElementTextItemGroup *groupFromItem(QStandardItem *item) const;
QModelIndex indexFromGroup(ElementTextItemGroup *group) const;
+ bool indexIsText(const QModelIndex &index) const;
+ bool indexIsGroup(const QModelIndex &index) const;
+ bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const override;
+ bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
+ QMimeData *mimeData(const QModelIndexList &indexes) const override;
+ QStringList mimeTypes() const override;
+
signals:
void dataForTextChanged(DynamicElementTextItem *text);
Modified: trunk/sources/undocommand/addelementtextcommand.cpp
===================================================================
--- trunk/sources/undocommand/addelementtextcommand.cpp 2017-12-01 12:24:32 UTC (rev 5128)
+++ trunk/sources/undocommand/addelementtextcommand.cpp 2017-12-01 18:36:57 UTC (rev 5129)
@@ -118,6 +118,9 @@
m_group(group)
{
setText(QObject::tr("Supprimer un groupe de textes d'élément"));
+
+ for(DynamicElementTextItem *deti : group->texts())
+ m_text_list.append(deti);
}
RemoveTextsGroupCommand::~RemoveTextsGroupCommand()
@@ -126,13 +129,25 @@
void RemoveTextsGroupCommand::undo()
{
if(m_element && m_group)
+ {
m_element.data()->addTextGroup(m_group.data());
+
+ for(QPointer<DynamicElementTextItem> p : m_text_list)
+ if(p)
+ m_element.data()->addTextToGroup(p.data(), m_group.data());
+ }
}
void RemoveTextsGroupCommand::redo()
{
if(m_element && m_group)
+ {
+ for(QPointer<DynamicElementTextItem> p : m_text_list)
+ if(p)
+ m_element.data()->removeTextFromGroup(p.data(), m_group.data());
+
m_element.data()->removeTextGroup(m_group.data());
+ }
}
@@ -177,7 +192,14 @@
void AddTextToGroupCommand::redo()
{
if(m_element && m_group && m_text)
+ {
+ if(m_text.data()->isSelected())
+ {
+ m_text.data()->setSelected(false);
+ m_group.data()->setSelected(true);
+ }
m_element.data()->addTextToGroup(m_text, m_group);
+ }
}
/*****************************
Modified: trunk/sources/undocommand/addelementtextcommand.h
===================================================================
--- trunk/sources/undocommand/addelementtextcommand.h 2017-12-01 12:24:32 UTC (rev 5128)
+++ trunk/sources/undocommand/addelementtextcommand.h 2017-12-01 18:36:57 UTC (rev 5129)
@@ -79,6 +79,7 @@
private:
QPointer<Element> m_element;
QPointer<ElementTextItemGroup> m_group;
+ QList<QPointer<DynamicElementTextItem>> m_text_list;
};
class AddTextToGroupCommand : public QUndoCommand