mirror of
https://github.com/fralx/LimeReport.git
synced 2025-10-09 05:57:14 +03:00
Merge branch 'develop' into feature/CH_Private_To_Public
# Conflicts: # limereport/lrreportdesignwidget.cpp # limereport/lrreportdesignwidget.h # limereport/lrreportdesignwindow.h
This commit is contained in:
@@ -33,6 +33,7 @@
|
||||
#include "lrreportengine_p.h"
|
||||
#include "lrbasedesignintf.h"
|
||||
#include "lrsettingdialog.h"
|
||||
#include "dialogdesigner/lrdialogdesigner.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QObject>
|
||||
@@ -49,7 +50,11 @@ namespace LimeReport {
|
||||
// ReportDesignIntf
|
||||
|
||||
ReportDesignWidget::ReportDesignWidget(ReportEngine *report, QMainWindow *mainWindow, QWidget *parent) :
|
||||
QWidget(parent), m_mainWindow(mainWindow), m_verticalGridStep(10), m_horizontalGridStep(10), m_useGrid(false)
|
||||
QWidget(parent),
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
m_dialogDesignerManager(new DialogDesignerManager(this)),
|
||||
#endif
|
||||
m_mainWindow(mainWindow), m_verticalGridStep(10), m_horizontalGridStep(10), m_useGrid(false), m_dialogChanged(false)
|
||||
{
|
||||
m_tabWidget = new QTabWidget(this);
|
||||
m_tabWidget->setTabPosition(QTabWidget::South);
|
||||
@@ -72,15 +77,86 @@ ReportDesignWidget::ReportDesignWidget(ReportEngine *report, QMainWindow *mainWi
|
||||
connect(m_report,SIGNAL(pagesLoadFinished()),this,SLOT(slotPagesLoadFinished()));
|
||||
connect(m_report,SIGNAL(cleared()),this,SIGNAL(cleared()));
|
||||
connect(m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(slotCurrentTabChanged(int)));
|
||||
connect(m_report->scriptContext(), SIGNAL(dialogDeleted(QString)), this, SLOT(slotDialogDeleted(QString)));
|
||||
|
||||
//m_instance=this;
|
||||
m_scriptEditor->setPlainText(m_report->scriptContext()->initScript());
|
||||
m_zoomer = new GraphicsViewZoomer(activeView());
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
m_defaultFont = QFont("Arial",10);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
connect(m_dialogDesignerManager, SIGNAL(dialogChanged(QString)),
|
||||
this, SLOT(slotDialogChanged(QString)));
|
||||
connect(m_dialogDesignerManager, SIGNAL(dialogNameChanged(QString,QString)),
|
||||
this, SLOT(slotDialogNameChanged(QString,QString)));
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
DialogDesignerManager *ReportDesignWidget::dialogDesignerManager() const
|
||||
{
|
||||
return m_dialogDesignerManager;
|
||||
}
|
||||
|
||||
QString ReportDesignWidget::activeDialogName()
|
||||
{
|
||||
if (activeDialogPage())
|
||||
return activeDialogPage()->dialogName();
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
QWidget *ReportDesignWidget::toolWindow(ReportDesignWidget::ToolWindowType windowType)
|
||||
{
|
||||
switch (windowType) {
|
||||
case WidgetBox:
|
||||
return dialogDesignerManager()->widgetBox();
|
||||
case PropertyEditor:
|
||||
return dialogDesignerManager()->propertyEditor();
|
||||
case ObjectInspector:
|
||||
return dialogDesignerManager()->objectInspector();
|
||||
case ActionEditor:
|
||||
return dialogDesignerManager()->actionEditor();
|
||||
case ResourceEditor:
|
||||
return dialogDesignerManager()->resourcesEditor();
|
||||
case SignalSlotEditor:
|
||||
return dialogDesignerManager()->signalSlotEditor();
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
ReportDesignWidget::EditorTabType ReportDesignWidget::activeTabType()
|
||||
{
|
||||
QString tabType = m_tabWidget->tabWhatsThis(m_tabWidget->currentIndex());
|
||||
if ( tabType.compare("dialog") == 0) return Dialog;
|
||||
if ( tabType.compare("script") == 0) return Script;
|
||||
return Page;
|
||||
}
|
||||
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
|
||||
void ReportDesignWidget::initDialogDesignerToolBar(QToolBar *toolBar)
|
||||
{
|
||||
m_dialogDesignerManager->initToolBar(toolBar);
|
||||
}
|
||||
|
||||
void ReportDesignWidget::updateDialogs()
|
||||
{
|
||||
for ( int i = 0; i<m_tabWidget->count(); ++i ){
|
||||
if (m_tabWidget->tabWhatsThis(i).compare("dialog") == 0){
|
||||
m_report->scriptContext()->changeDialog(m_tabWidget->tabText(i), m_dialogDesignerManager->getDialogDescription(m_tabWidget->widget(i)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
bool ReportDesignWidget::useMagnet() const
|
||||
{
|
||||
return m_useMagnet;
|
||||
@@ -139,6 +215,7 @@ void ReportDesignWidget::loadState(QSettings* settings)
|
||||
|
||||
|
||||
void ReportDesignWidget::createTabs(){
|
||||
int pageIndex = -1;
|
||||
for (int i = 0; i<m_report->pageCount();++i){
|
||||
QGraphicsView* view = new QGraphicsView(qobject_cast<QWidget*>(this));
|
||||
view->setBackgroundBrush(QBrush(Qt::gray));
|
||||
@@ -152,13 +229,42 @@ void ReportDesignWidget::createTabs(){
|
||||
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));
|
||||
pageIndex = m_tabWidget->addTab(view,QIcon(),m_report->pageAt(i)->pageItem()->objectName());
|
||||
m_tabWidget->setTabWhatsThis(pageIndex, "page");
|
||||
}
|
||||
|
||||
m_scriptEditor = new QTextEdit(this);
|
||||
m_tabWidget->addTab(m_scriptEditor,QIcon(),tr("Script"));
|
||||
pageIndex = m_tabWidget->addTab(m_scriptEditor,QIcon(),tr("Script"));
|
||||
m_tabWidget->setTabWhatsThis(pageIndex,"script");
|
||||
m_tabWidget->setCurrentIndex(0);
|
||||
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
QWidget* dialogDesigner;
|
||||
foreach(DialogDescriber::Ptr dialogDesc, m_report->scriptContext()->dialogDescribers()){
|
||||
dialogDesigner = m_dialogDesignerManager->createFormEditor(dialogDesc->description());
|
||||
pageIndex = m_tabWidget->addTab(dialogDesigner,QIcon(),dialogDesc->name());
|
||||
m_tabWidget->setTabWhatsThis(pageIndex,"dialog");
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
void ReportDesignWidget::createNewDialogTab(const QString& dialogName, const QByteArray& description)
|
||||
{
|
||||
QWidget* dialogDesigner = m_dialogDesignerManager->createFormEditor(description);
|
||||
int pageIndex = m_tabWidget->addTab(dialogDesigner,QIcon(),dialogName);
|
||||
m_tabWidget->setTabWhatsThis(pageIndex,"dialog");
|
||||
m_tabWidget->setCurrentIndex(pageIndex);
|
||||
}
|
||||
|
||||
DialogDesigner*ReportDesignWidget::activeDialogPage()
|
||||
{
|
||||
return dynamic_cast<DialogDesigner*>(m_tabWidget->currentWidget());
|
||||
}
|
||||
#endif
|
||||
|
||||
ReportDesignWidget::~ReportDesignWidget()
|
||||
{
|
||||
delete m_zoomer;
|
||||
@@ -189,7 +295,6 @@ void ReportDesignWidget::connectPage(PageDesignIntf *page)
|
||||
connect(page, SIGNAL(pageUpdateFinished(LimeReport::PageDesignIntf*)),
|
||||
this, SIGNAL(activePageUpdated(LimeReport::PageDesignIntf*)));
|
||||
|
||||
//activeView()->centerOn(0,0);
|
||||
emit activePageChanged();
|
||||
}
|
||||
|
||||
@@ -236,6 +341,8 @@ PageDesignIntf * ReportDesignWidget::activePage()
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
QList<QGraphicsItem *> ReportDesignWidget::selectedItems(){
|
||||
return activePage()->selectedItems();
|
||||
}
|
||||
@@ -256,34 +363,61 @@ void ReportDesignWidget::slotItemSelected(BaseDesignIntf *item){
|
||||
emit itemSelected(item);
|
||||
}
|
||||
|
||||
void ReportDesignWidget::saveToFile(const QString &fileName){
|
||||
bool ReportDesignWidget::saveToFile(const QString &fileName){
|
||||
|
||||
bool result = false;
|
||||
m_report->scriptContext()->setInitScript(m_scriptEditor->toPlainText());
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
updateDialogs();
|
||||
#endif
|
||||
|
||||
if (m_report->saveToFile(fileName)) {
|
||||
m_report->emitSaveFinished();
|
||||
m_report->emitSaveFinished();
|
||||
result = true;
|
||||
}
|
||||
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
if (result){
|
||||
m_dialogChanged = false;
|
||||
m_dialogDesignerManager->setDirty(false);
|
||||
}
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ReportDesignWidget::save()
|
||||
{
|
||||
m_report->scriptContext()->setInitScript(m_scriptEditor->toPlainText());
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
updateDialogs();
|
||||
#endif
|
||||
|
||||
bool result = false;
|
||||
|
||||
if (!m_report->reportFileName().isEmpty()){
|
||||
if (m_report->saveToFile()){
|
||||
m_report->emitSaveFinished();
|
||||
return true;
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
m_report->emitSaveReport();
|
||||
if (m_report->isSaved()) {
|
||||
m_report->emitSaveFinished();
|
||||
return true;
|
||||
result = true;
|
||||
}
|
||||
if (m_report->saveToFile(QFileDialog::getSaveFileName(this,tr("Report file name"),"","Report files (*.lrxml);; All files (*)"))){
|
||||
else if (m_report->saveToFile(QFileDialog::getSaveFileName(this,tr("Report file name"),"","Report files (*.lrxml);; All files (*)"))){
|
||||
m_report->emitSaveFinished();
|
||||
return true;
|
||||
result = true;
|
||||
};
|
||||
}
|
||||
return false;
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
if (result){
|
||||
m_dialogChanged = false;
|
||||
m_dialogDesignerManager->setDirty(false);
|
||||
}
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
bool ReportDesignWidget::loadFromFile(const QString &fileName)
|
||||
@@ -293,6 +427,7 @@ bool ReportDesignWidget::loadFromFile(const QString &fileName)
|
||||
//connectPage(m_report->pageAt(0));
|
||||
m_scriptEditor->setPlainText(m_report->scriptContext()->initScript());
|
||||
emit loaded();
|
||||
m_dialogChanged = false;
|
||||
return true;
|
||||
} else {
|
||||
QMessageBox::critical(this,tr("Error"),tr("Wrong file format"));
|
||||
@@ -316,7 +451,7 @@ QString ReportDesignWidget::reportFileName()
|
||||
bool ReportDesignWidget::isNeedToSave()
|
||||
{
|
||||
if(m_report)
|
||||
return m_report->isNeedToSave();
|
||||
return (m_report->isNeedToSave() || m_dialogChanged);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -335,12 +470,20 @@ void ReportDesignWidget::undo()
|
||||
{
|
||||
if (activePage())
|
||||
activePage()->undo();
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
if (activeDialogPage())
|
||||
activeDialogPage()->undo();
|
||||
#endif
|
||||
}
|
||||
|
||||
void ReportDesignWidget::redo()
|
||||
{
|
||||
if (activePage())
|
||||
activePage()->redo();
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
if (activeDialogPage())
|
||||
activeDialogPage()->redo();
|
||||
#endif
|
||||
}
|
||||
|
||||
void ReportDesignWidget::copy()
|
||||
@@ -457,12 +600,18 @@ void ReportDesignWidget::setBorders(const BaseDesignIntf::BorderLines& borders)
|
||||
void ReportDesignWidget::previewReport()
|
||||
{
|
||||
report()->scriptContext()->setInitScript(m_scriptEditor->toPlainText());
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
updateDialogs();
|
||||
#endif
|
||||
report()->previewReport();
|
||||
}
|
||||
|
||||
void ReportDesignWidget::printReport()
|
||||
{
|
||||
report()->scriptContext()->setInitScript(m_scriptEditor->toPlainText());
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
updateDialogs();
|
||||
#endif
|
||||
setCursor(Qt::WaitCursor);
|
||||
report()->printReport();
|
||||
setCursor(Qt::ArrowCursor);
|
||||
@@ -587,6 +736,16 @@ void ReportDesignWidget::slotPagesLoadFinished()
|
||||
emit loaded();
|
||||
}
|
||||
|
||||
void ReportDesignWidget::slotDialogDeleted(QString dialogName)
|
||||
{
|
||||
for (int i = 0; i<m_tabWidget->count(); ++i ){
|
||||
if (m_tabWidget->tabText(i).compare(dialogName) == 0){
|
||||
delete m_tabWidget->widget(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ReportDesignWidget::slotDatasourceCollectionLoaded(const QString & /*collectionName*/)
|
||||
{
|
||||
}
|
||||
@@ -605,9 +764,44 @@ void ReportDesignWidget::slotCurrentTabChanged(int index)
|
||||
}
|
||||
m_zoomer->setView(view);
|
||||
}
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
if (activeTabType() == Dialog){
|
||||
m_dialogDesignerManager->setActiveEditor(m_tabWidget->widget(index));
|
||||
}
|
||||
updateDialogs();
|
||||
#endif
|
||||
emit activePageChanged();
|
||||
}
|
||||
|
||||
#ifdef HAVE_QTDESIGNER_INTEGRATION
|
||||
|
||||
void ReportDesignWidget::addNewDialog()
|
||||
{
|
||||
QFile templateUi(":/templates/templates/Dialog.ui");
|
||||
templateUi.open(QIODevice::ReadOnly|QIODevice::Text);
|
||||
QString templateStr = templateUi.readAll();
|
||||
QString dialogName = m_report->scriptContext()->getNewDialogName();
|
||||
templateStr.replace("$ClassName$", dialogName);
|
||||
m_report->scriptContext()->addDialog(dialogName,templateStr.toUtf8());
|
||||
createNewDialogTab(dialogName, templateStr.toUtf8());
|
||||
}
|
||||
|
||||
void ReportDesignWidget::slotDialogChanged(QString )
|
||||
{
|
||||
m_dialogChanged = true;
|
||||
}
|
||||
|
||||
void ReportDesignWidget::slotDialogNameChanged(QString oldName, QString newName)
|
||||
{
|
||||
for (int i = 0; i < m_tabWidget->count(); ++i){
|
||||
if (m_tabWidget->tabText(i).compare(oldName) == 0)
|
||||
m_tabWidget->setTabText(i, newName);
|
||||
}
|
||||
m_report->scriptContext()->changeDialogName(oldName, newName);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
bool ReportDesignWidget::eventFilter(QObject *target, QEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::Wheel){
|
||||
|
Reference in New Issue
Block a user