mirror of
https://github.com/fralx/LimeReport.git
synced 2024-12-23 16:22:58 +03:00
0fca7169d3
except those placed in 3rdparty directories.
206 lines
6.5 KiB
C++
206 lines
6.5 KiB
C++
/***************************************************************************
|
|
* This file is part of the Lime Report project *
|
|
* Copyright (C) 2021 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 "lrtextitemeditor.h"
|
|
#include "ui_lrtextitemeditor.h"
|
|
|
|
#include "lrdatadesignintf.h"
|
|
#include "lrdatasourcemanager.h"
|
|
#include "lrscripteditor.h"
|
|
#include "lrscriptenginemanager.h"
|
|
|
|
#include <QMenu>
|
|
#include <QScrollBar>
|
|
|
|
namespace LimeReport {
|
|
|
|
TextItemEditor::TextItemEditor(LimeReport::TextItem* item, LimeReport::PageDesignIntf* page,
|
|
QSettings* settings, QWidget* parent):
|
|
QWidget(parent),
|
|
ui(new Ui::TextItemEditor),
|
|
m_textItem(item),
|
|
m_page(page),
|
|
m_settings(settings),
|
|
m_ownedSettings(false),
|
|
m_isReadingSetting(false)
|
|
{
|
|
ui->setupUi(this);
|
|
initUI();
|
|
setWindowIcon(QIcon(":/items/images/TextItem"));
|
|
readSetting();
|
|
connect(ui->codeEditor, SIGNAL(splitterMoved(int, int)), this,
|
|
SLOT(slotSplitterMoved(int, int)));
|
|
}
|
|
|
|
TextItemEditor::~TextItemEditor()
|
|
{
|
|
#ifdef Q_OS_WIN
|
|
writeSetting();
|
|
#endif
|
|
#ifdef Q_OS_MAC
|
|
writeSetting();
|
|
#endif
|
|
delete ui;
|
|
}
|
|
|
|
void TextItemEditor::setSettings(QSettings* value)
|
|
{
|
|
if (m_ownedSettings)
|
|
delete m_settings;
|
|
m_settings = value;
|
|
m_ownedSettings = false;
|
|
readSetting();
|
|
}
|
|
|
|
QSettings* TextItemEditor::settings()
|
|
{
|
|
if (m_settings) {
|
|
return m_settings;
|
|
} else {
|
|
m_settings = new QSettings("LimeReport", QCoreApplication::applicationName());
|
|
m_ownedSettings = true;
|
|
return m_settings;
|
|
}
|
|
}
|
|
|
|
void TextItemEditor::resizeEvent(QResizeEvent*)
|
|
{
|
|
#ifdef Q_OS_UNIX
|
|
writeSetting();
|
|
#endif
|
|
}
|
|
|
|
void TextItemEditor::moveEvent(QMoveEvent*)
|
|
{
|
|
#ifdef Q_OS_UNIX
|
|
writeSetting();
|
|
#endif
|
|
}
|
|
|
|
void TextItemEditor::closeEvent(QCloseEvent* event)
|
|
{
|
|
if (settings() != 0) {
|
|
settings()->beginGroup("TextItemEditor");
|
|
settings()->setValue("CodeEditorState", ui->codeEditor->saveState());
|
|
settings()->endGroup();
|
|
}
|
|
QWidget::closeEvent(event);
|
|
}
|
|
|
|
void TextItemEditor::on_pbOk_clicked()
|
|
{
|
|
if (m_textItem->content() != ui->codeEditor->toPlainText()) {
|
|
m_textItem->setContent(ui->codeEditor->toPlainText());
|
|
}
|
|
close();
|
|
}
|
|
|
|
void TextItemEditor::initUI()
|
|
{
|
|
QStringList dataWords;
|
|
|
|
LimeReport::DataSourceManager* dm = m_page->datasourceManager();
|
|
LimeReport::ScriptEngineManager& se = LimeReport::ScriptEngineManager::instance();
|
|
se.setDataManager(dm);
|
|
|
|
ScriptEditor* scriptEditor = dynamic_cast<ScriptEditor*>(ui->codeEditor);
|
|
if (scriptEditor) {
|
|
scriptEditor->setReportPage(m_page);
|
|
scriptEditor->setPageBand(findParentBand());
|
|
scriptEditor->setPlainText(m_textItem->content());
|
|
}
|
|
}
|
|
|
|
void TextItemEditor::on_pbCancel_clicked() { close(); }
|
|
|
|
void TextItemEditor::readSetting()
|
|
{
|
|
if (settings() == 0)
|
|
return;
|
|
|
|
m_isReadingSetting = true;
|
|
|
|
settings()->beginGroup("TextItemEditor");
|
|
QVariant v = settings()->value("Geometry");
|
|
if (v.isValid()) {
|
|
restoreGeometry(v.toByteArray());
|
|
}
|
|
v = settings()->value("CodeEditorState");
|
|
if (v.isValid()) {
|
|
ui->codeEditor->restoreState(v.toByteArray());
|
|
}
|
|
settings()->endGroup();
|
|
settings()->beginGroup("ScriptEditor");
|
|
QVariant fontName = settings()->value("DefaultFontName");
|
|
if (fontName.isValid()) {
|
|
QVariant fontSize = settings()->value("DefaultFontSize");
|
|
ui->codeEditor->setEditorFont(QFont(fontName.toString(), fontSize.toInt()));
|
|
}
|
|
|
|
QVariant tabIndention = settings()->value("TabIndention");
|
|
if (tabIndention.isValid()) {
|
|
ui->codeEditor->setTabIndention(tabIndention.toInt());
|
|
} else {
|
|
ui->codeEditor->setTabIndention(LimeReport::Const::DEFAULT_TAB_INDENTION);
|
|
}
|
|
settings()->endGroup();
|
|
|
|
m_isReadingSetting = false;
|
|
}
|
|
|
|
void TextItemEditor::writeSetting()
|
|
{
|
|
if (settings() != 0) {
|
|
settings()->beginGroup("TextItemEditor");
|
|
settings()->setValue("Geometry", saveGeometry());
|
|
settings()->setValue("CodeEditorState", ui->codeEditor->saveState());
|
|
settings()->endGroup();
|
|
}
|
|
}
|
|
|
|
void TextItemEditor::slotSplitterMoved(int, int) { writeSetting(); }
|
|
|
|
BandDesignIntf* TextItemEditor::findParentBand()
|
|
{
|
|
BandDesignIntf* result = 0;
|
|
BaseDesignIntf* item = m_textItem;
|
|
while (true) {
|
|
item = dynamic_cast<BaseDesignIntf*>(item->parentItem());
|
|
if (item) {
|
|
result = dynamic_cast<BandDesignIntf*>(item);
|
|
if (result)
|
|
break;
|
|
} else
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
} // namespace LimeReport
|