Merge pull request #398 from yanis60/master

improved borders
This commit is contained in:
Alexander Arin 2022-10-26 01:20:33 +03:00 committed by GitHub
commit ba9abc7877
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 4698 additions and 923 deletions

View File

@ -7,13 +7,14 @@
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DesignerSettingManager manager;
QTranslator limeReportTranslator;
QTranslator qtBaseTranslator;
QTranslator qtDesignerTranslator;
QTranslator qtLinguistTranslator;
QTranslator qtDesignerTranslator;
QTranslator qtLinguistTranslator;
QString translationPath = QApplication::applicationDirPath();
translationPath.append("/translations");
Qt::LayoutDirection layoutDirection = QLocale::system().textDirection();
@ -22,12 +23,12 @@ int main(int argc, char *argv[])
if (limeReportTranslator.load("limereport_"+designerTranslation, translationPath)){
qtBaseTranslator.load("qtbase_" + designerTranslation, translationPath);
qtDesignerTranslator.load("designer_"+designerTranslation,translationPath);
qtDesignerTranslator.load("designer_"+designerTranslation,translationPath);
a.installTranslator(&qtBaseTranslator);
a.installTranslator(&qtDesignerTranslator);
a.installTranslator(&qtDesignerTranslator);
a.installTranslator(&limeReportTranslator);
Qt::LayoutDirection layoutDirection = QLocale(manager.getCurrentDefaultLanguage()).textDirection();
a.setLayoutDirection(layoutDirection);
}

View File

@ -0,0 +1,287 @@
#include "borderframeeditor.h"
#include "ui_borderframeeditor.h"
#include <QPainter>
#include <QGraphicsLineItem>
#include <QDebug>
#include <QMouseEvent>
#include "lrbasedesignintf.h"
#include "lrbordereditor.h"
using namespace LimeReport;
BorderFrameEditor::BorderFrameEditor(QWidget *parent)
: QWidget(parent)
, ui(new Ui::BorderFrameEditor)
{
ui->setupUi(this);
scene = new QGraphicsScene(ui->graphicsView);
QRect vRect = rect();
//Draw corder lines
//topLeft
scene->addLine(10,5, 10,10,QPen(Qt::gray));
scene->addLine(5,10, 10,10,QPen(Qt::gray));
//bottomLeft
scene->addLine(10,vRect.bottom() -5, 10,vRect.bottom()-10,QPen(Qt::gray));
scene->addLine(5,vRect.bottom()-10,10,vRect.bottom()-10,QPen(Qt::gray));
//bottomRight
scene->addLine(vRect.right()-10,vRect.bottom() -5,vRect.right()- 10,vRect.bottom()-10,QPen(Qt::gray));
scene->addLine(vRect.right()-5,vRect.bottom()-10,vRect.right()-10,vRect.bottom()-10,QPen(Qt::gray));
//topRight
scene->addLine(vRect.width()-10,5,vRect.width()- 10,10,QPen(Qt::gray));
scene->addLine(vRect.width()-5,10, vRect.width()-10,10,QPen(Qt::gray));
scene->setSceneRect(vRect);
ui->graphicsView->setScene(scene);
QGraphicsSimpleTextItem * io = new QGraphicsSimpleTextItem();
io->setAcceptedMouseButtons(Qt::LeftButton);
io->setPos(scene->sceneRect().center());
io->setText(tr("Text"));
scene->addItem(io);
QRectF bR = io->sceneBoundingRect();
io->setPos( scene->sceneRect().center().x() - bR.width()/2, scene->sceneRect().center().y() - bR.height()/2 );
connect(this,SIGNAL(borderSideClicked(int, bool)),this,SLOT(SlotBorderSideClicked(int,bool)));
}
BorderFrameEditor::~BorderFrameEditor()
{
delete ui;
}
void BorderFrameEditor::setPen(QPen pen)
{
m_pen = pen;
updateBorders();
}
QPen BorderFrameEditor::pen()
{
return m_pen;
}
void BorderFrameEditor::setAllLines()
{
topLine = scene->addLine(QLineF(10,10,rect().width() - 10,10),m_pen);
leftLine = scene->addLine(QLineF(10,10,10,rect().height() - 10),m_pen);
bottomLine = scene->addLine(QLineF(10,rect().bottom() -10,rect().width() - 10
,rect().bottom() - 10),m_pen);
rightLine = scene->addLine(QLineF(rect().width() - 10,10
,rect().width() - 10,rect().height() - 10),m_pen);
}
void BorderFrameEditor::unSetAllLines()
{
if(topLine)
{
scene->removeItem(topLine);
}
if(leftLine)
{
scene->removeItem(leftLine);
}
if(bottomLine)
{
scene->removeItem(bottomLine);
}
if(rightLine)
{
scene->removeItem(rightLine);
}
}
void BorderFrameEditor::mousePressEvent(QMouseEvent *event)
{
if(event->x() >= 10 && event->y() <30)//Draw top border
{
if(!topLine)
{
emit borderSideClicked(1,true);
}
else
{
emit borderSideClicked(1,false);
}
}
if((event->x() >= 10 && event->x() < 30) && (event->y() > 10)) //Draw border left
{
if(!leftLine)
{
emit borderSideClicked(4,true);
}
else
{
emit borderSideClicked(4,false);
}
}
if(event->x() >= 10 && (event->y() >80 && event->y() < rect().bottom())) //Draw bottom border
{
if(!bottomLine)
{
emit borderSideClicked(2,true);
}
else
{
emit borderSideClicked(2,false);
}
}
if((event->x() >= 130 && event->x() < rect().width()) && event->y() > 10) //Draw border right
{
if(!rightLine)
{
emit borderSideClicked(8,true);
}
else
{
emit borderSideClicked(8,false);
}
}
}
void BorderFrameEditor::SlotBorderSideClicked(int side, bool show)
{
switch(side)
{
case BaseDesignIntf::BorderSide::TopLine:
{
if(show)
{
topLine = scene->addLine(QLineF(10,10,rect().width() - 10,10),m_pen);
}
else
{
scene->removeItem(topLine);
topLine = NULL;
}
}break;
case BaseDesignIntf::LeftLine:
{
if(show)
{
leftLine = scene->addLine(QLineF(10,10,10,rect().height() - 10),m_pen);
}
else
{
scene->removeItem(leftLine);
leftLine = NULL;
}
}break;
case BaseDesignIntf::BottomLine:
{
if(show)
{
bottomLine = scene->addLine(QLineF(10,rect().bottom() -10,rect().width() - 10
,rect().bottom() - 10),m_pen);
}
else
{
scene->removeItem(bottomLine);
bottomLine = NULL;
}
}break;
case BaseDesignIntf::RightLine:
{
if(show)
{
rightLine = scene->addLine(QLineF(rect().width() - 10,10
,rect().width() - 10,rect().height() - 10),m_pen);
}
else
{
scene->removeItem(rightLine);
rightLine = NULL;
}
}
}
updateBorders();
}
void BorderFrameEditor::updateBorders()
{
//if a line is set we redraw it
if(topLine)
{
scene->removeItem(topLine);
topLine = scene->addLine(QLineF(10,10,rect().width() - 10,10),m_pen);
}
if(leftLine)
{
scene->removeItem(leftLine);
leftLine = scene->addLine(QLineF(10,10,10,rect().height() - 10),m_pen);
}
if(bottomLine)
{
scene->removeItem(bottomLine);
bottomLine = scene->addLine(QLineF(10,rect().bottom() -10,rect().width() - 10
,rect().bottom() - 10),m_pen);
}
if(rightLine)
{
scene->removeItem(rightLine);
rightLine = scene->addLine(QLineF(rect().width() - 10,10
,rect().width() - 10,rect().height() - 10),m_pen);
}
}

View File

@ -0,0 +1,42 @@
#ifndef WIDGET
#define WIDGET
#include <QWidget>
#include <QGraphicsScene>
#include <QGraphicsLineItem>
#include "lrbasedesignintf.h"
QT_BEGIN_NAMESPACE
namespace Ui { class BorderFrameEditor; }
QT_END_NAMESPACE
class BorderFrameEditor : public QWidget
{
Q_OBJECT
public:
BorderFrameEditor(QWidget *parent = nullptr);
~BorderFrameEditor();
void setPen(QPen pen);
QPen pen();
void setAllLines();
void unSetAllLines();
protected:
void mousePressEvent(QMouseEvent *event);
signals:
void borderSideClicked(int side,bool show);
private slots:
void SlotBorderSideClicked(int side, bool show);
private:
Ui::BorderFrameEditor *ui;
QGraphicsScene *scene;
QGraphicsLineItem *topLine = NULL
,*bottomLine = NULL
,*leftLine = NULL
,*rightLine = NULL;
QPen m_pen;
void updateBorders();
};
#endif // WIDGET

View File

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>BorderFrameEditor</class>
<widget class="QWidget" name="BorderFrameEditor">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>150</width>
<height>100</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>BorderFrameEditor</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGraphicsView" name="graphicsView">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>100</height>
</size>
</property>
<property name="baseSize">
<size>
<width>150</width>
<height>100</height>
</size>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContents</enum>
</property>
<property name="resizeAnchor">
<enum>QGraphicsView::AnchorViewCenter</enum>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -29,16 +29,22 @@
****************************************************************************/
#include "lritemsborderseditorwidget.h"
#include <QAction>
#include "lrbordereditor.h"
namespace LimeReport{
void ItemsBordersEditorWidget::setItemEvent(BaseDesignIntf* item)
{
if(QString(item->metaObject()->className()) == "LimeReport::ShapeItem")
{
setDisabled(true);
return;
}
QVariant borders=item->property("borders");
if (borders.isValid()){
updateValues((BaseDesignIntf::BorderLines)borders.toInt());
setEnabled(true);
}
itm = item;
}
void ItemsBordersEditorWidget::properyChangedEvent(const QString& property, const QVariant& oldValue, const QVariant& newValue)
@ -71,6 +77,18 @@ void ItemsBordersEditorWidget::buttonClicked(bool)
}
void ItemsBordersEditorWidget::editBorderClicked()
{
lrbordereditor be;
be.loadItem(itm);
if(be.exec() == QDialog::Rejected)return;
updateValues(be.borderSides());
itm->setBorderLinesFlags(be.borderSides());
itm->setBorderLineSize(be.border_width());
itm->setBorderStyle((LimeReport::BaseDesignIntf::BorderStyle)be.border_style());
itm->setBorderColor(be.borderColor());
}
void ItemsBordersEditorWidget::initEditor()
{
@ -109,6 +127,11 @@ void ItemsBordersEditorWidget::initEditor()
m_allLines->setIcon(QIcon(":/report/images/allLines"));
connect(m_allLines,SIGNAL(triggered()),this,SLOT(allBordesClicked()));
addAction(m_allLines);
addSeparator();
m_BorderEditor = new QAction(tr("Edit border"),this);
m_BorderEditor->setIcon(QIcon(":/report/images/allLines"));
connect(m_BorderEditor,SIGNAL(triggered()),this,SLOT(editBorderClicked()));
addAction(m_BorderEditor);
setEnabled(false);

View File

@ -49,6 +49,7 @@ protected slots:
virtual void noBordesClicked();
virtual void allBordesClicked();
virtual void buttonClicked(bool);
void editBorderClicked();
protected:
void setItemEvent(BaseDesignIntf *item);
void properyChangedEvent(const QString &property, const QVariant &oldValue, const QVariant &newValue);
@ -62,8 +63,10 @@ private:
QAction* m_topLine;
QAction* m_bottomLine;
QAction* m_allLines;
QAction* m_BorderEditor;
bool m_changing;
int m_borders;
BaseDesignIntf *itm;
};
#ifdef HAVE_REPORT_DESIGNER
@ -78,6 +81,7 @@ protected slots:
void allBordesClicked();
private:
ReportDesignWidget* m_reportEditor;
};
#endif

View File

