folio report: add user able to make custom label.

Revamp GUI dialog for new diagram configuration.


git-svn-id: svn+ssh://svn.tuxfamily.org/svnroot/qet/qet/trunk@2749 bfdf4180-ca20-0410-9c96-a3a8aa849046
This commit is contained in:
blacksun
2014-01-18 19:04:39 +00:00
parent 7b83d3dd12
commit e1f9a26f4d
18 changed files with 244 additions and 49 deletions

View File

@@ -24,42 +24,38 @@
#include "bordertitleblock.h"
#include "qeticons.h"
#include "exportpropertieswidget.h"
#include "ui/reportpropertiewidget.h"
/**
Constructeur
@param parent QWidget parent
*/
NewDiagramPage::NewDiagramPage(QWidget *parent) : ConfigPage(parent) {
// dimensions par defaut d'un schema
// main tab widget
QTabWidget *tab_widget = new QTabWidget(this);
// dimensions by default for diagram
bpw = new BorderPropertiesWidget(QETDiagramEditor::defaultBorderProperties());
// proprietes par defaut d'un cartouche
// default titleblock properties
ipw = new TitleBlockPropertiesWidget(QETDiagramEditor::defaultTitleBlockProperties(), true);
QWidget *diagram_widget = new QWidget();
QVBoxLayout *diagram_layout = new QVBoxLayout(diagram_widget);
diagram_layout -> addWidget(bpw);
diagram_layout -> addWidget(ipw);
tab_widget->addTab(diagram_widget, tr("Sch\351ma"));
// proprietes par defaut des conducteurs
// default conductor properties
cpw = new ConductorPropertiesWidget(QETDiagramEditor::defaultConductorProperties());
cpw -> setContentsMargins(0, 0, 0, 0);
tab_widget->addTab(cpw, tr("Conducteur"));
// default propertie of report label
rpw = new ReportPropertieWidget(QETDiagramEditor::defaultReportProperties());
tab_widget->addTab(rpw, ("Report de folio"));
QVBoxLayout *vlayout1 = new QVBoxLayout();
vlayout1->addWidget(tab_widget);
QLabel *title = new QLabel(this -> title());
vlayout1 -> addWidget(title);
QFrame *horiz_line = new QFrame();
horiz_line -> setFrameShape(QFrame::HLine);
vlayout1 -> addWidget(horiz_line);
QHBoxLayout *hlayout1 = new QHBoxLayout();
QVBoxLayout *vlayout2 = new QVBoxLayout();
vlayout2 -> addWidget(bpw);
vlayout2 -> addWidget(ipw);
vlayout2 -> setSpacing(5);
hlayout1 -> addLayout(vlayout2);
hlayout1 -> addWidget(cpw);
vlayout1 -> addLayout(hlayout1);
vlayout1 -> addStretch(1);
hlayout1 -> setAlignment(cpw, Qt::AlignTop);
setLayout(vlayout1);
}
@@ -81,6 +77,9 @@ void NewDiagramPage::applyConf() {
// proprietes par defaut des conducteurs
cpw -> conductorProperties().toSettings(settings, "diagrameditor/defaultconductor");
// default report propertie
rpw->toSettings(settings, "diagrameditor/defaultreport");
}
/// @return l'icone de cette page

View File

