2017-08-03 17:36:08 +00:00
|
|
|
/*
|
2023-01-01 17:05:57 +01:00
|
|
|
Copyright 2006-2023 The QElectroTech Team
|
2017-08-03 17:36:08 +00:00
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
#include "dynamicelementtextmodel.h"
|
2020-12-08 19:57:35 +01:00
|
|
|
|
|
|
|
#include "../QPropertyUndoCommand/qpropertyundocommand.h"
|
|
|
|
#include "../diagram.h"
|
|
|
|
#include "../qetapp.h"
|
|
|
|
#include "../qetgraphicsitem/conductor.h"
|
2020-12-10 21:19:45 +01:00
|
|
|
#include "../qetgraphicsitem/dynamicelementtextitem.h"
|
2020-12-08 19:57:35 +01:00
|
|
|
#include "../qetgraphicsitem/element.h"
|
2020-12-10 21:19:45 +01:00
|
|
|
#include "../qetgraphicsitem/elementtextitemgroup.h"
|
2020-12-08 19:57:35 +01:00
|
|
|
#include "../qetgraphicsitem/terminal.h"
|
|
|
|
#include "../qeticons.h"
|
|
|
|
#include "../qetinformation.h"
|
|
|
|
#include "../undocommand/addelementtextcommand.h"
|
2018-05-11 18:14:41 +00:00
|
|
|
#include "alignmenttextdialog.h"
|
2020-12-08 19:57:35 +01:00
|
|
|
#include "compositetexteditdialog.h"
|
2020-11-08 19:05:11 +01:00
|
|
|
|
|
|
|
#include <QColorDialog>
|
|
|
|
#include <QComboBox>
|
2020-12-08 19:57:35 +01:00
|
|
|
#include <QHash>
|
|
|
|
#include <QModelIndex>
|
|
|
|
#include <QStandardItem>
|
2020-11-08 19:05:11 +01:00
|
|
|
#include <QUndoCommand>
|
2017-08-03 17:36:08 +00:00
|
|
|
|
2019-03-08 10:27:33 +00:00
|
|
|
static int src_txt_row = 0;
|
|
|
|
static int usr_txt_row = 1;
|
|
|
|
static int info_txt_row = 2;
|
|
|
|
static int compo_txt_row = 3;
|
|
|
|
static int size_txt_row = 4;
|
|
|
|
static int font_txt_row = 5;
|
|
|
|
static int color_txt_row = 6;
|
|
|
|
static int frame_txt_row = 7;
|
|
|
|
static int width_txt_row = 8;
|
|
|
|
static int x_txt_row = 9;
|
|
|
|
static int y_txt_row = 10;
|
|
|
|
static int rot_txt_row = 11;
|
2020-11-20 20:52:19 +01:00
|
|
|
static int keep_rot_row = 12;
|
|
|
|
static int align_txt_row = 13;
|
2017-12-13 21:15:05 +00:00
|
|
|
|
2019-03-08 10:27:33 +00:00
|
|
|
static int align_grp_row = 0;
|
|
|
|
static int x_grp_row = 1;
|
|
|
|
static int y_grp_row = 2;
|
|
|
|
static int rot_grp_row = 3;
|
|
|
|
static int adjust_grp_row = 4;
|
|
|
|
static int frame_grp_row = 5;
|
|
|
|
static int hold_to_bottom_grp_row = 6;
|
2017-12-13 21:15:05 +00:00
|
|
|
|
2017-11-27 19:37:39 +00:00
|
|
|
DynamicElementTextModel::DynamicElementTextModel(Element *element, QObject *parent) :
|
|
|
|
QStandardItemModel(parent),
|
|
|
|
m_element(element)
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2020-08-16 14:23:59 +02:00
|
|
|
setColumnCount(2);
|
|
|
|
setHeaderData(0, Qt::Horizontal, tr("Propriété"), Qt::DisplayRole);
|
|
|
|
setHeaderData(1, Qt::Horizontal, tr("Valeur"), Qt::DisplayRole);
|
|
|
|
|
2017-08-24 17:35:40 +00:00
|
|
|
connect(this, &DynamicElementTextModel::itemChanged, this, &DynamicElementTextModel::itemDataChanged);
|
2020-08-16 14:23:59 +02:00
|
|
|
|
2017-11-27 19:37:39 +00:00
|
|
|
connect(m_element.data(), &Element::textsGroupAdded, this, &DynamicElementTextModel::addGroup, Qt::DirectConnection);
|
|
|
|
connect(m_element.data(), &Element::textsGroupAboutToBeRemoved, this, &DynamicElementTextModel::removeGroup, Qt::DirectConnection);
|
|
|
|
connect(m_element.data(), &Element::textRemoved, this, &DynamicElementTextModel::removeText, Qt::DirectConnection);
|
|
|
|
connect(m_element.data(), &Element::textRemovedFromGroup, this, &DynamicElementTextModel::removeTextFromGroup, Qt::DirectConnection);
|
|
|
|
connect(m_element.data(), &Element::textAdded, this, &DynamicElementTextModel::addText, Qt::DirectConnection);
|
|
|
|
connect(m_element.data(), &Element::textAddedToGroup, this, &DynamicElementTextModel::addTextToGroup, Qt::DirectConnection);
|
|
|
|
|
|
|
|
for (ElementTextItemGroup *grp : m_element.data()->textGroups())
|
|
|
|
addGroup(grp);
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
for (DynamicElementTextItem *deti : m_element.data()->dynamicTextItems())
|
2017-11-27 19:37:39 +00:00
|
|
|
this->appendRow(itemsForText(deti));
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DynamicElementTextModel::~DynamicElementTextModel()
|
|
|
|
{
|
2022-12-04 08:21:12 -05:00
|
|
|
//Connection is not destroy automatically,
|
2017-08-03 17:36:08 +00:00
|
|
|
//because was not connected to a slot, but a lambda
|
|
|
|
for(DynamicElementTextItem *deti : m_hash_text_connect.keys())
|
|
|
|
setConnection(deti, false);
|
2017-12-10 14:31:27 +00:00
|
|
|
for(ElementTextItemGroup *group : m_hash_group_connect.keys())
|
|
|
|
setConnection(group, false);
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::indexIsInGroup
|
|
|
|
@param index
|
|
|
|
@return True if the index represent a group or an item in a group
|
|
|
|
*/
|
2017-11-27 19:37:39 +00:00
|
|
|
bool DynamicElementTextModel::indexIsInGroup(const QModelIndex &index) const
|
|
|
|
{
|
|
|
|
QStandardItem *item = itemFromIndex(index);
|
|
|
|
if(item)
|
|
|
|
{
|
|
|
|
while (item->parent())
|
|
|
|
item = item->parent();
|
|
|
|
|
|
|
|
if(m_groups_list.values().contains(item))
|
|
|
|
return true;
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::itemsForText
|
|
|
|
@param deti
|
2020-08-16 14:23:59 +02:00
|
|
|
@return The items for the text deti,
|
|
|
|
if the text deti is already managed by this model
|
2020-08-16 11:19:36 +02:00
|
|
|
the returned list is empty
|
2020-08-16 14:23:59 +02:00
|
|
|
The returned items haven't got the same number
|
|
|
|
of childs if the text is in a group or not.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
QList<QStandardItem *> DynamicElementTextModel::itemsForText(
|
|
|
|
DynamicElementTextItem *deti)
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2017-11-27 19:37:39 +00:00
|
|
|
QList <QStandardItem *> qsi_list;
|
|
|
|
|
|
|
|
if(m_texts_list.keys().contains(deti))
|
2020-08-16 14:23:59 +02:00
|
|
|
return qsi_list;
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
QStandardItem *qsi = new QStandardItem(deti->toPlainText());
|
2020-08-16 14:23:59 +02:00
|
|
|
qsi->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
|Qt::ItemIsDragEnabled);
|
2017-11-27 19:37:39 +00:00
|
|
|
qsi->setIcon(QET::Icons::PartText);
|
2017-08-03 17:36:08 +00:00
|
|
|
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
//Source of text
|
|
|
|
QStandardItem *src = new QStandardItem(tr("Source du texte"));
|
|
|
|
src->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2017-08-16 13:52:15 +00:00
|
|
|
QString title;
|
2020-08-16 14:23:59 +02:00
|
|
|
if (deti->textFrom() == DynamicElementTextItem::UserText)
|
|
|
|
title = tr("Texte utilisateur");
|
|
|
|
else if (deti->textFrom() == DynamicElementTextItem::ElementInfo)
|
|
|
|
title = tr("Information de l'élément");
|
2017-08-16 13:52:15 +00:00
|
|
|
else title = tr("Texte composé");
|
2020-08-16 14:23:59 +02:00
|
|
|
QStandardItem *srca = new QStandardItem(title);
|
|
|
|
srca->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
srca->setData(textFrom, Qt::UserRole+1);
|
|
|
|
|
|
|
|
qsi_list << src << srca;
|
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//User text
|
2017-08-03 17:36:08 +00:00
|
|
|
QStandardItem *usr = new QStandardItem(tr("Texte"));
|
2020-08-16 14:23:59 +02:00
|
|
|
usr->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
QStandardItem *usra = new QStandardItem(deti->toPlainText());
|
|
|
|
usra->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
usra->setData(DynamicElementTextModel::userText, Qt::UserRole+1);
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
qsi_list.clear();
|
2020-08-16 14:23:59 +02:00
|
|
|
qsi_list << usr << usra;
|
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
//Info text
|
|
|
|
QStandardItem *info = new QStandardItem(tr("Information"));
|
2020-08-16 14:23:59 +02:00
|
|
|
info->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
QStandardItem *infoa =
|
|
|
|
new QStandardItem(
|
2020-11-08 19:05:11 +01:00
|
|
|
QETInformation::translatedInfoKey(
|
2020-08-16 14:23:59 +02:00
|
|
|
deti->infoName()));
|
|
|
|
infoa->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
//Use to know the edited thing
|
|
|
|
infoa->setData(DynamicElementTextModel::infoText, Qt::UserRole+1);
|
|
|
|
//Use to know to element info name
|
|
|
|
infoa->setData(deti->infoName(), Qt::UserRole+2);
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
qsi_list.clear();
|
2020-08-16 14:23:59 +02:00
|
|
|
qsi_list << info << infoa;
|
|
|
|
qsi->appendRow(qsi_list);
|
2017-08-16 13:52:15 +00:00
|
|
|
|
|
|
|
//Composite text
|
|
|
|
QStandardItem *composite = new QStandardItem(tr("Texte composé"));
|
|
|
|
composite->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2017-08-29 14:54:27 +00:00
|
|
|
DiagramContext dc;
|
|
|
|
if(deti->elementUseForInfo())
|
|
|
|
dc = deti->elementUseForInfo()->elementInformations();
|
2020-08-16 14:23:59 +02:00
|
|
|
QStandardItem *compositea = new QStandardItem(deti->compositeText().isEmpty()
|
|
|
|
? tr("Mon texte composé")
|
|
|
|
: autonum::AssignVariables::replaceVariable(
|
|
|
|
deti->compositeText(), dc));
|
|
|
|
compositea->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
//Use to know the edited thing
|
|
|
|
compositea->setData(DynamicElementTextModel::compositeText,
|
|
|
|
Qt::UserRole+1);
|
|
|
|
//Use to know to element composite formula
|
|
|
|
compositea->setData(deti->compositeText(), Qt::UserRole+2);
|
2017-08-16 13:52:15 +00:00
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << composite << compositea;
|
2017-11-07 18:35:26 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
2020-08-16 14:23:59 +02:00
|
|
|
|
|
|
|
//Size
|
2017-08-03 17:36:08 +00:00
|
|
|
QStandardItem *size = new QStandardItem(tr("Taille"));
|
2020-08-16 14:23:59 +02:00
|
|
|
size->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
QStandardItem *siza = new QStandardItem();
|
2019-03-08 10:27:33 +00:00
|
|
|
siza->setData(deti->font().pointSize(), Qt::EditRole);
|
2020-08-16 14:23:59 +02:00
|
|
|
siza->setData(DynamicElementTextModel::size, Qt::UserRole+1);
|
|
|
|
siza->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << size << siza;
|
2019-03-08 10:27:33 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//Font
|
|
|
|
QStandardItem *font = new QStandardItem(tr("Police"));
|
|
|
|
font->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
QStandardItem *fonta = new QStandardItem();
|
|
|
|
fonta->setData(deti->font().family(), Qt::EditRole);
|
|
|
|
fonta->setData(DynamicElementTextModel::font, Qt::UserRole+1);
|
|
|
|
fonta->setData(deti->font(), Qt::UserRole+2);
|
|
|
|
fonta->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable);
|
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << font << fonta;
|
2017-08-03 17:36:08 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
2017-11-07 18:35:26 +00:00
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
//Color
|
|
|
|
QStandardItem *color = new QStandardItem(tr("Couleur"));
|
|
|
|
color->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
QStandardItem *colora = new QStandardItem;
|
|
|
|
colora->setData(deti->color(), Qt::ForegroundRole);
|
|
|
|
colora->setData(deti->color(), Qt::EditRole);
|
|
|
|
colora->setData(DynamicElementTextModel::color, Qt::UserRole+1);
|
|
|
|
colora->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << color << colora;
|
2017-11-07 18:35:26 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//Frame
|
|
|
|
QStandardItem *frame = new QStandardItem(tr("Cadre"));
|
|
|
|
frame->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *frame_a = new QStandardItem;
|
2017-11-07 18:35:26 +00:00
|
|
|
frame_a->setCheckable(true);
|
|
|
|
frame_a->setCheckState(deti->frame()? Qt::Checked : Qt::Unchecked);
|
|
|
|
frame_a->setData(DynamicElementTextModel::frame, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
frame_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsUserCheckable);
|
2017-11-07 18:35:26 +00:00
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << frame << frame_a;
|
2018-01-26 18:49:38 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//Width
|
|
|
|
QStandardItem *width = new QStandardItem(tr("Largeur"));
|
|
|
|
width->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *width_a = new QStandardItem;
|
2018-01-26 18:49:38 +00:00
|
|
|
width_a->setData(deti->textWidth(), Qt::EditRole);
|
|
|
|
width_a->setData(DynamicElementTextModel::textWidth, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
width_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2018-01-26 18:49:38 +00:00
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << width << width_a;
|
2017-08-03 17:36:08 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
2017-10-29 10:43:34 +00:00
|
|
|
|
2017-11-27 19:37:39 +00:00
|
|
|
if(deti->parentGroup() == nullptr)
|
|
|
|
{
|
|
|
|
//X pos
|
|
|
|
QStandardItem *x_pos = new QStandardItem(tr("Position X"));
|
|
|
|
x_pos->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *x_pos_a = new QStandardItem;
|
2017-11-27 19:37:39 +00:00
|
|
|
x_pos_a->setData(deti->pos().x(), Qt::EditRole);
|
|
|
|
x_pos_a->setData(DynamicElementTextModel::pos, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
x_pos_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2017-11-27 19:37:39 +00:00
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << x_pos << x_pos_a;
|
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//Y pos
|
|
|
|
QStandardItem *y_pos = new QStandardItem(tr("Position Y"));
|
|
|
|
y_pos->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *y_pos_a = new QStandardItem;
|
2017-11-27 19:37:39 +00:00
|
|
|
y_pos_a->setData(deti->pos().y(), Qt::EditRole);
|
|
|
|
y_pos_a->setData(DynamicElementTextModel::pos, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
y_pos_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2017-11-27 19:37:39 +00:00
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << y_pos << y_pos_a;
|
2017-11-29 19:17:02 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//Rotation
|
|
|
|
QStandardItem *rot = new QStandardItem(tr("Rotation"));
|
|
|
|
rot->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *rot_a = new QStandardItem;
|
2017-11-29 19:17:02 +00:00
|
|
|
rot_a->setData(deti->rotation(), Qt::EditRole);
|
2020-08-16 14:23:59 +02:00
|
|
|
rot_a->setData(DynamicElementTextModel::rotation,
|
|
|
|
Qt::UserRole+1);
|
|
|
|
rot_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2017-11-29 19:17:02 +00:00
|
|
|
|
2020-11-20 20:52:19 +01:00
|
|
|
qsi_list.clear();
|
2017-11-29 19:17:02 +00:00
|
|
|
qsi_list << rot << rot_a;
|
2018-05-11 18:14:41 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
2020-11-20 20:52:19 +01:00
|
|
|
|
|
|
|
//keep visual rotation
|
|
|
|
auto keep_rotation = new QStandardItem(tr("Conserver la rotation visuel"));
|
|
|
|
keep_rotation->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
auto keep_rotation_a = new QStandardItem;
|
|
|
|
keep_rotation_a->setCheckable(true);
|
|
|
|
keep_rotation_a->setCheckState(deti->keepVisualRotation() ? Qt::Checked : Qt::Unchecked);
|
|
|
|
keep_rotation_a->setData(DynamicElementTextModel::keepVisualRotation, Qt::UserRole+1);
|
|
|
|
keep_rotation_a->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable);
|
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << keep_rotation << keep_rotation_a;
|
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
|
2018-05-11 18:14:41 +00:00
|
|
|
//Alignment
|
|
|
|
QStandardItem *alignment = new QStandardItem(tr("Alignement"));
|
|
|
|
alignment->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
QStandardItem *alignmenta = new QStandardItem(tr("Éditer"));
|
2020-08-16 14:23:59 +02:00
|
|
|
alignmenta->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
alignmenta->setData(DynamicElementTextModel::txtAlignment,
|
|
|
|
Qt::UserRole+1);
|
|
|
|
alignmenta->setData(QVariant::fromValue(deti->alignment()),
|
|
|
|
Qt::UserRole+2);
|
2018-05-11 18:14:41 +00:00
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << alignment << alignmenta;
|
2017-11-27 19:37:39 +00:00
|
|
|
qsi->appendRow(qsi_list);
|
|
|
|
}
|
2017-10-29 10:43:34 +00:00
|
|
|
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
qsi_list.clear();
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *empty_qsi = new QStandardItem(0);
|
2017-08-03 17:36:08 +00:00
|
|
|
empty_qsi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
qsi_list << qsi << empty_qsi;
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
m_texts_list.insert(deti, qsi);
|
2017-08-03 17:36:08 +00:00
|
|
|
blockSignals(true);
|
|
|
|
enableSourceText(deti, deti->textFrom());
|
|
|
|
blockSignals(false);
|
|
|
|
setConnection(deti, true);
|
2017-11-27 19:37:39 +00:00
|
|
|
|
|
|
|
return qsi_list;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::addText
|
|
|
|
@param deti
|
|
|
|
*/
|
2017-11-27 19:37:39 +00:00
|
|
|
void DynamicElementTextModel::addText(DynamicElementTextItem *deti)
|
|
|
|
{
|
|
|
|
this->appendRow(itemsForText(deti));
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::removeText
|
|
|
|
@param deti
|
|
|
|
*/
|
2017-08-03 17:36:08 +00:00
|
|
|
void DynamicElementTextModel::removeText(DynamicElementTextItem *deti)
|
|
|
|
{
|
|
|
|
if (!m_texts_list.contains(deti))
|
2020-08-16 14:23:59 +02:00
|
|
|
return;
|
|
|
|
|
|
|
|
QModelIndex text_index = m_texts_list.value(deti)->index();
|
|
|
|
this->removeRow(text_index.row(), text_index.parent());
|
|
|
|
m_texts_list.remove(deti);
|
2017-08-03 17:36:08 +00:00
|
|
|
setConnection(deti, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::textFromIndex
|
|
|
|
@param index
|
2020-08-16 14:23:59 +02:00
|
|
|
@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.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
DynamicElementTextItem *DynamicElementTextModel::textFromIndex(
|
|
|
|
const QModelIndex &index) const
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2020-08-16 14:23:59 +02:00
|
|
|
if(!index.isValid())
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
if (QStandardItem *item = itemFromIndex(index))
|
|
|
|
return textFromItem(item);
|
|
|
|
else
|
|
|
|
return nullptr;
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::textFromItem
|
|
|
|
@param item
|
2020-08-16 14:23:59 +02:00
|
|
|
@return the text associated with item. Return value can be nullptr
|
|
|
|
item can be a child of an item associated with a text
|
|
|
|
and can be the column 0 or 1.
|
2020-08-16 11:19:36 +02:00
|
|
|
Note can return nullptr
|
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
DynamicElementTextItem *DynamicElementTextModel::textFromItem(
|
|
|
|
QStandardItem *item) const
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2020-08-16 14:23:59 +02:00
|
|
|
//Get the item of the column 0
|
2017-12-01 18:36:57 +00:00
|
|
|
if(item->column() == 1)
|
|
|
|
{
|
|
|
|
if(item->parent())
|
|
|
|
item = item->parent()->child(item->row(), 0);
|
|
|
|
else
|
|
|
|
item = itemFromIndex(index(item->row(),0));
|
|
|
|
}
|
2020-08-16 14:23:59 +02:00
|
|
|
//Item haven't got parent, so they can be only a text or a group
|
2017-11-27 19:37:39 +00:00
|
|
|
if(!item->parent())
|
|
|
|
{
|
|
|
|
if(m_texts_list.values().contains(item))
|
|
|
|
return m_texts_list.key(item);
|
|
|
|
else
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
QStandardItem *text_item = item;
|
|
|
|
while (text_item->parent())
|
|
|
|
text_item = text_item->parent();
|
|
|
|
|
2017-11-27 19:37:39 +00:00
|
|
|
if (m_texts_list.values().contains(text_item)) //The item is a text
|
2017-08-03 17:36:08 +00:00
|
|
|
return m_texts_list.key(text_item);
|
2017-11-27 19:37:39 +00:00
|
|
|
else if (m_groups_list.values().contains(text_item)) //The item is a group
|
|
|
|
{
|
|
|
|
QStandardItem *previous = item;
|
|
|
|
QStandardItem *top = item;
|
|
|
|
//At the end of the while, previous must be the text
|
|
|
|
//and top the group
|
|
|
|
while(top->parent())
|
|
|
|
{
|
|
|
|
previous = top;
|
|
|
|
top = top->parent();
|
|
|
|
}
|
|
|
|
|
|
|
|
if(m_texts_list.values().contains(previous))
|
|
|
|
return m_texts_list.key(previous);
|
|
|
|
else
|
|
|
|
return nullptr;
|
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
else
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
2017-08-22 18:27:23 +00:00
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::indexFromText
|
|
|
|
@param text
|
2020-08-16 14:23:59 +02:00
|
|
|
@return the QModelIndex for text, or a default QModelIndex if not match
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
QModelIndex DynamicElementTextModel::indexFromText(
|
|
|
|
DynamicElementTextItem *text) const
|
2017-08-22 18:27:23 +00:00
|
|
|
{
|
2017-11-27 19:37:39 +00:00
|
|
|
if(m_texts_list.contains(text))
|
|
|
|
return m_texts_list.value(text)->index();
|
|
|
|
else
|
2017-08-22 18:27:23 +00:00
|
|
|
return QModelIndex();
|
|
|
|
}
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::undoForEditedText
|
|
|
|
@param deti
|
2020-08-20 21:57:35 +02:00
|
|
|
@param parent_undo
|
2020-08-16 14:23:59 +02:00
|
|
|
@return A QUndoCommand that describe all changes made for deti.
|
|
|
|
Each change made for deti is append as a child of the returned QUndoCommand.
|
|
|
|
In other word, if the returned QUndoCommand have no child,
|
|
|
|
that mean there is no change.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
QUndoCommand *DynamicElementTextModel::undoForEditedText(
|
|
|
|
DynamicElementTextItem *deti,
|
|
|
|
QUndoCommand *parent_undo) const
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2017-10-29 10:43:34 +00:00
|
|
|
|
|
|
|
QUndoCommand *undo = nullptr;
|
|
|
|
if(parent_undo)
|
|
|
|
undo = parent_undo;
|
|
|
|
else
|
|
|
|
undo = new QUndoCommand(tr("Éditer un texte d'élément"));
|
2017-08-03 17:36:08 +00:00
|
|
|
|
|
|
|
if (!m_texts_list.contains(deti))
|
|
|
|
return undo;
|
|
|
|
|
|
|
|
QStandardItem *text_qsi = m_texts_list.value(deti);
|
|
|
|
|
2017-12-13 21:15:05 +00:00
|
|
|
QString from = text_qsi->child(src_txt_row,1)->data(Qt::DisplayRole).toString();
|
2017-08-03 17:36:08 +00:00
|
|
|
if ((from == tr("Texte utilisateur")) && (deti->textFrom() != DynamicElementTextItem::UserText))
|
|
|
|
new QPropertyUndoCommand(deti, "textFrom", QVariant(deti->textFrom()), QVariant(DynamicElementTextItem::UserText), undo);
|
|
|
|
else if ((from == tr("Information de l'élément")) && (deti->textFrom() != DynamicElementTextItem::ElementInfo))
|
|
|
|
new QPropertyUndoCommand(deti, "textFrom", QVariant(deti->textFrom()), QVariant(DynamicElementTextItem::ElementInfo), undo);
|
2017-08-16 13:52:15 +00:00
|
|
|
else if ((from == tr("Texte composé")) && (deti->textFrom() != DynamicElementTextItem::CompositeText))
|
|
|
|
new QPropertyUndoCommand(deti, "textFrom", QVariant(deti->textFrom()), QVariant(DynamicElementTextItem::CompositeText), undo);
|
2017-08-03 17:36:08 +00:00
|
|
|
|
2017-08-06 10:18:33 +00:00
|
|
|
if(from == tr("Texte utilisateur"))
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
QString text = text_qsi->child(usr_txt_row,1)->data(Qt::DisplayRole).toString();
|
2017-08-06 10:18:33 +00:00
|
|
|
if (text != deti->text())
|
|
|
|
new QPropertyUndoCommand(deti, "text", QVariant(deti->text()), QVariant(text), undo);
|
|
|
|
}
|
|
|
|
else if (from == tr("Information de l'élément"))
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
QString info_name = text_qsi->child(info_txt_row,1)->data(Qt::UserRole+2).toString();
|
2017-08-06 10:18:33 +00:00
|
|
|
if(info_name != deti->infoName())
|
|
|
|
new QPropertyUndoCommand(deti, "infoName", QVariant(deti->infoName()), QVariant(info_name), undo);
|
|
|
|
}
|
2017-08-16 13:52:15 +00:00
|
|
|
else if (from == tr("Texte composé"))
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
QString composite_text = text_qsi->child(compo_txt_row,1)->data(Qt::UserRole+2).toString();
|
2017-08-16 13:52:15 +00:00
|
|
|
if(composite_text != deti->compositeText())
|
|
|
|
new QPropertyUndoCommand(deti, "compositeText", QVariant(deti->compositeText()), QVariant(composite_text), undo);
|
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
|
2017-12-13 21:15:05 +00:00
|
|
|
int fs = text_qsi->child(size_txt_row,1)->data(Qt::EditRole).toInt();
|
2019-03-08 10:27:33 +00:00
|
|
|
if (fs != deti->font().pointSize())
|
2017-11-07 18:35:26 +00:00
|
|
|
{
|
2019-03-08 11:53:27 +00:00
|
|
|
QFont font = deti->font();
|
|
|
|
font.setPointSize(fs);
|
|
|
|
QPropertyUndoCommand *quc = new QPropertyUndoCommand(deti, "font", QVariant(deti->font()), QVariant(font), undo);
|
2017-11-07 18:35:26 +00:00
|
|
|
quc->setText(tr("Modifier la taille d'un texte d'élément"));
|
|
|
|
}
|
2019-03-08 10:27:33 +00:00
|
|
|
|
|
|
|
QFont font = text_qsi->child(font_txt_row, 1)->data(Qt::UserRole+2).value<QFont>();
|
|
|
|
if (font != deti->font())
|
|
|
|
{
|
|
|
|
QPropertyUndoCommand *quc = new QPropertyUndoCommand(deti, "font", QVariant(deti->font()), QVariant(font), undo);
|
|
|
|
quc->setText(tr("Modifier la police d'un texte d'élément"));
|
|
|
|
}
|
2017-11-07 18:35:26 +00:00
|
|
|
|
2017-12-13 21:15:05 +00:00
|
|
|
QColor color = text_qsi->child(color_txt_row,1)->data(Qt::EditRole).value<QColor>();
|
2017-08-03 17:36:08 +00:00
|
|
|
if(color != deti->color())
|
2017-11-05 14:33:03 +00:00
|
|
|
{
|
|
|
|
QUndoCommand *quc = new QPropertyUndoCommand(deti, "color", QVariant(deti->color()), QVariant(color), undo);
|
|
|
|
quc->setText(tr("Modifier la couleur d'un texte d'élément"));
|
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
|
2017-12-13 21:15:05 +00:00
|
|
|
bool frame = text_qsi->child(frame_txt_row,1)->checkState() == Qt::Checked? true : false;
|
2017-11-07 18:35:26 +00:00
|
|
|
if(frame != deti->frame())
|
|
|
|
{
|
|
|
|
QUndoCommand *quc = new QPropertyUndoCommand(deti, "frame", QVariant(deti->frame()), QVariant(frame), undo);
|
|
|
|
quc->setText(tr("Modifier le cadre d'un texte d'élément"));
|
|
|
|
}
|
|
|
|
|
2018-01-26 18:49:38 +00:00
|
|
|
qreal text_width = text_qsi->child(width_txt_row, 1)->data(Qt::EditRole).toDouble();
|
|
|
|
if(text_width != deti->textWidth())
|
|
|
|
{
|
2018-03-24 13:45:48 +00:00
|
|
|
QPropertyUndoCommand *quc = new QPropertyUndoCommand(deti, "textWidth", QVariant(deti->textWidth()), QVariant(text_width), undo);
|
|
|
|
quc->setAnimated(true, false);
|
2018-01-26 18:49:38 +00:00
|
|
|
quc->setText(tr("Modifier la largeur d'un texte d'élément"));
|
|
|
|
}
|
|
|
|
|
2017-11-27 19:37:39 +00:00
|
|
|
//When text is in a group, they're isn't item for position of the text
|
2017-12-13 21:15:05 +00:00
|
|
|
if(text_qsi->child(x_txt_row,1) && text_qsi->child(y_txt_row,1))
|
2017-11-05 14:33:03 +00:00
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
QPointF p(text_qsi->child(x_txt_row,1)->data(Qt::EditRole).toDouble(),
|
|
|
|
text_qsi->child(y_txt_row,1)->data(Qt::EditRole).toDouble());
|
2017-11-27 19:37:39 +00:00
|
|
|
if(p != deti->pos())
|
|
|
|
{
|
|
|
|
QPropertyUndoCommand *quc = new QPropertyUndoCommand(deti, "pos", QVariant(deti->pos()), QVariant(p), undo);
|
2018-03-24 13:45:48 +00:00
|
|
|
quc->setAnimated(true, false);
|
2017-11-27 19:37:39 +00:00
|
|
|
quc->setText(tr("Déplacer un texte d'élément"));
|
|
|
|
}
|
2017-11-05 14:33:03 +00:00
|
|
|
}
|
2017-11-29 19:17:02 +00:00
|
|
|
//When text is in a group, they're isn't item for the rotation of the text
|
2017-12-13 21:15:05 +00:00
|
|
|
if(text_qsi->child(rot_txt_row,1))
|
2017-11-29 19:17:02 +00:00
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
qreal rot = text_qsi->child(rot_txt_row,1)->data(Qt::EditRole).toDouble();
|
2017-11-29 19:17:02 +00:00
|
|
|
rot = QET::correctAngle(rot);
|
|
|
|
if(rot != deti->rotation())
|
|
|
|
{
|
|
|
|
QPropertyUndoCommand *quc = new QPropertyUndoCommand(deti, "rotation", QVariant(deti->rotation()), QVariant(rot), undo);
|
2018-03-24 13:45:48 +00:00
|
|
|
quc->setAnimated(true, false);
|
2017-11-29 19:17:02 +00:00
|
|
|
quc->setText(tr("Pivoter un texte d'élément"));
|
|
|
|
}
|
|
|
|
}
|
2020-11-20 20:52:19 +01:00
|
|
|
|
|
|
|
if (text_qsi->child(keep_rot_row,1))
|
|
|
|
{
|
|
|
|
bool keep_rot = text_qsi->child(keep_rot_row, 1)->checkState() == Qt::Checked? true : false;
|
|
|
|
if (keep_rot != deti->keepVisualRotation())
|
|
|
|
{
|
|
|
|
auto qpuc = new QPropertyUndoCommand(deti, "keepVisualRotation", QVariant(deti->keepVisualRotation()), QVariant(keep_rot), undo);
|
|
|
|
qpuc->setText(tr("Modifier le maintient de la rotation d'un texte d'élément"));
|
|
|
|
}
|
|
|
|
}
|
2018-05-12 11:17:40 +00:00
|
|
|
|
|
|
|
//When text is in a groupe, they're isn't item for alignment of the text
|
|
|
|
if(text_qsi->child(align_txt_row, 1))
|
|
|
|
{
|
|
|
|
Qt::Alignment alignment = text_qsi->child(align_txt_row, 1)->data(Qt::UserRole+2).value<Qt::Alignment>();
|
|
|
|
if (alignment != deti->alignment())
|
|
|
|
{
|
|
|
|
QPropertyUndoCommand *quc = new QPropertyUndoCommand(deti, "alignment", QVariant(deti->alignment()), QVariant(alignment), undo);
|
|
|
|
quc->setText(tr("Modifier l'alignement d'un texte d'élément"));
|
|
|
|
}
|
|
|
|
}
|
2017-10-29 10:43:34 +00:00
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
return undo;
|
|
|
|
}
|
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::undoForEditedGroup
|
|
|
|
@param group
|
|
|
|
@param parent_undo
|
2020-08-16 14:23:59 +02:00
|
|
|
@return A QUndoCommand that describe all changes made for group.
|
|
|
|
Each change made for group is append as a child of the returned QUndoCommand.
|
|
|
|
In other word, if the returned QUndoCommand have no child,
|
|
|
|
that mean there is no change.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
QUndoCommand *DynamicElementTextModel::undoForEditedGroup(
|
|
|
|
ElementTextItemGroup *group,
|
|
|
|
QUndoCommand *parent_undo) const
|
2017-12-10 14:31:27 +00:00
|
|
|
{
|
|
|
|
QUndoCommand *undo = nullptr;
|
|
|
|
if(parent_undo)
|
|
|
|
undo = parent_undo;
|
|
|
|
else
|
|
|
|
undo = new QUndoCommand(tr("Éditer un groupe de textes"));
|
|
|
|
|
|
|
|
if (!m_groups_list.contains(group))
|
|
|
|
return undo;
|
|
|
|
|
|
|
|
QStandardItem *group_qsi = m_groups_list.value(group);
|
|
|
|
|
2017-12-13 21:15:05 +00:00
|
|
|
QString alignment = group_qsi->child(align_grp_row,1)->data(Qt::DisplayRole).toString();
|
2017-12-10 14:31:27 +00:00
|
|
|
if((alignment == tr("Gauche")) && (group->alignment() != Qt::AlignLeft))
|
|
|
|
new QPropertyUndoCommand(group, "alignment", QVariant(group->alignment()), QVariant(Qt::AlignLeft), undo);
|
|
|
|
else if((alignment == tr("Droite")) && (group->alignment() != Qt::AlignRight))
|
|
|
|
new QPropertyUndoCommand(group, "alignment", QVariant(group->alignment()), QVariant(Qt::AlignRight), undo);
|
|
|
|
else if((alignment == tr("Centre")) && (group->alignment() != Qt::AlignVCenter))
|
|
|
|
new QPropertyUndoCommand(group, "alignment", QVariant(group->alignment()), QVariant(Qt::AlignVCenter), undo);
|
|
|
|
|
2018-06-21 18:44:13 +00:00
|
|
|
|
2018-06-24 11:16:37 +00:00
|
|
|
if (group_qsi->child(hold_to_bottom_grp_row, 1)->checkState() == Qt::Unchecked)
|
2018-03-24 13:45:48 +00:00
|
|
|
{
|
2018-06-24 11:16:37 +00:00
|
|
|
QPointF pos(group_qsi->child(x_grp_row,1)->data(Qt::EditRole).toDouble(),
|
|
|
|
group_qsi->child(y_grp_row,1)->data(Qt::EditRole).toDouble());
|
|
|
|
if(group->pos() != pos)
|
|
|
|
{
|
|
|
|
QPropertyUndoCommand *qpuc = new QPropertyUndoCommand(group, "pos", QVariant(group->pos()), QVariant(pos), undo);
|
|
|
|
qpuc->setAnimated(true, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
qreal rotation = group_qsi->child(rot_grp_row,1)->data(Qt::EditRole).toDouble();
|
|
|
|
if(group->rotation() != rotation)
|
|
|
|
{
|
|
|
|
QPropertyUndoCommand *qpuc = new QPropertyUndoCommand(group, "rotation", QVariant(group->rotation()), QVariant(rotation), undo);
|
|
|
|
qpuc->setAnimated(true, false);
|
|
|
|
}
|
2018-03-24 13:45:48 +00:00
|
|
|
}
|
2017-12-10 14:31:27 +00:00
|
|
|
|
2017-12-13 21:15:05 +00:00
|
|
|
int v_adjustment = group_qsi->child(adjust_grp_row,1)->data(Qt::EditRole).toInt();
|
2017-12-10 14:31:27 +00:00
|
|
|
if(group->verticalAdjustment() != v_adjustment)
|
|
|
|
new QPropertyUndoCommand(group, "verticalAdjustment", QVariant(group->verticalAdjustment()), QVariant(v_adjustment), undo);
|
|
|
|
|
2017-12-18 20:05:00 +00:00
|
|
|
QString name = group_qsi->data(Qt::DisplayRole).toString();
|
|
|
|
if(group->name() != name)
|
|
|
|
new QPropertyUndoCommand(group, "name", QVariant(group->name()), QVariant(name), undo);
|
2018-02-01 18:40:12 +00:00
|
|
|
|
|
|
|
bool hold_to_bottom = group_qsi->child(hold_to_bottom_grp_row, 1)->checkState() == Qt::Checked? true : false;
|
|
|
|
if(group->holdToBottomPage() != hold_to_bottom)
|
|
|
|
new QPropertyUndoCommand(group, "holdToBottomPage", QVariant(group->holdToBottomPage()), QVariant(hold_to_bottom), undo);
|
2017-12-18 20:05:00 +00:00
|
|
|
|
2018-06-24 11:16:37 +00:00
|
|
|
bool frame_ = group_qsi->child(frame_grp_row, 1)->checkState() == Qt::Checked? true : false;
|
|
|
|
if(group->frame() != frame_)
|
|
|
|
new QPropertyUndoCommand(group, "frame", QVariant(group->frame()), QVariant(frame_), undo);
|
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
return undo;
|
|
|
|
}
|
|
|
|
|
2017-11-27 19:37:39 +00:00
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::AddGroup
|
|
|
|
Add a text item group to this model
|
|
|
|
@param group
|
|
|
|
*/
|
2017-11-27 19:37:39 +00:00
|
|
|
void DynamicElementTextModel::addGroup(ElementTextItemGroup *group)
|
|
|
|
{
|
|
|
|
if(m_groups_list.keys().contains(group))
|
|
|
|
return;
|
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
//Group
|
2017-11-27 19:37:39 +00:00
|
|
|
QStandardItem *grp = new QStandardItem(group->name());
|
2020-08-16 14:23:59 +02:00
|
|
|
grp->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsDropEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2017-11-27 19:37:39 +00:00
|
|
|
grp->setIcon(QET::Icons::textGroup);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *empty_qsi = new QStandardItem(0);
|
2017-11-27 19:37:39 +00:00
|
|
|
empty_qsi->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
QList<QStandardItem *> qsi_list;
|
|
|
|
qsi_list << grp << empty_qsi;
|
|
|
|
|
|
|
|
this->insertRow(0, qsi_list);
|
|
|
|
m_groups_list.insert(group, grp);
|
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
//Alignment
|
|
|
|
QStandardItem *alignment = new QStandardItem(tr("Alignement"));
|
|
|
|
alignment->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
|
|
|
QString text;
|
|
|
|
switch (group->alignment()) {
|
|
|
|
case Qt::AlignLeft: text = tr("Gauche"); break;
|
|
|
|
case Qt::AlignRight: text = tr("Droite"); break;
|
|
|
|
case Qt::AlignVCenter: text = tr("Centre"); break;
|
|
|
|
default: break;}
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *alignment_a = new QStandardItem(text);
|
2020-08-16 14:23:59 +02:00
|
|
|
alignment_a->setData(DynamicElementTextModel::grpAlignment,
|
|
|
|
Qt::UserRole+1);
|
|
|
|
alignment_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2017-12-10 14:31:27 +00:00
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << alignment << alignment_a;
|
2018-06-21 18:44:13 +00:00
|
|
|
grp->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//X pos
|
|
|
|
QStandardItem *x_pos = new QStandardItem(tr("Position X"));
|
|
|
|
x_pos->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *x_pos_a = new QStandardItem;
|
2018-06-21 18:44:13 +00:00
|
|
|
x_pos_a->setData(group->pos().x(), Qt::EditRole);
|
|
|
|
x_pos_a->setData(DynamicElementTextModel::grpPos, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
x_pos_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2018-06-21 18:44:13 +00:00
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << x_pos << x_pos_a;
|
|
|
|
grp->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//Y pos
|
|
|
|
QStandardItem *y_pos = new QStandardItem(tr("Position Y"));
|
|
|
|
y_pos->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *y_pos_a = new QStandardItem;
|
2018-06-21 18:44:13 +00:00
|
|
|
y_pos_a->setData(group->pos().y(), Qt::EditRole);
|
|
|
|
y_pos_a->setData(DynamicElementTextModel::grpPos, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
y_pos_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2018-06-21 18:44:13 +00:00
|
|
|
|
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << y_pos << y_pos_a;
|
2017-12-10 14:31:27 +00:00
|
|
|
grp->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//Rotation
|
|
|
|
QStandardItem *rot = new QStandardItem(tr("Rotation"));
|
|
|
|
rot->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *rot_a = new QStandardItem;
|
2017-12-10 14:31:27 +00:00
|
|
|
rot_a->setData(group->rotation(), Qt::EditRole);
|
2018-02-01 18:40:12 +00:00
|
|
|
rot_a->setData(DynamicElementTextModel::grpRotation, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
rot_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2017-12-10 14:31:27 +00:00
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << rot << rot_a;
|
|
|
|
grp->appendRow(qsi_list);
|
|
|
|
|
|
|
|
//Vertical adjustment
|
|
|
|
QStandardItem *v_adj = new QStandardItem(tr("Ajustement vertical"));
|
|
|
|
v_adj->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *v_adj_a = new QStandardItem;
|
2017-12-10 14:31:27 +00:00
|
|
|
v_adj_a->setData(group->verticalAdjustment(), Qt::EditRole);
|
2018-02-01 18:40:12 +00:00
|
|
|
v_adj_a->setData(DynamicElementTextModel::grpVAdjust, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
v_adj_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2017-12-10 14:31:27 +00:00
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << v_adj << v_adj_a;
|
|
|
|
grp->appendRow(qsi_list);
|
|
|
|
|
2018-06-24 11:16:37 +00:00
|
|
|
//Frame
|
|
|
|
QStandardItem *frame_ = new QStandardItem(tr("Cadre"));
|
|
|
|
frame_->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *frame_a = new QStandardItem;
|
2018-06-24 11:16:37 +00:00
|
|
|
frame_a->setCheckable(true);
|
|
|
|
frame_a->setCheckState(group->frame()? Qt::Checked : Qt::Unchecked);
|
|
|
|
frame_a->setData(DynamicElementTextModel::grpFrame, Qt::UserRole+1);
|
2020-08-16 14:23:59 +02:00
|
|
|
frame_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsUserCheckable);
|
2018-06-24 11:16:37 +00:00
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << frame_ << frame_a;
|
|
|
|
grp->appendRow(qsi_list);
|
|
|
|
|
|
|
|
|
2018-02-01 18:40:12 +00:00
|
|
|
//Hold to the bottom of the page
|
|
|
|
QStandardItem *hold_bottom = new QStandardItem(tr("Maintenir en bas de page"));
|
|
|
|
hold_bottom->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QStandardItem *hold_bottom_a = new QStandardItem();
|
2018-02-01 18:40:12 +00:00
|
|
|
hold_bottom_a->setCheckable(true);
|
2020-08-16 14:23:59 +02:00
|
|
|
hold_bottom_a->setCheckState(group->holdToBottomPage()
|
|
|
|
? Qt::Checked
|
|
|
|
: Qt::Unchecked);
|
|
|
|
hold_bottom_a->setData(DynamicElementTextModel::grpHoldBottom,
|
|
|
|
Qt::UserRole+1);
|
|
|
|
hold_bottom_a->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsUserCheckable);
|
2018-02-01 18:40:12 +00:00
|
|
|
qsi_list.clear();
|
|
|
|
qsi_list << hold_bottom << hold_bottom_a;
|
|
|
|
grp->appendRow(qsi_list);
|
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
|
2017-11-27 19:37:39 +00:00
|
|
|
//Add the texts of the group
|
|
|
|
for(DynamicElementTextItem *deti : group->texts())
|
|
|
|
{
|
|
|
|
QStandardItem *group_item = m_groups_list.value(group);
|
|
|
|
group_item->appendRow(itemsForText(deti));
|
|
|
|
}
|
2017-12-10 14:31:27 +00:00
|
|
|
setConnection(group, true);
|
2018-06-21 18:44:13 +00:00
|
|
|
enableGroupRotationAndPos(group);
|
2017-11-27 19:37:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::removeGroup
|
|
|
|
Remove the text item group from this model
|
|
|
|
@param group
|
|
|
|
*/
|
2017-11-27 19:37:39 +00:00
|
|
|
void DynamicElementTextModel::removeGroup(ElementTextItemGroup *group)
|
|
|
|
{
|
|
|
|
if(m_groups_list.keys().contains(group))
|
|
|
|
{
|
|
|
|
QModelIndex group_index = m_groups_list.value(group)->index();
|
|
|
|
this->removeRow(group_index.row(), group_index.parent());
|
|
|
|
m_groups_list.remove(group);
|
2017-12-10 14:31:27 +00:00
|
|
|
setConnection(group, false);
|
2017-11-27 19:37:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::textAddedToGroup
|
2020-08-18 21:28:52 +02:00
|
|
|
Add the text text to the group group
|
2020-08-16 11:19:36 +02:00
|
|
|
@param deti
|
|
|
|
@param group
|
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
void DynamicElementTextModel::addTextToGroup(DynamicElementTextItem *deti,
|
|
|
|
ElementTextItemGroup *group)
|
2017-11-27 19:37:39 +00:00
|
|
|
{
|
|
|
|
QStandardItem *group_item = m_groups_list.value(group);
|
|
|
|
group_item->appendRow(itemsForText(deti));
|
|
|
|
}
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
void DynamicElementTextModel::removeTextFromGroup(DynamicElementTextItem *deti,
|
|
|
|
ElementTextItemGroup *group)
|
2017-11-27 19:37:39 +00:00
|
|
|
{
|
|
|
|
Q_UNUSED(group)
|
|
|
|
|
|
|
|
if(m_texts_list.keys().contains(deti))
|
|
|
|
{
|
|
|
|
QStandardItem *text_item = m_texts_list.value(deti);
|
|
|
|
QModelIndex text_index = indexFromItem(text_item);
|
|
|
|
removeRow(text_index.row(), text_index.parent());
|
|
|
|
m_texts_list.remove(deti);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::groupFromIndex
|
|
|
|
@param index
|
2020-08-16 14:23:59 +02:00
|
|
|
@return the group associated with index. Return value can be nullptr
|
2020-08-18 21:28:52 +02:00
|
|
|
Index can be a child of an index associated with a group
|
2020-08-16 14:23:59 +02:00
|
|
|
and can be the column 0 or 1.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
ElementTextItemGroup *DynamicElementTextModel::groupFromIndex(
|
|
|
|
const QModelIndex &index) const
|
2017-11-27 19:37:39 +00:00
|
|
|
{
|
|
|
|
if(!index.isValid())
|
2020-08-16 14:23:59 +02:00
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
if (QStandardItem *item = itemFromIndex(index))
|
|
|
|
return groupFromItem(item);
|
|
|
|
else
|
|
|
|
return nullptr;
|
2017-11-27 19:37:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::groupFromItem
|
|
|
|
@param item
|
2020-08-16 14:23:59 +02:00
|
|
|
@return the group associated with item. Return value can be nullptr
|
|
|
|
item can be a child of an item associated with a group
|
|
|
|
and can be the column 0 or 1.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
ElementTextItemGroup *DynamicElementTextModel::groupFromItem(
|
|
|
|
QStandardItem *item) const
|
2017-11-27 19:37:39 +00:00
|
|
|
{
|
2020-08-16 14:23:59 +02:00
|
|
|
//Get the item of the column 0
|
2017-12-01 18:36:57 +00:00
|
|
|
if(item->column() == 1)
|
|
|
|
{
|
|
|
|
if(item->parent())
|
|
|
|
item = item->parent()->child(item->row(), 0);
|
|
|
|
else
|
|
|
|
item = itemFromIndex(index(item->row(),0));
|
|
|
|
}
|
2017-11-27 19:37:39 +00:00
|
|
|
|
2017-12-01 18:36:57 +00:00
|
|
|
while (item->parent())
|
|
|
|
item = item->parent();
|
2017-11-27 19:37:39 +00:00
|
|
|
|
2017-12-01 18:36:57 +00:00
|
|
|
if(m_groups_list.values().contains(item))
|
|
|
|
return m_groups_list.key(item);
|
2017-11-27 19:37:39 +00:00
|
|
|
else
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::indexFromGroup
|
|
|
|
@param group
|
2020-08-16 14:23:59 +02:00
|
|
|
@return The index associated to the group group
|
2020-08-16 11:19:36 +02:00
|
|
|
or a default QModelIndex if not match
|
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
QModelIndex DynamicElementTextModel::indexFromGroup(
|
|
|
|
ElementTextItemGroup *group) const
|
2017-11-27 19:37:39 +00:00
|
|
|
{
|
|
|
|
if(m_groups_list.keys().contains(group))
|
|
|
|
return m_groups_list.value(group)->index();
|
|
|
|
else
|
|
|
|
return QModelIndex();
|
|
|
|
}
|
|
|
|
|
2017-12-01 18:36:57 +00:00
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::indexIsText
|
|
|
|
@param index
|
2020-08-18 21:28:52 +02:00
|
|
|
@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.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2017-12-01 18:36:57 +00:00
|
|
|
bool DynamicElementTextModel::indexIsText(const QModelIndex &index) const
|
|
|
|
{
|
|
|
|
QStandardItem *item = nullptr;
|
|
|
|
|
|
|
|
//The item represent the second column
|
|
|
|
if(index.column() == 1)
|
|
|
|
{
|
|
|
|
if(index.parent().isValid())
|
2020-08-16 14:23:59 +02:00
|
|
|
item = itemFromIndex(index.parent()
|
|
|
|
.QModelIndex::model()->index(
|
|
|
|
index.row(),
|
|
|
|
0));
|
2017-12-01 18:36:57 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::indexIsGroup
|
|
|
|
@param index
|
2020-08-16 14:23:59 +02:00
|
|
|
@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.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2017-12-01 18:36:57 +00:00
|
|
|
bool DynamicElementTextModel::indexIsGroup(const QModelIndex &index) const
|
|
|
|
{
|
|
|
|
QStandardItem *item = nullptr;
|
|
|
|
|
|
|
|
//The item represent the second column
|
|
|
|
if(index.column() == 1)
|
|
|
|
{
|
|
|
|
if(index.parent().isValid())
|
2020-08-16 14:23:59 +02:00
|
|
|
item = itemFromIndex(index.parent()
|
|
|
|
.QModelIndex::model()->index(
|
|
|
|
index.row(),0));
|
2017-12-01 18:36:57 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
bool DynamicElementTextModel::canDropMimeData(
|
|
|
|
const QMimeData *data,
|
|
|
|
Qt::DropAction action,
|
|
|
|
int row,
|
|
|
|
int column,
|
|
|
|
const QModelIndex &parent) const
|
2017-12-01 18:36:57 +00:00
|
|
|
{
|
|
|
|
Q_UNUSED(action);
|
2018-03-13 16:20:59 +00:00
|
|
|
|
2017-12-01 18:36:57 +00:00
|
|
|
if(data->hasFormat("application/x-qet-element-text-uuid"))
|
|
|
|
{
|
|
|
|
QModelIndex index;
|
|
|
|
if(parent.isValid() && row != -1 && column !=1) //Insert in child of parent
|
2020-06-07 10:39:07 +02:00
|
|
|
index = parent.QModelIndex::model()->index(row, column);
|
2017-12-01 18:36:57 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::dropMimeData
|
|
|
|
@param data
|
|
|
|
@param action
|
|
|
|
@param row
|
|
|
|
@param column
|
|
|
|
@param parent
|
2020-08-16 14:23:59 +02:00
|
|
|
@return In any case return false,
|
|
|
|
for overwrite the default behavior of model.
|
2020-08-16 11:19:36 +02:00
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
bool DynamicElementTextModel::dropMimeData(const QMimeData *data,
|
|
|
|
Qt::DropAction action,
|
|
|
|
int row,
|
|
|
|
int column,
|
|
|
|
const QModelIndex &parent)
|
2017-12-01 18:36:57 +00:00
|
|
|
{
|
|
|
|
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
|
2020-06-07 10:39:07 +02:00
|
|
|
index = parent.QModelIndex::model()->index(row, column);
|
2017-12-01 18:36:57 +00:00
|
|
|
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));
|
2017-12-18 20:05:00 +00:00
|
|
|
return true;
|
2017-12-01 18:36:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//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();
|
|
|
|
|
2017-12-18 20:05:00 +00:00
|
|
|
return true;
|
2017-12-01 18:36:57 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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)));
|
2017-12-18 20:05:00 +00:00
|
|
|
return true;
|
2017-12-01 18:36:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
QMimeData *DynamicElementTextModel::mimeData(const QModelIndexList &indexes) const
|
2018-03-13 16:20:59 +00:00
|
|
|
{
|
2017-12-01 18:36:57 +00:00
|
|
|
QModelIndex index = indexes.first();
|
|
|
|
if (index.isValid())
|
|
|
|
{
|
|
|
|
QStandardItem *item = itemFromIndex(index);
|
|
|
|
if(item)
|
|
|
|
{
|
|
|
|
DynamicElementTextItem *deti = m_texts_list.key(item);
|
|
|
|
if(deti)
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QMimeData *mime_data = new QMimeData();
|
2017-12-01 18:36:57 +00:00
|
|
|
mime_data->setText(deti->uuid().toString());
|
|
|
|
mime_data->setData("application/x-qet-element-text-uuid", deti->uuid().toString().toLatin1());
|
|
|
|
return mime_data;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-13 16:20:59 +00:00
|
|
|
return QStandardItemModel::mimeData(indexes);
|
2017-12-01 18:36:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::mimeTypes
|
|
|
|
@return
|
|
|
|
*/
|
2017-12-01 18:36:57 +00:00
|
|
|
QStringList DynamicElementTextModel::mimeTypes() const
|
|
|
|
{
|
|
|
|
QStringList mime_list = QAbstractItemModel::mimeTypes();
|
|
|
|
mime_list << "application/x-qet-element-text-uuid";
|
|
|
|
return mime_list;
|
|
|
|
}
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::enableSourceText
|
2020-08-16 14:23:59 +02:00
|
|
|
Enable the good field, according to the current source of text,
|
2020-08-18 21:28:52 +02:00
|
|
|
for the edited text deti
|
2020-08-16 11:19:36 +02:00
|
|
|
@param deti
|
|
|
|
@param tf
|
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
void DynamicElementTextModel::enableSourceText(
|
|
|
|
DynamicElementTextItem *deti,
|
|
|
|
DynamicElementTextItem::TextFrom tf)
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
|
|
|
if (!m_texts_list.contains(deti))
|
|
|
|
return;
|
2017-08-24 17:35:40 +00:00
|
|
|
|
2017-12-13 21:15:05 +00:00
|
|
|
QStandardItem *qsi = m_texts_list.value(deti);
|
2017-08-03 17:36:08 +00:00
|
|
|
|
2017-08-16 13:52:15 +00:00
|
|
|
bool usr = false, info = false, compo = false;
|
|
|
|
|
|
|
|
switch (tf) {
|
|
|
|
case DynamicElementTextItem::UserText: usr = true; break;
|
|
|
|
case DynamicElementTextItem::ElementInfo: info = true; break;
|
2017-08-24 17:35:40 +00:00
|
|
|
case DynamicElementTextItem::CompositeText: compo = true;break;
|
2017-08-16 13:52:15 +00:00
|
|
|
}
|
2017-08-24 17:35:40 +00:00
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
//User text
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(usr_txt_row,0)->setEnabled(usr);
|
|
|
|
qsi->child(usr_txt_row,1)->setEnabled(usr);
|
2017-08-03 17:36:08 +00:00
|
|
|
//Info text
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(info_txt_row,0)->setEnabled(info);
|
|
|
|
qsi->child(info_txt_row,1)->setEnabled(info);
|
2017-08-16 13:52:15 +00:00
|
|
|
//Composite text
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(compo_txt_row,0)->setEnabled(compo);
|
|
|
|
qsi->child(compo_txt_row,1)->setEnabled(compo);
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
|
2018-02-01 18:40:12 +00:00
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::enableGroupRotation
|
|
|
|
Enable/disable the item "group rotation" according the option hold to bottom
|
|
|
|
@param group
|
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
void DynamicElementTextModel::enableGroupRotationAndPos(
|
|
|
|
ElementTextItemGroup *group)
|
2018-02-01 18:40:12 +00:00
|
|
|
{
|
|
|
|
if(!m_groups_list.contains(group))
|
|
|
|
return;
|
|
|
|
|
|
|
|
QStandardItem *qsi = m_groups_list.value(group);
|
|
|
|
|
|
|
|
if(group->holdToBottomPage())
|
|
|
|
{
|
2018-06-21 18:44:13 +00:00
|
|
|
qsi->child(x_grp_row, 0)->setFlags(Qt::ItemIsSelectable);
|
|
|
|
qsi->child(x_grp_row, 1)->setFlags(Qt::ItemIsSelectable);
|
|
|
|
qsi->child(y_grp_row, 0)->setFlags(Qt::ItemIsSelectable);
|
|
|
|
qsi->child(y_grp_row, 1)->setFlags(Qt::ItemIsSelectable);
|
2018-02-01 18:40:12 +00:00
|
|
|
qsi->child(rot_grp_row, 0)->setFlags(Qt::ItemIsSelectable);
|
|
|
|
qsi->child(rot_grp_row, 1)->setFlags(Qt::ItemIsSelectable);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2020-08-16 14:23:59 +02:00
|
|
|
qsi->child(x_grp_row, 0)->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled);
|
|
|
|
qsi->child(x_grp_row, 1)->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
qsi->child(y_grp_row, 0)->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled);
|
|
|
|
qsi->child(y_grp_row, 1)->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
|
|
|
qsi->child(rot_grp_row, 0)->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled);
|
|
|
|
qsi->child(rot_grp_row, 1)->setFlags(Qt::ItemIsSelectable
|
|
|
|
| Qt::ItemIsEnabled
|
|
|
|
| Qt::ItemIsEditable);
|
2018-02-01 18:40:12 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-24 17:35:40 +00:00
|
|
|
void DynamicElementTextModel::itemDataChanged(QStandardItem *qsi)
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
|
|
|
DynamicElementTextItem *deti = textFromItem(qsi);
|
2017-12-10 14:31:27 +00:00
|
|
|
ElementTextItemGroup *etig = groupFromItem(qsi);
|
|
|
|
if (!deti && !etig)
|
2017-08-03 17:36:08 +00:00
|
|
|
return;
|
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
if(deti)
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2017-12-10 14:31:27 +00:00
|
|
|
QStandardItem *text_qsi = m_texts_list.value(deti);
|
|
|
|
DiagramContext dc;
|
|
|
|
if(deti->elementUseForInfo())
|
|
|
|
dc = deti->elementUseForInfo()->elementInformations();
|
2017-08-24 17:35:40 +00:00
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
if (qsi->data().toInt() == textFrom)
|
|
|
|
{
|
|
|
|
QString from = qsi->data(Qt::DisplayRole).toString();
|
|
|
|
|
|
|
|
if (from == tr("Texte utilisateur"))
|
|
|
|
{
|
|
|
|
enableSourceText(deti, DynamicElementTextItem::UserText);
|
2017-12-13 21:15:05 +00:00
|
|
|
text_qsi->setData(text_qsi->child(usr_txt_row,1)->data(Qt::DisplayRole).toString());
|
2017-12-10 14:31:27 +00:00
|
|
|
}
|
|
|
|
else if (from == tr("Information de l'élément"))
|
|
|
|
{
|
|
|
|
enableSourceText(deti, DynamicElementTextItem::ElementInfo);
|
2017-12-13 21:15:05 +00:00
|
|
|
QString info = text_qsi->child(info_txt_row,1)->data(Qt::UserRole+2).toString();
|
2017-12-10 14:31:27 +00:00
|
|
|
text_qsi->setData(dc.value(info), Qt::DisplayRole);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
enableSourceText(deti, DynamicElementTextItem::CompositeText);
|
2017-12-13 21:15:05 +00:00
|
|
|
QString compo = text_qsi->child(compo_txt_row,1)->data(Qt::UserRole+2).toString();
|
2017-12-10 14:31:27 +00:00
|
|
|
text_qsi->setData(autonum::AssignVariables::replaceVariable(compo, dc), Qt::DisplayRole);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (qsi->data().toInt() == userText)
|
2017-08-24 17:35:40 +00:00
|
|
|
{
|
2017-12-10 14:31:27 +00:00
|
|
|
QString text = qsi->data(Qt::DisplayRole).toString();
|
|
|
|
text_qsi->setData(text, Qt::DisplayRole);
|
2017-08-24 17:35:40 +00:00
|
|
|
}
|
2017-12-10 14:31:27 +00:00
|
|
|
else if (qsi->data().toInt() == infoText && deti->elementUseForInfo())
|
2017-08-24 17:35:40 +00:00
|
|
|
{
|
2017-12-10 14:31:27 +00:00
|
|
|
QString info = qsi->data(Qt::UserRole+2).toString();
|
2017-08-29 14:54:27 +00:00
|
|
|
text_qsi->setData(dc.value(info), Qt::DisplayRole);
|
2017-08-24 17:35:40 +00:00
|
|
|
}
|
2017-12-10 14:31:27 +00:00
|
|
|
else if (qsi->data().toInt() == compositeText && deti->elementUseForInfo())
|
2017-08-24 17:35:40 +00:00
|
|
|
{
|
2017-12-10 14:31:27 +00:00
|
|
|
QString compo = qsi->data(Qt::UserRole+2).toString();
|
2017-08-29 14:54:27 +00:00
|
|
|
text_qsi->setData(autonum::AssignVariables::replaceVariable(compo, dc), Qt::DisplayRole);
|
2017-08-24 17:35:40 +00:00
|
|
|
}
|
2017-08-16 13:52:15 +00:00
|
|
|
}
|
|
|
|
|
2020-08-18 21:28:52 +02:00
|
|
|
//We emit the signal only if qsi is in the second column,
|
2020-08-16 14:23:59 +02:00
|
|
|
//because the data are stored on this column
|
|
|
|
//the first column is use only for display the title of the property,
|
|
|
|
//except for the name of texts group
|
|
|
|
if((m_groups_list.values().contains(qsi) || qsi->column() == 1)
|
|
|
|
&& !m_block_dataChanged)
|
2017-12-10 14:31:27 +00:00
|
|
|
emit dataChanged();
|
2020-08-16 14:23:59 +02:00
|
|
|
if(deti) deti->updateXref();
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::setConnection
|
2020-08-18 21:28:52 +02:00
|
|
|
Set up the connection for deti to keep up to date
|
|
|
|
the data of this model and the text.
|
2020-08-16 11:19:36 +02:00
|
|
|
Is notably use with the use of QUndoCommand.
|
|
|
|
@param deti - text to setup connection
|
|
|
|
@param set - true = set connection - false unset connection
|
|
|
|
*/
|
2017-08-03 17:36:08 +00:00
|
|
|
void DynamicElementTextModel::setConnection(DynamicElementTextItem *deti, bool set)
|
|
|
|
{
|
|
|
|
if(set)
|
|
|
|
{
|
|
|
|
if(m_hash_text_connect.keys().contains(deti))
|
|
|
|
return;
|
|
|
|
|
|
|
|
QList<QMetaObject::Connection> connection_list;
|
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::colorChanged, [deti,this](){this->updateDataFromText(deti, color);});
|
2019-03-08 10:27:33 +00:00
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::fontChanged, [deti,this](){this->updateDataFromText(deti, font);});
|
2017-08-16 13:52:15 +00:00
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::textFromChanged, [deti,this](){this->updateDataFromText(deti, textFrom);});
|
2017-08-24 17:35:40 +00:00
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::textChanged, [deti,this](){this->updateDataFromText(deti, userText);});
|
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::infoNameChanged, [deti,this](){this->updateDataFromText(deti, infoText);});
|
2017-10-29 10:43:34 +00:00
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::xChanged, [deti,this](){this->updateDataFromText(deti, pos);});
|
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::yChanged, [deti,this](){this->updateDataFromText(deti, pos);});
|
2017-11-07 18:35:26 +00:00
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::frameChanged, [deti,this](){this->updateDataFromText(deti, frame);});
|
2017-11-29 19:17:02 +00:00
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::rotationChanged, [deti,this](){this->updateDataFromText(deti, rotation);});
|
2018-01-26 18:49:38 +00:00
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::textWidthChanged,[deti,this](){this->updateDataFromText(deti, textWidth);});
|
2017-08-24 17:35:40 +00:00
|
|
|
connection_list << connect(deti, &DynamicElementTextItem::compositeTextChanged, [deti, this]() {this->updateDataFromText(deti, compositeText);});
|
2017-08-03 17:36:08 +00:00
|
|
|
m_hash_text_connect.insert(deti, connection_list);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if(!m_hash_text_connect.keys().contains(deti))
|
|
|
|
return;
|
|
|
|
|
2018-07-19 14:14:31 +00:00
|
|
|
for (const QMetaObject::Connection& con : m_hash_text_connect.value(deti))
|
2017-08-03 17:36:08 +00:00
|
|
|
disconnect(con);
|
|
|
|
|
|
|
|
m_hash_text_connect.remove(deti);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicElementTextModel::setConnection
|
2020-08-18 21:28:52 +02:00
|
|
|
Set up the connection for group to keep up to date
|
|
|
|
the data of this model and the group.
|
2020-08-16 11:19:36 +02:00
|
|
|
Is notably use with the use of QUndoCommand.
|
|
|
|
@param group group to setup the connection
|
|
|
|
@param set true = set connection - false unset connection
|
|
|
|
*/
|
2017-12-10 14:31:27 +00:00
|
|
|
void DynamicElementTextModel::setConnection(ElementTextItemGroup *group, bool set)
|
|
|
|
{
|
|
|
|
if(set)
|
|
|
|
{
|
|
|
|
if(m_hash_group_connect.keys().contains(group))
|
|
|
|
return;
|
|
|
|
|
|
|
|
QList<QMetaObject::Connection> connection_list;
|
2018-02-01 18:40:12 +00:00
|
|
|
connection_list << connect(group, &ElementTextItemGroup::alignmentChanged, [group, this]() {this->updateDataFromGroup(group, grpAlignment);});
|
|
|
|
connection_list << connect(group, &ElementTextItemGroup::rotationChanged, [group, this]() {this->updateDataFromGroup(group, grpRotation);});
|
|
|
|
connection_list << connect(group, &ElementTextItemGroup::verticalAdjustmentChanged, [group, this]() {this->updateDataFromGroup(group, grpVAdjust);});
|
|
|
|
connection_list << connect(group, &ElementTextItemGroup::verticalAdjustmentChanged, [group, this]() {this->updateDataFromGroup(group, grpName);});
|
|
|
|
connection_list << connect(group, &ElementTextItemGroup::holdToBottomPageChanged, [group, this]() {this->updateDataFromGroup(group, grpHoldBottom);});
|
2018-06-21 18:44:13 +00:00
|
|
|
connection_list << connect(group, &ElementTextItemGroup::xChanged, [group, this]() {this->updateDataFromGroup(group, grpPos);});
|
|
|
|
connection_list << connect(group, &ElementTextItemGroup::yChanged, [group, this]() {this->updateDataFromGroup(group, grpPos);});
|
2018-06-24 11:16:37 +00:00
|
|
|
connection_list << connect(group, &ElementTextItemGroup::frameChanged, [group, this]() {this->updateDataFromGroup(group, grpFrame);});
|
2017-12-10 14:31:27 +00:00
|
|
|
|
|
|
|
m_hash_group_connect.insert(group, connection_list);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if(!m_hash_group_connect.keys().contains(group))
|
|
|
|
return;
|
|
|
|
|
2018-07-19 14:14:31 +00:00
|
|
|
for (const QMetaObject::Connection& con : m_hash_group_connect.value(group))
|
2017-12-10 14:31:27 +00:00
|
|
|
disconnect(con);
|
|
|
|
|
|
|
|
m_hash_group_connect.remove(group);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
void DynamicElementTextModel::updateDataFromText(DynamicElementTextItem *deti,
|
|
|
|
ValueType type)
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
|
|
|
QStandardItem *qsi = m_texts_list.value(deti);
|
|
|
|
if (!qsi)
|
|
|
|
return;
|
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
m_block_dataChanged = true;
|
2017-10-29 10:43:34 +00:00
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case textFrom:
|
2017-08-16 13:52:15 +00:00
|
|
|
{
|
2017-08-24 17:35:40 +00:00
|
|
|
switch (deti->textFrom())
|
|
|
|
{
|
2017-08-16 13:52:15 +00:00
|
|
|
case DynamicElementTextItem::UserText: qsi->child(0,1)->setData(tr("Texte utilisateur"), Qt::DisplayRole); break;
|
|
|
|
case DynamicElementTextItem::ElementInfo : qsi->child(0,1)->setData(tr("Information de l'élément"), Qt::DisplayRole); break;
|
|
|
|
case DynamicElementTextItem::CompositeText : qsi->child(0,1)->setData(tr("Texte composé"), Qt::DisplayRole); break;
|
|
|
|
}
|
2017-08-24 17:35:40 +00:00
|
|
|
enableSourceText(deti, deti->textFrom());
|
|
|
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
2017-08-03 17:36:08 +00:00
|
|
|
break;
|
2017-08-16 13:52:15 +00:00
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
case userText:
|
|
|
|
{
|
2017-08-24 17:35:40 +00:00
|
|
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(usr_txt_row,1)->setData(deti->toPlainText(), Qt::DisplayRole);
|
2017-08-03 17:36:08 +00:00
|
|
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case infoText:
|
2017-08-24 17:35:40 +00:00
|
|
|
{
|
|
|
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
|
|
|
QString info_name = deti->infoName();
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(info_txt_row,1)->setData(info_name, Qt::UserRole+2);
|
2020-11-08 19:05:11 +01:00
|
|
|
qsi->child(info_txt_row,1)->setData(QETInformation::translatedInfoKey(info_name), Qt::DisplayRole);
|
2017-08-03 17:36:08 +00:00
|
|
|
break;
|
2017-08-24 17:35:40 +00:00
|
|
|
}
|
2017-08-16 13:52:15 +00:00
|
|
|
case compositeText:
|
2017-08-24 17:35:40 +00:00
|
|
|
{
|
|
|
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(compo_txt_row,1)->setData(deti->compositeText(), Qt::UserRole+2);
|
|
|
|
qsi->child(compo_txt_row,1)->setData(deti->toPlainText(), Qt::DisplayRole);
|
2017-08-24 17:35:40 +00:00
|
|
|
qsi->setData(deti->toPlainText(), Qt::DisplayRole);
|
2017-08-16 13:52:15 +00:00
|
|
|
break;
|
2017-08-24 17:35:40 +00:00
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
case size:
|
2019-03-08 10:27:33 +00:00
|
|
|
//qsi->child(size_txt_row,1)->setData(deti->fontSize(), Qt::EditRole);
|
|
|
|
break;
|
|
|
|
case font:
|
|
|
|
{
|
|
|
|
QFont f(deti->font());
|
|
|
|
qsi->child(font_txt_row,1)->setData(f.family(), Qt::EditRole);
|
|
|
|
qsi->child(font_txt_row,1)->setData(f, Qt::UserRole+2);
|
|
|
|
qsi->child(size_txt_row,1)->setData(f.pointSize(), Qt::EditRole);
|
2017-08-03 17:36:08 +00:00
|
|
|
break;
|
2019-03-08 10:27:33 +00:00
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
case color:
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(color_txt_row,1)->setData(deti->color(), Qt::EditRole);
|
|
|
|
qsi->child(color_txt_row,1)->setData(deti->color(), Qt::ForegroundRole);
|
2017-08-03 17:36:08 +00:00
|
|
|
break;
|
|
|
|
}
|
2017-10-29 10:43:34 +00:00
|
|
|
case pos:
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
if(qsi->child(x_txt_row,1))
|
|
|
|
qsi->child(x_txt_row,1)->setData(deti->pos().x(), Qt::EditRole);
|
|
|
|
if(qsi->child(y_txt_row,1))
|
|
|
|
qsi->child(y_txt_row,1)->setData(deti->pos().y(), Qt::EditRole);
|
2017-11-07 18:35:26 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case frame:
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(frame_txt_row,1)->setCheckState(deti->frame()? Qt::Checked : Qt::Unchecked);
|
2017-10-29 10:43:34 +00:00
|
|
|
break;
|
|
|
|
}
|
2017-11-29 19:17:02 +00:00
|
|
|
case rotation:
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
if(qsi->child(rot_txt_row,1))
|
|
|
|
qsi->child(rot_txt_row,1)->setData(deti->rotation(), Qt::EditRole);
|
2017-11-29 19:17:02 +00:00
|
|
|
break;
|
|
|
|
}
|
2018-01-26 18:49:38 +00:00
|
|
|
case textWidth:
|
|
|
|
{
|
|
|
|
qsi->child(width_txt_row,1)->setData(deti->textWidth(), Qt::EditRole);
|
|
|
|
break;
|
|
|
|
}
|
2018-04-05 18:49:28 +00:00
|
|
|
default:break;
|
2017-12-10 14:31:27 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
m_block_dataChanged = false;
|
|
|
|
}
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
void DynamicElementTextModel::updateDataFromGroup(
|
|
|
|
ElementTextItemGroup *group,
|
|
|
|
DynamicElementTextModel::ValueType type)
|
2017-12-10 14:31:27 +00:00
|
|
|
{
|
|
|
|
QStandardItem *qsi = m_groups_list.value(group);
|
|
|
|
if (!qsi)
|
|
|
|
return;
|
|
|
|
|
|
|
|
m_block_dataChanged = true;
|
|
|
|
|
|
|
|
switch (type)
|
|
|
|
{
|
2018-02-01 18:40:12 +00:00
|
|
|
case grpAlignment:
|
2017-12-10 14:31:27 +00:00
|
|
|
{
|
|
|
|
switch (group->alignment())
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
case Qt::AlignLeft: qsi->child(align_grp_row,1)->setData(tr("Gauche"), Qt::DisplayRole); break;
|
|
|
|
case Qt::AlignRight : qsi->child(align_grp_row,1)->setData(tr("Droite"), Qt::DisplayRole); break;
|
|
|
|
case Qt::AlignVCenter : qsi->child(align_grp_row,1)->setData(tr("Centre"), Qt::DisplayRole); break;
|
2017-12-10 14:31:27 +00:00
|
|
|
default: qsi->child(0,1)->setData("", Qt::DisplayRole); break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
2018-06-21 18:44:13 +00:00
|
|
|
case grpPos:
|
|
|
|
{
|
|
|
|
qsi->child(x_grp_row,1)->setData(group->pos().x(), Qt::EditRole);
|
|
|
|
qsi->child(y_grp_row,1)->setData(group->pos().y(), Qt::EditRole);
|
2019-03-08 10:27:33 +00:00
|
|
|
break;
|
2018-06-21 18:44:13 +00:00
|
|
|
}
|
2018-02-01 18:40:12 +00:00
|
|
|
case grpRotation:
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(rot_grp_row,1)->setData(group->rotation(), Qt::EditRole);
|
2017-12-10 14:31:27 +00:00
|
|
|
break;
|
2018-02-01 18:40:12 +00:00
|
|
|
case grpVAdjust:
|
2017-12-13 21:15:05 +00:00
|
|
|
qsi->child(adjust_grp_row,1)->setData(group->verticalAdjustment(), Qt::EditRole);
|
2017-12-10 14:31:27 +00:00
|
|
|
break;
|
2018-02-01 18:40:12 +00:00
|
|
|
case grpName:
|
2017-12-18 20:05:00 +00:00
|
|
|
qsi->setData(group->name(), Qt::DisplayRole);
|
|
|
|
break;
|
2018-02-01 18:40:12 +00:00
|
|
|
case grpHoldBottom:
|
|
|
|
{
|
|
|
|
qsi->child(hold_to_bottom_grp_row,1)->setCheckState(group->holdToBottomPage()? Qt::Checked : Qt::Unchecked);
|
2018-06-21 18:44:13 +00:00
|
|
|
enableGroupRotationAndPos(group);
|
2018-02-01 18:40:12 +00:00
|
|
|
break;
|
|
|
|
}
|
2018-06-24 11:16:37 +00:00
|
|
|
case grpFrame:
|
|
|
|
qsi->child(frame_grp_row, 1)->setCheckState(group->frame()? Qt::Checked : Qt::Unchecked);
|
|
|
|
break;
|
2018-04-05 18:49:28 +00:00
|
|
|
default:break;
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
2017-10-29 10:43:34 +00:00
|
|
|
|
2017-12-10 14:31:27 +00:00
|
|
|
m_block_dataChanged = false;
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***************************************************
|
2020-08-16 11:19:36 +02:00
|
|
|
A little delegate only for add a combobox and a color dialog,
|
|
|
|
for use with the model
|
2017-08-03 17:36:08 +00:00
|
|
|
***************************************************/
|
|
|
|
|
|
|
|
DynamicTextItemDelegate::DynamicTextItemDelegate(QObject *parent) :
|
2020-08-16 14:23:59 +02:00
|
|
|
QStyledItemDelegate(parent)
|
2017-08-03 17:36:08 +00:00
|
|
|
{}
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
QWidget *DynamicTextItemDelegate::createEditor(
|
|
|
|
QWidget *parent,
|
|
|
|
const QStyleOptionViewItem &option,
|
|
|
|
const QModelIndex &index) const
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
|
|
|
switch (index.data(Qt::UserRole+1).toInt())
|
|
|
|
{
|
|
|
|
case DynamicElementTextModel::textFrom:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QComboBox *qcb = new QComboBox(parent);
|
2017-11-06 16:17:48 +00:00
|
|
|
qcb->setObjectName("text_from");
|
2017-08-03 17:36:08 +00:00
|
|
|
qcb->addItem(tr("Texte utilisateur"));
|
|
|
|
qcb->addItem(tr("Information de l'élément"));
|
2017-08-16 13:52:15 +00:00
|
|
|
qcb->addItem(tr("Texte composé"));
|
2017-08-03 17:36:08 +00:00
|
|
|
return qcb;
|
|
|
|
}
|
2017-08-06 10:18:33 +00:00
|
|
|
case DynamicElementTextModel::infoText:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
const DynamicElementTextModel *detm = static_cast<const DynamicElementTextModel *>(index.model());
|
2017-08-06 10:18:33 +00:00
|
|
|
QStandardItem *qsi = detm->itemFromIndex(index);
|
|
|
|
|
|
|
|
if(!qsi)
|
|
|
|
break;
|
|
|
|
|
|
|
|
DynamicElementTextItem *deti = detm->textFromIndex(index);
|
|
|
|
if(!deti)
|
|
|
|
break;
|
|
|
|
|
2022-12-04 08:21:12 -05:00
|
|
|
//We use a QMap because the keys of the map are sorted, then no matter the current local,
|
2017-08-06 10:18:33 +00:00
|
|
|
//the value of the combo box are always alphabetically sorted
|
|
|
|
QMap <QString, QString> info_map;
|
2018-07-19 14:14:31 +00:00
|
|
|
for(const QString& str : availableInfo(deti)) {
|
2020-11-08 19:05:11 +01:00
|
|
|
info_map.insert(QETInformation::translatedInfoKey(str), str);
|
2017-08-06 10:18:33 +00:00
|
|
|
}
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QComboBox *qcb = new QComboBox(parent);
|
2017-08-06 10:18:33 +00:00
|
|
|
qcb->setObjectName("info_text");
|
2018-07-19 14:14:31 +00:00
|
|
|
for (const QString& key : info_map.keys()) {
|
2017-08-06 10:18:33 +00:00
|
|
|
qcb->addItem(key, info_map.value(key));
|
|
|
|
}
|
|
|
|
return qcb;
|
|
|
|
}
|
2017-08-16 13:52:15 +00:00
|
|
|
case DynamicElementTextModel::compositeText:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
const DynamicElementTextModel *detm = static_cast<const DynamicElementTextModel *>(index.model());
|
2017-08-16 13:52:15 +00:00
|
|
|
QStandardItem *qsi = detm->itemFromIndex(index);
|
|
|
|
|
|
|
|
if(!qsi)
|
|
|
|
break;
|
|
|
|
|
|
|
|
DynamicElementTextItem *deti = detm->textFromIndex(index);
|
|
|
|
if(!deti)
|
|
|
|
break;
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
CompositeTextEditDialog *cted = new CompositeTextEditDialog(deti, parent);
|
2017-08-16 13:52:15 +00:00
|
|
|
cted->setObjectName("composite_text");
|
|
|
|
return cted;
|
|
|
|
}
|
2018-05-11 18:14:41 +00:00
|
|
|
case DynamicElementTextModel::txtAlignment:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
const DynamicElementTextModel *detm = static_cast<const DynamicElementTextModel *>(index.model());
|
2018-05-11 18:14:41 +00:00
|
|
|
QStandardItem *qsi = detm->itemFromIndex(index);
|
|
|
|
|
|
|
|
if(!qsi)
|
|
|
|
break;
|
|
|
|
|
|
|
|
DynamicElementTextItem *deti = detm->textFromIndex(index);
|
|
|
|
if(!deti)
|
|
|
|
break;
|
|
|
|
|
2018-05-13 19:03:38 +00:00
|
|
|
AlignmentTextDialog *atd = new AlignmentTextDialog(deti->alignment(), parent);
|
2018-05-11 18:14:41 +00:00
|
|
|
atd->setObjectName("alignment_text");
|
|
|
|
return atd;
|
|
|
|
}
|
2017-11-05 14:33:03 +00:00
|
|
|
case DynamicElementTextModel::size:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QSpinBox *sb = new QSpinBox(parent);
|
2017-11-05 14:33:03 +00:00
|
|
|
sb->setObjectName("font_size");
|
|
|
|
sb->setFrame(false);
|
|
|
|
return sb;
|
|
|
|
}
|
2019-03-08 10:27:33 +00:00
|
|
|
case DynamicElementTextModel::font:
|
|
|
|
{
|
2019-03-20 20:38:58 +00:00
|
|
|
bool ok;
|
|
|
|
QFont font = QFontDialog::getFont(&ok, index.data(Qt::UserRole+2).value<QFont>(), parent);
|
|
|
|
QWidget *w = new QWidget(parent);
|
|
|
|
if (ok)
|
|
|
|
{
|
|
|
|
w->setFont(font);
|
|
|
|
w->setProperty("ok", ok);
|
|
|
|
}
|
|
|
|
w->setObjectName("font_dialog");
|
|
|
|
return w;
|
2019-03-08 10:27:33 +00:00
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
case DynamicElementTextModel::color:
|
|
|
|
{
|
2019-03-08 10:27:33 +00:00
|
|
|
QColorDialog *cd = new QColorDialog(index.data(Qt::EditRole).value<QColor>(), parent);
|
2017-08-06 10:18:33 +00:00
|
|
|
cd->setObjectName("color_dialog");
|
2017-08-03 17:36:08 +00:00
|
|
|
return cd;
|
|
|
|
}
|
2017-10-29 10:43:34 +00:00
|
|
|
case DynamicElementTextModel::pos:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QSpinBox *sb = new QSpinBox(parent);
|
2017-11-05 14:33:03 +00:00
|
|
|
sb->setObjectName("pos_dialog");
|
|
|
|
sb->setRange(-1000,10000);
|
|
|
|
sb->setFrame(false);
|
|
|
|
sb->setSuffix(" px");
|
|
|
|
return sb;
|
2017-10-29 10:43:34 +00:00
|
|
|
}
|
2017-11-29 19:17:02 +00:00
|
|
|
case DynamicElementTextModel::rotation:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QSpinBox *sb = new QSpinBox(parent);
|
2017-11-29 19:17:02 +00:00
|
|
|
sb->setObjectName("rot_spinbox");
|
|
|
|
sb->setRange(0, 359);
|
|
|
|
sb->setWrapping(true);
|
|
|
|
sb->setFrame(false);
|
|
|
|
sb->setSuffix(" °");
|
|
|
|
return sb;
|
|
|
|
}
|
2018-01-26 18:49:38 +00:00
|
|
|
case DynamicElementTextModel::textWidth:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QSpinBox *sb = new QSpinBox(parent);
|
2018-01-26 18:49:38 +00:00
|
|
|
sb->setObjectName("width_spinbox");
|
|
|
|
sb->setRange(-1, 500);
|
|
|
|
sb->setFrame(false);
|
|
|
|
sb->setSuffix(" px");
|
|
|
|
return sb;
|
|
|
|
}
|
2018-02-01 18:40:12 +00:00
|
|
|
case DynamicElementTextModel::grpAlignment:
|
2017-12-10 14:31:27 +00:00
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QComboBox *qcb = new QComboBox(parent);
|
2017-12-10 14:31:27 +00:00
|
|
|
qcb->setFrame(false);
|
|
|
|
qcb->setObjectName("group_alignment");
|
|
|
|
qcb->addItem(tr("Gauche"));
|
|
|
|
qcb->addItem(tr("Centre"));
|
|
|
|
qcb->addItem(tr("Droite"));
|
|
|
|
return qcb;
|
|
|
|
}
|
2018-06-21 18:44:13 +00:00
|
|
|
case DynamicElementTextModel::grpPos:
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QSpinBox *sb = new QSpinBox(parent);
|
2018-06-21 18:44:13 +00:00
|
|
|
sb->setObjectName("group_pos");
|
|
|
|
sb->setRange(-1000,10000);
|
|
|
|
sb->setFrame(false);
|
|
|
|
sb->setSuffix(" px");
|
|
|
|
return sb;
|
|
|
|
}
|
2018-02-01 18:40:12 +00:00
|
|
|
case DynamicElementTextModel::grpRotation:
|
2017-12-10 14:31:27 +00:00
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QSpinBox *sb = new QSpinBox(parent);
|
2017-12-10 14:31:27 +00:00
|
|
|
sb->setObjectName("group_rotation");
|
|
|
|
sb->setRange(0, 359);
|
|
|
|
sb->setWrapping(true);
|
|
|
|
sb->setFrame(false);
|
|
|
|
sb->setSuffix(" °");
|
|
|
|
return sb;
|
|
|
|
}
|
2018-02-01 18:40:12 +00:00
|
|
|
case DynamicElementTextModel::grpVAdjust:
|
2017-12-10 14:31:27 +00:00
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QSpinBox *sb = new QSpinBox(parent);
|
2017-12-10 14:31:27 +00:00
|
|
|
sb->setObjectName("group_v_adjustment");
|
|
|
|
sb->setRange(-20, 20);
|
|
|
|
sb->setFrame(false);
|
|
|
|
sb->setSuffix(" px");
|
|
|
|
return sb;
|
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
return QStyledItemDelegate::createEditor(parent, option, index);
|
|
|
|
}
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
void DynamicTextItemDelegate::setModelData(
|
|
|
|
QWidget *editor,
|
|
|
|
QAbstractItemModel *model,
|
|
|
|
const QModelIndex &index) const
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
|
|
|
if (index.isValid())
|
2017-08-06 10:18:33 +00:00
|
|
|
{
|
2019-03-08 10:27:33 +00:00
|
|
|
if (editor->objectName() == "font_dialog")
|
|
|
|
{
|
|
|
|
if (QStandardItemModel *qsim = dynamic_cast<QStandardItemModel *>(model))
|
|
|
|
{
|
|
|
|
if(QStandardItem *qsi = qsim->itemFromIndex(index))
|
|
|
|
{
|
2019-03-20 20:38:58 +00:00
|
|
|
if (editor->property("ok").toBool() == true)
|
2019-03-08 10:27:33 +00:00
|
|
|
{
|
2019-03-20 20:38:58 +00:00
|
|
|
qsi->setData(editor->font().family(), Qt::EditRole);
|
|
|
|
qsi->setData(editor->font(), Qt::UserRole+2);
|
2019-03-08 10:27:33 +00:00
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(editor->objectName() == "color_dialog")
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
if (QStandardItemModel *qsim = dynamic_cast<QStandardItemModel *>(model))
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2017-08-06 10:18:33 +00:00
|
|
|
if(QStandardItem *qsi = qsim->itemFromIndex(index))
|
2017-08-03 17:36:08 +00:00
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QColorDialog *cd = static_cast<QColorDialog *> (editor);
|
2019-03-08 10:27:33 +00:00
|
|
|
if (cd->result() == QDialog::Accepted)
|
|
|
|
{
|
|
|
|
qsi->setData(cd->selectedColor(), Qt::EditRole);
|
|
|
|
qsi->setData(cd->selectedColor(), Qt::ForegroundRole);
|
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
return;
|
|
|
|
}
|
2017-08-06 10:18:33 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (editor->objectName() == "info_text")
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
if (QStandardItemModel *qsim = dynamic_cast<QStandardItemModel *>(model))
|
2017-08-06 10:18:33 +00:00
|
|
|
{
|
|
|
|
if(QStandardItem *qsi = qsim->itemFromIndex(index))
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QComboBox *cb = static_cast<QComboBox *>(editor);
|
2017-08-06 10:18:33 +00:00
|
|
|
qsi->setData(cb->currentText(), Qt::DisplayRole);
|
|
|
|
qsi->setData(cb->currentData(), Qt::UserRole+2);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
}
|
2017-08-16 13:52:15 +00:00
|
|
|
else if (editor->objectName() == "composite_text")
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
if (QStandardItemModel *qsim = dynamic_cast<QStandardItemModel *>(model))
|
2017-08-16 13:52:15 +00:00
|
|
|
{
|
|
|
|
if(QStandardItem *qsi = qsim->itemFromIndex(index))
|
|
|
|
{
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
CompositeTextEditDialog *cted = static_cast<CompositeTextEditDialog *>(editor);
|
2017-08-16 13:52:15 +00:00
|
|
|
|
|
|
|
QString edited_text = cted->plainText();
|
|
|
|
QString assigned_text;
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
const DynamicElementTextModel *detm = static_cast<const DynamicElementTextModel *>(index.model());
|
2017-08-16 13:52:15 +00:00
|
|
|
DynamicElementTextItem *deti = detm->textFromIndex(index);
|
|
|
|
if(deti)
|
|
|
|
{
|
2017-08-29 14:54:27 +00:00
|
|
|
DiagramContext dc;
|
|
|
|
if(deti->elementUseForInfo())
|
|
|
|
dc = deti->elementUseForInfo()->elementInformations();
|
2017-08-16 13:52:15 +00:00
|
|
|
assigned_text = autonum::AssignVariables::replaceVariable(edited_text, dc);
|
|
|
|
}
|
|
|
|
|
|
|
|
qsi->setData(assigned_text, Qt::DisplayRole);
|
|
|
|
qsi->setData(edited_text, Qt::UserRole+2);
|
|
|
|
return;
|
2018-05-11 18:14:41 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (editor->objectName() == "alignment_text")
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
if(QStandardItemModel *qsim = dynamic_cast<QStandardItemModel *>(model))
|
2018-05-11 18:14:41 +00:00
|
|
|
{
|
|
|
|
if(QStandardItem *qsi = qsim->itemFromIndex(index))
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
AlignmentTextDialog *atd = static_cast<AlignmentTextDialog *>(editor);
|
2018-05-11 18:14:41 +00:00
|
|
|
Qt::Alignment align = atd->alignment();
|
|
|
|
qsi->setData(QVariant::fromValue(align), Qt::UserRole+2);
|
|
|
|
return;
|
2017-08-16 13:52:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-12-10 14:31:27 +00:00
|
|
|
else if (editor->objectName() == "group_alignment")
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
if(QStandardItemModel *qsim = dynamic_cast<QStandardItemModel *>(model))
|
2017-12-10 14:31:27 +00:00
|
|
|
{
|
|
|
|
if(QStandardItem *qsi = qsim->itemFromIndex(index))
|
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QComboBox *cb = static_cast<QComboBox *>(editor);
|
2017-12-10 14:31:27 +00:00
|
|
|
qsi->setData(cb->currentText(), Qt::DisplayRole);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-08-03 17:36:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
QStyledItemDelegate::setModelData(editor, model, index);
|
|
|
|
}
|
2017-11-05 14:33:03 +00:00
|
|
|
|
|
|
|
bool DynamicTextItemDelegate::eventFilter(QObject *object, QEvent *event)
|
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
//This is a bad hack, for change the normal behavior :
|
|
|
|
//in normal behavior,
|
2022-12-04 08:21:12 -05:00
|
|
|
//the value is committed when the spinbox lose focus or enter key is pressed
|
|
|
|
//With this hack the value is committed each time the value change without the need to validate.
|
2020-08-16 14:23:59 +02:00
|
|
|
//then the change is apply in live
|
2017-12-10 14:31:27 +00:00
|
|
|
if(object->objectName() == "pos_dialog" || object->objectName() == "font_size" || object->objectName() == "rot_spinbox" || \
|
2018-06-21 18:44:13 +00:00
|
|
|
object->objectName() == "group_rotation" || object->objectName() == "group_v_adjustment" || object->objectName() == "width_spinbox" ||\
|
|
|
|
object->objectName() == "group_pos")
|
2017-11-05 14:33:03 +00:00
|
|
|
{
|
2017-12-13 21:15:05 +00:00
|
|
|
object->event(event);
|
|
|
|
|
2018-07-30 15:24:29 +00:00
|
|
|
QSpinBox *sb = static_cast<QSpinBox *>(object);
|
2017-12-13 21:15:05 +00:00
|
|
|
switch (event->type()) {
|
|
|
|
case QEvent::KeyPress:
|
|
|
|
emit commitData(sb); break;
|
|
|
|
case QEvent::KeyRelease:
|
|
|
|
emit commitData(sb); break;
|
|
|
|
case QEvent::MouseButtonPress:
|
|
|
|
emit commitData(sb); break;
|
|
|
|
case QEvent::MouseButtonRelease:
|
|
|
|
emit commitData(sb); break;
|
|
|
|
case QEvent::Wheel:
|
|
|
|
emit commitData(sb); break;
|
2018-04-05 18:49:28 +00:00
|
|
|
default:break;
|
2017-12-13 21:15:05 +00:00
|
|
|
}
|
|
|
|
return true;
|
2017-11-05 14:33:03 +00:00
|
|
|
}
|
|
|
|
|
2020-08-16 14:23:59 +02:00
|
|
|
//Like the hack above, change the current index of the combobox,
|
|
|
|
// apply the change immediately, no need to lose focus or press enter.
|
2017-12-13 21:15:05 +00:00
|
|
|
if((object->objectName() == "text_from" || object->objectName() == "info_text" || object->objectName() == "group_alignment") && event->type() == QEvent::FocusIn)
|
2017-11-06 16:17:48 +00:00
|
|
|
{
|
2018-07-30 15:24:29 +00:00
|
|
|
QComboBox *qcb = static_cast<QComboBox *>(object);
|
2017-11-06 16:17:48 +00:00
|
|
|
connect(qcb, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [this,qcb](){emit commitData(qcb);});
|
|
|
|
}
|
|
|
|
|
2017-11-05 14:33:03 +00:00
|
|
|
return QStyledItemDelegate::eventFilter(object, event);
|
|
|
|
}
|
2017-08-06 10:18:33 +00:00
|
|
|
|
|
|
|
/**
|
2020-08-16 11:19:36 +02:00
|
|
|
@brief DynamicTextItemDelegate::availableInfo
|
|
|
|
@param deti
|
|
|
|
@return A list of available info of element
|
|
|
|
*/
|
2020-08-16 14:23:59 +02:00
|
|
|
QStringList DynamicTextItemDelegate::availableInfo(
|
|
|
|
DynamicElementTextItem *deti) const
|
2017-08-06 10:18:33 +00:00
|
|
|
{
|
|
|
|
QStringList qstrl;
|
|
|
|
|
2017-09-13 16:38:16 +00:00
|
|
|
if(deti->parentElement()->linkType() & Element::AllReport) //Special treatment for text owned by a folio report
|
2017-08-06 10:18:33 +00:00
|
|
|
{
|
2020-11-08 19:44:21 +01:00
|
|
|
return QETInformation::folioReportInfoKeys();
|
2017-09-13 16:38:16 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Element *elmt = deti->elementUseForInfo();
|
|
|
|
if(!elmt)
|
|
|
|
return qstrl;
|
|
|
|
|
|
|
|
|
2020-11-14 19:09:40 +01:00
|
|
|
QStringList info_list = QETInformation::elementInfoKeys();
|
2017-09-13 16:38:16 +00:00
|
|
|
info_list.removeAll("formula"); //No need to have formula
|
|
|
|
DiagramContext dc = elmt->elementInformations();
|
|
|
|
|
2018-07-19 14:14:31 +00:00
|
|
|
for(const QString& info : info_list)
|
2017-09-13 16:38:16 +00:00
|
|
|
{
|
|
|
|
if(dc.contains(info))
|
|
|
|
qstrl << info;
|
|
|
|
}
|
2017-08-06 10:18:33 +00:00
|
|
|
}
|
|
|
|
return qstrl;
|
|
|
|
}
|