@ -0,0 +1,182 @@
#include "lrbordereditor.h"
#include "ui_lrbordereditor.h"
#include <QColorDialog>
#include "lrbasedesignintf.h"
lrbordereditor::lrbordereditor(QWidget *parent) :
QDialog(parent),
ui(new Ui::lrbordereditor)
{
ui->setupUi(this);
connect(ui->borderFrame,SIGNAL(borderSideClicked(int, bool)), this, SLOT(checkToolButtons(int, bool)));
}
void lrbordereditor::loadItem(LimeReport::BaseDesignIntf *i)
{
item = i;
if(item->borderLines() & LimeReport::BaseDesignIntf::TopLine)
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine,true);
}
if(item->borderLines() & LimeReport::BaseDesignIntf::LeftLine)
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine,true);
}
if(item->borderLines() & LimeReport::BaseDesignIntf::RightLine)
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine,true);
}
if(item->borderLines() & LimeReport::BaseDesignIntf::BottomLine)
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine,true);
}
QPen pen;
pen.setWidthF(item->borderLineSize());
pen.setColor(item->borderColor());
pen.setStyle((Qt::PenStyle)item->borderStyle());
ui->borderFrame->setPen(pen);
border_color = item->borderColor().name();
ui->listWidget->setCurrentRow((Qt::PenStyle)item->borderStyle());
ui->comboBox->setCurrentText(QString::number(item->borderLineSize()));
borderWidth = ui->comboBox->currentText().toDouble();
borderStyle =ui->listWidget->currentRow();
ui->pushButton->setStyleSheet(QString("#pushButton{background-color:%1;}").arg(border_color));
}
LimeReport::BaseDesignIntf::BorderLines lrbordereditor::borderSides()
{
int borders = 0;
borders += (ui->topLine->isChecked())?LimeReport::BaseDesignIntf::TopLine:0;
borders += (ui->bottomLine->isChecked())?LimeReport::BaseDesignIntf::BottomLine:0;
borders += (ui->leftLine->isChecked())?LimeReport::BaseDesignIntf::LeftLine:0;
borders += (ui->rightLine->isChecked())?LimeReport::BaseDesignIntf::RightLine:0;
return (LimeReport::BaseDesignIntf::BorderLines)borders;
}
LimeReport::BaseDesignIntf::BorderStyle lrbordereditor::border_style()
{
return (LimeReport::BaseDesignIntf::BorderStyle)borderStyle;
}
QString lrbordereditor::borderColor()
{
return border_color;
}
double lrbordereditor::border_width()
{
return borderWidth;
}
lrbordereditor::~lrbordereditor()
{
delete ui;
}
void lrbordereditor::on_listWidget_currentRowChanged(int currentRow)
{
QPen pen = ui->borderFrame->pen();
pen.setStyle((Qt::PenStyle)currentRow);
borderStyle = currentRow;
ui->borderFrame->setPen(pen);
}
void lrbordereditor::on_comboBox_currentTextChanged(const QString &arg1)
{
QPen pen = ui->borderFrame->pen();
pen.setWidthF(arg1.toDouble());
ui->borderFrame->setPen(pen);
borderWidth = arg1.toDouble();
}
void lrbordereditor::on_pushButton_clicked()
{
QColorDialog cd(this);
if(cd.exec() == QDialog::Rejected)return;
QPen pen = ui->borderFrame->pen();
pen.setColor(cd.selectedColor().name());
border_color = pen.color().name();
ui->pushButton->setStyleSheet(QString("#pushButton{background-color:%1;}").arg(border_color));
ui->borderFrame->setPen(pen);
}
void lrbordereditor::on_toolButton_4_clicked()
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine,true);
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine,true);
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine,true);
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine,true);
QPen pen = ui->borderFrame->pen();
ui->borderFrame->setPen(pen);
}
void lrbordereditor::on_noLines_clicked()
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine,false);
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine,false);
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine,false);
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine,false);
}
void lrbordereditor::on_topLine_clicked()
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine,ui->topLine->isChecked());
}
void lrbordereditor::checkToolButtons(int side, bool check)
{
switch(side)
{
case LimeReport::BaseDesignIntf::BorderSide::TopLine:
{
ui->topLine->setChecked(check);
}break;
case LimeReport::BaseDesignIntf::BorderSide::BottomLine:
{
ui->bottomLine->setChecked(check);
}break;
case LimeReport::BaseDesignIntf::BorderSide::LeftLine:
{
ui->leftLine->setChecked(check);
}break;
case LimeReport::BaseDesignIntf::BorderSide::RightLine:
{
ui->rightLine->setChecked(check);
}break;
}
}
void lrbordereditor::on_bottomLine_clicked()
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine,ui->bottomLine->isChecked());
}
void lrbordereditor::on_leftLine_clicked()
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine,ui->leftLine->isChecked());
}
void lrbordereditor::on_toolButton_3_clicked()
{
emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine,ui->rightLine->isChecked());
}

View File

@ -0,0 +1,56 @@
#ifndef LRBORDEREDITOR_H
#define LRBORDEREDITOR_H
#include <QDialog>
#include "lrbasedesignintf.h"
namespace Ui {
class lrbordereditor;
}
class lrbordereditor : public QDialog
{
Q_OBJECT
public:
explicit lrbordereditor(QWidget *parent = nullptr);
void loadItem(LimeReport::BaseDesignIntf *i);
LimeReport::BaseDesignIntf::BorderLines borderSides();
LimeReport::BaseDesignIntf::BorderStyle border_style();
QString borderColor();
double border_width();
~lrbordereditor();
private slots:
void on_listWidget_currentRowChanged(int currentRow);
void on_comboBox_currentTextChanged(const QString &arg1);
void on_pushButton_clicked();
void on_toolButton_4_clicked();
void on_noLines_clicked();
void on_topLine_clicked();
void checkToolButtons(int side, bool check);
void on_bottomLine_clicked();
void on_leftLine_clicked();
void on_toolButton_3_clicked();
private:
Ui::lrbordereditor *ui;
LimeReport::BaseDesignIntf *item;
QString border_color;
int borderStyle = 1;
double borderWidth = 1;
};
#endif // LRBORDEREDITOR_H

View File

@ -0,0 +1,389 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>lrbordereditor</class>
<widget class="QDialog" name="lrbordereditor">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>381</width>
<height>311</height>
</rect>
</property>
<property name="windowTitle">
<string>Edit border</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Presets</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QToolButton" name="noLines">
<property name="text">
<string>No lines</string>
</property>
<property name="icon">
<iconset resource="../report.qrc">
<normaloff>:/report/images/noLines</normaloff>:/report/images/noLines</iconset>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="toolButton_4">
<property name="text">
<string>Outline</string>
</property>
<property name="icon">
<iconset resource="../report.qrc">
<normaloff>:/report/images/allLines</normaloff>:/report/images/allLines</iconset>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextUnderIcon</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Border</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QToolButton" name="topLine">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../report.qrc">
<normaloff>:/report/images/topLine</normaloff>:/report/images/topLine</iconset>
</property>
<property name="checkable">
<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>
<item>
<widget class="QToolButton" name="bottomLine">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../report.qrc">
<normaloff>:/report/images/bottomLine</normaloff>:/report/images/bottomLine</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<widget class="BorderFrameEditor" name="borderFrame" native="true"/>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QToolButton" name="leftLine">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../report.qrc">
<normaloff>:/report/images/leftLine</normaloff>:/report/images/leftLine</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="rightLine">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="../report.qrc">
<normaloff>:/report/images/rightLine</normaloff>:/report/images/rightLine</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<widget class="QGroupBox" name="groupBox_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="title">
<string>Style</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QListWidget" name="listWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>125</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>125</width>
<height>16777215</height>
</size>
</property>
<property name="currentRow">
<number>1</number>
</property>
<item>
<property name="text">
<string>No style</string>
</property>
</item>
<item>
<property name="text">
<string>Solid</string>
</property>
</item>
<item>
<property name="text">
<string>Dash</string>
</property>
</item>
<item>
<property name="text">
<string>Dot</string>
</property>
</item>
<item>
<property name="text">
<string>Dash dot</string>
</property>
</item>
<item>
<property name="text">
<string>Dash dot dot</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Width:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox">
<property name="editable">
<bool>true</bool>
</property>
<property name="currentText">
<string>1</string>
</property>
<property name="currentIndex">
<number>2</number>
</property>
<item>
<property name="text">
<string>0.25</string>
</property>
</item>
<item>
<property name="text">
<string>0.5</string>
</property>
</item>
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>1.5</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
<item>
<property name="text">
<string>3</string>
</property>
</item>
<item>
<property name="text">
<string>4</string>
</property>
</item>
<item>
<property name="text">
<string>5</string>
</property>
</item>
<item>
<property name="text">
<string>6</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Color:</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="styleSheet">
<string notr="true">#pushButton{background-color: black;}</string>
</property>
<property name="text">
<string>Select...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>BorderFrameEditor</class>
<extends>QWidget</extends>
<header>borderframeeditor.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources>
<include location="../report.qrc"/>
<include location="../report.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>lrbordereditor</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>253</x>
<y>255</y>
</hint>
<hint type="destinationlabel">
<x>219</x>
<y>275</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>lrbordereditor</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>258</y>
</hint>
<hint type="destinationlabel">
<x>345</x>
<y>277</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -0,0 +1,104 @@
#include "lrpageeditor.h"
#include "ui_lrpageeditor.h"
#include "lrpagedesignintf.h"
#include <QPushButton>
#include <QPageSize>
lrpageeditor::lrpageeditor(QWidget *parent, LimeReport::PageItemDesignIntf *page) :
QDialog(parent),
ui(new Ui::lrpageeditor)
{
ui->setupUi(this);
m_page = page;
//Paper
QMetaEnum pageSizes = page->metaObject()->property(page->metaObject()->indexOfProperty("pageSize")).enumerator();
for (int i=0;i<pageSizes.keyCount();i++){
ui->format->addItem(pageSizes.key(i));
}
ui->format->setCurrentIndex(m_page->pageSize());
ui->width->setValue(m_page->width() / LimeReport::Const::mmFACTOR);
ui->height->setValue(m_page->height() / LimeReport::Const::mmFACTOR);
ui->portrait->setChecked(m_page->pageOrientation() == LimeReport::PageItemDesignIntf::Portrait);
ui->landscape->setChecked(m_page->pageOrientation() == LimeReport::PageItemDesignIntf::Landscape);
//Margins
ui->marginTop->setValue(m_page->topMargin());
ui->marginRight->setValue(m_page->rightMargin());
ui->marginLeft->setValue(m_page->leftMargin());
ui->marginBottom->setValue(m_page->bottomMargin());
ui->dropPrinterMargins->setChecked(m_page->dropPrinterMargins());
//Other
ui->endlessHeight->setChecked(m_page->endlessHeight());
ui->extendedHeight->setValue(m_page->extendedHeight());
ui->fullPage->setChecked(m_page->fullPage());
}
lrpageeditor::~lrpageeditor()
{
delete ui;
}
void lrpageeditor::applyChanges()
{
m_page->setPageSize(static_cast<LimeReport::PageItemDesignIntf::PageSize>(ui->format->currentIndex()));
m_page->setWidth(ui->width->value()* LimeReport::Const::mmFACTOR);
m_page->setHeight(ui->height->value()* LimeReport::Const::mmFACTOR);
m_page->setPageOrientation(ui->portrait->isChecked()?LimeReport::PageItemDesignIntf::Portrait : LimeReport::PageItemDesignIntf::Landscape);
m_page->setTopMargin(ui->marginTop->value());
m_page->setBottomMargin(ui->marginBottom->value());
m_page->setRightMargin(ui->marginRight->value());
m_page->setLeftMargin(ui->marginLeft->value());
m_page->setDropPrinterMargins(ui->dropPrinterMargins->isChecked());
ui->endlessHeight->setChecked(ui->endlessHeight->isChecked());
m_page->setExtendedHeight(ui->extendedHeight->value());
}
void lrpageeditor::on_buttonBox_accepted()
{
applyChanges();
accept();
}
QSizeF lrpageeditor::getRectByPageSize(const LimeReport::PageItemDesignIntf::PageSize& size)
{
if (size != LimeReport::PageItemDesignIntf::Custom) {
QPrinter printer;
printer.setOutputFormat(QPrinter::PdfFormat);
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1))
printer.setOrientation(ui->portrait->isChecked()?QPrinter::Portrait : QPrinter::Landscape);
printer.setPaperSize((QPrinter::PageSize)size);
return QSizeF(printer.paperSize(QPrinter::Millimeter).width() * 10,
printer.paperSize(QPrinter::Millimeter).height() * 10);
#else
QPageSize pageSize = QPageSize((QPageSize::PageSizeId)size);
qreal width = pageSize.size(QPageSize::Millimeter).width() * 10;
qreal height = pageSize.size(QPageSize::Millimeter).height() * 10;
return QSizeF(pageOrientation() == Portrait ? width : height,
pageOrientation() == Portrait ? height : width);
// printer.setPageOrientation((QPageLayout::Orientation)pageOrientation());
// printer.setPageSize(QPageSize((QPageSize::PageSizeId)size));
// return QSizeF(printer.pageLayout().pageSize().size(QPageSize::Millimeter).width() * 10,
// printer.pageLayout().pageSize().size(QPageSize::Millimeter).height() * 10);
#endif
}
else {
return QSizeF(width(),height());
}
}
void lrpageeditor::on_format_currentIndexChanged(int index)
{
QPageSize ps = *new QPageSize();
if(ui->format->currentText() != "Custom")
{
QSizeF pageSize = getRectByPageSize(static_cast<LimeReport::PageItemDesignIntf::PageSize>(index));
ui->width->setValue(pageSize.width()/10);
ui->height->setValue(pageSize.height()/10);
}
}

View File

@ -0,0 +1,31 @@
#ifndef LRPAGEEDITOR_H
#define LRPAGEEDITOR_H
#include <QDialog>
#include "lrpageitemdesignintf.h"
#include <QPushButton>
namespace Ui {
class lrpageeditor;
}
class lrpageeditor : public QDialog
{
Q_OBJECT
public:
explicit lrpageeditor(QWidget *parent = nullptr,LimeReport::PageItemDesignIntf *page = nullptr);
~lrpageeditor();
private slots:
void on_buttonBox_accepted();
void on_format_currentIndexChanged(int index);
private:
Ui::lrpageeditor *ui;
LimeReport::PageItemDesignIntf* m_page;
void applyChanges();
QSizeF getRectByPageSize(const LimeReport::PageItemDesignIntf::PageSize& size);
};
#endif // LRPAGEEDITOR_H

View File

@ -0,0 +1,341 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>lrpageeditor</class>
<widget class="QDialog" name="lrpageeditor">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>306</width>
<height>322</height>
</rect>
</property>
<property name="windowTitle">
<string>Page setup</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Paper</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Format</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="format"/>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Dimension</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Width:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="width">
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="showGroupSeparator" stdset="0">
<bool>true</bool>
</property>
<property name="suffix">
<string> mm</string>
</property>
<property name="maximum">
<double>99999999999999991611392.000000000000000</double>
</property>
<property name="singleStep">
<double>10.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Height:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="height">
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<property name="showGroupSeparator" stdset="0">
<bool>true</bool>
</property>
<property name="suffix">
<string> mm</string>
</property>
<property name="maximum">
<double>99999999999999991611392.000000000000000</double>
</property>
<property name="singleStep">
<double>10.000000000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Orientation</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QRadioButton" name="portrait">
<property name="text">
<string>Portrait</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="landscape">
<property name="text">
<string>Landscape</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>Margins</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="2">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Bottom:</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Top:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Right:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="marginTop">
<property name="suffix">
<string> mm</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="marginLeft">
<property name="suffix">
<string> mm</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QDoubleSpinBox" name="marginRight">
<property name="suffix">
<string> mm</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Left:</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QDoubleSpinBox" name="marginBottom">
<property name="suffix">
<string> mm</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="4">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0" colspan="4">
<widget class="QCheckBox" name="dropPrinterMargins">
<property name="text">
<string>Drop printer margins</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="4">
<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>
</widget>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Other</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Height options</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QCheckBox" name="endlessHeight">
<property name="text">
<string>Endless Height</string>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="horizontalFrame">
<property name="enabled">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_8">
<property name="text">
<string>Extended Height:</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="extendedHeight">
<property name="maximum">
<double>99999999.000000000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QCheckBox" name="fullPage">
<property name="text">
<string>Full page</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<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>
</widget>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>lrpageeditor</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>325</x>
<y>312</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>endlessHeight</sender>
<signal>clicked(bool)</signal>
<receiver>horizontalFrame</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>60</x>
<y>50</y>
</hint>
<hint type="destinationlabel">
<x>130</x>
<y>85</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -89,6 +89,7 @@ void ShapeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
painter->setBrush(brush);
painter->setBackground(QBrush(Qt::NoBrush));
painter->setOpacity(qreal(opacity())/100);
QRectF rectangleRect = rect().adjusted((lineWidth() / 2),
(lineWidth() / 2),
-(lineWidth() / 2),
@ -114,6 +115,7 @@ void ShapeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
}
break;
}
painter->restore();
ItemDesignIntf::paint(painter,option,widget);