@@ -23,6 +23,7 @@ class BorderPropertiesWidget;
class ConductorPropertiesWidget;
class TitleBlockPropertiesWidget;
class ExportPropertiesWidget;
class ReportPropertieWidget;
/**
This configuration page enables users to define the properties of new
@@ -44,10 +45,11 @@ class NewDiagramPage : public ConfigPage {
QIcon icon() const;
// attributes
public:
private:
BorderPropertiesWidget *bpw; ///< Widget to edit default diagram dimensions
TitleBlockPropertiesWidget *ipw; ///< Widget to edit default title block properties
ConductorPropertiesWidget *cpw; ///< Widget to edit default conductor properties
ReportPropertieWidget *rpw;///< Widget to edit default report label
};
/**

View File

@@ -531,7 +531,7 @@ bool Diagram::fromXml(QDomElement &document, QPointF position, bool consider_inf
if (type_id.startsWith("embed://")) element_location.setProject(project_);
int state = 0;
Element *nvel_elmt = ElementFactory::Instance()->createElement(element_location, 0, 0, &state);
Element *nvel_elmt = ElementFactory::Instance()->createElement(element_location, 0, this, &state);
if (state) {
QString debug_message = QString("Diagram::fromXml() : Le chargement de la description de l'element %1 a echoue avec le code d'erreur %2").arg(element_location.path()).arg(state);
qDebug() << qPrintable(debug_message);
@@ -1162,6 +1162,7 @@ QETProject *Diagram::project() const {
*/
void Diagram::setProject(QETProject *project) {
project_ = project;
connect(project_, SIGNAL(reportPropertiesChanged(QString)), this, SIGNAL(reportPropertiesChanged(QString)));
}
/**

View File

@@ -102,6 +102,7 @@ class Diagram : public QGraphicsScene {
virtual void keyReleaseEvent(QKeyEvent *);
public:
QString defaultReportProperties () const {return project_->defaultReportProperties();}
static bool clipboardMayContainDiagram();
bool setNumerotation (NumerotationType, NumerotationContext);
NumerotationContext getNumerotation (NumerotationType) const;
@@ -208,6 +209,7 @@ class Diagram : public QGraphicsScene {
void findElementRequired(const ElementsLocation &);
/// Signal emitted when users wish to edit an element from the diagram
void editElementRequired(const ElementsLocation &);
void reportPropertiesChanged(QString);
};
Q_DECLARE_METATYPE(Diagram *)

View File

@@ -38,6 +38,8 @@ class DiagramPosition {
void setPosition(const QPointF &);
QString toString();
bool isOutOfBounds() const;
unsigned int number()const {return number_;}
QString letter()const {return letter_;}
// attributes
private:

View File

@@ -849,7 +849,7 @@ bool DiagramView::mustIntegrateTitleBlockTemplate(const TitleBlockTemplateLocati
bool DiagramView::addElementAtPos(const ElementsLocation &location, const QPoint &pos) {
// construit une instance de l'element correspondant a l'emplacement
int state;
Element *el = ElementFactory::Instance()->createElement(location, 0, 0, &state);
Element *el = ElementFactory::Instance()->createElement(location, 0, diagram(), &state);
if (state) {
delete el;
return(false);

View File

@@ -6,6 +6,7 @@
#include "diagramcontextwidget.h"
#include "titleblockpropertieswidget.h"
#include <QtGui>
#include "ui/reportpropertiewidget.h"
/**
Constructor
@@ -237,6 +238,12 @@ void ProjectNewDiagramConfigPage::applyProjectConf() {
modified_project = true;
}
QString new_report_prop = report_->ReportProperties();
if (project_->defaultReportProperties() != new_report_prop) {
project_->setDefaultReportProperties(new_report_prop);
modified_project = true;
}
if (modified_project) {
project_ -> setModified(modified_project);
}
@@ -256,29 +263,29 @@ void ProjectNewDiagramConfigPage::initWidgets() {
titleblock_ = new TitleBlockPropertiesWidget(TitleBlockProperties(), true);
conductor_ = new ConductorPropertiesWidget();
conductor_ -> setContentsMargins(0, 0, 0, 0);
report_ = new ReportPropertieWidget("_");
}
/**
Initialize the layout of this page.
*/
void ProjectNewDiagramConfigPage::initLayout() {
// put border properties above title block properties
QVBoxLayout *vlayout2 = new QVBoxLayout();
vlayout2 -> addWidget(border_);
vlayout2 -> addWidget(titleblock_);
vlayout2 -> setSpacing(5);
// main tab widget
QTabWidget *tab_widget = new QTabWidget(this);
// add conductor properties on the right
QHBoxLayout *hlayout1 = new QHBoxLayout();
hlayout1 -> addLayout(vlayout2);
hlayout1 -> addWidget(conductor_);
hlayout1 -> setAlignment(conductor_, Qt::AlignTop);
QWidget *diagram_widget = new QWidget();
QVBoxLayout *diagram_layout = new QVBoxLayout(diagram_widget);
diagram_layout -> addWidget(border_);
diagram_layout -> addWidget(titleblock_);
tab_widget->addTab(diagram_widget, tr("Sch\351ma"));
tab_widget->addTab(conductor_, tr("Conducteur"));
tab_widget->addTab(report_, ("Report de folio"));
// add the informative label above previous widgets
QVBoxLayout *vlayout1 = new QVBoxLayout();
vlayout1 -> addWidget(informative_label_);
vlayout1 -> addLayout(hlayout1);
vlayout1 -> addStretch();
vlayout1->addWidget(tab_widget);
setLayout(vlayout1);
}
@@ -289,6 +296,7 @@ void ProjectNewDiagramConfigPage::readValuesFromProject() {
border_ -> setEditedBorder(project_ -> defaultBorderProperties());
conductor_ -> setConductorProperties(project_ -> defaultConductorProperties());
titleblock_ -> setTitleBlockProperties(project_ -> defaultTitleBlockProperties());
report_->setReportProperties(project_->defaultReportProperties());
}
/**

View File

@@ -8,6 +8,7 @@ class BorderPropertiesWidget;
class TitleBlockPropertiesWidget;
class ConductorPropertiesWidget;
class DiagramContextWidget;
class ReportPropertieWidget;
/**
This class, derived from ConfigPage, aims at providing the basic skeleton
@@ -125,6 +126,7 @@ class ProjectNewDiagramConfigPage : public ProjectConfigPage {
BorderPropertiesWidget *border_;
TitleBlockPropertiesWidget *titleblock_;
ConductorPropertiesWidget *conductor_;
ReportPropertieWidget *report_;
};
#endif

View File

@@ -644,6 +644,7 @@ bool QETDiagramEditor::newProject() {
new_project -> setDefaultBorderProperties(defaultBorderProperties());
new_project -> setDefaultConductorProperties(defaultConductorProperties());
new_project -> setDefaultTitleBlockProperties(defaultTitleBlockProperties());
new_project -> setDefaultReportProperties(defaultReportProperties());
// ajoute un schema au projet
new_project -> addNewDiagram();
@@ -1331,6 +1332,7 @@ void QETDiagramEditor::addProjectView(ProjectView *project_view) {
// affiche la fenetre
if (maximise) project_view -> showMaximized();
else project_view -> show();
slot_updateActions();
}
@@ -1979,3 +1981,12 @@ ExportProperties QETDiagramEditor::defaultPrintProperties() {
return(def);
}
/**
* @brief QETDiagramEditor::defaultReportProperties
* @return default folio report properties
*/
QString QETDiagramEditor::defaultReportProperties() {
QSettings &settings= QETApp::settings();
return(settings.value("diagrameditor/defaultreportlabel", "%f-%l%c").toString());
}

