Add nomenclature dialog : enable option "add new folio and table if needed"

This commit is contained in:
Claveau Joshua
2020-05-24 17:17:17 +02:00
parent 7ea42752a4
commit df26c5b7ed
3 changed files with 72 additions and 30 deletions

View File

@@ -44,39 +44,76 @@ void QetGraphicsTableFactory::createAndAddNomenclature(Diagram *diagram)
if (d->exec()) if (d->exec())
{ {
auto model = new NomenclatureModel(diagram->project(), diagram->project()); auto table_ = newTable(diagram, d.data());
model->query(d->queryStr()); if (d->adjustTableToFolio()) {
model->autoHeaders(); AdjustTableToFolio(table_);
model->setData(model->index(0,0), int(d->tableAlignment()), Qt::TextAlignmentRole); }
model->setData(model->index(0,0), d->tableFont(), Qt::FontRole);
model->setData(model->index(0,0), QETUtils::marginsToString(d->headerMargins()), Qt::UserRole+1);
model->setHeaderData(0, Qt::Horizontal, int(d->headerAlignment()), Qt::TextAlignmentRole);
model->setHeaderData(0, Qt::Horizontal, d->headerFont(), Qt::FontRole);
model->setHeaderData(0, Qt::Horizontal, QETUtils::marginsToString(d->headerMargins()), Qt::UserRole+1);
auto table = new QetGraphicsTableItem();
table->setTableName(d->tableName());
table->setModel(model);
diagram->addItem(table);
table->setPos(50,50);
if (d->adjustTableToFolio()) if (d->addNewTableToNewDiagram() && table_->model()->rowCount() > table_->displayNRow())
{ {
auto drawable_rect = diagram->border_and_titleblock.insideBorderRect(); auto already_displayed_rows = table_->displayNRow();
table->setPos(drawable_rect.topLeft().x() + 20, drawable_rect.topLeft().y() + 20 + table->headerItem()->rect().height()); auto project_ = diagram->project();
auto actual_diagram = diagram;
auto previous_table = table_;
auto size_ = table->size(); int i = 2;
size_.setWidth(int(drawable_rect.width() - 40)); while (already_displayed_rows < table_->model()->rowCount())
//Size must be a multiple of 10, because the table adjust itself by step of 10. {
while (size_.width()%10) { //Add a new diagram after the current one
--size_.rwidth(); } actual_diagram = project_->addNewDiagram(project_->folioIndex(actual_diagram)+1);
table->setSize(size_); table_ = newTable(actual_diagram, d.data());
table_->setTableName(d->tableName() + QString(" %1").arg(i));
//Calcul the maximum row to display to fit the nomenclature into diagram //Set the previous folio of table
auto available_height = drawable_rect.height() - table->pos().y(); table_->setPreviousTable(previous_table);
auto min_row_height = table->minimumRowHeigth(); //Adjust table
table->setDisplayNRow(int(floor(available_height/min_row_height))); //Convert a double to int, but max_row_to_display is already rounded an integer so we assume everything is ok if (d->adjustTableToFolio()) {
AdjustTableToFolio(table_);
}
//Update some variable for the next loop
already_displayed_rows += table_->displayNRow();
previous_table = table_;
++i;
}
} }
} }
} }
QetGraphicsTableItem *QetGraphicsTableFactory::newTable(Diagram *diagram, AddTableDialog *dialog)
{
auto model = new NomenclatureModel(diagram->project(), diagram->project());
model->query(dialog->queryStr());
model->autoHeaders();
model->setData(model->index(0,0), int(dialog->tableAlignment()), Qt::TextAlignmentRole);
model->setData(model->index(0,0), dialog->tableFont(), Qt::FontRole);
model->setData(model->index(0,0), QETUtils::marginsToString(dialog->headerMargins()), Qt::UserRole+1);
model->setHeaderData(0, Qt::Horizontal, int(dialog->headerAlignment()), Qt::TextAlignmentRole);
model->setHeaderData(0, Qt::Horizontal, dialog->headerFont(), Qt::FontRole);
model->setHeaderData(0, Qt::Horizontal, QETUtils::marginsToString(dialog->headerMargins()), Qt::UserRole+1);
auto table = new QetGraphicsTableItem();
table->setTableName(dialog->tableName());
table->setModel(model);
diagram->addItem(table);
table->setPos(50,50);
return table;
}
void QetGraphicsTableFactory::AdjustTableToFolio(QetGraphicsTableItem *table)
{
auto drawable_rect = table->diagram()->border_and_titleblock.insideBorderRect();
table->setPos(drawable_rect.topLeft().x() + 20, drawable_rect.topLeft().y() + 20 + table->headerItem()->rect().height());
auto size_ = table->size();
size_.setWidth(int(drawable_rect.width() - 40));
//Size must be a multiple of 10, because the table adjust itself by step of 10.
while (size_.width()%10) {
--size_.rwidth(); }
table->setSize(size_);
//Calcul the maximum row to display to fit the nomenclature into diagram
auto available_height = drawable_rect.height() - table->pos().y();
auto min_row_height = table->minimumRowHeigth();
table->setDisplayNRow(int(floor(available_height/min_row_height))); //Convert a double to int, but max_row_to_display is already rounded an integer so we assume everything is ok
}

View File

@@ -19,6 +19,8 @@
#define QETGRAPHICSTABLEFACTORY_H #define QETGRAPHICSTABLEFACTORY_H
class Diagram; class Diagram;
class QetGraphicsTableItem;
class AddTableDialog;
/** /**
* @brief The QetGraphicsTableFactory class * @brief The QetGraphicsTableFactory class
@@ -29,6 +31,9 @@ class QetGraphicsTableFactory
QetGraphicsTableFactory(); QetGraphicsTableFactory();
static void createAndAddNomenclature(Diagram *diagram); static void createAndAddNomenclature(Diagram *diagram);
private:
static QetGraphicsTableItem *newTable(Diagram *diagram, AddTableDialog *dialog);
static void AdjustTableToFolio(QetGraphicsTableItem *table);
}; };
#endif // QETGRAPHICSTABLEFACTORY_H #endif // QETGRAPHICSTABLEFACTORY_H

View File

@@ -40,7 +40,7 @@
<item> <item>
<widget class="QCheckBox" name="m_add_table_and_folio"> <widget class="QCheckBox" name="m_add_table_and_folio">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>true</bool>
</property> </property>
<property name="text"> <property name="text">
<string>Ajouter de nouveau folio et tableau si nécessaire.</string> <string>Ajouter de nouveau folio et tableau si nécessaire.</string>