View File

@ -78,12 +78,15 @@ SOURCES += \
$$REPORT_PATH/lrreporttranslation.cpp \
$$REPORT_PATH/exporters/lrpdfexporter.cpp \
$$REPORT_PATH/lraxisdata.cpp \
$$REPORT_PATH/lrpreparedpages.cpp
$$REPORT_PATH/lrpreparedpages.cpp \
$$REPORT_PATH/items/lrpageeditor.cpp \
$$REPORT_PATH/items/borderframeeditor.cpp \
$$REPORT_PATH/items/lrbordereditor.cpp
CONFIG(staticlib) {
SOURCES += $$REPORT_PATH/lrfactoryinitializer.cpp
}
CONFIG(zint) {
SOURCES += $$REPORT_PATH/items/lrbarcodeitem.cpp
}
@ -146,7 +149,7 @@ HEADERS += \
$$REPORT_PATH/lrcollection.h \
$$REPORT_PATH/lrpagedesignintf.h \
$$REPORT_PATH/lrreportengine_p.h \
$$REPORT_PATH/lrdatasourcemanager.h \
$$REPORT_PATH/lrdatasourcemanager.h \
$$REPORT_PATH/lrreportrender.h \
$$REPORT_PATH/lrpreviewreportwindow.h \
$$REPORT_PATH/lrpreviewreportwidget.h \
@ -172,11 +175,14 @@ HEADERS += \
$$REPORT_PATH/lrreporttranslation.h \
$$REPORT_PATH/lrreportdesignwindowintrerface.h \
$$REPORT_PATH/lrexporterintf.h \
$$REPORT_PATH/lrexportersfactory.h \
$$REPORT_PATH/lrexportersfactory.h \
$$REPORT_PATH/exporters/lrpdfexporter.h \
$$REPORT_PATH/lrpreparedpages.h \
$$REPORT_PATH/lraxisdata.h \
$$REPORT_PATH/lrpreparedpagesintf.h
$$REPORT_PATH/lrpreparedpagesintf.h \
$$REPORT_PATH/items/lrpageeditor.h \
$$REPORT_PATH/items/borderframeeditor.h \
$$REPORT_PATH/items/lrbordereditor.h
CONFIG(staticlib) {
HEADERS += $$REPORT_PATH/lrfactoryinitializer.h
@ -199,7 +205,10 @@ FORMS += \
$$REPORT_PATH/items/lrchartitemeditor.ui \
$$REPORT_PATH/items/lrchartaxiseditor.ui \
$$REPORT_PATH/items/lrimageitemeditor.ui \
$$REPORT_PATH/scripteditor/lrscripteditor.ui
$$REPORT_PATH/scripteditor/lrscripteditor.ui \
$$REPORT_PATH/items/lrpageeditor.ui \
$$REPORT_PATH/items/borderframeeditor.ui \
$$REPORT_PATH/items/lrbordereditor.ui
RESOURCES += \
$$REPORT_PATH/report.qrc \

View File

@ -72,16 +72,16 @@ win32 {
}
QMAKE_POST_LINK += $$QMAKE_COPY_DIR \"$${DEST_INCLUDE_DIR}\" \"$${DESTDIR}\"
} else {
EXTRA_FILES ~= s,/,\\,g
BUILD_DIR ~= s,/,\\,g
DEST_DIR = $$DESTDIR/include
DEST_DIR ~= s,/,\\,g
DEST_INCLUDE_DIR ~= s,/,\\,g
EXTRA_FILES ~= s,/,\\,g
BUILD_DIR ~= s,/,\\,g
DEST_DIR = $$DESTDIR/include
DEST_DIR ~= s,/,\\,g
DEST_INCLUDE_DIR ~= s,/,\\,g
for(FILE,EXTRA_FILES) {
QMAKE_POST_LINK += $$QMAKE_COPY \"$$FILE\" \"$${DEST_INCLUDE_DIR}\" $$escape_expand(\\n\\t)
}
QMAKE_POST_LINK += $$QMAKE_COPY_DIR \"$${DEST_INCLUDE_DIR}\" \"$${DEST_DIR}\"
QMAKE_POST_LINK += $$QMAKE_COPY \"$$FILE\" \"$${DEST_INCLUDE_DIR}\" $$escape_expand(\\n\\t)
}
QMAKE_POST_LINK += $$QMAKE_COPY_DIR \"$${DEST_INCLUDE_DIR}\" \"$${DEST_DIR}\"
}
}
@ -139,3 +139,4 @@ CONFIG(build_translations) {
}
#### EN AUTOMATIC TRANSLATIONS

View File