View File

@@ -62,6 +62,7 @@ class QETDiagramEditor : public QETMainWindow {
static ConductorProperties defaultConductorProperties();
static ExportProperties defaultExportProperties();
static ExportProperties defaultPrintProperties();
static QString defaultReportProperties();
protected:
void actions();

View File

@@ -26,6 +26,10 @@ ReportElement::ReportElement(const ElementsLocation &location, QString link_type
texts().at(0)->setNoEditable();
link_type == "next_report"? link_type_=NextReport : link_type_=PreviousReport;
link_type == "next_report"? inverse_report=PreviousReport : inverse_report=NextReport;
if (s) {
label_ = s->defaultReportProperties();
connect(s, SIGNAL(reportPropertiesChanged(QString)), this, SLOT(setLabel(QString)));
}
}
ReportElement::~ReportElement() {
@@ -97,6 +101,16 @@ int ReportElement::linkType() const {
return link_type_;
}
/**
* @brief ReportElement::setLabel
* Set new label and call updatelabel
* @param label new label
*/
void ReportElement::setLabel(QString label) {
label_ = label;
updateLabel();
}
/**
* @brief ReportElement::updateLabel
* Update the displayed label.
@@ -105,8 +119,11 @@ int ReportElement::linkType() const {
void ReportElement::updateLabel() {
if (!connected_elements.isEmpty()){
Element *elmt = connected_elements.at(0);
texts().at(0)->setPlainText(QString ("%1-%2").arg(elmt->diagram()->folioIndex() + 1)
.arg(elmt->diagram() -> convertPosition(elmt -> scenePos()).toString()));
QString label = label_;
label.replace("%f", QString::number(elmt->diagram()->folioIndex()+1));
label.replace("%c", QString::number(elmt->diagram() -> convertPosition(elmt -> scenePos()).number()));
label.replace("%l", elmt->diagram() -> convertPosition(elmt -> scenePos()).letter());
texts().at(0)->setPlainText(label);
} else {
texts().at(0)->setPlainText("_");
}

View File

@@ -40,10 +40,12 @@ class ReportElement : public CustomElement {
private:
int link_type_;
int inverse_report;
QString label_;
signals:
private slots:
void setLabel (QString label);
void updateLabel();
};

View File

@@ -421,6 +421,15 @@ void QETProject::setDefaultConductorProperties(const ConductorProperties &conduc
default_conductor_properties_ = conductor;
}
QString QETProject::defaultReportProperties() const {
return default_report_properties_;
}
void QETProject::setDefaultReportProperties(const QString &properties) {
default_report_properties_ = properties;
emit reportPropertiesChanged(properties);
}
/**
@return un document XML representant le projet
*/
@@ -1074,9 +1083,10 @@ void QETProject::readDefaultPropertiesXml() {
default_border_properties_ = QETDiagramEditor::defaultBorderProperties();
default_titleblock_properties_ = QETDiagramEditor::defaultTitleBlockProperties();
default_conductor_properties_ = QETDiagramEditor::defaultConductorProperties();
default_report_properties_ = QETDiagramEditor::defaultReportProperties();
// lecture des valeurs indiquees dans le projet
QDomElement border_elmt, titleblock_elmt, conductors_elmt;
QDomElement border_elmt, titleblock_elmt, conductors_elmt, report_elmt;
// recherche des elements XML concernant les dimensions, le cartouche et les conducteurs
for (QDomNode child = newdiagrams_elmt.firstChild() ; !child.isNull() ; child = child.nextSibling()) {
@@ -1088,13 +1098,16 @@ void QETProject::readDefaultPropertiesXml() {
titleblock_elmt = child_elmt;
} else if (child_elmt.tagName() == "conductors") {
conductors_elmt = child_elmt;
} else if (child_elmt.tagName() == "report") {
report_elmt = child_elmt;
}
}
// dimensions, cartouche, et conducteurs
// size, titleblock, conductor, report
if (!border_elmt.isNull()) default_border_properties_.fromXml(border_elmt);
if (!titleblock_elmt.isNull()) default_titleblock_properties_.fromXml(titleblock_elmt);
if (!conductors_elmt.isNull()) default_conductor_properties_.fromXml(conductors_elmt);
if (!report_elmt.isNull()) setDefaultReportProperties(report_elmt.attribute("label"));
}
/**
@@ -1122,6 +1135,11 @@ void QETProject::writeDefaultPropertiesXml(QDomElement &xml_element) {
QDomElement conductor_elmt = xml_document.createElement("conductors");
default_conductor_properties_.toXml(conductor_elmt);
xml_element.appendChild(conductor_elmt);
// export default report properties
QDomElement report_elmt = xml_document.createElement("report");
report_elmt.setAttribute("label", defaultReportProperties());
xml_element.appendChild(report_elmt);
}
/**

View File

@@ -95,6 +95,8 @@ class QETProject : public QObject {
void setDefaultTitleBlockProperties(const TitleBlockProperties &);
ConductorProperties defaultConductorProperties() const;
void setDefaultConductorProperties(const ConductorProperties &);
QString defaultReportProperties() const;
void setDefaultReportProperties (const QString &properties);
QDomDocument toXml();
bool close();
QETResult write();
@@ -138,6 +140,7 @@ class QETProject : public QObject {
void elementIntegrated(QETProject *, const ElementsLocation &);
void diagramUsedTemplate(TitleBlockTemplatesCollection *, const QString &);
void readOnlyChanged(QETProject *, bool);
void reportPropertiesChanged(QString);
private slots:
void updateDiagramsFolioData();
@@ -191,6 +194,8 @@ class QETProject : public QObject {
ConductorProperties default_conductor_properties_;
/// Default title block properties for new diagrams created within the project
TitleBlockProperties default_titleblock_properties_;
/// Default report properties
QString default_report_properties_;
/// Embedded title block templates collection
TitleBlockTemplatesProjectCollection titleblocks_;
/// project-wide variables that will be made available to child diagrams

View File

@@ -89,7 +89,7 @@ void FolioReportProperties::buildRadioList() {
void FolioReportProperties::buildUnlinkButton() {
unlink_widget = new QWidget(this);
QHBoxLayout *unlink_layout = new QHBoxLayout(unlink_widget);
QLabel *lb = new QLabel(tr("Ce report est d\351j\340 lier."), unlink_widget);
QLabel *lb = new QLabel(tr("Ce report est d\351j\340 li\351."), unlink_widget);
QPushButton *pb = new QPushButton(tr("D\351lier"), unlink_widget);
connect(pb, SIGNAL(clicked()), this, SLOT(unlinkClicked()));
unlink_layout->addWidget(lb);

View File

@@ -0,0 +1,27 @@
#include "reportpropertiewidget.h"
#include "ui_reportpropertiewidget.h"
ReportPropertieWidget::ReportPropertieWidget(QString value, QWidget *parent) :
QWidget(parent),
ui(new Ui::ReportPropertieWidget)
{
ui->setupUi(this);
ui->line_edit->setText(value);
}
ReportPropertieWidget::~ReportPropertieWidget()
{
delete ui;
}
void ReportPropertieWidget::toSettings(QSettings &settings, const QString &prefix) {
settings.setValue(prefix + "label", ui->line_edit->text());
}
void ReportPropertieWidget::setReportProperties(QString label) {
ui->line_edit->setText(label);
}
QString ReportPropertieWidget::ReportProperties() const {
return ui->line_edit->text();
}

View File

@@ -0,0 +1,27 @@
#ifndef REPORTPROPERTIEWIDGET_H
#define REPORTPROPERTIEWIDGET_H
#include <QWidget>
#include <QSettings>
namespace Ui {
class ReportPropertieWidget;
}
class ReportPropertieWidget : public QWidget
{
Q_OBJECT
public:
explicit ReportPropertieWidget(QString value, QWidget *parent = 0);
~ReportPropertieWidget();
void toSettings (QSettings &settings, const QString &prefix);
void setReportProperties (QString label);
QString ReportProperties () const;
private:
Ui::ReportPropertieWidget *ui;
};
#endif // REPORTPROPERTIEWIDGET_H

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ReportPropertieWidget</class>
<widget class="QWidget" name="ReportPropertieWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="report_label_gb">
<property name="title">
<string>Label de report de folio</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="line_edit"/>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_">
<property name="text">
<string>Vous pouvez définir un label personnalisé pour les reports de folio.
Créer votre propre texte en vous aidant des variables suivantes :
%f : le numéro de folio
%l : le numéro de ligne
%c : le numéro de colonne</string>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>