diff --git a/demo_r2/demo_r2.pro b/demo_r2/demo_r2.pro
new file mode 100644
index 0000000..b2a09dc
--- /dev/null
+++ b/demo_r2/demo_r2.pro
@@ -0,0 +1,64 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2016-04-01T17:38:18
+#
+#-------------------------------------------------
+include(../common.pri)
+QT += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = demo_r2
+TEMPLATE = app
+
+SOURCES += main.cpp\
+ mainwindow.cpp
+
+HEADERS += mainwindow.h
+
+FORMS += mainwindow.ui
+
+INCLUDEPATH += $$PWD/../include
+DEPENDPATH += $$PWD/../include
+
+RESOURCES += \
+ demo_r2.qrc
+
+EXTRA_DIR += $$PWD/demo_reports
+DEST_DIR = $${BUILD_DIR}/$${BUILD_TYPE}/demo
+REPORTS_DIR = $${DEST_DIR}
+
+unix:{
+ LIBS += -L$${BUILD_DIR}/$${BUILD_TYPE}/lib -llimereport
+ contains(CONFIG,zint){
+ LIBS += -L$${BUILD_DIR}/$${BUILD_TYPE}/lib -lQtZint
+ }
+ DESTDIR = $$DEST_DIR
+ QMAKE_POST_LINK += mkdir -p $$quote($$REPORTS_DIR) | $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$REPORTS_DIR) $$escape_expand(\n\t)
+linux{
+ #Link share lib to ../lib rpath
+ QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
+ QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
+ QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/../lib
+ QMAKE_LFLAGS_RPATH += #. .. ./libs
+}
+ target.path = $${DEST_DIR}
+ INSTALLS = target
+}
+
+win32 {
+ EXTRA_DIR ~= s,/,\\,g
+ DEST_DIR ~= s,/,\\,g
+ REPORTS_DIR ~= s,/,\\,g
+
+ DESTDIR = $$DEST_DIR
+ RC_FILE += mainicon.rc
+
+ QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$quote($$EXTRA_DIR) $$quote($$REPORTS_DIR) $$escape_expand(\\n\\t)
+ contains(CONFIG,zint){
+ LIBS += -L$${BUILD_DIR}/$${BUILD_TYPE}/lib -lQtZint
+ }
+ LIBS += -L$${BUILD_DIR}/$${BUILD_TYPE}/lib -llimereport
+}
+
+
diff --git a/demo_r2/demo_r2.qrc b/demo_r2/demo_r2.qrc
new file mode 100644
index 0000000..efab479
--- /dev/null
+++ b/demo_r2/demo_r2.qrc
@@ -0,0 +1,21 @@
+
+
+ images/lr.png
+ images/logo.png
+ images/folder3.png
+ images/new_leaf1.png
+ images/logo1.png
+ images/design.png
+ images/PDF.png
+ images/ZoomIn.png
+ images/ZoomOut.png
+ images/First.png
+ images/Last.png
+ images/Next.png
+ images/Prev.png
+ images/Print.png
+ images/FitWidth.png
+ images/FitPage.png
+ images/OneToOne.png
+
+
diff --git a/demo_r2/demo_reports/categories.lrxml b/demo_r2/demo_reports/categories.lrxml
new file mode 100644
index 0000000..e1c3fd4
--- /dev/null
+++ b/demo_r2/demo_reports/categories.lrxml
@@ -0,0 +1,227 @@
+
+
+
diff --git a/demo_r2/demo_reports/change_item_from_script.lrxml b/demo_r2/demo_reports/change_item_from_script.lrxml
new file mode 100644
index 0000000..2e79dbc
--- /dev/null
+++ b/demo_r2/demo_reports/change_item_from_script.lrxml
@@ -0,0 +1,211 @@
+
+
+
diff --git a/demo_r2/demo_reports/demoReport1_report_header_group_subdetail.lrxml b/demo_r2/demo_reports/demoReport1_report_header_group_subdetail.lrxml
new file mode 100644
index 0000000..e036b0e
--- /dev/null
+++ b/demo_r2/demo_reports/demoReport1_report_header_group_subdetail.lrxml
@@ -0,0 +1,632 @@
+
+
+
diff --git a/demo_r2/demo_reports/northwind.db b/demo_r2/demo_reports/northwind.db
new file mode 100644
index 0000000..42a4ef6
Binary files /dev/null and b/demo_r2/demo_reports/northwind.db differ
diff --git a/demo_r2/images/First.png b/demo_r2/images/First.png
new file mode 100644
index 0000000..0c98969
Binary files /dev/null and b/demo_r2/images/First.png differ
diff --git a/demo_r2/images/FitPage.png b/demo_r2/images/FitPage.png
new file mode 100644
index 0000000..c79ca9d
Binary files /dev/null and b/demo_r2/images/FitPage.png differ
diff --git a/demo_r2/images/FitWidth.png b/demo_r2/images/FitWidth.png
new file mode 100644
index 0000000..899f3d1
Binary files /dev/null and b/demo_r2/images/FitWidth.png differ
diff --git a/demo_r2/images/Last.png b/demo_r2/images/Last.png
new file mode 100644
index 0000000..c705017
Binary files /dev/null and b/demo_r2/images/Last.png differ
diff --git a/demo_r2/images/Next.png b/demo_r2/images/Next.png
new file mode 100644
index 0000000..3b2dd70
Binary files /dev/null and b/demo_r2/images/Next.png differ
diff --git a/demo_r2/images/OneToOne.png b/demo_r2/images/OneToOne.png
new file mode 100644
index 0000000..4b7184b
Binary files /dev/null and b/demo_r2/images/OneToOne.png differ
diff --git a/demo_r2/images/PDF.png b/demo_r2/images/PDF.png
new file mode 100644
index 0000000..6e68818
Binary files /dev/null and b/demo_r2/images/PDF.png differ
diff --git a/demo_r2/images/Prev.png b/demo_r2/images/Prev.png
new file mode 100644
index 0000000..8912f07
Binary files /dev/null and b/demo_r2/images/Prev.png differ
diff --git a/demo_r2/images/Print.png b/demo_r2/images/Print.png
new file mode 100644
index 0000000..8ce4960
Binary files /dev/null and b/demo_r2/images/Print.png differ
diff --git a/demo_r2/images/ZoomIn.png b/demo_r2/images/ZoomIn.png
new file mode 100644
index 0000000..ecbff88
Binary files /dev/null and b/demo_r2/images/ZoomIn.png differ
diff --git a/demo_r2/images/ZoomOut.png b/demo_r2/images/ZoomOut.png
new file mode 100644
index 0000000..da1e2ef
Binary files /dev/null and b/demo_r2/images/ZoomOut.png differ
diff --git a/demo_r2/images/design.png b/demo_r2/images/design.png
new file mode 100644
index 0000000..24e41bb
Binary files /dev/null and b/demo_r2/images/design.png differ
diff --git a/demo_r2/images/folder3.png b/demo_r2/images/folder3.png
new file mode 100644
index 0000000..d857735
Binary files /dev/null and b/demo_r2/images/folder3.png differ
diff --git a/demo_r2/images/logo.png b/demo_r2/images/logo.png
new file mode 100644
index 0000000..a466bbb
Binary files /dev/null and b/demo_r2/images/logo.png differ
diff --git a/demo_r2/images/logo1.png b/demo_r2/images/logo1.png
new file mode 100644
index 0000000..29f3370
Binary files /dev/null and b/demo_r2/images/logo1.png differ
diff --git a/demo_r2/images/lr.png b/demo_r2/images/lr.png
new file mode 100644
index 0000000..2206744
Binary files /dev/null and b/demo_r2/images/lr.png differ
diff --git a/demo_r2/images/new_leaf1.png b/demo_r2/images/new_leaf1.png
new file mode 100644
index 0000000..d89f8d3
Binary files /dev/null and b/demo_r2/images/new_leaf1.png differ
diff --git a/demo_r2/main.cpp b/demo_r2/main.cpp
new file mode 100644
index 0000000..b48f94e
--- /dev/null
+++ b/demo_r2/main.cpp
@@ -0,0 +1,11 @@
+#include "mainwindow.h"
+#include
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ MainWindow w;
+ w.show();
+
+ return a.exec();
+}
diff --git a/demo_r2/main.ico b/demo_r2/main.ico
new file mode 100644
index 0000000..6bd0818
Binary files /dev/null and b/demo_r2/main.ico differ
diff --git a/demo_r2/mainicon.rc b/demo_r2/mainicon.rc
new file mode 100644
index 0000000..83c0128
--- /dev/null
+++ b/demo_r2/mainicon.rc
@@ -0,0 +1 @@
+DI_ICON1 ICON "main.ico"
diff --git a/demo_r2/mainwindow.cpp b/demo_r2/mainwindow.cpp
new file mode 100644
index 0000000..06a02fd
--- /dev/null
+++ b/demo_r2/mainwindow.cpp
@@ -0,0 +1,123 @@
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include
+#include
+#include
+#include
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+ m_preview = m_report.createPreviewWidget();
+ connect(m_preview,SIGNAL(scalePercentChanged(int)), this, SLOT(slotScalePercentChanged(int)));
+ ui->groupBox_2->layout()->addWidget(m_preview);
+ buildReportsTree(QApplication::applicationDirPath()+"/demo_reports/", ui->treeWidget);
+ connect(ui->tbZoomIn, SIGNAL(clicked(bool)), m_preview, SLOT(zoomIn()));
+ connect(ui->tbZoomOut, SIGNAL(clicked(bool)), m_preview, SLOT(zoomOut()));
+ connect(ui->tbFirstPage, SIGNAL(clicked(bool)), m_preview, SLOT(firstPage()));
+ connect(ui->tbPrevPage, SIGNAL(clicked(bool)), m_preview, SLOT(priorPage()));
+ connect(ui->tbNextPage, SIGNAL(clicked(bool)), m_preview, SLOT(nextPage()));
+ connect(ui->tbLastPage, SIGNAL(clicked(bool)), m_preview, SLOT(lastPage()));
+ connect(ui->cbScalePercent, SIGNAL(currentIndexChanged(QString)), this, SLOT(scaleComboboxChanged(QString)));
+ connect(ui->tbFitWidth, SIGNAL(clicked(bool)), m_preview, SLOT(fitWidth()));
+ connect(ui->tbFitPage, SIGNAL(clicked(bool)), m_preview, SLOT(fitPage()));
+ connect(m_preview, SIGNAL(pagesSet(int)), this, SLOT(slotPagesSet(int)));
+ connect(m_preview, SIGNAL(pageChanged(int)), this, SLOT(slotPageChanged(int)));
+ connect(ui->tbPDFExport, SIGNAL(clicked(bool)), m_preview, SLOT(printToPDF()));
+ connect(ui->tbPrint, SIGNAL(clicked(bool)), m_preview, SLOT(print()));
+ initPercentCombobox();
+ enableUI(false);
+ QDesktopWidget *desktop = QApplication::desktop();
+
+ int screenWidth = desktop->screenGeometry().width();
+ int screenHeight = desktop->screenGeometry().height();
+
+ int x = screenWidth*0.1;
+ int y = screenHeight*0.1;
+
+ resize(screenWidth*0.8, screenHeight*0.8);
+ move(x, y);
+ if (QFile::exists(QApplication::applicationDirPath()+"/demo_reports/categories.lrxml")){
+ m_report.loadFromFile(QApplication::applicationDirPath()+"/demo_reports/categories.lrxml");
+ m_preview->refreshPages();
+ }
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+void MainWindow::enableUI(bool value)
+{
+ ui->tbDesign->setEnabled(value);
+ ui->tbPrint->setEnabled(value);
+ ui->tbPDFExport->setEnabled(value);
+ ui->tbFirstPage->setEnabled(value);
+ ui->tbPrevPage->setEnabled(value);
+ ui->tbNextPage->setEnabled(value);
+ ui->tbLastPage->setEnabled(value);
+ ui->tbZoomIn->setEnabled(value);
+ ui->tbZoomOut->setEnabled(value);
+ ui->tbFitWidth->setEnabled(value);
+ ui->tbFitPage->setEnabled(value);
+ ui->tbOneToOne->setEnabled(value);
+ ui->sbPageNavigator->setEnabled(value);
+ ui->cbScalePercent->setEnabled(value);
+}
+
+void MainWindow::slotScalePercentChanged(int percent)
+{
+ ui->cbScalePercent->setCurrentText(QString("%1\%").arg(percent));
+}
+
+void MainWindow::scaleComboboxChanged(QString text)
+{
+ m_preview->setScalePercent(text.remove(text.count()-1,1).toInt());
+}
+
+void MainWindow::slotPagesSet(int pagesCount)
+{
+ ui->sbPageNavigator->setSuffix(tr(" of %1").arg(pagesCount));
+ ui->sbPageNavigator->setMinimum(1);
+ ui->sbPageNavigator->setMaximum(pagesCount);
+ ui->sbPageNavigator->setValue(1);
+ enableUI(true);
+}
+
+void MainWindow::slotPageChanged(int page)
+{
+ ui->sbPageNavigator->setValue(page);
+}
+
+void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item, int )
+{
+ m_report.loadFromFile(item->data(0,Qt::UserRole).toString());
+ m_preview->refreshPages();
+}
+
+void MainWindow::initPercentCombobox()
+{
+ for (int i = 10; i<310; i+=10){
+ ui->cbScalePercent->addItem(QString("%1\%").arg(i));
+ }
+ ui->cbScalePercent->setCurrentIndex(4);
+}
+
+void MainWindow::on_sbPageNavigator_valueChanged(int arg1)
+{
+ m_preview->pageNavigatorChanged(arg1);
+}
+
+void MainWindow::on_tbDesign_clicked()
+{
+ m_report.designReport();
+ m_preview->refreshPages();
+}
+
+void MainWindow::on_tbOneToOne_clicked()
+{
+ m_preview->setScalePercent(100);
+}
diff --git a/demo_r2/mainwindow.h b/demo_r2/mainwindow.h
new file mode 100644
index 0000000..5d9d176
--- /dev/null
+++ b/demo_r2/mainwindow.h
@@ -0,0 +1,61 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include
+#include
+#include
+#include
+#include
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit MainWindow(QWidget *parent = 0);
+ ~MainWindow();
+private:
+ void enableUI(bool value);
+private slots:
+ void slotScalePercentChanged(int percent);
+ void scaleComboboxChanged(QString text);
+ void slotPagesSet(int pagesCount);
+ void slotPageChanged(int page);
+ void on_treeWidget_itemClicked(QTreeWidgetItem *item, int);
+ void on_sbPageNavigator_valueChanged(int arg1);
+ void on_tbDesign_clicked();
+ void on_tbOneToOne_clicked();
+private:
+ template< typename T >
+ void buildReportsTree(const QString &path, T* parentItem)
+ {
+ QDir reportsDir(path);
+ QStringList items = reportsDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
+ foreach( QString dir, items){
+ QTreeWidgetItem* listItem = new QTreeWidgetItem(parentItem);
+ listItem->setText(0,dir);
+ listItem->setIcon(0,QIcon(":/images/images/folder.png"));
+ buildReportsTree(reportsDir.path()+"/"+dir, listItem);
+ }
+ QStringList nameFilters;
+ nameFilters <<"*.lrxml";
+ items = reportsDir.entryList(nameFilters, QDir::Files);
+ foreach( QString file, items){
+ QTreeWidgetItem* listItem = new QTreeWidgetItem(parentItem);
+ listItem->setIcon(0,QIcon(":/images/images/report.png"));
+ listItem->setText(0,file);
+ listItem->setData(0,Qt::UserRole,reportsDir.path()+"/"+file);
+ }
+ }
+ void initPercentCombobox();
+private:
+ Ui::MainWindow *ui;
+ LimeReport::ReportEngine m_report;
+ LimeReport::PreviewReportWidget* m_preview;
+};
+
+#endif // MAINWINDOW_H
diff --git a/demo_r2/mainwindow.ui b/demo_r2/mainwindow.ui
new file mode 100644
index 0000000..84ccfc8
--- /dev/null
+++ b/demo_r2/mainwindow.ui
@@ -0,0 +1,587 @@
+
+
+ MainWindow
+
+
+
+ 0
+ 0
+ 1157
+ 554
+
+
+
+ Lime Report Demo
+
+
+
+ :/images/images/logo1.png:/images/images/logo1.png
+
+
+
+ -
+
+
-
+
+
-
+
+
+
+ 75
+ true
+
+
+
+ Reports
+
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 200
+ 16777215
+
+
+
+
+ 50
+ false
+
+
+
+ false
+
+
+ false
+
+
+
+ 1
+
+
+
+
+
+
+
+ -
+
+
+ 7
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 50
+ 59
+
+
+
+
+
+
+ :/images/images/logo1.png
+
+
+ true
+
+
+
+ -
+
+
+ 1
+
+
+ 5
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 16777215
+ 16777215
+
+
+
+
+
+
+
+
+ 127
+ 170
+ 24
+
+
+
+
+
+
+ 0
+ 189
+ 0
+
+
+
+
+
+
+
+
+ 127
+ 170
+ 24
+
+
+
+
+
+
+ 0
+ 189
+ 0
+
+
+
+
+
+
+
+
+ 190
+ 190
+ 190
+
+
+
+
+
+
+ 190
+ 190
+ 190
+
+
+
+
+
+
+
+
+ 14
+ 75
+ true
+
+
+
+ Lime Report
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+
+ 14
+ 75
+ true
+
+
+
+ DEMO
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+ 75
+ true
+
+
+
+ Preview
+
+
+
+ 4
+
+
-
+
+
+ 2
+
+
-
+
+
+
+ 6
+
+
+
+ ...
+
+
+
+ :/images/images/design.png:/images/images/design.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ QFrame::VLine
+
+
+ QFrame::Sunken
+
+
+
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/Print.png:/images/images/Print.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/PDF.png:/images/images/PDF.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ QFrame::VLine
+
+
+ QFrame::Sunken
+
+
+
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/ZoomIn.png:/images/images/ZoomIn.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/ZoomOut.png:/images/images/ZoomOut.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ true
+
+
+ true
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/OneToOne.png:/images/images/OneToOne.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/FitWidth.png:/images/images/FitWidth.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/FitPage.png:/images/images/FitPage.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ QFrame::VLine
+
+
+ QFrame::Sunken
+
+
+
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/First.png:/images/images/First.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/Prev.png:/images/images/Prev.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ Page:
+
+
+ 10000000
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/Next.png:/images/images/Next.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ ...
+
+
+
+ :/images/images/Last.png:/images/images/Last.png
+
+
+
+ 24
+ 24
+
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/limereport.pro b/limereport.pro
index 9ec2517..2b46b10 100644
--- a/limereport.pro
+++ b/limereport.pro
@@ -9,7 +9,7 @@ SUBDIRS += \
CONFIG += ordered
-SUBDIRS += demo_r1
+SUBDIRS += demo_r1 demo_r2