@ -60,7 +60,7 @@ void BandMarker::paint(QPainter *painter, const QStyleOptionGraphicsItem* /**opt
boundingRect().bottomLeft().y()-4,
boundingRect().width(),4), Qt::lightGray
);
qDebug()<<boundingRect().width();
painter->setRenderHint(QPainter::Antialiasing);
qreal size = (boundingRect().width()<boundingRect().height()) ? boundingRect().width() : boundingRect().height();
QRectF r = QRectF(0,0,size,size);
@ -186,7 +186,7 @@ BandDesignIntf::BandDesignIntf(BandsType bandType, const QString &xmlTypeName, Q
m_bandMarker = new BandMarker(this);
m_bandMarker->setColor(Qt::magenta);
m_bandMarker->setHeight(height());
m_bandMarker->setPos(pos().x()-m_bandMarker->width(),pos().y());
m_bandMarker->setPos(pos().x()-m_bandMarker->width() - (itemMode() == ItemModes::PrintMode?boundingRect().width() : 0),pos().y());
if (scene()) scene()->addItem(m_bandMarker);
m_bandNameLabel = new BandNameLabel(this);
@ -818,7 +818,7 @@ BandDesignIntf* BandDesignIntf::findParentBand()
void BandDesignIntf::updateBandMarkerGeometry()
{
if (parentItem() && m_bandMarker){
m_bandMarker->setPos(pos().x()-m_bandMarker->width(),pos().y());
m_bandMarker->setPos(pos().x()-m_bandMarker->width() - (itemMode() == ItemModes::PrintMode?boundingRect().width() : 0),pos().y());
m_bandMarker->setHeight(rect().height());
}
}
@ -839,7 +839,7 @@ QVariant BandDesignIntf::itemChange(QGraphicsItem::GraphicsItemChange change, co
{
if ((change==ItemPositionChange)&&((itemMode()&DesignMode)||(itemMode()&EditMode))){
if (m_bandMarker){
m_bandMarker->setPos((value.toPointF().x()-m_bandMarker->boundingRect().width()),
m_bandMarker->setPos((value.toPointF().x()-m_bandMarker->boundingRect().width() - (itemMode() == ItemModes::PrintMode?boundingRect().width() : 0)),
value.toPointF().y());
}
}
@ -1142,7 +1142,7 @@ void BandDesignIntf::updateItemSize(DataSourceManager* dataManager, RenderPass p
restoreLinks();
snapshotItemsLayout();
arrangeSubItems(pass, dataManager);
arrangeSubItems(pass, dataManager);
if (autoHeight()){
if (!keepTopSpace()) {
qreal minTop = findMinTop() + m_shiftItems;

View File

@ -37,7 +37,7 @@
#include "lrhorizontallayout.h"
#include "serializators/lrstorageintf.h"
#include "serializators/lrxmlreader.h"
#include "lrbordereditor.h"
#include <memory>
#include <QMetaObject>
#include <QGraphicsSceneMouseEvent>
@ -65,6 +65,7 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q
m_BGMode(OpaqueMode),
m_opacity(100),
m_borderLinesFlags(BorderLines()),
m_borderStyle(BorderStyle::Solid),
m_storageTypeName(storageTypeName),
m_itemMode(DesignMode),
m_objectState(ObjectCreated),
@ -86,7 +87,9 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q
m_unitType(Millimeters),
m_itemGeometryLocked(false),
m_isChangingPos(false),
m_isMoveable(false)
m_isMoveable(false),
m_shadow(false)
{
setGeometry(QRectF(0, 0, m_width, m_height));
@ -101,7 +104,7 @@ BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, Q
QRectF BaseDesignIntf::boundingRect() const
{
qreal halfpw = pen().widthF() / 2;
halfpw += 2;
halfpw += 2;
return rect().adjusted(-halfpw, -halfpw, halfpw, halfpw);
}
@ -423,16 +426,19 @@ void BaseDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsItem *o
{
Q_UNUSED(option);
Q_UNUSED(widget);
ppainter->save();
setupPainter(ppainter);
drawBorder(ppainter, rect());
// if (m_joinMarkerOn) { drawMarker(ppainter, Const::JOIN_COLOR);}
// if (isSelected() && !m_joinMarkerOn) {drawMarker(ppainter, Const::SELECTION_COLOR);}
if(m_shadow)
drawShadow(ppainter, rect());
// if (m_joinMarkerOn) { drawMarker(ppainter, Const::JOIN_COLOR);}
// if (isSelected() && !m_joinMarkerOn) {drawMarker(ppainter, Const::SELECTION_COLOR);}
drawResizeZone(ppainter);
ppainter->restore();
// if (m_hovered) ppainter->drawImage(
// QRectF(QPointF(rect().topRight().x()-24, rect().bottomLeft().y()-24),
// QSizeF(24, 24)),QImage(":/items/images/settings.png"));
// if (m_hovered) ppainter->drawImage(
// QRectF(QPointF(rect().topRight().x()-24, rect().bottomLeft().y()-24),
// QSizeF(24, 24)),QImage(":/items/images/settings.png"));
}
QColor calcColor(QColor color){
@ -442,9 +448,9 @@ QColor calcColor(QColor color){
int B = color.blue();
if (0.222*R + 0.707*G + 0.071*B <= 127)
return Qt::white;
return Qt::white;
else
return Qt::black;
return Qt::black;
}
void BaseDesignIntf::prepareRect(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
@ -485,22 +491,22 @@ void BaseDesignIntf::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
case ResizeRight:
case ResizeLeft:
setCursor(Qt::SizeHorCursor);
break;
break;
case ResizeBottom:
case ResizeTop:
setCursor(Qt::SizeVerCursor);
break;
break;
case ResizeRight | ResizeBottom:
case ResizeLeft | ResizeTop:
setCursor(Qt::SizeFDiagCursor);
break;
break;
case ResizeLeft | ResizeBottom:
case ResizeRight | ResizeTop:
setCursor(Qt::SizeBDiagCursor);
break;
break;
default:
setCursor(Qt::ArrowCursor);
break;
break;
}
}
}
@ -510,7 +516,7 @@ void BaseDesignIntf::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
void BaseDesignIntf::invalidateRects(QVector<QRectF *> rects)
{
foreach(QRectF * rect, rects)
scene()->update(mapToScene(*rect).boundingRect());
scene()->update(mapToScene(*rect).boundingRect());
}
void BaseDesignIntf::hoverLeaveEvent(QGraphicsSceneHoverEvent *)
@ -543,8 +549,8 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if (m_resizeDirectionFlags & ResizeLeft) {
if ((event->scenePos().x()) <= (mapToScene(0, 0).x() + (width() - Const::MINIMUM_ITEM_WIDTH)) &&
(width() + (event->lastScenePos().x() - event->scenePos().x()) > Const::MINIMUM_ITEM_WIDTH)
) {
(width() + (event->lastScenePos().x() - event->scenePos().x()) > Const::MINIMUM_ITEM_WIDTH)
) {
qreal posRightCorner = mapToScene(0, 0).x() + width();
qreal posLeftCorner = div(mapToParent(event->pos()).x(), hStep).quot * hStep;
if (posLeftCorner < 0 )
@ -556,15 +562,15 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if (m_resizeDirectionFlags & ResizeRight) {
if ((event->scenePos().x() >= (mapToScene(0, 0).x() + Const::MINIMUM_ITEM_WIDTH)) ||
(event->scenePos().x() >= (mapToScene(0, 0).x() + width()))) {
(event->scenePos().x() >= (mapToScene(0, 0).x() + width()))) {
setWidth(div(event->scenePos().x() - mapToScene(0, 0).x(), hStep).quot * hStep);
}
}
if (m_resizeDirectionFlags & ResizeTop) {
if ((event->scenePos().y()) <= (mapToScene(0, 0).y() + (height() - Const::MINIMUM_ITEM_HEIGHT)) &&
(height() + (event->lastScenePos().y() - event->scenePos().y()) > Const::MINIMUM_ITEM_HEIGHT)
) {
(height() + (event->lastScenePos().y() - event->scenePos().y()) > Const::MINIMUM_ITEM_HEIGHT)
) {
qreal posBottomCorner = mapToScene(0, 0).y() + height();
qreal posTopCorner = div(mapToParent(event->pos()).y(), vStep).quot * vStep;
if (posTopCorner < 0 )
@ -576,8 +582,8 @@ void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if (m_resizeDirectionFlags & ResizeBottom) {
if ((event->scenePos().y() > (mapToScene(0, 0).y() + height())) ||
(event->scenePos().y() > (mapToScene(0, 0).y() + Const::MINIMUM_ITEM_HEIGHT))
) {
(event->scenePos().y() > (mapToScene(0, 0).y() + Const::MINIMUM_ITEM_HEIGHT))
) {
setHeight(div(event->scenePos().y() - mapToScene(0, 0).y(), vStep).quot * vStep);
}
}
@ -653,11 +659,11 @@ Qt::CursorShape BaseDesignIntf::getPossibleCursor(int cursorFlags)
if ((cursorFlags == Fixed) || (scene()->selectedItems().count() > 1)) return Qt::ArrowCursor;
if (((cursorFlags & ResizeRight) && (cursorFlags & ResizeTop)) ||
((cursorFlags & ResizeLeft) && (cursorFlags & ResizeBottom))) {
((cursorFlags & ResizeLeft) && (cursorFlags & ResizeBottom))) {
return Qt::SizeBDiagCursor;
}
if (((cursorFlags & ResizeLeft) && (cursorFlags & ResizeTop)) ||
((cursorFlags & ResizeRight) && (cursorFlags & ResizeBottom))) {
((cursorFlags & ResizeRight) && (cursorFlags & ResizeBottom))) {
return Qt::SizeFDiagCursor;
}
if ((cursorFlags & ResizeLeft) || (cursorFlags & ResizeRight)) { return Qt::SizeHorCursor; }
@ -702,7 +708,7 @@ QPointF BaseDesignIntf::modifyPosForAlignedItem(const QPointF& pos){
case ParentWidthItemAlign:
result.setX(leftBorder);
case DesignedItemAlign:
break;
break;
}
}
return result;
@ -750,7 +756,7 @@ void BaseDesignIntf::updatePossibleDirectionFlags(){
setPossibleResizeDirectionFlags(ResizeBottom|ResizeTop);
case CenterItemAlign:
case DesignedItemAlign:
break;
break;
}
}
@ -764,6 +770,26 @@ void BaseDesignIntf::setIsChangingPos(bool isChangingPos)
m_isChangingPos = isChangingPos;
}
bool BaseDesignIntf::isShapeItem() const
{
return QString(metaObject()->className()) == "LimeReport::ShapeItem";
}
bool BaseDesignIntf::hasShadow()
{
return m_shadow;
}
void BaseDesignIntf::setShadow(bool sh)
{
if (m_shadow != sh){
bool oldValue = m_shadow;
m_shadow = sh;
notify("shadow",oldValue,m_shadow);
update();
}
}
bool BaseDesignIntf::isGeometryLocked() const
{
return m_itemGeometryLocked;
@ -943,14 +969,22 @@ void BaseDesignIntf::emitObjectNamePropertyChanged(const QString &oldName, const
emit propertyObjectNameChanged(oldName,newName);
}
int BaseDesignIntf::borderLineSize() const
qreal BaseDesignIntf::borderLineSize() const
{
return m_borderLineSize;
}
void BaseDesignIntf::setBorderLineSize(int value)
void BaseDesignIntf::setBorderStyle(BorderStyle b)
{
int oldValue = m_borderLineSize;
BorderStyle oldValue = m_borderStyle;
m_borderStyle = b;
update();
notify("borderStyle",(BorderStyle)oldValue,(BorderStyle)b);
}
void BaseDesignIntf::setBorderLineSize(qreal value)
{
qreal oldValue = m_borderLineSize;
m_borderLineSize = value;
update();
notify("borderLineSize",oldValue,value);
@ -980,7 +1014,7 @@ void BaseDesignIntf::moveUp()
void BaseDesignIntf::sizeRight()
{
if ((m_possibleResizeDirectionFlags & ResizeLeft) ||
(m_possibleResizeDirectionFlags & ResizeRight)) {
(m_possibleResizeDirectionFlags & ResizeRight)) {
if (page()) setWidth(width() + page()->horizontalGridStep());
}
}
@ -988,7 +1022,7 @@ void BaseDesignIntf::sizeRight()
void BaseDesignIntf::sizeLeft()
{
if ((m_possibleResizeDirectionFlags & ResizeLeft) ||
(m_possibleResizeDirectionFlags & ResizeRight)) {
(m_possibleResizeDirectionFlags & ResizeRight)) {
if(page()) setWidth(width() - page()->horizontalGridStep());
}
}
@ -996,7 +1030,7 @@ void BaseDesignIntf::sizeLeft()
void BaseDesignIntf::sizeUp()
{
if ((m_possibleResizeDirectionFlags & ResizeTop) ||
(m_possibleResizeDirectionFlags & ResizeBottom)) {
(m_possibleResizeDirectionFlags & ResizeBottom)) {
if (page()) setHeight(height() - page()->verticalGridStep());
}
}
@ -1004,7 +1038,7 @@ void BaseDesignIntf::sizeUp()
void BaseDesignIntf::sizeDown()
{
if ((m_possibleResizeDirectionFlags & ResizeTop) ||
(m_possibleResizeDirectionFlags & ResizeBottom)) {
(m_possibleResizeDirectionFlags & ResizeBottom)) {
if (page()) setHeight(height() + page()->verticalGridStep());
}
}
@ -1026,32 +1060,65 @@ BaseDesignIntf::BorderLines BaseDesignIntf::borderLines() const
return m_borderLinesFlags;
}
void BaseDesignIntf::drawTopLine(QPainter *painter, QRectF rect) const
{
if(isShapeItem())
return;
painter->setPen(borderPen(TopLine));
painter->drawLine(rect.x(), rect.y(), rect.width(), rect.y());
if(borderStyle() == BorderStyle::Doubled)
painter->drawLine(rect.x()+3+m_borderLineSize,
rect.y()+3+m_borderLineSize,
rect.width()-3-m_borderLineSize,
rect.y()+3+m_borderLineSize);
}
void BaseDesignIntf::drawBootomLine(QPainter *painter, QRectF rect) const
{
if(isShapeItem())
return;
painter->setPen(borderPen(BottomLine));
painter->drawLine(rect.x(), rect.height(), rect.width(), rect.height());
if(borderStyle() == BorderStyle::Doubled)
painter->drawLine(rect.x()+3+m_borderLineSize,
rect.height()-3-m_borderLineSize,
rect.width()-3-m_borderLineSize,
rect.height()-3-m_borderLineSize);
}
void BaseDesignIntf::drawRightLine(QPainter *painter, QRectF rect) const
{
if(isShapeItem())
return;
painter->setPen(borderPen(RightLine));
painter->drawLine(rect.width(), rect.y(), rect.width(), rect.height());
if(borderStyle() == BorderStyle::Doubled)
painter->drawLine(rect.width()-3 - m_borderLineSize,
rect.y()+3+m_borderLineSize,
rect.width()-3-m_borderLineSize,
rect.height()-3-m_borderLineSize);
}
void BaseDesignIntf::drawLeftLine(QPainter *painter, QRectF rect) const
{
if(isShapeItem())
return;
painter->setPen(borderPen(LeftLine));
painter->drawLine(rect.x(), rect.y(), rect.x(), rect.height());
if(borderStyle() == BorderStyle::Doubled)
painter->drawLine(rect.x()+3+m_borderLineSize,
rect.y()+3+m_borderLineSize,
rect.x()+3+m_borderLineSize,
rect.height()-3-m_borderLineSize);
}
void BaseDesignIntf::drawDesignModeBorder(QPainter *painter, QRectF rect) const
{
if(isShapeItem())
return;
drawTopLine(painter, rect);
drawBootomLine(painter, rect);
drawLeftLine(painter, rect);
@ -1060,7 +1127,8 @@ void BaseDesignIntf::drawDesignModeBorder(QPainter *painter, QRectF rect) const
void BaseDesignIntf::drawRenderModeBorder(QPainter *painter, QRectF rect) const
{
if(isShapeItem())
return;
if (m_borderLinesFlags & RightLine) drawRightLine(painter, rect);
if (m_borderLinesFlags & LeftLine) drawLeftLine(painter, rect);
if (m_borderLinesFlags & TopLine ) drawTopLine(painter, rect);
@ -1077,6 +1145,32 @@ void BaseDesignIntf::drawBorder(QPainter *painter, QRectF rect) const
painter->restore();
}
void BaseDesignIntf::drawShadow(QPainter *painter, QRectF rect) const
{
qreal shWidth = rect.width()/100;
QRectF rshadow(rect.topRight() + QPointF(0, shWidth),
rect.bottomRight() + QPointF(shWidth, 0));
QLinearGradient rgrad(rshadow.topLeft(), rshadow.topRight());
rgrad.setColorAt(0.0, QColor(0,0,0,255));
rgrad.setColorAt(1.0, QColor(0,0,0,0));
painter->fillRect(rshadow, QBrush(rgrad));
QRectF bshadow(rect.bottomLeft() + QPointF(shWidth, 0),
rect.bottomRight() + QPointF(0, shWidth));
QLinearGradient bgrad(bshadow.topLeft(), bshadow.bottomLeft());
bgrad.setColorAt(0.0, QColor(0,0,0,255));
bgrad.setColorAt(1.0, QColor(0,0,0,0));
painter->fillRect(bshadow, QBrush(bgrad));
QRectF cshadow(rect.bottomRight(),
rect.bottomRight() + QPointF(shWidth, shWidth));
QRadialGradient cgrad(cshadow.topLeft(), shWidth, cshadow.topLeft());
cgrad.setColorAt(0.0, QColor(0,0,0,255));
cgrad.setColorAt(1.0, QColor(0,0,0,0));
painter->fillRect(cshadow, QBrush(cgrad));
}
void BaseDesignIntf::setGeometry(QRectF rect)
{
if (m_rect == rect) return;
@ -1138,8 +1232,11 @@ QPen BaseDesignIntf::borderPen(BorderSide side/*, bool selected*/) const
QPen pen;
if (m_borderLinesFlags & side) {
pen.setColor(m_borderColor);
pen.setStyle(Qt::SolidLine);
pen.setWidth(m_borderLineSize);
if(borderStyle() != BorderStyle::Doubled)
pen.setStyle(static_cast<Qt::PenStyle>(m_borderStyle));
//pen.setCosmetic(true);
pen.setWidthF(m_borderLineSize+1); //To draw with point precision (By default: 2px = 1 pt)
} else {
pen.setColor(Qt::darkGray);
pen.setStyle(Qt::SolidLine);
@ -1235,13 +1332,13 @@ void BaseDesignIntf::drawMarker(QPainter *painter, QColor color) const
painter->drawRect(QRectF(rect().right()-markerSize,rect().top()-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().left()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().left()-markerSize,
rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().right()-markerSize,
rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize,
rect().top()-markerSize,markerSize*2,markerSize*2));
rect().top()-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize,
rect().bottom()-markerSize,markerSize*2,markerSize*2));
rect().bottom()-markerSize,markerSize*2,markerSize*2));
pen.setStyle(Qt::DotLine);
painter->setPen(pen);
@ -1331,7 +1428,7 @@ void BaseDesignIntf::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
{
if (event->button() == Qt::LeftButton &&
((itemMode()&EditMode)||(itemMode()&DesignMode))
) {
) {
showEditorDialog();
}
QGraphicsItem::mouseDoubleClickEvent(event);
@ -1389,6 +1486,7 @@ void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
menu.addSeparator();
QAction* noBordersAction = menu.addAction(QIcon(":/report/images/noLines"), tr("No borders"));
QAction* allBordersAction = menu.addAction(QIcon(":/report/images/allLines"), tr("All borders"));
QAction* editBorderAction = menu.addAction(QIcon(":/report/images/allLines"), tr("Edit borders..."));
preparePopUpMenu(menu);
QAction* a = menu.exec(event->screenPos());
if (a){
@ -1409,6 +1507,16 @@ void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
page->setBorders(BaseDesignIntf::NoLine);
if (a == allBordersAction)
page->setBorders(BaseDesignIntf::AllLines);
if(a == editBorderAction)
{
lrbordereditor be;
be.loadItem(this);
if(be.exec() == QDialog::Rejected)return;
setBorderLinesFlags(be.borderSides());
setBorderLineSize(be.border_width());
setBorderStyle((LimeReport::BaseDesignIntf::BorderStyle)be.border_style());
setBorderColor(be.borderColor());
}
if (a == createHLayout)
page->addHLayout();
if (a == createVLayout)
@ -1442,14 +1550,14 @@ void BaseDesignIntf::setMarginSize(int value)
void BaseDesignIntf::drawResizeZone(QPainter* /*painter*/)
{
// if (m_resizeAreas.count() > 0) {
// painter->save();
// painter->setPen(QPen(Const::RESIZE_ZONE_COLOR));
// (isSelected()) ? painter->setOpacity(Const::SELECTED_RESIZE_ZONE_OPACITY) : painter->setOpacity(Const::RESIZE_ZONE_OPACITY);
// painter->setBrush(QBrush(Qt::green, Qt::SolidPattern));
// foreach(QRectF * resizeArea, m_resizeAreas) painter->drawRect(*resizeArea);
// painter->restore();
// }
// if (m_resizeAreas.count() > 0) {
// painter->save();
// painter->setPen(QPen(Const::RESIZE_ZONE_COLOR));
// (isSelected()) ? painter->setOpacity(Const::SELECTED_RESIZE_ZONE_OPACITY) : painter->setOpacity(Const::RESIZE_ZONE_OPACITY);
// painter->setBrush(QBrush(Qt::green, Qt::SolidPattern));
// foreach(QRectF * resizeArea, m_resizeAreas) painter->drawRect(*resizeArea);
// painter->restore();
// }
}
@ -1680,7 +1788,7 @@ void BaseDesignIntf::notify(const QString &propertyName, const QVariant& oldValu
void BaseDesignIntf::notify(const QVector<QString>& propertyNames)
{
if (!isLoading())
emit propertyesChanged(propertyNames);
emit propertyesChanged(propertyNames);
}
@ -1719,17 +1827,18 @@ void Marker::paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*)
painter->drawRect(rect());
painter->setBrush(color());
painter->setPen(Qt::transparent);
painter->setOpacity(1);
painter->drawRect(QRectF(-markerSize,-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().right()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().right()-markerSize,rect().top()-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().left()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().left()-markerSize,
rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().right()-markerSize,
rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize,
rect().top()-markerSize,markerSize*2,markerSize*2));
rect().top()-markerSize,markerSize*2,markerSize*2));
painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize,
rect().bottom()-markerSize,markerSize*2,markerSize*2));
}

View File

