0
0
mirror of https://github.com/fralx/LimeReport.git synced 2025-10-09 05:57:14 +03:00

Dialog Designer intergration has been finished

This commit is contained in:
Arin Alexander
2017-04-14 02:43:34 +03:00
parent 0692435b26
commit 7b04b6efca
15 changed files with 448 additions and 76 deletions

View File

@@ -50,9 +50,9 @@ namespace LimeReport {
ReportDesignWidget::ReportDesignWidget(ReportEnginePrivate *report, QMainWindow *mainWindow, QWidget *parent) :
QWidget(parent),
#ifdef HAVE_QTDESIGNER_INTEGRATION
m_dialogDesigner(new DialogDesigner(this)),
m_dialogDesignerManager(new DialogDesignerManager(this)),
#endif
m_mainWindow(mainWindow), m_verticalGridStep(10), m_horizontalGridStep(10), m_useGrid(false)
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);
@@ -75,6 +75,7 @@ ReportDesignWidget::ReportDesignWidget(ReportEnginePrivate *report, QMainWindow
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_scriptEditor->setPlainText(report->scriptContext()->initScript());
m_zoomer = new GraphicsViewZoomer(activeView());
@@ -84,35 +85,49 @@ ReportDesignWidget::ReportDesignWidget(ReportEnginePrivate *report, QMainWindow
#endif
#ifdef HAVE_QTDESIGNER_INTEGRATION
connect(m_dialogDesigner, SIGNAL(dialogChanged()), this, SLOT(slotDialogChanged()));
connect(m_dialogDesignerManager, SIGNAL(dialogChanged(QString)),
this, SLOT(slotDialogChanged(QString)));
connect(m_dialogDesignerManager, SIGNAL(dialogNameChanged(QString,QString)),
this, SLOT(slotDialogNameChanged(QString,QString)));
#endif
}
DialogDesigner *ReportDesignWidget::dialogDesigner() const
#ifdef HAVE_QTDESIGNER_INTEGRATION
DialogDesignerManager *ReportDesignWidget::dialogDesignerManager() const
{
return m_dialogDesigner;
return m_dialogDesignerManager;
}
QString ReportDesignWidget::activeDialogName()
{
if (activeDialogPage())
return activeDialogPage()->dialogName();
return "";
}
QWidget *ReportDesignWidget::toolWindow(ReportDesignWidget::ToolWindowType windowType)
{
switch (windowType) {
case WidgetBox:
return dialogDesigner()->widgetBox();
return dialogDesignerManager()->widgetBox();
case PropertyEditor:
return dialogDesigner()->propertyEditor();
return dialogDesignerManager()->propertyEditor();
case ObjectInspector:
return dialogDesigner()->objectInspector();
return dialogDesignerManager()->objectInspector();
case ActionEditor:
return dialogDesigner()->actionEditor();
return dialogDesignerManager()->actionEditor();
case ResourceEditor:
return dialogDesigner()->resourcesEditor();
return dialogDesignerManager()->resourcesEditor();
case SignalSlotEditor:
return dialogDesigner()->signalSlotEditor();
return dialogDesignerManager()->signalSlotEditor();
default:
return 0;
}
}
#endif
ReportDesignWidget::EditorTabType ReportDesignWidget::activeTabType()
{
QString tabType = m_tabWidget->tabWhatsThis(m_tabWidget->currentIndex());
@@ -121,20 +136,24 @@ ReportDesignWidget::EditorTabType ReportDesignWidget::activeTabType()
return Page;
}
#ifdef HAVE_QTDESIGNER_INTEGRATION
void ReportDesignWidget::initDialogDesignerToolBar(QToolBar *toolBar)
{
m_dialogDesigner->initToolBar(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_dialogDesigner->getDialogDescription(m_tabWidget->widget(i)));
m_report->scriptContext()->changeDialog(m_tabWidget->tabText(i), m_dialogDesignerManager->getDialogDescription(m_tabWidget->widget(i)));
}
}
}
#endif
bool ReportDesignWidget::useMagnet() const
{
return m_useMagnet;
@@ -210,21 +229,38 @@ void ReportDesignWidget::createTabs(){
pageIndex = m_tabWidget->addTab(view,QIcon(),m_report->pageAt(i)->pageItem()->objectName());
m_tabWidget->setTabWhatsThis(pageIndex, "page");
}
#ifdef HAVE_QTDESIGNER_INTEGRATION
QWidget* dialogEditor;
foreach(DialogDescriber::Ptr dialogDesc, m_report->scriptContext()->dialogDescribers()){
dialogEditor = m_dialogDesigner->createFormEditor(dialogDesc->description());
pageIndex = m_tabWidget->addTab(dialogEditor,QIcon(),dialogDesc->name());
m_tabWidget->setTabWhatsThis(pageIndex,"dialog");
}
#endif
m_scriptEditor = new QTextEdit(this);
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");
}
DialogDesigner*ReportDesignWidget::activeDialogPage()
{
return dynamic_cast<DialogDesigner*>(m_tabWidget->currentWidget());
}
#endif
ReportDesignWidget::~ReportDesignWidget()
{
delete m_zoomer;
@@ -301,6 +337,8 @@ PageDesignIntf * ReportDesignWidget::activePage()
return 0;
}
QList<QGraphicsItem *> ReportDesignWidget::selectedItems(){
return activePage()->selectedItems();
}
@@ -321,16 +359,26 @@ 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()
@@ -340,24 +388,32 @@ bool ReportDesignWidget::save()
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)
@@ -367,6 +423,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"));
@@ -390,7 +447,7 @@ QString ReportDesignWidget::reportFileName()
bool ReportDesignWidget::isNeedToSave()
{
if(m_report)
return m_report->isNeedToSave();
return (m_report->isNeedToSave() || m_dialogChanged);
return false;
}
@@ -409,12 +466,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()
@@ -667,6 +732,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*/)
{
}
@@ -685,16 +760,40 @@ void ReportDesignWidget::slotCurrentTabChanged(int index)
}
m_zoomer->setView(view);
}
#ifdef HAVE_QTDESIGNER_INTEGRATION
if (activeTabType() == Dialog){
m_dialogDesigner->setActiveEditor(m_tabWidget->widget(index));
m_dialogDesignerManager->setActiveEditor(m_tabWidget->widget(index));
}
updateDialogs();
#endif
emit activePageChanged();
}
#ifdef HAVE_QTDESIGNER_INTEGRATION
void ReportDesignWidget::slotDialogChanged()
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