Version 1.4 initial commit
@@ -60,6 +60,10 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class DataSourceManager;
 | 
					class DataSourceManager;
 | 
				
			||||||
class ReportEnginePrivate;
 | 
					class ReportEnginePrivate;
 | 
				
			||||||
 | 
					class PageDesignIntf;
 | 
				
			||||||
 | 
					class PageItemDesignIntf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef QList< QSharedPointer<PageItemDesignIntf> > ReportPages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LIMEREPORT_EXPORT ReportEngine : public QObject{
 | 
					class LIMEREPORT_EXPORT ReportEngine : public QObject{
 | 
				
			||||||
    Q_OBJECT
 | 
					    Q_OBJECT
 | 
				
			||||||
@@ -69,7 +73,9 @@ public:
 | 
				
			|||||||
    explicit ReportEngine(QObject *parent = 0);
 | 
					    explicit ReportEngine(QObject *parent = 0);
 | 
				
			||||||
    ~ReportEngine();
 | 
					    ~ReportEngine();
 | 
				
			||||||
    bool    printReport(QPrinter *printer=0);
 | 
					    bool    printReport(QPrinter *printer=0);
 | 
				
			||||||
 | 
					    bool    printPages(ReportPages pages, QPrinter *printer, PrintRange printRange = PrintRange());
 | 
				
			||||||
    void    printToFile(const QString& fileName);
 | 
					    void    printToFile(const QString& fileName);
 | 
				
			||||||
 | 
					    PageDesignIntf *createPreviewScene(QObject *parent = 0);
 | 
				
			||||||
    bool    printToPDF(const QString& fileName);
 | 
					    bool    printToPDF(const QString& fileName);
 | 
				
			||||||
    void    previewReport();
 | 
					    void    previewReport();
 | 
				
			||||||
    void    designReport();
 | 
					    void    designReport();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -778,14 +778,4 @@ void DataBrowser::on_variablesTree_itemDoubleClicked(QTreeWidgetItem *item, int
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace LimeReport
 | 
					} // namespace LimeReport
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								limereport/images/addPage.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 679 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/images/addPage1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 453 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/images/deletePage.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 649 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/images/deletePage1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 393 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/images/green_logo_32x32.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/images/logo_16x16.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
@@ -41,6 +41,16 @@ FontEditorWidget::FontEditorWidget(ReportDesignWidget *reportEditor, QWidget *pa
 | 
				
			|||||||
    initEditor();
 | 
					    initEditor();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FontEditorWidget::FontEditorWidget(PageDesignIntf *page, const QString &title, QWidget *parent)
 | 
				
			||||||
 | 
					    :ItemEditorWidget(page,title,parent), m_ignoreSlots(false) {
 | 
				
			||||||
 | 
					    initEditor();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FontEditorWidget::FontEditorWidget(LimeReport::PageDesignIntf *page, QWidget *parent)
 | 
				
			||||||
 | 
					    :ItemEditorWidget(page,parent), m_ignoreSlots(false){
 | 
				
			||||||
 | 
					    initEditor();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FontEditorWidget::setItemEvent(BaseDesignIntf* item)
 | 
					void FontEditorWidget::setItemEvent(BaseDesignIntf* item)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -116,22 +126,26 @@ void FontEditorWidget::slotFontChanged(const QFont &font)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void FontEditorWidget::slotFontSizeChanged(const QString &value)
 | 
					void FontEditorWidget::slotFontSizeChanged(const QString &value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (reportEditor() && !m_ignoreSlots){
 | 
					    if (m_ignoreSlots) return;
 | 
				
			||||||
        QFont resFont(m_fontNameEditor->currentFont());
 | 
					
 | 
				
			||||||
        resFont.setPointSize(value.toInt());
 | 
					    QFont resFont(fontNameEditor()->currentFont());
 | 
				
			||||||
        reportEditor()->setFont(resFont);
 | 
					    resFont.setPointSize(value.toInt());
 | 
				
			||||||
    }
 | 
					
 | 
				
			||||||
 | 
					    if (reportEditor()) reportEditor()->setFont(resFont);
 | 
				
			||||||
 | 
					    if (page()) page()->setFont(resFont);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FontEditorWidget::slotFontAttribsChanged(bool)
 | 
					void FontEditorWidget::slotFontAttribsChanged(bool)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (reportEditor()&& !m_ignoreSlots){
 | 
					    if (m_ignoreSlots) return;
 | 
				
			||||||
        QFont resFont(m_fontNameEditor->currentFont());
 | 
					
 | 
				
			||||||
        resFont.setBold(m_fontBold->isChecked());
 | 
					    QFont resFont(m_fontNameEditor->currentFont());
 | 
				
			||||||
        resFont.setItalic(m_fontItalic->isChecked());
 | 
					    resFont.setBold(m_fontBold->isChecked());
 | 
				
			||||||
        resFont.setUnderline(m_fontUnderline->isChecked());
 | 
					    resFont.setItalic(m_fontItalic->isChecked());
 | 
				
			||||||
        reportEditor()->setFont(resFont);
 | 
					    resFont.setUnderline(m_fontUnderline->isChecked());
 | 
				
			||||||
    }
 | 
					    if (reportEditor()) reportEditor()->setFont(resFont);
 | 
				
			||||||
 | 
					    if (page()) page()->setFont(resFont);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void FontEditorWidget::slotPropertyChanged(const QString &objectName, const QString &property, const QVariant& oldValue, const QVariant& newValue)
 | 
					void FontEditorWidget::slotPropertyChanged(const QString &objectName, const QString &property, const QVariant& oldValue, const QVariant& newValue)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,8 +45,11 @@ class FontEditorWidget :public ItemEditorWidget{
 | 
				
			|||||||
public:
 | 
					public:
 | 
				
			||||||
    explicit FontEditorWidget(ReportDesignWidget* reportEditor, const QString &title, QWidget *parent = 0);
 | 
					    explicit FontEditorWidget(ReportDesignWidget* reportEditor, const QString &title, QWidget *parent = 0);
 | 
				
			||||||
    explicit FontEditorWidget(ReportDesignWidget* reportEditor, QWidget *parent = 0);
 | 
					    explicit FontEditorWidget(ReportDesignWidget* reportEditor, QWidget *parent = 0);
 | 
				
			||||||
 | 
					    explicit FontEditorWidget(PageDesignIntf* page, const QString &title, QWidget *parent = 0);
 | 
				
			||||||
 | 
					    explicit FontEditorWidget(PageDesignIntf* page, QWidget *parent = 0);
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    void setItemEvent(BaseDesignIntf *item);
 | 
					    void setItemEvent(BaseDesignIntf *item);
 | 
				
			||||||
 | 
					    QFontComboBox* fontNameEditor(){return m_fontNameEditor;}
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
    void slotFontChanged(const QFont& font);
 | 
					    void slotFontChanged(const QFont& font);
 | 
				
			||||||
    void slotFontSizeChanged(const QString& value);
 | 
					    void slotFontSizeChanged(const QString& value);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,8 +60,24 @@ ShapeItem::ShapeItem(QObject *owner, QGraphicsItem *parent)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Qt::PenStyle ShapeItem::penStyle() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return m_penStyle;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ShapeItem::setPenStyle(const Qt::PenStyle &value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if ((value!=m_penStyle)){
 | 
				
			||||||
 | 
					        Qt::PenStyle oldValue = m_penStyle;
 | 
				
			||||||
 | 
					        m_penStyle=value;
 | 
				
			||||||
 | 
					        update();
 | 
				
			||||||
 | 
					        notify("penStyle",(int)oldValue,(int)value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ShapeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
 | 
					void ShapeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    painter->save();
 | 
					    painter->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QPen pen(m_shapeColor);
 | 
					    QPen pen(m_shapeColor);
 | 
				
			||||||
@@ -150,21 +166,6 @@ void ShapeItem::setLineWidth(qreal value)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Qt::PenStyle ShapeItem::penStyle() const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    return m_penStyle;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void ShapeItem::setPenStyle(const Qt::PenStyle &value)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if (m_penStyle!=value){
 | 
					 | 
				
			||||||
        Qt::PenStyle oldValue = m_penStyle;
 | 
					 | 
				
			||||||
        m_penStyle = value;
 | 
					 | 
				
			||||||
        update();
 | 
					 | 
				
			||||||
        notify("penStyle",(int)oldValue,(int)value);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
BaseDesignIntf *ShapeItem::createSameTypeItem(QObject *owner, QGraphicsItem *parent)
 | 
					BaseDesignIntf *ShapeItem::createSameTypeItem(QObject *owner, QGraphicsItem *parent)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return new ShapeItem(owner,parent);
 | 
					    return new ShapeItem(owner,parent);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -150,20 +150,45 @@ void TextItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* style, Q
 | 
				
			|||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//    for(QTextBlock it=m_text->begin();it!=m_text->end();it=it.next()){
 | 
					    int lineHeight = painter->fontMetrics().height();
 | 
				
			||||||
//        for (int i=0;i<it.layout()->lineCount();i++){
 | 
					    qreal curpos = 0;
 | 
				
			||||||
//            painter->setOpacity(qreal(foregroundOpacity())/100);
 | 
					
 | 
				
			||||||
//            it.layout()->lineAt(i).draw(painter,QPointF(0,0));
 | 
					    if (m_underlines){
 | 
				
			||||||
//        }
 | 
					        QPen pen = painter->pen();
 | 
				
			||||||
//    }
 | 
					        pen.setWidth(m_underlineLineSize);
 | 
				
			||||||
 | 
					        painter->setPen(pen);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    painter->setOpacity(qreal(foregroundOpacity())/100);
 | 
					    painter->setOpacity(qreal(foregroundOpacity())/100);
 | 
				
			||||||
 | 
					 | 
				
			||||||
    //m_text->setDefaultTextOption();
 | 
					 | 
				
			||||||
    QAbstractTextDocumentLayout::PaintContext ctx;
 | 
					    QAbstractTextDocumentLayout::PaintContext ctx;
 | 
				
			||||||
    ctx.palette.setColor(QPalette::Text, fontColor());
 | 
					    ctx.palette.setColor(QPalette::Text, fontColor());
 | 
				
			||||||
 | 
					    for(QTextBlock it=m_text->begin();it!=m_text->end();it=it.next()){
 | 
				
			||||||
 | 
					        it.blockFormat().setLineHeight(m_lineSpacing,QTextBlockFormat::LineDistanceHeight);
 | 
				
			||||||
 | 
					        for (int i=0;i<it.layout()->lineCount();i++){
 | 
				
			||||||
 | 
					            QTextLine line = it.layout()->lineAt(i);
 | 
				
			||||||
 | 
					            if (m_underlines){
 | 
				
			||||||
 | 
					                painter->drawLine(QPointF(0,line.rect().bottomLeft().y()),QPoint(rect().width(),line.rect().bottomRight().y()));
 | 
				
			||||||
 | 
					                lineHeight = line.height()+m_lineSpacing;
 | 
				
			||||||
 | 
					                curpos = line.rect().bottom();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    m_text->documentLayout()->draw(painter,ctx);
 | 
					    m_text->documentLayout()->draw(painter,ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (m_underlines){
 | 
				
			||||||
 | 
					        if (lineHeight<0) lineHeight = painter->fontMetrics().height();
 | 
				
			||||||
 | 
					        for (curpos+=lineHeight; curpos<rect().height();curpos+=lineHeight){
 | 
				
			||||||
 | 
					            painter->drawLine(QPointF(0,curpos),QPoint(rect().width(),curpos));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //painter->setOpacity(qreal(foregroundOpacity())/100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //m_text->setDefaultTextOption();
 | 
				
			||||||
 | 
					    //QAbstractTextDocumentLayout::PaintContext ctx;
 | 
				
			||||||
 | 
					    //ctx.palette.setColor(QPalette::Text, fontColor());
 | 
				
			||||||
 | 
					    //m_text->documentLayout()->draw(painter,ctx);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
//    m_layout.draw(ppainter,QPointF(marginSize(),0),);
 | 
					//    m_layout.draw(ppainter,QPointF(marginSize(),0),);
 | 
				
			||||||
//    ppainter->setFont(transformToSceneFont(font()));
 | 
					//    ppainter->setFont(transformToSceneFont(font()));
 | 
				
			||||||
//    QTextOption o;
 | 
					//    QTextOption o;
 | 
				
			||||||
@@ -186,6 +211,10 @@ void TextItem::Init()
 | 
				
			|||||||
//    m_text->setDefaultFont(transformToSceneFont(font()));
 | 
					//    m_text->setDefaultFont(transformToSceneFont(font()));
 | 
				
			||||||
    m_textSize=QSizeF();
 | 
					    m_textSize=QSizeF();
 | 
				
			||||||
    m_foregroundOpacity = 100;
 | 
					    m_foregroundOpacity = 100;
 | 
				
			||||||
 | 
					    m_underlines = false;
 | 
				
			||||||
 | 
					    m_adaptFontToSize = false;
 | 
				
			||||||
 | 
					    m_underlineLineSize = 1;
 | 
				
			||||||
 | 
					    m_lineSpacing = 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TextItem::setContent(const QString &value)
 | 
					void TextItem::setContent(const QString &value)
 | 
				
			||||||
@@ -204,9 +233,9 @@ void TextItem::setContent(const QString &value)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!isLoading()){
 | 
					        if (!isLoading()){
 | 
				
			||||||
          update(rect());
 | 
					            initText();
 | 
				
			||||||
          notify("content",oldValue,value);
 | 
					            update(rect());
 | 
				
			||||||
          //updateLayout();
 | 
					            notify("content",oldValue,value);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -223,7 +252,7 @@ void TextItem::updateItemSize(DataSourceManager* dataManager, RenderPass pass, i
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((m_textSize.height()>height()) && (m_autoHeight) ){
 | 
					    if ((m_textSize.height()>height()) && (m_autoHeight) ){
 | 
				
			||||||
        setHeight(m_textSize.height()+5);
 | 
					        setHeight(m_textSize.height()+borderLineSize()*2);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    BaseDesignIntf::updateItemSize(dataManager, pass, maxHeight);
 | 
					    BaseDesignIntf::updateItemSize(dataManager, pass, maxHeight);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -262,23 +291,91 @@ QString TextItem::replaceReturns(QString text)
 | 
				
			|||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TextItem::setTextFont(const QFont& value){
 | 
				
			||||||
 | 
					    m_text->setDefaultFont(value);
 | 
				
			||||||
 | 
					    if ((m_angle==Angle0)||(m_angle==Angle180)){
 | 
				
			||||||
 | 
					        m_text->setTextWidth(rect().width()-fakeMarginSize()*2);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        m_text->setTextWidth(rect().height()-fakeMarginSize()*2);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TextItem::adaptFontSize(){
 | 
				
			||||||
 | 
					    QFont _font = transformToSceneFont(font());
 | 
				
			||||||
 | 
					    do{
 | 
				
			||||||
 | 
					        setTextFont(_font);
 | 
				
			||||||
 | 
					        if (_font.pixelSize()>2)
 | 
				
			||||||
 | 
					            _font.setPixelSize(_font.pixelSize()-1);
 | 
				
			||||||
 | 
					        else break;
 | 
				
			||||||
 | 
					    } while(m_text->size().height()>this->height() || m_text->size().width()>(this->width())-fakeMarginSize()*2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					int TextItem::underlineLineSize() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return m_underlineLineSize;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TextItem::setUnderlineLineSize(int value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int oldValue = m_underlineLineSize;
 | 
				
			||||||
 | 
					    m_underlineLineSize = value;
 | 
				
			||||||
 | 
					    update();
 | 
				
			||||||
 | 
					    notify("underlineLineSize",oldValue,value);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int TextItem::lineSpacing() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return m_lineSpacing;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TextItem::setLineSpacing(int value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int oldValue = m_lineSpacing;
 | 
				
			||||||
 | 
					    m_lineSpacing = value;
 | 
				
			||||||
 | 
					    initText();
 | 
				
			||||||
 | 
					    update();
 | 
				
			||||||
 | 
					    notify("lineSpacing",oldValue,value);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TextItem::initText()
 | 
					void TextItem::initText()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QTextOption to;
 | 
					    QTextOption to;
 | 
				
			||||||
    to.setAlignment(m_alignment);
 | 
					    to.setAlignment(m_alignment);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (m_autoWidth!=MaxStringLength)
 | 
					    if (m_autoWidth!=MaxStringLength)
 | 
				
			||||||
        to.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
 | 
					        if (m_adaptFontToSize && (!(m_autoHeight || m_autoWidth)))
 | 
				
			||||||
 | 
					            to.setWrapMode(QTextOption::WordWrap);
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					            to.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
 | 
				
			||||||
    else to.setWrapMode(QTextOption::NoWrap);
 | 
					    else to.setWrapMode(QTextOption::NoWrap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_text->setDocumentMargin(0);
 | 
					    m_text->setDocumentMargin(0);
 | 
				
			||||||
    m_text->setDefaultTextOption(to);
 | 
					    m_text->setDefaultTextOption(to);
 | 
				
			||||||
    m_text->setDefaultFont(transformToSceneFont(font()));
 | 
					
 | 
				
			||||||
 | 
					    QFont _font = transformToSceneFont(font());
 | 
				
			||||||
 | 
					    if (m_adaptFontToSize && (!(m_autoHeight || m_autoWidth))){
 | 
				
			||||||
 | 
					        adaptFontSize();
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        setTextFont(transformToSceneFont(font()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    if ((m_angle==Angle0)||(m_angle==Angle180)){
 | 
					    if ((m_angle==Angle0)||(m_angle==Angle180)){
 | 
				
			||||||
        m_text->setTextWidth(rect().width()-fakeMarginSize()*2);
 | 
					        m_text->setTextWidth(rect().width()-fakeMarginSize()*2);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        m_text->setTextWidth(rect().height()-fakeMarginSize()*2);
 | 
					        m_text->setTextWidth(rect().height()-fakeMarginSize()*2);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    for ( QTextBlock block = m_text->begin(); block.isValid(); block = block.next())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        QTextCursor tc = QTextCursor(block);
 | 
				
			||||||
 | 
					        QTextBlockFormat fmt = block.blockFormat();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if(fmt.lineHeight() != m_lineSpacing) {
 | 
				
			||||||
 | 
					            fmt.setLineHeight(m_lineSpacing,QTextBlockFormat::LineDistanceHeight);
 | 
				
			||||||
 | 
					            tc.setBlockFormat( fmt );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_textSize=m_text->size();
 | 
					    m_textSize=m_text->size();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -320,9 +417,11 @@ bool TextItem::trimValue() const
 | 
				
			|||||||
    return m_trimValue;
 | 
					    return m_trimValue;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TextItem::setTrimValue(bool trimValue)
 | 
					void TextItem::setTrimValue(bool value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_trimValue = trimValue;
 | 
					    bool oldValue = m_trimValue;
 | 
				
			||||||
 | 
					    m_trimValue = value;
 | 
				
			||||||
 | 
					    notify("trimValue",oldValue,value);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -333,8 +432,9 @@ void TextItem::geometryChangedEvent(QRectF , QRectF)
 | 
				
			|||||||
//    } else {
 | 
					//    } else {
 | 
				
			||||||
//        m_text->setTextWidth(rect().height()-fakeMarginSize()*2);
 | 
					//        m_text->setTextWidth(rect().height()-fakeMarginSize()*2);
 | 
				
			||||||
//    }
 | 
					//    }
 | 
				
			||||||
//    m_textSize=m_text->size();
 | 
					 | 
				
			||||||
    if (itemMode() == DesignMode) initText();
 | 
					    if (itemMode() == DesignMode) initText();
 | 
				
			||||||
 | 
					    else if (adaptFontToSize()) initText();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool TextItem::isNeedUpdateSize(RenderPass pass) const
 | 
					bool TextItem::isNeedUpdateSize(RenderPass pass) const
 | 
				
			||||||
@@ -395,6 +495,17 @@ void TextItem::setAutoWidth(TextItem::AutoWidth value)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TextItem::setAdaptFontToSize(bool value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (m_adaptFontToSize!=value){
 | 
				
			||||||
 | 
					        bool oldValue = m_adaptFontToSize;
 | 
				
			||||||
 | 
					        m_adaptFontToSize=value;
 | 
				
			||||||
 | 
					        initText();
 | 
				
			||||||
 | 
					        invalidateRect(rect());
 | 
				
			||||||
 | 
					        notify("updateFontToSize",oldValue,value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool TextItem::canBeSplitted(int height) const
 | 
					bool TextItem::canBeSplitted(int height) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return height>(m_text->begin().layout()->lineAt(0).height());
 | 
					    return height>(m_text->begin().layout()->lineAt(0).height());
 | 
				
			||||||
@@ -409,8 +520,10 @@ BaseDesignIntf *TextItem::cloneUpperPart(int height, QObject *owner, QGraphicsIt
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    for (QTextBlock it=m_text->begin();it!=m_text->end();it=it.next()){
 | 
					    for (QTextBlock it=m_text->begin();it!=m_text->end();it=it.next()){
 | 
				
			||||||
        for (int i=0;i<it.layout()->lineCount();i++){
 | 
					        for (int i=0;i<it.layout()->lineCount();i++){
 | 
				
			||||||
          linesHeight+=it.layout()->lineAt(i).height();
 | 
					          linesHeight+=it.layout()->lineAt(i).height()+lineSpacing();
 | 
				
			||||||
          if (linesHeight>(height-(fakeMarginSize()*2+borderLineSize()*2))) {linesHeight-=it.layout()->lineAt(i).height(); goto loop_exit;}
 | 
					          if (linesHeight>(height-(fakeMarginSize()*2+borderLineSize()*2))) {
 | 
				
			||||||
 | 
					              linesHeight-=it.layout()->lineAt(i).height(); goto loop_exit;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
          tmpText+=it.text().mid(it.layout()->lineAt(i).textStart(),it.layout()->lineAt(i).textLength())+'\n';
 | 
					          tmpText+=it.text().mid(it.layout()->lineAt(i).textStart(),it.layout()->lineAt(i).textLength())+'\n';
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -433,7 +546,7 @@ BaseDesignIntf *TextItem::cloneBottomPart(int height, QObject *owner, QGraphicsI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    for (curBlock=m_text->begin();curBlock!=m_text->end();curBlock=curBlock.next()){
 | 
					    for (curBlock=m_text->begin();curBlock!=m_text->end();curBlock=curBlock.next()){
 | 
				
			||||||
        for (curLine=0;curLine<curBlock.layout()->lineCount();curLine++){
 | 
					        for (curLine=0;curLine<curBlock.layout()->lineCount();curLine++){
 | 
				
			||||||
            linesHeight+=curBlock.layout()->lineAt(curLine).height();
 | 
					            linesHeight+=curBlock.layout()->lineAt(curLine).height()+lineSpacing();
 | 
				
			||||||
            if (linesHeight>(height-(fakeMarginSize()*2+borderLineSize()*2))) {goto loop_exit;}
 | 
					            if (linesHeight>(height-(fakeMarginSize()*2+borderLineSize()*2))) {goto loop_exit;}
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -565,6 +678,16 @@ void TextItem::setForegroundOpacity(int value)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TextItem::setUnderlines(bool value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (m_underlines != value){
 | 
				
			||||||
 | 
					        bool oldValue = m_underlines;
 | 
				
			||||||
 | 
					        m_underlines = value;
 | 
				
			||||||
 | 
					        update();
 | 
				
			||||||
 | 
					        notify("underlines",oldValue,value);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} //namespace LimeReport
 | 
					} //namespace LimeReport
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,11 @@ class TextItem : public LimeReport::ContentItemDesignIntf {
 | 
				
			|||||||
    Q_PROPERTY(QColor fontColor READ fontColor WRITE setFontColorProperty)
 | 
					    Q_PROPERTY(QColor fontColor READ fontColor WRITE setFontColorProperty)
 | 
				
			||||||
    Q_PROPERTY(AngleType angle READ angle WRITE setAngle)
 | 
					    Q_PROPERTY(AngleType angle READ angle WRITE setAngle)
 | 
				
			||||||
    Q_PROPERTY(int foregroundOpacity READ foregroundOpacity WRITE setForegroundOpacity)
 | 
					    Q_PROPERTY(int foregroundOpacity READ foregroundOpacity WRITE setForegroundOpacity)
 | 
				
			||||||
 | 
					    Q_PROPERTY(bool underlines READ underlines WRITE setUnderlines)
 | 
				
			||||||
 | 
					    Q_PROPERTY(bool adaptFontToSize READ adaptFontToSize WRITE setAdaptFontToSize)
 | 
				
			||||||
    Q_PROPERTY(bool trimValue READ trimValue WRITE setTrimValue)
 | 
					    Q_PROPERTY(bool trimValue READ trimValue WRITE setTrimValue)
 | 
				
			||||||
 | 
					    Q_PROPERTY(int lineSpacing READ lineSpacing WRITE setLineSpacing)
 | 
				
			||||||
 | 
					    Q_PROPERTY(int underlineLineSize READ underlineLineSize WRITE setUnderlineLineSize)
 | 
				
			||||||
    Q_PROPERTY(bool allowHTML READ allowHTML WRITE setAllowHTML)
 | 
					    Q_PROPERTY(bool allowHTML READ allowHTML WRITE setAllowHTML)
 | 
				
			||||||
    Q_PROPERTY(bool allowHTMLInFields READ allowHTMLInFields WRITE setAllowHTMLInFields)
 | 
					    Q_PROPERTY(bool allowHTMLInFields READ allowHTMLInFields WRITE setAllowHTMLInFields)
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
@@ -72,9 +76,6 @@ public:
 | 
				
			|||||||
    QString content() const;
 | 
					    QString content() const;
 | 
				
			||||||
    void setContent(const QString& value);
 | 
					    void setContent(const QString& value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //void setMarginSize(int value);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    void setAlignment(Qt::Alignment value);
 | 
					    void setAlignment(Qt::Alignment value);
 | 
				
			||||||
    Qt::Alignment alignment(){return m_alignment;}
 | 
					    Qt::Alignment alignment(){return m_alignment;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -89,6 +90,9 @@ public:
 | 
				
			|||||||
    void setAutoWidth(AutoWidth value);
 | 
					    void setAutoWidth(AutoWidth value);
 | 
				
			||||||
    AutoWidth autoWidth() const {return m_autoWidth;}
 | 
					    AutoWidth autoWidth() const {return m_autoWidth;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void setAdaptFontToSize(bool value);
 | 
				
			||||||
 | 
					    bool adaptFontToSize() const {return m_adaptFontToSize;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool canBeSplitted(int height) const;
 | 
					    bool canBeSplitted(int height) const;
 | 
				
			||||||
    bool isSplittable() const { return true;}
 | 
					    bool isSplittable() const { return true;}
 | 
				
			||||||
    bool isEmpty() const{return m_text->isEmpty();}
 | 
					    bool isEmpty() const{return m_text->isEmpty();}
 | 
				
			||||||
@@ -108,10 +112,18 @@ public:
 | 
				
			|||||||
    void setAngle(const AngleType& value);
 | 
					    void setAngle(const AngleType& value);
 | 
				
			||||||
    int foregroundOpacity(){return m_foregroundOpacity;}
 | 
					    int foregroundOpacity(){return m_foregroundOpacity;}
 | 
				
			||||||
    void setForegroundOpacity(int value);
 | 
					    void setForegroundOpacity(int value);
 | 
				
			||||||
 | 
					    bool underlines(){return m_underlines;}
 | 
				
			||||||
 | 
					    void setUnderlines(bool value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool trimValue() const;
 | 
					    bool trimValue() const;
 | 
				
			||||||
    void setTrimValue(bool trimValue);
 | 
					    void setTrimValue(bool trimValue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int lineSpacing() const;
 | 
				
			||||||
 | 
					    void setLineSpacing(int value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int underlineLineSize() const;
 | 
				
			||||||
 | 
					    void setUnderlineLineSize(int value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bool allowHTML() const;
 | 
					    bool allowHTML() const;
 | 
				
			||||||
    void setAllowHTML(bool allowHTML);
 | 
					    void setAllowHTML(bool allowHTML);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -126,6 +138,8 @@ protected:
 | 
				
			|||||||
    int fakeMarginSize();
 | 
					    int fakeMarginSize();
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    void initText();
 | 
					    void initText();
 | 
				
			||||||
 | 
					    void setTextFont(const QFont &value);
 | 
				
			||||||
 | 
					    void adaptFontSize();
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    QString m_strText;
 | 
					    QString m_strText;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -137,7 +151,11 @@ private:
 | 
				
			|||||||
    QSizeF m_textSize;
 | 
					    QSizeF m_textSize;
 | 
				
			||||||
    AngleType m_angle;
 | 
					    AngleType m_angle;
 | 
				
			||||||
    int m_foregroundOpacity;
 | 
					    int m_foregroundOpacity;
 | 
				
			||||||
 | 
					    bool m_underlines;
 | 
				
			||||||
 | 
					    bool m_adaptFontToSize;
 | 
				
			||||||
    bool m_trimValue;
 | 
					    bool m_trimValue;
 | 
				
			||||||
 | 
					    int m_lineSpacing;
 | 
				
			||||||
 | 
					    int m_underlineLineSize;
 | 
				
			||||||
    bool m_allowHTML;
 | 
					    bool m_allowHTML;
 | 
				
			||||||
    bool m_allowHTMLInFields;
 | 
					    bool m_allowHTMLInFields;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,7 +87,8 @@ SOURCES += \
 | 
				
			|||||||
    $$REPORT_PATH/lrgroupfunctions.cpp \
 | 
					    $$REPORT_PATH/lrgroupfunctions.cpp \
 | 
				
			||||||
    $$REPORT_PATH/lrsimplecrypt.cpp \    
 | 
					    $$REPORT_PATH/lrsimplecrypt.cpp \    
 | 
				
			||||||
    $$REPORT_PATH/lraboutdialog.cpp \
 | 
					    $$REPORT_PATH/lraboutdialog.cpp \
 | 
				
			||||||
    $$REPORT_PATH/lrsettingdialog.cpp
 | 
					    $$REPORT_PATH/lrsettingdialog.cpp \
 | 
				
			||||||
 | 
					    $$REPORT_PATH/scriptbrowser/lrscriptbrowser.cpp
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
contains(CONFIG, zint){
 | 
					contains(CONFIG, zint){
 | 
				
			||||||
    SOURCES += $$REPORT_PATH/items/lrbarcodeitem.cpp
 | 
					    SOURCES += $$REPORT_PATH/items/lrbarcodeitem.cpp
 | 
				
			||||||
@@ -183,7 +184,8 @@ HEADERS += \
 | 
				
			|||||||
    $$REPORT_PATH/lraboutdialog.h \
 | 
					    $$REPORT_PATH/lraboutdialog.h \
 | 
				
			||||||
    $$REPORT_PATH/lrcallbackdatasourceintf.h \
 | 
					    $$REPORT_PATH/lrcallbackdatasourceintf.h \
 | 
				
			||||||
    $$REPORT_PATH/lrsettingdialog.h \
 | 
					    $$REPORT_PATH/lrsettingdialog.h \
 | 
				
			||||||
    $$PWD/lrpreviewreportwidget_p.h
 | 
					    $$REPORT_PATH/lrpreviewreportwidget_p.h \
 | 
				
			||||||
 | 
					    $$REPORT_PATH/scriptbrowser/lrscriptbrowser.h \
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
contains(CONFIG,zint){
 | 
					contains(CONFIG,zint){
 | 
				
			||||||
    HEADERS += $$REPORT_PATH/items/lrbarcodeitem.h
 | 
					    HEADERS += $$REPORT_PATH/items/lrbarcodeitem.h
 | 
				
			||||||
@@ -199,11 +201,13 @@ FORMS += \
 | 
				
			|||||||
    $$REPORT_PATH/lrpreviewreportwidget.ui \
 | 
					    $$REPORT_PATH/lrpreviewreportwidget.ui \
 | 
				
			||||||
    $$REPORT_PATH/items/lrtextitemeditor.ui \
 | 
					    $$REPORT_PATH/items/lrtextitemeditor.ui \
 | 
				
			||||||
    $$REPORT_PATH/lraboutdialog.ui \
 | 
					    $$REPORT_PATH/lraboutdialog.ui \
 | 
				
			||||||
    $$REPORT_PATH/lrsettingdialog.ui
 | 
					    $$REPORT_PATH/lrsettingdialog.ui \
 | 
				
			||||||
 | 
					    $$REPORT_PATH/scriptbrowser/lrscriptbrowser.ui \
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RESOURCES += \
 | 
					RESOURCES += \
 | 
				
			||||||
    $$REPORT_PATH/objectinspector/lobjectinspector.qrc \
 | 
					    $$REPORT_PATH/objectinspector/lobjectinspector.qrc \
 | 
				
			||||||
    $$REPORT_PATH/databrowser/lrdatabrowser.qrc \
 | 
					    $$REPORT_PATH/databrowser/lrdatabrowser.qrc \
 | 
				
			||||||
    $$REPORT_PATH/report.qrc \
 | 
					    $$REPORT_PATH/report.qrc \
 | 
				
			||||||
    $$REPORT_PATH/items/items.qrc
 | 
					    $$REPORT_PATH/items/items.qrc \
 | 
				
			||||||
 | 
					    $$REPORT_PATH/scriptbrowser/lrscriptbrowser.qrc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -681,6 +681,13 @@ void BandDesignIntf::initMode(ItemMode mode)
 | 
				
			|||||||
    BaseDesignIntf::initMode(mode);
 | 
					    BaseDesignIntf::initMode(mode);
 | 
				
			||||||
    if ((mode==PreviewMode)||(mode==PrintMode)){
 | 
					    if ((mode==PreviewMode)||(mode==PrintMode)){
 | 
				
			||||||
        m_bandMarker->setVisible(false);
 | 
					        m_bandMarker->setVisible(false);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        if (!m_bandMarker->scene() && this->scene()){
 | 
				
			||||||
 | 
					            this->scene()->addItem(m_bandMarker);
 | 
				
			||||||
 | 
					            m_bandMarker->setParentItem(this->parentItem());
 | 
				
			||||||
 | 
					            m_bandMarker->setHeight(this->height());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        m_bandMarker->setVisible(true);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,8 +74,8 @@ class DataSourceModel : public QAbstractItemModel{
 | 
				
			|||||||
public:
 | 
					public:
 | 
				
			||||||
    DataSourceModel():m_rootNode(new DataNode()){}
 | 
					    DataSourceModel():m_rootNode(new DataNode()){}
 | 
				
			||||||
    DataSourceModel(DataSourceManager* dataManager);
 | 
					    DataSourceModel(DataSourceManager* dataManager);
 | 
				
			||||||
    QModelIndex index(int row, int column, const QModelIndex &parent) const;
 | 
					 | 
				
			||||||
    ~DataSourceModel();
 | 
					    ~DataSourceModel();
 | 
				
			||||||
 | 
					    QModelIndex index(int row, int column, const QModelIndex &parent) const;
 | 
				
			||||||
    QModelIndex parent(const QModelIndex &child) const;
 | 
					    QModelIndex parent(const QModelIndex &child) const;
 | 
				
			||||||
    int rowCount(const QModelIndex &parent) const;
 | 
					    int rowCount(const QModelIndex &parent) const;
 | 
				
			||||||
    int columnCount(const QModelIndex &parent) const;
 | 
					    int columnCount(const QModelIndex &parent) const;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,17 @@ void GraphicsViewZoomer::setModifiers(Qt::KeyboardModifiers modifiers) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GraphicsViewZoomer::setZoomFactorBase(double value) {
 | 
					void GraphicsViewZoomer::setZoomFactorBase(double value) {
 | 
				
			||||||
  m_zoomFactorBase = value;
 | 
					    m_zoomFactorBase = value;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GraphicsViewZoomer::setView(QGraphicsView *view)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (m_view!=view){
 | 
				
			||||||
 | 
					        m_view->viewport()->removeEventFilter(this);
 | 
				
			||||||
 | 
					        m_view = view;
 | 
				
			||||||
 | 
					        m_view->viewport()->installEventFilter(this);
 | 
				
			||||||
 | 
					        m_view->setMouseTracking(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool GraphicsViewZoomer::eventFilter(QObject *object, QEvent *event) {
 | 
					bool GraphicsViewZoomer::eventFilter(QObject *object, QEvent *event) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,7 @@ public:
 | 
				
			|||||||
  void gentleZoom(double factor);
 | 
					  void gentleZoom(double factor);
 | 
				
			||||||
  void setModifiers(Qt::KeyboardModifiers modifiers);
 | 
					  void setModifiers(Qt::KeyboardModifiers modifiers);
 | 
				
			||||||
  void setZoomFactorBase(double value);
 | 
					  void setZoomFactorBase(double value);
 | 
				
			||||||
 | 
					  void setView(QGraphicsView* view);
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
  QGraphicsView* m_view;
 | 
					  QGraphicsView* m_view;
 | 
				
			||||||
  Qt::KeyboardModifiers m_modifiers;
 | 
					  Qt::KeyboardModifiers m_modifiers;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -123,6 +123,7 @@ namespace LimeReport {
 | 
				
			|||||||
            PageItemDesignIntf *pageItem();
 | 
					            PageItemDesignIntf *pageItem();
 | 
				
			||||||
            void setPageItem(PageItemDesignIntf::Ptr pageItem);
 | 
					            void setPageItem(PageItemDesignIntf::Ptr pageItem);
 | 
				
			||||||
            void setPageItems(QList<PageItemDesignIntf::Ptr> pages);
 | 
					            void setPageItems(QList<PageItemDesignIntf::Ptr> pages);
 | 
				
			||||||
 | 
					            QList<PageItemDesignIntf::Ptr> pageItems(){return m_reportPages;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            bool isItemInsertMode();
 | 
					            bool isItemInsertMode();
 | 
				
			||||||
            ReportEnginePrivate* reportEditor();
 | 
					            ReportEnginePrivate* reportEditor();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -139,5 +139,8 @@ private:
 | 
				
			|||||||
    bool m_fullPage;
 | 
					    bool m_fullPage;
 | 
				
			||||||
    bool m_oldPrintMode;
 | 
					    bool m_oldPrintMode;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef QList<PageItemDesignIntf::Ptr> ReportPages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif // LRPAGEITEM_H
 | 
					#endif // LRPAGEITEM_H
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,12 +61,25 @@ PreviewReportWindow::PreviewReportWindow(ReportEnginePrivate *report,QWidget *pa
 | 
				
			|||||||
    setCentralWidget(m_previewReportWidget);
 | 
					    setCentralWidget(m_previewReportWidget);
 | 
				
			||||||
    layout()->setContentsMargins(1,1,1,1);
 | 
					    layout()->setContentsMargins(1,1,1,1);
 | 
				
			||||||
    connect(m_previewReportWidget,SIGNAL(pageChanged(int)), this,SLOT(slotPageChanged(int)) );
 | 
					    connect(m_previewReportWidget,SIGNAL(pageChanged(int)), this,SLOT(slotPageChanged(int)) );
 | 
				
			||||||
 | 
					    connect(m_previewReportWidget->d_ptr->m_previewPage,SIGNAL(selectionChanged()),this,SLOT(slotSelectionChanged()));
 | 
				
			||||||
 | 
					    connect(m_pagesNavigator,SIGNAL(valueChanged(int)),this,SLOT(slotPageNavigatorChanged(int)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    m_fontEditor = new FontEditorWidget(m_previewReportWidget->d_ptr->m_previewPage,tr("Font"),this);
 | 
				
			||||||
 | 
					    m_fontEditor->setObjectName("fontTools");
 | 
				
			||||||
 | 
					    m_fontEditor->setIconSize(ui->toolBar->iconSize());
 | 
				
			||||||
 | 
					    m_textAlignmentEditor = new TextAlignmentEditorWidget(m_previewReportWidget->d_ptr->m_previewPage,tr("Text align"),this);
 | 
				
			||||||
 | 
					    m_textAlignmentEditor->setObjectName("textAlignmentTools");
 | 
				
			||||||
 | 
					    m_textAlignmentEditor->setIconSize(ui->toolBar->iconSize());
 | 
				
			||||||
 | 
					    addToolBar(Qt::TopToolBarArea,m_fontEditor);
 | 
				
			||||||
 | 
					    addToolBar(Qt::TopToolBarArea,m_textAlignmentEditor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_scalePercent = new QComboBox(this);
 | 
					    m_scalePercent = new QComboBox(this);
 | 
				
			||||||
    m_scalePercent->setEditable(true);
 | 
					    m_scalePercent->setEditable(true);
 | 
				
			||||||
    ui->toolBar->insertWidget(ui->actionZoomOut, m_scalePercent);
 | 
					    ui->toolBar->insertWidget(ui->actionZoomOut, m_scalePercent);
 | 
				
			||||||
    initPercentCombobox();
 | 
					    initPercentCombobox();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					//    connect(ui->graphicsView->verticalScrollBar(),SIGNAL(valueChanged(int)), this, SLOT(slotSliderMoved(int)));
 | 
				
			||||||
 | 
					    connect(ui->actionShowMessages, SIGNAL(triggered()), this, SLOT(slotShowErrors()));
 | 
				
			||||||
    connect(m_previewReportWidget, SIGNAL(scalePercentChanged(int)), this, SLOT(slotScalePercentChanged(int)));
 | 
					    connect(m_previewReportWidget, SIGNAL(scalePercentChanged(int)), this, SLOT(slotScalePercentChanged(int)));
 | 
				
			||||||
    connect(m_scalePercent, SIGNAL(currentIndexChanged(QString)), this, SLOT(scaleComboboxChanged(QString)));
 | 
					    connect(m_scalePercent, SIGNAL(currentIndexChanged(QString)), this, SLOT(scaleComboboxChanged(QString)));
 | 
				
			||||||
    restoreSetting();
 | 
					    restoreSetting();
 | 
				
			||||||
@@ -209,6 +222,12 @@ void PreviewReportWindow::moveEvent(QMoveEvent* e)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void PreviewReportWindow::showEvent(QShowEvent *)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_fontEditor->setVisible(ui->actionEdit_Mode->isChecked());
 | 
				
			||||||
 | 
					    m_textAlignmentEditor->setVisible(ui->actionEdit_Mode->isChecked());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void PreviewReportWindow::slotPrint()
 | 
					void PreviewReportWindow::slotPrint()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_previewReportWidget->print();
 | 
					    m_previewReportWidget->print();
 | 
				
			||||||
@@ -244,6 +263,28 @@ void PreviewReportWindow::slotShowErrors()
 | 
				
			|||||||
    m_previewReportWidget->setErrorsMesagesVisible(ui->actionShowMessages->isChecked());
 | 
					    m_previewReportWidget->setErrorsMesagesVisible(ui->actionShowMessages->isChecked());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void PreviewReportWindow::on_actionEdit_Mode_triggered(bool checked)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_previewReportWidget->d_ptr->m_previewPage->setItemMode((checked)?ItemModes(DesignMode):PreviewMode);
 | 
				
			||||||
 | 
					    m_textAlignmentEditor->setVisible(checked);
 | 
				
			||||||
 | 
					    m_fontEditor->setVisible(checked);
 | 
				
			||||||
 | 
					    //m_reportPages.at(m_currentPage)->setItemMode((checked)?DesignMode:PreviewMode);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void PreviewReportWindow::slotSelectionChanged()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QGraphicsScene* page=dynamic_cast<QGraphicsScene*>(sender());
 | 
				
			||||||
 | 
					    if (page){
 | 
				
			||||||
 | 
					        if (page->selectedItems().count()==1){
 | 
				
			||||||
 | 
					            BaseDesignIntf* item = dynamic_cast<BaseDesignIntf*>(page->selectedItems().at(0));
 | 
				
			||||||
 | 
					            if (item) {
 | 
				
			||||||
 | 
					                m_fontEditor->setItem(item);
 | 
				
			||||||
 | 
					                m_textAlignmentEditor->setItem(item);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ItemsReaderIntf *PreviewReportWindow::reader()
 | 
					ItemsReaderIntf *PreviewReportWindow::reader()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return m_reader.data();
 | 
					    return m_reader.data();
 | 
				
			||||||
@@ -312,4 +353,4 @@ void PreviewReportWindow::on_actionShowMessages_toggled(bool value)
 | 
				
			|||||||
   m_previewReportWidget->setErrorsMesagesVisible(value);
 | 
					   m_previewReportWidget->setErrorsMesagesVisible(value);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}// namespace LimeReport
 | 
					}// namespace LimeReport
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,9 @@
 | 
				
			|||||||
#include "serializators/lrxmlreader.h"
 | 
					#include "serializators/lrxmlreader.h"
 | 
				
			||||||
#include "lrpreviewreportwidget.h"
 | 
					#include "lrpreviewreportwidget.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "items/editors/lrfonteditorwidget.h"
 | 
				
			||||||
 | 
					#include "items/editors/lrtextalignmenteditorwidget.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace LimeReport {
 | 
					namespace LimeReport {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Ui {
 | 
					namespace Ui {
 | 
				
			||||||
@@ -66,6 +69,7 @@ protected:
 | 
				
			|||||||
    void closeEvent(QCloseEvent *);
 | 
					    void closeEvent(QCloseEvent *);
 | 
				
			||||||
    void resizeEvent(QResizeEvent *e);
 | 
					    void resizeEvent(QResizeEvent *e);
 | 
				
			||||||
    void moveEvent(QMoveEvent *e);
 | 
					    void moveEvent(QMoveEvent *e);
 | 
				
			||||||
 | 
					    void showEvent(QShowEvent *);
 | 
				
			||||||
public slots:
 | 
					public slots:
 | 
				
			||||||
    void slotPrint();
 | 
					    void slotPrint();
 | 
				
			||||||
    void slotPriorPage();
 | 
					    void slotPriorPage();
 | 
				
			||||||
@@ -75,6 +79,8 @@ public slots:
 | 
				
			|||||||
    void slotPageNavigatorChanged(int value);
 | 
					    void slotPageNavigatorChanged(int value);
 | 
				
			||||||
    void slotShowErrors();
 | 
					    void slotShowErrors();
 | 
				
			||||||
    void on_actionSaveToFile_triggered();
 | 
					    void on_actionSaveToFile_triggered();
 | 
				
			||||||
 | 
					    void slotSelectionChanged();
 | 
				
			||||||
 | 
					    void on_actionEdit_Mode_triggered(bool checked);
 | 
				
			||||||
    void slotFirstPage();
 | 
					    void slotFirstPage();
 | 
				
			||||||
    void slotLastPage();
 | 
					    void slotLastPage();
 | 
				
			||||||
    void slotPrintToPDF();
 | 
					    void slotPrintToPDF();
 | 
				
			||||||
@@ -90,8 +96,6 @@ private slots:
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
    ItemsReaderIntf* reader();
 | 
					    ItemsReaderIntf* reader();
 | 
				
			||||||
    void initPercentCombobox();
 | 
					    void initPercentCombobox();
 | 
				
			||||||
    //bool pageIsVisible(PageItemDesignIntf::Ptr page);
 | 
					 | 
				
			||||||
    //QRectF calcPageShift(PageItemDesignIntf::Ptr page);
 | 
					 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    Ui::PreviewReportWindow *ui;
 | 
					    Ui::PreviewReportWindow *ui;
 | 
				
			||||||
    QSpinBox* m_pagesNavigator;
 | 
					    QSpinBox* m_pagesNavigator;
 | 
				
			||||||
@@ -100,6 +104,9 @@ private:
 | 
				
			|||||||
    bool m_changingPage;
 | 
					    bool m_changingPage;
 | 
				
			||||||
    QSettings* m_settings;
 | 
					    QSettings* m_settings;
 | 
				
			||||||
    bool m_ownedSettings;
 | 
					    bool m_ownedSettings;
 | 
				
			||||||
 | 
					    FontEditorWidget* m_fontEditor;
 | 
				
			||||||
 | 
					    TextAlignmentEditorWidget* m_textAlignmentEditor;
 | 
				
			||||||
 | 
					    int m_priorScrolValue;
 | 
				
			||||||
    PreviewReportWidget* m_previewReportWidget;
 | 
					    PreviewReportWidget* m_previewReportWidget;
 | 
				
			||||||
    QComboBox* m_scalePercent;
 | 
					    QComboBox* m_scalePercent;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,6 +73,8 @@
 | 
				
			|||||||
    <bool>false</bool>
 | 
					    <bool>false</bool>
 | 
				
			||||||
   </attribute>
 | 
					   </attribute>
 | 
				
			||||||
   <addaction name="actionPrint"/>
 | 
					   <addaction name="actionPrint"/>
 | 
				
			||||||
 | 
					   <addaction name="actionEdit_Mode"/>
 | 
				
			||||||
 | 
					   <addaction name="actionSaveToFile"/>
 | 
				
			||||||
   <addaction name="actionPrint_To_PDF"/>
 | 
					   <addaction name="actionPrint_To_PDF"/>
 | 
				
			||||||
   <addaction name="separator"/>
 | 
					   <addaction name="separator"/>
 | 
				
			||||||
   <addaction name="actionZoomIn"/>
 | 
					   <addaction name="actionZoomIn"/>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,8 @@
 | 
				
			|||||||
#include <QVBoxLayout>
 | 
					#include <QVBoxLayout>
 | 
				
			||||||
#include <QFileDialog>
 | 
					#include <QFileDialog>
 | 
				
			||||||
#include <QApplication>
 | 
					#include <QApplication>
 | 
				
			||||||
 | 
					#include <QTabWidget>
 | 
				
			||||||
 | 
					#include <QMessageBox>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace LimeReport {
 | 
					namespace LimeReport {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,11 +51,10 @@ namespace LimeReport {
 | 
				
			|||||||
ReportDesignWidget::ReportDesignWidget(ReportEnginePrivate *report, QMainWindow *mainWindow, QWidget *parent) :
 | 
					ReportDesignWidget::ReportDesignWidget(ReportEnginePrivate *report, QMainWindow *mainWindow, QWidget *parent) :
 | 
				
			||||||
    QWidget(parent), m_mainWindow(mainWindow), m_verticalGridStep(10), m_horizontalGridStep(10), m_useGrid(false)
 | 
					    QWidget(parent), m_mainWindow(mainWindow), m_verticalGridStep(10), m_horizontalGridStep(10), m_useGrid(false)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QVBoxLayout *mainLayout = new QVBoxLayout(this);
 | 
					    m_tabWidget = new QTabWidget(this);
 | 
				
			||||||
    mainLayout->setContentsMargins(1,1,1,1);
 | 
					    m_tabWidget->setTabPosition(QTabWidget::South);
 | 
				
			||||||
    m_view = new QGraphicsView(qobject_cast<QWidget*>(this));
 | 
					    QVBoxLayout* mainLayout = new QVBoxLayout(this);
 | 
				
			||||||
    m_view->setBackgroundBrush(QBrush(Qt::gray));
 | 
					    mainLayout->addWidget(m_tabWidget);
 | 
				
			||||||
    mainLayout->addWidget(m_view);
 | 
					 | 
				
			||||||
    setLayout(mainLayout);
 | 
					    setLayout(mainLayout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!report) {
 | 
					    if (!report) {
 | 
				
			||||||
@@ -66,16 +67,15 @@ ReportDesignWidget::ReportDesignWidget(ReportEnginePrivate *report, QMainWindow
 | 
				
			|||||||
        if (!m_report->pageCount()) m_report->appendPage("page1");
 | 
					        if (!m_report->pageCount()) m_report->appendPage("page1");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    setActivePage(m_report->pageAt(0));
 | 
					    createTabs();
 | 
				
			||||||
    foreach(QGraphicsItem* item, activePage()->selectedItems()){
 | 
					
 | 
				
			||||||
        item->setSelected(false);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    connect(m_report,SIGNAL(pagesLoadFinished()),this,SLOT(slotPagesLoadFinished()));
 | 
					    connect(m_report,SIGNAL(pagesLoadFinished()),this,SLOT(slotPagesLoadFinished()));
 | 
				
			||||||
    connect(m_report,SIGNAL(cleared()),this,SIGNAL(cleared()));
 | 
					    connect(m_report,SIGNAL(cleared()),this,SIGNAL(cleared()));
 | 
				
			||||||
    m_view->scale(0.5,0.5);
 | 
					    connect(m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(slotCurrentTabChanged(int)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //m_instance=this;
 | 
					    //m_instance=this;
 | 
				
			||||||
    //m_view->viewport()->installEventFilter(this);
 | 
					    m_scriptEditor->setPlainText(report->scriptContext()->initScript());
 | 
				
			||||||
    m_zoomer = new GraphicsViewZoomer(m_view);
 | 
					    m_zoomer = new GraphicsViewZoomer(activeView());
 | 
				
			||||||
#ifdef Q_OS_WIN
 | 
					#ifdef Q_OS_WIN
 | 
				
			||||||
    m_defaultFont = QFont("Arial",10);
 | 
					    m_defaultFont = QFont("Arial",10);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -133,20 +133,43 @@ void ReportDesignWidget::loadState(QSettings* settings)
 | 
				
			|||||||
    if (v.isValid()){
 | 
					    if (v.isValid()){
 | 
				
			||||||
        m_useGrid = v.toBool();
 | 
					        m_useGrid = v.toBool();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    settings->endGroup();
 | 
					    settings->endGroup();
 | 
				
			||||||
 | 
					 | 
				
			||||||
    applySettings();
 | 
					    applySettings();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWidget::createTabs(){
 | 
				
			||||||
 | 
					    for (int i = 0; i<m_report->pageCount();++i){
 | 
				
			||||||
 | 
					        QGraphicsView* view = new QGraphicsView(qobject_cast<QWidget*>(this));
 | 
				
			||||||
 | 
					        view->setBackgroundBrush(QBrush(Qt::gray));
 | 
				
			||||||
 | 
					        view->setFrameShape(QFrame::NoFrame);
 | 
				
			||||||
 | 
					        view->setScene(m_report->pageAt(i));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach(QGraphicsItem* item, m_report->pageAt(i)->selectedItems()){
 | 
				
			||||||
 | 
					            item->setSelected(false);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        view->centerOn(0,0);
 | 
				
			||||||
 | 
					        view->scale(0.5,0.5);
 | 
				
			||||||
 | 
					        connectPage(m_report->pageAt(i));
 | 
				
			||||||
 | 
					        m_tabWidget->addTab(view,QIcon(),tr("Page")+QString::number(i+1));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    m_scriptEditor = new QTextEdit(this);
 | 
				
			||||||
 | 
					    m_tabWidget->addTab(m_scriptEditor,QIcon(),tr("Script"));
 | 
				
			||||||
 | 
					    m_tabWidget->setCurrentIndex(0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ReportDesignWidget::~ReportDesignWidget()
 | 
					ReportDesignWidget::~ReportDesignWidget()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    delete m_zoomer;
 | 
					    delete m_zoomer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::setActivePage(PageDesignIntf *page)
 | 
					QGraphicsView* ReportDesignWidget::activeView(){
 | 
				
			||||||
 | 
					    return dynamic_cast<QGraphicsView*>(m_tabWidget->currentWidget());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWidget::connectPage(PageDesignIntf *page)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_view->setScene(page);
 | 
					 | 
				
			||||||
    connect(page,SIGNAL(itemInserted(LimeReport::PageDesignIntf*,QPointF,QString)),this,SIGNAL(itemInserted(LimeReport::PageDesignIntf*,QPointF,QString)));
 | 
					    connect(page,SIGNAL(itemInserted(LimeReport::PageDesignIntf*,QPointF,QString)),this,SIGNAL(itemInserted(LimeReport::PageDesignIntf*,QPointF,QString)));
 | 
				
			||||||
    connect(page,SIGNAL(itemInsertCanceled(QString)),this,SIGNAL(itemInsertCanceled(QString)));
 | 
					    connect(page,SIGNAL(itemInsertCanceled(QString)),this,SIGNAL(itemInsertCanceled(QString)));
 | 
				
			||||||
    connect(page,SIGNAL(itemPropertyChanged(QString,QString,QVariant,QVariant)),this,SIGNAL(itemPropertyChanged(QString,QString,QVariant,QVariant)));
 | 
					    connect(page,SIGNAL(itemPropertyChanged(QString,QString,QVariant,QVariant)),this,SIGNAL(itemPropertyChanged(QString,QString,QVariant,QVariant)));
 | 
				
			||||||
@@ -166,48 +189,55 @@ void ReportDesignWidget::setActivePage(PageDesignIntf *page)
 | 
				
			|||||||
    connect(page, SIGNAL(pageUpdateFinished(LimeReport::PageDesignIntf*)),
 | 
					    connect(page, SIGNAL(pageUpdateFinished(LimeReport::PageDesignIntf*)),
 | 
				
			||||||
            this, SIGNAL(activePageUpdated(LimeReport::PageDesignIntf*)));
 | 
					            this, SIGNAL(activePageUpdated(LimeReport::PageDesignIntf*)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_view->centerOn(0, 0);
 | 
					    //activeView()->centerOn(0,0);
 | 
				
			||||||
    emit activePageChanged();
 | 
					    emit activePageChanged();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::createStartPage()
 | 
					void ReportDesignWidget::createStartPage()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    PageDesignIntf* reportPage = m_report->appendPage("page1");
 | 
					    m_report->appendPage("page1");
 | 
				
			||||||
    setActivePage(reportPage);
 | 
					    createTabs();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::removeDatasource(const QString &datasourceName)
 | 
					void ReportDesignWidget::removeDatasource(const QString &datasourceName)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_report->dataManager()->removeDatasource(datasourceName);
 | 
					    if (m_report->dataManager())
 | 
				
			||||||
 | 
					        m_report->dataManager()->removeDatasource(datasourceName);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::addBand(const QString &bandType)
 | 
					void ReportDesignWidget::addBand(const QString &bandType)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->addBand(bandType);
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->addBand(bandType);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::addBand(BandDesignIntf::BandsType bandType)
 | 
					void ReportDesignWidget::addBand(BandDesignIntf::BandsType bandType)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->addBand(bandType);
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->addBand(bandType);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::startInsertMode(const QString &itemType)
 | 
					void ReportDesignWidget::startInsertMode(const QString &itemType)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->startInsertMode(itemType);
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->startInsertMode(itemType);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::startEditMode()
 | 
					void ReportDesignWidget::startEditMode()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->startEditMode();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->startEditMode();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PageDesignIntf * ReportDesignWidget::activePage()
 | 
					PageDesignIntf * ReportDesignWidget::activePage()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return qobject_cast<PageDesignIntf*>(m_view->scene());
 | 
					    if (activeView())
 | 
				
			||||||
 | 
					        return qobject_cast<PageDesignIntf*>(activeView()->scene());
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QList<QGraphicsItem *> ReportDesignWidget::selectedItems(){
 | 
					QList<QGraphicsItem *> ReportDesignWidget::selectedItems(){
 | 
				
			||||||
    return m_view->scene()->selectedItems();
 | 
					    return activePage()->selectedItems();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::deleteItem(QGraphicsItem *item){
 | 
					void ReportDesignWidget::deleteItem(QGraphicsItem *item){
 | 
				
			||||||
@@ -227,11 +257,13 @@ void ReportDesignWidget::slotItemSelected(BaseDesignIntf *item){
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::saveToFile(const QString &fileName){
 | 
					void ReportDesignWidget::saveToFile(const QString &fileName){
 | 
				
			||||||
 | 
					    m_report->scriptContext()->setInitScript(m_scriptEditor->toPlainText());
 | 
				
			||||||
    m_report->saveToFile(fileName);
 | 
					    m_report->saveToFile(fileName);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ReportDesignWidget::save()
 | 
					bool ReportDesignWidget::save()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    m_report->scriptContext()->setInitScript(m_scriptEditor->toPlainText());
 | 
				
			||||||
    if (!m_report->reportFileName().isEmpty()){
 | 
					    if (!m_report->reportFileName().isEmpty()){
 | 
				
			||||||
        if (m_report->saveToFile()){
 | 
					        if (m_report->saveToFile()){
 | 
				
			||||||
            m_report->emitSaveFinished();
 | 
					            m_report->emitSaveFinished();
 | 
				
			||||||
@@ -254,24 +286,36 @@ bool ReportDesignWidget::save()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ReportDesignWidget::loadFromFile(const QString &fileName)
 | 
					bool ReportDesignWidget::loadFromFile(const QString &fileName)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (!m_report->loadFromFile(fileName)) return false;
 | 
					    if (m_report->loadFromFile(fileName)){
 | 
				
			||||||
    setActivePage(m_report->pageAt(0));
 | 
					        createTabs();
 | 
				
			||||||
    return true;
 | 
					        //connectPage(m_report->pageAt(0));
 | 
				
			||||||
 | 
					        m_scriptEditor->setPlainText(m_report->scriptContext()->initScript());
 | 
				
			||||||
 | 
					        emit loaded();
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        QMessageBox::critical(this,tr("Error"),tr("Wrong file format"));
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::scale(qreal sx, qreal sy)
 | 
					void ReportDesignWidget::scale(qreal sx, qreal sy)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_view->scale(sx,sy);
 | 
					    //m_view->scale(sx,sy);
 | 
				
			||||||
 | 
					    if (activeView()) activeView()->scale(sx,sy);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QString ReportDesignWidget::reportFileName()
 | 
					QString ReportDesignWidget::reportFileName()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return m_report->reportFileName();
 | 
					    if (m_report)
 | 
				
			||||||
 | 
					        return m_report->reportFileName();
 | 
				
			||||||
 | 
					    return QString();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ReportDesignWidget::isNeedToSave()
 | 
					bool ReportDesignWidget::isNeedToSave()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return m_report->isNeedToSave();
 | 
					    if(m_report)
 | 
				
			||||||
 | 
					        return m_report->isNeedToSave();
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ReportDesignWidget::emitLoadReport()
 | 
					bool ReportDesignWidget::emitLoadReport()
 | 
				
			||||||
@@ -281,82 +325,98 @@ bool ReportDesignWidget::emitLoadReport()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::updateSize()
 | 
					void ReportDesignWidget::updateSize()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->slotUpdateItemSize();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->slotUpdateItemSize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::undo()
 | 
					void ReportDesignWidget::undo()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->undo();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->undo();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::redo()
 | 
					void ReportDesignWidget::redo()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->redo();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->redo();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::copy()
 | 
					void ReportDesignWidget::copy()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->copy();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->copy();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::paste()
 | 
					void ReportDesignWidget::paste()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->paste();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->paste();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::cut()
 | 
					void ReportDesignWidget::cut()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->cut();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->cut();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::brinToFront()
 | 
					void ReportDesignWidget::brinToFront()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->bringToFront();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->bringToFront();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::sendToBack()
 | 
					void ReportDesignWidget::sendToBack()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->sendToBack();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->sendToBack();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::alignToLeft()
 | 
					void ReportDesignWidget::alignToLeft()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->alignToLeft();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->alignToLeft();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::alignToRight()
 | 
					void ReportDesignWidget::alignToRight()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->alignToRigth();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->alignToRigth();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::alignToVCenter()
 | 
					void ReportDesignWidget::alignToVCenter()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->alignToVCenter();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->alignToVCenter();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::alignToTop()
 | 
					void ReportDesignWidget::alignToTop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->alignToTop();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->alignToTop();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::alignToBottom()
 | 
					void ReportDesignWidget::alignToBottom()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->alignToBottom();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->alignToBottom();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::alignToHCenter()
 | 
					void ReportDesignWidget::alignToHCenter()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->alignToHCenter();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->alignToHCenter();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::sameHeight()
 | 
					void ReportDesignWidget::sameHeight()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->sameHeight();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->sameHeight();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::sameWidth()
 | 
					void ReportDesignWidget::sameWidth()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->sameWidth();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->sameWidth();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::editLayoutMode(bool value)
 | 
					void ReportDesignWidget::editLayoutMode(bool value)
 | 
				
			||||||
@@ -370,22 +430,74 @@ void ReportDesignWidget::editLayoutMode(bool value)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::addHLayout()
 | 
					void ReportDesignWidget::addHLayout()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->addHLayout();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->addHLayout();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::setFont(const QFont& font)
 | 
					void ReportDesignWidget::setFont(const QFont& font)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->setFont(font);
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->setFont(font);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::setTextAlign(const bool& horizontalAlign, const Qt::AlignmentFlag& alignment)
 | 
					void ReportDesignWidget::setTextAlign(const bool& horizontalAlign, const Qt::AlignmentFlag& alignment)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->changeSelectedGrpoupTextAlignPropperty(horizontalAlign, alignment);
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->changeSelectedGrpoupTextAlignPropperty(horizontalAlign, alignment);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::setBorders(const BaseDesignIntf::BorderLines& borders)
 | 
					void ReportDesignWidget::setBorders(const BaseDesignIntf::BorderLines& borders)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    activePage()->setBorders(borders);
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        activePage()->setBorders(borders);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWidget::previewReport()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    report()->scriptContext()->setInitScript(m_scriptEditor->toPlainText());
 | 
				
			||||||
 | 
					    report()->previewReport();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWidget::printReport()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    report()->scriptContext()->setInitScript(m_scriptEditor->toPlainText());
 | 
				
			||||||
 | 
					    setCursor(Qt::WaitCursor);
 | 
				
			||||||
 | 
					    report()->printReport();
 | 
				
			||||||
 | 
					    setCursor(Qt::ArrowCursor);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWidget::addPage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QGraphicsView* view = new QGraphicsView(qobject_cast<QWidget*>(this));
 | 
				
			||||||
 | 
					    view->setBackgroundBrush(QBrush(Qt::gray));
 | 
				
			||||||
 | 
					    view->setFrameShape(QFrame::NoFrame);
 | 
				
			||||||
 | 
					    PageDesignIntf* page = m_report->appendPage("page"+QString::number(m_report->pageCount()+1));
 | 
				
			||||||
 | 
					    view->setScene(page);
 | 
				
			||||||
 | 
					    int index = m_report->pageCount()-1;
 | 
				
			||||||
 | 
					    m_tabWidget->insertTab(index,view,QIcon(),tr("Page")+QString::number(m_report->pageCount()));
 | 
				
			||||||
 | 
					    m_tabWidget->setCurrentIndex(index);
 | 
				
			||||||
 | 
					    connectPage(page);
 | 
				
			||||||
 | 
					    view->scale(0.5,0.5);
 | 
				
			||||||
 | 
					    view->centerOn(0,0);
 | 
				
			||||||
 | 
					    emit pageAdded(page);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWidget::deleteCurrentPage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (m_report->pageCount()>1){
 | 
				
			||||||
 | 
					        QGraphicsView* view = dynamic_cast<QGraphicsView*>(m_tabWidget->currentWidget());
 | 
				
			||||||
 | 
					        if (view){
 | 
				
			||||||
 | 
					            PageDesignIntf* page = dynamic_cast<PageDesignIntf*>(view->scene());
 | 
				
			||||||
 | 
					            if (page){
 | 
				
			||||||
 | 
					                if (m_report->deletePage(page)){
 | 
				
			||||||
 | 
					                    int index = m_tabWidget->currentIndex();
 | 
				
			||||||
 | 
					                    m_tabWidget->removeTab(m_tabWidget->currentIndex());
 | 
				
			||||||
 | 
					                    if (index>0) m_tabWidget->setCurrentIndex(index-1);
 | 
				
			||||||
 | 
					                    emit pageDeleted();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::editSetting()
 | 
					void ReportDesignWidget::editSetting()
 | 
				
			||||||
@@ -421,12 +533,16 @@ void ReportDesignWidget::setUseGrid(bool value)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bool ReportDesignWidget::isCanUndo()
 | 
					bool ReportDesignWidget::isCanUndo()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return activePage()->isCanUndo();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        return activePage()->isCanUndo();
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ReportDesignWidget::isCanRedo()
 | 
					bool ReportDesignWidget::isCanRedo()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return activePage()->isCanRedo();
 | 
					    if (activePage())
 | 
				
			||||||
 | 
					        return activePage()->isCanRedo();
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::slotSelectionChanged()
 | 
					void ReportDesignWidget::slotSelectionChanged()
 | 
				
			||||||
@@ -449,10 +565,20 @@ DataSourceManager* ReportDesignWidget::dataManager()
 | 
				
			|||||||
    return m_report->dataManager();
 | 
					    return m_report->dataManager();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ScriptEngineManager* ReportDesignWidget::scriptManager()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return m_report->scriptManager();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ScriptEngineContext*ReportDesignWidget::scriptContext()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return m_report->scriptContext();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::slotPagesLoadFinished()
 | 
					void ReportDesignWidget::slotPagesLoadFinished()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    applySettings();
 | 
					    applySettings();
 | 
				
			||||||
    setActivePage(m_report->pageAt(0));
 | 
					    //setActivePage(m_report->pageAt(0));
 | 
				
			||||||
    emit loaded();
 | 
					    emit loaded();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -462,7 +588,19 @@ void ReportDesignWidget::slotDatasourceCollectionLoaded(const QString & /*collec
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ReportDesignWidget::slotSceneRectChanged(QRectF)
 | 
					void ReportDesignWidget::slotSceneRectChanged(QRectF)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_view->centerOn(0,0);
 | 
					    if (activeView()) activeView()->centerOn(0,0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWidget::slotCurrentTabChanged(int index)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QGraphicsView* view = dynamic_cast<QGraphicsView*>(m_tabWidget->widget(index));
 | 
				
			||||||
 | 
					    if (view) {
 | 
				
			||||||
 | 
					        if (view->scene()){
 | 
				
			||||||
 | 
					            foreach (QGraphicsItem* item, view->scene()->selectedItems()) item->setSelected(false);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        m_zoomer->setView(view);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    emit activePageChanged();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool ReportDesignWidget::eventFilter(QObject *target, QEvent *event)
 | 
					bool ReportDesignWidget::eventFilter(QObject *target, QEvent *event)
 | 
				
			||||||
@@ -480,6 +618,10 @@ bool ReportDesignWidget::eventFilter(QObject *target, QEvent *event)
 | 
				
			|||||||
void ReportDesignWidget::clear()
 | 
					void ReportDesignWidget::clear()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_report->clearReport();
 | 
					    m_report->clearReport();
 | 
				
			||||||
 | 
					    m_tabWidget->clear();
 | 
				
			||||||
 | 
					    m_report->setReportFileName("");
 | 
				
			||||||
 | 
					    m_report->scriptContext()->setInitScript("");
 | 
				
			||||||
 | 
					    m_scriptEditor->setPlainText("");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@
 | 
				
			|||||||
#include <QObject>
 | 
					#include <QObject>
 | 
				
			||||||
#include <QGraphicsView>
 | 
					#include <QGraphicsView>
 | 
				
			||||||
#include <QMainWindow>
 | 
					#include <QMainWindow>
 | 
				
			||||||
 | 
					#include <QTextEdit>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "lrpagedesignintf.h"
 | 
					#include "lrpagedesignintf.h"
 | 
				
			||||||
#include "lrdatadesignintf.h"
 | 
					#include "lrdatadesignintf.h"
 | 
				
			||||||
@@ -59,6 +60,8 @@ public:
 | 
				
			|||||||
    void createStartPage();
 | 
					    void createStartPage();
 | 
				
			||||||
    void clear();
 | 
					    void clear();
 | 
				
			||||||
    DataSourceManager* dataManager();
 | 
					    DataSourceManager* dataManager();
 | 
				
			||||||
 | 
					    ScriptEngineManager* scriptManager();
 | 
				
			||||||
 | 
					    ScriptEngineContext* scriptContext();
 | 
				
			||||||
    void removeDatasource(const QString& datasourceName);
 | 
					    void removeDatasource(const QString& datasourceName);
 | 
				
			||||||
    void addBand(const QString& bandType);
 | 
					    void addBand(const QString& bandType);
 | 
				
			||||||
    void addBand(BandDesignIntf::BandsType bandType);
 | 
					    void addBand(BandDesignIntf::BandsType bandType);
 | 
				
			||||||
@@ -69,6 +72,7 @@ public:
 | 
				
			|||||||
    bool isCanRedo();
 | 
					    bool isCanRedo();
 | 
				
			||||||
    void deleteItem(QGraphicsItem *item);
 | 
					    void deleteItem(QGraphicsItem *item);
 | 
				
			||||||
    PageDesignIntf* activePage();
 | 
					    PageDesignIntf* activePage();
 | 
				
			||||||
 | 
					    QGraphicsView* activeView();
 | 
				
			||||||
    QList<QGraphicsItem *> selectedItems();
 | 
					    QList<QGraphicsItem *> selectedItems();
 | 
				
			||||||
    QStringList datasourcesNames();
 | 
					    QStringList datasourcesNames();
 | 
				
			||||||
    void scale( qreal sx, qreal sy);
 | 
					    void scale( qreal sx, qreal sy);
 | 
				
			||||||
@@ -90,7 +94,7 @@ public slots:
 | 
				
			|||||||
    bool save();
 | 
					    bool save();
 | 
				
			||||||
    bool loadFromFile(const QString&);
 | 
					    bool loadFromFile(const QString&);
 | 
				
			||||||
    void deleteSelectedItems();
 | 
					    void deleteSelectedItems();
 | 
				
			||||||
    void setActivePage(PageDesignIntf* page);
 | 
					    void connectPage(PageDesignIntf* page);
 | 
				
			||||||
    void undo();
 | 
					    void undo();
 | 
				
			||||||
    void redo();
 | 
					    void redo();
 | 
				
			||||||
    void copy();
 | 
					    void copy();
 | 
				
			||||||
@@ -113,12 +117,17 @@ public slots:
 | 
				
			|||||||
    void setBorders(const BaseDesignIntf::BorderLines& borders);
 | 
					    void setBorders(const BaseDesignIntf::BorderLines& borders);
 | 
				
			||||||
    void editSetting();
 | 
					    void editSetting();
 | 
				
			||||||
    void setUseGrid(bool value);
 | 
					    void setUseGrid(bool value);
 | 
				
			||||||
 | 
					    void previewReport();
 | 
				
			||||||
 | 
					    void printReport();
 | 
				
			||||||
 | 
					    void addPage();
 | 
				
			||||||
 | 
					    void deleteCurrentPage();
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
    void slotItemSelected(LimeReport::BaseDesignIntf *item);
 | 
					    void slotItemSelected(LimeReport::BaseDesignIntf *item);
 | 
				
			||||||
    void slotSelectionChanged();
 | 
					    void slotSelectionChanged();
 | 
				
			||||||
    void slotPagesLoadFinished();
 | 
					    void slotPagesLoadFinished();
 | 
				
			||||||
    void slotDatasourceCollectionLoaded(const QString&);
 | 
					    void slotDatasourceCollectionLoaded(const QString&);
 | 
				
			||||||
    void slotSceneRectChanged(QRectF);
 | 
					    void slotSceneRectChanged(QRectF);
 | 
				
			||||||
 | 
					    void slotCurrentTabChanged(int index);
 | 
				
			||||||
signals:
 | 
					signals:
 | 
				
			||||||
    void insertModeStarted();
 | 
					    void insertModeStarted();
 | 
				
			||||||
    void itemInserted(LimeReport::PageDesignIntf*,QPointF,const QString&);
 | 
					    void itemInserted(LimeReport::PageDesignIntf*,QPointF,const QString&);
 | 
				
			||||||
@@ -135,13 +144,19 @@ signals:
 | 
				
			|||||||
    void bandDeleted(LimeReport::PageDesignIntf*, LimeReport::BandDesignIntf*);
 | 
					    void bandDeleted(LimeReport::PageDesignIntf*, LimeReport::BandDesignIntf*);
 | 
				
			||||||
    void itemAdded(LimeReport::PageDesignIntf*, LimeReport::BaseDesignIntf*);
 | 
					    void itemAdded(LimeReport::PageDesignIntf*, LimeReport::BaseDesignIntf*);
 | 
				
			||||||
    void itemDeleted(LimeReport::PageDesignIntf*, LimeReport::BaseDesignIntf*);
 | 
					    void itemDeleted(LimeReport::PageDesignIntf*, LimeReport::BaseDesignIntf*);
 | 
				
			||||||
 | 
					    void pageAdded(PageDesignIntf* page);
 | 
				
			||||||
 | 
					    void pageDeleted();
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					    void createTabs();
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    bool eventFilter(QObject *target, QEvent *event);
 | 
					    bool eventFilter(QObject *target, QEvent *event);
 | 
				
			||||||
    ReportDesignWidget(ReportEnginePrivate* report,QMainWindow *mainWindow,QWidget *parent = 0);
 | 
					    ReportDesignWidget(ReportEnginePrivate* report,QMainWindow *mainWindow,QWidget *parent = 0);
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    ReportEnginePrivate* m_report;
 | 
					    ReportEnginePrivate* m_report;
 | 
				
			||||||
    QGraphicsView *m_view;
 | 
					    QGraphicsView *m_view;
 | 
				
			||||||
 | 
					    QTextEdit* m_scriptEditor;
 | 
				
			||||||
    QMainWindow *m_mainWindow;
 | 
					    QMainWindow *m_mainWindow;
 | 
				
			||||||
 | 
					    QTabWidget* m_tabWidget;
 | 
				
			||||||
    GraphicsViewZoomer* m_zoomer;
 | 
					    GraphicsViewZoomer* m_zoomer;
 | 
				
			||||||
    QFont m_defaultFont;
 | 
					    QFont m_defaultFont;
 | 
				
			||||||
    int m_verticalGridStep;
 | 
					    int m_verticalGridStep;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,6 +47,7 @@
 | 
				
			|||||||
#include "lrbasedesignobjectmodel.h"
 | 
					#include "lrbasedesignobjectmodel.h"
 | 
				
			||||||
#include "lrreportdesignwidget.h"
 | 
					#include "lrreportdesignwidget.h"
 | 
				
			||||||
#include "lrdatabrowser.h"
 | 
					#include "lrdatabrowser.h"
 | 
				
			||||||
 | 
					#include "scriptbrowser/lrscriptbrowser.h"
 | 
				
			||||||
#include "lrbasedesignintf.h"
 | 
					#include "lrbasedesignintf.h"
 | 
				
			||||||
#include "lrpagedesignintf.h"
 | 
					#include "lrpagedesignintf.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -70,6 +71,7 @@ ReportDesignWindow::ReportDesignWindow(ReportEnginePrivate *report, QWidget *par
 | 
				
			|||||||
    createToolBars();
 | 
					    createToolBars();
 | 
				
			||||||
    createObjectInspector();
 | 
					    createObjectInspector();
 | 
				
			||||||
    createDataWindow();
 | 
					    createDataWindow();
 | 
				
			||||||
 | 
					    createScriptWindow();
 | 
				
			||||||
    createObjectsBrowser();
 | 
					    createObjectsBrowser();
 | 
				
			||||||
    m_instance=this;
 | 
					    m_instance=this;
 | 
				
			||||||
    m_statusBar=new QStatusBar(this);
 | 
					    m_statusBar=new QStatusBar(this);
 | 
				
			||||||
@@ -96,6 +98,15 @@ void ReportDesignWindow::createActions()
 | 
				
			|||||||
    m_newReportAction->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_N));
 | 
					    m_newReportAction->setShortcut(QKeySequence(Qt::CTRL+Qt::Key_N));
 | 
				
			||||||
    connect(m_newReportAction,SIGNAL(triggered()),this,SLOT(slotNewReport()));
 | 
					    connect(m_newReportAction,SIGNAL(triggered()),this,SLOT(slotNewReport()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    m_newPageAction = new QAction(tr("New Report Page"),this);
 | 
				
			||||||
 | 
					    m_newPageAction->setIcon(QIcon(":/report/images/addPage"));
 | 
				
			||||||
 | 
					    connect(m_newPageAction,SIGNAL(triggered()),this,SLOT(slotNewPage()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    m_deletePageAction = new QAction(tr("Delete Report Page"),this);
 | 
				
			||||||
 | 
					    m_deletePageAction->setIcon(QIcon(":/report/images/deletePage"));
 | 
				
			||||||
 | 
					    connect(m_deletePageAction,SIGNAL(triggered()),this,SLOT(slotDeletePage()));
 | 
				
			||||||
 | 
					    m_deletePageAction->setEnabled(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_editModeAction = new QAction(tr("Edit Mode"),this);
 | 
					    m_editModeAction = new QAction(tr("Edit Mode"),this);
 | 
				
			||||||
    m_editModeAction->setIcon(QIcon(":/report/images/editMode"));
 | 
					    m_editModeAction->setIcon(QIcon(":/report/images/editMode"));
 | 
				
			||||||
    m_editModeAction->setCheckable(true);
 | 
					    m_editModeAction->setCheckable(true);
 | 
				
			||||||
@@ -261,6 +272,10 @@ void ReportDesignWindow::createToolBars()
 | 
				
			|||||||
    m_mainToolBar->addAction(m_settingsAction);
 | 
					    m_mainToolBar->addAction(m_settingsAction);
 | 
				
			||||||
    m_mainToolBar->addSeparator();
 | 
					    m_mainToolBar->addSeparator();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    m_mainToolBar->addAction(m_newPageAction);
 | 
				
			||||||
 | 
					    m_mainToolBar->addAction(m_deletePageAction);
 | 
				
			||||||
 | 
					    m_mainToolBar->addSeparator();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    m_mainToolBar->addAction(m_copyAction);
 | 
					    m_mainToolBar->addAction(m_copyAction);
 | 
				
			||||||
    m_mainToolBar->addAction(m_pasteAction);
 | 
					    m_mainToolBar->addAction(m_pasteAction);
 | 
				
			||||||
    m_mainToolBar->addAction(m_cutAction);
 | 
					    m_mainToolBar->addAction(m_cutAction);
 | 
				
			||||||
@@ -421,18 +436,18 @@ void ReportDesignWindow::initReportEditor(ReportEnginePrivate* report)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    m_reportDesignWidget=new ReportDesignWidget(report,this,this);
 | 
					    m_reportDesignWidget=new ReportDesignWidget(report,this,this);
 | 
				
			||||||
    setCentralWidget(m_reportDesignWidget);
 | 
					    setCentralWidget(m_reportDesignWidget);
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(itemSelected(LimeReport::BaseDesignIntf*)),
 | 
					    connect(m_reportDesignWidget,SIGNAL(itemSelected(LimeReport::BaseDesignIntf*)),
 | 
				
			||||||
            this, SLOT(slotItemSelected(LimeReport::BaseDesignIntf*)));
 | 
					            this,SLOT(slotItemSelected(LimeReport::BaseDesignIntf*)));
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(itemPropertyChanged(QString,QString,QVariant,QVariant)),
 | 
					    connect(m_reportDesignWidget,SIGNAL(itemPropertyChanged(QString,QString,QVariant,QVariant)),
 | 
				
			||||||
            this, SLOT(slotItemPropertyChanged(QString,QString,QVariant,QVariant)));
 | 
					            this,SLOT(slotItemPropertyChanged(QString,QString,QVariant,QVariant)));
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(insertModeStarted()), this, SLOT(slotInsertModeStarted()));
 | 
					    connect(m_reportDesignWidget,SIGNAL(insertModeStarted()),this,SLOT(slotInsertModeStarted()));
 | 
				
			||||||
 | 
					    connect(m_reportDesignWidget,SIGNAL(multiItemSelected()),this,SLOT(slotMultiItemSelected()));
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(multiItemSelected()), this, SLOT(slotMultiItemSelected()));
 | 
					    connect(m_reportDesignWidget,SIGNAL(itemInserted(LimeReport::PageDesignIntf*,QPointF,QString)),
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(itemInserted(LimeReport::PageDesignIntf*,QPointF,QString)),
 | 
					            this,SLOT(slotItemInserted(LimeReport::PageDesignIntf*,QPointF,QString)));
 | 
				
			||||||
            this, SLOT(slotItemInserted(LimeReport::PageDesignIntf*,QPointF,QString)));
 | 
					    connect(m_reportDesignWidget,SIGNAL(itemInsertCanceled(QString)),this,SLOT(slotItemInsertCanceled(QString)));
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(itemInsertCanceled(QString)), this, SLOT(slotItemInsertCanceled(QString)));
 | 
					    connect(m_reportDesignWidget->report(),SIGNAL(datasourceCollectionLoadFinished(QString)),this,SLOT(slotUpdateDataBrowser(QString)));
 | 
				
			||||||
    connect(m_reportDesignWidget->report(),SIGNAL(datasourceCollectionLoadFinished(QString)), this, SLOT(slotUpdateDataBrowser(QString)));
 | 
					    connect(m_reportDesignWidget,SIGNAL(commandHistoryChanged()),this,SLOT(slotCommandHistoryChanged()));
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(commandHistoryChanged()),this,SLOT(slotCommandHistoryChanged()));
 | 
					    connect(m_reportDesignWidget,SIGNAL(activePageChanged()),this,SLOT(slotActivePageChanged()));
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(bandAdded(LimeReport::PageDesignIntf*,LimeReport::BandDesignIntf*)),
 | 
					    connect(m_reportDesignWidget, SIGNAL(bandAdded(LimeReport::PageDesignIntf*,LimeReport::BandDesignIntf*)),
 | 
				
			||||||
            this, SLOT(slotBandAdded(LimeReport::PageDesignIntf*,LimeReport::BandDesignIntf*)));
 | 
					            this, SLOT(slotBandAdded(LimeReport::PageDesignIntf*,LimeReport::BandDesignIntf*)));
 | 
				
			||||||
    connect(m_reportDesignWidget, SIGNAL(bandDeleted(LimeReport::PageDesignIntf*,LimeReport::BandDesignIntf*)),
 | 
					    connect(m_reportDesignWidget, SIGNAL(bandDeleted(LimeReport::PageDesignIntf*,LimeReport::BandDesignIntf*)),
 | 
				
			||||||
@@ -440,6 +455,8 @@ void ReportDesignWindow::initReportEditor(ReportEnginePrivate* report)
 | 
				
			|||||||
    connect(m_reportDesignWidget->report(), SIGNAL(renderStarted()), this, SLOT(renderStarted()));
 | 
					    connect(m_reportDesignWidget->report(), SIGNAL(renderStarted()), this, SLOT(renderStarted()));
 | 
				
			||||||
    connect(m_reportDesignWidget->report(), SIGNAL(renderPageFinished(int)), this, SLOT(renderPageFinished(int)));
 | 
					    connect(m_reportDesignWidget->report(), SIGNAL(renderPageFinished(int)), this, SLOT(renderPageFinished(int)));
 | 
				
			||||||
    connect(m_reportDesignWidget->report(), SIGNAL(renderFinished()), this, SLOT(renderFinished()));
 | 
					    connect(m_reportDesignWidget->report(), SIGNAL(renderFinished()), this, SLOT(renderFinished()));
 | 
				
			||||||
 | 
					    connect(m_reportDesignWidget, SIGNAL(pageAdded(PageDesignIntf*)), this, SLOT(slotPageAdded(PageDesignIntf*)));
 | 
				
			||||||
 | 
					    connect(m_reportDesignWidget, SIGNAL(pageDeleted()), this, SLOT(slotPageDeleted()));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWindow::createObjectInspector()
 | 
					void ReportDesignWindow::createObjectInspector()
 | 
				
			||||||
@@ -491,6 +508,20 @@ void ReportDesignWindow::createDataWindow()
 | 
				
			|||||||
    m_dataBrowser->setReportEditor(m_reportDesignWidget);
 | 
					    m_dataBrowser->setReportEditor(m_reportDesignWidget);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWindow::createScriptWindow()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QDockWidget *dataDoc = new QDockWidget(this);
 | 
				
			||||||
 | 
					    dataDoc->setWindowTitle(tr("Script Browser"));
 | 
				
			||||||
 | 
					    m_scriptBrowser=new ScriptBrowser(dataDoc);
 | 
				
			||||||
 | 
					    dataDoc->setWidget(m_scriptBrowser);
 | 
				
			||||||
 | 
					    dataDoc->setObjectName("scriptDoc");
 | 
				
			||||||
 | 
					    addDockWidget(Qt::LeftDockWidgetArea,dataDoc);
 | 
				
			||||||
 | 
					    m_scriptBrowser->setReportEditor(m_reportDesignWidget);
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    m_scriptBrowser->updateDialogsTree();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWindow::updateRedoUndo()
 | 
					void ReportDesignWindow::updateRedoUndo()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_undoAction->setEnabled(m_reportDesignWidget->isCanUndo());
 | 
					    m_undoAction->setEnabled(m_reportDesignWidget->isCanUndo());
 | 
				
			||||||
@@ -701,7 +732,24 @@ QSettings*ReportDesignWindow::settings()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ReportDesignWindow::slotNewReport()
 | 
					void ReportDesignWindow::slotNewReport()
 | 
				
			||||||
{    
 | 
					{    
 | 
				
			||||||
    if (checkNeedToSave()) startNewReport();
 | 
					    if (checkNeedToSave()) {
 | 
				
			||||||
 | 
					        m_lblReportName->setText("");
 | 
				
			||||||
 | 
					        startNewReport();
 | 
				
			||||||
 | 
					        m_deletePageAction->setEnabled(false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWindow::slotNewPage(){
 | 
				
			||||||
 | 
					    if (m_reportDesignWidget){
 | 
				
			||||||
 | 
					        m_reportDesignWidget->addPage();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWindow::slotDeletePage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (m_reportDesignWidget && m_reportDesignWidget->report()->pageCount()>1){
 | 
				
			||||||
 | 
					        m_reportDesignWidget->deleteCurrentPage();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWindow::slotNewTextItem()
 | 
					void ReportDesignWindow::slotNewTextItem()
 | 
				
			||||||
@@ -872,12 +920,32 @@ void ReportDesignWindow::slotLoadReport()
 | 
				
			|||||||
                QApplication::processEvents();
 | 
					                QApplication::processEvents();
 | 
				
			||||||
                setCursor(Qt::WaitCursor);
 | 
					                setCursor(Qt::WaitCursor);
 | 
				
			||||||
                m_reportDesignWidget->clear();
 | 
					                m_reportDesignWidget->clear();
 | 
				
			||||||
                m_reportDesignWidget->loadFromFile(fileName);
 | 
					                if (m_reportDesignWidget->loadFromFile(fileName)){
 | 
				
			||||||
                m_lblReportName->setText(fileName);
 | 
					                	m_lblReportName->setText(fileName);
 | 
				
			||||||
                m_propertyModel->setObject(0);
 | 
					                	m_propertyModel->setObject(0);
 | 
				
			||||||
                updateRedoUndo();
 | 
					                	updateRedoUndo();
 | 
				
			||||||
 | 
					                	setWindowTitle(m_reportDesignWidget->report()->reportName() + " - Lime Report Designer");
 | 
				
			||||||
 | 
					                	if (!m_recentFiles.contains(fileName)){
 | 
				
			||||||
 | 
					                    	if (m_recentFiles.count()==10){
 | 
				
			||||||
 | 
					                        	QMap<QString, QDateTime>::const_iterator it = m_recentFiles.constBegin();
 | 
				
			||||||
 | 
					                        	QDateTime minDate = QDateTime::currentDateTime();
 | 
				
			||||||
 | 
					                        	while (it != m_recentFiles.constEnd()) {
 | 
				
			||||||
 | 
					                            	if (minDate>it.value()) minDate = it.value();
 | 
				
			||||||
 | 
					                            	++it;
 | 
				
			||||||
 | 
					                        	}
 | 
				
			||||||
 | 
					                        	m_recentFiles.remove(m_recentFiles.key(minDate));
 | 
				
			||||||
 | 
					                    	}
 | 
				
			||||||
 | 
					                    	m_recentFiles.insert(fileName,QDateTime::currentDateTime());
 | 
				
			||||||
 | 
					                	} else {
 | 
				
			||||||
 | 
					                    	m_recentFiles[fileName] = QDateTime::currentDateTime();
 | 
				
			||||||
 | 
					                	}
 | 
				
			||||||
 | 
					                	createRecentFilesMenu();
 | 
				
			||||||
 | 
					                    m_deletePageAction->setEnabled(m_reportDesignWidget->report()->pageCount()>1);
 | 
				
			||||||
 | 
					            	} else {
 | 
				
			||||||
 | 
					            		slotNewReport();
 | 
				
			||||||
 | 
					            	}
 | 
				
			||||||
                unsetCursor();
 | 
					                unsetCursor();
 | 
				
			||||||
                setWindowTitle(m_reportDesignWidget->report()->reportName() + " - Lime Report Designer");
 | 
					            	setWindowTitle(m_reportDesignWidget->report()->reportName() + " - Lime Report Designer");
 | 
				
			||||||
                addRecentFile(fileName);
 | 
					                addRecentFile(fileName);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -951,13 +1019,13 @@ void ReportDesignWindow::slotTest()
 | 
				
			|||||||
void ReportDesignWindow::slotPrintReport()
 | 
					void ReportDesignWindow::slotPrintReport()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    setCursor(Qt::WaitCursor);
 | 
					    setCursor(Qt::WaitCursor);
 | 
				
			||||||
    m_reportDesignWidget->report()->printReport();
 | 
					    m_reportDesignWidget->printReport();
 | 
				
			||||||
    setCursor(Qt::ArrowCursor);
 | 
					    setCursor(Qt::ArrowCursor);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWindow::slotPreviewReport()
 | 
					void ReportDesignWindow::slotPreviewReport()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_reportDesignWidget->report()->previewReport();
 | 
					    m_reportDesignWidget->previewReport();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWindow::slotItemActionCliked()
 | 
					void ReportDesignWindow::slotItemActionCliked()
 | 
				
			||||||
@@ -1010,6 +1078,12 @@ void ReportDesignWindow::slotBandDeleted(PageDesignIntf *, BandDesignIntf *band)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWindow::slotActivePageChanged()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_propertyModel->setObject(0);
 | 
				
			||||||
 | 
					    updateRedoUndo();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWindow::renderStarted()
 | 
					void ReportDesignWindow::renderStarted()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (m_showProgressDialog){
 | 
					    if (m_showProgressDialog){
 | 
				
			||||||
@@ -1104,6 +1178,16 @@ void ReportDesignWindow::slotLoadRecentFile(const QString fileName)
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWindow::slotPageAdded(PageDesignIntf *page)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_deletePageAction->setEnabled(m_reportDesignWidget->report()->pageCount()>1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportDesignWindow::slotPageDeleted()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_deletePageAction->setEnabled(m_reportDesignWidget->report()->pageCount()>1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportDesignWindow::closeEvent(QCloseEvent * event)
 | 
					void ReportDesignWindow::closeEvent(QCloseEvent * event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (checkNeedToSave()){    
 | 
					    if (checkNeedToSave()){    
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -50,6 +50,7 @@ class ObjectInspectorWidget;
 | 
				
			|||||||
class QObjectPropertyModel;
 | 
					class QObjectPropertyModel;
 | 
				
			||||||
class ReportDesignWidget;
 | 
					class ReportDesignWidget;
 | 
				
			||||||
class DataBrowser;
 | 
					class DataBrowser;
 | 
				
			||||||
 | 
					class ScriptBrowser;
 | 
				
			||||||
class BaseDesignIntf;
 | 
					class BaseDesignIntf;
 | 
				
			||||||
class PageDesignIntf;
 | 
					class PageDesignIntf;
 | 
				
			||||||
class ObjectBrowser;
 | 
					class ObjectBrowser;
 | 
				
			||||||
@@ -72,6 +73,8 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
    void slotNewReport();
 | 
					    void slotNewReport();
 | 
				
			||||||
 | 
					    void slotNewPage();
 | 
				
			||||||
 | 
					    void slotDeletePage();
 | 
				
			||||||
    void slotNewTextItem();
 | 
					    void slotNewTextItem();
 | 
				
			||||||
    void slotNewBand(const QString& bandType);
 | 
					    void slotNewBand(const QString& bandType);
 | 
				
			||||||
    void slotNewBand(int bandType);
 | 
					    void slotNewBand(int bandType);
 | 
				
			||||||
@@ -103,6 +106,7 @@ private slots:
 | 
				
			|||||||
    void slotItemActionCliked();
 | 
					    void slotItemActionCliked();
 | 
				
			||||||
    void slotBandAdded(LimeReport::PageDesignIntf*, LimeReport::BandDesignIntf*band);
 | 
					    void slotBandAdded(LimeReport::PageDesignIntf*, LimeReport::BandDesignIntf*band);
 | 
				
			||||||
    void slotBandDeleted(LimeReport::PageDesignIntf*, LimeReport::BandDesignIntf*band);
 | 
					    void slotBandDeleted(LimeReport::PageDesignIntf*, LimeReport::BandDesignIntf*band);
 | 
				
			||||||
 | 
					    void slotActivePageChanged();
 | 
				
			||||||
    void renderStarted();
 | 
					    void renderStarted();
 | 
				
			||||||
    void renderPageFinished(int renderedPageCount);
 | 
					    void renderPageFinished(int renderedPageCount);
 | 
				
			||||||
    void renderFinished();
 | 
					    void renderFinished();
 | 
				
			||||||
@@ -113,6 +117,8 @@ private slots:
 | 
				
			|||||||
    void slotUseGrid(bool value);
 | 
					    void slotUseGrid(bool value);
 | 
				
			||||||
    void slotUseMagnet(bool value);
 | 
					    void slotUseMagnet(bool value);
 | 
				
			||||||
    void slotLoadRecentFile(const QString fileName);
 | 
					    void slotLoadRecentFile(const QString fileName);
 | 
				
			||||||
 | 
					    void slotPageAdded(PageDesignIntf* page);
 | 
				
			||||||
 | 
					    void slotPageDeleted();
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    void closeEvent(QCloseEvent *event);
 | 
					    void closeEvent(QCloseEvent *event);
 | 
				
			||||||
    void resizeEvent(QResizeEvent *);
 | 
					    void resizeEvent(QResizeEvent *);
 | 
				
			||||||
@@ -130,6 +136,7 @@ private:
 | 
				
			|||||||
    void createObjectsBrowser();
 | 
					    void createObjectsBrowser();
 | 
				
			||||||
    void initReportEditor(ReportEnginePrivate* report);
 | 
					    void initReportEditor(ReportEnginePrivate* report);
 | 
				
			||||||
    void createDataWindow();
 | 
					    void createDataWindow();
 | 
				
			||||||
 | 
					    void createScriptWindow();
 | 
				
			||||||
    void updateRedoUndo();
 | 
					    void updateRedoUndo();
 | 
				
			||||||
    void startNewReport();
 | 
					    void startNewReport();
 | 
				
			||||||
    void writePosition();
 | 
					    void writePosition();
 | 
				
			||||||
@@ -174,6 +181,8 @@ private:
 | 
				
			|||||||
    QAction* m_settingsAction;
 | 
					    QAction* m_settingsAction;
 | 
				
			||||||
    QAction* m_useGridAction;
 | 
					    QAction* m_useGridAction;
 | 
				
			||||||
    QAction* m_useMagnetAction;
 | 
					    QAction* m_useMagnetAction;
 | 
				
			||||||
 | 
					    QAction* m_newPageAction;
 | 
				
			||||||
 | 
					    QAction* m_deletePageAction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    QAction* m_newPageHeader;
 | 
					    QAction* m_newPageHeader;
 | 
				
			||||||
    QAction* m_newPageFooter;
 | 
					    QAction* m_newPageFooter;
 | 
				
			||||||
@@ -202,6 +211,7 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    ReportDesignWidget* m_reportDesignWidget;
 | 
					    ReportDesignWidget* m_reportDesignWidget;
 | 
				
			||||||
    DataBrowser * m_dataBrowser;
 | 
					    DataBrowser * m_dataBrowser;
 | 
				
			||||||
 | 
					    ScriptBrowser* m_scriptBrowser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ObjectBrowser* m_objectsBrowser;
 | 
					    ObjectBrowser* m_objectsBrowser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,6 +61,7 @@ ReportEnginePrivate::ReportEnginePrivate(QObject *parent) :
 | 
				
			|||||||
    m_previewWindowIcon(":/report/images/logo32"), m_previewWindowTitle(tr("Preview"))
 | 
					    m_previewWindowIcon(":/report/images/logo32"), m_previewWindowTitle(tr("Preview"))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_datasources= new DataSourceManager(this);
 | 
					    m_datasources= new DataSourceManager(this);
 | 
				
			||||||
 | 
					    m_scriptEngineContext = new ScriptEngineContext(this);
 | 
				
			||||||
    m_datasources->setObjectName("datasources");
 | 
					    m_datasources->setObjectName("datasources");
 | 
				
			||||||
    connect(m_datasources,SIGNAL(loadCollectionFinished(QString)),this,SLOT(slotDataSourceCollectionLoaded(QString)));
 | 
					    connect(m_datasources,SIGNAL(loadCollectionFinished(QString)),this,SLOT(slotDataSourceCollectionLoaded(QString)));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -103,6 +104,17 @@ PageDesignIntf *ReportEnginePrivate::appendPage(const QString &pageName)
 | 
				
			|||||||
    return page;
 | 
					    return page;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool ReportEnginePrivate::deletePage(PageDesignIntf *page){
 | 
				
			||||||
 | 
					    QList<PageDesignIntf*>::iterator it = m_pages.begin();
 | 
				
			||||||
 | 
					    while (it != m_pages.end()){
 | 
				
			||||||
 | 
					        if (*it == page) {
 | 
				
			||||||
 | 
					            it = m_pages.erase(it);
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        } else ++it;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PageDesignIntf *ReportEnginePrivate::createPreviewPage()
 | 
					PageDesignIntf *ReportEnginePrivate::createPreviewPage()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return createPage();
 | 
					    return createPage();
 | 
				
			||||||
@@ -152,6 +164,7 @@ void ReportEnginePrivate::clearReport()
 | 
				
			|||||||
    m_pages.clear();
 | 
					    m_pages.clear();
 | 
				
			||||||
    m_datasources->clear(DataSourceManager::Owned);
 | 
					    m_datasources->clear(DataSourceManager::Owned);
 | 
				
			||||||
    m_fileName="";
 | 
					    m_fileName="";
 | 
				
			||||||
 | 
					    m_scriptEngineContext->clear();
 | 
				
			||||||
    emit cleared();
 | 
					    emit cleared();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -261,9 +274,44 @@ bool ReportEnginePrivate::printReport(QPrinter* printer)
 | 
				
			|||||||
    printer =(printer)?printer:m_printer.data();
 | 
					    printer =(printer)?printer:m_printer.data();
 | 
				
			||||||
    if (printer&&printer->isValid()){
 | 
					    if (printer&&printer->isValid()){
 | 
				
			||||||
        try{
 | 
					        try{
 | 
				
			||||||
            dataManager()->setDesignTime(false);
 | 
								dataManager()->setDesignTime(false);
 | 
				
			||||||
            printReport(renderToPages(),*printer,PrintRange());
 | 
					            ReportPages pages = renderToPages();
 | 
				
			||||||
            dataManager()->setDesignTime(true);
 | 
					            dataManager()->setDesignTime(true);
 | 
				
			||||||
 | 
					            if (pages.count()>0){
 | 
				
			||||||
 | 
					                printReport(pages,*printer,PrintRange());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch(ReportError &exception){
 | 
				
			||||||
 | 
					            saveError(exception.what());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    } else return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool ReportEnginePrivate::printPages(ReportPages pages, QPrinter *printer, PrintRange printRange)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!printer&&!m_printerSelected){
 | 
				
			||||||
 | 
					        QPrintDialog dialog(m_printer.data(),QApplication::activeWindow());
 | 
				
			||||||
 | 
					        m_printerSelected = dialog.exec()!=QDialog::Rejected;
 | 
				
			||||||
 | 
					        if (m_printerSelected){
 | 
				
			||||||
 | 
					            printRange.setRangeType(dialog.printRange());
 | 
				
			||||||
 | 
					            printRange.setFromPage(dialog.fromPage());
 | 
				
			||||||
 | 
					            printRange.setToPage(dialog.toPage());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!printer&&!m_printerSelected) return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printer =(printer)?printer:m_printer.data();
 | 
				
			||||||
 | 
					    if (printer&&printer->isValid()){
 | 
				
			||||||
 | 
					        try{
 | 
				
			||||||
 | 
					            if (pages.count()>0){
 | 
				
			||||||
 | 
					                printReport(
 | 
				
			||||||
 | 
					                    pages,
 | 
				
			||||||
 | 
					                    *printer,
 | 
				
			||||||
 | 
					                    printRange
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        } catch(ReportError &exception){
 | 
					        } catch(ReportError &exception){
 | 
				
			||||||
            saveError(exception.what());
 | 
					            saveError(exception.what());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -401,6 +449,11 @@ void ReportEnginePrivate::cancelRender()
 | 
				
			|||||||
        m_reportRender->cancelRender();
 | 
					        m_reportRender->cancelRender();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PageDesignIntf* ReportEngine::createPreviewScene(QObject* parent){
 | 
				
			||||||
 | 
					    Q_D(ReportEngine);
 | 
				
			||||||
 | 
					    return d->createPreviewScene(parent);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportEnginePrivate::designReport()
 | 
					void ReportEnginePrivate::designReport()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (!m_designerWindow) {
 | 
					    if (!m_designerWindow) {
 | 
				
			||||||
@@ -456,7 +509,8 @@ bool ReportEnginePrivate::loadFromFile(const QString &fileName)
 | 
				
			|||||||
            dataManager()->connectAutoConnections();
 | 
					            dataManager()->connectAutoConnections();
 | 
				
			||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }   
 | 
				
			||||||
 | 
					    m_lastError = reader->lastError();
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -555,6 +609,7 @@ QString ReportEnginePrivate::renderToString()
 | 
				
			|||||||
    dataManager()->setDesignTime(false);
 | 
					    dataManager()->setDesignTime(false);
 | 
				
			||||||
    if (m_pages.count()){
 | 
					    if (m_pages.count()){
 | 
				
			||||||
        render.setDatasources(dataManager());
 | 
					        render.setDatasources(dataManager());
 | 
				
			||||||
 | 
					        render.setScriptContext(scriptContext());
 | 
				
			||||||
        return render.renderPageToString(m_pages.at(0));
 | 
					        return render.renderPageToString(m_pages.at(0));
 | 
				
			||||||
    }else return QString();
 | 
					    }else return QString();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -588,12 +643,18 @@ ReportPages ReportEnginePrivate::renderToPages()
 | 
				
			|||||||
    connect(m_reportRender.data(),SIGNAL(pageRendered(int)),
 | 
					    connect(m_reportRender.data(),SIGNAL(pageRendered(int)),
 | 
				
			||||||
            this, SIGNAL(renderPageFinished(int)));
 | 
					            this, SIGNAL(renderPageFinished(int)));
 | 
				
			||||||
    if (m_pages.count()){
 | 
					    if (m_pages.count()){
 | 
				
			||||||
 | 
					        ReportPages result;
 | 
				
			||||||
        emit renderStarted();
 | 
					        emit renderStarted();
 | 
				
			||||||
        m_reportRender->setDatasources(dataManager());
 | 
					        m_reportRender->setDatasources(dataManager());
 | 
				
			||||||
        ReportPages result = m_reportRender->renderPageToPages(m_pages.at(0));
 | 
					        m_reportRender->setScriptContext(scriptContext());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach(PageDesignIntf* page , m_pages){
 | 
				
			||||||
 | 
					        	result.append(m_reportRender->renderPageToPages(page));
 | 
				
			||||||
 | 
					        }	
 | 
				
			||||||
        emit renderFinished();
 | 
					        emit renderFinished();
 | 
				
			||||||
 | 
					        m_reportRender.clear();
 | 
				
			||||||
        return result;
 | 
					        return result;
 | 
				
			||||||
    }else {
 | 
					    } else {
 | 
				
			||||||
        return ReportPages();
 | 
					        return ReportPages();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -628,6 +689,11 @@ bool ReportEngine::printReport(QPrinter *printer)
 | 
				
			|||||||
    return d->printReport(printer);
 | 
					    return d->printReport(printer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool ReportEngine::printPages(ReportPages pages, QPrinter *printer, PrintRange printRange){
 | 
				
			||||||
 | 
					    Q_D(ReportEngine);
 | 
				
			||||||
 | 
					    return d->printPages(pages,printer, printRange);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportEngine::printToFile(const QString &fileName)
 | 
					void ReportEngine::printToFile(const QString &fileName)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Q_D(ReportEngine);
 | 
					    Q_D(ReportEngine);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,6 +60,10 @@ private:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class DataSourceManager;
 | 
					class DataSourceManager;
 | 
				
			||||||
class ReportEnginePrivate;
 | 
					class ReportEnginePrivate;
 | 
				
			||||||
 | 
					class PageDesignIntf;
 | 
				
			||||||
 | 
					class PageItemDesignIntf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef QList< QSharedPointer<PageItemDesignIntf> > ReportPages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LIMEREPORT_EXPORT ReportEngine : public QObject{
 | 
					class LIMEREPORT_EXPORT ReportEngine : public QObject{
 | 
				
			||||||
    Q_OBJECT
 | 
					    Q_OBJECT
 | 
				
			||||||
@@ -69,7 +73,9 @@ public:
 | 
				
			|||||||
    explicit ReportEngine(QObject *parent = 0);
 | 
					    explicit ReportEngine(QObject *parent = 0);
 | 
				
			||||||
    ~ReportEngine();
 | 
					    ~ReportEngine();
 | 
				
			||||||
    bool    printReport(QPrinter *printer=0);
 | 
					    bool    printReport(QPrinter *printer=0);
 | 
				
			||||||
 | 
					    bool    printPages(ReportPages pages, QPrinter *printer, PrintRange printRange = PrintRange());
 | 
				
			||||||
    void    printToFile(const QString& fileName);
 | 
					    void    printToFile(const QString& fileName);
 | 
				
			||||||
 | 
					    PageDesignIntf *createPreviewScene(QObject *parent = 0);
 | 
				
			||||||
    bool    printToPDF(const QString& fileName);
 | 
					    bool    printToPDF(const QString& fileName);
 | 
				
			||||||
    void    previewReport();
 | 
					    void    previewReport();
 | 
				
			||||||
    void    designReport();
 | 
					    void    designReport();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,7 +55,8 @@ class ReportEnginePrivate : public QObject, public ICollectionContainer
 | 
				
			|||||||
    Q_OBJECT
 | 
					    Q_OBJECT
 | 
				
			||||||
    Q_DECLARE_PUBLIC(ReportEngine)
 | 
					    Q_DECLARE_PUBLIC(ReportEngine)
 | 
				
			||||||
    Q_PROPERTY(ACollectionProperty pages READ fakeCollectionReader())
 | 
					    Q_PROPERTY(ACollectionProperty pages READ fakeCollectionReader())
 | 
				
			||||||
    Q_PROPERTY(QObject* datasourcesManager READ dataManager())
 | 
					    Q_PROPERTY(QObject* datasourcesManager READ dataManager)
 | 
				
			||||||
 | 
					    Q_PROPERTY(QObject* scriptContext READ scriptContext)
 | 
				
			||||||
    friend class PreviewReportWidget;
 | 
					    friend class PreviewReportWidget;
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    static void printReport(ItemsReaderIntf::Ptr reader, QPrinter &printer);
 | 
					    static void printReport(ItemsReaderIntf::Ptr reader, QPrinter &printer);
 | 
				
			||||||
@@ -63,12 +64,16 @@ public:
 | 
				
			|||||||
public:
 | 
					public:
 | 
				
			||||||
    explicit ReportEnginePrivate(QObject *parent = 0);
 | 
					    explicit ReportEnginePrivate(QObject *parent = 0);
 | 
				
			||||||
    virtual ~ReportEnginePrivate();
 | 
					    virtual ~ReportEnginePrivate();
 | 
				
			||||||
    PageDesignIntf*     appendPage(const QString &pageName = "");
 | 
					
 | 
				
			||||||
    PageDesignIntf*     createPreviewPage();
 | 
					    PageDesignIntf*      appendPage(const QString& pageName="");
 | 
				
			||||||
    PageDesignIntf*     pageAt(int index){return (index<=(m_pages.count()-1)) ? m_pages.at(index):0;}
 | 
					    bool deletePage(PageDesignIntf *page);
 | 
				
			||||||
    int                 pageCount() {return m_pages.count();}
 | 
					    PageDesignIntf*      createPreviewPage();
 | 
				
			||||||
    DataSourceManager*  dataManager(){return m_datasources;}
 | 
					    PageDesignIntf*      pageAt(int index){return (index<=(m_pages.count()-1)) ? m_pages.at(index):0;}
 | 
				
			||||||
    IDataSourceManager* dataManagerIntf(){return m_datasources;}
 | 
					    int                  pageCount() {return m_pages.count();}
 | 
				
			||||||
 | 
					    DataSourceManager*   dataManager(){return m_datasources;}
 | 
				
			||||||
 | 
					    ScriptEngineContext* scriptContext(){return m_scriptEngineContext;}
 | 
				
			||||||
 | 
					    ScriptEngineManager* scriptManager(){return &ScriptEngineManager::instance();}
 | 
				
			||||||
 | 
					    IDataSourceManager*  dataManagerIntf(){return m_datasources;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    IScriptEngineManager* scriptManagerIntf(){
 | 
					    IScriptEngineManager* scriptManagerIntf(){
 | 
				
			||||||
        ScriptEngineManager::instance().setDataManager(dataManager());
 | 
					        ScriptEngineManager::instance().setDataManager(dataManager());
 | 
				
			||||||
@@ -77,6 +82,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    void    clearReport();
 | 
					    void    clearReport();
 | 
				
			||||||
    bool    printReport(QPrinter *printer=0);
 | 
					    bool    printReport(QPrinter *printer=0);
 | 
				
			||||||
 | 
					    bool    printPages(ReportPages pages, QPrinter *printer, PrintRange printRange = PrintRange());
 | 
				
			||||||
    void    printToFile(const QString& fileName);
 | 
					    void    printToFile(const QString& fileName);
 | 
				
			||||||
    bool    printToPDF(const QString& fileName);
 | 
					    bool    printToPDF(const QString& fileName);
 | 
				
			||||||
    void    previewReport();
 | 
					    void    previewReport();
 | 
				
			||||||
@@ -144,6 +150,7 @@ private:
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
    QList<PageDesignIntf*> m_pages;
 | 
					    QList<PageDesignIntf*> m_pages;
 | 
				
			||||||
    DataSourceManager* m_datasources;
 | 
					    DataSourceManager* m_datasources;
 | 
				
			||||||
 | 
					    ScriptEngineContext* m_scriptEngineContext;
 | 
				
			||||||
    ReportRender::Ptr m_reportRender;
 | 
					    ReportRender::Ptr m_reportRender;
 | 
				
			||||||
    QString m_fileName;
 | 
					    QString m_fileName;
 | 
				
			||||||
    QString m_lastError;
 | 
					    QString m_lastError;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -158,6 +158,19 @@ void ReportRender::setDatasources(DataSourceManager *value)
 | 
				
			|||||||
    m_datasources=value;
 | 
					    m_datasources=value;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ReportRender::setScriptContext(ScriptEngineContext* scriptContext)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_scriptEngineContext=scriptContext;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool ReportRender::runInitScript(){
 | 
				
			||||||
 | 
					    if (m_scriptEngineContext){
 | 
				
			||||||
 | 
					        QScriptValue res = ScriptEngineManager::instance().scriptEngine()->evaluate(m_scriptEngineContext->initScript());
 | 
				
			||||||
 | 
					        if (res.isBool()) return res.toBool();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportRender::initDatasources(){
 | 
					void ReportRender::initDatasources(){
 | 
				
			||||||
    try{
 | 
					    try{
 | 
				
			||||||
        datasources()->setAllDatasourcesToFirst();
 | 
					        datasources()->setAllDatasourcesToFirst();
 | 
				
			||||||
@@ -181,6 +194,20 @@ void ReportRender::renderPage(PageDesignIntf* patternPage)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    initVariables();
 | 
					    initVariables();
 | 
				
			||||||
    initGroupFunctions();
 | 
					    initGroupFunctions();
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    initDialogs();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    if (runInitScript()){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        clearPageMap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try{
 | 
				
			||||||
 | 
					            datasources()->setAllDatasourcesToFirst();
 | 
				
			||||||
 | 
					        } catch(ReportError &exception){
 | 
				
			||||||
 | 
					            //TODO posible should thow exeption
 | 
				
			||||||
 | 
					            QMessageBox::critical(0,tr("Error"),exception.what());
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    clearPageMap();
 | 
					    clearPageMap();
 | 
				
			||||||
    resetPageNumber();
 | 
					    resetPageNumber();
 | 
				
			||||||
@@ -204,6 +231,7 @@ void ReportRender::renderPage(PageDesignIntf* patternPage)
 | 
				
			|||||||
    savePage();
 | 
					    savePage();
 | 
				
			||||||
    if (!m_renderCanceled)
 | 
					    if (!m_renderCanceled)
 | 
				
			||||||
        secondRenderPass();
 | 
					        secondRenderPass();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ReportRender::pageCount()
 | 
					int ReportRender::pageCount()
 | 
				
			||||||
@@ -244,6 +272,18 @@ void ReportRender::initVariables()
 | 
				
			|||||||
    m_datasources->setReportVariable("#PAGE_COUNT",0);
 | 
					    m_datasources->setReportVariable("#PAGE_COUNT",0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					void ReportRender::initDialogs(){
 | 
				
			||||||
 | 
					    if (m_scriptEngineContext){
 | 
				
			||||||
 | 
					        QScriptEngine* se = ScriptEngineManager::instance().scriptEngine();
 | 
				
			||||||
 | 
					        foreach(DialogDescriber::Ptr dialog, m_scriptEngineContext->dialogsDescriber()){
 | 
				
			||||||
 | 
					            QScriptValue sv = se->newQObject(m_scriptEngineContext->getDialog(dialog->name()));
 | 
				
			||||||
 | 
					            se->globalObject().setProperty(dialog->name(),sv);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ReportRender::clearPageMap()
 | 
					void ReportRender::clearPageMap()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_renderedPages.clear();
 | 
					    m_renderedPages.clear();
 | 
				
			||||||
@@ -523,6 +563,10 @@ void ReportRender::renderGroupHeader(BandDesignIntf *parentBand, IDataSource* da
 | 
				
			|||||||
                dataSource->next();
 | 
					                dataSource->next();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            closeDataGroup(band);
 | 
					            closeDataGroup(band);
 | 
				
			||||||
 | 
					//            if (gb->isNeedToStartNewPage()){
 | 
				
			||||||
 | 
					//                savePage();
 | 
				
			||||||
 | 
					//                startNewPage();
 | 
				
			||||||
 | 
					//            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (!gb->isStarted()){
 | 
					        if (!gb->isStarted()){
 | 
				
			||||||
            if (band->reprintOnEachPage())
 | 
					            if (band->reprintOnEachPage())
 | 
				
			||||||
@@ -851,6 +895,7 @@ void ReportRender::startNewPage()
 | 
				
			|||||||
    m_currentIndex=0;
 | 
					    m_currentIndex=0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    renderPageHeader(m_patternPageItem);
 | 
					    renderPageHeader(m_patternPageItem);
 | 
				
			||||||
 | 
					    //renderPageFooter(m_patternPageItem);
 | 
				
			||||||
    m_pageFooterHeight = calcPageFooterHeight(m_patternPageItem);
 | 
					    m_pageFooterHeight = calcPageFooterHeight(m_patternPageItem);
 | 
				
			||||||
    m_maxHeightByColumn[m_currentColumn] -= m_pageFooterHeight;
 | 
					    m_maxHeightByColumn[m_currentColumn] -= m_pageFooterHeight;
 | 
				
			||||||
    m_currentIndex=10;
 | 
					    m_currentIndex=10;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@
 | 
				
			|||||||
#include "lrcollection.h"
 | 
					#include "lrcollection.h"
 | 
				
			||||||
#include "lrdatasourcemanager.h"
 | 
					#include "lrdatasourcemanager.h"
 | 
				
			||||||
#include "lrpageitemdesignintf.h"
 | 
					#include "lrpageitemdesignintf.h"
 | 
				
			||||||
 | 
					#include "lrscriptenginemanager.h"
 | 
				
			||||||
#include "serializators/lrstorageintf.h"
 | 
					#include "serializators/lrstorageintf.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace LimeReport{
 | 
					namespace LimeReport{
 | 
				
			||||||
@@ -55,7 +56,6 @@ private:
 | 
				
			|||||||
    bool m_footerGroup;
 | 
					    bool m_footerGroup;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef QList<PageItemDesignIntf::Ptr> ReportPages;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct PagesRange{
 | 
					struct PagesRange{
 | 
				
			||||||
    int firstPage;
 | 
					    int firstPage;
 | 
				
			||||||
@@ -73,6 +73,7 @@ public:
 | 
				
			|||||||
    ~ReportRender();
 | 
					    ~ReportRender();
 | 
				
			||||||
    ReportRender(QObject *parent = 0);
 | 
					    ReportRender(QObject *parent = 0);
 | 
				
			||||||
    void setDatasources(DataSourceManager* value);
 | 
					    void setDatasources(DataSourceManager* value);
 | 
				
			||||||
 | 
					    void setScriptContext(ScriptEngineContext* scriptContext);
 | 
				
			||||||
    DataSourceManager*  datasources(){return m_datasources;}
 | 
					    DataSourceManager*  datasources(){return m_datasources;}
 | 
				
			||||||
    int     pageCount();
 | 
					    int     pageCount();
 | 
				
			||||||
    PageItemDesignIntf::Ptr pageAt(int index);
 | 
					    PageItemDesignIntf::Ptr pageAt(int index);
 | 
				
			||||||
@@ -86,7 +87,11 @@ private:
 | 
				
			|||||||
    void    renderPage(PageDesignIntf *patternPage);
 | 
					    void    renderPage(PageDesignIntf *patternPage);
 | 
				
			||||||
    void    initDatasources();
 | 
					    void    initDatasources();
 | 
				
			||||||
    void    initRenderPage();
 | 
					    void    initRenderPage();
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    void    initDialogs();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    void    initVariables();
 | 
					    void    initVariables();
 | 
				
			||||||
 | 
					    bool    runInitScript();
 | 
				
			||||||
    void    clearPageMap();
 | 
					    void    clearPageMap();
 | 
				
			||||||
    void    renderBand(BandDesignIntf *patternBand, DataRenderMode mode = NotStartNewPage, bool isLast = false);
 | 
					    void    renderBand(BandDesignIntf *patternBand, DataRenderMode mode = NotStartNewPage, bool isLast = false);
 | 
				
			||||||
    void    renderDataBand(BandDesignIntf* dataBand);
 | 
					    void    renderDataBand(BandDesignIntf* dataBand);
 | 
				
			||||||
@@ -141,6 +146,7 @@ private:
 | 
				
			|||||||
    void renameChildItems(BaseDesignIntf *item);
 | 
					    void renameChildItems(BaseDesignIntf *item);
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    DataSourceManager* m_datasources;
 | 
					    DataSourceManager* m_datasources;
 | 
				
			||||||
 | 
					    ScriptEngineContext* m_scriptEngineContext;
 | 
				
			||||||
    PageItemDesignIntf* m_renderPageItem;
 | 
					    PageItemDesignIntf* m_renderPageItem;
 | 
				
			||||||
    PageItemDesignIntf* m_patternPageItem;
 | 
					    PageItemDesignIntf* m_patternPageItem;
 | 
				
			||||||
    QList<PageItemDesignIntf::Ptr> m_renderedPages;
 | 
					    QList<PageItemDesignIntf::Ptr> m_renderedPages;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,6 +32,11 @@
 | 
				
			|||||||
#include <QDate>
 | 
					#include <QDate>
 | 
				
			||||||
#include <QStringList>
 | 
					#include <QStringList>
 | 
				
			||||||
#include <QScriptValueIterator>
 | 
					#include <QScriptValueIterator>
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					#include <QUiLoader>
 | 
				
			||||||
 | 
					#include <QBuffer>
 | 
				
			||||||
 | 
					#include <QWidget>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
#include "lrdatasourcemanager.h"
 | 
					#include "lrdatasourcemanager.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Q_DECLARE_METATYPE(QColor)
 | 
					Q_DECLARE_METATYPE(QColor)
 | 
				
			||||||
@@ -375,6 +380,11 @@ void ScriptEngineManager::setDataManager(DataSourceManager *dataManager){
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptEngineManager::updateModel()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ScriptEngineManager::ScriptEngineManager()
 | 
					ScriptEngineManager::ScriptEngineManager()
 | 
				
			||||||
    :m_model(0), m_dataManager(0)
 | 
					    :m_model(0), m_dataManager(0)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -523,5 +533,196 @@ QString ScriptExtractor::substring(const QString &value, int start, int end)
 | 
				
			|||||||
    return value.mid(start,end-start);
 | 
					    return value.mid(start,end-start);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QString DialogDescriber::name() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return m_name;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DialogDescriber::setName(const QString& name)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_name = name;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QByteArray DialogDescriber::description() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return m_description;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DialogDescriber::setDescription(const QByteArray &description)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_description = description;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					void ScriptEngineContext::addDialog(const QString& name, const QByteArray& description)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_dialogs.push_back(DialogDescriber::create(name,description));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool ScriptEngineContext::previewDialog(const QString& dialogName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QDialog* dialog = getDialog(dialogName);
 | 
				
			||||||
 | 
					    if (dialog) {
 | 
				
			||||||
 | 
					        dialog->exec();
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        m_lastError = tr("Dialog with name: %1 can`t be created").arg(dialogName);
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool ScriptEngineContext::containsDialog(const QString& dialogName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    foreach(DialogDescriber::Ptr dialog, m_dialogs){
 | 
				
			||||||
 | 
					        if (dialog->name()==dialogName)
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptEngineContext::deleteDialog(const QString& dialogName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        QVector<DialogDescriber::Ptr>::Iterator it = m_dialogs.begin();
 | 
				
			||||||
 | 
					        while(it!=m_dialogs.end()){
 | 
				
			||||||
 | 
					            if ((*it)->name()==dialogName){
 | 
				
			||||||
 | 
					                it = m_dialogs.erase(it);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                ++it;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        QList<DialogPtr>::Iterator it = m_createdDialogs.begin();
 | 
				
			||||||
 | 
					        while(it!=m_createdDialogs.end()){
 | 
				
			||||||
 | 
					            if ((*it)->objectName()==dialogName){
 | 
				
			||||||
 | 
					                it = m_createdDialogs.erase(it);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                ++it;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptEngineContext::clear()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    m_dialogs.clear();
 | 
				
			||||||
 | 
					    m_createdDialogs.clear();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    m_initScript.clear();
 | 
				
			||||||
 | 
					    m_lastError="";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QObject* ScriptEngineContext::createElement(const QString& collectionName, const QString& elementType)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Q_UNUSED(elementType)
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    if (collectionName.compare("dialogs",Qt::CaseInsensitive)==0){
 | 
				
			||||||
 | 
					        m_dialogs.push_back(DialogDescriber::create());
 | 
				
			||||||
 | 
					        return m_dialogs.at(m_dialogs.count()-1).data();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    Q_UNUSED(collectionName)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ScriptEngineContext::elementsCount(const QString& collectionName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    if (collectionName.compare("dialogs",Qt::CaseInsensitive)==0){
 | 
				
			||||||
 | 
					        return m_dialogs.count();
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    Q_UNUSED(collectionName)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QObject* ScriptEngineContext::elementAt(const QString& collectionName, int index)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    if (collectionName.compare("dialogs",Qt::CaseInsensitive)==0){
 | 
				
			||||||
 | 
					        return m_dialogs.at(index).data();
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					    Q_UNUSED(collectionName)
 | 
				
			||||||
 | 
					    Q_UNUSED(index)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptEngineContext::collectionLoadFinished(const QString& collectionName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Q_UNUSED(collectionName);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					QDialog* ScriptEngineContext::createDialog(DialogDescriber* cont)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QUiLoader loader;
 | 
				
			||||||
 | 
					    QByteArray desc = cont->description();
 | 
				
			||||||
 | 
					    QBuffer buffer(&desc);
 | 
				
			||||||
 | 
					    buffer.open(QIODevice::ReadOnly);
 | 
				
			||||||
 | 
					    QDialog* dialog = dynamic_cast<QDialog*>(loader.load(&buffer));
 | 
				
			||||||
 | 
					    m_createdDialogs.push_back(QSharedPointer<QDialog>(dialog));
 | 
				
			||||||
 | 
					    return dialog;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDialog* ScriptEngineContext::findDialog(const QString& dialogName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    foreach(DialogPtr dialog, m_createdDialogs){
 | 
				
			||||||
 | 
					        if (dialog->objectName()==dialogName)
 | 
				
			||||||
 | 
					            return dialog.data();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DialogDescriber* ScriptEngineContext::findDialogContainer(const QString& dialogName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    foreach (DialogDescriber::Ptr dialogCont , m_dialogs) {
 | 
				
			||||||
 | 
					        if (dialogCont->name().compare(dialogName,Qt::CaseInsensitive)==0){
 | 
				
			||||||
 | 
					            return dialogCont.data();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QDialog* ScriptEngineContext::getDialog(const QString& dialogName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QDialog* dialog = findDialog(dialogName);
 | 
				
			||||||
 | 
					    if (dialog){
 | 
				
			||||||
 | 
					        return dialog;
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        DialogDescriber* cont = findDialogContainer(dialogName);
 | 
				
			||||||
 | 
					        if (cont){
 | 
				
			||||||
 | 
					            dialog = createDialog(cont);
 | 
				
			||||||
 | 
					            if (dialog)
 | 
				
			||||||
 | 
					                return dialog;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					QString ScriptEngineContext::initScript() const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return m_initScript;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptEngineContext::setInitScript(const QString& initScript)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_initScript = initScript;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DialogDescriber::Ptr DialogDescriber::create(const QString& name, const QByteArray& desc) {
 | 
				
			||||||
 | 
					    Ptr res(new DialogDescriber());
 | 
				
			||||||
 | 
					    res->setName(name);
 | 
				
			||||||
 | 
					    res->setDescription(desc);
 | 
				
			||||||
 | 
					    return res;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} //namespace LimeReport
 | 
					} //namespace LimeReport
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,8 +39,13 @@
 | 
				
			|||||||
#include <QScriptable>
 | 
					#include <QScriptable>
 | 
				
			||||||
#include <QFont>
 | 
					#include <QFont>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					#include <QDialog>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "base/lrsingleton.h"
 | 
					#include "base/lrsingleton.h"
 | 
				
			||||||
#include "lrscriptenginemanagerintf.h"
 | 
					#include "lrscriptenginemanagerintf.h"
 | 
				
			||||||
 | 
					#include "lrcollection.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace LimeReport{
 | 
					namespace LimeReport{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -57,7 +62,7 @@ struct ScriptFunctionDesc{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class ScriptEngineNode {
 | 
					class ScriptEngineNode {
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
    enum NodeType{Root,Category,Function};
 | 
					    enum NodeType{Root,Category,Function,Dialog,DialogElement};
 | 
				
			||||||
    ScriptEngineNode(const QString& name="", const QString& description ="", NodeType type=Root, ScriptEngineNode* parent=0, const QIcon& icon=QIcon())
 | 
					    ScriptEngineNode(const QString& name="", const QString& description ="", NodeType type=Root, ScriptEngineNode* parent=0, const QIcon& icon=QIcon())
 | 
				
			||||||
        :m_name(name), m_description(description), m_icon(icon), m_type(type), m_parent(parent){}
 | 
					        :m_name(name), m_description(description), m_icon(icon), m_type(type), m_parent(parent){}
 | 
				
			||||||
    virtual ~ScriptEngineNode();
 | 
					    virtual ~ScriptEngineNode();
 | 
				
			||||||
@@ -95,6 +100,7 @@ public:
 | 
				
			|||||||
    int columnCount(const QModelIndex &parent) const;
 | 
					    int columnCount(const QModelIndex &parent) const;
 | 
				
			||||||
    QVariant data(const QModelIndex &index, int role) const;
 | 
					    QVariant data(const QModelIndex &index, int role) const;
 | 
				
			||||||
    void setScriptEngineManager(ScriptEngineManager* scriptManager);
 | 
					    void setScriptEngineManager(ScriptEngineManager* scriptManager);
 | 
				
			||||||
 | 
					    inline ScriptEngineManager* scriptEngineManager(){return m_scriptManager;}
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
    void slotScriptEngineChanged();
 | 
					    void slotScriptEngineChanged();
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
@@ -105,6 +111,64 @@ private:
 | 
				
			|||||||
    ScriptEngineNode* m_rootNode;
 | 
					    ScriptEngineNode* m_rootNode;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DialogDescriber : public QObject
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Q_OBJECT
 | 
				
			||||||
 | 
					    Q_PROPERTY(QString name READ name WRITE setName)
 | 
				
			||||||
 | 
					    Q_PROPERTY(QByteArray description READ description WRITE setDescription)
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    typedef QSharedPointer<DialogDescriber> Ptr;
 | 
				
			||||||
 | 
					    static Ptr create(const QString& name, const QByteArray &desc);
 | 
				
			||||||
 | 
					    static Ptr create(){return Ptr(new DialogDescriber);}
 | 
				
			||||||
 | 
					    QString name() const;
 | 
				
			||||||
 | 
					    void setName(const QString& name);
 | 
				
			||||||
 | 
					    QByteArray description() const;
 | 
				
			||||||
 | 
					    void setDescription(const QByteArray& description);
 | 
				
			||||||
 | 
					private :
 | 
				
			||||||
 | 
					    QString m_name;
 | 
				
			||||||
 | 
					    QByteArray m_description;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ScriptEngineContext : public QObject, public ICollectionContainer
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Q_OBJECT
 | 
				
			||||||
 | 
					    Q_PROPERTY(ACollectionProperty dialogs READ fakeCollectionReader)
 | 
				
			||||||
 | 
					    Q_PROPERTY(QString initScript READ initScript WRITE setInitScript)
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    typedef QSharedPointer<QDialog> DialogPtr;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    explicit ScriptEngineContext(QObject* parent=0):QObject(parent){}
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    void  addDialog(const QString& name, const QByteArray &description);
 | 
				
			||||||
 | 
					    bool    previewDialog(const QString& dialogName);
 | 
				
			||||||
 | 
					    bool    containsDialog(const QString& dialogName);
 | 
				
			||||||
 | 
					    const   QVector<DialogDescriber::Ptr>& dialogsDescriber(){return m_dialogs;}
 | 
				
			||||||
 | 
					    void    deleteDialog(const QString& dialogName);
 | 
				
			||||||
 | 
					    QDialog *getDialog(const QString &dialogName);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    void clear();
 | 
				
			||||||
 | 
					    QString initScript() const;
 | 
				
			||||||
 | 
					    void setInitScript(const QString& initScript);
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					    QObject* createElement(const QString& collectionName,const QString& elementType);
 | 
				
			||||||
 | 
					    int elementsCount(const QString& collectionName);
 | 
				
			||||||
 | 
					    QObject* elementAt(const QString& collectionName,int index);
 | 
				
			||||||
 | 
					    void collectionLoadFinished(const QString &collectionName);
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    QDialog *createDialog(DialogDescriber *cont);
 | 
				
			||||||
 | 
					    QDialog *findDialog(const QString &dialogName);
 | 
				
			||||||
 | 
					    DialogDescriber* findDialogContainer(const QString& dialogName);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    QVector<DialogDescriber::Ptr> m_dialogs;
 | 
				
			||||||
 | 
					    QList<DialogPtr> m_createdDialogs;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    QString m_lastError;
 | 
				
			||||||
 | 
					    QString m_initScript;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ScriptEngineManager : public QObject, public Singleton<ScriptEngineManager>, public IScriptEngineManager
 | 
					class ScriptEngineManager : public QObject, public Singleton<ScriptEngineManager>, public IScriptEngineManager
 | 
				
			||||||
{    
 | 
					{    
 | 
				
			||||||
    Q_OBJECT
 | 
					    Q_OBJECT
 | 
				
			||||||
@@ -122,8 +186,11 @@ public:
 | 
				
			|||||||
    QStringList functionsNames();
 | 
					    QStringList functionsNames();
 | 
				
			||||||
    const QList<ScriptFunctionDesc>& functionsDescriber(){return m_functions;}
 | 
					    const QList<ScriptFunctionDesc>& functionsDescriber(){return m_functions;}
 | 
				
			||||||
    ScriptEngineModel* model(){return m_model;}
 | 
					    ScriptEngineModel* model(){return m_model;}
 | 
				
			||||||
 | 
					    void setContext(ScriptEngineContext* context){m_context=context;}
 | 
				
			||||||
    DataSourceManager* dataManager() const {return m_dataManager;}
 | 
					    DataSourceManager* dataManager() const {return m_dataManager;}
 | 
				
			||||||
    void setDataManager(DataSourceManager* dataManager);
 | 
					    void setDataManager(DataSourceManager* dataManager);
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					    void updateModel();
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    Q_DISABLE_COPY(ScriptEngineManager)
 | 
					    Q_DISABLE_COPY(ScriptEngineManager)
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
@@ -132,6 +199,7 @@ private:
 | 
				
			|||||||
    QString m_lastError;
 | 
					    QString m_lastError;
 | 
				
			||||||
    QList<ScriptFunctionDesc> m_functions;
 | 
					    QList<ScriptFunctionDesc> m_functions;
 | 
				
			||||||
    ScriptEngineModel* m_model;
 | 
					    ScriptEngineModel* m_model;
 | 
				
			||||||
 | 
					    ScriptEngineContext* m_context;
 | 
				
			||||||
    DataSourceManager* m_dataManager;
 | 
					    DataSourceManager* m_dataManager;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,7 @@ ColorEditor::ColorEditor(QWidget *parent) :
 | 
				
			|||||||
    setFocusProxy(m_button);
 | 
					    setFocusProxy(m_button);
 | 
				
			||||||
    setAutoFillBackground(true);
 | 
					    setAutoFillBackground(true);
 | 
				
			||||||
    setLayout(layout);
 | 
					    setLayout(layout);
 | 
				
			||||||
 | 
					    setAutoFillBackground(true);
 | 
				
			||||||
    connect(m_button,SIGNAL(clicked()),this,SLOT(slotClicked()));
 | 
					    connect(m_button,SIGNAL(clicked()),this,SLOT(slotClicked()));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,13 +37,17 @@ ImageEditor::ImageEditor(QWidget* parent)
 | 
				
			|||||||
    :QWidget(parent)
 | 
					    :QWidget(parent)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_button.setIcon(QIcon(":items/ImageItem"));
 | 
					    m_button.setIcon(QIcon(":items/ImageItem"));
 | 
				
			||||||
 | 
					    m_clearButton.setIcon(QIcon(":items/clear.png"));
 | 
				
			||||||
    QHBoxLayout* layout = new QHBoxLayout(this);
 | 
					    QHBoxLayout* layout = new QHBoxLayout(this);
 | 
				
			||||||
    layout->addWidget(&m_button);
 | 
					    layout->addWidget(&m_button);
 | 
				
			||||||
    layout->setSpacing(0);
 | 
					    layout->addWidget(&m_clearButton);
 | 
				
			||||||
 | 
					    layout->setSpacing(1);
 | 
				
			||||||
    layout->setContentsMargins(1,0,1,1);
 | 
					    layout->setContentsMargins(1,0,1,1);
 | 
				
			||||||
    setLayout(layout);
 | 
					    setLayout(layout);
 | 
				
			||||||
    setFocusProxy(&m_button);
 | 
					    setFocusProxy(&m_button);
 | 
				
			||||||
 | 
					    setAutoFillBackground(true);
 | 
				
			||||||
    connect(&m_button,SIGNAL(clicked()),this,SLOT(slotButtonClicked()));
 | 
					    connect(&m_button,SIGNAL(clicked()),this,SLOT(slotButtonClicked()));
 | 
				
			||||||
 | 
					    connect(&m_clearButton,SIGNAL(clicked()),this,SLOT(slotClearButtonClicked()));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
QImage ImageEditor::image()
 | 
					QImage ImageEditor::image()
 | 
				
			||||||
@@ -57,4 +61,10 @@ void ImageEditor::slotButtonClicked()
 | 
				
			|||||||
    emit editingFinished();
 | 
					    emit editingFinished();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace LimeReport
 | 
					void ImageEditor::slotClearButtonClicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_image = QImage();
 | 
				
			||||||
 | 
					    emit editingFinished();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} //namespace LimeReport
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,8 +46,10 @@ signals:
 | 
				
			|||||||
    void editingFinished();
 | 
					    void editingFinished();
 | 
				
			||||||
private slots:
 | 
					private slots:
 | 
				
			||||||
    void slotButtonClicked();
 | 
					    void slotButtonClicked();
 | 
				
			||||||
 | 
					    void slotClearButtonClicked();
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    QPushButton m_button;
 | 
					    QPushButton m_button;
 | 
				
			||||||
 | 
					    QPushButton m_clearButton;
 | 
				
			||||||
    QImage m_image;
 | 
					    QImage m_image;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -88,7 +88,7 @@ namespace LimeReport{
 | 
				
			|||||||
        void setColorIndex(int propertyValue);
 | 
					        void setColorIndex(int propertyValue);
 | 
				
			||||||
        void setModel(QAbstractItemModel* model){m_model=model;}
 | 
					        void setModel(QAbstractItemModel* model){m_model=model;}
 | 
				
			||||||
        QAbstractItemModel* model(){return m_model;}
 | 
					        QAbstractItemModel* model(){return m_model;}
 | 
				
			||||||
        void setModelIndex(QModelIndex index){m_index=index;}
 | 
					        void setModelIndex(const QModelIndex& index){m_index=index;}
 | 
				
			||||||
        QModelIndex modelIndex(){return m_index;}
 | 
					        QModelIndex modelIndex(){return m_index;}
 | 
				
			||||||
        bool isClass(){return m_isClass;}
 | 
					        bool isClass(){return m_isClass;}
 | 
				
			||||||
#ifdef INSPECT_BASEDESIGN
 | 
					#ifdef INSPECT_BASEDESIGN
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,6 +106,7 @@ void ObjectBrowser::buildTree(BaseDesignIntf* ignoredItem){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    m_treeView->clear();
 | 
					    m_treeView->clear();
 | 
				
			||||||
    m_itemsMap.clear();
 | 
					    m_itemsMap.clear();
 | 
				
			||||||
 | 
					    if (!m_report->activePage()) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ObjectBrowserNode *topLevelItem=new ObjectBrowserNode(m_treeView);
 | 
					    ObjectBrowserNode *topLevelItem=new ObjectBrowserNode(m_treeView);
 | 
				
			||||||
    topLevelItem->setText(0,m_report->activePage()->objectName());
 | 
					    topLevelItem->setText(0,m_report->activePage()->objectName());
 | 
				
			||||||
@@ -204,7 +205,7 @@ void ObjectBrowser::slotItemDeleted(PageDesignIntf *, BaseDesignIntf *item)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ObjectBrowser::slotObjectTreeItemSelectionChanged()
 | 
					void ObjectBrowser::slotObjectTreeItemSelectionChanged()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (!m_changingItemSelection){
 | 
					    if (!m_changingItemSelection  && m_report->activePage()){
 | 
				
			||||||
        m_changingItemSelection = true;
 | 
					        m_changingItemSelection = true;
 | 
				
			||||||
        m_report->activePage()->clearSelection();
 | 
					        m_report->activePage()->clearSelection();
 | 
				
			||||||
        foreach(QTreeWidgetItem* item, m_treeView->selectedItems()){
 | 
					        foreach(QTreeWidgetItem* item, m_treeView->selectedItems()){
 | 
				
			||||||
@@ -214,6 +215,10 @@ void ObjectBrowser::slotObjectTreeItemSelectionChanged()
 | 
				
			|||||||
                if (si) {
 | 
					                if (si) {
 | 
				
			||||||
                    m_report->activePage()->animateItem(si);
 | 
					                    m_report->activePage()->animateItem(si);
 | 
				
			||||||
                    si->setSelected(true);
 | 
					                    si->setSelected(true);
 | 
				
			||||||
 | 
					                    QPointF p = si->mapToScene(si->pos());
 | 
				
			||||||
 | 
					                    if (si->parentItem())
 | 
				
			||||||
 | 
					                        p = si->parentItem()->mapToScene(si->pos());
 | 
				
			||||||
 | 
					                    m_report->activeView()->centerOn(p);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -165,5 +165,7 @@
 | 
				
			|||||||
        <file>images/FitWidth.png</file>
 | 
					        <file>images/FitWidth.png</file>
 | 
				
			||||||
        <file>images/OneToOne.png</file>
 | 
					        <file>images/OneToOne.png</file>
 | 
				
			||||||
        <file alias="/images/logo32">images/logo_32x32.png</file>
 | 
					        <file alias="/images/logo32">images/logo_32x32.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/addPage">images/addPage1.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/deletePage">images/deletePage1.png</file>
 | 
				
			||||||
    </qresource>
 | 
					    </qresource>
 | 
				
			||||||
</RCC>
 | 
					</RCC>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/Dialog.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 348 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/Dialog_add.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 429 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/Dialog_delete.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 633 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/Dialog_run.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 576 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/function3.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 505 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/function_add.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 504 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/function_delete.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 731 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/function_edit.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 666 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/green_cube.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 790 B  | 
							
								
								
									
										
											BIN
										
									
								
								limereport/scriptbrowser/images/green_cube1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 609 B  | 
							
								
								
									
										195
									
								
								limereport/scriptbrowser/lrscriptbrowser.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,195 @@
 | 
				
			|||||||
 | 
					/***************************************************************************
 | 
				
			||||||
 | 
					 *   This file is part of the Lime Report project                          *
 | 
				
			||||||
 | 
					 *   Copyright (C) 2015 by Alexander Arin                                  *
 | 
				
			||||||
 | 
					 *   arin_a@bk.ru                                                          *
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 **                   GNU General Public License Usage                    **
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 *   This library is free software: you can redistribute it and/or modify  *
 | 
				
			||||||
 | 
					 *   it under the terms of the GNU General Public License as published by  *
 | 
				
			||||||
 | 
					 *   the Free Software Foundation, either version 3 of the License, or     *
 | 
				
			||||||
 | 
					 *   (at your option) any later version.                                   *
 | 
				
			||||||
 | 
					 *   You should have received a copy of the GNU General Public License     *
 | 
				
			||||||
 | 
					 *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 **                  GNU Lesser General Public License                    **
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 *   This library is free software: you can redistribute it and/or modify  *
 | 
				
			||||||
 | 
					 *   it under the terms of the GNU Lesser General Public License as        *
 | 
				
			||||||
 | 
					 *   published by the Free Software Foundation, either version 3 of the    *
 | 
				
			||||||
 | 
					 *   License, or (at your option) any later version.                       *
 | 
				
			||||||
 | 
					 *   You should have received a copy of the GNU Lesser General Public      *
 | 
				
			||||||
 | 
					 *   License along with this library.                                      *
 | 
				
			||||||
 | 
					 *   If not, see <http://www.gnu.org/licenses/>.                           *
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 *   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.  See the         *
 | 
				
			||||||
 | 
					 *   GNU General Public License for more details.                          *
 | 
				
			||||||
 | 
					 ****************************************************************************/
 | 
				
			||||||
 | 
					#include "lrscriptbrowser.h"
 | 
				
			||||||
 | 
					#include "ui_lrscriptbrowser.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					#include <QFileDialog>
 | 
				
			||||||
 | 
					#include <QUiLoader>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include <QMessageBox>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace LimeReport{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ScriptBrowser::ScriptBrowser(QWidget *parent) :
 | 
				
			||||||
 | 
					    QWidget(parent),
 | 
				
			||||||
 | 
					    ui(new Ui::ScriptBrowser)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ui->setupUi(this);
 | 
				
			||||||
 | 
					#ifndef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    ui->tpDialogs->setVisible(false);
 | 
				
			||||||
 | 
					    ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tpDialogs));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ScriptBrowser::~ScriptBrowser()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    delete ui;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptBrowser::setReportEditor(ReportDesignWidget* report)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_report=report;
 | 
				
			||||||
 | 
					    connect(m_report,SIGNAL(cleared()),this,SLOT(slotClear()));
 | 
				
			||||||
 | 
					    connect(m_report,SIGNAL(loaded()),this,SLOT(slotUpdate()));
 | 
				
			||||||
 | 
					    updateFunctionTree();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptBrowser::updateFunctionTree()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ScriptEngineManager* sm = reportEditor()->scriptManager();
 | 
				
			||||||
 | 
					    QMap<QString,QTreeWidgetItem*> categ;
 | 
				
			||||||
 | 
					    foreach(ScriptFunctionDesc fd, sm->functionsDescriber()){
 | 
				
			||||||
 | 
					        QString functionCategory = (fd.category!="") ? fd.category : tr("NO CATEGORY");
 | 
				
			||||||
 | 
					        if (categ.contains(functionCategory)){
 | 
				
			||||||
 | 
					            QTreeWidgetItem* item = new QTreeWidgetItem(categ.value(fd.category),QStringList(fd.name));
 | 
				
			||||||
 | 
					            item->setIcon(0,QIcon(":/report/images/function"));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            QTreeWidgetItem* categItem = new QTreeWidgetItem(ui->twFunctions,QStringList(functionCategory));
 | 
				
			||||||
 | 
					            categItem->setIcon(0,QIcon(":/report/images/folder"));
 | 
				
			||||||
 | 
					            categ.insert(functionCategory,categItem);
 | 
				
			||||||
 | 
					            QTreeWidgetItem* item = new QTreeWidgetItem(categItem,QStringList(fd.name));
 | 
				
			||||||
 | 
					            item->setIcon(0,QIcon(":/report/images/function"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					void ScriptBrowser::fillProperties(QTreeWidgetItem* objectItem, QObject* item){
 | 
				
			||||||
 | 
					    for(int i=0; i<item->metaObject()->propertyCount(); ++i){
 | 
				
			||||||
 | 
					        QStringList row;
 | 
				
			||||||
 | 
					        row<<item->metaObject()->property(i).typeName()<<item->metaObject()->property(i).name();
 | 
				
			||||||
 | 
					        /*QTreeWidgetItem* propItem = */new QTreeWidgetItem(objectItem,row);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptBrowser::fillDialog(QTreeWidgetItem* dialogItem,const QString& description){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    QUiLoader loader;
 | 
				
			||||||
 | 
					    QByteArray baDesc = description.toUtf8();
 | 
				
			||||||
 | 
					    QBuffer buff(&baDesc);
 | 
				
			||||||
 | 
					    buff.open(QIODevice::ReadOnly);
 | 
				
			||||||
 | 
					    QDialog* dialog = dynamic_cast<QDialog*>(loader.load(&buff));
 | 
				
			||||||
 | 
					    if (dialog){
 | 
				
			||||||
 | 
					        foreach (QObject* child, dialog->children()) {
 | 
				
			||||||
 | 
					            if (!child->objectName().isEmpty()){
 | 
				
			||||||
 | 
					                QStringList row;
 | 
				
			||||||
 | 
					                row<<child->metaObject()->className()<<child->objectName();
 | 
				
			||||||
 | 
					                QTreeWidgetItem* item = new QTreeWidgetItem(dialogItem,row);
 | 
				
			||||||
 | 
					                item->setIcon(0,QIcon(":/scriptbrowser/images/item"));
 | 
				
			||||||
 | 
					                fillProperties(item,child);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        delete dialog;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptBrowser::updateDialogsTree()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ui->twDialogs->clear();
 | 
				
			||||||
 | 
					    ScriptEngineContext* sc = reportEditor()->scriptContext();
 | 
				
			||||||
 | 
					    foreach(DialogDescriber::Ptr dc, sc->dialogsDescriber()){
 | 
				
			||||||
 | 
					        QTreeWidgetItem* dialogItem = new QTreeWidgetItem(ui->twDialogs,QStringList(dc->name()));
 | 
				
			||||||
 | 
					        dialogItem->setIcon(0,QIcon(":/scriptbrowser/images/dialog"));
 | 
				
			||||||
 | 
					        fillDialog(dialogItem,dc->description());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					void ScriptBrowser::slotClear()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ui->twDialogs->clear();
 | 
				
			||||||
 | 
					    ui->twFunctions->clear();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptBrowser::slotUpdate()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    updateDialogsTree();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    updateFunctionTree();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					void ScriptBrowser::on_tbAddDialog_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    QFileDialog fileDialog(this);
 | 
				
			||||||
 | 
					    if (fileDialog.exec()==QDialog::Accepted){
 | 
				
			||||||
 | 
					        QStringList fileNames = fileDialog.selectedFiles();
 | 
				
			||||||
 | 
					        QUiLoader loader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!fileNames.isEmpty()){
 | 
				
			||||||
 | 
					            foreach (QString fileName, fileNames) {
 | 
				
			||||||
 | 
					                QFile file(fileName);
 | 
				
			||||||
 | 
					                file.open(QIODevice::ReadOnly);
 | 
				
			||||||
 | 
					                if (file.isOpen()){
 | 
				
			||||||
 | 
					                    QWidget* widget = loader.load(&file);
 | 
				
			||||||
 | 
					                    QDialog* dialog = dynamic_cast<QDialog*>(widget);
 | 
				
			||||||
 | 
					                    if (dialog){
 | 
				
			||||||
 | 
					                        if (!m_report->scriptContext()->containsDialog(dialog->objectName())){
 | 
				
			||||||
 | 
					                            file.seek(0);
 | 
				
			||||||
 | 
					                            m_report->scriptContext()->addDialog(dialog->objectName(),file.readAll());
 | 
				
			||||||
 | 
					                            updateDialogsTree();
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            QMessageBox::critical(this,tr("Error"),tr("Dialog with name: %1 already exists").arg(dialog->objectName()));
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                        if (widget)
 | 
				
			||||||
 | 
					                            QMessageBox::critical(this,tr("Error"),tr("ui file must cointain QDialog instead QWidget or QMainWindow"));
 | 
				
			||||||
 | 
					                        else
 | 
				
			||||||
 | 
					                            QMessageBox::critical(this,tr("Error"),tr("wrong file format"));
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    if (widget) delete widget;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptBrowser::on_tbRunDialog_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (ui->twDialogs->currentItem()&& ui->twDialogs->currentItem()->parent()==0){
 | 
				
			||||||
 | 
					        m_report->scriptContext()->previewDialog(ui->twDialogs->currentItem()->text(0));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ScriptBrowser::on_tbDeleteDialog_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (ui->twDialogs->currentItem()&& ui->twDialogs->currentItem()->parent()==0){
 | 
				
			||||||
 | 
					        m_report->scriptContext()->deleteDialog(ui->twDialogs->currentItem()->text(0));
 | 
				
			||||||
 | 
					        updateDialogsTree();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} //namespace LimeReport
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										77
									
								
								limereport/scriptbrowser/lrscriptbrowser.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					/***************************************************************************
 | 
				
			||||||
 | 
					 *   This file is part of the Lime Report project                          *
 | 
				
			||||||
 | 
					 *   Copyright (C) 2015 by Alexander Arin                                  *
 | 
				
			||||||
 | 
					 *   arin_a@bk.ru                                                          *
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 **                   GNU General Public License Usage                    **
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 *   This library is free software: you can redistribute it and/or modify  *
 | 
				
			||||||
 | 
					 *   it under the terms of the GNU General Public License as published by  *
 | 
				
			||||||
 | 
					 *   the Free Software Foundation, either version 3 of the License, or     *
 | 
				
			||||||
 | 
					 *   (at your option) any later version.                                   *
 | 
				
			||||||
 | 
					 *   You should have received a copy of the GNU General Public License     *
 | 
				
			||||||
 | 
					 *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 **                  GNU Lesser General Public License                    **
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 *   This library is free software: you can redistribute it and/or modify  *
 | 
				
			||||||
 | 
					 *   it under the terms of the GNU Lesser General Public License as        *
 | 
				
			||||||
 | 
					 *   published by the Free Software Foundation, either version 3 of the    *
 | 
				
			||||||
 | 
					 *   License, or (at your option) any later version.                       *
 | 
				
			||||||
 | 
					 *   You should have received a copy of the GNU Lesser General Public      *
 | 
				
			||||||
 | 
					 *   License along with this library.                                      *
 | 
				
			||||||
 | 
					 *   If not, see <http://www.gnu.org/licenses/>.                           *
 | 
				
			||||||
 | 
					 *                                                                         *
 | 
				
			||||||
 | 
					 *   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.  See the         *
 | 
				
			||||||
 | 
					 *   GNU General Public License for more details.                          *
 | 
				
			||||||
 | 
					 ****************************************************************************/
 | 
				
			||||||
 | 
					#ifndef LRSCRIPTBROWSER_H
 | 
				
			||||||
 | 
					#define LRSCRIPTBROWSER_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <QWidget>
 | 
				
			||||||
 | 
					#include <QMainWindow>
 | 
				
			||||||
 | 
					#include <QTreeWidgetItem>
 | 
				
			||||||
 | 
					#include "lrreportdesignwidget.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace LimeReport{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Ui {
 | 
				
			||||||
 | 
					class ScriptBrowser;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ScriptBrowser : public QWidget
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Q_OBJECT
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    explicit ScriptBrowser(QWidget *parent = 0);
 | 
				
			||||||
 | 
					    ~ScriptBrowser();
 | 
				
			||||||
 | 
					    void setReportEditor(LimeReport::ReportDesignWidget* report);
 | 
				
			||||||
 | 
					    inline ReportDesignWidget* reportEditor(){return m_report;}
 | 
				
			||||||
 | 
					    void updateFunctionTree();
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    void updateDialogsTree();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    void fillDialog(QTreeWidgetItem *dialogItem, const QString &description);
 | 
				
			||||||
 | 
					    void fillProperties(QTreeWidgetItem *objectItem, QObject *item);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					private slots:
 | 
				
			||||||
 | 
					    void slotClear();
 | 
				
			||||||
 | 
					    void slotUpdate();
 | 
				
			||||||
 | 
					#ifdef HAVE_UI_LOADER
 | 
				
			||||||
 | 
					    void on_tbAddDialog_clicked();
 | 
				
			||||||
 | 
					    void on_tbRunDialog_clicked();
 | 
				
			||||||
 | 
					    void on_tbDeleteDialog_clicked();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    Ui::ScriptBrowser *ui;
 | 
				
			||||||
 | 
					    ReportDesignWidget*  m_report;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // namespace LimeReport
 | 
				
			||||||
 | 
					#endif // LRSCRIPTBROWSER_H
 | 
				
			||||||
							
								
								
									
										14
									
								
								limereport/scriptbrowser/lrscriptbrowser.qrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					<RCC>
 | 
				
			||||||
 | 
					    <qresource prefix="/scriptbrowser">
 | 
				
			||||||
 | 
					        <file alias="/images/dialog">images/Dialog.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/dialog_add">images/Dialog_add.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/dialog_delete">images/Dialog_delete.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/dialog_run">images/Dialog_run.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/function">images/function3.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/function_add">images/function_add.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/function_delete">images/function_delete.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/function_edit">images/function_edit.png</file>
 | 
				
			||||||
 | 
					        <file>images/green_cube.png</file>
 | 
				
			||||||
 | 
					        <file alias="/images/item">images/green_cube1.png</file>
 | 
				
			||||||
 | 
					    </qresource>
 | 
				
			||||||
 | 
					</RCC>
 | 
				
			||||||
							
								
								
									
										287
									
								
								limereport/scriptbrowser/lrscriptbrowser.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,287 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<ui version="4.0">
 | 
				
			||||||
 | 
					 <class>LimeReport::ScriptBrowser</class>
 | 
				
			||||||
 | 
					 <widget class="QWidget" name="LimeReport::ScriptBrowser">
 | 
				
			||||||
 | 
					  <property name="geometry">
 | 
				
			||||||
 | 
					   <rect>
 | 
				
			||||||
 | 
					    <x>0</x>
 | 
				
			||||||
 | 
					    <y>0</y>
 | 
				
			||||||
 | 
					    <width>400</width>
 | 
				
			||||||
 | 
					    <height>300</height>
 | 
				
			||||||
 | 
					   </rect>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <property name="windowTitle">
 | 
				
			||||||
 | 
					   <string>Form</string>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <layout class="QVBoxLayout" name="verticalLayout">
 | 
				
			||||||
 | 
					   <property name="spacing">
 | 
				
			||||||
 | 
					    <number>1</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="leftMargin">
 | 
				
			||||||
 | 
					    <number>1</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="topMargin">
 | 
				
			||||||
 | 
					    <number>1</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="rightMargin">
 | 
				
			||||||
 | 
					    <number>1</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="bottomMargin">
 | 
				
			||||||
 | 
					    <number>2</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <widget class="QTabWidget" name="tabWidget">
 | 
				
			||||||
 | 
					     <property name="tabPosition">
 | 
				
			||||||
 | 
					      <enum>QTabWidget::South</enum>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="currentIndex">
 | 
				
			||||||
 | 
					      <number>0</number>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <widget class="QWidget" name="tpFunctions">
 | 
				
			||||||
 | 
					      <attribute name="title">
 | 
				
			||||||
 | 
					       <string>Functions</string>
 | 
				
			||||||
 | 
					      </attribute>
 | 
				
			||||||
 | 
					      <layout class="QVBoxLayout" name="verticalLayout_2">
 | 
				
			||||||
 | 
					       <property name="spacing">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="leftMargin">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="topMargin">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="rightMargin">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="bottomMargin">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <layout class="QHBoxLayout" name="horizontalLayout">
 | 
				
			||||||
 | 
					         <property name="spacing">
 | 
				
			||||||
 | 
					          <number>2</number>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <item>
 | 
				
			||||||
 | 
					          <widget class="QToolButton" name="toolButton_2">
 | 
				
			||||||
 | 
					           <property name="text">
 | 
				
			||||||
 | 
					            <string>...</string>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="icon">
 | 
				
			||||||
 | 
					            <iconset resource="lrscriptbrowser.qrc">
 | 
				
			||||||
 | 
					             <normaloff>:/scriptbrowser/images/function_add</normaloff>:/scriptbrowser/images/function_add</iconset>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="iconSize">
 | 
				
			||||||
 | 
					            <size>
 | 
				
			||||||
 | 
					             <width>16</width>
 | 
				
			||||||
 | 
					             <height>16</height>
 | 
				
			||||||
 | 
					            </size>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="autoRaise">
 | 
				
			||||||
 | 
					            <bool>true</bool>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					          </widget>
 | 
				
			||||||
 | 
					         </item>
 | 
				
			||||||
 | 
					         <item>
 | 
				
			||||||
 | 
					          <widget class="QToolButton" name="toolButton">
 | 
				
			||||||
 | 
					           <property name="text">
 | 
				
			||||||
 | 
					            <string>...</string>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="icon">
 | 
				
			||||||
 | 
					            <iconset resource="lrscriptbrowser.qrc">
 | 
				
			||||||
 | 
					             <normaloff>:/scriptbrowser/images/function_edit</normaloff>:/scriptbrowser/images/function_edit</iconset>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="iconSize">
 | 
				
			||||||
 | 
					            <size>
 | 
				
			||||||
 | 
					             <width>16</width>
 | 
				
			||||||
 | 
					             <height>16</height>
 | 
				
			||||||
 | 
					            </size>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="autoRaise">
 | 
				
			||||||
 | 
					            <bool>true</bool>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					          </widget>
 | 
				
			||||||
 | 
					         </item>
 | 
				
			||||||
 | 
					         <item>
 | 
				
			||||||
 | 
					          <widget class="QToolButton" name="toolButton_3">
 | 
				
			||||||
 | 
					           <property name="text">
 | 
				
			||||||
 | 
					            <string>...</string>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="icon">
 | 
				
			||||||
 | 
					            <iconset resource="lrscriptbrowser.qrc">
 | 
				
			||||||
 | 
					             <normaloff>:/scriptbrowser/images/function_delete</normaloff>:/scriptbrowser/images/function_delete</iconset>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="iconSize">
 | 
				
			||||||
 | 
					            <size>
 | 
				
			||||||
 | 
					             <width>16</width>
 | 
				
			||||||
 | 
					             <height>16</height>
 | 
				
			||||||
 | 
					            </size>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="autoRaise">
 | 
				
			||||||
 | 
					            <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>
 | 
				
			||||||
 | 
					        </layout>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QTreeWidget" name="twFunctions">
 | 
				
			||||||
 | 
					         <attribute name="headerVisible">
 | 
				
			||||||
 | 
					          <bool>false</bool>
 | 
				
			||||||
 | 
					         </attribute>
 | 
				
			||||||
 | 
					         <column>
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string notr="true">1</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </column>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					      </layout>
 | 
				
			||||||
 | 
					     </widget>
 | 
				
			||||||
 | 
					     <widget class="QWidget" name="tpDialogs">
 | 
				
			||||||
 | 
					      <attribute name="title">
 | 
				
			||||||
 | 
					       <string>Dialogs</string>
 | 
				
			||||||
 | 
					      </attribute>
 | 
				
			||||||
 | 
					      <layout class="QVBoxLayout" name="verticalLayout_3">
 | 
				
			||||||
 | 
					       <property name="spacing">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="leftMargin">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="topMargin">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="rightMargin">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="bottomMargin">
 | 
				
			||||||
 | 
					        <number>2</number>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <layout class="QHBoxLayout" name="horizontalLayout_2">
 | 
				
			||||||
 | 
					         <property name="spacing">
 | 
				
			||||||
 | 
					          <number>2</number>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <item>
 | 
				
			||||||
 | 
					          <widget class="QToolButton" name="tbAddDialog">
 | 
				
			||||||
 | 
					           <property name="text">
 | 
				
			||||||
 | 
					            <string>...</string>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="icon">
 | 
				
			||||||
 | 
					            <iconset resource="lrscriptbrowser.qrc">
 | 
				
			||||||
 | 
					             <normaloff>:/scriptbrowser/images/dialog_add</normaloff>:/scriptbrowser/images/dialog_add</iconset>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="iconSize">
 | 
				
			||||||
 | 
					            <size>
 | 
				
			||||||
 | 
					             <width>16</width>
 | 
				
			||||||
 | 
					             <height>16</height>
 | 
				
			||||||
 | 
					            </size>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="autoRaise">
 | 
				
			||||||
 | 
					            <bool>true</bool>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					          </widget>
 | 
				
			||||||
 | 
					         </item>
 | 
				
			||||||
 | 
					         <item>
 | 
				
			||||||
 | 
					          <widget class="QToolButton" name="tbRunDialog">
 | 
				
			||||||
 | 
					           <property name="text">
 | 
				
			||||||
 | 
					            <string>...</string>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="icon">
 | 
				
			||||||
 | 
					            <iconset resource="lrscriptbrowser.qrc">
 | 
				
			||||||
 | 
					             <normaloff>:/scriptbrowser/images/dialog_run</normaloff>:/scriptbrowser/images/dialog_run</iconset>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="iconSize">
 | 
				
			||||||
 | 
					            <size>
 | 
				
			||||||
 | 
					             <width>16</width>
 | 
				
			||||||
 | 
					             <height>16</height>
 | 
				
			||||||
 | 
					            </size>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="autoRaise">
 | 
				
			||||||
 | 
					            <bool>true</bool>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					          </widget>
 | 
				
			||||||
 | 
					         </item>
 | 
				
			||||||
 | 
					         <item>
 | 
				
			||||||
 | 
					          <widget class="QToolButton" name="tbDeleteDialog">
 | 
				
			||||||
 | 
					           <property name="text">
 | 
				
			||||||
 | 
					            <string>...</string>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="icon">
 | 
				
			||||||
 | 
					            <iconset resource="lrscriptbrowser.qrc">
 | 
				
			||||||
 | 
					             <normaloff>:/scriptbrowser/images/dialog_delete</normaloff>:/scriptbrowser/images/dialog_delete</iconset>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="iconSize">
 | 
				
			||||||
 | 
					            <size>
 | 
				
			||||||
 | 
					             <width>16</width>
 | 
				
			||||||
 | 
					             <height>16</height>
 | 
				
			||||||
 | 
					            </size>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="autoRaise">
 | 
				
			||||||
 | 
					            <bool>true</bool>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					          </widget>
 | 
				
			||||||
 | 
					         </item>
 | 
				
			||||||
 | 
					         <item>
 | 
				
			||||||
 | 
					          <spacer name="horizontalSpacer_2">
 | 
				
			||||||
 | 
					           <property name="orientation">
 | 
				
			||||||
 | 
					            <enum>Qt::Horizontal</enum>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					           <property name="sizeHint" stdset="0">
 | 
				
			||||||
 | 
					            <size>
 | 
				
			||||||
 | 
					             <width>40</width>
 | 
				
			||||||
 | 
					             <height>20</height>
 | 
				
			||||||
 | 
					            </size>
 | 
				
			||||||
 | 
					           </property>
 | 
				
			||||||
 | 
					          </spacer>
 | 
				
			||||||
 | 
					         </item>
 | 
				
			||||||
 | 
					        </layout>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QTreeWidget" name="twDialogs">
 | 
				
			||||||
 | 
					         <property name="columnCount">
 | 
				
			||||||
 | 
					          <number>2</number>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <attribute name="headerDefaultSectionSize">
 | 
				
			||||||
 | 
					          <number>131</number>
 | 
				
			||||||
 | 
					         </attribute>
 | 
				
			||||||
 | 
					         <attribute name="headerMinimumSectionSize">
 | 
				
			||||||
 | 
					          <number>100</number>
 | 
				
			||||||
 | 
					         </attribute>
 | 
				
			||||||
 | 
					         <column>
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string>Type</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </column>
 | 
				
			||||||
 | 
					         <column>
 | 
				
			||||||
 | 
					          <property name="text">
 | 
				
			||||||
 | 
					           <string>Name</string>
 | 
				
			||||||
 | 
					          </property>
 | 
				
			||||||
 | 
					         </column>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					      </layout>
 | 
				
			||||||
 | 
					     </widget>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					  </layout>
 | 
				
			||||||
 | 
					 </widget>
 | 
				
			||||||
 | 
					 <resources>
 | 
				
			||||||
 | 
					  <include location="lrscriptbrowser.qrc"/>
 | 
				
			||||||
 | 
					 </resources>
 | 
				
			||||||
 | 
					 <connections/>
 | 
				
			||||||
 | 
					</ui>
 | 
				
			||||||
@@ -204,6 +204,10 @@ bool FileXMLReader::prepareReader(QDomDocument *doc)
 | 
				
			|||||||
        QFile source(m_fileName);
 | 
					        QFile source(m_fileName);
 | 
				
			||||||
        if (source.open(QFile::ReadOnly)) {
 | 
					        if (source.open(QFile::ReadOnly)) {
 | 
				
			||||||
            doc->setContent(&source);
 | 
					            doc->setContent(&source);
 | 
				
			||||||
 | 
					            if (doc->documentElement().nodeName()!="Report") {
 | 
				
			||||||
 | 
					                m_error = QString(QObject::tr("Wrong file format"));
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        } else {m_error=QString(QObject::tr("File %1 not opened")).arg(m_fileName); return false;}
 | 
					        } else {m_error=QString(QObject::tr("File %1 not opened")).arg(m_fileName); return false;}
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,12 +37,19 @@ namespace LimeReport{
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
XMLWriter::XMLWriter() : m_doc(new QDomDocument)
 | 
					XMLWriter::XMLWriter() : m_doc(new QDomDocument)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_rootElement=m_doc->createElement("Report");
 | 
					    init();
 | 
				
			||||||
    m_doc->appendChild(m_rootElement);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
XMLWriter::XMLWriter(QSharedPointer<QDomDocument> doc) : m_doc(doc){
 | 
					XMLWriter::XMLWriter(QSharedPointer<QDomDocument> doc) : m_doc(doc){
 | 
				
			||||||
 | 
					    init();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void XMLWriter::init()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
    m_rootElement=m_doc->createElement("Report");
 | 
					    m_rootElement=m_doc->createElement("Report");
 | 
				
			||||||
 | 
					    QDomNode xmlNode = m_doc->createProcessingInstruction("xml",
 | 
				
			||||||
 | 
					                               "version=\"1.0\" encoding=\"UTF8\"");
 | 
				
			||||||
 | 
					    m_doc->insertBefore(xmlNode,m_doc->firstChild());
 | 
				
			||||||
    m_doc->appendChild(m_rootElement);
 | 
					    m_doc->appendChild(m_rootElement);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,7 +48,7 @@ private:
 | 
				
			|||||||
    bool  saveToFile(QString fileName);
 | 
					    bool  saveToFile(QString fileName);
 | 
				
			||||||
    QString saveToString();
 | 
					    QString saveToString();
 | 
				
			||||||
    QByteArray saveToByteArray();
 | 
					    QByteArray saveToByteArray();
 | 
				
			||||||
 | 
					    void init();
 | 
				
			||||||
    QDomElement putQObjectItem(QString name, QObject* item);
 | 
					    QDomElement putQObjectItem(QString name, QObject* item);
 | 
				
			||||||
    void putChildQObjectItem(QString name, QObject* item, QDomElement* parentNode);
 | 
					    void putChildQObjectItem(QString name, QObject* item, QDomElement* parentNode);
 | 
				
			||||||
    void putCollectionItem(QObject* item, QDomElement* parentNode=0);
 | 
					    void putCollectionItem(QObject* item, QDomElement* parentNode=0);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<!DOCTYPE TS>
 | 
					<!DOCTYPE TS>
 | 
				
			||||||
<TS version="2.1" language="es_ES">
 | 
					<TS version="2.0" language="es_ES">
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LRVariableDialog</name>
 | 
					    <name>LRVariableDialog</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
@@ -28,15 +28,15 @@
 | 
				
			|||||||
    <name>LimeReport::AVariablesHolder</name>
 | 
					    <name>LimeReport::AVariablesHolder</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>variable with name </source>
 | 
					        <source>variable with name </source>
 | 
				
			||||||
        <translation>variable con el nombre</translation>
 | 
					        <translation type="obsolete">variable con el nombre</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source> already exists !!</source>
 | 
					        <source> already exists !!</source>
 | 
				
			||||||
        <translation>ya existe !!</translation>
 | 
					        <translation type="obsolete">ya existe !!</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source> does not exists !!</source>
 | 
					        <source> does not exists !!</source>
 | 
				
			||||||
        <translation>no existe !!</translation>
 | 
					        <translation type="obsolete">no existe !!</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
@@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">arin_a@bk.ru</p></body></html></source>
 | 
					<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">arin_a@bk.ru</p></body></html></source>
 | 
				
			||||||
        <translation></translation>
 | 
					        <translation></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message utf8="true">
 | 
				
			||||||
        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					p, li { white-space: pre-wrap; }
 | 
				
			||||||
@@ -395,7 +395,7 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>User variables</source>
 | 
					        <source>User variables</source>
 | 
				
			||||||
        <translation>Variables de usuario</translation>
 | 
					        <translation type="obsolete">Variables de usuario</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>System variables</source>
 | 
					        <source>System variables</source>
 | 
				
			||||||
@@ -413,6 +413,18 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Error</source>
 | 
					        <source>Error</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Grab variable</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Report variables</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>External variables</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::DataFooterBand</name>
 | 
					    <name>LimeReport::DataFooterBand</name>
 | 
				
			||||||
@@ -758,6 +770,14 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>One to one</source>
 | 
					        <source>One to one</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Font</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Text align</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ProxyHolder</name>
 | 
					    <name>LimeReport::ProxyHolder</name>
 | 
				
			||||||
@@ -993,6 +1013,22 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Report file name</source>
 | 
					        <source>Report file name</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Page</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Script</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Error</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Wrong file format</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ReportDesignWindow</name>
 | 
					    <name>LimeReport::ReportDesignWindow</name>
 | 
				
			||||||
@@ -1220,6 +1256,18 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>File "%1" not found!</source>
 | 
					        <source>File "%1" not found!</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>New Report Page</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Delete Report Page</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Script Browser</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ReportEnginePrivate</name>
 | 
					    <name>LimeReport::ReportEnginePrivate</name>
 | 
				
			||||||
@@ -1227,6 +1275,10 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Error</source>
 | 
					        <source>Error</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Preview</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ReportFooter</name>
 | 
					    <name>LimeReport::ReportFooter</name>
 | 
				
			||||||
@@ -1356,6 +1408,60 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
 | 
					<context>
 | 
				
			||||||
 | 
					    <name>LimeReport::ScriptBrowser</name>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Form</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Functions</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>...</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Dialogs</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Type</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">Tipo</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Name</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">Nombre</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>NO CATEGORY</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Error</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Dialog with name: %1 already exists</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>ui file must cointain QDialog instead QWidget or QMainWindow</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>wrong file format</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					</context>
 | 
				
			||||||
 | 
					<context>
 | 
				
			||||||
 | 
					    <name>LimeReport::ScriptEngineContext</name>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Dialog with name: %1 can`t be created</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ScriptEngineManager</name>
 | 
					    <name>LimeReport::ScriptEngineManager</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
@@ -1382,6 +1488,10 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Locale</source>
 | 
					        <source>Locale</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>CurrencySymbol</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::SettingDialog</name>
 | 
					    <name>LimeReport::SettingDialog</name>
 | 
				
			||||||
@@ -1494,6 +1604,21 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
 | 
					<context>
 | 
				
			||||||
 | 
					    <name>LimeReport::VariablesHolder</name>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>variable with name </source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">variable con el nombre</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source> already exists !!</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">ya existe !!</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source> does not exists !!</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">no existe !!</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>QObject</name>
 | 
					    <name>QObject</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
@@ -1688,5 +1813,9 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Content is empty</source>
 | 
					        <source>Content is empty</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Wrong file format</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
</TS>
 | 
					</TS>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,137 +1,137 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<!DOCTYPE TS>
 | 
					<!DOCTYPE TS>
 | 
				
			||||||
<TS version="2.1" language="ru_RU">
 | 
					<TS version="2.0" language="ru_RU">
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>AboutDialog</name>
 | 
					    <name>AboutDialog</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>About</source>
 | 
					        <source>About</source>
 | 
				
			||||||
        <translation type="vanished">О программе</translation>
 | 
					        <translation type="obsolete">О программе</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Author</source>
 | 
					        <source>Author</source>
 | 
				
			||||||
        <translation type="vanished">Автор</translation>
 | 
					        <translation type="obsolete">Автор</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>License</source>
 | 
					        <source>License</source>
 | 
				
			||||||
        <translation type="vanished">Лицензия</translation>
 | 
					        <translation type="obsolete">Лицензия</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Close</source>
 | 
					        <source>Close</source>
 | 
				
			||||||
        <translation type="vanished">Закрыть</translation>
 | 
					        <translation type="obsolete">Закрыть</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Version 1.1.1</source>
 | 
					        <source>Version 1.1.1</source>
 | 
				
			||||||
        <translation type="vanished">Версия</translation>
 | 
					        <translation type="obsolete">Версия</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>ConnectionDialog</name>
 | 
					    <name>ConnectionDialog</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Connection</source>
 | 
					        <source>Connection</source>
 | 
				
			||||||
        <translation type="vanished">Соединение</translation>
 | 
					        <translation type="obsolete">Соединение</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Connection Name</source>
 | 
					        <source>Connection Name</source>
 | 
				
			||||||
        <translation type="vanished">Название</translation>
 | 
					        <translation type="obsolete">Название</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Driver</source>
 | 
					        <source>Driver</source>
 | 
				
			||||||
        <translation type="vanished">Драйвер</translation>
 | 
					        <translation type="obsolete">Драйвер</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Server </source>
 | 
					        <source>Server </source>
 | 
				
			||||||
        <translation type="vanished">Сервер</translation>
 | 
					        <translation type="obsolete">Сервер</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>User</source>
 | 
					        <source>User</source>
 | 
				
			||||||
        <translation type="vanished">Пользователь</translation>
 | 
					        <translation type="obsolete">Пользователь</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Password</source>
 | 
					        <source>Password</source>
 | 
				
			||||||
        <translation type="vanished">Пароль</translation>
 | 
					        <translation type="obsolete">Пароль</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Database</source>
 | 
					        <source>Database</source>
 | 
				
			||||||
        <translation type="vanished">База данных</translation>
 | 
					        <translation type="obsolete">База данных</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Auto connect</source>
 | 
					        <source>Auto connect</source>
 | 
				
			||||||
        <translation type="vanished">Автоматическое соединение</translation>
 | 
					        <translation type="obsolete">Автоматическое соединение</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Check connection</source>
 | 
					        <source>Check connection</source>
 | 
				
			||||||
        <translation type="vanished">Проверить соединение</translation>
 | 
					        <translation type="obsolete">Проверить соединение</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Cancel</source>
 | 
					        <source>Cancel</source>
 | 
				
			||||||
        <translation type="vanished">Отмена</translation>
 | 
					        <translation type="obsolete">Отмена</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Error</source>
 | 
					        <source>Error</source>
 | 
				
			||||||
        <translation type="vanished">Ошибка</translation>
 | 
					        <translation type="obsolete">Ошибка</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Connection succsesfully established!</source>
 | 
					        <source>Connection succsesfully established!</source>
 | 
				
			||||||
        <translation type="vanished">Соединение успешно установлено!</translation>
 | 
					        <translation type="obsolete">Соединение успешно установлено!</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Connection Name is empty</source>
 | 
					        <source>Connection Name is empty</source>
 | 
				
			||||||
        <translation type="vanished">Наименование соединения не указано</translation>
 | 
					        <translation type="obsolete">Наименование соединения не указано</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Connection with name </source>
 | 
					        <source>Connection with name </source>
 | 
				
			||||||
        <translation type="vanished">Соединение</translation>
 | 
					        <translation type="obsolete">Соединение</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source> already exists </source>
 | 
					        <source> already exists </source>
 | 
				
			||||||
        <translation type="vanished">уже существует</translation>
 | 
					        <translation type="obsolete">уже существует</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>DataBrowser</name>
 | 
					    <name>DataBrowser</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Datasources</source>
 | 
					        <source>Datasources</source>
 | 
				
			||||||
        <translation type="vanished">Источники данных</translation>
 | 
					        <translation type="obsolete">Источники данных</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Add database connection</source>
 | 
					        <source>Add database connection</source>
 | 
				
			||||||
        <translation type="vanished">Добавить соединение с базой</translation>
 | 
					        <translation type="obsolete">Добавить соединение с базой</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Add new datasource</source>
 | 
					        <source>Add new datasource</source>
 | 
				
			||||||
        <translation type="vanished">Добавить новый источник данных</translation>
 | 
					        <translation type="obsolete">Добавить новый источник данных</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>View data</source>
 | 
					        <source>View data</source>
 | 
				
			||||||
        <translation type="vanished">Просмотр данных в источнике</translation>
 | 
					        <translation type="obsolete">Просмотр данных в источнике</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Change datasource</source>
 | 
					        <source>Change datasource</source>
 | 
				
			||||||
        <translation type="vanished">Изменить источник данных</translation>
 | 
					        <translation type="obsolete">Изменить источник данных</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Delete datasource</source>
 | 
					        <source>Delete datasource</source>
 | 
				
			||||||
        <translation type="vanished">Удалить источник данных</translation>
 | 
					        <translation type="obsolete">Удалить источник данных</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Show error</source>
 | 
					        <source>Show error</source>
 | 
				
			||||||
        <translation type="vanished">Показать ошибки</translation>
 | 
					        <translation type="obsolete">Показать ошибки</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Variables</source>
 | 
					        <source>Variables</source>
 | 
				
			||||||
        <translation type="vanished">Переменные</translation>
 | 
					        <translation type="obsolete">Переменные</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Add new variable</source>
 | 
					        <source>Add new variable</source>
 | 
				
			||||||
        <translation type="vanished">Добавить новую переменную</translation>
 | 
					        <translation type="obsolete">Добавить новую переменную</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Edit variable</source>
 | 
					        <source>Edit variable</source>
 | 
				
			||||||
        <translation type="vanished">Редактировать переменную</translation>
 | 
					        <translation type="obsolete">Редактировать переменную</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Delete variable</source>
 | 
					        <source>Delete variable</source>
 | 
				
			||||||
        <translation type="vanished">Удалить переменную</translation>
 | 
					        <translation type="obsolete">Удалить переменную</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
@@ -161,15 +161,15 @@
 | 
				
			|||||||
    <name>LimeReport::AVariablesHolder</name>
 | 
					    <name>LimeReport::AVariablesHolder</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>variable with name </source>
 | 
					        <source>variable with name </source>
 | 
				
			||||||
        <translation>переменная</translation>
 | 
					        <translation type="obsolete">переменная</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source> already exists !!</source>
 | 
					        <source> already exists !!</source>
 | 
				
			||||||
        <translation>уже существует !!</translation>
 | 
					        <translation type="obsolete">уже существует !!</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source> does not exists !!</source>
 | 
					        <source> does not exists !!</source>
 | 
				
			||||||
        <translation>не существует !!</translation>
 | 
					        <translation type="obsolete">не существует !!</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
@@ -223,7 +223,7 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">arin_a@bk.ru</p></body></html></source>
 | 
					<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">arin_a@bk.ru</p></body></html></source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message utf8="true">
 | 
				
			||||||
        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					p, li { white-space: pre-wrap; }
 | 
				
			||||||
@@ -525,7 +525,7 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>User variables</source>
 | 
					        <source>User variables</source>
 | 
				
			||||||
        <translation>Пользовательские переменные</translation>
 | 
					        <translation type="obsolete">Пользовательские переменные</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>System variables</source>
 | 
					        <source>System variables</source>
 | 
				
			||||||
@@ -538,7 +538,7 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Do you really want delete variable "%1" ?</source>
 | 
					        <source>Do you really want delete variable "%1" ?</source>
 | 
				
			||||||
        <translation type="vanished">Вы действительно хотите удалить переменную "%1" ?</translation>
 | 
					        <translation type="obsolete">Вы действительно хотите удалить переменную "%1" ?</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Error</source>
 | 
					        <source>Error</source>
 | 
				
			||||||
@@ -552,6 +552,18 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Do you really want to delete variable "%1" ?</source>
 | 
					        <source>Do you really want to delete variable "%1" ?</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Grab variable</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Report variables</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>External variables</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::DataFooterBand</name>
 | 
					    <name>LimeReport::DataFooterBand</name>
 | 
				
			||||||
@@ -779,11 +791,11 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
    <name>LimeReport::PageDesignIntf</name>
 | 
					    <name>LimeReport::PageDesignIntf</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Warning</source>
 | 
					        <source>Warning</source>
 | 
				
			||||||
        <translation type="vanished">Предупреждение</translation>
 | 
					        <translation type="obsolete">Предупреждение</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Multi band deletion not allowed</source>
 | 
					        <source>Multi band deletion not allowed</source>
 | 
				
			||||||
        <translation type="vanished">Удаление нескольких бандов запрещено</translation>
 | 
					        <translation type="obsolete">Удаление нескольких бандов запрещено</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
@@ -917,6 +929,14 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>One to one</source>
 | 
					        <source>One to one</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Font</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">Шрифт</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Text align</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ProxyHolder</name>
 | 
					    <name>LimeReport::ProxyHolder</name>
 | 
				
			||||||
@@ -1152,6 +1172,22 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Report file name</source>
 | 
					        <source>Report file name</source>
 | 
				
			||||||
        <translation>Файл отчета</translation>
 | 
					        <translation>Файл отчета</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Page</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Script</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Error</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">Ошибка</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Wrong file format</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ReportDesignWindow</name>
 | 
					    <name>LimeReport::ReportDesignWindow</name>
 | 
				
			||||||
@@ -1379,6 +1415,18 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>File "%1" not found!</source>
 | 
					        <source>File "%1" not found!</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>New Report Page</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Delete Report Page</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Script Browser</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ReportEnginePrivate</name>
 | 
					    <name>LimeReport::ReportEnginePrivate</name>
 | 
				
			||||||
@@ -1386,6 +1434,10 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Error</source>
 | 
					        <source>Error</source>
 | 
				
			||||||
        <translation>Ошибка</translation>
 | 
					        <translation>Ошибка</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Preview</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ReportFooter</name>
 | 
					    <name>LimeReport::ReportFooter</name>
 | 
				
			||||||
@@ -1515,6 +1567,60 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
 | 
					<context>
 | 
				
			||||||
 | 
					    <name>LimeReport::ScriptBrowser</name>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Form</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Functions</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">Функции</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>...</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Dialogs</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Type</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">Тип</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Name</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">Имя переменной</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>NO CATEGORY</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Error</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">Ошибка</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Dialog with name: %1 already exists</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>ui file must cointain QDialog instead QWidget or QMainWindow</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>wrong file format</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					</context>
 | 
				
			||||||
 | 
					<context>
 | 
				
			||||||
 | 
					    <name>LimeReport::ScriptEngineContext</name>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Dialog with name: %1 can`t be created</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::ScriptEngineManager</name>
 | 
					    <name>LimeReport::ScriptEngineManager</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
@@ -1541,6 +1647,10 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Locale</source>
 | 
					        <source>Locale</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>CurrencySymbol</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>LimeReport::SettingDialog</name>
 | 
					    <name>LimeReport::SettingDialog</name>
 | 
				
			||||||
@@ -1653,91 +1763,106 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
 | 
					<context>
 | 
				
			||||||
 | 
					    <name>LimeReport::VariablesHolder</name>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>variable with name </source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">переменная</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source> already exists !!</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">уже существует !!</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source> does not exists !!</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished">не существует !!</translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>PreviewReportWindow</name>
 | 
					    <name>PreviewReportWindow</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Preview</source>
 | 
					        <source>Preview</source>
 | 
				
			||||||
        <translation type="vanished">Предварительный просмотр</translation>
 | 
					        <translation type="obsolete">Предварительный просмотр</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>View</source>
 | 
					        <source>View</source>
 | 
				
			||||||
        <translation type="vanished">Просмотр</translation>
 | 
					        <translation type="obsolete">Просмотр</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Report</source>
 | 
					        <source>Report</source>
 | 
				
			||||||
        <translation type="vanished">Отчет</translation>
 | 
					        <translation type="obsolete">Отчет</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>toolBar</source>
 | 
					        <source>toolBar</source>
 | 
				
			||||||
        <translation type="vanished">Панель инструментов</translation>
 | 
					        <translation type="obsolete">Панель инструментов</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Print</source>
 | 
					        <source>Print</source>
 | 
				
			||||||
        <translation type="vanished">Печать</translation>
 | 
					        <translation type="obsolete">Печать</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Zoom In</source>
 | 
					        <source>Zoom In</source>
 | 
				
			||||||
        <translation type="vanished">Увеличить</translation>
 | 
					        <translation type="obsolete">Увеличить</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Zoom Out</source>
 | 
					        <source>Zoom Out</source>
 | 
				
			||||||
        <translation type="vanished">Уменьшить</translation>
 | 
					        <translation type="obsolete">Уменьшить</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Prior Page</source>
 | 
					        <source>Prior Page</source>
 | 
				
			||||||
        <translation type="vanished">Предыдущая страница</translation>
 | 
					        <translation type="obsolete">Предыдущая страница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Next Page</source>
 | 
					        <source>Next Page</source>
 | 
				
			||||||
        <translation type="vanished">Следующая страница</translation>
 | 
					        <translation type="obsolete">Следующая страница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Close Preview</source>
 | 
					        <source>Close Preview</source>
 | 
				
			||||||
        <translation type="vanished">Закрыть</translation>
 | 
					        <translation type="obsolete">Закрыть</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Edit Mode</source>
 | 
					        <source>Edit Mode</source>
 | 
				
			||||||
        <translation type="vanished">Режим редактирования</translation>
 | 
					        <translation type="obsolete">Режим редактирования</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Save to file</source>
 | 
					        <source>Save to file</source>
 | 
				
			||||||
        <translation type="vanished">Записать в файл</translation>
 | 
					        <translation type="obsolete">Записать в файл</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Show errors</source>
 | 
					        <source>Show errors</source>
 | 
				
			||||||
        <translation type="vanished">Показать ошибки</translation>
 | 
					        <translation type="obsolete">Показать ошибки</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>First Page</source>
 | 
					        <source>First Page</source>
 | 
				
			||||||
        <translation type="vanished">Первая страница</translation>
 | 
					        <translation type="obsolete">Первая страница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>First page</source>
 | 
					        <source>First page</source>
 | 
				
			||||||
        <translation type="vanished">Первая страница</translation>
 | 
					        <translation type="obsolete">Первая страница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Last Page</source>
 | 
					        <source>Last Page</source>
 | 
				
			||||||
        <translation type="vanished">Последняя страница</translation>
 | 
					        <translation type="obsolete">Последняя страница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Print To PDF</source>
 | 
					        <source>Print To PDF</source>
 | 
				
			||||||
        <translation type="vanished">Печать в PDF</translation>
 | 
					        <translation type="obsolete">Печать в PDF</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Page: </source>
 | 
					        <source>Page: </source>
 | 
				
			||||||
        <translation type="vanished">Страница: </translation>
 | 
					        <translation type="obsolete">Страница: </translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source> of %1</source>
 | 
					        <source> of %1</source>
 | 
				
			||||||
        <translation type="vanished"> из %1</translation>
 | 
					        <translation type="obsolete"> из %1</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Report file name</source>
 | 
					        <source>Report file name</source>
 | 
				
			||||||
        <translation type="vanished">Файл отчета</translation>
 | 
					        <translation type="obsolete">Файл отчета</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>PDF file name</source>
 | 
					        <source>PDF file name</source>
 | 
				
			||||||
        <translation type="vanished">Имя PDF файла</translation>
 | 
					        <translation type="obsolete">Имя PDF файла</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
@@ -1824,7 +1949,7 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Master datasource "%1" not found!</source>
 | 
					        <source>Master datasource "%1" not found!</source>
 | 
				
			||||||
        <translation type="vanished">Главный источник данных "%1" не найден!</translation>
 | 
					        <translation type="obsolete">Главный источник данных "%1" не найден!</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Child</source>
 | 
					        <source>Child</source>
 | 
				
			||||||
@@ -1884,19 +2009,19 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>TopLine</source>
 | 
					        <source>TopLine</source>
 | 
				
			||||||
        <translation type="vanished">Верхняя граница</translation>
 | 
					        <translation type="obsolete">Верхняя граница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>BottomLine</source>
 | 
					        <source>BottomLine</source>
 | 
				
			||||||
        <translation type="vanished">Нижняя граница</translation>
 | 
					        <translation type="obsolete">Нижняя граница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>LeftLine</source>
 | 
					        <source>LeftLine</source>
 | 
				
			||||||
        <translation type="vanished">Левая граница</translation>
 | 
					        <translation type="obsolete">Левая граница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>RightLine</source>
 | 
					        <source>RightLine</source>
 | 
				
			||||||
        <translation type="vanished">Правая граница</translation>
 | 
					        <translation type="obsolete">Правая граница</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>content</source>
 | 
					        <source>content</source>
 | 
				
			||||||
@@ -1954,161 +2079,165 @@ p, li { white-space: pre-wrap; }
 | 
				
			|||||||
        <source>Content is empty</source>
 | 
					        <source>Content is empty</source>
 | 
				
			||||||
        <translation type="unfinished"></translation>
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
 | 
					    <message>
 | 
				
			||||||
 | 
					        <source>Wrong file format</source>
 | 
				
			||||||
 | 
					        <translation type="unfinished"></translation>
 | 
				
			||||||
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>SQLEditDialog</name>
 | 
					    <name>SQLEditDialog</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Datasource</source>
 | 
					        <source>Datasource</source>
 | 
				
			||||||
        <translation type="vanished">Источник данных</translation>
 | 
					        <translation type="obsolete">Источник данных</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Connection</source>
 | 
					        <source>Connection</source>
 | 
				
			||||||
        <translation type="vanished">Соединение</translation>
 | 
					        <translation type="obsolete">Соединение</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Datasource Name</source>
 | 
					        <source>Datasource Name</source>
 | 
				
			||||||
        <translation type="vanished">Имя источника</translation>
 | 
					        <translation type="obsolete">Имя источника</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Subdetail</source>
 | 
					        <source>Subdetail</source>
 | 
				
			||||||
        <translation type="vanished">Подчиненный</translation>
 | 
					        <translation type="obsolete">Подчиненный</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Master datasource</source>
 | 
					        <source>Master datasource</source>
 | 
				
			||||||
        <translation type="vanished">Главный источник</translation>
 | 
					        <translation type="obsolete">Главный источник</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Subquery mode</source>
 | 
					        <source>Subquery mode</source>
 | 
				
			||||||
        <translation type="vanished">Режим подзапроса</translation>
 | 
					        <translation type="obsolete">Режим подзапроса</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Filter mode</source>
 | 
					        <source>Filter mode</source>
 | 
				
			||||||
        <translation type="vanished">Режим фильтрации</translation>
 | 
					        <translation type="obsolete">Режим фильтрации</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>SQL</source>
 | 
					        <source>SQL</source>
 | 
				
			||||||
        <translation type="vanished">SQL запрос</translation>
 | 
					        <translation type="obsolete">SQL запрос</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Preview</source>
 | 
					        <source>Preview</source>
 | 
				
			||||||
        <translation type="vanished">Предпросмотр</translation>
 | 
					        <translation type="obsolete">Предпросмотр</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Hide Preview</source>
 | 
					        <source>Hide Preview</source>
 | 
				
			||||||
        <translation type="vanished">Скрыть</translation>
 | 
					        <translation type="obsolete">Скрыть</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Child datasource</source>
 | 
					        <source>Child datasource</source>
 | 
				
			||||||
        <translation type="vanished">Подчиненный источник</translation>
 | 
					        <translation type="obsolete">Подчиненный источник</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Fields map</source>
 | 
					        <source>Fields map</source>
 | 
				
			||||||
        <translation type="vanished">Поля для связи источников</translation>
 | 
					        <translation type="obsolete">Поля для связи источников</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Data preview</source>
 | 
					        <source>Data preview</source>
 | 
				
			||||||
        <translation type="vanished">Данные</translation>
 | 
					        <translation type="obsolete">Данные</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Cancel</source>
 | 
					        <source>Cancel</source>
 | 
				
			||||||
        <translation type="vanished">Отмена</translation>
 | 
					        <translation type="obsolete">Отмена</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Error</source>
 | 
					        <source>Error</source>
 | 
				
			||||||
        <translation type="vanished">Ошибка</translation>
 | 
					        <translation type="obsolete">Ошибка</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Datasource Name is empty !</source>
 | 
					        <source>Datasource Name is empty !</source>
 | 
				
			||||||
        <translation type="vanished">Имя источника данных не заполнено !</translation>
 | 
					        <translation type="obsolete">Имя источника данных не заполнено !</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>SQL is empty !</source>
 | 
					        <source>SQL is empty !</source>
 | 
				
			||||||
        <translation type="vanished">SQL запрос пустой !</translation>
 | 
					        <translation type="obsolete">SQL запрос пустой !</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Datasource with name: "%1" already exists !</source>
 | 
					        <source>Datasource with name: "%1" already exists !</source>
 | 
				
			||||||
        <translation type="vanished">Источник данных с именем: "%1" уже существует !</translation>
 | 
					        <translation type="obsolete">Источник данных с именем: "%1" уже существует !</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Datasource with name %1 already exist</source>
 | 
					        <source>Datasource with name %1 already exist</source>
 | 
				
			||||||
        <translation type="vanished">Источник данных с именем: "%1" уже существует</translation>
 | 
					        <translation type="obsolete">Источник данных с именем: "%1" уже существует</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Attention</source>
 | 
					        <source>Attention</source>
 | 
				
			||||||
        <translation type="vanished">Внимание</translation>
 | 
					        <translation type="obsolete">Внимание</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Connection is not specified</source>
 | 
					        <source>Connection is not specified</source>
 | 
				
			||||||
        <translation type="vanished">Соединение не указано</translation>
 | 
					        <translation type="obsolete">Соединение не указано</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Refresh</source>
 | 
					        <source>Refresh</source>
 | 
				
			||||||
        <translation type="vanished">Обновить</translation>
 | 
					        <translation type="obsolete">Обновить</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>SettingDialog</name>
 | 
					    <name>SettingDialog</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Designer setting</source>
 | 
					        <source>Designer setting</source>
 | 
				
			||||||
        <translation type="vanished">Настройки дизайнера</translation>
 | 
					        <translation type="obsolete">Настройки дизайнера</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Default font</source>
 | 
					        <source>Default font</source>
 | 
				
			||||||
        <translation type="vanished">Шрифт по умолчанию</translation>
 | 
					        <translation type="obsolete">Шрифт по умолчанию</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Grid</source>
 | 
					        <source>Grid</source>
 | 
				
			||||||
        <translation type="vanished">Сетка</translation>
 | 
					        <translation type="obsolete">Сетка</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Vertical grid step</source>
 | 
					        <source>Vertical grid step</source>
 | 
				
			||||||
        <translation type="vanished">Вертикальный шаг</translation>
 | 
					        <translation type="obsolete">Вертикальный шаг</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Horizontal grid step</source>
 | 
					        <source>Horizontal grid step</source>
 | 
				
			||||||
        <translation type="vanished">Горизонтальный шаг</translation>
 | 
					        <translation type="obsolete">Горизонтальный шаг</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>TextItemEditor</name>
 | 
					    <name>TextItemEditor</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Text Item Editor</source>
 | 
					        <source>Text Item Editor</source>
 | 
				
			||||||
        <translation type="vanished">Редактор текстового элемента</translation>
 | 
					        <translation type="obsolete">Редактор текстового элемента</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Content</source>
 | 
					        <source>Content</source>
 | 
				
			||||||
        <translation type="vanished">Содержимое</translation>
 | 
					        <translation type="obsolete">Содержимое</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Data</source>
 | 
					        <source>Data</source>
 | 
				
			||||||
        <translation type="vanished">Источники данных</translation>
 | 
					        <translation type="obsolete">Источники данных</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Functions</source>
 | 
					        <source>Functions</source>
 | 
				
			||||||
        <translation type="vanished">Функции</translation>
 | 
					        <translation type="obsolete">Функции</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Editor settings</source>
 | 
					        <source>Editor settings</source>
 | 
				
			||||||
        <translation type="vanished">Настройки</translation>
 | 
					        <translation type="obsolete">Настройки</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Editor font</source>
 | 
					        <source>Editor font</source>
 | 
				
			||||||
        <translation type="vanished">Шрифт редактора</translation>
 | 
					        <translation type="obsolete">Шрифт редактора</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Cancel</source>
 | 
					        <source>Cancel</source>
 | 
				
			||||||
        <translation type="vanished">Отмена</translation>
 | 
					        <translation type="obsolete">Отмена</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
<context>
 | 
					<context>
 | 
				
			||||||
    <name>WaitForm</name>
 | 
					    <name>WaitForm</name>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Wait</source>
 | 
					        <source>Wait</source>
 | 
				
			||||||
        <translation type="vanished">Ожидайте</translation>
 | 
					        <translation type="obsolete">Ожидайте</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
    <message>
 | 
					    <message>
 | 
				
			||||||
        <source>Please wait ...</source>
 | 
					        <source>Please wait ...</source>
 | 
				
			||||||
        <translation type="vanished">Пожалуста подождите ...</translation>
 | 
					        <translation type="obsolete">Пожалуста подождите ...</translation>
 | 
				
			||||||
    </message>
 | 
					    </message>
 | 
				
			||||||
</context>
 | 
					</context>
 | 
				
			||||||
</TS>
 | 
					</TS>
 | 
				
			||||||
 
 | 
				
			|||||||