@ -90,14 +90,25 @@ class BaseDesignIntf :
Q_PROPERTY(qreal zOrder READ zValue WRITE setZValueProperty DESIGNABLE false)
Q_PROPERTY(BorderLines borders READ borderLines WRITE setBorderLinesFlags)
Q_PROPERTY(QString parentName READ parentReportItemName WRITE setParentReportItem DESIGNABLE false)
Q_PROPERTY(int borderLineSize READ borderLineSize WRITE setBorderLineSize)
Q_PROPERTY(qreal borderLineSize READ borderLineSize WRITE setBorderLineSize)
Q_PROPERTY(bool isVisible READ isVisible WRITE setItemVisible DESIGNABLE false)
Q_PROPERTY(bool shadow READ hasShadow WRITE setShadow)
Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor)
Q_PROPERTY(bool geometryLocked READ isGeometryLocked WRITE setGeometryLocked)
Q_PROPERTY(BorderStyle borderStyle READ borderStyle WRITE setBorderStyle)
friend class ReportRender;
public:
enum BGMode { TransparentMode, OpaqueMode};
enum BorderStyle { NoStyle = Qt::NoPen,
Solid = Qt::SolidLine,
Dashed = Qt::DashLine,
Dot = Qt::DotLine,
DashDot = Qt::DashDotLine,
DashDotDot = Qt::DashDotDotLine,
Doubled = 7
};
enum BrushStyle{ NoBrush,
@ -147,21 +158,25 @@ public:
#if QT_VERSION >= 0x050500
Q_ENUM(BGMode)
Q_ENUM(BrushStyle)
Q_ENUM(BorderStyle)
Q_ENUM(ResizeFlags)
Q_ENUM(MoveFlags)
Q_ENUM(BorderSide)
Q_ENUM(ObjectState)
Q_ENUM(ItemAlign)
Q_ENUM(UnitType)
#else
Q_ENUMS(BGMode)
Q_ENUMS(BrushStyle)
Q_ENUM(BorderStyle)
Q_ENUMS(ResizeFlags)
Q_ENUMS(MoveFlags)
Q_ENUMS(BorderSide)
Q_ENUMS(ObjectState)
Q_ENUMS(ItemAlign)
Q_ENUMS(UnitType)
#endif
// enum ExpandType {EscapeSymbols, NoEscapeSymbols, ReplaceHTMLSymbols};
Q_DECLARE_FLAGS(BorderLines, BorderSide)
@ -175,6 +190,7 @@ public:
QString parentReportItemName() const;
BrushStyle backgroundBrushStyle() const {return m_backgroundBrushStyle;}
BorderStyle borderStyle() const {return m_borderStyle;}
void setBackgroundBrushStyle(BrushStyle value);
QColor backgroundColor() const {return m_backgroundColor;}
void setBackgroundColor(QColor value);
@ -240,6 +256,7 @@ public:
PageDesignIntf* page();
BorderLines borderLines() const;
QString storageTypeName() const {return m_storageTypeName;}
ReportEnginePrivate *reportEditor();
@ -284,8 +301,9 @@ public:
QString itemTypeName() const;
void setItemTypeName(const QString &itemTypeName);
int borderLineSize() const;
void setBorderLineSize(int value);
qreal borderLineSize() const;
void setBorderStyle(BorderStyle b);
void setBorderLineSize(qreal value);
void showEditorDialog();
ItemAlign itemAlign() const;
virtual void setItemAlign(const ItemAlign &itemAlign);
@ -320,7 +338,9 @@ public:
void setGeometryLocked(bool itemLocked);
bool isChangingPos() const;
void setIsChangingPos(bool isChangingPos);
bool isShapeItem() const;
bool hasShadow();
void setShadow(bool sh);
Q_INVOKABLE QString setItemWidth(qreal width);
Q_INVOKABLE QString setItemHeight(qreal height);
Q_INVOKABLE qreal getItemWidth();
@ -367,7 +387,9 @@ protected:
void drawRightLine(QPainter *painter, QRectF rect) const;
void drawLeftLine(QPainter *painter, QRectF rect) const;
void drawBorder(QPainter* painter, QRectF rect) const;
void drawShadow(QPainter* painter, QRectF rect) const;
void drawDesignModeBorder(QPainter* painter, QRectF rect) const;
void drawRenderModeBorder(QPainter *painter, QRectF rect) const;
void drawResizeZone(QPainter*);
@ -425,7 +447,8 @@ private:
QFont m_font;
QColor m_fontColor;
bool m_fixedPos;
int m_borderLineSize;
qreal m_borderLineSize;
QRectF m_rect;
mutable QRectF m_boundingRect;
@ -434,6 +457,7 @@ private:
BGMode m_BGMode;
int m_opacity;
BorderLines m_borderLinesFlags;
BorderStyle m_borderStyle;
QRectF m_bottomRect;
QRectF m_topRect;
@ -470,6 +494,7 @@ private:
bool m_itemGeometryLocked;
bool m_isChangingPos;
bool m_isMoveable;
bool m_shadow;
signals:
void geometryChanged(QObject* object, QRectF newGeometry, QRectF oldGeometry);

View File

@ -98,6 +98,7 @@ PageDesignIntf::PageDesignIntf(QObject *parent):
updatePageRect();
connect(this, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()));
setBackgroundBrush(QBrush(Qt::white));
}
PageDesignIntf::~PageDesignIntf()
@ -355,7 +356,7 @@ void PageDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
);
}
} else {
if (m_insertMode) m_itemInsertRect->setVisible(false);
if (m_insertMode) m_itemInsertRect->setVisible(false);
}
QGraphicsScene::mouseMoveEvent(event);
@ -750,7 +751,7 @@ void PageDesignIntf::dropEvent(QGraphicsSceneDragDropEvent* event)
bool isVar = event->mimeData()->text().indexOf("variable:")==0;
BaseDesignIntf* item = addReportItem("TextItem",event->scenePos(),QSize(250, 50));
TextItem* ti = dynamic_cast<TextItem*>(item);
QString data = event->mimeData()->text().remove(0,event->mimeData()->text().indexOf(":")+1);
QString data = event->mimeData()->text().remove(0,event->mimeData()->text().indexOf(":")+1);
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1))
if (isVar) data = data.remove(QRegExp(" \\[.*\\]"));
#else
@ -943,7 +944,7 @@ CommandIf::Ptr PageDesignIntf::createChangePosCommand()
newPos.pos = reportItem->pos();
newPoses.append(newPos);
}
}
}
return PosChangedCommand::create(this, m_positionStamp, newPoses);
}
@ -2650,7 +2651,7 @@ bool BandMoveFromToCommand::doIt()
void BandMoveFromToCommand::undoIt()
{
if (page() && page()->pageItem())
page()->pageItem()->moveBandFromTo(reverceFrom, reverceTo);
page()->pageItem()->moveBandFromTo(reverceFrom, reverceTo);
}
}

View File

@ -34,7 +34,7 @@
#include <QGraphicsScene>
#include <QPrinter>
#include <QMenu>
#include <lrpageeditor.h>
namespace LimeReport {
bool bandSortBandLessThenByIndex(const BandDesignIntf *c1, const BandDesignIntf *c2){
@ -98,6 +98,26 @@ void PageItemDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsIte
paintGrid(ppainter, rect);
ppainter->setPen(gridColor());
ppainter->drawRect(boundingRect());
//Draw shadow
qreal shWidth = boundingRect().width()/100;
QRectF rshadow(boundingRect().topRight() + QPointF(0, shWidth),
boundingRect().bottomRight() + QPointF(shWidth, 0));
QLinearGradient rgrad(rshadow.topLeft(), rshadow.topRight());
rgrad.setColorAt(0.0, QColor(0,0,0,255));
rgrad.setColorAt(1.0, QColor(0,0,0,0));
ppainter->fillRect(rshadow, QBrush(rgrad));
QRectF bshadow(boundingRect().bottomLeft() + QPointF(shWidth, 0),
boundingRect().bottomRight() + QPointF(0, shWidth));
QLinearGradient bgrad(bshadow.topLeft(), bshadow.bottomLeft());
bgrad.setColorAt(0.0, QColor(0,0,0,255));
bgrad.setColorAt(1.0, QColor(0,0,0,0));
ppainter->fillRect(bshadow, QBrush(bgrad));
QRectF cshadow(boundingRect().bottomRight(),
boundingRect().bottomRight() + QPointF(shWidth, shWidth));
QRadialGradient cgrad(cshadow.topLeft(), shWidth, cshadow.topLeft());
cgrad.setColorAt(0.0, QColor(0,0,0,255));
cgrad.setColorAt(1.0, QColor(0,0,0,0));
ppainter->fillRect(cshadow, QBrush(cgrad));
if (m_isExtendedInDesignMode){
QPen pen;
pen.setColor(Qt::red);
@ -109,6 +129,7 @@ void PageItemDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsIte
ppainter->restore();
}
if (itemMode() & PreviewMode) {
ppainter->save();
ppainter->fillRect(rect(), Qt::white);
@ -123,6 +144,9 @@ void PageItemDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsIte
ppainter->restore();
BaseDesignIntf::paint(ppainter,option,widget);
}
}
BaseDesignIntf *PageItemDesignIntf::createSameTypeItem(QObject *owner, QGraphicsItem *parent)
@ -746,10 +770,15 @@ void PageItemDesignIntf::initPageSize(const QSizeF& size)
void PageItemDesignIntf::preparePopUpMenu(QMenu &menu)
{
foreach (QAction* action, menu.actions()) {
if (action->text().compare(tr("Paste")) != 0)
action->setVisible(false);
}
menu.addSeparator();
menu.addAction(tr("Edit"));
menu.addSeparator();
@ -797,6 +826,11 @@ void PageItemDesignIntf::processPopUpAction(QAction *action)
if (action->text().compare(tr("Mix with prior page")) == 0){
page()->setPropertyToSelectedItems("mixWithPriorPage",action->isChecked());
}
if(action->text() == tr("Edit"))
{
lrpageeditor pageEdit(NULL,this);
pageEdit.exec();
}
}
void PageItemDesignIntf::initPageSize(const PageItemDesignIntf::PageSize &size)

View File

@ -21,7 +21,7 @@ namespace LimeReport {
bool PreviewReportWidgetPrivate::pageIsVisible(){
QGraphicsView* view = q_ptr->ui->graphicsView;
if ( m_currentPage-1 >= m_reportPages.size() || m_currentPage <= 0 )
if ( m_currentPage-1 >= m_reportPages.size() || m_currentPage <= 0 )
return false;
PageItemDesignIntf::Ptr page = m_reportPages.at(m_currentPage-1);
return page->mapToScene(page->rect()).boundingRect().intersects(
@ -103,6 +103,7 @@ PreviewReportWidget::PreviewReportWidget(ReportEngine *report, QWidget *parent)
d_ptr->m_zoomer = new GraphicsViewZoomer(ui->graphicsView);
connect(d_ptr->m_zoomer, SIGNAL(zoomed(double)), this, SLOT(slotZoomed(double)));
connect(&m_resizeTimer, SIGNAL(timeout()), this, SLOT(resizeDone()));
}
PreviewReportWidget::~PreviewReportWidget()
@ -236,7 +237,7 @@ void PreviewReportWidget::printPages(QPrinter* printer)
}
void PreviewReportWidget::print()
{
{
QPrinterInfo pi;
QPrinter lp(QPrinter::HighResolution);
@ -482,7 +483,7 @@ void PreviewReportWidget::reportEngineDestroyed(QObject *object)
void PreviewReportWidget::slotZoomed(double )
{
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 1))
#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0))
d_ptr->m_scalePercent = ui->graphicsView->matrix().m11()*100;
#else
d_ptr->m_scalePercent = ui->graphicsView->transform().m11()*100;

View File

@ -1119,6 +1119,7 @@ bool PageView::viewportEvent(QEvent *event)
m_verticalRuller->setGeometry(0, y+20, 20, (height - y));
m_verticalRuller->update();
m_horizontalRuller->update();
}
break;
default:

View File

@ -407,7 +407,7 @@ bool ReportEnginePrivate::printReport(QPrinter* printer)
if (printer&&printer->isValid()){
try{
bool designTime = dataManager()->designTime();
dataManager()->setDesignTime(false);
dataManager()->setDesignTime(false);
ReportPages pages = renderToPages();
dataManager()->setDesignTime(designTime);
if (pages.count()>0){
@ -536,7 +536,7 @@ bool ReportEnginePrivate::showPreviewWindow(ReportPages pages, PreviewHints hint
}
void ReportEnginePrivate::previewReport(PreviewHints hints)
{
{
previewReport(0, hints);
}
@ -661,21 +661,21 @@ bool ReportEnginePrivate::slotLoadFromFile(const QString &fileName)
{
EASY_BLOCK("ReportEnginePrivate::slotLoadFromFile")
PreviewReportWindow *currentPreview = qobject_cast<PreviewReportWindow *>(m_activePreview);
if (!QFile::exists(fileName))
{
if ( hasActivePreview() )
{
{
QMessageBox::information( NULL,
tr( "Report File Change" ),
tr( "The report file \"%1\" has changed names or been deleted.\n\nThis preview is no longer valid." ).arg( fileName )
);
clearReport();
currentPreview->close();
}
return false;
}
@ -742,8 +742,8 @@ void ReportEnginePrivate::designReport(bool showModal)
if (designerWindow){
dataManager()->setDesignTime(true);
connect(designerWindow, SIGNAL(destroyed(QObject*)), this, SLOT(slotDesignerWindowDestroyed(QObject*)));
#ifdef Q_OS_WIN
designerWindow->setWindowModality(Qt::ApplicationModal);
#ifdef Q_OS_WIN
designerWindow->setWindowModality(Qt::NonModal);
#endif
if (!showModal){
designerWindow->show();;
@ -856,7 +856,7 @@ bool ReportEnginePrivate::saveToFile(const QString &fileName)
QScopedPointer< ItemsWriterIntf > writer(new XMLWriter());
writer->setPassPhrase(m_passPhrase);
writer->putItem(this);
m_fileName=fn;
m_fileName=fn;
bool saved = writer->saveToFile(fn);
foreach (ConnectionDesc* connection, dataManager()->conections()) {
@ -1419,7 +1419,7 @@ ReportEngine::ReportEngine(QObject *parent)
connect(d, SIGNAL(loadFinished()), this, SIGNAL(loadFinished()));
connect(d, SIGNAL(cleared()), this, SIGNAL(cleared()));
connect(d, SIGNAL(printedToPDF(QString)), this, SIGNAL(printedToPDF(QString)));
connect(d, SIGNAL(getAvailableDesignerLanguages(QList<QLocale::Language>*)),
this, SIGNAL(getAvailableDesignerLanguages(QList<QLocale::Language>*)));
connect(d, SIGNAL(currentDefaultDesignerLanguageChanged(QLocale::Language)),

View File

@ -53,8 +53,8 @@ Q_DECLARE_METATYPE(LimeReport::ScriptEngineManager *)
#ifdef USE_QTSCRIPTENGINE
QScriptValue constructColor(QScriptContext *context, QScriptEngine *engine)
{
QColor color(context->argument(0).toString());
return engine->toScriptValue(color);
QColor color(context->argument(0).toString());
return engine->toScriptValue(color);
}
#endif
@ -71,7 +71,7 @@ ScriptEngineNode::~ScriptEngineNode()
}
ScriptEngineNode*ScriptEngineNode::addChild(const QString& name, const QString& description,
ScriptEngineNode::NodeType type, const QIcon& icon)
ScriptEngineNode::NodeType type, const QIcon& icon)
{
ScriptEngineNode* res = new ScriptEngineNode(name, description, type,this,icon);
m_childs.push_back(res);
@ -218,12 +218,12 @@ ScriptEngineManager::~ScriptEngineManager()
bool ScriptEngineManager::isFunctionExists(const QString &functionName) const
{
return m_functions.contains(functionName);
// foreach (ScriptFunctionDesc desc, m_functions.values()) {
// if (desc.name.compare(functionName,Qt::CaseInsensitive)==0){
// return true;
// }
// }
// return false;
// foreach (ScriptFunctionDesc desc, m_functions.values()) {
// if (desc.name.compare(functionName,Qt::CaseInsensitive)==0){
// return true;
// }
// }
// return false;
}
void ScriptEngineManager::deleteFunction(const QString &functionsName)
@ -244,7 +244,7 @@ bool ScriptEngineManager::addFunction(const JSFunctionDesc &functionDescriber)
scriptEngine()->globalObject().setProperty(
functionDescriber.managerName(),
functionManager
);
);
}
if (functionManager.toQObject() == functionDescriber.manager()){
@ -275,9 +275,9 @@ bool ScriptEngineManager::addFunction(const JSFunctionDesc &functionDescriber)
Q_DECL_DEPRECATED
#endif
bool ScriptEngineManager::addFunction(const QString& name,
QScriptEngine::FunctionSignature function,
const QString& category,
const QString& description)
QScriptEngine::FunctionSignature function,
const QString& category,
const QString& description)
{
if (!isFunctionExists(name)){
ScriptFunctionDesc funct;
@ -310,7 +310,7 @@ bool ScriptEngineManager::addFunction(const QString& name, const QString& script
funct.description = description;
funct.type = ScriptFunctionDesc::Script;
m_functions.insert(name, funct);
m_model->updateModel();
m_model->updateModel();
return true;
} else {
m_lastError = functionValue.toString();
@ -321,11 +321,11 @@ bool ScriptEngineManager::addFunction(const QString& name, const QString& script
QStringList ScriptEngineManager::functionsNames()
{
return m_functions.keys();
// QStringList res;
// foreach(ScriptFunctionDesc func, m_functions){
// res<<func.name;
// }
// return res;
// QStringList res;
// foreach(ScriptFunctionDesc func, m_functions){
// res<<func.name;
// }
// return res;
}
void ScriptEngineManager::setDataManager(DataSourceManager *dataManager){
@ -334,18 +334,18 @@ void ScriptEngineManager::setDataManager(DataSourceManager *dataManager){
if (m_dataManager){
foreach(QString func, m_dataManager->groupFunctionNames()){
JSFunctionDesc describer(
func,
tr("GROUP FUNCTIONS"),
func+"(\""+tr("FieldName")+"\",\""+tr("BandName")+"\")",
LimeReport::Const::FUNCTION_MANAGER_NAME,
m_functionManager,
QString("function %1(fieldName, bandName, pageitem){\
if (typeof pageitem == 'undefined') return %2.calcGroupFunction(\"%1\", fieldName, bandName); \
else return %2.calcGroupFunction(\"%1\", fieldName, bandName, pageitem);}"
).arg(func)
.arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
addFunction(describer);
func,
tr("GROUP FUNCTIONS"),
func+"(\""+tr("FieldName")+"\",\""+tr("BandName")+"\")",
LimeReport::Const::FUNCTION_MANAGER_NAME,
m_functionManager,
QString("function %1(fieldName, bandName, pageitem){\
if (typeof pageitem == 'undefined') return %2.calcGroupFunction(\"%1\", fieldName, bandName); \
else return %2.calcGroupFunction(\"%1\", fieldName, bandName, pageitem);}"
).arg(func)
.arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
addFunction(describer);
}
moveQObjectToScript(new DatasourceFunctions(dataManager), LimeReport::Const::DATAFUNCTIONS_MANAGER_NAME);
}
@ -368,13 +368,13 @@ QString ScriptEngineManager::expandUserVariables(QString context, RenderPass /*
switch (expandType){
case EscapeSymbols:
context.replace(rx.cap(0),escapeSimbols(varValue.toString()));
break;
break;
case NoEscapeSymbols:
context.replace(rx.cap(0),varValue.toString());
break;
break;
case ReplaceHTMLSymbols:
context.replace(rx.cap(0),replaceHTMLSymbols(varValue.toString()));
break;
break;
}
pos=0;
@ -400,53 +400,53 @@ QString ScriptEngineManager::expandUserVariables(QString context, RenderPass /*
#else
QRegularExpression rx = getVariableRegEx();
if (context.contains(rx)){
int pos = 0;
QRegularExpressionMatch match = rx.match(context, pos);
while (match.hasMatch()){
int pos = 0;
QRegularExpressionMatch match = rx.match(context, pos);
while (match.hasMatch()){
QString variable=match.captured(1);
pos = match.capturedEnd();
QString variable=match.captured(1);
pos = match.capturedEnd();
if (dataManager()->containsVariable(variable) ){
try {
if (dataManager()->containsVariable(variable) ){
try {
varValue = dataManager()->variable(variable);
switch (expandType){
case EscapeSymbols:
context.replace(match.captured(0), escapeSimbols(varValue.toString()));
break;
case NoEscapeSymbols:
context.replace(match.captured(0), varValue.toString());
break;
case ReplaceHTMLSymbols:
context.replace(match.captured(0), replaceHTMLSymbols(varValue.toString()));
break;
}
varValue = dataManager()->variable(variable);
switch (expandType){
case EscapeSymbols:
context.replace(match.captured(0), escapeSimbols(varValue.toString()));
break;
case NoEscapeSymbols:
context.replace(match.captured(0), varValue.toString());
break;
case ReplaceHTMLSymbols:
context.replace(match.captured(0), replaceHTMLSymbols(varValue.toString()));
break;
}
pos = 0;
pos = 0;
} catch (ReportError &e){
dataManager()->putError(e.what());
if (!dataManager()->reportSettings() || dataManager()->reportSettings()->suppressAbsentFieldsAndVarsWarnings())
context.replace(match.captured(0), e.what());
else
context.replace(match.captured(0), "");
}
} else {
} catch (ReportError &e){
dataManager()->putError(e.what());
if (!dataManager()->reportSettings() || dataManager()->reportSettings()->suppressAbsentFieldsAndVarsWarnings())
context.replace(match.captured(0), e.what());
else
context.replace(match.captured(0), "");
}
} else {
QString error;
error = tr("Variable %1 not found").arg(variable);
dataManager()->putError(error);
if (!dataManager()->reportSettings() || dataManager()->reportSettings()->suppressAbsentFieldsAndVarsWarnings())
context.replace(match.captured(0), error);
else
context.replace(match.captured(0), "");
}
QString error;
error = tr("Variable %1 not found").arg(variable);
dataManager()->putError(error);
if (!dataManager()->reportSettings() || dataManager()->reportSettings()->suppressAbsentFieldsAndVarsWarnings())
context.replace(match.captured(0), error);
else
context.replace(match.captured(0), "");
}
match = rx.match(context, pos);
}
}
return context;
match = rx.match(context, pos);
}
}
return context;
#endif
}
@ -707,7 +707,12 @@ int ScriptEngineManager::getPageFreeSpace(PageItemDesignIntf* page){
if (page){
int height = 0;
foreach(BandDesignIntf* band, page->bands()){
height += band->height();
if(band->type() == BandDesignIntf::Data)
{
height += band->geometry().height() * m_dataManager->dataSource(band->datasourceName())->model()->rowCount();
}
else height += band->height();
}
return page->height() - height;
} else return -1;
@ -730,7 +735,7 @@ void ScriptEngineManager::clearTableOfContents(){
}
ScriptValueType ScriptEngineManager::moveQObjectToScript(QObject* object, const QString objectName)
{
{
ScriptValueType obj = scriptEngine()->globalObject().property(objectName);
if (!obj.isNull()) delete obj.toQObject();
ScriptValueType result = scriptEngine()->newQObject(object);
@ -775,7 +780,7 @@ bool ScriptEngineManager::createNumberFomatFunction()
" if(typeof(precision)==='undefined') precision=2; "
" if(typeof(locale)==='undefined') locale=\"\"; "
"return %1.numberFormat(value,format,precision,locale);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -791,7 +796,7 @@ bool ScriptEngineManager::createDateFormatFunction(){
fd.setScriptWrapper(QString("function dateFormat(value, format, locale){"
" if(typeof(format)==='undefined') format = \"dd.MM.yyyy\"; "
"return %1.dateFormat(value,format, locale);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -807,7 +812,7 @@ bool ScriptEngineManager::createTimeFormatFunction(){
fd.setScriptWrapper(QString("function timeFormat(value, format){"
" if(typeof(format)==='undefined') format = \"hh:mm\"; "
"return %1.timeFormat(value,format);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -823,7 +828,7 @@ bool ScriptEngineManager::createDateTimeFormatFunction(){
fd.setScriptWrapper(QString("function dateTimeFormat(value, format, locale){"
" if(typeof(format)==='undefined') format = \"dd.MM.yyyy hh:mm\"; "
"return %1.dateTimeFormat(value, format, locale);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -840,13 +845,13 @@ bool ScriptEngineManager::createSectotimeFormatFunction()
fd.setScriptWrapper(QString("function sectotimeFormat(value, format){"
" if(typeof(format)==='undefined') format = \"hh:mm:ss\"; "
"return %1.sectotimeFormat(value,format);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
bool ScriptEngineManager::createDateFunction(){
// addFunction("date",date,"DATE&TIME","date()");
// addFunction("date",date,"DATE&TIME","date()");
JSFunctionDesc fd;
fd.setManager(m_functionManager);
@ -856,14 +861,14 @@ bool ScriptEngineManager::createDateFunction(){
fd.setDescription("date()");
fd.setScriptWrapper(QString("function date(){"
"return %1.date();}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
bool ScriptEngineManager::createNowFunction(){
// addFunction("now",now,"DATE&TIME","now()");
// addFunction("now",now,"DATE&TIME","now()");
JSFunctionDesc fd;
fd.setManager(m_functionManager);
@ -873,13 +878,13 @@ bool ScriptEngineManager::createNowFunction(){
fd.setDescription("now()");
fd.setScriptWrapper(QString("function now(){"
"return %1.now();}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
bool ScriptEngineManager::createCurrencyFormatFunction(){
// addFunction("currencyFormat",currencyFormat,"NUMBER","currencyFormat(\""+tr("Value")+"\",\""+tr("Locale")+"\")");
// addFunction("currencyFormat",currencyFormat,"NUMBER","currencyFormat(\""+tr("Value")+"\",\""+tr("Locale")+"\")");
JSFunctionDesc fd;
fd.setManager(m_functionManager);
@ -890,13 +895,13 @@ bool ScriptEngineManager::createCurrencyFormatFunction(){
fd.setScriptWrapper(QString("function currencyFormat(value, locale){"
" if(typeof(locale)==='undefined') locale = \"\"; "
"return %1.currencyFormat(value,locale);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
bool ScriptEngineManager::createCurrencyUSBasedFormatFunction(){
// addFunction("currencyUSBasedFormat",currencyUSBasedFormat,"NUMBER","currencyUSBasedFormat(\""+tr("Value")+",\""+tr("CurrencySymbol")+"\")");
// addFunction("currencyUSBasedFormat",currencyUSBasedFormat,"NUMBER","currencyUSBasedFormat(\""+tr("Value")+",\""+tr("CurrencySymbol")+"\")");
JSFunctionDesc fd;
fd.setManager(m_functionManager);
@ -907,13 +912,13 @@ bool ScriptEngineManager::createCurrencyUSBasedFormatFunction(){
fd.setScriptWrapper(QString("function currencyUSBasedFormat(value, currencySymbol){"
" if(typeof(currencySymbol)==='undefined') currencySymbol = \"\"; "
"return %1.currencyUSBasedFormat(value,currencySymbol);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
bool ScriptEngineManager::createSetVariableFunction(){
// addFunction("setVariable", setVariable, "GENERAL", "setVariable(\""+tr("Name")+"\",\""+tr("Value")+"\")");
// addFunction("setVariable", setVariable, "GENERAL", "setVariable(\""+tr("Name")+"\",\""+tr("Value")+"\")");
JSFunctionDesc fd;
fd.setManager(m_functionManager);
@ -923,7 +928,7 @@ bool ScriptEngineManager::createSetVariableFunction(){
fd.setDescription("setVariable(\""+tr("Name")+"\",\""+tr("Value")+"\")");
fd.setScriptWrapper(QString("function setVariable(name, value){"
"return %1.setVariable(name,value);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -938,7 +943,7 @@ bool ScriptEngineManager::createGetVariableFunction()
fd.setDescription("getVariable(\""+tr("Name")+"\")");
fd.setScriptWrapper(QString("function getVariable(name){"
"return %1.getVariable(name);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -953,7 +958,7 @@ bool ScriptEngineManager::createGetFieldFunction()
fd.setDescription("getField(\""+tr("Name")+"\")");
fd.setScriptWrapper(QString("function getField(name){"
"return %1.getField(name);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -969,10 +974,10 @@ bool ScriptEngineManager::createGetFieldByKeyFunction()
tr("ValueField")+"\",\""+
tr("KeyField")+"\", \""+
tr("KeyFieldValue")+"\")"
);
);
fd.setScriptWrapper(QString("function getFieldByKeyField(datasource, valueFieldName, keyFieldName, keyValue){"
"return %1.getFieldByKeyField(datasource, valueFieldName, keyFieldName, keyValue);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -986,10 +991,10 @@ bool ScriptEngineManager::createGetFieldByRowIndex()
fd.setName("getFieldByRowIndex");
fd.setDescription("getFieldByRowIndex(\""+tr("FieldName")+"\", \""+
tr("RowIndex")+"\")"
);
);
fd.setScriptWrapper(QString("function getFieldByRowIndex(fieldName, rowIndex){"
"return %1.getFieldByRowIndex(fieldName, rowIndex);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -1004,7 +1009,7 @@ bool ScriptEngineManager::createAddBookmarkFunction()
fd.setDescription("addBookmark(\""+tr("Unique identifier")+" \""+tr("Content")+"\")");
fd.setScriptWrapper(QString("function addBookmark(uniqKey, content){"
"return %1.addBookmark(uniqKey, content);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -1019,7 +1024,7 @@ bool ScriptEngineManager::createFindPageIndexByBookmark()
fd.setDescription("findPageIndexByBookmark(\""+tr("Unique identifier")+"\")");
fd.setScriptWrapper(QString("function findPageIndexByBookmark(uniqKey){"
"return %1.findPageIndexByBookmark(uniqKey);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -1034,7 +1039,7 @@ bool ScriptEngineManager::createAddTableOfContentsItemFunction()
fd.setDescription("addTableOfContentsItem(\""+tr("Unique identifier")+" \""+tr("Content")+"\", \""+tr("Indent")+"\")");
fd.setScriptWrapper(QString("function addTableOfContentsItem(uniqKey, content, indent){"
"return %1.addTableOfContentsItem(uniqKey, content, indent);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -1049,7 +1054,7 @@ bool ScriptEngineManager::createClearTableOfContentsFunction()
fd.setDescription("clearTableOfContents()");
fd.setScriptWrapper(QString("function clearTableOfContents(){"
"return %1.clearTableOfContents();}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -1064,7 +1069,7 @@ bool ScriptEngineManager::createReopenDatasourceFunction()
fd.setDescription("reopenDatasource(\""+tr("datasourceName")+"\")");
fd.setScriptWrapper(QString("function reopenDatasource(datasourceName){"
"return %1.reopenDatasource(datasourceName);}"
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
).arg(LimeReport::Const::FUNCTION_MANAGER_NAME)
);
return addFunction(fd);
}
@ -1077,7 +1082,7 @@ ScriptEngineManager::ScriptEngineManager()
m_functionManager->setScriptEngineManager(this);
#ifdef USE_QTSCRIPTENGINE
m_scriptEngine->setDefaultPrototype(qMetaTypeId<QComboBox*>(),
m_scriptEngine->newQObject(new ComboBoxPrototype()));
m_scriptEngine->newQObject(new ComboBoxPrototype()));
#endif
createLineFunction();
createNumberFomatFunction();
@ -1130,7 +1135,7 @@ bool ScriptExtractor::parse(int &curPos, const State& state, ScriptNode::Ptr scr
return true;
} else {
if (m_context[curPos]=='{')
extractBracket(curPos, scriptNode);
extractBracket(curPos, scriptNode);
}
case None:
if (m_context[curPos]=='$'){
@ -1535,16 +1540,16 @@ void ScriptEngineContext::qobjectToScript(const QString& name, QObject *item)
{
ScriptEngineType* engine = ScriptEngineManager::instance().scriptEngine();
#ifdef USE_QJSENGINE
ScriptValueType sItem = getJSValue(*engine, item);
engine->globalObject().setProperty(name, sItem);
ScriptValueType sItem = getJSValue(*engine, item);
engine->globalObject().setProperty(name, sItem);
#else
ScriptValueType sItem = engine->globalObject().property(name);
if (sItem.isValid()){
engine->newQObject(sItem, item);
} else {
sItem = engine->newQObject(item);
engine->globalObject().setProperty(name,sItem);
}
ScriptValueType sItem = engine->globalObject().property(name);
if (sItem.isValid()){
engine->newQObject(sItem, item);
} else {
sItem = engine->newQObject(item);
engine->globalObject().setProperty(name,sItem);
}
#endif
}
@ -1587,17 +1592,17 @@ bool ScriptEngineContext::runInitScript(){
#ifdef USE_QJSENGINE
if (res.isError()){
QMessageBox::critical(0,tr("Error"),
QString("Line %1: %2 ").arg(res.property("lineNumber").toString())
.arg(res.toString())
);
QString("Line %1: %2 ").arg(res.property("lineNumber").toString())
.arg(res.toString())
);
return false;
}
#else
if (engine->hasUncaughtException()) {
QMessageBox::critical(0,tr("Error"),
QString("Line %1: %2 ").arg(engine->uncaughtExceptionLineNumber())
.arg(engine->uncaughtException().toString())
);
QString("Line %1: %2 ").arg(engine->uncaughtExceptionLineNumber())
.arg(engine->uncaughtException().toString())
);
return false;
}
#endif
@ -1999,28 +2004,28 @@ void TableOfContents::slotOneSlotDS(CallbackInfo info, QVariant& data)
columns << "Content" << "Page number" << "Content Key";
switch (info.dataType) {
case LimeReport::CallbackInfo::RowCount:
data = m_tableOfContents.count();
break;
case LimeReport::CallbackInfo::ColumnCount:
data = columns.size();
break;
case LimeReport::CallbackInfo::ColumnHeaderData: {
data = columns.at(info.index);
break;
case LimeReport::CallbackInfo::RowCount:
data = m_tableOfContents.count();
break;
case LimeReport::CallbackInfo::ColumnCount:
data = columns.size();
break;
case LimeReport::CallbackInfo::ColumnHeaderData: {
data = columns.at(info.index);
break;
}
case LimeReport::CallbackInfo::ColumnData:
if (info.index < m_tableOfContents.count()){
ContentItem* item = m_tableOfContents.at(info.index);
if (info.columnName.compare("Content",Qt::CaseInsensitive) == 0)
data = item->content.rightJustified(item->indent+item->content.size());
if (info.columnName.compare("Content Key",Qt::CaseInsensitive) == 0)
data = item->uniqKey;
if (info.columnName.compare("Page number",Qt::CaseInsensitive) == 0)
data = QString::number(item->pageNumber);
}
case LimeReport::CallbackInfo::ColumnData:
if (info.index < m_tableOfContents.count()){
ContentItem* item = m_tableOfContents.at(info.index);
if (info.columnName.compare("Content",Qt::CaseInsensitive) == 0)
data = item->content.rightJustified(item->indent+item->content.size());
if (info.columnName.compare("Content Key",Qt::CaseInsensitive) == 0)
data = item->uniqKey;
if (info.columnName.compare("Page number",Qt::CaseInsensitive) == 0)
data = QString::number(item->pageNumber);
}
break;
default: break;
break;
default: break;
}
}
@ -2072,6 +2077,13 @@ bool DatasourceFunctions::isEOF(const QString &datasourceName)
return true;
}
int DatasourceFunctions::rowCount(const QString &datasourceName)
{
if (m_dataManager && m_dataManager->dataSource(datasourceName))
return m_dataManager->dataSource(datasourceName)->model()->rowCount();
return 0;
}
bool DatasourceFunctions::invalidate(const QString& datasourceName)
{
if (m_dataManager && m_dataManager->dataSource(datasourceName)){

View File

@ -209,7 +209,7 @@ public:
bool hasChanges(){ return m_hasChanges;}
ReportPages* reportPages() const;
void setReportPages(ReportPages* value);
#ifdef HAVE_UI_LOADER
#ifdef HAVE_UI_LOADER
signals:
void dialogNameChanged(QString dialogName);
void dialogDeleted(QString dialogName);
@ -337,6 +337,7 @@ public:
Q_INVOKABLE bool next(const QString& datasourceName);
Q_INVOKABLE bool prior(const QString& datasourceName);
Q_INVOKABLE bool isEOF(const QString& datasourceName);
Q_INVOKABLE int rowCount(const QString& datasourceName);
Q_INVOKABLE bool invalidate(const QString& datasourceName);
Q_INVOKABLE QObject *createTableBuilder(QObject *horizontalLayout);
private:
@ -445,7 +446,7 @@ private:
};
class ScriptEngineManager : public QObject, public Singleton<ScriptEngineManager>, public IScriptEngineManager
{
{
Q_OBJECT
public:
friend class Singleton<ScriptEngineManager>;

View File

@ -8,6 +8,60 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>BorderFrameEditor</name>
<message>
<source>BorderFrameEditor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Text</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChartAxisEditor</name>
<message>
<source>Axis editor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reverse direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable scale calculation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Step</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Maximum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">إلغاء الأمر</translation>
</message>
<message>
<source>Ok</source>
<translation type="unfinished">موافق</translation>
</message>
</context>
<context>
<name>ChartItemEditor</name>
<message>
@ -54,6 +108,10 @@
<source>Series name</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X data field</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ImageItemEditor</name>
@ -156,22 +214,6 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Report engine for &lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt; framework&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Official web site : &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;This library 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.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Copyright 2015 Arin Alexander. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;(c) 2015 Arin Alexander arin_a@bk.ru&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a name=&quot;SEC1&quot;&gt;&lt;/a&gt;&lt;span style=&quot; font-family:&apos;sans-serif&apos;; font-weight:600;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot; font-family:&apos;sans-serif&apos;; font-weight:600;&quot;&gt;NU LESSER GENERAL PUBLIC LICENSE&lt;/span&gt;&lt;/p&gt;
@ -284,6 +326,22 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:19px; margin-bottom:19px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;sans-serif&apos;;&quot;&gt;That&apos;s all there is to it!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Report engine for &lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt; framework&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Official web site : &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;This library 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.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Copyright 2021 Arin Alexander. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::AlignmentPropItem</name>
@ -457,6 +515,10 @@ p, li { white-space: pre-wrap; }
<source>Create Vertical Layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit borders...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::ConnectionDesc</name>
@ -1241,6 +1303,10 @@ p, li { white-space: pre-wrap; }
<source>All borders</source>
<translation>محاط بإطار</translation>
</message>
<message>
<source>Edit border</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::MasterDetailProxyModel</name>
@ -1333,6 +1399,14 @@ p, li { white-space: pre-wrap; }
<source>Set page size to printer</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Mix with prior page</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit</source>
<translation type="unfinished">تحرير</translation>
</message>
</context>
<context>
<name>LimeReport::PreviewReportWidget</name>
@ -2029,6 +2103,38 @@ p, li { white-space: pre-wrap; }
<source>removeGap</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>xAxisField</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>seriesLineWidth</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>drawPoints</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>dropPrinterMargins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>notPrintIfEmpty</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>gridChartLines</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>horizontalAxisOnTop</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>mixWithPriorPage</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::RectPropItem</name>
@ -2933,10 +3039,6 @@ This preview is no longer valid.</source>
<source>Ctrl+Return</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Esc</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::TranslationEditor</name>
@ -3274,5 +3376,215 @@ This preview is no longer valid.</source>
<source>Series</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>lrbordereditor</name>
<message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No style</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Solid</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Presets</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No lines</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outline</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Border</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit border</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0.25</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0.5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>1.5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>4</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>6</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash dot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash dot dot</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>lrpageeditor</name>
<message>
<source>Paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Format</source>
<translation type="unfinished">الصيغة</translation>
</message>
<message>
<source>Dimension</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Portrait</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Landscape</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Margins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bottom:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Top:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Drop printer margins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Endless Height</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Extended Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Full page</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Page setup</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -8,6 +8,60 @@
<translation></translation>
</message>
</context>
<context>
<name>BorderFrameEditor</name>
<message>
<source>BorderFrameEditor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Text</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChartAxisEditor</name>
<message>
<source>Axis editor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reverse direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable scale calculation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Step</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Maximum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
<message>
<source>Ok</source>
<translation type="unfinished">Aceptar</translation>
</message>
</context>
<context>
<name>ChartItemEditor</name>
<message>
@ -54,6 +108,10 @@
<source>Series name</source>
<translation>Nombre de la Serie</translation>
</message>
<message>
<source>X data field</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ImageItemEditor</name>
@ -156,34 +214,6 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Report engine for &lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt; framework&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Official web site : &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;This library 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.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Copyright 2015 Arin Alexander. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Motor de informes para el entorno de trabajo de &lt;/span&gt; &lt;span style = &quot;font-size: 12pt; font-weight: 600; color: # 7faa18;&quot;&gt; Qt &lt;/span&gt; &lt;span style = &quot;font-size: 12pt; font-weight : 600; &quot;&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot; &gt; &lt;span style = &quot;font-size: 11pt;&quot;&gt; LimeReport es una biblioteca de C ++ multiplataforma escrita para el entorno de trabajo de Qt y diseñada para desarrolladores de software que deseen agregar en su aplicación la capacidad para crear informes o imprimir formularios generados mediante plantillas. &lt; / span&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 11pt; &quot;&gt; &lt;br /&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 11pt; &quot;&gt; &lt;br /&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot; &gt; &lt;span style = &quot;font-size: 11pt;&quot;&gt; Sitio web oficial: &lt;/span&gt; &lt;a href=&quot;www.limereport.ru&quot;&gt; &lt;span style = &quot;font-size: 11pt; text-decoration: underline ; color: # 0000ff; &quot;&gt; www.limereport.ru &lt;/span&gt; &lt;/a&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; texto-sangría: 0px; fuente-tamaño: 11 puntos; texto-decoración: subrayado; color: # 0000ff; &quot;&gt; &lt;br /&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot; &gt; &lt;span style = &quot;font-size: 10pt; font-weight: 600;&quot;&gt; Esta biblioteca se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin ni siquiera la garantía implícita de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. &lt;/span&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 10pt; font-weight: 600; color: # 000000; &quot;&gt; &lt;br /&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot; &gt; &lt;span style = &quot;font-size: 10pt;&quot;&gt;Derechos reservados 2015 Arin Alexander. Todos los derechos reservados.</translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;(c) 2015 Arin Alexander arin_a@bk.ru&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a name=&quot;SEC1&quot;&gt;&lt;/a&gt;&lt;span style=&quot; font-family:&apos;sans-serif&apos;; font-weight:600;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot; font-family:&apos;sans-serif&apos;; font-weight:600;&quot;&gt;NU LESSER GENERAL PUBLIC LICENSE&lt;/span&gt;&lt;/p&gt;
@ -412,6 +442,34 @@ p, li { white-space: pre-wrap; }
&lt;p style = &quot;margin-top: 0px; margin-bottom: 15px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot;&gt; &lt;span style = &quot;font-family: &apos;monospace&apos;;&quot;&gt; Ty Coon, Presidente de Vice &lt;/span&gt; &lt;/p&gt;
&lt;p style = &quot;margin-top: 19px; margin-bottom: 19px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot;&gt; &lt;span style = &quot;font-family: &apos;sans-serif&apos;;&quot;&gt; ¡Eso es todo!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Report engine for &lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt; framework&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Official web site : &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;This library 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.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Copyright 2021 Arin Alexander. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Motor de informes para el entorno de trabajo de &lt;/span&gt; &lt;span style = &quot;font-size: 12pt; font-weight: 600; color: # 7faa18;&quot;&gt; Qt &lt;/span&gt; &lt;span style = &quot;font-size: 12pt; font-weight : 600; &quot;&gt;&lt;/span&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot; &gt; &lt;span style = &quot;font-size: 11pt;&quot;&gt; LimeReport es una biblioteca de C ++ multiplataforma escrita para el entorno de trabajo de Qt y diseñada para desarrolladores de software que deseen agregar en su aplicación la capacidad para crear informes o imprimir formularios generados mediante plantillas. &lt; / span&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 11pt; &quot;&gt; &lt;br /&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 11pt; &quot;&gt; &lt;br /&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot; &gt; &lt;span style = &quot;font-size: 11pt;&quot;&gt; Sitio web oficial: &lt;/span&gt; &lt;a href=&quot;www.limereport.ru&quot;&gt; &lt;span style = &quot;font-size: 11pt; text-decoration: underline ; color: # 0000ff; &quot;&gt; www.limereport.ru &lt;/span&gt; &lt;/a&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; texto-sangría: 0px; fuente-tamaño: 11 puntos; texto-decoración: subrayado; color: # 0000ff; &quot;&gt; &lt;br /&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot; &gt; &lt;span style = &quot;font-size: 10pt; font-weight: 600;&quot;&gt; Esta biblioteca se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin ni siquiera la garantía implícita de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. &lt;/span&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;- qt -agraph-type: empty; margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px; font-size: 10pt; font-weight: 600; color: # 000000; &quot;&gt; &lt;br /&gt; &lt;/p&gt;
&lt;p align = &quot;justify&quot; style = &quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-block-indent: 0; text-indent: 0px;&quot; &gt; &lt;span style = &quot;font-size: 10pt;&quot;&gt;Derechos reservados 2015 Arin Alexander. Todos los derechos reservados. {3C?} {4.0/?} {3.?} {40/?} {1&quot;?} {9p?} {400;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {100.?} {100&quot;?} {12p?} {600;?} {12p?} {600;?} {7f?} {18;?} {12p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {000000;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {2021 ?}</translation>
</message>
</context>
<context>
<name>LimeReport::AlignmentPropItem</name>
@ -585,6 +643,10 @@ p, li { white-space: pre-wrap; }
<source>Lock item geometry</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit borders...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::ConnectionDesc</name>
@ -1369,6 +1431,10 @@ p, li { white-space: pre-wrap; }
<source>All borders</source>
<translation>Todos los bordes</translation>
</message>
<message>
<source>Edit border</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::MasterDetailProxyModel</name>
@ -1461,6 +1527,14 @@ p, li { white-space: pre-wrap; }
<source>Set page size to printer</source>
<translation>Establecer el tamaño de página a la impresora</translation>
</message>
<message>
<source>Mix with prior page</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit</source>
<translation type="unfinished">Editar</translation>
</message>
</context>
<context>
<name>LimeReport::PreviewReportWidget</name>
@ -2157,6 +2231,38 @@ p, li { white-space: pre-wrap; }
<source>removeGap</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>xAxisField</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>seriesLineWidth</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>drawPoints</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>dropPrinterMargins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>notPrintIfEmpty</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>gridChartLines</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>horizontalAxisOnTop</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>mixWithPriorPage</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::RectPropItem</name>
@ -3063,10 +3169,6 @@ Esta vista previa ya no es válida.</translation>
<source>Ctrl+Return</source>
<translation>Ctrl+Intro</translation>
</message>
<message>
<source>Esc</source>
<translation></translation>
</message>
</context>
<context>
<name>LimeReport::TranslationEditor</name>
@ -3404,5 +3506,215 @@ Esta vista previa ya no es válida.</translation>
<source>Series</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>lrbordereditor</name>
<message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No style</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Solid</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Presets</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No lines</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outline</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Border</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit border</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0.25</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0.5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>1.5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>4</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>6</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash dot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash dot dot</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>lrpageeditor</name>
<message>
<source>Paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Format</source>
<translation type="unfinished">Formato</translation>
</message>
<message>
<source>Dimension</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Portrait</source>
<translation type="unfinished">Retrato</translation>
</message>
<message>
<source>Landscape</source>
<translation type="unfinished">Apaisado (Horizontal)</translation>
</message>
<message>
<source>Margins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bottom:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Top:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Drop printer margins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Endless Height</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Extended Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Full page</source>
<translation type="unfinished">Página completa</translation>
</message>
<message>
<source>Page setup</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -8,6 +8,60 @@
<translation>$ClassName$</translation>
</message>
</context>
<context>
<name>BorderFrameEditor</name>
<message>
<source>BorderFrameEditor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Text</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChartAxisEditor</name>
<message>
<source>Axis editor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reverse direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable scale calculation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Step</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Maximum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished">Отмена</translation>
</message>
<message>
<source>Ok</source>
<translation type="unfinished">Ок</translation>
</message>
</context>
<context>
<name>ChartItemEditor</name>
<message>
@ -54,6 +108,10 @@
<source>Series name</source>
<translation>Название ряда</translation>
</message>
<message>
<source>X data field</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ImageItemEditor</name>
@ -161,22 +219,6 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Report engine for &lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt; framework&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Official web site : &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;This library 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.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Copyright 2015 Arin Alexander. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;(c) 2015 Arin Alexander arin_a@bk.ru&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a name=&quot;SEC1&quot;&gt;&lt;/a&gt;&lt;span style=&quot; font-family:&apos;sans-serif&apos;; font-weight:600;&quot;&gt;G&lt;/span&gt;&lt;span style=&quot; font-family:&apos;sans-serif&apos;; font-weight:600;&quot;&gt;NU LESSER GENERAL PUBLIC LICENSE&lt;/span&gt;&lt;/p&gt;
@ -289,6 +331,22 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:19px; margin-bottom:19px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;sans-serif&apos;;&quot;&gt;That&apos;s all there is to it!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Report engine for &lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt; framework&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Official web site : &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;This library 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.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Copyright 2021 Arin Alexander. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::AlignmentPropItem</name>
@ -462,6 +520,10 @@ p, li { white-space: pre-wrap; }
<source>Lock item geometry</source>
<translation>Заблокировать геометрию элемента</translation>
</message>
<message>
<source>Edit borders...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::ConnectionDesc</name>
@ -1246,6 +1308,10 @@ p, li { white-space: pre-wrap; }
<source>All borders</source>
<translation>Все границы</translation>
</message>
<message>
<source>Edit border</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::MasterDetailProxyModel</name>
@ -1342,6 +1408,10 @@ p, li { white-space: pre-wrap; }
<source>Mix with prior page</source>
<translation>Смешивать с предыдущей страницей</translation>
</message>
<message>
<source>Edit</source>
<translation type="unfinished">Правка</translation>
</message>
</context>
<context>
<name>LimeReport::PreviewReportWidget</name>
@ -2050,6 +2120,26 @@ p, li { white-space: pre-wrap; }
<source>mixWithPriorPage</source>
<translation>Смешивать с предыдущей сраницей</translation>
</message>
<message>
<source>xAxisField</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>seriesLineWidth</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>drawPoints</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>gridChartLines</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>horizontalAxisOnTop</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::RectPropItem</name>
@ -2954,10 +3044,6 @@ This preview is no longer valid.</source>
<source>Ctrl+Return</source>
<translation></translation>
</message>
<message>
<source>Esc</source>
<translation></translation>
</message>
</context>
<context>
<name>LimeReport::TranslationEditor</name>
@ -3295,5 +3381,215 @@ This preview is no longer valid.</source>
<source>SVG Item</source>
<translation>Элемент SVG избражение</translation>
</message>
<message>
<source>X Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>lrbordereditor</name>
<message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No style</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Solid</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Presets</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No lines</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outline</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Border</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<translation type="unfinished">...</translation>
</message>
<message>
<source>Edit border</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0.25</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0.5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>1.5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>4</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>6</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash dot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash dot dot</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>lrpageeditor</name>
<message>
<source>Paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Format</source>
<translation type="unfinished">Формат</translation>
</message>
<message>
<source>Dimension</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Portrait</source>
<translation type="unfinished">Портретная</translation>
</message>
<message>
<source>Landscape</source>
<translation type="unfinished">Альбомная</translation>
</message>
<message>
<source>Margins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bottom:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Top:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Drop printer margins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Endless Height</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Extended Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Full page</source>
<translation type="unfinished">На всю страницу</translation>
</message>
<message>
<source>Page setup</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -8,6 +8,60 @@
<translation>$ClassName$</translation>
</message>
</context>
<context>
<name>BorderFrameEditor</name>
<message>
<source>BorderFrameEditor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Text</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChartAxisEditor</name>
<message>
<source>Axis editor</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Reverse direction</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Enable scale calculation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Step</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Maximum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Minimum</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ok</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChartItemEditor</name>
<message>
@ -54,6 +108,10 @@
<source>Series name</source>
<translation></translation>
</message>
<message>
<source>X data field</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ImageItemEditor</name>
@ -126,34 +184,6 @@
<source>Lime Report</source>
<translation></translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Report engine for &lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt; framework&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Official web site : &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;This library 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.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Copyright 2015 Arin Alexander. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - QT框架多平台C++&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 2015 Arin Alexander..&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<source>Author</source>
<translation></translation>
@ -296,6 +326,34 @@ p, li { white-space: pre-wrap; }
<source>Version 1.1.1</source>
<translation> 1.1.1</translation>
</message>
<message>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;Report engine for &lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt; framework&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - multi-platform C++ library written using Qt framework and intended for software developers that would like to add into their application capability to form report or print forms generated using templates.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;Official web site : &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;This library 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.&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Copyright 2021 Arin Alexander. All rights reserved.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Sans Serif&apos;; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/report/images/logo_100.png&quot; height=&quot;100&quot; style=&quot;float: left;&quot; /&gt;&lt;span style=&quot; font-size:12pt; font-weight:600; color:#7faa18;&quot;&gt;Qt&lt;/span&gt;&lt;span style=&quot; font-size:12pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;LimeReport - QT框架多平台C++&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:11pt;&quot;&gt;: &lt;/span&gt;&lt;a href=&quot;www.limereport.ru&quot;&gt;&lt;span style=&quot; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;www.limereport.ru&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; text-decoration: underline; color:#0000ff;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt; font-weight:600;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt; font-weight:600; color:#000000;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;justify&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt; 2015 Arin Alexander..&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt; {3C?} {4.0/?} {3.?} {40/?} {1&quot;?} {9p?} {400;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {100.?} {100&quot;?} {12p?} {600;?} {12p?} {600;?} {7f?} {18;?} {12p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {11p?} {0000f?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {600;?} {000000;?} {0p?} {0p?} {0p?} {0p?} {0;?} {0p?} {10p?} {2021 ?}</translation>
</message>
</context>
<context>
<name>LimeReport::AlignmentPropItem</name>
@ -469,6 +527,10 @@ p, li { white-space: pre-wrap; }
<source>Create Vertical Layout</source>
<translation></translation>
</message>
<message>
<source>Edit borders...</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::ConnectionDesc</name>
@ -1253,6 +1315,10 @@ p, li { white-space: pre-wrap; }
<source>All borders</source>
<translation></translation>
</message>
<message>
<source>Edit border</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::MasterDetailProxyModel</name>
@ -1345,6 +1411,14 @@ p, li { white-space: pre-wrap; }
<source>Set page size to printer</source>
<translation></translation>
</message>
<message>
<source>Mix with prior page</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Edit</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::PreviewReportWidget</name>
@ -2041,6 +2115,38 @@ p, li { white-space: pre-wrap; }
<source>removeGap</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>xAxisField</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>seriesLineWidth</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>drawPoints</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>dropPrinterMargins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>notPrintIfEmpty</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>gridChartLines</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>horizontalAxisOnTop</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>mixWithPriorPage</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>LimeReport::RectPropItem</name>
@ -2947,10 +3053,6 @@ This preview is no longer valid.</source>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<source>Esc</source>
<translation></translation>
</message>
</context>
<context>
<name>LimeReport::TranslationEditor</name>
@ -3288,5 +3390,215 @@ This preview is no longer valid.</source>
<source>Series</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y Axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>X axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Y axis</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Axis</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>lrbordereditor</name>
<message>
<source>Style</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No style</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Solid</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Presets</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No lines</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outline</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Border</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>...</source>
<translation type="unfinished">...</translation>
</message>
<message>
<source>Edit border</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0.25</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>0.5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>1.5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>2</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>3</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>4</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>5</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>6</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Color:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash dot</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dash dot dot</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>lrpageeditor</name>
<message>
<source>Paper</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Format</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Dimension</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Width:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> mm</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Orientation</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Portrait</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Landscape</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Margins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Bottom:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Top:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Right:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Left:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Drop printer margins</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Other</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Height options</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Endless Height</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Extended Height:</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Full page</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Page setup</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>