From 2c2fc4cff5fc4bd6c47bd4dbf0408f828b961d40 Mon Sep 17 00:00:00 2001
From: yanis60 <30592254+yanis60@users.noreply.github.com>
Date: Sun, 23 Jun 2024 20:20:13 +0100
Subject: [PATCH] removed 'Nouveau dossier' folder
---
Nouveau dossier/lrbasedesignintf.cpp | 2069 --------------------------
Nouveau dossier/lrbasedesignintf.h | 536 -------
Nouveau dossier/lrbordereditor.cpp | 162 --
Nouveau dossier/lrbordereditor.h | 50 -
Nouveau dossier/lrgroupbands.cpp | 229 ---
Nouveau dossier/lrgroupbands.h | 99 --
Nouveau dossier/lrreportrender.cpp | 1808 ----------------------
Nouveau dossier/lrreportrender.h | 227 ---
8 files changed, 5180 deletions(-)
delete mode 100644 Nouveau dossier/lrbasedesignintf.cpp
delete mode 100644 Nouveau dossier/lrbasedesignintf.h
delete mode 100644 Nouveau dossier/lrbordereditor.cpp
delete mode 100644 Nouveau dossier/lrbordereditor.h
delete mode 100644 Nouveau dossier/lrgroupbands.cpp
delete mode 100644 Nouveau dossier/lrgroupbands.h
delete mode 100644 Nouveau dossier/lrreportrender.cpp
delete mode 100644 Nouveau dossier/lrreportrender.h
diff --git a/Nouveau dossier/lrbasedesignintf.cpp b/Nouveau dossier/lrbasedesignintf.cpp
deleted file mode 100644
index 90fca96..0000000
--- a/Nouveau dossier/lrbasedesignintf.cpp
+++ /dev/null
@@ -1,2069 +0,0 @@
-/***************************************************************************
- * 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 . *
- * *
- ** 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 . *
- * *
- * 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
-#include "lrbasedesignintf.h"
-#include "lrglobal.h"
-#include "lrpagedesignintf.h"
-#include "lrreportdesignwidget.h"
-#include "qgraphicsitem.h"
-#include "lrdesignelementsfactory.h"
-#include "lrhorizontallayout.h"
-#include "serializators/lrstorageintf.h"
-#include "serializators/lrxmlreader.h"
-#include "lrbordereditor.h"
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-namespace LimeReport
-{
-
-BaseDesignIntf::BaseDesignIntf(const QString &storageTypeName, QObject *owner, QGraphicsItem *parent) :
- QObject(owner), QGraphicsItem(parent),
- m_resizeHandleSize(Const::RESIZE_HANDLE_SIZE*2),
- m_selectionPenSize(Const::SELECTION_PEN_SIZE),
- m_possibleResizeDirectionFlags(ResizeTop | ResizeBottom | ResizeLeft | ResizeRight),
- m_possibleMoveDirectionFlags(All),
- m_resizeDirectionFlags(0),
- m_width(200),
- m_height(50),
- m_fontColor(Qt::black),
- m_fixedPos(false),
- m_borderLineSize(1),
- m_BGMode(OpaqueMode),
- m_opacity(100),
- m_borderLinesFlags(BorderLines()),
- m_borderStyle(BorderStyle::Solid),
- m_storageTypeName(storageTypeName),
- m_itemMode(DesignMode),
- m_objectState(ObjectCreated),
- m_backgroundBrushStyle(SolidPattern),
- m_backgroundColor(Qt::white),
- m_margin(4),
- m_itemAlign(DesignedItemAlign),
- m_changingItemAlign(false),
- m_borderColor(Qt::black),
- m_reportSettings(0),
- m_patternName(""),
- m_patternItem(0),
- m_fillInSecondPass(false),
- m_watermark(false),
- m_hovered(false),
- m_joinMarkerOn(false),
- m_selectionMarker(0),
- m_fillTransparentInDesignMode(true),
- m_unitType(Millimeters),
- m_itemGeometryLocked(false),
- m_isChangingPos(false),
- m_isMoveable(false),
- m_shadow(false)
-
-
-{
- setGeometry(QRectF(0, 0, m_width, m_height));
- if (BaseDesignIntf *item = dynamic_cast(parent)) {
- m_font = item->font();
- } else{
- m_font = QFont("Arial",10);
- }
- initFlags();
-}
-
-QRectF BaseDesignIntf::boundingRect() const
-{
- qreal halfpw = pen().widthF() / 2;
- halfpw += 2;
- return rect().adjusted(-halfpw, -halfpw, halfpw, halfpw);
-}
-
-BaseDesignIntf::~BaseDesignIntf(void) {
-
-}
-
-void BaseDesignIntf::setParentReportItem(const QString &value)
-{
- if (page() && !value.isEmpty()) {
- BaseDesignIntf *p = page()->reportItemByName(value);
- if (p) {
- setParentItem(p);
- setParent(p);
- }
- }
-}
-
-QString BaseDesignIntf::parentReportItemName() const
-{
- BaseDesignIntf *parent = dynamic_cast(parentItem());
- if (parent) return parent->objectName();
- else return "";
-}
-
-void BaseDesignIntf::setBackgroundBrushStyle(BrushStyle value)
-{
- if ( value != m_backgroundBrushStyle ){
- BrushStyle oldValue = m_backgroundBrushStyle;
- m_backgroundBrushStyle=value;
- if (!isLoading()) update();
- notify("backgroundBrushStyle", static_cast(oldValue), static_cast(value));
- }
-}
-
-void BaseDesignIntf::setBackgroundColor(QColor value)
-{
- if (value != m_backgroundColor){
- QColor oldValue = m_backgroundColor;
- m_backgroundColor=value;
- if (!isLoading()) update();
- notify("backgroundColor", oldValue, value);
- }
-}
-
-QPen BaseDesignIntf::pen() const
-{
- return m_pen;
-}
-
-void BaseDesignIntf::setPen(QPen &pen)
-{
- m_pen = pen;
- update();
-}
-
-QFont BaseDesignIntf::font() const
-{
- return m_font;
-}
-
-void BaseDesignIntf::setFont(QFont &font)
-{
- if (m_font != font){
- m_font = font;
- if (!isLoading()) update();
- }
-}
-
-qreal BaseDesignIntf::width() const
-{
- return rect().width();
-}
-
-void BaseDesignIntf::setWidth(qreal width)
-{
- setGeometry(QRectF(rect().x(), rect().y(), width, rect().height()));
- if (!m_changingItemAlign)
- updateItemAlign();
-}
-
-QString BaseDesignIntf::setItemWidth(qreal width)
-{
- setWidth(width * unitFactor());
- return QString();
-}
-
-qreal BaseDesignIntf::height() const
-{
- return rect().height();
-}
-
-QRect BaseDesignIntf::geometry() const
-{
- return QRect(pos().x(), pos().y(), width(), height());
-}
-
-void BaseDesignIntf::setHeight(qreal height)
-{
- setGeometry(QRectF(rect().x(), rect().y(), rect().width(), height));
-}
-
-QString BaseDesignIntf::setItemHeight(qreal height)
-{
- setHeight(height * unitFactor());
- return QString();
-}
-
-qreal BaseDesignIntf::getItemWidth()
-{
- return width() / unitFactor();
-}
-
-qreal BaseDesignIntf::getItemHeight()
-{
- return height() / unitFactor();
-}
-
-qreal BaseDesignIntf::getItemPosX()
-{
- return x() / unitFactor();
-}
-
-qreal BaseDesignIntf::getItemPosY()
-{
- return y() / unitFactor();
-}
-
-qreal BaseDesignIntf::getAbsolutePosX()
-{
- return calcAbsolutePosX(0,this);
-}
-
-qreal BaseDesignIntf::getAbsolutePosY()
-{
- return calcAbsolutePosY(0,this);
-}
-
-QString BaseDesignIntf::setItemPosX(qreal xValue)
-{
- setItemPos(xValue * unitFactor(),y());
- return QString();
-}
-
-QString BaseDesignIntf::setItemPosY(qreal yValue)
-{
- setItemPos(x(),yValue * unitFactor());
- return QString();
-}
-
-QFont BaseDesignIntf::transformToSceneFont(const QFont& value) const
-{
- QFont f = value;
- f.setPixelSize(f.pointSize()*Const::fontFACTOR);
- return f;
-}
-
-QString BaseDesignIntf::expandDataFields(QString context, ExpandType expandType, DataSourceManager* dataManager)
-{
- ScriptEngineManager& sm = ScriptEngineManager::instance();
- if (sm.dataManager() != dataManager) sm.setDataManager(dataManager);
- return sm.expandDataFields(context, expandType, m_varValue, this);
-}
-
-QString BaseDesignIntf::expandUserVariables(QString context, RenderPass pass, ExpandType expandType, DataSourceManager* dataManager)
-{
-
- ScriptEngineManager& sm = ScriptEngineManager::instance();
- if (sm.dataManager() != dataManager) sm.setDataManager(dataManager);
- return sm.expandUserVariables(context, pass, expandType, m_varValue);
-
-}
-
-QString BaseDesignIntf::expandScripts(QString context, DataSourceManager* dataManager)
-{
-
- ScriptEngineManager& sm = ScriptEngineManager::instance();
- if (sm.dataManager() != dataManager) sm.setDataManager(dataManager);
- return sm.expandScripts(context,m_varValue,this);
-
-}
-
-void BaseDesignIntf::setupPainter(QPainter *painter) const
-{
- if (!painter) {
- return;
- }
- painter->setFont(m_font);
- painter->setPen(m_fontColor);
-}
-
-BaseDesignIntf::BGMode BaseDesignIntf::backgroundMode() const
-{
- return m_BGMode;
-}
-void BaseDesignIntf::setBackgroundMode(BGMode bgMode)
-{
- m_BGMode = bgMode;
- update(boundingRect());
-}
-
-int BaseDesignIntf::opacity() const
-{
- return m_opacity;
-}
-
-void BaseDesignIntf::setOpacity(int opacity)
-{
- if (m_opacity!=opacity){
- if (opacity < 0) {
- m_opacity = 0;
- }
- else if (opacity > 100) {
- m_opacity = 100;
- }
- else {
- m_opacity = opacity;
- }
- update();
- }
-}
-
-void BaseDesignIntf::setSize(QSizeF size)
-{
- setWidth(size.width());
- setHeight(size.height());
-}
-
-QSizeF BaseDesignIntf::size() const
-{
- return QSizeF(width(), height());
-}
-
-QSizeF BaseDesignIntf::sizeMM() const
-{
- return QSizeF(width() / Const::mmFACTOR, height() / Const::mmFACTOR);
-}
-
-qreal BaseDesignIntf::widthMM() const
-{
- return width() / Const::mmFACTOR;
-}
-
-qreal BaseDesignIntf::heightMM() const
-{
- return height() / Const::mmFACTOR;
-}
-
-//void BaseDesignIntf::setUnitFactor(qreal unitFactor)
-//{
-// m_unitFactor = unitFactor;
-//}
-
-qreal BaseDesignIntf::unitFactor() const
-{
- if (m_unitType == Millimeters)
- return Const::mmFACTOR;
- else return Const::mmFACTOR * 2.54;
-}
-
-void BaseDesignIntf::setUnitType(BaseDesignIntf::UnitType value)
-{
- foreach(BaseDesignIntf* child, childBaseItems())
- child->setUnitType(value);
- m_unitType = value;
-}
-
-BaseDesignIntf::UnitType BaseDesignIntf::unitType()
-{
- return m_unitType;
-}
-
-QPointF BaseDesignIntf::posMM() const
-{
- return QPointF(pos().x() / Const::mmFACTOR, pos().y() / Const::mmFACTOR);
-}
-
-QRectF BaseDesignIntf::rect() const
-{
- return m_rect;
-}
-
-void BaseDesignIntf::setFixedPos(bool fixedPos)
-{
- m_fixedPos = fixedPos;
-}
-
-void BaseDesignIntf::onChangeGeometryTimeOut(){
- m_isMoveable = true;
-}
-
-void BaseDesignIntf::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- if (event->button() == Qt::LeftButton) {
- m_isChangingPos = true;
- m_resizeDirectionFlags = resizeDirectionFlags(event->pos());
- m_startPos = pos();
- m_oldGeometry = geometry();
- QGraphicsItem::mousePressEvent(event);
- emit itemSelected(this);
- m_isMoveable = false;
- QTimer::singleShot(200, this, SLOT(onChangeGeometryTimeOut()));
- }
- else QGraphicsItem::mousePressEvent(event);
-}
-
-void BaseDesignIntf::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- removeGuideLines();
- QRectF newGeometry = geometry();
- m_isChangingPos = false;
- if (newGeometry != m_oldGeometry) {
- geometryChangedEvent(newGeometry, m_oldGeometry);
- emit posChanged(this, newGeometry.topLeft(), m_oldGeometry.topLeft());
- }
- QGraphicsItem::mouseReleaseEvent(event);
-}
-
-void BaseDesignIntf::paint(QPainter *ppainter, const QStyleOptionGraphicsItem *option, QWidget *widget)
-{
- Q_UNUSED(option);
- Q_UNUSED(widget);
-
- ppainter->save();
- setupPainter(ppainter);
- if(!isPageItem())
- drawBorder(ppainter, rect());
- else
- drawBorder(ppainter, page()->pageItem()->pageRect());
- if(m_shadow)
- drawShadow(ppainter, rect(), 6);
- // if (m_joinMarkerOn) { drawMarker(ppainter, Const::JOIN_COLOR);}
- // if (isSelected() && !m_joinMarkerOn) {drawMarker(ppainter, Const::SELECTION_COLOR);}
- drawResizeZone(ppainter);
- ppainter->restore();
- // if (m_hovered) ppainter->drawImage(
- // QRectF(QPointF(rect().topRight().x()-24, rect().bottomLeft().y()-24),
- // QSizeF(24, 24)),QImage(":/items/images/settings.png"));
-}
-
-QColor calcColor(QColor color){
-
- int R = color.red();
- int G = color.green();
- int B = color.blue();
-
- if (0.222*R + 0.707*G + 0.071*B <= 127)
- return Qt::white;
- else
- return Qt::black;
-}
-
-void BaseDesignIntf::prepareRect(QPainter *painter, const QStyleOptionGraphicsItem * /*option*/, QWidget * /*widget*/)
-{
- painter->save();
-
- QRectF r = rect().adjusted(0, 0, borderLineSize(), borderLineSize());
- QBrush brush(m_backgroundColor,static_cast(m_backgroundBrushStyle));
- brush.setTransform(painter->worldTransform().inverted());
-
- if (isSelected() && (opacity() == 100) && (m_BGMode!=TransparentMode)) {
- painter->fillRect(r, brush);
- }
- else {
- if (m_BGMode == OpaqueMode) {
- qreal o = (itemMode() & DesignMode) ? 0.5 : qreal(m_opacity) / 100;
- painter->setOpacity(o);
- painter->fillRect(r, brush);
- } else if ((itemMode() & DesignMode) && fillTransparentInDesignMode()){
- painter->setOpacity(0.1);
- painter->fillRect(r, QBrush(QPixmap(":/report/images/empty")));
- }
- }
- painter->restore();
-}
-
-void BaseDesignIntf::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
-{
- if (page()) {
- if (!page()->isItemInsertMode() && isSelected()) {
- if (m_resizeDirectionFlags != resizeDirectionFlags(event->pos())) {
- m_resizeDirectionFlags = resizeDirectionFlags(event->pos());
- QVectoroldResizeAreas(m_resizeAreas);
- initResizeZones();
- invalidateRects(oldResizeAreas);
- invalidateRects(m_resizeAreas);
- switch (m_resizeDirectionFlags) {
- case ResizeRight:
- case ResizeLeft:
- setCursor(Qt::SizeHorCursor);
- break;
- case ResizeBottom:
- case ResizeTop:
- setCursor(Qt::SizeVerCursor);
- break;
- case ResizeRight | ResizeBottom:
- case ResizeLeft | ResizeTop:
- setCursor(Qt::SizeFDiagCursor);
- break;
- case ResizeLeft | ResizeBottom:
- case ResizeRight | ResizeTop:
- setCursor(Qt::SizeBDiagCursor);
- break;
- default:
- setCursor(Qt::ArrowCursor);
- break;
- }
- }
- }
- }
-}
-
-void BaseDesignIntf::invalidateRects(QVector rects)
-{
- foreach(QRectF * rect, rects)
- scene()->update(mapToScene(*rect).boundingRect());
-}
-
-void BaseDesignIntf::hoverLeaveEvent(QGraphicsSceneHoverEvent *)
-{
- setCursor(QCursor(Qt::ArrowCursor));
- m_resizeDirectionFlags = 0;
- scene()->update(sceneBoundingRect());
- m_resizeAreas.clear();
- m_hovered = false;
- update();
-}
-
-void BaseDesignIntf::hoverEnterEvent(QGraphicsSceneHoverEvent * /*event*/)
-{
- m_hovered = true;
- update();
-}
-
-
-void BaseDesignIntf::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- if (!m_isMoveable) return;
- if (!isSelected()){
- QGraphicsItem::mouseMoveEvent(event);
- return;
- }
-
-
- int hStep = dynamic_cast(scene())->horizontalGridStep();
- int vStep = dynamic_cast(scene())->verticalGridStep();
-
- if (m_resizeDirectionFlags & ResizeLeft) {
- if ((event->scenePos().x()) <= (mapToScene(0, 0).x() + (width() - Const::MINIMUM_ITEM_WIDTH)) &&
- (width() + (event->lastScenePos().x() - event->scenePos().x()) > Const::MINIMUM_ITEM_WIDTH)
- ) {
- qreal posRightCorner = mapToScene(0, 0).x() + width();
- qreal posLeftCorner = div(mapToParent(event->pos()).x(), hStep).quot * hStep;
- if (posLeftCorner < 0 )
- posLeftCorner = 0;
- setItemPos(posLeftCorner, y());
- setWidth(div(posRightCorner - mapToScene(0, 0).x(), hStep).quot * hStep);
- }
- }
-
- if (m_resizeDirectionFlags & ResizeRight) {
- if ((event->scenePos().x() >= (mapToScene(0, 0).x() + Const::MINIMUM_ITEM_WIDTH)) ||
- (event->scenePos().x() >= (mapToScene(0, 0).x() + width()))) {
- setWidth(div(event->scenePos().x() - mapToScene(0, 0).x(), hStep).quot * hStep);
- }
- }
-
- if (m_resizeDirectionFlags & ResizeTop) {
- if ((event->scenePos().y()) <= (mapToScene(0, 0).y() + (height() - Const::MINIMUM_ITEM_HEIGHT)) &&
- (height() + (event->lastScenePos().y() - event->scenePos().y()) > Const::MINIMUM_ITEM_HEIGHT)
- ) {
- qreal posBottomCorner = mapToScene(0, 0).y() + height();
- qreal posTopCorner = div(mapToParent(event->pos()).y(), vStep).quot * vStep;
- if (posTopCorner < 0 )
- posTopCorner = 0;
- setItemPos(x(), posTopCorner);
- setHeight(div(posBottomCorner - mapToScene(0, 0).y(), vStep).quot * vStep);
- }
- }
-
- if (m_resizeDirectionFlags & ResizeBottom) {
- if ((event->scenePos().y() > (mapToScene(0, 0).y() + height())) ||
- (event->scenePos().y() > (mapToScene(0, 0).y() + Const::MINIMUM_ITEM_HEIGHT))
- ) {
- setHeight(div(event->scenePos().y() - mapToScene(0, 0).y(), vStep).quot * vStep);
- }
- }
-
- if ((m_resizeDirectionFlags == Fixed) && !m_fixedPos) {
-
- QPointF tmpPos = pos();
- QPointF delta;
- switch (possibleMoveDirectionFlags()) {
- case LeftRight: {
- delta = QPoint(div(event->buttonDownScenePos(Qt::LeftButton).x() - event->scenePos().x(), hStep).quot * hStep, 0);
- break;
- }
- case TopBotom: {
- delta = QPoint(0, div(event->buttonDownScenePos(Qt::LeftButton).y() - event->scenePos().y(), vStep).quot * vStep);
- break;
- }
- case All: {
- delta = QPoint(div(event->buttonDownScenePos(Qt::LeftButton).x() - event->scenePos().x(), hStep).quot * hStep,
- div(event->buttonDownScenePos(Qt::LeftButton).y() - event->scenePos().y(), vStep).quot * vStep);
- break;
- }
- };
-
- setItemPos(QPointF(div(m_startPos.x(), hStep).quot * hStep, div(m_startPos.y(), vStep).quot * vStep) - delta);
-
- if (page()){
- if (!isBand() && page()->selectedItems().count()>1)
- moveSelectedItems(tmpPos - pos());
- if (page()->selectedItems().count()==1 && (page()->magneticMovement()))
- page()->itemMoved(this);
-
- }
- }
- if (scene() && !scene()->selectedItems().isEmpty()) {
- QGraphicsItem *movingItem = scene()->selectedItems().first();
- removeGuideLines();
-
- for (QGraphicsItem *item : scene()->items()) {
- if (item != movingItem) {
- qreal topDiff = qAbs(item->sceneBoundingRect().bottom() - movingItem->sceneBoundingRect().bottom());
- qreal bottomDiff = qAbs(item->sceneBoundingRect().top() - movingItem->sceneBoundingRect().top());
- qreal leftDiff = qAbs(item->sceneBoundingRect().left() - movingItem->sceneBoundingRect().left());
- qreal rightDiff = qAbs(item->sceneBoundingRect().right() - movingItem->sceneBoundingRect().right());
-
- if (topDiff == 0)
- addGuideLine(item->sceneBoundingRect().left(), item->sceneBoundingRect().top(),
- movingItem->sceneBoundingRect().left(), movingItem->sceneBoundingRect().top());
- if (bottomDiff == 0)
- addGuideLine(item->sceneBoundingRect().left(), item->sceneBoundingRect().bottom(),
- movingItem->sceneBoundingRect().left(), movingItem->sceneBoundingRect().bottom());
- if (leftDiff == 0)
- addGuideLine(item->sceneBoundingRect().left(), item->sceneBoundingRect().top(),
- movingItem->sceneBoundingRect().left(), movingItem->sceneBoundingRect().top());
- if (rightDiff == 0)
- addGuideLine(item->sceneBoundingRect().right(), item->sceneBoundingRect().top(),
- movingItem->sceneBoundingRect().right(), movingItem->sceneBoundingRect().top());
- }
- }
- }
-}
-
-int BaseDesignIntf::possibleResizeDirectionFlags() const
-{
- return m_possibleResizeDirectionFlags;
-}
-
-int BaseDesignIntf::resizeHandleSize() const
-{
- return m_resizeHandleSize;
-}
-
-int BaseDesignIntf::resizeDirectionFlags(QPointF position)
-{
- int flags = Fixed;
-
- if (possibleResizeDirectionFlags()&ResizeTop && m_topRect.contains(position)) {
- flags |= ResizeTop;
- }
-
- if (possibleResizeDirectionFlags()&ResizeLeft && m_leftRect.contains(position)) {
- flags |= ResizeLeft;
- }
-
- if (possibleResizeDirectionFlags()&ResizeBottom && m_bottomRect.contains(position)) {
- flags |= ResizeBottom;
- }
-
- if (possibleResizeDirectionFlags()&ResizeRight && m_rightRect.contains(position)) {
- flags |= ResizeRight;
- }
-
- return flags;
-}
-
-Qt::CursorShape BaseDesignIntf::getPossibleCursor(int cursorFlags)
-{
-
- if ((cursorFlags == Fixed) || (scene()->selectedItems().count() > 1)) return Qt::ArrowCursor;
-
- if (((cursorFlags & ResizeRight) && (cursorFlags & ResizeTop)) ||
- ((cursorFlags & ResizeLeft) && (cursorFlags & ResizeBottom))) {
- return Qt::SizeBDiagCursor;
- }
- if (((cursorFlags & ResizeLeft) && (cursorFlags & ResizeTop)) ||
- ((cursorFlags & ResizeRight) && (cursorFlags & ResizeBottom))) {
- return Qt::SizeFDiagCursor;
- }
- if ((cursorFlags & ResizeLeft) || (cursorFlags & ResizeRight)) { return Qt::SizeHorCursor; }
- if ((cursorFlags & ResizeBottom) || (cursorFlags & ResizeTop)) { return Qt::SizeVerCursor; }
-
- return Qt::ArrowCursor;
-}
-
-void BaseDesignIntf::setZValueProperty(qreal value)
-{
- if (zValue()!=value){
- qreal oldValue = zValue();
- setZValue(value);
- notify("zOrder",oldValue,value);
- }
-}
-
-BaseDesignIntf::ItemAlign BaseDesignIntf::itemAlign() const
-{
- return m_itemAlign;
-}
-
-QPointF BaseDesignIntf::modifyPosForAlignedItem(const QPointF& pos){
- QPointF result = pos;
- BaseDesignIntf* parent = dynamic_cast(parentItem());
- PageItemDesignIntf* parentPage = dynamic_cast(parentItem());
- if (parent){
- qreal leftBorder = parentPage ? parentPage->leftMargin() * Const::mmFACTOR : 0;
- qreal rightBorder = parentPage ? parentPage->rightMargin() * Const::mmFACTOR : 0;
- qreal avaibleSpace = parent->width()-(leftBorder+rightBorder);
-
- switch(m_itemAlign){
- case LeftItemAlign:
- result.setX(leftBorder);
- break;
- case RightItemAlign:
- result.setX(parent->width() - (rightBorder + width()));
- break;
- case CenterItemAlign:
- result.setX((avaibleSpace-width()) / 2 + leftBorder);
- break;
- case ParentWidthItemAlign:
- result.setX(leftBorder);
- case DesignedItemAlign:
- break;
- }
- }
- return result;
-}
-
-void BaseDesignIntf::turnOnJoinMarker(bool value)
-{
- m_joinMarkerOn = value;
- if (value){
- m_joinMarker = new Marker(this, this);
- m_joinMarker->setColor(Const::JOIN_COLOR);
- m_joinMarker->setRect(rect());
- m_joinMarker->setVisible(true);
- } else {
- delete m_joinMarker;
- m_joinMarker = 0;
- }
-}
-
-void BaseDesignIntf::updateItemAlign(){
- BaseDesignIntf* parent = dynamic_cast(parentItem());
- PageItemDesignIntf* parentPage = dynamic_cast(parentItem());
- m_changingItemAlign = true;
- if (parent){
- qreal leftBorder = parentPage ? parentPage->leftMargin() * Const::mmFACTOR : 0;
- qreal rightBorder = parentPage ? parentPage->rightMargin() * Const::mmFACTOR : 0;
- qreal aviableSpace = parent->width()-(leftBorder+rightBorder);
- setPos(modifyPosForAlignedItem(pos()));
- if (m_itemAlign == ParentWidthItemAlign)
- setWidth(aviableSpace);
- }
- m_changingItemAlign = false;
-}
-
-void BaseDesignIntf::updatePossibleDirectionFlags(){
- setPossibleResizeDirectionFlags(AllDirections);
- switch(m_itemAlign){
- case LeftItemAlign:
- setPossibleResizeDirectionFlags(AllDirections^ResizeLeft);
- break;
- case RightItemAlign:
- setPossibleResizeDirectionFlags(AllDirections^ResizeRight);
- break;
- case ParentWidthItemAlign:
- setPossibleResizeDirectionFlags(ResizeBottom|ResizeTop);
- case CenterItemAlign:
- case DesignedItemAlign:
- break;
- }
-}
-
-void BaseDesignIntf::addGuideLine(qreal x1, qreal y1, qreal x2, qreal y2)
-{
- QGraphicsLineItem *line = new QGraphicsLineItem(x1, y1, x2, y2);
- line->setPen(QPen(Qt::red,2,Qt::DashLine));
- if(scene())scene()->addItem(line);
- guideLines.append(line);
-}
-
-void BaseDesignIntf::removeGuideLines()
-{
- for (QGraphicsLineItem *line : guideLines) {
- if(scene())scene()->removeItem(line);
- delete line;
- }
- guideLines.clear();
-}
-
-bool BaseDesignIntf::isChangingPos() const
-{
- return m_isChangingPos;
-}
-
-void BaseDesignIntf::setIsChangingPos(bool isChangingPos)
-{
- m_isChangingPos = isChangingPos;
-}
-
-bool BaseDesignIntf::isShapeItem() const
-{
- return QString(metaObject()->className()) == "LimeReport::ShapeItem";
-}
-
-bool BaseDesignIntf::isPageItem() const
-{
-return QString(metaObject()->className()) == "LimeReport::PageItemDesignIntf";
-}
-
-bool BaseDesignIntf::hasShadow()
-{
- return m_shadow;
-}
-
-void BaseDesignIntf::setShadow(bool sh)
-{
- if (m_shadow != sh){
- bool oldValue = m_shadow;
- m_shadow = sh;
- notify("shadow",oldValue,m_shadow);
- update();
- }
-}
-
-bool BaseDesignIntf::isGeometryLocked() const
-{
- return m_itemGeometryLocked;
-}
-
-void BaseDesignIntf::setGeometryLocked(bool itemLocked)
-{
- if (m_itemGeometryLocked != itemLocked){
- m_itemGeometryLocked = itemLocked;
- if (itemLocked){
- m_savedPossibleMoveDirectionFlags = m_possibleMoveDirectionFlags;
- m_savedPossibleResizeDirectionFlags = m_possibleResizeDirectionFlags;
- m_possibleMoveDirectionFlags = None;
- m_possibleResizeDirectionFlags = Fixed;
- m_savedFixedPos = m_fixedPos;
- m_fixedPos = true;
- } else {
- m_possibleMoveDirectionFlags = m_savedPossibleMoveDirectionFlags;
- m_possibleResizeDirectionFlags = m_savedPossibleResizeDirectionFlags;
- m_fixedPos = m_savedFixedPos;
- }
- if (!isLoading()){
- update();
- m_selectionMarker->update();
- notify("geometryLocked", !itemLocked, itemLocked);
- }
- }
-}
-
-bool BaseDesignIntf::fillTransparentInDesignMode() const
-{
- return m_fillTransparentInDesignMode;
-}
-
-void BaseDesignIntf::setFillTransparentInDesignMode(bool fillTransparentInDesignMode)
-{
- m_fillTransparentInDesignMode = fillTransparentInDesignMode;
-}
-
-void BaseDesignIntf::emitPosChanged(QPointF oldPos, QPointF newPos)
-{
- emit posChanged(this, oldPos, newPos);
-}
-
-bool BaseDesignIntf::fillInSecondPass() const
-{
- return m_fillInSecondPass;
-}
-
-void BaseDesignIntf::setFillInSecondPass(bool fillInSecondPass)
-{
-
- if (m_fillInSecondPass != fillInSecondPass){
- m_fillInSecondPass = fillInSecondPass;
- notify("fillInSecondPass",!fillInSecondPass,fillInSecondPass);
- }
-
-}
-
-bool BaseDesignIntf::isWatermark() const
-{
- return m_watermark;
-}
-
-void BaseDesignIntf::setWatermark(bool watermark)
-{
- if (m_watermark != watermark){
- m_watermark = watermark;
- notify("watermark",!watermark,watermark);
- }
-}
-
-void BaseDesignIntf::updateSelectionMarker()
-{
- if (m_selectionMarker && (itemMode() & DesignMode || itemMode() & EditMode)) {
- if ((!m_selectionMarker->scene()) && scene()) scene()->addItem(m_selectionMarker);
- if (parentItem()) {
- m_selectionMarker->setRect(rect());
- m_selectionMarker->setPos(0,0);
- }
- }
-}
-
-void BaseDesignIntf::turnOnSelectionMarker(bool value)
-{
- if (value && !m_selectionMarker){
- m_selectionMarker = new SelectionMarker(this, this);
- m_selectionMarker->setColor(selectionMarkerColor());
- updateSelectionMarker();
- m_selectionMarker->setVisible(true);
- } else {
- delete m_selectionMarker;
- m_selectionMarker = 0;
- }
-}
-
-QString BaseDesignIntf::patternName() const
-{
- return (m_patternName.isEmpty()) ? objectName() : m_patternName;
-}
-
-void BaseDesignIntf::setPatternName(const QString &patternName)
-{
- m_patternName = patternName;
-}
-
-BaseDesignIntf* BaseDesignIntf::patternItem() const
-{
- return m_patternItem;
-}
-
-void BaseDesignIntf::setPatternItem(BaseDesignIntf *patternItem)
-{
- m_patternItem = patternItem;
-}
-
-ReportSettings *BaseDesignIntf::reportSettings() const
-{
- return m_reportSettings;
-}
-
-void BaseDesignIntf::setReportSettings(ReportSettings *reportSettings)
-{
- m_reportSettings = reportSettings;
- foreach(BaseDesignIntf* child, childBaseItems()){
- child->setReportSettings(reportSettings);
- }
-}
-
-QColor BaseDesignIntf::borderColor() const
-{
- return m_borderColor;
-}
-
-void BaseDesignIntf::setBorderColor(const QColor &borderColor)
-{
- if (m_borderColor != borderColor){
- QColor oldValue = m_borderColor;
- m_borderColor = borderColor;
- notify("borderColor",oldValue,borderColor);
- update();
- }
-}
-
-void BaseDesignIntf::setItemVisible(const bool &value)
-{
- if (isVisible()!=value){
- setVisible(value);
- emit itemVisibleHasChanged(this);
- }
-}
-
-void BaseDesignIntf::setItemAlign(const ItemAlign &itemAlign)
-{
- if (m_itemAlign != itemAlign){
- ItemAlign oldValue = m_itemAlign;
- m_itemAlign = itemAlign;
- notify("itemAlign",oldValue,itemAlign);
- updatePossibleDirectionFlags();
- updateItemAlign();
- emit itemAlignChanged(this, oldValue, itemAlign);
- }
-}
-
-QString BaseDesignIntf::itemTypeName() const
-{
- return m_itemTypeName;
-}
-
-void BaseDesignIntf::setItemTypeName(const QString &itemTypeName)
-{
- m_itemTypeName = itemTypeName;
-}
-
-void BaseDesignIntf::emitObjectNamePropertyChanged(const QString &oldName, const QString &newName)
-{
- emit propertyObjectNameChanged(oldName,newName);
-}
-
-qreal BaseDesignIntf::borderLineSize() const
-{
- return m_borderLineSize;
-}
-
-void BaseDesignIntf::setBorderStyle(BorderStyle b)
-{
- BorderStyle oldValue = m_borderStyle;
- m_borderStyle = b;
- update();
- notify("borderStyle",(BorderStyle)oldValue,(BorderStyle)b);
-}
-
-void BaseDesignIntf::setBorderLineSize(qreal value)
-{
- qreal oldValue = m_borderLineSize;
- m_borderLineSize = value;
- update();
- notify("borderLineSize",oldValue,value);
-}
-
-
-void BaseDesignIntf::moveRight()
-{
- if (!m_fixedPos && page()) setItemPos(pos().x() + page()->horizontalGridStep(), pos().y());
-}
-
-void BaseDesignIntf::moveLeft()
-{
- if (!m_fixedPos && page()) setItemPos(pos().x() - page()->horizontalGridStep(), pos().y());
-}
-
-void BaseDesignIntf::moveDown()
-{
- if (!m_fixedPos && page()) setItemPos(pos().x(), pos().y() + page()->verticalGridStep());
-}
-
-void BaseDesignIntf::moveUp()
-{
- if (!m_fixedPos && page()) setItemPos(pos().x(), pos().y() - page()->verticalGridStep());
-}
-
-void BaseDesignIntf::sizeRight()
-{
- if ((m_possibleResizeDirectionFlags & ResizeLeft) ||
- (m_possibleResizeDirectionFlags & ResizeRight)) {
- if (page()) setWidth(width() + page()->horizontalGridStep());
- }
-}
-
-void BaseDesignIntf::sizeLeft()
-{
- if ((m_possibleResizeDirectionFlags & ResizeLeft) ||
- (m_possibleResizeDirectionFlags & ResizeRight)) {
- if(page()) setWidth(width() - page()->horizontalGridStep());
- }
-}
-
-void BaseDesignIntf::sizeUp()
-{
- if ((m_possibleResizeDirectionFlags & ResizeTop) ||
- (m_possibleResizeDirectionFlags & ResizeBottom)) {
- if (page()) setHeight(height() - page()->verticalGridStep());
- }
-}
-
-void BaseDesignIntf::sizeDown()
-{
- if ((m_possibleResizeDirectionFlags & ResizeTop) ||
- (m_possibleResizeDirectionFlags & ResizeBottom)) {
- if (page()) setHeight(height() + page()->verticalGridStep());
- }
-}
-
-void BaseDesignIntf::setBorderLinesFlags(BorderLines flags)
-{
- if (m_borderLinesFlags!=flags){
- BorderLines oldValue = m_borderLinesFlags;
- m_borderLinesFlags = flags;
- if (!isLoading()) {
- update(rect());
- notify("borders",QVariant(oldValue),QVariant(flags));
- }
- }
-}
-
-BaseDesignIntf::BorderLines BaseDesignIntf::borderLines() const
-{
- return m_borderLinesFlags;
-}
-
-
-void BaseDesignIntf::drawTopLine(QPainter *painter, QRectF rect) const
-{
- if(isShapeItem())
- return;
- painter->setPen(borderPen(TopLine));
- if(!isPageItem())
- {
- if(borderStyle() == BorderStyle::Doubled)
- painter->drawLine(rect.x()+3+m_borderLineSize,
- rect.y()+3+m_borderLineSize,
- rect.width()-3-m_borderLineSize,
- rect.y()+3+m_borderLineSize);
-
- painter->drawLine(rect.x(), rect.y(), rect.width(), rect.y());
-
- }
- else
- {
-
- painter->drawLine(page()->pageItem()->pageRect().x(),
- page()->pageItem()->pageRect().y(),
- page()->pageItem()->pageRect().width() + (page()->pageItem()->leftMargin()*10),
- page()->pageItem()->pageRect().y());
- if(borderStyle() == BorderStyle::Doubled)
- painter->drawLine(page()->pageItem()->pageRect().x()+3+m_borderLineSize,
- page()->pageItem()->pageRect().y()+3+m_borderLineSize,
- page()->pageItem()->pageRect().width()-3-m_borderLineSize + (page()->pageItem()->leftMargin()*10),
- page()->pageItem()->pageRect().y()+3+m_borderLineSize);
-
- }
-
-}
-
-void BaseDesignIntf::drawBootomLine(QPainter *painter, QRectF rect) const
-{
- if(isShapeItem())
- return;
-
- painter->setPen(borderPen(BottomLine));
- if(!isPageItem())
- {
- painter->drawLine(rect.x(), rect.height(), rect.width(), rect.height());
- if(borderStyle() == BorderStyle::Doubled)
- painter->drawLine(rect.x()+3+m_borderLineSize,
- rect.height()-3-m_borderLineSize,
- rect.width()-3-m_borderLineSize,
- rect.height()-3-m_borderLineSize);
- }
- else
- {
-
- painter->drawLine(page()->pageItem()->pageRect().x(),
- page()->pageItem()->pageRect().height() + (page()->pageItem()->topMargin()*10)
- , page()->pageItem()->pageRect().width() + (page()->pageItem()->leftMargin()*10),
- page()->pageItem()->pageRect().height() + (page()->pageItem()->topMargin()*10));
- if(borderStyle() == BorderStyle::Doubled)
- painter->drawLine(page()->pageItem()->pageRect().x()+3+m_borderLineSize,
- page()->pageItem()->pageRect().height()-3-m_borderLineSize + (page()->pageItem()->topMargin()*10),
- page()->pageItem()->pageRect().width()-3-m_borderLineSize + (page()->pageItem()->leftMargin()*10),
- page()->pageItem()->pageRect().height()-3-m_borderLineSize + (page()->pageItem()->topMargin()*10));
- }
-
-}
-
-void BaseDesignIntf::drawRightLine(QPainter *painter, QRectF rect) const
-{
- if(isShapeItem())
- return;
- painter->setPen(borderPen(RightLine));
- if(!isPageItem())
- {
- painter->drawLine(rect.width(), rect.y(), rect.width(), rect.height());
- if(borderStyle() == BorderStyle::Doubled)
- painter->drawLine(rect.width()-3 - m_borderLineSize,
- rect.y()+3+m_borderLineSize,
- rect.width()-3-m_borderLineSize,
- rect.height()-3-m_borderLineSize);
- }
- else
- {
- painter->drawLine(page()->pageItem()->pageRect().width() + (page()->pageItem()->leftMargin()*10), page()->pageItem()->pageRect().y(),
- page()->pageItem()->pageRect().width() + (page()->pageItem()->leftMargin()*10),
- page()->pageItem()->pageRect().height() + (page()->pageItem()->topMargin()*10));
- if(borderStyle() == BorderStyle::Doubled)
- painter->drawLine(page()->pageItem()->pageRect().width()-3 - m_borderLineSize + (page()->pageItem()->leftMargin()*10),
- page()->pageItem()->pageRect().y()+3+m_borderLineSize,
- page()->pageItem()->pageRect().width()-3-m_borderLineSize + (page()->pageItem()->leftMargin()*10),
- page()->pageItem()->pageRect().height()-3-m_borderLineSize + (page()->pageItem()->topMargin()*10));
- }
-
-
-}
-
-void BaseDesignIntf::drawLeftLine(QPainter *painter, QRectF rect) const
-{
- if(isShapeItem())
- return;
- painter->setPen(borderPen(LeftLine));
- if(!isPageItem())
- {
- painter->drawLine(rect.x(), rect.y(), rect.x(), rect.height());
- if(borderStyle() == BorderStyle::Doubled)
- painter->drawLine(page()->pageItem()->pageRect().x()+3+m_borderLineSize,
- page()->pageItem()->pageRect().y()+3+m_borderLineSize,
- page()->pageItem()->pageRect().x()+3+m_borderLineSize,
- page()->pageItem()->pageRect().height()-3-m_borderLineSize);
- }
- else
- {
- painter->drawLine(page()->pageItem()->pageRect().x(),
- page()->pageItem()->pageRect().y(),
- page()->pageItem()->pageRect().x(),
- page()->pageItem()->pageRect().height() + (page()->pageItem()->topMargin()*10));
- if(borderStyle() == BorderStyle::Doubled)
- painter->drawLine(page()->pageItem()->pageRect().x()+3+m_borderLineSize,
- page()->pageItem()->pageRect().y()+3+m_borderLineSize,
- page()->pageItem()->pageRect().x()+3+m_borderLineSize,
- page()->pageItem()->pageRect().height()-3-m_borderLineSize + (page()->pageItem()->topMargin()*10));
- }
-
-
-}
-
-void BaseDesignIntf::drawDesignModeBorder(QPainter *painter, QRectF rect) const
-{
- if(isShapeItem())
- return;
- drawTopLine(painter, rect);
- drawBootomLine(painter, rect);
- drawLeftLine(painter, rect);
- drawRightLine(painter, rect);
-}
-
-void BaseDesignIntf::drawRenderModeBorder(QPainter *painter, QRectF rect) const
-{
- if(isShapeItem())
- return;
- if (m_borderLinesFlags & RightLine) drawRightLine(painter, rect);
- if (m_borderLinesFlags & LeftLine) drawLeftLine(painter, rect);
- if (m_borderLinesFlags & TopLine ) drawTopLine(painter, rect);
- if (m_borderLinesFlags & BottomLine) drawBootomLine(painter, rect);
-}
-
-void BaseDesignIntf::drawBorder(QPainter *painter, QRectF rect) const
-{
- painter->save();
- if (itemMode() & DesignMode && drawDesignBorders()) {
- drawDesignModeBorder(painter, rect);
- }
- else drawRenderModeBorder(painter, rect);
- painter->restore();
-}
-
-void BaseDesignIntf::drawShadow(QPainter *painter, QRectF rect, qreal shadowSize) const
-{
- qreal shWidth = shadowSize;
- QRectF rshadow(rect.topRight() + QPointF(0, shWidth),
- rect.bottomRight() + QPointF(shWidth, 0));
- QLinearGradient rgrad(rshadow.topLeft(), rshadow.topRight());
- rgrad.setColorAt(0.0, QColor(0,0,0,255));
- rgrad.setColorAt(1.0, QColor(0,0,0,0));
- painter->fillRect(rshadow, QBrush(rgrad));
- QRectF bshadow(rect.bottomLeft() + QPointF(shWidth, 0),
- rect.bottomRight() + QPointF(0, shWidth));
- QLinearGradient bgrad(bshadow.topLeft(), bshadow.bottomLeft());
- bgrad.setColorAt(0.0, QColor(0,0,0,255));
- bgrad.setColorAt(1.0, QColor(0,0,0,0));
- painter->fillRect(bshadow, QBrush(bgrad));
- QRectF cshadow(rect.bottomRight(),
- rect.bottomRight() + QPointF(shWidth, shWidth));
- QRadialGradient cgrad(cshadow.topLeft(), shWidth, cshadow.topLeft());
- cgrad.setColorAt(0.0, QColor(0,0,0,255));
- cgrad.setColorAt(1.0, QColor(0,0,0,0));
- painter->fillRect(cshadow, QBrush(cgrad));
-}
-
-void BaseDesignIntf::setGeometry(QRectF rect)
-{
- if (m_rect == rect) return;
- m_oldGeometry = m_rect;
- if (!isLoading())
- prepareGeometryChange();
- m_rect = rect;
- m_topRect = QRectF(0-resizeHandleSize(), 0-resizeHandleSize(), width()+resizeHandleSize()*2, resizeHandleSize()*2);
- m_bottomRect = QRectF(0-resizeHandleSize(), height() - resizeHandleSize(), width()+resizeHandleSize()*2, resizeHandleSize()*2);
- m_leftRect = QRectF(0-resizeHandleSize(), 0-resizeHandleSize(), resizeHandleSize()*2, height()+resizeHandleSize()*2);
- m_rightRect = QRectF(width() - resizeHandleSize(), 0-resizeHandleSize(), resizeHandleSize()*2, height()+resizeHandleSize()*2);
- m_boundingRect = QRectF();
- updateSelectionMarker();
- if (!isLoading()){
- geometryChangedEvent(geometry(), m_oldGeometry);
- emit geometryChanged(this, geometry(), m_oldGeometry);
- }
-}
-
-void BaseDesignIntf::geometryChangedEvent(QRectF newRect, QRectF oldRect)
-{
- Q_UNUSED(oldRect);
- Q_UNUSED(newRect);
-}
-
-void BaseDesignIntf::beforeDelete()
-{
-
-}
-
-void BaseDesignIntf::setGeometryProperty(QRect rect)
-{
- if ( rect != m_itemGeometry ){
- QRectF oldValue = geometry();
- if ((rect.x() != geometry().x()) || (rect.y() != geometry().y()))
- setPos(rect.x(), rect.y());
- if (rect.width() != geometry().width())
- setWidth(rect.width());
- if (rect.height() != geometry().height())
- setHeight(rect.height());
- if (!isLoading()) {
- notify("geometry",oldValue,rect);
- }
- }
-}
-
-PageDesignIntf *BaseDesignIntf::page() const
-{
- return dynamic_cast(scene());
-}
-
-void BaseDesignIntf::setPossibleResizeDirectionFlags(int directionsFlags)
-{
- m_possibleResizeDirectionFlags = directionsFlags;
-}
-
-QPen BaseDesignIntf::borderPen(BorderSide side/*, bool selected*/) const
-{
- QPen pen;
- if (m_borderLinesFlags & side) {
- pen.setColor(m_borderColor);
- if(borderStyle() != BorderStyle::Doubled)
- pen.setStyle(static_cast(m_borderStyle));
- //pen.setCosmetic(true);
- pen.setWidthF(m_borderLineSize+1); //To draw with point precision (By default: 2px = 1 pt)
-
- } else {
- pen.setColor(Qt::darkGray);
- pen.setStyle(Qt::SolidLine);
- pen.setWidth(1);
- }
- return pen;
-}
-
-QColor BaseDesignIntf::selectionColor() const
-{
- return Const::SELECTION_COLOR;
-}
-
-void BaseDesignIntf::initFlags()
-{
- if ((itemMode()&DesignMode) || (itemMode()&EditMode)) {
- setFlag(QGraphicsItem::ItemIsSelectable);
- setFlag(QGraphicsItem::ItemSendsGeometryChanges);
- setAcceptHoverEvents(true);
- }
- else {
- setFlag(QGraphicsItem::ItemIsSelectable, false);
- setAcceptHoverEvents(false);
- }
-
-}
-
-void BaseDesignIntf::initMode(ItemMode mode)
-{
- Q_UNUSED(mode);
-}
-
-QVariant BaseDesignIntf::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value)
-{
-
- if (change == QGraphicsItem::ItemPositionHasChanged) {
- updateSelectionMarker();
- emit geometryChanged(this, geometry(), geometry());
- }
-
- if (change == QGraphicsItem::ItemSelectedChange) {
- turnOnSelectionMarker(value.toBool());
- emit itemSelectedHasBeenChanged(this, value.toBool());
- }
- if (change == QGraphicsItem::ItemParentHasChanged) {
- parentChangedEvent(dynamic_cast(value.value()));
- }
-
- return QGraphicsItem::itemChange(change, value);
-}
-
-void BaseDesignIntf::childAddedEvent(BaseDesignIntf *child)
-{
- Q_UNUSED(child)
-}
-
-void BaseDesignIntf::parentChangedEvent(BaseDesignIntf *)
-{
-
-}
-
-void BaseDesignIntf::restoreLinks()
-{
-#ifdef HAVE_QT5
- foreach(QObject * child, children()) {
-#else
- foreach(QObject * child, QObject::children()) {
-#endif
- BaseDesignIntf *childItem = dynamic_cast(child);
- if (childItem) {childItem->restoreLinks();}
- }
- restoreLinksEvent();
-}
-
-QPainterPath BaseDesignIntf::shape() const
-{
- QPainterPath path;
- path.addRect(this->boundingRect());
- return path;
-}
-
-void BaseDesignIntf::drawMarker(QPainter *painter, QColor color) const
-{
- painter->save();
-
- QPen pen(color, m_selectionPenSize);
- painter->setPen(pen);
- painter->setBrush(QBrush(color));
- painter->setOpacity(1);
- const int markerSize = Const::RESIZE_HANDLE_SIZE;
- painter->drawRect(QRectF(-markerSize,-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().right()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().right()-markerSize,rect().top()-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().left()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().left()-markerSize,
- rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().right()-markerSize,
- rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize,
- rect().top()-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize,
- rect().bottom()-markerSize,markerSize*2,markerSize*2));
-
- pen.setStyle(Qt::DotLine);
- painter->setPen(pen);
- painter->setBrush(QBrush(Qt::transparent));
- painter->drawRect(rect());
- painter->restore();
-}
-
-void BaseDesignIntf::moveSelectedItems(QPointF delta)
-{
- QList selectedItems;
- selectedItems = scene()->selectedItems();
- BaseDesignIntf *selectedItem;
- foreach(QGraphicsItem * item, selectedItems) {
- if (item != this) {
- selectedItem = dynamic_cast(item);
- if (selectedItem && !selectedItem->isBand()) {
- if (!selectedItem->m_fixedPos)
- selectedItem->setItemPos(selectedItem->pos() - delta);
- }
- }
- }
-}
-
-void BaseDesignIntf::setItemPos(qreal x, qreal y)
-{
- setItemPos(QPointF(x, y));
-}
-
-void BaseDesignIntf::setItemMode(ItemMode mode)
-{
- m_itemMode = mode;
- foreach(QGraphicsItem * item, childItems()) {
- BaseDesignIntf *ri = dynamic_cast(item);
- if (ri) ri->setItemMode(mode);
- }
- initMode(mode);
- initFlags();
-}
-void BaseDesignIntf::setItemPos(const QPointF &newPos)
-{
- QPointF oldPos = pos();
- QPointF finalPos = modifyPosForAlignedItem(newPos);
- QGraphicsItem::setPos(finalPos);
- emit posChanging(this, finalPos, oldPos);
-}
-
-
-QWidget* BaseDesignIntf::findRootWidget(QWidget* widget)
-{
- while (widget->parentWidget()) {
- widget = widget->parentWidget();
- }
- return widget;
-}
-
-void BaseDesignIntf::showDialog(QWidget *widget)
-{
- if (!widget) {
- return;
- }
- widget->setStyleSheet(findRootWidget(scene()->views().at(0))->styleSheet());
- QDialog *dialog = new QDialog(QApplication::activeWindow());
- widget->setParent(dialog);
- widget->setAttribute(Qt::WA_DeleteOnClose);
-#ifdef Q_OS_MAC
- dialog->setWindowModality(Qt::WindowModal);
-#else
- dialog->setWindowModality(Qt::ApplicationModal);
-#endif
- dialog->setLayout(new QVBoxLayout());
- dialog->resize(widget->size());
- dialog->layout()->setContentsMargins(2,2,2,2);
- dialog->layout()->addWidget(widget);
- connect(widget,SIGNAL(destroyed()),dialog,SLOT(close()));
- dialog->setWindowTitle(widget->windowTitle());
- dialog->exec();
- dialog->deleteLater();
-}
-
-void BaseDesignIntf::showEditorDialog()
-{
- showDialog(defaultEditor());
-}
-
-void BaseDesignIntf::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
-{
- if (event->button() == Qt::LeftButton &&
- ((itemMode()&EditMode)||(itemMode()&DesignMode))
- ) {
- showEditorDialog();
- }
- QGraphicsItem::mouseDoubleClickEvent(event);
-}
-
-void BaseDesignIntf::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
-{
- if (!(flags() & QGraphicsItem::ItemIsSelectable)) return;
- PageDesignIntf* page = dynamic_cast(scene());
- if (!page->selectedItems().contains(this)){
- page->clearSelection();
- this->setSelected(true);
- }
- QMenu menu(event->widget());
-
- QAction* lockGeometryAction = menu.addAction(tr("Lock item geometry"));
- lockGeometryAction->setCheckable(true);
-
- lockGeometryAction->setChecked(isGeometryLocked());
- menu.addSeparator();
-
- QAction* copyAction = menu.addAction(QIcon(":/report/images/copy"), tr("Copy"));
- QAction* cutAction = menu.addAction(QIcon(":/report/images/cut"), tr("Cut"));
- QAction* pasteAction = menu.addAction(QIcon(":/report/images/paste"), tr("Paste"));
- pasteAction->setEnabled(false);
-
-#if QT_VERSION >=QT_VERSION_CHECK(5,0,0)
- lockGeometryAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_L));
- copyAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_C));
- cutAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_X));
- pasteAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_V));
-#else
- lockGeometryAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L));
- copyAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_C));
- cutAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_X));
- pasteAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_V));
-#endif
-
- QClipboard *clipboard = QApplication::clipboard();
- ItemsReaderIntf::Ptr reader = StringXMLreader::create(clipboard->text());
- if (reader->first() && reader->itemType() == "Object"){
- pasteAction->setEnabled(true);
- }
- menu.addSeparator();
- QAction* bringToTopAction = menu.addAction(QIcon(":/report/images/bringToTop"), tr("Bring to top"));
- QAction* sendToBackAction = menu.addAction(QIcon(":/report/images/sendToBack"), tr("Send to back"));
- QAction* createHLayout = 0;
- if( page->selectedItems().count()>1){
- createHLayout = menu.addAction(QIcon(":/report/images/hlayout"), tr("Create Horizontal Layout"));
- }
- QAction* createVLayout = 0;
- if( page->selectedItems().count()>1){
- createVLayout = menu.addAction(QIcon(":/report/images/vlayout"), tr("Create Vertical Layout"));
- }
- menu.addSeparator();
- QAction* noBordersAction = menu.addAction(QIcon(":/report/images/noLines"), tr("No borders"));
- QAction* allBordersAction = menu.addAction(QIcon(":/report/images/allLines"), tr("All borders"));
- QAction* editBorderAction = menu.addAction(QIcon(":/report/images/borderEditor"), tr("Edit borders..."));
- QMenu *alignement = menu.addMenu(tr("Align items"));
- QAction* alignLeft = new QAction(QIcon(":/report/images/alignToLeft"),tr("Align to left"));
- QAction* alignRight = new QAction(QIcon(":/report/images/alignToRight"),tr("Align to right"));
- QAction* alignTop = new QAction(QIcon(":/report/images/alignToTop"),tr("Align to top"));
- QAction* alignBottom = new QAction(QIcon(":/report/images/alignToBottom"),tr("Align to bottom"));
- QAction* alignHCenter = new QAction(QIcon(":/report/images/alignToHCenter"),tr("Align to horizontal center"));
- QAction* alignVCenter = new QAction(QIcon(":/report/images/alignToHCenter"),tr("Align to vertical center"));
- QMenu *resize = menu.addMenu(tr("Resize items"));
- QAction* toSameWidth = new QAction(QIcon(":/report/images/sameWidth"),tr("Same width"));
- QAction* toSameHeight = new QAction(QIcon(":/report/images/sameHeight"),tr("Same height"));
- QMenu *itemAlign = menu.addMenu(tr("Align items to page"));
- QAction* itemAlignToLeft = new QAction(tr("Align to left"));
- QAction* itemAlignToRight = new QAction(tr("Align to right"));
- QAction* itemAlignToCenter = new QAction(tr("Align to center"));
- QAction* cancelItemAlign = new QAction(tr("cancel alignement"));
- QAction* itemAlignParent = new QAction(tr("Align to page width"));
- menu.addMenu(itemAlign);
- itemAlign->addAction(itemAlignToLeft);
- itemAlignToLeft->setChecked(m_itemAlign == LeftItemAlign);
- itemAlignToRight->setChecked(m_itemAlign == RightItemAlign);
- itemAlignToCenter->setChecked(m_itemAlign == CenterItemAlign);
- itemAlignParent->setChecked(m_itemAlign == ParentWidthItemAlign);
- cancelItemAlign->setChecked(m_itemAlign == DesignedItemAlign);
- itemAlign->addAction(itemAlignToRight);
- itemAlign->addAction(itemAlignToCenter);
- itemAlign->addAction(itemAlignParent);
- itemAlign->addAction(cancelItemAlign);
- resize->addAction(toSameWidth);
- resize->addAction(toSameHeight);
- alignement->addAction(alignLeft);
- alignement->addAction(alignRight);
- alignement->addAction(alignTop);
- alignement->addAction(alignBottom);
-
- connect(alignLeft,&QAction::triggered,this,[=](){page->alignToLeft();});
- connect(alignRight,&QAction::triggered,this,[=](){page->alignToRigth();});
- connect(alignTop,&QAction::triggered,this,[=](){page->alignToTop();});
- connect(alignBottom,&QAction::triggered,this,[=](){page->alignToBottom();});
- connect(alignHCenter,&QAction::triggered,this,[=](){page->alignToHCenter();});
- connect(alignVCenter,&QAction::triggered,this,[=](){page->alignToVCenter();});
- connect(toSameWidth,&QAction::triggered,this,[=](){page->sameWidth();});
- connect(toSameHeight,&QAction::triggered,this,[=](){page->sameHeight();});
- connect(itemAlignToLeft,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::LeftItemAlign);});
- connect(itemAlignToRight,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::RightItemAlign);});
- connect(itemAlignToCenter,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::CenterItemAlign);});
- connect(itemAlignParent,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::ParentWidthItemAlign);});
- connect(cancelItemAlign,&QAction::triggered,this,[=](){page->setItemAlign(BaseDesignIntf::DesignedItemAlign);});
-
- preparePopUpMenu(menu);
- QAction* a = menu.exec(event->screenPos());
- if (a){
- if (a == cutAction)
- {
- page->cut();
- return;
- }
- if (a == copyAction)
- page->copy();
- if (a == pasteAction)
- page->paste();
- if (a == bringToTopAction)
- page->bringToFront();
- if (a == sendToBackAction)
- page->sendToBack();
- if (a == noBordersAction)
- page->setBorders(BaseDesignIntf::NoLine);
- if (a == allBordersAction)
- page->setBorders(BaseDesignIntf::AllLines);
- if (a == editBorderAction)
- {
- BorderEditor be;
- be.loadItem(this);
- if (be.exec() == QDialog::Rejected) return;
- page->setBordersExt(be.borderSides(), be.borderWidth(), (LimeReport::BaseDesignIntf::BorderStyle)be.borderStyle(), be.borderColor());
- }
- if (a == createHLayout)
- page->addHLayout();
- if (a == createVLayout)
- page->addVLayout();
-
- processPopUpAction(a);
- }
-
-
-
-}
-
-int BaseDesignIntf::possibleMoveDirectionFlags() const
-{
- return m_possibleMoveDirectionFlags;
-}
-
-void BaseDesignIntf::setPossibleMoveFlags(int directionsFlags)
-{
- m_possibleMoveDirectionFlags = directionsFlags;
-}
-
-void BaseDesignIntf::setMarginSize(int value)
-{
- if (m_margin!=value){
- int oldValue = m_margin;
- m_margin=value;
- if (!isLoading()){
- update(rect());
- notify("margin", oldValue, value);
- }
- }
-}
-
-void BaseDesignIntf::drawResizeZone(QPainter* /*painter*/)
-{
-
- // if (m_resizeAreas.count() > 0) {
- // painter->save();
- // painter->setPen(QPen(Const::RESIZE_ZONE_COLOR));
- // (isSelected()) ? painter->setOpacity(Const::SELECTED_RESIZE_ZONE_OPACITY) : painter->setOpacity(Const::RESIZE_ZONE_OPACITY);
- // painter->setBrush(QBrush(Qt::green, Qt::SolidPattern));
- // foreach(QRectF * resizeArea, m_resizeAreas) painter->drawRect(*resizeArea);
- // painter->restore();
- // }
-
-}
-
-void BaseDesignIntf::initResizeZones()
-{
- m_resizeAreas.clear();
- if (m_resizeDirectionFlags & ResizeBottom) m_resizeAreas.append(&m_bottomRect);
- if (m_resizeDirectionFlags & ResizeTop) m_resizeAreas.append(&m_topRect);
- if (m_resizeDirectionFlags & ResizeLeft) m_resizeAreas.append(&m_leftRect);
- if (m_resizeDirectionFlags & ResizeRight) m_resizeAreas.append(&m_rightRect);
-}
-
-void BaseDesignIntf::invalidateRect(const QRectF &rect)
-{
- if (scene())
- scene()->update(mapToScene(rect).boundingRect());
-}
-
-ReportEnginePrivate *BaseDesignIntf::reportEditor()
-{
- PageDesignIntf *page = dynamic_cast(scene());
- if (page) return page->reportEditor();
- else return 0;
-}
-
-void BaseDesignIntf::updateItemSize(DataSourceManager *dataManager, RenderPass pass, int maxHeight)
-{
- Q_UNUSED(maxHeight);
- Q_UNUSED(dataManager);
- m_currentPass = pass;
- updateItemAlign();
-}
-
-bool BaseDesignIntf::isNeedUpdateSize(RenderPass /*pass*/) const
-{return false;}
-
-void BaseDesignIntf::drawPinArea(QPainter *painter) const
-{
- painter->drawRect(QRect(0, 0, 16, 16));
-}
-
-QObject *BaseDesignIntf::createElement(const QString& /*collectionName*/, const QString &elementType)
-{
- BaseDesignIntf* obj = 0;
- try{
- if (LimeReport::DesignElementsFactory::instance().objectCreator(elementType)){
- obj = LimeReport::DesignElementsFactory::instance().objectCreator(elementType)(this, this);
- if (page())
- connect(obj, SIGNAL(propertyChanged(QString,QVariant,QVariant)),
- page(), SLOT(slotItemPropertyChanged(QString,QVariant,QVariant)));
- }
- } catch (ReportError &error){
- qDebug()<(obj);
- if (item && page()) {
- page()->registerItem(item);
- }
- }
- }
- }
- emit loadCollectionFinished(collectionName);
-}
-
-BaseDesignIntf *BaseDesignIntf::cloneItem(ItemMode mode, QObject *owner, QGraphicsItem *parent)
-{
- BaseDesignIntf *clone = cloneItemWOChild(mode, owner, parent);
- clone->setPatternName(this->objectName());
- clone->setPatternItem(this);
-#ifdef HAVE_QT5
- foreach(QObject * child, children()) {
-#else
- foreach(QObject * child, QObject::children()) {
-#endif
- BaseDesignIntf *childItem = dynamic_cast(child);
- if (childItem) {clone->childAddedEvent(childItem->cloneItem(mode, clone, clone));}
- }
- return clone;
-}
-
-BaseDesignIntf *BaseDesignIntf::cloneItemWOChild(ItemMode mode, QObject *owner, QGraphicsItem *parent)
-{
- BaseDesignIntf *clone = createSameTypeItem(owner, parent);
- clone->setObjectName(this->objectName());
- clone->setItemMode(mode);
- clone->objectLoadStarted();
- clone->setReportSettings(this->reportSettings());
- for (int i = 0; i < clone->metaObject()->propertyCount(); i++) {
- if (clone->metaObject()->property(i).isWritable())
- clone->setProperty(clone->metaObject()->property(i).name(), property(clone->metaObject()->property(i).name()));
- }
- clone->objectLoadFinished();
- return clone;
-}
-
-void BaseDesignIntf::initFromItem(BaseDesignIntf *source)
-{
- objectLoadStarted();
- for (int i = 0; i < metaObject()->propertyCount(); i++) {
- if (strcmp(metaObject()->property(i).name(),"objectName")!=0)
- if (source->property(metaObject()->property(i).name()).isValid()) {
- if (metaObject()->property(i).isWritable())
- setProperty(metaObject()->property(i).name(), source->property(metaObject()->property(i).name()));
- }
- }
- objectLoadFinished();
-}
-
-bool BaseDesignIntf::canBeSplitted(int height) const
-{Q_UNUSED(height); return false;}
-
-bool BaseDesignIntf::isEmpty() const
-{return false;}
-
-BaseDesignIntf *BaseDesignIntf::cloneUpperPart(int height, QObject *owner, QGraphicsItem *parent)
-{Q_UNUSED(height); Q_UNUSED(owner); Q_UNUSED(parent); return 0;}
-
-BaseDesignIntf *BaseDesignIntf::cloneBottomPart(int height, QObject *owner, QGraphicsItem *parent)
-{Q_UNUSED(height); Q_UNUSED(owner); Q_UNUSED(parent); return 0;}
-
-BaseDesignIntf *BaseDesignIntf::cloneEmpty(int height, QObject *owner, QGraphicsItem *parent)
-{Q_UNUSED(height); Q_UNUSED(owner); Q_UNUSED(parent); return 0;}
-
-
-void BaseDesignIntf::objectLoadStarted()
-{
- m_objectState = ObjectLoading;
-}
-
-void BaseDesignIntf::objectLoadFinished()
-{
- m_objectState = ObjectLoaded;
- emit objectLoaded(this);
-}
-
-void BaseDesignIntf::parentObjectLoadFinished()
-{}
-
-QList BaseDesignIntf::childBaseItems() const
-{
- QList resList;
- foreach(QGraphicsItem * item, childItems()) {
- BaseDesignIntf *baseItem = dynamic_cast(item);
- if (baseItem) resList << baseItem;
- }
- return resList;
-}
-
-
-void BaseDesignIntf::addChildItems(QList* list){
- foreach(BaseDesignIntf* item, childBaseItems()){
- list->append(item);
- item->addChildItems(list);
- }
-}
-
-qreal BaseDesignIntf::calcAbsolutePosY(qreal currentOffset, BaseDesignIntf *item)
-{
- BaseDesignIntf* parent = dynamic_cast(item->parent());
- if (parent)
- return calcAbsolutePosY(currentOffset + item->getItemPosY(), parent);
- else
- return currentOffset + item->getItemPosY();
-}
-
-qreal BaseDesignIntf::calcAbsolutePosX(qreal currentOffset, BaseDesignIntf *item)
-{
- BaseDesignIntf* parent = dynamic_cast(item->parent());
- if (parent)
- return calcAbsolutePosX(currentOffset + item->getItemPosX(), parent);
- else
- return currentOffset + item->getItemPosX();
-}
-
-QList BaseDesignIntf::allChildBaseItems()
-{
- QList resList;
- addChildItems(&resList);
- return resList;
-}
-
-BaseDesignIntf *BaseDesignIntf::childByName(const QString &name)
-{
- foreach(BaseDesignIntf* item, childBaseItems()){
- if (item->objectName().compare(name,Qt::CaseInsensitive)==0){
- return item;
- } else {
- BaseDesignIntf* child = item->childByName(name);
- if (child) return child;
- }
- }
- return 0;
-}
-
-QWidget *BaseDesignIntf::defaultEditor()
-{
- return 0;
-}
-
-void BaseDesignIntf::notify(const QString &propertyName, const QVariant& oldValue, const QVariant& newValue)
-{
- if (!isLoading())
- emit propertyChanged(propertyName, oldValue, newValue);
-}
-
-void BaseDesignIntf::notify(const QVector& propertyNames)
-{
- if (!isLoading())
- emit propertyesChanged(propertyNames);
-}
-
-
-QMap BaseDesignIntf::getStringForTranslation(){
- return QMap();
-}
-
-QVariant BookmarkContainerDesignIntf::getBookMark(const QString& key)
-{
- if (m_bookmarks.contains(key))
- return m_bookmarks.value(key);
- else return QVariant();
-}
-
-void BookmarkContainerDesignIntf::copyBookmarks(BookmarkContainerDesignIntf* source)
-{
- foreach(QString key, source->bookmarks()){
- addBookmark(key,source->getBookMark(key));
- }
-}
-
-QRectF Marker::boundingRect() const
-{
- return m_rect.adjusted(-15,-15,15,15);
-}
-
-void Marker::paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*)
-{
- QPen pen;
- const int markerSize = 5;
- pen.setColor(color());
- pen.setWidth(2);
- pen.setStyle(Qt::DotLine);
- painter->setPen(pen);
- painter->setOpacity(Const::SELECTION_COLOR_OPACITY);
- painter->drawRect(rect());
- painter->setBrush(color());
- painter->setPen(Qt::transparent);
-
- painter->setOpacity(1);
- painter->drawRect(QRectF(-markerSize,-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().right()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().right()-markerSize,rect().top()-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().left()-markerSize,rect().bottom()-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().left()-markerSize,
- rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().right()-markerSize,
- rect().bottom()-rect().height()/2-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize,
- rect().top()-markerSize,markerSize*2,markerSize*2));
- painter->drawRect(QRectF(rect().left()+rect().width()/2-markerSize,
- rect().bottom()-markerSize,markerSize*2,markerSize*2));
-}
-
-QColor Marker::color() const {
- return m_color;
-}
-
-SelectionMarker::SelectionMarker(QGraphicsItem* parent, BaseDesignIntf* owner)
- : Marker(parent, owner)
-{
- setAcceptHoverEvents(true);
-}
-
-QColor SelectionMarker::color() const
-{
- return owner()->isGeometryLocked() ? Qt::darkGray : Marker::color();
-}
-
-void SelectionMarker::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
-{
- if (owner()) owner()->hoverMoveEvent(event);
- QGraphicsItem::hoverMoveEvent(event);
-}
-
-void SelectionMarker::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- if (owner()){
- owner()->setSelected(true);
- owner()->mousePressEvent(event);
- }
- QGraphicsItem::mousePressEvent(event);
-}
-
-void SelectionMarker::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- if (owner()) owner()->mouseReleaseEvent(event);
-}
-
-void SelectionMarker::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
-{
- if (owner()) owner()->mouseDoubleClickEvent(event);
- QGraphicsItem::mouseDoubleClickEvent(event);
-}
-
-void SelectionMarker::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- qDebug() << "mouse move";
- if (owner()) owner()->mouseMoveEvent(event);
-}
-
-void BaseDesignIntf::processPopUpAction(QAction *action){
- if (page()){
- if (action->text().compare(tr("Lock item geometry")) == 0){
- page()->setPropertyToSelectedItems("geometryLocked",action->isChecked());
- }
- }
-}
-
-} //namespace LimeReport
diff --git a/Nouveau dossier/lrbasedesignintf.h b/Nouveau dossier/lrbasedesignintf.h
deleted file mode 100644
index fa820ab..0000000
--- a/Nouveau dossier/lrbasedesignintf.h
+++ /dev/null
@@ -1,536 +0,0 @@
-/***************************************************************************
- * 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 . *
- * *
- ** 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 . *
- * *
- * 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 LRBASEDESIGNINTF_H
-#define LRBASEDESIGNINTF_H
-#include
-#include
-#include
-#include
-#include
-#include
-#include "lrcollection.h"
-#include "lrglobal.h"
-#include "serializators/lrstorageintf.h"
-
-Q_DECLARE_METATYPE(QList*)
-
-namespace LimeReport {
-
-enum ItemModes{ DesignMode=1, PreviewMode=2, PrintMode=4, EditMode=8, LayoutEditMode=16 };
-
-class ReportEnginePrivate;
-class PageDesignIntf;
-class BaseDesignIntf;
-
-class LIMEREPORT_EXPORT Marker : public QGraphicsItem{
-public:
- Marker(QGraphicsItem* parent = 0, BaseDesignIntf* owner = 0): QGraphicsItem(parent), m_owner(owner){}
- QRectF boundingRect() const;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *);
- void setRect(QRectF rect){prepareGeometryChange();m_rect=rect;}
- void setColor(QColor color){m_color=color;}
- QRectF rect() const {return m_rect;}
- virtual QColor color() const;
- BaseDesignIntf* owner() const {return m_owner;}
-private:
- QRectF m_rect;
- QColor m_color;
- BaseDesignIntf* m_owner;
-};
-
-class LIMEREPORT_EXPORT SelectionMarker : public Marker{
-public:
- SelectionMarker(QGraphicsItem* parent=0, BaseDesignIntf* owner = 0);
- QColor color() const;
-protected:
- void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-};
-
-class DataSourceManager;
-class ReportRender;
-
-class LIMEREPORT_EXPORT BaseDesignIntf :
- public QObject, public QGraphicsItem, public ICollectionContainer, public ObjectLoadingStateIntf {
- Q_OBJECT
- Q_INTERFACES(QGraphicsItem)
- Q_FLAGS(BorderLines)
- Q_PROPERTY(QRect geometry READ geometry WRITE setGeometryProperty NOTIFY geometryChanged)
- Q_PROPERTY(ACollectionProperty children READ fakeCollectionReader DESIGNABLE false)
- Q_PROPERTY(qreal zOrder READ zValue WRITE setZValueProperty DESIGNABLE false)
- Q_PROPERTY(BorderLines borders READ borderLines WRITE setBorderLinesFlags)
- Q_PROPERTY(QString parentName READ parentReportItemName WRITE setParentReportItem DESIGNABLE false)
- Q_PROPERTY(qreal borderLineSize READ borderLineSize WRITE setBorderLineSize)
- Q_PROPERTY(bool isVisible READ isVisible WRITE setItemVisible DESIGNABLE false)
- Q_PROPERTY(bool shadow READ hasShadow WRITE setShadow)
- Q_PROPERTY(QColor borderColor READ borderColor WRITE setBorderColor)
- Q_PROPERTY(bool geometryLocked READ isGeometryLocked WRITE setGeometryLocked)
- Q_PROPERTY(BorderStyle borderStyle READ borderStyle WRITE setBorderStyle)
-
- friend class ReportRender;
-public:
- enum BGMode { TransparentMode, OpaqueMode};
- enum BorderStyle { NoStyle = Qt::NoPen,
- Solid = Qt::SolidLine,
- Dashed = Qt::DashLine,
- Dot = Qt::DotLine,
-
- DashDot = Qt::DashDotLine,
- DashDotDot = Qt::DashDotDotLine,
- Doubled = 7
- };
-
-
- enum BrushStyle{ NoBrush,
- SolidPattern,
- Dense1Pattern,
- Dense2Pattern,
- Dense3Pattern,
- Dense4Pattern,
- Dense5Pattern,
- Dense6Pattern,
- Dense7Pattern,
- HorPattern,
- VerPattern,
- CrossPattern,
- BDiagPattern,
- FDiagPattern };
-
-
- enum ResizeFlags { Fixed = 0,
- ResizeLeft = 1,
- ResizeRight = 2,
- ResizeTop = 4,
- ResizeBottom = 8,
- AllDirections = 15
- };
-
- enum MoveFlags { None = 0,
- LeftRight=1,
- TopBotom=2,
- All=3
- };
-
- enum BorderSide {
- NoLine = 0,
- TopLine = 1,
- BottomLine = 2,
- LeftLine = 4,
- RightLine = 8,
- AllLines = 15
- };
-
- enum ObjectState {ObjectLoading, ObjectLoaded, ObjectCreated};
-
- enum ItemAlign {LeftItemAlign,RightItemAlign,CenterItemAlign,ParentWidthItemAlign,DesignedItemAlign};
-
- enum UnitType {Millimeters, Inches};
-#if QT_VERSION >= 0x050500
- Q_ENUM(BGMode)
- Q_ENUM(BrushStyle)
- Q_ENUM(BorderStyle)
- Q_ENUM(ResizeFlags)
- Q_ENUM(MoveFlags)
- Q_ENUM(BorderSide)
- Q_ENUM(ObjectState)
- Q_ENUM(ItemAlign)
- Q_ENUM(UnitType)
-
-#else
- Q_ENUMS(BGMode)
- Q_ENUMS(BrushStyle)
- Q_ENUM(BorderStyle)
- Q_ENUMS(ResizeFlags)
- Q_ENUMS(MoveFlags)
- Q_ENUMS(BorderSide)
- Q_ENUMS(ObjectState)
- Q_ENUMS(ItemAlign)
- Q_ENUMS(UnitType)
-
-#endif
-// enum ExpandType {EscapeSymbols, NoEscapeSymbols, ReplaceHTMLSymbols};
- Q_DECLARE_FLAGS(BorderLines, BorderSide)
- Q_DECLARE_FLAGS(ItemMode,ItemModes)
- friend class SelectionMarker;
-public:
- BaseDesignIntf(const QString& storageTypeName, QObject* owner = 0, QGraphicsItem* parent = 0);
- virtual ~BaseDesignIntf();
-
- void setParentReportItem(const QString& value);
- QString parentReportItemName() const;
-
- BrushStyle backgroundBrushStyle() const {return m_backgroundBrushStyle;}
- BorderStyle borderStyle() const {return m_borderStyle;}
- void setBackgroundBrushStyle(BrushStyle value);
- QColor backgroundColor() const {return m_backgroundColor;}
- void setBackgroundColor(QColor value);
-
- QPen pen() const;
- void setPen(QPen& pen);
- QFont font() const;
- void setFont(QFont& font);
- QColor fontColor() const {return m_fontColor;}
- void setFontColor(QColor value){m_fontColor=value;}
-
- virtual BGMode backgroundMode() const;
- virtual void setBackgroundMode(BGMode bgMode);
- virtual qreal width() const;
- virtual qreal widthMM() const;
- virtual void setWidth(qreal width);
- virtual qreal height() const;
- virtual qreal heightMM() const;
- virtual void setHeight(qreal height);
- virtual QPointF posMM() const;
- virtual int opacity() const;
- virtual void setOpacity(int opacity);
- virtual void setSize(QSizeF size);
- virtual QSizeF size() const;
- virtual QSizeF sizeMM() const;
-
- void paint(QPainter* ppainter, const QStyleOptionGraphicsItem* option, QWidget* widget);
- void prepareRect(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*);
- virtual QPainterPath shape() const;
-
- void setFixedPos(bool fixedPos);
- bool isFixedPos(){return m_fixedPos;}
- int resizeHandleSize() const;
-
- qreal unitFactor() const;
- void setUnitType(UnitType unitType);
- UnitType unitType();
- virtual QRect geometry() const;
- void setGeometry(QRectF rect);
-
- QRectF rect() const;
- void setupPainter(QPainter* painter) const;
- virtual QRectF boundingRect() const;
-
- virtual void moveRight();
- virtual void moveLeft();
- virtual void moveDown();
- virtual void moveUp();
-
- virtual void sizeRight();
- virtual void sizeLeft();
- virtual void sizeUp();
- virtual void sizeDown();
-
- void setItemPos(const QPointF &newPos);
- void setItemPos(qreal x, qreal y);
-
- virtual void setItemMode(LimeReport::BaseDesignIntf::ItemMode mode);
- ItemMode itemMode() const {return m_itemMode;}
-
- virtual void setBorderLinesFlags(LimeReport::BaseDesignIntf::BorderLines flags);
- void setGeometryProperty(QRect rect);
- PageDesignIntf* page() const;
-
- BorderLines borderLines() const;
-
- QString storageTypeName() const {return m_storageTypeName;}
- ReportEnginePrivate *reportEditor();
-
- virtual void updateItemSize(DataSourceManager* dataManager, RenderPass pass=FirstPass, int maxHeight=0);
- virtual bool isNeedUpdateSize(RenderPass) const;
- virtual BaseDesignIntf* cloneItem(LimeReport::BaseDesignIntf::ItemMode mode, QObject* owner=0, QGraphicsItem* parent=0);
- virtual BaseDesignIntf* cloneItemWOChild(LimeReport::BaseDesignIntf::ItemMode mode, QObject* owner=0, QGraphicsItem* parent=0);
- virtual BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0) = 0;
- virtual void initFromItem(BaseDesignIntf* source);
-
- virtual bool canBeSplitted(int height) const;
- virtual qreal minHeight() const {return 0;}
- virtual bool isSplittable() const {return false;}
- virtual bool isEmpty() const;
- virtual BaseDesignIntf* cloneUpperPart(int height, QObject* owner=0, QGraphicsItem* parent=0);
- virtual BaseDesignIntf* cloneBottomPart(int height, QObject* owner=0, QGraphicsItem* parent=0);
- virtual BaseDesignIntf* cloneEmpty(int height, QObject* owner=0, QGraphicsItem* parent=0);
-
- bool isLoaded(){return m_objectState==ObjectLoaded;}
- bool isLoading(){return m_objectState==ObjectLoading;}
- void objectLoadStarted();
- void objectLoadFinished();
- virtual void parentObjectLoadFinished();
- virtual void beforeDelete();
-
- QList childBaseItems() const;
- QList allChildBaseItems();
- BaseDesignIntf* childByName(const QString& name);
-
- virtual QWidget *defaultEditor();
- void notify(const QString &propertyName, const QVariant &oldValue, const QVariant &newValue);
- void notify(const QVector &propertyNames);
-
- int possibleResizeDirectionFlags() const;
- void setPossibleResizeDirectionFlags(int directionsFlags);
- int possibleMoveDirectionFlags() const;
- void setPossibleMoveFlags(int directionsFlags);
-
- int marginSize() const {return m_margin;}
- void setMarginSize(int value);
-
- QString itemTypeName() const;
- void setItemTypeName(const QString &itemTypeName);
-
- qreal borderLineSize() const;
- void setBorderStyle(BorderStyle b);
- void setBorderLineSize(qreal value);
- void showEditorDialog();
- ItemAlign itemAlign() const;
- virtual void setItemAlign(const ItemAlign &itemAlign);
- void updateItemAlign();
- QPointF modifyPosForAlignedItem(const QPointF &pos);
- void turnOnJoinMarker(bool value);
- virtual bool isBand(){return false;}
- QColor borderColor() const;
- void setBorderColor(const QColor &borderColor);
- void setItemVisible(const bool& value);
- virtual bool canContainChildren() const { return false;}
- virtual bool canAcceptPaste() const{ return false;}
- ReportSettings* reportSettings() const;
- void setReportSettings(ReportSettings *reportSettings);
- void setZValueProperty(qreal value);
- QString patternName() const;
- void setPatternName(const QString &patternName);
- BaseDesignIntf* patternItem() const;
- void setPatternItem(BaseDesignIntf* patternItem);
- virtual QMap getStringForTranslation();
- bool fillInSecondPass() const;
- void setFillInSecondPass(bool fillInSecondPass);
- bool isWatermark() const;
- virtual void setWatermark(bool watermark);
- void updateSelectionMarker();
- void turnOnSelectionMarker(bool value);
- bool fillTransparentInDesignMode() const;
- void setFillTransparentInDesignMode(bool fillTransparentInDesignMode);
- void emitPosChanged(QPointF oldPos, QPointF newPos);
- void emitObjectNamePropertyChanged(const QString& oldName, const QString& newName);
- bool isGeometryLocked() const;
- void setGeometryLocked(bool itemLocked);
- bool isChangingPos() const;
- void setIsChangingPos(bool isChangingPos);
- bool isShapeItem() const;
- bool isPageItem() const;
- bool hasShadow();
- void setShadow(bool sh);
- Q_INVOKABLE QString setItemWidth(qreal width);
- Q_INVOKABLE QString setItemHeight(qreal height);
- Q_INVOKABLE qreal getItemWidth();
- Q_INVOKABLE qreal getItemHeight();
- Q_INVOKABLE qreal getItemPosX();
- Q_INVOKABLE qreal getItemPosY();
- Q_INVOKABLE qreal getAbsolutePosX();
- Q_INVOKABLE qreal getAbsolutePosY();
- Q_INVOKABLE QString setItemPosX(qreal xValue);
- Q_INVOKABLE QString setItemPosY(qreal yValue);
-
-protected:
-
- //ICollectionContainer
- QObject* createElement(const QString&, const QString& elementType);
- int elementsCount(const QString&);
- QObject* elementAt(const QString&, int index);
- void collectionLoadFinished(const QString& collectionName);
- //ICollectionContainer
-
- void mousePressEvent(QGraphicsSceneMouseEvent* event);
- void hoverMoveEvent(QGraphicsSceneHoverEvent* event);
- void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
- void hoverEnterEvent(QGraphicsSceneHoverEvent* );
- void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
-
- void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
-
- virtual void geometryChangedEvent(QRectF newRect, QRectF oldRect);
- virtual QPen borderPen(BorderSide side) const;
- virtual QColor selectionColor() const;
- virtual void initFlags();
- virtual void initMode(LimeReport::BaseDesignIntf::ItemMode mode);
- virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
- virtual void childAddedEvent(BaseDesignIntf* child);
- virtual void parentChangedEvent(BaseDesignIntf*);
- void restoreLinks();
- virtual void restoreLinksEvent(){}
-
- void drawTopLine(QPainter *painter, QRectF rect) const;
- void drawBootomLine(QPainter *painter, QRectF rect) const;
- void drawRightLine(QPainter *painter, QRectF rect) const;
- void drawLeftLine(QPainter *painter, QRectF rect) const;
-
-
- void drawBorder(QPainter* painter, QRectF rect) const;
- void drawShadow(QPainter* painter, QRectF rect, qreal shadowSize) const;
- void drawDesignModeBorder(QPainter* painter, QRectF rect) const;
- void drawRenderModeBorder(QPainter *painter, QRectF rect) const;
- void drawResizeZone(QPainter*);
- void drawMarker(QPainter* painter, QColor color) const;
- void drawPinArea(QPainter* painter) const;
-
- void initResizeZones();
- void invalidateRect(const QRectF &rect);
- void invalidateRects(QVector rects);
- QFont transformToSceneFont(const QFont &value) const;
-
- RenderPass currentRenderPass(){return m_currentPass;}
-
- virtual bool drawDesignBorders() const {return true;}
- virtual QColor selectionMarkerColor(){ return Const::SELECTION_COLOR;}
-
- QString expandUserVariables(QString context, RenderPass pass, ExpandType expandType, DataSourceManager *dataManager);
- QString expandDataFields(QString context, ExpandType expandType, DataSourceManager *dataManager);
- QString expandScripts(QString context, DataSourceManager *dataManager);
-
- QVariant m_varValue;
-
- virtual void preparePopUpMenu(QMenu& menu){Q_UNUSED(menu)}
- virtual void processPopUpAction(QAction* action);
-
- void addChildItems(QList* list);
- qreal calcAbsolutePosY(qreal currentOffset, BaseDesignIntf* item);
- qreal calcAbsolutePosX(qreal currentOffset, BaseDesignIntf* item);
-
- QWidget* findRootWidget(QWidget* widget);
- void showDialog(QWidget *widget);
-
-private:
- int resizeDirectionFlags(QPointF position);
- void moveSelectedItems(QPointF delta);
- Qt::CursorShape getPossibleCursor(int cursorFlags);
- void updatePossibleDirectionFlags();
- void addGuideLine(qreal x1, qreal y1, qreal x2, qreal y2);
- void removeGuideLines();
-private slots:
- void onChangeGeometryTimeOut();
-
-private:
- QPointF m_startPos;
- int m_resizeHandleSize;
- int m_selectionPenSize;
- int m_possibleResizeDirectionFlags;
- int m_possibleMoveDirectionFlags;
- int m_savedPossibleResizeDirectionFlags;
- int m_savedPossibleMoveDirectionFlags;
- int m_savedFixedPos;
- int m_resizeDirectionFlags;
- qreal m_width;
- qreal m_height;
- QPen m_pen;
- QFont m_font;
- QColor m_fontColor;
- bool m_fixedPos;
- qreal m_borderLineSize;
-
-
- QRectF m_rect;
- mutable QRectF m_boundingRect;
-
- QRectF m_oldGeometry;
- BGMode m_BGMode;
- int m_opacity;
- BorderLines m_borderLinesFlags;
- BorderStyle m_borderStyle;
-
- QRectF m_bottomRect;
- QRectF m_topRect;
- QRectF m_leftRect;
- QRectF m_rightRect;
-
- QVector m_resizeAreas;
- QString m_storageTypeName;
- ItemMode m_itemMode;
-
- ObjectState m_objectState;
-
- BrushStyle m_backgroundBrushStyle;
- QColor m_backgroundColor;
-
- RenderPass m_currentPass;
- int m_margin;
- QString m_itemTypeName;
- ItemAlign m_itemAlign;
- bool m_changingItemAlign;
- QColor m_borderColor;
- ReportSettings* m_reportSettings;
- QString m_patternName;
- BaseDesignIntf* m_patternItem;
- bool m_fillInSecondPass;
- bool m_watermark;
- bool m_hovered;
- bool m_joinMarkerOn;
- SelectionMarker* m_selectionMarker;
- Marker* m_joinMarker;
- bool m_fillTransparentInDesignMode;
- QRect m_itemGeometry;
- UnitType m_unitType;
- bool m_itemGeometryLocked;
- bool m_isChangingPos;
- bool m_isMoveable;
- bool m_shadow;
- QList guideLines;
-
-signals:
- void geometryChanged(QObject* object, QRectF newGeometry, QRectF oldGeometry);
- void posChanging(QObject* object, QPointF newPos, QPointF oldPos);
- void posChanged(QObject* object, QPointF newPos, QPointF oldPos);
- void itemSelected(LimeReport::BaseDesignIntf *item);
- void itemSelectedHasBeenChanged(BaseDesignIntf *item, bool value);
- void loadCollectionFinished(const QString& collectionName);
- void objectLoaded(QObject* object);
- void objectChanged(QObject* object);
- void propertyChanged(const QString& propertName, const QVariant& oldValue,const QVariant& newValue);
- void propertyObjectNameChanged(const QString& oldValue, const QString& newValue);
- void propertyesChanged(QVector propertyNames);
- void itemAlignChanged(BaseDesignIntf* item, const ItemAlign& oldValue, const ItemAlign& newValue);
- void itemVisibleHasChanged(BaseDesignIntf* item);
- void beforeRender();
- void afterData();
- void afterRender();
-};
-
-class LIMEREPORT_EXPORT BookmarkContainerDesignIntf: public BaseDesignIntf{
- Q_OBJECT
-public:
- BookmarkContainerDesignIntf(const QString& storageTypeName, QObject* owner = 0, QGraphicsItem* parent = 0)
- :BaseDesignIntf(storageTypeName, owner, parent){}
- void addBookmark(const QString& key, const QVariant& value){ m_bookmarks.insert(key, value);}
- QList bookmarks(){ return m_bookmarks.keys();}
- QVariant getBookMark(const QString& key);
- void copyBookmarks(BookmarkContainerDesignIntf* source);
-private:
- QHash m_bookmarks;
-};
-
-} //namespace LimeReport
-
-#endif // LRBASEDESIGNINTF_H
diff --git a/Nouveau dossier/lrbordereditor.cpp b/Nouveau dossier/lrbordereditor.cpp
deleted file mode 100644
index ce923ef..0000000
--- a/Nouveau dossier/lrbordereditor.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-#include "lrbordereditor.h"
-#include "ui_lrbordereditor.h"
-#include
-#include "lrbasedesignintf.h"
-
-namespace LimeReport{
-
-BorderEditor::BorderEditor(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::BorderEditor),
- m_borderStyle(1),
- m_borderWidth(1)
-{
- ui->setupUi(this);
- connect(
- ui->borderFrame, SIGNAL(borderSideClicked(LimeReport::BaseDesignIntf::BorderSide, bool)),
- this, SLOT(checkToolButtons(LimeReport::BaseDesignIntf::BorderSide, bool))
- );
-}
-
-void BorderEditor::loadItem(LimeReport::BaseDesignIntf *item)
-{
- m_item = item;
- qDebug()<metaObject()->className();
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine,
- item->borderLines() & LimeReport::BaseDesignIntf::TopLine);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine,
- item->borderLines() & LimeReport::BaseDesignIntf::LeftLine);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine,
- item->borderLines() & LimeReport::BaseDesignIntf::RightLine);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine,
- item->borderLines() & LimeReport::BaseDesignIntf::BottomLine);
-
- QPen pen;
- pen.setWidthF(item->borderLineSize());
- pen.setColor(item->borderColor());
- pen.setStyle((Qt::PenStyle)item->borderStyle());
- ui->borderFrame->setPen(pen);
- m_borderColor = item->borderColor().name();
- ui->listWidget->setCurrentRow((Qt::PenStyle)item->borderStyle());
- ui->comboBox->setCurrentText(QString::number(item->borderLineSize()));
- m_borderWidth = ui->comboBox->currentText().toDouble();
- m_borderStyle =ui->listWidget->currentRow();
- ui->colorIndicator->setStyleSheet(QString("background-color:%1;").arg(m_borderColor));
-}
-
-LimeReport::BaseDesignIntf::BorderLines BorderEditor::borderSides()
-{
- int borders = 0;
- borders += (ui->topLine->isChecked()) ? LimeReport::BaseDesignIntf::TopLine : 0;
- borders += (ui->bottomLine->isChecked()) ? LimeReport::BaseDesignIntf::BottomLine : 0;
- borders += (ui->leftLine->isChecked()) ? LimeReport::BaseDesignIntf::LeftLine : 0;
- borders += (ui->rightLine->isChecked()) ? LimeReport::BaseDesignIntf::RightLine : 0;
- return (LimeReport::BaseDesignIntf::BorderLines) borders;
-}
-
-LimeReport::BaseDesignIntf::BorderStyle BorderEditor::borderStyle()
-{
- return (LimeReport::BaseDesignIntf::BorderStyle) m_borderStyle;
-}
-
-QString BorderEditor::borderColor()
-{
- return m_borderColor;
-}
-
-double BorderEditor::borderWidth()
-{
- return m_borderWidth;
-}
-
-bool BorderEditor::isPage()
-{
- return QString(m_item->metaObject()->className()) == "LimeReport::PageItemDesignIntf";
-}
-
-BorderEditor::~BorderEditor()
-{
- delete ui;
-}
-
-void BorderEditor::on_listWidget_currentRowChanged(int currentRow)
-{
- QPen pen = ui->borderFrame->pen();
- pen.setStyle((Qt::PenStyle)currentRow);
- m_borderStyle = currentRow;
- ui->borderFrame->setPen(pen);
-}
-
-void BorderEditor::on_comboBox_currentTextChanged(const QString &arg1)
-{
- QPen pen = ui->borderFrame->pen();
- pen.setWidthF(arg1.toDouble());
- ui->borderFrame->setPen(pen);
- m_borderWidth = arg1.toDouble();
-}
-
-void BorderEditor::checkToolButtons(LimeReport::BaseDesignIntf::BorderSide side, bool check)
-{
- switch(side)
- {
- case BaseDesignIntf::BorderSide::TopLine:
- ui->topLine->setChecked(check);
- break;
- case BaseDesignIntf::BorderSide::BottomLine:
- ui->bottomLine->setChecked(check);
- break;
- case BaseDesignIntf::BorderSide::LeftLine:
- ui->leftLine->setChecked(check);
- break;
- case BaseDesignIntf::BorderSide::RightLine:
- ui->rightLine->setChecked(check);
- break;
- }
-}
-
-void BorderEditor::on_topLine_clicked(bool checked){
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine, checked);
-}
-
-void BorderEditor::on_bottomLine_clicked(bool checked){
- emit ui->borderFrame->borderSideClicked(BaseDesignIntf::BorderSide::BottomLine, checked);
-}
-
-void BorderEditor::on_leftLine_clicked(bool checked){
- emit ui->borderFrame->borderSideClicked(BaseDesignIntf::BorderSide::LeftLine, checked);
-}
-
-void BorderEditor::on_rightLine_clicked(bool checked){
- emit ui->borderFrame->borderSideClicked(BaseDesignIntf::BorderSide::RightLine, checked);
-}
-
-
-void BorderEditor::on_allLines_clicked()
-{
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine, true);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine, true);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine, true);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine, true);
-}
-
-void BorderEditor::on_noLines_clicked()
-{
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::TopLine, false);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::BottomLine, false);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::LeftLine, false);
- emit ui->borderFrame->borderSideClicked(LimeReport::BaseDesignIntf::BorderSide::RightLine, false);
-}
-
-
-void BorderEditor::on_selectColor_clicked()
-{
- QColorDialog cd(this);
- if(cd.exec() == QDialog::Rejected) return;
- QPen pen = ui->borderFrame->pen();
- pen.setColor(cd.selectedColor().name());
- m_borderColor = pen.color().name();
- ui->colorIndicator->setStyleSheet(QString("background-color:%1;").arg(m_borderColor));
- ui->borderFrame->setPen(pen);
-}
-
-} // namespace LimeReport
diff --git a/Nouveau dossier/lrbordereditor.h b/Nouveau dossier/lrbordereditor.h
deleted file mode 100644
index 7906024..0000000
--- a/Nouveau dossier/lrbordereditor.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef LRBORDEREDITOR_H
-#define LRBORDEREDITOR_H
-
-#include
-#include "lrbasedesignintf.h"
-
-namespace LimeReport{
-
-namespace Ui {
- class BorderEditor;
-}
-
-
-class LIMEREPORT_EXPORT BorderEditor : public QDialog
-{
- Q_OBJECT
-
-public:
- explicit BorderEditor(QWidget *parent = nullptr);
- void loadItem(LimeReport::BaseDesignIntf *item);
- LimeReport::BaseDesignIntf::BorderLines borderSides();
- LimeReport::BaseDesignIntf::BorderStyle borderStyle();
- QString borderColor();
- double borderWidth();
- bool isPage();
- ~BorderEditor();
-
-private slots:
- void on_listWidget_currentRowChanged(int currentRow);
- void on_comboBox_currentTextChanged(const QString &arg1);
- void on_noLines_clicked();
- void on_topLine_clicked(bool checked);
- void on_bottomLine_clicked(bool checked);
- void on_leftLine_clicked(bool checked);
- void on_rightLine_clicked(bool checked);
- void on_allLines_clicked();
- void checkToolButtons(LimeReport::BaseDesignIntf::BorderSide side, bool check);
- void on_selectColor_clicked();
-
-private:
- Ui::BorderEditor *ui;
- LimeReport::BaseDesignIntf *m_item;
- QString m_borderColor;
- int m_borderStyle;
- double m_borderWidth;
-};
-
-} // namespace LimeReport
-
-#endif // LRBORDEREDITOR_H
diff --git a/Nouveau dossier/lrgroupbands.cpp b/Nouveau dossier/lrgroupbands.cpp
deleted file mode 100644
index 3eedb6a..0000000
--- a/Nouveau dossier/lrgroupbands.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/***************************************************************************
- * 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 . *
- * *
- ** 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 . *
- * *
- * 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 "lrgroupbands.h"
-#include "lrglobal.h"
-#include "lrdatasourcemanager.h"
-
-const QString xmlTagHeader = QLatin1String("GroupHeader");
-const QString xmlTagFooter = QLatin1String("GroupFooter");
-
-namespace{
-
-LimeReport::BaseDesignIntf* createHeader(QObject* owner, LimeReport::BaseDesignIntf* parent){
- return new LimeReport::GroupBandHeader(owner,parent);
-}
-
-bool VARIABLE_IS_NOT_USED registredHeader = LimeReport::DesignElementsFactory::instance().registerCreator(
- xmlTagHeader,
- LimeReport::ItemAttribs(QObject::tr("GroupHeader"),LimeReport::Const::bandTAG),
- createHeader
- );
-
-LimeReport::BaseDesignIntf * createFooter(QObject* owner, LimeReport::BaseDesignIntf* parent){
- return new LimeReport::GroupBandFooter(owner,parent);
-}
-
-bool VARIABLE_IS_NOT_USED registredFooter = LimeReport::DesignElementsFactory::instance().registerCreator(
- xmlTagFooter,
- LimeReport::ItemAttribs(QObject::tr("GroupFooter"),LimeReport::Const::bandTAG),
- createFooter
- );
-
-}
-
-namespace LimeReport{
-
-GroupBandHeader::GroupBandHeader(QObject *owner, QGraphicsItem *parent)
- : BandDesignIntf(BandDesignIntf::GroupHeader, xmlTagHeader, owner,parent),
- m_groupFiledName(""), m_groupStarted(false), m_resetPageNumber(false),m_sortFieldNameBy(Qt::AscendingOrder)
-{
- setBandTypeText(tr("GroupHeader"));
- setFixedPos(false);
- setMarkerColor(bandColor());
-}
-
-bool GroupBandHeader::isUnique() const
-{
- return false;
-}
-
-//bool GroupBandHeader::tryToKeepTogether()
-//{
-// return m_tryToKeepTogether;
-//}
-
-BaseDesignIntf *GroupBandHeader::createSameTypeItem(QObject *owner, QGraphicsItem *parent)
-{
- return new GroupBandHeader(owner, parent);
-}
-
-void GroupBandHeader::startGroup(DataSourceManager* dataManager)
-{
- m_groupStarted=true;
-
- QString lineVar = QLatin1String("line_")+objectName().toLower();
- dataManager->setReportVariable(lineVar,1);
-
- QString datasourceName = findDataSourceName(parentBand());
- if (dataManager->containsDatasource(datasourceName)){
- IDataSource* ds = dataManager->dataSource(datasourceName);
- if (ds && ds->columnIndexByName(m_groupFiledName)!=-1)
- {
- m_groupFieldValue=ds->data(m_groupFiledName);
-
- }
- }
-
- if (!m_condition.isEmpty()) m_conditionValue = calcCondition(dataManager);
-}
-
-QColor GroupBandHeader::bandColor() const
-{
- return QColor(Qt::darkBlue);
-}
-
-QString GroupBandHeader::findDataSourceName(BandDesignIntf* parentBand){
- if (!parentBand) return "";
- if (!parentBand->datasourceName().isEmpty())
- return parentBand->datasourceName();
- else
- return findDataSourceName(parentBand->parentBand());
-
-}
-
-QString GroupBandHeader::condition() const
-{
- return m_condition;
-}
-
-void GroupBandHeader::setCondition(const QString &condition)
-{
- m_condition = condition;
-}
-
-QString GroupBandHeader::calcCondition(DataSourceManager* dataManager){
- QString result = m_condition;
- if (!m_condition.isEmpty()){
- result=expandUserVariables(result, FirstPass, NoEscapeSymbols, dataManager);
- result=expandScripts(result, dataManager);
- result=expandDataFields(result, NoEscapeSymbols, dataManager);
- }
- return result;
-}
-
-bool GroupBandHeader::isNeedToClose(DataSourceManager* dataManager)
-{
- if (!m_groupStarted) return false;
- if ((m_groupFiledName.isNull() || m_groupFiledName.isEmpty()) && condition().isEmpty()){
- dataManager->putError(tr("Group field not found"));
- return false;
- }
-
- if (!m_condition.isEmpty()){
- return m_conditionValue != calcCondition(dataManager);
- } else {
- QString datasourceName = findDataSourceName(parentBand());
- if (dataManager->containsDatasource(datasourceName)){
- IDataSource* ds = dataManager->dataSource(datasourceName);
-
- if (ds){
- if (ds->data(m_groupFiledName).isNull() && m_groupFieldValue.isNull()) return false;
- if (!ds->data(m_groupFiledName).isValid()) return false;
- return ds->data(m_groupFiledName)!=m_groupFieldValue;
- }
- } else {
- dataManager->putError(tr("Datasource \"%1\" not found!").arg(datasourceName));
- }
- }
-
- return false;
-}
-
-bool GroupBandHeader::isStarted()
-{
- return m_groupStarted;//!m_groupFieldValue.isNull();
-}
-
-void GroupBandHeader::closeGroup()
-{
- m_groupFieldValue=QVariant();
- m_conditionValue="";
- m_groupStarted=false;
-}
-
-int GroupBandHeader::index()
-{
- return bandIndex();
-}
-
-bool GroupBandHeader::startNewPage() const
-{
- return BandDesignIntf::startNewPage();
-}
-
-void GroupBandHeader::setStartNewPage(bool startNewPage)
-{
- BandDesignIntf::setStartNewPage(startNewPage);
-}
-
-bool GroupBandHeader::resetPageNumber() const
-{
- return m_resetPageNumber;
-}
-
-void GroupBandHeader::setResetPageNumber(bool resetPageNumber)
-{
- m_resetPageNumber = resetPageNumber;
-}
-
-GroupBandFooter::GroupBandFooter(QObject *owner, QGraphicsItem *parent)
- :BandDesignIntf(BandDesignIntf::GroupFooter, xmlTagFooter, owner,parent)
-{
- setBandTypeText(tr("GroupFooter"));
- setFixedPos(false);
- setMarkerColor(bandColor());
-}
-
-bool GroupBandFooter::isUnique() const
-{
- return false;
-}
-
-QColor GroupBandFooter::bandColor() const
-{
- return QColor(Qt::darkBlue);
-}
-
-BaseDesignIntf *GroupBandFooter::createSameTypeItem(QObject *owner, QGraphicsItem *parent)
-{
- return new GroupBandFooter(owner,parent);
-}
-
-} //namespace LimeReport
diff --git a/Nouveau dossier/lrgroupbands.h b/Nouveau dossier/lrgroupbands.h
deleted file mode 100644
index 5ab89f3..0000000
--- a/Nouveau dossier/lrgroupbands.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/***************************************************************************
- * 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 . *
- * *
- ** 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 . *
- * *
- * 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 LRGROUPBANDS_H
-#define LRGROUPBANDS_H
-
-#include "lrbanddesignintf.h"
-#include "lrdesignelementsfactory.h"
-#include "qnamespace.h"
-
-namespace LimeReport{
-
-class GroupBandHeader : public BandDesignIntf, public IGroupBand{
- Q_OBJECT
- Q_PROPERTY(QString groupFieldName READ groupFieldName WRITE setGroupFieldName)
- Q_PROPERTY(Qt::SortOrder SortFieldNameBy READ SortFieldNameBy WRITE setSortFieldNameBy)
- Q_PROPERTY(bool splittable READ isSplittable WRITE setSplittable )
- Q_PROPERTY(bool keepGroupTogether READ tryToKeepTogether WRITE setTryToKeepTogether)
- Q_PROPERTY(bool startNewPage READ startNewPage WRITE setStartNewPage)
- Q_PROPERTY(bool resetPageNumber READ resetPageNumber WRITE setResetPageNumber)
- Q_PROPERTY(bool reprintOnEachPage READ reprintOnEachPage WRITE setReprintOnEachPage)
- Q_PROPERTY(QString condition READ condition WRITE setCondition)
-public:
- GroupBandHeader(QObject* owner = 0, QGraphicsItem* parent=0);
- virtual bool isUnique() const;
- QVariant groupFieldValue(){return m_groupFieldValue;}
- void setGroupFieldValue(QVariant value){m_groupFieldValue=value;}
- QString groupFieldName(){return m_groupFiledName;}
- void setGroupFieldName(QString fieldName){m_groupFiledName=fieldName;}
- QColor bandColor() const;
- bool startNewPage() const;
- void setStartNewPage(bool startNewPage);
- bool resetPageNumber() const;
- void setResetPageNumber(bool resetPageNumber);
- bool isHeader() const{return true;}
- bool isGroupHeader() const {return true;}
- QString condition() const;
- void setCondition(const QString &condition);
- Qt::SortOrder SortFieldNameBy(){return m_sortFieldNameBy;};
- void setSortFieldNameBy(Qt::SortOrder sortOrder){m_sortFieldNameBy = sortOrder;}
-private:
- virtual BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0);
- void startGroup(DataSourceManager* dataManager);
- bool isNeedToClose(DataSourceManager *dataManager);
- bool isStarted();
- void closeGroup();
- int index();
- QString findDataSourceName(BandDesignIntf *parentBand);
- QString calcCondition(DataSourceManager *dataManager);
-private:
- QVariant m_groupFieldValue;
- QString m_groupFiledName;
- bool m_groupStarted;
- //bool m_startNewPage;
- bool m_resetPageNumber;
- QString m_condition;
- QString m_conditionValue;
- Qt::SortOrder m_sortFieldNameBy = Qt::AscendingOrder;
-};
-
-class GroupBandFooter : public BandDesignIntf{
- Q_OBJECT
-public:
- GroupBandFooter(QObject* owner = 0, QGraphicsItem* parent=0);
- virtual bool isUnique() const;
- QColor bandColor() const;
- virtual bool isFooter() const{return true;}
-private:
- virtual BaseDesignIntf* createSameTypeItem(QObject* owner=0, QGraphicsItem* parent=0);
-};
-
-} // namespace LimeReport
-#endif // LRGROUPBANDS_H
diff --git a/Nouveau dossier/lrreportrender.cpp b/Nouveau dossier/lrreportrender.cpp
deleted file mode 100644
index b7ef936..0000000
--- a/Nouveau dossier/lrreportrender.cpp
+++ /dev/null
@@ -1,1808 +0,0 @@
-/***************************************************************************
- * 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 . *
- * *
- ** 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 . *
- * *
- * 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
-#include
-
-#include "lrglobal.h"
-#include "lrreportrender.h"
-#include "lrgroupbands.h"
-#include "lrpagedesignintf.h"
-#include "lrbanddesignintf.h"
-#include "lritemdesignintf.h"
-#include "lrscriptenginemanager.h"
-
-#include "serializators/lrxmlreader.h"
-#include "serializators/lrxmlwriter.h"
-
-namespace LimeReport{
-
-void ReportRender::initColumns(){
- m_maxHeightByColumn.clear();
- m_currentStartDataPos.clear();
- m_maxHeightByColumn.append(0);
- m_currentStartDataPos.append(0);
- m_currentColumn = 0;
-}
-
-bool ReportRender::isNeedToRearrangeColumnsItems()
-{
- if (m_columnedBandItems.size()<=1) return false;
- if (m_columnedBandItems[0]->columnsFillDirection()!=BandDesignIntf::VerticalUniform)
- return false;
-
- int avg = m_columnedBandItems.size()/m_columnedBandItems[0]->columnsCount();
-
- for (int i=0;imaxHeight){
- maxHeight = m_maxHeightByColumn[i];
- maxHeightColumn = i;
- }
- if (maxHeightColumn>0 && columnItemsCount(maxHeightColumn) lastColumnItem(maxHeightColumn-1)->height()
- ){
- return true;
- }
- }
- return false;
-}
-
-BandDesignIntf *ReportRender::lastColumnItem(int columnIndex)
-{
- if (columnIndex<0) return 0;
- for(int i=0;icolumnIndex()>columnIndex)
- return m_columnedBandItems[i-1];
- }
- return m_columnedBandItems.last();
-}
-
-void ReportRender::rearrangeColumnsItems()
-{
- if (isNeedToRearrangeColumnsItems()){
- qreal startHeight = columnHeigth(0);
- int avg = m_columnedBandItems.size() / m_columnedBandItems[0]->columnsCount();
- for (int i = 1; i < m_columnedBandItems[0]->columnsCount(); ++i){
- if (columnItemsCount(i) < avg){
- int getCount = avg * (m_columnedBandItems[0]->columnsCount()-i) - columnItemsCount(i);
- for (int j = 0; j < getCount; ++j){
- BandDesignIntf* band = lastColumnItem(i-1);
- band->setPos(band->pos().x()-30,m_columnedBandItems[0]->pos().y());
- band->setColumnIndex(i);
- }
-
- }
- }
- m_renderPageItem->relocateBands();
- m_maxHeightByColumn[0]+=startHeight-maxColumnHeight();
- m_currentStartDataPos[0]-=startHeight-maxColumnHeight();
- m_columnedBandItems.clear();
- }
-}
-
-int ReportRender::columnItemsCount(int columnIndex)
-{
- int result = 0;
- foreach(BandDesignIntf* band, m_columnedBandItems){
- if (band->columnIndex()==columnIndex)
- ++result;
- if (band->columnIndex()>columnIndex) break;
- }
- return result;
-}
-
-qreal ReportRender::columnHeigth(int columnIndex)
-{
- qreal result = 0;
- for(int i=0;icolumnIndex()==columnIndex)
- result += m_columnedBandItems[i]->height();
- if (m_columnedBandItems[i]->columnIndex()>columnIndex) break;
- }
- return result;
-}
-
-qreal ReportRender::maxColumnHeight()
-{
- qreal result = 0;
- for (int i=0;icolumnsCount();++i){
- qreal curColumnHeight = columnHeigth(i);
- if (curColumnHeight>result) result = curColumnHeight;
- }
- return result;
-}
-
-void ReportRender::renameChildItems(BaseDesignIntf *item){
- foreach(BaseDesignIntf* child, item->childBaseItems()){
- if (!child->childBaseItems().isEmpty()) renameChildItems(child);
- child->setObjectName(child->metaObject()->className()+QString::number(++m_currentNameIndex));
- }
-}
-
-ReportRender::ReportRender(QObject *parent)
- :QObject(parent), m_renderPageItem(0), m_pageCount(0),
- m_lastRenderedHeader(0), m_lastDataBand(0), m_lastRenderedFooter(0),
- m_lastRenderedBand(0), m_currentColumn(0), m_newPageStarted(false),
- m_lostHeadersMoved(false)
-{
- initColumns();
-}
-
-void ReportRender::setDatasources(DataSourceManager *value)
-{
- m_datasources=value;
- initVariables();
- resetPageNumber(BandReset);
-}
-
-void ReportRender::setScriptContext(ScriptEngineContext* scriptContext)
-{
- m_scriptEngineContext=scriptContext;
-}
-
-void ReportRender::initDatasources(){
- try{
- datasources()->setAllDatasourcesToFirst();
- } catch(ReportError &exception){
- //TODO possible should thow exeption
- QMessageBox::critical(0,tr("Error"),exception.what());
- return;
- }
-}
-
-void ReportRender::initDatasource(const QString& name){
- try{
- if (datasources()->containsDatasource(name)){
- if(m_dataSourceSorted)return;
- IDataSource* ds = datasources()->dataSource(name);
- if (ds)
- ds->first();
- }
- } catch(ReportError &exception){
- QMessageBox::critical(0,tr("Error"),exception.what());
- return;
- }
-}
-
-void ReportRender::analizeItem(ContentItemDesignIntf* contentItem, BandDesignIntf* band){
- Q_UNUSED(band)
- if (contentItem){
- QString content = contentItem->content();
- QVector functions;
- foreach(const QString &functionName, m_datasources->groupFunctionNames()){
-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 1)
- QRegularExpression rx = getGroupFunctionRegEx(functionName);
- if(content.indexOf(rx)>=0){
- functions.append(functionName);
- }
-#else
- QRegExp rx(QString(Const::GROUP_FUNCTION_RX).arg(functionName));
- rx.setMinimal(true);
- if (rx.indexIn(content)>=0){
- functions.append(functionName);
- }
-#endif
- }
- if (functions.size()>0)
- m_groupfunctionItems.insert(contentItem->patternName(), functions);
- }
-}
-
-void ReportRender::analizeContainer(BaseDesignIntf* item, BandDesignIntf* band){
- if (item){
- foreach(BaseDesignIntf* child, item->childBaseItems()){
- ContentItemDesignIntf* contentItem = dynamic_cast(child);
- if (contentItem) analizeItem(contentItem, band);
- else analizeContainer(child, band);
- }
- }
-}
-
-void ReportRender::analizePage(PageItemDesignIntf* patternPage){
- m_groupfunctionItems.clear();
- foreach(BandDesignIntf* band, patternPage->bands()){
- if (band->isFooter() || band->isHeader()){
- analizeContainer(band,band);
- }
- }
-}
-
-void ReportRender::renderPage(PageItemDesignIntf* patternPage, bool isTOC, bool /*isFirst*/, bool /*resetPageNumbers*/)
-{
- m_currentNameIndex = 0;
- m_patternPageItem = patternPage;
-
- analizePage(patternPage);
-
- if (m_patternPageItem->resetPageNumber() && m_pageCount>0 && !isTOC) {
- resetPageNumber(PageReset);
- }
-
- if (m_patternPageItem->resetPageNumber() && !isTOC && m_pageCount == 0){
- m_pagesRanges.startNewRange();
- }
-
- m_renderCanceled = false;
- BandDesignIntf* reportFooter = m_patternPageItem->bandByType(BandDesignIntf::ReportFooter);
- m_reportFooterHeight = 0;
- if (reportFooter)
- m_reportFooterHeight = reportFooter->height();
-
- initGroups();
- clearPageMap();
-
- try{
-
- datasources()->setAllDatasourcesToFirst();
- datasources()->clearGroupFuntionsExpressions();
-
- } catch(ReportError &exception){
- //TODO possible should thow exeption
- QMessageBox::critical(0,tr("Error"),exception.what());
- return;
- }
-
- clearPageMap();
- startNewPage(true);
-
- renderReportHeader(m_patternPageItem, AfterPageHeader);
- m_dataSourceSorted = false;
- BandDesignIntf* lastRenderedBand = 0;
- for (int i=0;idataBandCount() && !m_renderCanceled; i++){
-
- lastRenderedBand = m_patternPageItem->dataBandAt(i);
- initDatasource(lastRenderedBand->datasourceName());
- renderDataBand(lastRenderedBand);
- if (i < m_patternPageItem->dataBandCount()-1) closeFooterGroup(lastRenderedBand);
- }
-
- if (reportFooter)
- renderBand(reportFooter, 0, StartNewPageAsNeeded);
- if (lastRenderedBand && lastRenderedBand->keepFooterTogether())
- closeFooterGroup(lastRenderedBand);
-
- BandDesignIntf* tearOffBand = m_patternPageItem->bandByType(BandDesignIntf::TearOffBand);
- if (tearOffBand)
- renderBand(tearOffBand, 0, StartNewPageAsNeeded);
-
- savePage(true);
-
-}
-
-int ReportRender::pageCount()
-{
- return m_renderedPages.count();
-}
-
-PageItemDesignIntf::Ptr ReportRender::pageAt(int index)
-{
- if ((index>m_renderedPages.count()-1)||(index<0)) throw ReportError(tr("page index out of range"));
- else return m_renderedPages.at(index);
-}
-
-QString ReportRender::renderPageToString(PageItemDesignIntf *patternPage)
-{
- renderPage(patternPage);
- return toString();
-}
-
-ReportPages ReportRender::renderPageToPages(PageItemDesignIntf *patternPage)
-{
- renderPage(patternPage);
- return m_renderedPages;
-}
-
-ReportPages ReportRender::renderTOC(PageItemDesignIntf* patternPage, bool first, bool resetPages){
- renderPage(patternPage, true, first, resetPages);
- return m_renderedPages;
-}
-
-void ReportRender::initRenderPage()
-{
- if (!m_renderPageItem) {
- m_renderPageItem = new PageItemDesignIntf(m_patternPageItem->pageSize(), m_patternPageItem->pageRect());
- m_renderPageItem->initFromItem(m_patternPageItem);
- m_renderPageItem->setItemMode(PreviewMode);
- m_renderPageItem->setPatternName(m_patternPageItem->objectName());
- m_renderPageItem->setPatternItem(m_patternPageItem);
-
- ScriptValueType svCurrentPage;
- ScriptEngineType* se = ScriptEngineManager::instance().scriptEngine();
-
-#ifdef USE_QJSENGINE
- svCurrentPage = getJSValue(*se, m_renderPageItem);
- se->globalObject().setProperty("currentPage", svCurrentPage);
-#else
- svCurrentPage = se->globalObject().property("currentPage");
- if (svCurrentPage.isValid()){
- se->newQObject(svCurrentPage, m_renderPageItem);
- } else {
- svCurrentPage = se->newQObject(m_renderPageItem);
- se->globalObject().setProperty("currentPage", svCurrentPage);
- }
-#endif
-
-
- }
-}
-
-void ReportRender::initVariables()
-{
- m_datasources->setReportVariable("#PAGE",1);
- m_datasources->setReportVariable("#PAGE_COUNT",0);
- m_datasources->setReportVariable("#IS_LAST_PAGEFOOTER",false);
- m_datasources->setReportVariable("#IS_FIRST_PAGEFOOTER",false);
-}
-
-void ReportRender::clearPageMap()
-{
- m_renderedPages.clear();
-}
-
-
-bool checkContentItem(ContentItemDesignIntf* item, DataSourceManager* datasources){
- QString content = item->content();
- foreach(QString functionName, datasources->groupFunctionNames()){
-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 1)
- QRegularExpression rx = getGroupFunctionRegEx(functionName);
- if(content.indexOf(rx)>=0){
- return true;
- }
-#else
- QRegExp rx(QString(Const::GROUP_FUNCTION_RX).arg(functionName));
- if (rx.indexIn(content)>=0){
- return true;
- }
-#endif
- }
- return false;
-}
-
-bool ReportRender::containsGroupFunctions(BaseDesignIntf *container){
- if (container){
- foreach (BaseDesignIntf* item, container->childBaseItems()) {
- ContentItemDesignIntf* contentItem = dynamic_cast(item);
- if (contentItem){
- if (checkContentItem(contentItem, m_datasources)) return true;
- } else {
- if (containsGroupFunctions(item)) return true;
- }
- }
- }
- return false;
-}
-
-void ReportRender::extractGroupFuntionsFromItem(ContentItemDesignIntf* contentItem, BandDesignIntf* band){
-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 1)
- if ( contentItem && contentItem->content().contains(getScriptRegEx())){
- foreach(const QString &functionName, m_datasources->groupFunctionNames()){
-
- QRegularExpression rx = getGroupFunctionRegEx(functionName);
- QRegularExpression rxName = getGroupFunctionNameRegEx(functionName);
- QRegularExpressionMatch match = rx.match(contentItem->content());
-
- if (match.hasMatch()){
-
- QRegularExpressionMatchIterator iter = rx.globalMatch(contentItem->content());
- while(iter.hasNext()){
- match = iter.next();
- QVector captures = normalizeCaptures(match);
- if (captures.size() >= 3){
- int dsIndex = captures.size() == 3 ? Const::DATASOURCE_INDEX - 1 : Const::DATASOURCE_INDEX;
- BandDesignIntf* dataBand = m_patternPageItem->bandByName(captures.at(dsIndex));
- if (dataBand){
- GroupFunction* gf = datasources()->addGroupFunction(
- functionName, captures.at(Const::VALUE_INDEX), band->objectName(), dataBand->objectName()
- );
- if (gf){
- connect(dataBand, SIGNAL(bandRendered(BandDesignIntf*)),
- gf, SLOT(slotBandRendered(BandDesignIntf*)));
- connect(dataBand, SIGNAL(bandReRendered(BandDesignIntf*, BandDesignIntf*)),
- gf, SLOT(slotBandReRendered(BandDesignIntf*, BandDesignIntf*)));
- }
- } else {
- GroupFunction* gf = datasources()->addGroupFunction(
- functionName, captures.at(Const::VALUE_INDEX), band->objectName(), captures.at(dsIndex)
- );
- gf->setInvalid(tr("Databand \"%1\" not found").arg(captures.at(dsIndex)));
- }
- }
- }
-
- } else if (contentItem->content().indexOf(rxName)>=0){
- match = rxName.match(contentItem->content());
- GroupFunction* gf = datasources()->addGroupFunction(functionName, match.captured(1), band->objectName(), "");
- gf->setInvalid(tr("Wrong using function %1").arg(functionName));
- }
- }
- }
-
-#else
- if ( contentItem && contentItem->content().contains(QRegExp("\\$S\\s*\\{.*\\}"))){
- foreach(const QString &functionName, m_datasources->groupFunctionNames()){
- QRegExp rx(QString(Const::GROUP_FUNCTION_RX).arg(functionName));
- rx.setMinimal(true);
- QRegExp rxName(QString(Const::GROUP_FUNCTION_NAME_RX).arg(functionName));
- rxName.setMinimal(true);
- if (rx.indexIn(contentItem->content())>=0){
- int pos = 0;
- while ( (pos = rx.indexIn(contentItem->content(),pos)) != -1){
- QVector captures = normalizeCaptures(rx);
- if (captures.size()>=3){
- int dsIndex = captures.size() == 3 ? Const::DATASOURCE_INDEX - 1 : Const::DATASOURCE_INDEX;
- BandDesignIntf* dataBand = m_patternPageItem->bandByName(captures.at(dsIndex));
- if (dataBand){
- GroupFunction* gf = datasources()->addGroupFunction(functionName,captures.at(Const::VALUE_INDEX),band->objectName(),dataBand->objectName());
- if (gf){
- connect(dataBand, SIGNAL(bandRendered(BandDesignIntf*)),
- gf, SLOT(slotBandRendered(BandDesignIntf*)));
- connect(dataBand, SIGNAL(bandReRendered(BandDesignIntf*, BandDesignIntf*)),
- gf, SLOT(slotBandReRendered(BandDesignIntf*, BandDesignIntf*)));
- }
- } else {
- GroupFunction* gf = datasources()->addGroupFunction(functionName,captures.at(Const::VALUE_INDEX),band->objectName(),captures.at(dsIndex));
- gf->setInvalid(tr("Databand \"%1\" not found").arg(captures.at(dsIndex)));
- }
- }
- pos += rx.matchedLength();
- }
- } else if (rxName.indexIn(contentItem->content())>=0){
- GroupFunction* gf = datasources()->addGroupFunction(functionName,rxName.cap(1),band->objectName(),"");
- gf->setInvalid(tr("Wrong using function %1").arg(functionName));
- }
- }
- }
-#endif
-}
-
-void ReportRender::extractGroupFunctionsFromContainer(BaseDesignIntf* baseItem, BandDesignIntf* band){
- if (baseItem){
- foreach (BaseDesignIntf* item, baseItem->childBaseItems()) {
- ContentItemDesignIntf* contentItem = dynamic_cast(item);
- if (contentItem) extractGroupFuntionsFromItem(contentItem, band);
- else extractGroupFunctionsFromContainer(item, band);
- }
- }
-}
-
-void ReportRender::extractGroupFunctions(BandDesignIntf *band)
-{
- extractGroupFunctionsFromContainer(band, band);
-}
-
-void ReportRender::replaceGroupFunctionsInItem(ContentItemDesignIntf* contentItem, BandDesignIntf* band){
- if (contentItem){
- if (m_groupfunctionItems.contains(contentItem->patternName())){
- QString content = contentItem->content();
- foreach(QString functionName, m_groupfunctionItems.value(contentItem->patternName())){
-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 1)
- QRegularExpression rx = getGroupFunctionRegEx(functionName);
- QRegularExpressionMatch match = rx.match(content);
-
- if (match.capturedStart() != -1){
- int pos = 0;
- while ( (pos = match.capturedStart()) != -1 ){
- QVector captures = normalizeCaptures(match);
- if (captures.size() >= 3){
- QString expressionIndex = datasources()->putGroupFunctionsExpressions(captures.at(Const::VALUE_INDEX));
- if (captures.size()<5){
- content.replace(captures.at(0), QString("%1(%2,%3)")
- .arg(functionName).arg('"'+expressionIndex+'"').arg('"'+band->objectName()+'"'));
- } else {
- content.replace(captures.at(0), QString("%1(%2,%3,%4)").arg(
- functionName,
- '"'+expressionIndex+'"',
- '"'+band->objectName()+'"',
- captures.at(4)
- ));
- }
- }
- match = rx.match(content, pos + match.capturedLength());
- }
- }
-#else
- QRegExp rx(QString(Const::GROUP_FUNCTION_RX).arg(functionName));
- rx.setMinimal(true);
- if (rx.indexIn(content)>=0){
- int pos = 0;
- while ( (pos = rx.indexIn(content,pos))!= -1 ){
- QVector captures = normalizeCaptures(rx);
- if (captures.size() >= 3){
- QString expressionIndex = datasources()->putGroupFunctionsExpressions(captures.at(Const::VALUE_INDEX));
- if (captures.size()<5){
- content.replace(captures.at(0),QString("%1(%2,%3)").arg(functionName).arg('"'+expressionIndex+'"').arg('"'+band->objectName()+'"'));
- } else {
- content.replace(captures.at(0),QString("%1(%2,%3,%4)").arg(
- functionName,
- '"'+expressionIndex+'"',
- '"'+band->objectName()+'"',
- captures.at(4)
- ));
- }
- }
- pos += rx.matchedLength();
- }
- }
-
-#endif
- }
- contentItem->setContent(content);
- }
- }
-}
-
-void ReportRender::replaceGroupFunctionsInContainer(BaseDesignIntf* baseItem, BandDesignIntf* band)
-{
- if (baseItem){
- foreach(BaseDesignIntf* item, baseItem->childBaseItems()){
- ContentItemDesignIntf* contentItem = dynamic_cast(item);
- if (contentItem) replaceGroupFunctionsInItem(contentItem, band);
- else replaceGroupFunctionsInContainer(item, band);
- }
- }
-}
-
-void ReportRender::replaceGroupsFunction(BandDesignIntf *band)
-{
- replaceGroupFunctionsInContainer(band, band);
-}
-
-QColor ReportRender::makeBackgroundColor(BandDesignIntf* band){
- if (band->useAlternateBackgroundColor()){
- return datasources()->variable(QLatin1String("line_") + band->objectName().toLower()).toInt() %2 == 0 ?
- band->backgroundColor() :
- band->alternateBackgroundColor();
- }
- return band->backgroundColor();
-}
-
-BandDesignIntf* ReportRender::renderBand(BandDesignIntf *patternBand, BandDesignIntf* bandData, ReportRender::DataRenderMode mode, bool isLast)
-{
- QCoreApplication::processEvents();
- bool bandIsSliced = false;
- if (patternBand){
-
- if (patternBand->isHeader())
- m_lastRenderedHeader = patternBand;
-
- BandDesignIntf* bandClone = 0;
-
- if (bandData){
- bandClone = bandData;
- } else {
- bandClone = renderData(patternBand);
- }
-
- if (isLast) bandClone->setBottomSpace(1);
-
- if (mode == ForcedStartPage){
- savePage();
- startNewPage();
- }
-
- if (patternBand->isFooter())
- m_lastRenderedFooter = patternBand;
-
- bandClone->setBackgroundColor(makeBackgroundColor(patternBand));
- patternBand->emitBandRendered(bandClone);
- m_scriptEngineContext->setCurrentBand(bandClone);
-
- if ( isLast && bandClone->keepFooterTogether() && bandClone->sliceLastRow() ){
- if (m_maxHeightByColumn[m_currentColumn] < (bandClone->height()+m_reportFooterHeight))
- m_maxHeightByColumn[m_currentColumn] -= ((m_maxHeightByColumn[m_currentColumn]-bandClone->height())+(bandClone->height()*calcSlicePercent(bandClone->height())));
- }
-
- if (!bandClone->isEmpty() || patternBand->printIfEmpty()){
- if (!registerBand(bandClone)){
- if (patternBand && patternBand->isHeader() && patternBand->reprintOnEachPage())
- m_reprintableBands.removeOne(patternBand);
- if (bandClone->canBeSplitted(m_maxHeightByColumn[m_currentColumn])){
- bandClone = sliceBand(bandClone, patternBand, isLast);
- bandIsSliced = true;
- } else {
- qreal percent = (bandClone->height()-m_maxHeightByColumn[m_currentColumn])/(bandClone->height()/100);
- if (bandClone->maxScalePercent()>=percent){
- if (percentmaxScalePercent()){
- percent += 2;
- bandClone->setScale((100-percent)/100);
- BandDesignIntf* upperPart = dynamic_cast(bandClone->cloneUpperPart(m_maxHeightByColumn[m_currentColumn]));
- registerBand(upperPart);
- delete bandClone;
- bandClone = NULL;
- }
- } else {
-
- if (mode==StartNewPageAsNeeded){
- if (bandClone->columnsCount()>1 &&
- (bandClone->columnsFillDirection()==BandDesignIntf::Vertical ||
- bandClone->columnsFillDirection()==BandDesignIntf::VerticalUniform))
- {
- startNewColumn();
- if (patternBand->bandHeader() &&
- patternBand->bandHeader()->columnsCount()>1 &&
- !m_lostHeadersMoved &&
- patternBand->bandNestingLevel() == 0
- ){
- renderBand(patternBand->bandHeader(), 0, mode);
- }
- } else {
- savePage();
- startNewPage();
- if (!bandIsSliced){
- BandDesignIntf* t = renderData(patternBand, false);
- t->copyBandAttributes(bandClone);
- patternBand->emitBandReRendered(bandClone, t);
- delete bandClone;
- bandClone = t;
- }
- }
- if (!registerBand(bandClone)) {
- BandDesignIntf* upperPart = dynamic_cast(bandClone->cloneUpperPart(m_maxHeightByColumn[m_currentColumn]));
- registerBand(upperPart);
- patternBand->emitBandReRendered(bandClone, upperPart);
- delete bandClone;
- bandClone = NULL;
- };
- } else {
- bandClone->setHeight(m_maxHeightByColumn[m_currentColumn]);
- registerBand(bandClone);
- }
- }
- }
- }
- } else {
- delete bandClone;
- return 0;
- }
-
- if (patternBand->isFooter()){
- datasources()->clearGroupFunctionValues(patternBand->objectName());
- }
-
- emit(patternBand->afterRender());
- return bandClone;
- }
- return 0;
-}
-
-void ReportRender::renderDataBand(BandDesignIntf *dataBand)
-{
- if (dataBand == NULL )
- return;
-
- IDataSource* bandDatasource = 0;
- m_lastRenderedFooter = 0;
- if (!dataBand->datasourceName().isEmpty())
- bandDatasource = datasources()->dataSource(dataBand->datasourceName());
-
- BandDesignIntf* header = dataBand->bandHeader();
- BandDesignIntf* footer = dataBand->bandFooter();
-
- if (header && header->printAlways()) renderDataHeader(header);
-
- if(bandDatasource && !bandDatasource->eof() && !m_renderCanceled){
-
- QString varName = QLatin1String("line_")+dataBand->objectName().toLower();
- datasources()->setReportVariable(varName,1);
-
- if (header && header->reprintOnEachPage())
- m_reprintableBands.append(dataBand->bandHeader());
-
- if (header && !header->printAlways())
- renderDataHeader(header);
-
- renderGroupHeader(dataBand, bandDatasource, true);
-
- bool firstTime = true;
-
-
- while(!bandDatasource->eof() && !m_renderCanceled){
-
- datasources()->updateChildrenData(dataBand->datasourceName());
-
- BandDesignIntf* rawData = renderData(dataBand);
-
- if (!rawData->isEmpty() || dataBand->printIfEmpty()){
-
- if ((firstTime && dataBand->startFromNewPage()) ||
- (!firstTime && dataBand->startNewPage())) {
- savePage();
- startNewPage();
- }
-
- if (dataBand->tryToKeepTogether()) openDataGroup(dataBand);
-
- if (dataBand->keepFooterTogether() && !bandDatasource->hasNext())
- openFooterGroup(dataBand);
-
- m_lastDataBand = dataBand;
-
- if (header && !firstTime && header->repeatOnEachRow())
- renderBand(header, 0, StartNewPageAsNeeded);
-
- renderBand(dataBand, rawData, StartNewPageAsNeeded, !bandDatasource->hasNext());
- m_newPageStarted = false;
- renderChildBands(dataBand);
-
- }
-
- bandDatasource->next();
-
- datasources()->setReportVariable(varName,datasources()->variable(varName).toInt()+1);
-
- QList bandList;
- QList childList;
-
- bandList = dataBand->childrenByType(BandDesignIntf::GroupHeader);
- while (bandList.size() > 0)
- {
- childList.clear();
- foreach (BandDesignIntf* band, bandList)
- {
- childList.append(band->childrenByType(BandDesignIntf::GroupHeader));
-
- QString groupLineVar = QLatin1String("line_")+band->objectName().toLower();
- if (datasources()->containsVariable(groupLineVar))
- datasources()->setReportVariable(groupLineVar,datasources()->variable(groupLineVar).toInt()+1);
- }
- bandList = childList;
- }
-
- renderGroupHeader(dataBand, bandDatasource, false);
- if (dataBand->tryToKeepTogether()) closeDataGroup(dataBand);
- firstTime = false;
- }
-
- if (!dataBand->keepFooterTogether())
- m_reprintableBands.removeOne(header);
- if (header) recalcIfNeeded(header);
-
- bool didGoBack = !bandDatasource->eof() && bandDatasource->prior();
- renderGroupFooterByHeader(dataBand);
- if (didGoBack){
- bandDatasource->next();
- }
-
- if (footer && !footer->printAlways()){
- renderBand(footer, 0, StartNewPageAsNeeded);
- if (dataBand->keepFooterTogether())
- m_reprintableBands.removeOne(dataBand);
- }
-
- datasources()->deleteVariable(varName);
-
- } else if (bandDatasource==0) {
- renderBand(dataBand, 0, StartNewPageAsNeeded);
- }
-
- if (footer && footer->printAlways()){
- renderBand(footer, 0, StartNewPageAsNeeded);
- if (dataBand->keepFooterTogether())
- m_reprintableBands.removeOne(dataBand);
- }
-}
-
-void ReportRender::renderPageHeader(PageItemDesignIntf *patternPage)
-{
- BandDesignIntf* band = patternPage->bandByType(BandDesignIntf::PageHeader);
- if (band){
- if (m_datasources->variable("#PAGE").toInt()!=1 ||
- band->property("printOnFirstPage").toBool()
- )
- renderBand(band, 0);
- }
-}
-
-void ReportRender::renderReportHeader(PageItemDesignIntf *patternPage, PageRenderStage stage)
-{
- BandDesignIntf* band = patternPage->bandByType(BandDesignIntf::ReportHeader);
- BandDesignIntf* resBand = 0;
- if (band){
- if (band->property("printBeforePageHeader").toBool() && stage == BeforePageHeader )
- resBand = renderBand(band, 0, StartNewPageAsNeeded);
- if (!band->property("printBeforePageHeader").toBool() && stage == AfterPageHeader )
- resBand = renderBand(band, 0, StartNewPageAsNeeded);
- if (resBand && containsGroupFunctions(band)) m_recalcBands.append(resBand);
- }
-}
-
-void ReportRender::renderPageFooter(PageItemDesignIntf *patternPage)
-{
- BandDesignIntf* band = patternPage->bandByType(BandDesignIntf::PageFooter);
- if (band){
- BandDesignIntf* bandClone = dynamic_cast(band->cloneItem(PreviewMode, m_renderPageItem, m_renderPageItem));
- replaceGroupsFunction(bandClone);
- bandClone->updateItemSize(m_datasources);
- bandClone->setItemPos(m_renderPageItem->pageRect().x(),m_renderPageItem->pageRect().bottom()-bandClone->height());
- bandClone->setHeight(m_pageFooterHeight);
- for(int i=0;isetPageFooter(bandClone);
- registerBand(bandClone);
- datasources()->clearGroupFunctionValues(band->objectName());
- }
-}
-
-void ReportRender::renderPageItems(PageItemDesignIntf* patternPage)
-{
- QList pageItems;
- foreach (BaseDesignIntf* item, patternPage->childBaseItems()) {
- ItemDesignIntf* id = dynamic_cast(item);
- if (id&&id->itemLocation()==ItemDesignIntf::Page){
- BaseDesignIntf* cloneItem = item->cloneItem(m_renderPageItem->itemMode(),
- m_renderPageItem,
- m_renderPageItem);
- pageItems.append(cloneItem);
- }
- }
- m_renderPageItem->restoreLinks();
- m_renderPageItem->updateSubItemsSize(FirstPass,m_datasources);
- foreach(BaseDesignIntf* item, pageItems){
- if (!item->isWatermark())
- item->setZValue(item->zValue()-100000);
- else
- item->setZValue(item->zValue()+100000);
- }
-}
-
-qreal ReportRender::calcPageFooterHeight(PageItemDesignIntf *patternPage)
-{
- BandDesignIntf* band = patternPage->bandByType(BandDesignIntf::PageFooter);
- if (band){
- if (m_datasources->variable("#PAGE")!=1)
- return band->height();
- else if (band->property("printOnFirstPage").toBool())
- return band->height();
- }
- return 0;
-}
-
-void ReportRender::renderChildHeader(BandDesignIntf *parent, BandPrintMode printMode)
-{
- foreach(BandDesignIntf* band,parent->childrenByType(BandDesignIntf::SubDetailHeader)){
- bool printAlways=false;
- if (band->metaObject()->indexOfProperty("printAlways")>0){
- printAlways=band->property("printAlways").toBool();
- }
- if (printAlways == (printMode == PrintAlwaysPrintable))
- renderBand(band, 0, StartNewPageAsNeeded);
- }
-}
-
-void ReportRender::renderChildFooter(BandDesignIntf *parent, BandPrintMode printMode)
-{
- foreach(BandDesignIntf* band,parent->childrenByType(BandDesignIntf::SubDetailFooter)){
- bool printAlways=false;
- if (band->metaObject()->indexOfProperty("printAlways")>0){
- printAlways=band->property("printAlways").toBool();
- }
-
- if ( (band != m_lastRenderedFooter) && (printAlways == (printMode == PrintAlwaysPrintable)) )
- renderBand(band, 0, StartNewPageAsNeeded);
- }
-}
-
-void ReportRender::renderChildBands(BandDesignIntf *parentBand)
-{
- foreach(BandDesignIntf* band,parentBand->childrenByType(BandDesignIntf::SubDetailBand)){
- IDataSource* ds = 0;
- if (!band->datasourceName().isEmpty())
- ds = m_datasources->dataSource(band->datasourceName());
- if (ds) ds->first();
- renderDataBand(band);
- closeFooterGroup(band);
- }
-}
-
-BandDesignIntf* ReportRender::findRecalcableBand(BandDesignIntf* patternBand){
-
- QList::iterator it = m_recalcBands.begin();
- for (;it !=m_recalcBands.end() ;++it){
- if ((*it)->patternItem() == patternBand){
- BandDesignIntf* result = (*it);
- m_recalcBands.erase(it);
- return result;
- }
- }
- return 0;
-}
-
-void restoreItemsWithGroupFunctions(BaseDesignIntf* container, DataSourceManager* datasources){
- foreach(BaseDesignIntf* bi, container->childBaseItems()){
- ContentItemDesignIntf* pci = dynamic_cast(bi->patternItem());
- if (pci && checkContentItem(pci, datasources)){
- ContentItemDesignIntf* ci = dynamic_cast(bi);
- ci->setContent(pci->content());
- } else restoreItemsWithGroupFunctions(bi, datasources);
- }
-}
-
-void ReportRender::recalcIfNeeded(BandDesignIntf* band){
- BandDesignIntf* recalcBand = findRecalcableBand(band);
- if (recalcBand){
- QString bandName = recalcBand->objectName();
- restoreItemsWithGroupFunctions(recalcBand, m_datasources);
- recalcBand->setObjectName(recalcBand->patternItem()->objectName());
- replaceGroupsFunction(recalcBand);
- recalcBand->updateItemSize(datasources());
- recalcBand->setObjectName(bandName);
- datasources()->clearGroupFunctionValues(recalcBand->patternItem()->objectName());
- }
-}
-
-void ReportRender::renderDataHeader(BandDesignIntf *header)
-{
- recalcIfNeeded(header);
- BandDesignIntf* renderedHeader = renderBand(header, 0, StartNewPageAsNeeded);
- if (containsGroupFunctions(header))
- m_recalcBands.append(renderedHeader);
-}
-
-void ReportRender::renderGroupHeader(BandDesignIntf *parentBand, IDataSource* dataSource, bool firstTime)
-{
- GroupBandHeader *group = dynamic_cast(parentBand);
- if(dataSource->model() && group && !group->groupFieldName().isEmpty() && !m_dataSourceSorted)
- {
-
- MasterDetailProxyModel *proxyModel = static_cast(dataSource->model());
-
- if(proxyModel)
- {
- //proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
-
- proxyModel->sort(dataSource->columnIndexByName(group->groupFieldName()),group->SortFieldNameBy());
- m_dataSourceSorted = true;
- }
- }
-
- foreach(BandDesignIntf* band,parentBand->childrenByType(BandDesignIntf::GroupHeader)){
- IGroupBand* gb = dynamic_cast(band);
- if (gb&&gb->isNeedToClose(datasources())){
- if (band->childBands().count()>0){
- bool didGoBack = !dataSource->eof() && dataSource->prior();
- renderGroupFooterByHeader(band);
- if (didGoBack){
- dataSource->next();
- }
- }
- closeDataGroup(band);
- }
-
- if (gb && !gb->isStarted()){
- if (band->reprintOnEachPage()){
- m_reprintableBands.append(band);
- }
- gb->startGroup(m_datasources);
- openDataGroup(band);
- BandDesignIntf* renderedHeader = 0;
- if (!firstTime && gb->startNewPage() && !m_newPageStarted){
- if (gb->resetPageNumber()) resetPageNumber(BandReset);
- if (band->reprintOnEachPage()){
- savePage();
- startNewPage();
- } else {
- renderedHeader = renderBand(band, 0, ForcedStartPage);
- }
- } else {
- renderedHeader = renderBand(band, 0, StartNewPageAsNeeded);
- }
- if (containsGroupFunctions(band))
- m_recalcBands.append(renderedHeader);
- }
-
- renderGroupHeader(band, dataSource, firstTime);
- }
-}
-
-void ReportRender::renderGroupFooterByHeader(BandDesignIntf* groupHeader){
- if (groupHeader->reprintOnEachPage()) m_reprintableBands.removeOne(groupHeader);
- foreach (BandDesignIntf* header, groupHeader->childrenByType(BandDesignIntf::GroupHeader)){
- renderGroupFooterByHeader(header);
- }
- foreach (BandDesignIntf* footer, groupHeader->childrenByType(BandDesignIntf::GroupFooter)){
- renderBand(footer, 0, StartNewPageAsNeeded);
- }
- closeDataGroup(groupHeader);
-}
-
-void ReportRender::renderGroupFooter(BandDesignIntf *parentBand)
-{
- foreach(BandDesignIntf* band,parentBand->childrenByType(BandDesignIntf::GroupHeader)){
- IGroupBand* gb = dynamic_cast(band);
- if (gb && gb->isStarted()){
- renderGroupFooterByHeader(band);
- }
- }
-}
-
-void ReportRender::initGroups()
-{
- m_datasources->clearGroupFunction();
- foreach(BandDesignIntf* band, m_patternPageItem->childBands()){
- if (band->isFooter()) extractGroupFunctions(band);
- if (band->isHeader()){
- IGroupBand* gb = dynamic_cast(band);
- if (gb) gb->closeGroup();
- extractGroupFunctions(band);
- }
- }
-}
-
-void ReportRender::popPageFooterGroupValues(BandDesignIntf *dataBand)
-{
- BandDesignIntf* pageFooter = m_patternPageItem->bandByType(BandDesignIntf::PageFooter);
- if (pageFooter){
- foreach(GroupFunction* gf, datasources()->groupFunctionsByBand(pageFooter->objectName())){
- if ((gf->dataBandName()==dataBand->objectName())){
- // FIXME Probably coincidence Field and Variables
- if ((!m_popupedExpression.contains(dataBand))||(!m_popupedExpression.values(dataBand).contains(gf->data()))){
- m_popupedExpression.insert(dataBand,gf->data());
- m_popupedValues.insert(QString("%1").arg((quintptr)dataBand)+'|'+gf->data(), gf->values()[gf->values().count()-1]);
- gf->values().pop_back();
- }
- }
- }
- }
-}
-
-void ReportRender::pushPageFooterGroupValues(BandDesignIntf *dataBand)
-{
- BandDesignIntf* pageFooter = m_patternPageItem->bandByType(BandDesignIntf::PageFooter);
- if (pageFooter){
- foreach(GroupFunction* gf, datasources()->groupFunctionsByBand(pageFooter->objectName())){
- if ((gf->dataBandName()==dataBand->objectName())){
- // FIXME Probably coincidence Field and Variables
- if ((m_popupedExpression.contains(dataBand))&&(m_popupedExpression.values(dataBand).contains(gf->data()))){
- gf->values().push_back(m_popupedValues.value(QString("%1").arg((quintptr)dataBand)+'|'+gf->data()));
- }
- }
- }
- }
-}
-
-void ReportRender::closeGroup(BandDesignIntf *band)
-{
- QMultiMap< BandDesignIntf*, GroupBandsHolder* >::iterator it;
- it = m_childBands.find(band);
-
- while (it!=m_childBands.end()&&it.key()==band){
- GroupBandsHolder* bl = it.value();
- if (bl){
- bl->clear();
- delete bl;
- }
- ++it;
- }
-
- m_childBands.remove(band);
-}
-
-void ReportRender::openDataGroup(BandDesignIntf *band)
-{
- m_childBands.insert(band,new GroupBandsHolder(band->tryToKeepTogether()));
-}
-
-void ReportRender::openFooterGroup(BandDesignIntf *band)
-{
- GroupBandsHolder* holder = new GroupBandsHolder(true);
- holder->setIsFooterGroup();
- m_childBands.insert(band,holder);
-}
-
-void ReportRender::closeDataGroup(BandDesignIntf *band)
-{
- IGroupBand* groupBand = dynamic_cast(band);
- if (groupBand){
- groupBand->closeGroup();
- if (band->reprintOnEachPage()) m_reprintableBands.removeOne(band);
-
- QList::Iterator it = m_reprintableBands.begin();
- while (it != m_reprintableBands.end()){
- if ((*it)->bandIndex()>band->bandIndex())
- it = m_reprintableBands.erase(it);
- else
- ++it;
- }
- }
- recalcIfNeeded(band);
- closeGroup(band);
-}
-
-void ReportRender::closeFooterGroup(BandDesignIntf *band){
- closeGroup(band);
-}
-
-qreal maxVectorValue(QVector vector){
- qreal curValue = 0;
- foreach (qreal value, vector) {
- if (curValue vector){
- qreal curValue = vector[0];
- foreach (qreal value, vector) {
- if (curValue>value) curValue=value;
- }
- return curValue;
-}
-
-void ReportRender::placeBandOnPage(BandDesignIntf* band, int columnIndex){
-
- qreal bandPos = m_currentStartDataPos[columnIndex];
-
- m_currentStartDataPos[columnIndex] += band->height();
- m_maxHeightByColumn[columnIndex] -= band->height();
- band->setPos(m_renderPageItem->pageRect().x()+band->width()*columnIndex, bandPos);
- band->setBandIndex(++m_currentIndex);
- band->setColumnIndex(columnIndex);
-
- m_renderPageItem->registerBand(band);
- m_currentColumn = columnIndex;
-}
-
-bool isMultiColumnHeader(BandDesignIntf* band){
- return ( (band->columnsCount() > 1 ) &&
- (band->isHeader() &&
- ((band->bandNestingLevel() == 0) || (band->columnsFillDirection() == BandDesignIntf::Horizontal))));
-}
-
-bool ReportRender::registerBand(BandDesignIntf *band, bool registerInChildren)
-{
-
- if (band->columnsCount() == 1 && m_maxHeightByColumn.size() > 1 ){
- if (band->bandType() != BandDesignIntf::PageFooter){
- rearrangeColumnsItems();
- m_currentColumn = 0;
- qreal minValue = minVectorValue(m_maxHeightByColumn);
- m_maxHeightByColumn.clear();
- m_maxHeightByColumn.append(minValue);
- qreal maxValue = maxVectorValue(m_currentStartDataPos);
- m_currentStartDataPos.clear();
- m_currentStartDataPos.append(maxValue);
- }
- }
-
- if (band->columnsCount() != m_maxHeightByColumn.size()){
- for(int i=1;icolumnsCount();++i){
- m_maxHeightByColumn.append(m_maxHeightByColumn[0]);
- m_currentStartDataPos.append(m_currentStartDataPos[0]);
- }
- m_currentColumn = -1;
- }
-
- if ( (band->columnsCount() > 1) &&
- (!band->isHeader() || (band->bandNestingLevel() > 0 && band->columnsFillDirection() != BandDesignIntf::Horizontal ))){
-
- if (band->columnsFillDirection() == BandDesignIntf::Horizontal){
- if (m_currentColumn < band->columnsCount()-1)
- m_currentColumn = m_currentColumn+1;
- else
- m_currentColumn = 0;
- } else {
- m_currentColumn = m_currentColumn == -1 ? 0: m_currentColumn;
- if ((m_currentColumn !=0) &&
- (m_maxHeightByColumn[0] == m_maxHeightByColumn[m_currentColumn]) &&
- (m_maxHeightByColumn[0] >= band->height())
- ){
- m_currentColumn = 0;
- }
- }
- }
-
- m_currentColumn = m_currentColumn == -1 ? 0: m_currentColumn;
-
- if ( (band->height() <= m_maxHeightByColumn[m_currentColumn]) ||
- m_patternPageItem->endlessHeight() ||
- (isMultiColumnHeader(band) && (band->height() <= m_maxHeightByColumn[0]))
- ){
-
- if ( (band->bandType() == BandDesignIntf::PageFooter) ){
- for (int i=0; i < m_maxHeightByColumn.size(); ++i)
- m_maxHeightByColumn[i]+=band->height();
- }
-
- if ( isMultiColumnHeader(band)){
-
- if (!band->parent()){
- for (int i = 0; i < band->columnsCount(); ++i){
- m_currentColumn = i;
- if (i != 0) band = dynamic_cast(band->cloneItem(PreviewMode));
- placeBandOnPage(band, i);
- }
- } else {
- placeBandOnPage(band, band->columnIndex());
- }
-
-
- } else {
-
- if (band->bandType() != BandDesignIntf::PageFooter){
- placeBandOnPage(band, m_currentColumn);
- }
-
- if (band->columnsCount() > 1){
- m_columnedBandItems.append(band);
- }
-
- }
-
- foreach(QList* list, m_childBands.values()){
- if (registerInChildren &&
- band->bandType()!=BandDesignIntf::PageHeader &&
- band->bandType()!=BandDesignIntf::PageFooter &&
- band->bandType()!=BandDesignIntf::ReportHeader &&
- band->bandType()!=BandDesignIntf::ReportFooter &&
- !list->contains(band) &&
- !band->reprintOnEachPage()
- )
- list->append(band);
- }
-
- if (band->isData()) m_renderedDataBandCount++;
- band->setObjectName(band->objectName()+QString::number(++m_currentNameIndex));
- renameChildItems(band);
- if (m_lastDataBand){
-#if QT_VERSION < 0x050000
- m_lastDataBand->metaObject()->invokeMethod(m_lastDataBand,"bandRegistred");
-#else
- emit m_lastDataBand->bandRegistred();
-#endif
- }
- if (band->bandType() != BandDesignIntf::PageFooter)
- m_lastRenderedBand = band;
- return true;
- } else return false;
-}
-
-qreal ReportRender::calcSlicePercent(qreal height){
- return (height*3/(m_dataAreaSize))/100;
-}
-
-BandDesignIntf* ReportRender::sliceBand(BandDesignIntf *band, BandDesignIntf* patternBand, bool isLast)
-{
- while (band->height()>m_maxHeightByColumn[m_currentColumn]) {
- band = saveUppperPartReturnBottom(band,m_maxHeightByColumn[m_currentColumn],patternBand);
- if (!band->isEmpty()) {
- if (band->autoHeight()){
- if (band->isNeedUpdateSize(FirstPass)){
- band->setHeight(0);
- }
- band->updateItemSize(m_datasources);
- }
- DataBandDesignIntf* data = dynamic_cast(band);
- if (isLast && data && data->keepFooterTogether() &&
- band->height()sliceLastRow()
- ){
- if (band->height()>(m_maxHeightByColumn[m_currentColumn]-m_reportFooterHeight)){
- m_maxHeightByColumn[m_currentColumn] -= ((m_maxHeightByColumn[m_currentColumn]-band->height())+(band->height()*calcSlicePercent(band->height())));
- }
- }
- if (registerBand(band)) break;
- } else break;
- }
-
- if (band->isEmpty()) {
- delete band;
- band = 0;
- }
-
- return band;
-
-}
-
-void ReportRender::updateTOC(BaseDesignIntf* item, int pageNumber){
- BookmarkContainerDesignIntf* bookmarkContainer = dynamic_cast(item);
- if (bookmarkContainer){
- TableOfContents* toc = m_scriptEngineContext->tableOfContents();
- foreach (QString key, bookmarkContainer->bookmarks()){
- toc->setItem(key, bookmarkContainer->getBookMark(key).toString(), pageNumber);
- }
- }
-}
-
-void ReportRender::secondRenderPass(ReportPages renderedPages)
-{
- if (!m_scriptEngineContext->tableOfContents()->isEmpty()){
- for(int i = 0; i < renderedPages.count(); ++i){
- PageItemDesignIntf::Ptr page = renderedPages.at(i);
- updateTOC(page.data(), m_pagesRanges.findPageNumber(i));
- foreach(BaseDesignIntf* item, page->childBaseItems()){
- updateTOC(item, m_pagesRanges.findPageNumber(i));
- }
- }
- }
-
- for(int i = 0; i < renderedPages.count(); ++i){
- PageItemDesignIntf::Ptr page = renderedPages.at(i);
- m_datasources->setReportVariable("#PAGE",m_pagesRanges.findPageNumber(i));
- m_datasources->setReportVariable("#PAGE_COUNT",m_pagesRanges.findLastPageNumber(i));
- foreach(BaseDesignIntf* item, page->childBaseItems()){
- if (item->isNeedUpdateSize(SecondPass))
- item->updateItemSize(m_datasources, SecondPass);
- }
- }
-}
-
-void ReportRender::createTOCMarker(bool startNewRange)
-{
- m_pagesRanges.addTOCMarker(startNewRange);
-}
-
-BandDesignIntf *ReportRender::saveUppperPartReturnBottom(BandDesignIntf *band, int height, BandDesignIntf* patternBand)
-{
- //int sliceHeight = height;
- BandDesignIntf* upperBandPart = dynamic_cast(band->cloneUpperPart(height));
- BandDesignIntf* bottomBandPart = dynamic_cast(band->cloneBottomPart(height));
- if (!bottomBandPart->isEmpty()){
- if (patternBand->keepFooterTogether())
- closeFooterGroup(patternBand);
- if (upperBandPart->isEmpty())
- bottomBandPart->copyBookmarks(band);
- }
- if (!upperBandPart->isEmpty()){
- upperBandPart->setBottomSpace(0);
- upperBandPart->updateItemSize(m_datasources, FirstPass, height);
- registerBand(upperBandPart);
- upperBandPart->copyBookmarks(band);
- if (patternBand->isFooter())
- closeFooterGroup(m_lastDataBand);
- } else delete upperBandPart;
-
- if (band->columnsCount()>1 &&
- (band->columnsFillDirection()==BandDesignIntf::Vertical ||
- band->columnsFillDirection()==BandDesignIntf::VerticalUniform)){
- startNewColumn();
- if (patternBand->bandHeader() &&
- patternBand->bandHeader()->columnsCount()>1 &&
- !m_lostHeadersMoved &&
- patternBand->bandNestingLevel() == 0
- ){
- renderBand(patternBand->bandHeader(), 0, StartNewPageAsNeeded);
- }
-
- } else {
- savePage();
- startNewPage();
- }
-
- delete band;
- return bottomBandPart;
-}
-
-BandDesignIntf *ReportRender::renderData(BandDesignIntf *patternBand, bool emitBeforeRender)
-{
- BandDesignIntf* bandClone = dynamic_cast(patternBand->cloneItem(PreviewMode));
-
- m_scriptEngineContext->baseDesignIntfToScript(patternBand->parent()->objectName(), bandClone);
- m_scriptEngineContext->setCurrentBand(bandClone);
- if (emitBeforeRender)
- emit(patternBand->beforeRender());
-
- if (patternBand->isFooter()){
- replaceGroupsFunction(bandClone);
- }
-
- if (patternBand->isHeader()){
- replaceGroupsFunction(bandClone);
- }
-
- emit(patternBand->preparedForRender());
- bandClone->updateItemSize(m_datasources);
- bandClone->setBottomSpace(patternBand->height() - patternBand->findMaxBottom());
-
- //m_scriptEngineContext->baseDesignIntfToScript(bandClone);
- emit(patternBand->afterData());
-
- return bandClone;
-}
-
-void ReportRender::startNewColumn(){
- if (m_currentColumn < m_maxHeightByColumn.size()-1){
- m_currentColumn++;
- checkLostHeadersInPrevColumn();
- } else {
- savePage();
- startNewPage();
- }
-}
-
-void ReportRender::startNewPage(bool isFirst)
-{
- m_renderPageItem = 0;
- m_newPageStarted = true;
- initColumns();
- initRenderPage();
- m_scriptEngineContext->setCurrentPage(m_renderPageItem);
- m_scriptEngineContext->baseDesignIntfToScript(m_renderPageItem->patternName(), m_renderPageItem);
- emit m_patternPageItem->beforeRender();
-
- m_renderPageItem->setObjectName(QLatin1String("ReportPage")+QString::number(m_pageCount));
- m_maxHeightByColumn[m_currentColumn] = m_renderPageItem->pageRect().height();
- m_currentStartDataPos[m_currentColumn] = m_patternPageItem->topMargin() * Const::mmFACTOR;
- m_currentIndex = 0;
-
- if (isFirst) {
- renderReportHeader(m_patternPageItem, BeforePageHeader);
- emit m_patternPageItem->beforeFirstPageRendered();
- }
-
- renderPageHeader(m_patternPageItem);
-
- m_pageFooterHeight = calcPageFooterHeight(m_patternPageItem)+2;
- m_maxHeightByColumn[m_currentColumn] -= m_pageFooterHeight;
- m_currentIndex = 10;
- m_dataAreaSize = m_maxHeightByColumn[m_currentColumn];
- m_renderedDataBandCount = 0;
-
- foreach (BandDesignIntf* band, m_reprintableBands) {
- renderBand(band, 0);
- }
-
- checkLostHeadersOnPrevPage();
- pasteGroups();
-
-}
-
-void ReportRender::resetPageNumber(ResetPageNuberType resetType)
-{
- m_pagesRanges.startNewRange();
- if (resetType == PageReset)
- m_datasources->setReportVariable("#PAGE",1);
-}
-
-void ReportRender::cutGroups()
-{
- m_popupedExpression.clear();
- m_popupedValues.clear();
- //foreach(BandDesignIntf* groupBand,m_childBands.keys()){
- foreach(BandDesignIntf* groupBand, m_childBands.keys()){
- if (m_childBands.value(groupBand)->tryToKeepTogether()){
- foreach(BandDesignIntf* band, *m_childBands.value(groupBand)){
- m_renderPageItem->removeBand(band);
- popPageFooterGroupValues(band);
- band->setParent(0);
- band->setParentItem(0);
- }
- }
- }
-
-}
-
-void ReportRender::checkFooterGroup(BandDesignIntf *groupBand)
-{
- if (m_childBands.contains(groupBand)){
- GroupBandsHolder* holder = m_childBands.value(groupBand);
- foreach(BandDesignIntf* band, *holder){
- qreal percent = band->height()*100 / m_dataAreaSize;
- if (m_renderedDataBandCount<=1 || percent>20 ){
- holder->removeAll(band);
- }
- }
- }
-}
-
-void ReportRender::pasteGroups()
-{
- BandDesignIntf* groupBand = findEnclosingGroup();
- if (groupBand){
- foreach(BandDesignIntf* band, *m_childBands.value(groupBand)){
- registerBand(band,false);
- if (band->isData()) m_renderedDataBandCount++;
- pushPageFooterGroupValues(band);
- }
- foreach(GroupBandsHolder* holder, m_childBands.values())
- holder->setTryToKeepTogether(false);
- }
- m_popupedExpression.clear();
- m_popupedValues.clear();
-}
-
-bool bandLessThen(BandDesignIntf* b1, BandDesignIntf* b2){
- return b1->bandIndex() < b2->bandIndex();
-}
-
-void ReportRender::checkLostHeadersOnPrevPage()
-{
- QVector lostHeaders;
-
- if (m_renderedPages.isEmpty()) return;
- PageItemDesignIntf::Ptr page = m_renderedPages.last();
- if (page->bands().isEmpty()) return;
-
- QMutableListIteratorit(page->bands());
-
- it.toBack();
- if (it.hasPrevious()){
- if (it.previous()->isFooter()){
- if (it.hasPrevious()) it.previous();
- else return;
- }
- }
-
- while (it.hasPrevious()){
- if (it.value()->isHeader()){
- if (it.value()->reprintOnEachPage()){
- delete it.value();
- } else { lostHeaders.append(it.value());}
- it.remove();
- it.previous();
- } else break;
- }
-
- if (lostHeaders.size() > 0){
- m_lostHeadersMoved = true;
- //std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen);
- std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen);
- foreach(BandDesignIntf* header, lostHeaders){
- registerBand(header);
- }
- } else {
- m_lostHeadersMoved = false;
- }
-
-
-}
-
-void ReportRender::checkLostHeadersInPrevColumn()
-{
- QVector lostHeaders;
-
- QMutableListIteratorit(m_renderPageItem->bands());
-
- it.toBack();
- if (it.hasPrevious()){
- if (it.previous()->isFooter()){
- if (it.hasPrevious()) it.previous();
- else return;
- }
- }
-
- while (it.hasPrevious()){
- if (it.value()->isHeader()){
- if (it.value()->reprintOnEachPage()){
- delete it.value();
- } else { lostHeaders.append(it.value());}
- it.remove();
- it.previous();
- } else break;
- }
-
- if (lostHeaders.size() > 0){
- m_lostHeadersMoved = true;
- // std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen);
- std::sort(lostHeaders.begin(), lostHeaders.end(), bandLessThen);
- foreach(BandDesignIntf* header, lostHeaders){
- registerBand(header);
- }
- } else {
- m_lostHeadersMoved = false;
- }
-}
-
-BandDesignIntf* ReportRender::findEnclosingGroup()
-{
- BandDesignIntf* result=0;
- int groupIndex = -1;
- if (!m_childBands.isEmpty()){
- foreach(BandDesignIntf* gb, m_childBands.keys()){
- if (m_childBands.value(gb)->tryToKeepTogether()&&
- ((gb->bandIndex()bandIndex();
- }
- }
- }
- return result;
-}
-
-void ReportRender::savePage(bool isLast)
-{
-
- m_datasources->setReportVariable("#IS_LAST_PAGEFOOTER",isLast);
- m_datasources->setReportVariable("#IS_FIRST_PAGEFOOTER",m_datasources->variable("#PAGE").toInt()==1);
-
- renderPageItems(m_patternPageItem);
-
- if (m_renderPageItem->isEmpty() && m_renderPageItem->notPrintIfEmpty()) return;
-
- if (m_renderPageItem->isTOC())
- m_pagesRanges.addTOCPage();
- else
- m_pagesRanges.addPage();
-
- checkFooterGroup(m_lastDataBand);
- cutGroups();
- rearrangeColumnsItems();
- m_columnedBandItems.clear();
-
- BandDesignIntf* pf = m_patternPageItem->bandByType(BandDesignIntf::PageFooter);
- if (pf && m_datasources->variable("#PAGE").toInt()!=1 && !isLast){
- renderPageFooter(m_patternPageItem);
- } else {
- if (pf && pf->property("printOnFirstPage").toBool() && m_datasources->variable("#PAGE").toInt()==1){
- renderPageFooter(m_patternPageItem);
- } else if(pf && pf->property("printOnLastPage").toBool() && isLast){
- renderPageFooter(m_patternPageItem);
- }
- }
-
- if (m_pagesRanges.currentRange(m_patternPageItem->isTOC()).firstPage == 0) {
- m_datasources->setReportVariable("#PAGE",1);
- } else {
- m_datasources->setReportVariable("#PAGE",m_datasources->variable("#PAGE").toInt()+1);
- }
-
- m_renderedPages.append(PageItemDesignIntf::Ptr(m_renderPageItem));
- m_pageCount++;
- emit pageRendered(m_pageCount);
-
- if (isLast){
- BandDesignIntf* ph = m_renderPageItem->bandByType(BandDesignIntf::PageHeader);
- if (ph && !ph->property("printOnLastPage").toBool()){
- delete ph;
- }
- }
-
- if (m_renderPageItem->pageFooter()){
- m_renderPageItem->pageFooter()->setBandIndex(++m_currentIndex);
- if (m_renderPageItem->pageFooter()->property("removeGap").toBool()){
- m_renderPageItem->pageFooter()->setPos(m_lastRenderedBand->geometry().bottomLeft());
- }
- }
- m_renderPageItem->placeTearOffBand();
-
- //m_scriptEngineContext->setCurrentPage(m_renderPageItem);
- emit m_patternPageItem->afterRender();
- if (isLast)
- emit m_patternPageItem->afterLastPageRendered();
- if (isLast && m_patternPageItem->endlessHeight()){
- qreal pageHeight = 0;
- foreach (BandDesignIntf* band, m_renderPageItem->bands()) {
- pageHeight += band->height();
- }
- m_renderPageItem->setHeight(pageHeight + 10 +
- (m_patternPageItem->topMargin() + m_patternPageItem->bottomMargin()) * Const::mmFACTOR);
- }
-}
-
-QString ReportRender::toString()
-{
- QScopedPointer writer(new XMLWriter());
- foreach(PageItemDesignIntf::Ptr page,m_renderedPages){
- writer->putItem(page.data());
- }
- return writer->saveToString();
-}
-
-ReportRender::~ReportRender(){
- m_renderedPages.clear();
-}
-
-void ReportRender::cancelRender(){
- m_renderCanceled = true;
-}
-
-int PagesRanges::findLastPageNumber(int index)
-{
- index++;
- foreach (PagesRange range, m_ranges) {
- if ( range.firstPage <= (index) && range.lastPage>= (index) )
- return (range.lastPage-(range.firstPage))+1;
- }
- return 0;
-}
-
-int PagesRanges::findPageNumber(int index)
-{
- index++;
- foreach (PagesRange range, m_ranges) {
- if ( range.firstPage <= (index) && range.lastPage >= (index) )
- return (index - range.firstPage)+1;
- }
- return 0;
-}
-
-PagesRange&PagesRanges::currentRange(bool isTOC)
-{
- Q_ASSERT( (isTOC && m_TOCRangeIndex!=-1) || !isTOC);
- if (isTOC && m_TOCRangeIndex !=-1) return m_ranges[m_TOCRangeIndex];
- return m_ranges.last();
-}
-
-void PagesRanges::startNewRange(bool isTOC)
-{
- PagesRange range;
- if (!m_ranges.isEmpty()){
- range.firstPage = 0;
- range.lastPage = m_ranges.last().lastPage + 1;
- } else {
- range.firstPage = 0;
- range.lastPage = 0;
- }
- range.isTOC = isTOC;
- m_ranges.append(range);
- if (isTOC) m_TOCRangeIndex = m_ranges.size()-1;
-}
-
-void PagesRanges::addTOCMarker(bool addNewRange)
-{
- if ( addNewRange || m_ranges.isEmpty()){
- startNewRange(true);
- } else {
- m_TOCRangeIndex = m_ranges.size()-1;
- m_ranges.last().isTOC = true;
- }
-}
-
-void PagesRanges::addPage()
-{
- if (m_ranges.isEmpty()) startNewRange();
- if (m_ranges.last().firstPage == 0){
- m_ranges.last().firstPage = m_ranges.last().lastPage == 0 ? 1 : m_ranges.last().lastPage;
- m_ranges.last().lastPage = m_ranges.last().lastPage == 0 ? 1 : m_ranges.last().lastPage;
- } else {
- m_ranges.last().lastPage++;
- }
-}
-
-void PagesRanges::shiftRangesNextToTOC(){
- for(int i = m_TOCRangeIndex+1; i < m_ranges.size(); ++i){
- m_ranges[i].firstPage++;
- m_ranges[i].lastPage++;
- }
-}
-
-void PagesRanges::addTOCPage()
-{
- Q_ASSERT(m_TOCRangeIndex != -1);
- if (m_TOCRangeIndex != -1){
- PagesRange& tocRange = m_ranges[m_TOCRangeIndex];
- if (tocRange.firstPage == 0) {
- tocRange.firstPage = tocRange.lastPage == 0 ? 1 : tocRange.lastPage;
- tocRange.lastPage = tocRange.lastPage == 0 ? 1 : tocRange.lastPage;
- if (tocRange.firstPage == 1 && tocRange.lastPage == 1)
- shiftRangesNextToTOC();
- } else {
- tocRange.lastPage++;
- shiftRangesNextToTOC();
- }
- }
-}
-
-void PagesRanges::clear()
-{
- m_ranges.clear();
-}
-
-} // namespace LimeReport
diff --git a/Nouveau dossier/lrreportrender.h b/Nouveau dossier/lrreportrender.h
deleted file mode 100644
index 7529c5f..0000000
--- a/Nouveau dossier/lrreportrender.h
+++ /dev/null
@@ -1,227 +0,0 @@
-/***************************************************************************
- * 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 . *
- * *
- ** 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 . *
- * *
- * 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 LRREPORTRENDER_H
-#define LRREPORTRENDER_H
-#include
-#include "lrcollection.h"
-#include "lrdatasourcemanager.h"
-#include "lrpageitemdesignintf.h"
-#include "lrscriptenginemanager.h"
-#include "serializators/lrstorageintf.h"
-
-namespace LimeReport{
-
-class PageDesignIntf;
-class BandDesignIntf;
-class ContentItemDesignIntf;
-
-class GroupBandsHolder: public QList{
-public:
- GroupBandsHolder(bool tryToKeepTogether):QList(),m_tryToKeepTogether(tryToKeepTogether),
- m_dataGroup(true), m_footerGroup(false){}
- bool tryToKeepTogether(){return m_tryToKeepTogether;}
- void setTryToKeepTogether(bool value){m_tryToKeepTogether=value;}
- bool isDataGroup(){return m_dataGroup;}
- bool isFooterGroup(){ return m_footerGroup;}
- void setIsFooterGroup(){m_footerGroup=true;m_dataGroup=false;}
-private:
- bool m_tryToKeepTogether;
- bool m_dataGroup;
- bool m_footerGroup;
-};
-
-
-struct PagesRange{
- int firstPage;
- int lastPage;
- bool isTOC;
-};
-
-class PagesRanges{
-public:
- PagesRanges(): m_TOCRangeIndex(-1) {}
- int findLastPageNumber(int index);
- int findPageNumber(int index);
- PagesRange& currentRange(bool isTOC);
- void startNewRange(bool isTOC = false);
- void addTOCMarker(bool addNewRange);
- void addPage();
- void addTOCPage();
- void clear();
-private:
- void shiftRangesNextToTOC();
-private:
- QVector m_ranges;
- int m_TOCRangeIndex;
-};
-
-
-class ReportRender: public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QObject* datasourcesManager READ datasources)
-public:
- enum DataRenderMode {StartNewPageAsNeeded, NotStartNewPage, ForcedStartPage};
- enum BandPrintMode {PrintAlwaysPrintable, PrintNotAlwaysPrintable };
- enum ResetPageNuberType{BandReset, PageReset};
- enum PageRenderStage{BeforePageHeader, AfterPageHeader};
- typedef QSharedPointer Ptr;
- ~ReportRender();
- ReportRender(QObject *parent = 0);
- void setDatasources(DataSourceManager* value);
- void setScriptContext(ScriptEngineContext* scriptContext);
- DataSourceManager* datasources(){return m_datasources;}
- int pageCount();
- PageItemDesignIntf::Ptr pageAt(int index);
- QString renderPageToString(PageItemDesignIntf *patternPage);
- ReportPages renderPageToPages(PageItemDesignIntf *patternPage);
- ReportPages renderTOC(PageItemDesignIntf *patternPage, bool first, bool resetPages);
- void secondRenderPass(ReportPages renderedPages);
- void createTOCMarker(bool startNewRange);
-signals:
- void pageRendered(int renderedPageCount);
-public slots:
- void cancelRender();
-private:
- void analizeContainer(BaseDesignIntf *item, BandDesignIntf *band);
- void analizeItem(ContentItemDesignIntf *item, BandDesignIntf *band);
- void analizePage(PageItemDesignIntf *patternPage);
-
- void initDatasources();
- void initDatasource(const QString &name);
- void initRenderPage();
- void initVariables();
- void initGroups();
- void clearPageMap();
-
- void renderPage(PageItemDesignIntf *patternPage, bool isTOC = false, bool isFirst = false, bool = false);
- BandDesignIntf* renderBand(BandDesignIntf *patternBand, BandDesignIntf *bandData, DataRenderMode mode = NotStartNewPage, bool isLast = false);
- void renderDataBand(BandDesignIntf* dataBand);
- void renderPageHeader(PageItemDesignIntf* patternPage);
- void renderReportHeader(PageItemDesignIntf* patternPage, PageRenderStage stage);
- void renderPageFooter(PageItemDesignIntf* patternPage);
- void renderPageItems(PageItemDesignIntf* patternPage);
- void renderChildHeader(BandDesignIntf* parent, BandPrintMode printMode);
- void renderChildFooter(BandDesignIntf* parent, BandPrintMode printMode);
- void renderChildBands(BandDesignIntf* parentBand);
- void recalcIfNeeded(BandDesignIntf *band);
- void renderDataHeader(BandDesignIntf* header);
- void renderGroupHeader(BandDesignIntf* parentBand, IDataSource* dataSource, bool firstTime);
- void renderGroupFooter(BandDesignIntf* parentBand);
- void moveTearOffBand();
- qreal calcPageFooterHeight(PageItemDesignIntf* patternPage);
- qreal calcSlicePercent(qreal height);
-
- bool containsGroupFunctions(BaseDesignIntf *container);
- void extractGroupFuntionsFromItem(ContentItemDesignIntf* contentItem, BandDesignIntf* band);
- void extractGroupFunctionsFromContainer(BaseDesignIntf* baseItem, BandDesignIntf* band);
- void extractGroupFunctions(BandDesignIntf* band);
- void replaceGroupFunctionsInItem(ContentItemDesignIntf* contentItem, BandDesignIntf* band);
- void replaceGroupFunctionsInContainer(BaseDesignIntf* baseItem, BandDesignIntf* band);
- void replaceGroupsFunction(BandDesignIntf* band);
-
- BandDesignIntf *findRecalcableBand(BandDesignIntf *patternBand);
-
- void popPageFooterGroupValues(BandDesignIntf* dataBand);
- void pushPageFooterGroupValues(BandDesignIntf* dataBand);
-
- enum GroupType{DATA,FOOTER};
- void closeGroup(BandDesignIntf* band);
- void openDataGroup(BandDesignIntf* band);
- void closeDataGroup(BandDesignIntf* band);
- void openFooterGroup(BandDesignIntf* band);
- void closeFooterGroup(BandDesignIntf* band);
- void cutGroups();
- void checkFooterGroup(BandDesignIntf* groupBand);
- void pasteGroups();
- void checkLostHeadersOnPrevPage();
- void checkLostHeadersInPrevColumn();
-
- BandDesignIntf* findEnclosingGroup();
- bool registerBand(BandDesignIntf* band, bool registerInChildren=true);
- BandDesignIntf *sliceBand(BandDesignIntf* band, BandDesignIntf *patternBand, bool isLast);
-
- BandDesignIntf* saveUppperPartReturnBottom(BandDesignIntf *band, int height, BandDesignIntf *patternBand);
- BandDesignIntf* renderData(BandDesignIntf* patternBand, bool emitBeforeRender = true);
- void startNewColumn();
- void startNewPage(bool isFirst = false);
- void resetPageNumber(ResetPageNuberType resetType);
- void savePage(bool isLast = false);
- QString toString();
- void initColumns();
- bool isNeedToRearrangeColumnsItems();
- BandDesignIntf* lastColumnItem(int columnIndex);
- void rearrangeColumnsItems();
- int columnItemsCount(int columnIndex);
- qreal columnHeigth(int columnIndex);
- qreal maxColumnHeight();
- void renameChildItems(BaseDesignIntf *item);
- void renderGroupFooterByHeader(BandDesignIntf *groupHeader);
- void updateTOC(BaseDesignIntf* item, int pageNumber);
- void placeBandOnPage(BandDesignIntf *band, int columnIndex);
- QColor makeBackgroundColor(BandDesignIntf *band);
-private:
- DataSourceManager* m_datasources;
- ScriptEngineContext* m_scriptEngineContext;
- PageItemDesignIntf* m_renderPageItem;
- PageItemDesignIntf* m_patternPageItem;
- QList m_renderedPages;
- QMultiMap< BandDesignIntf*, GroupBandsHolder* > m_childBands;
- QList m_reprintableBands;
- QList m_recalcBands;
- QMap > m_groupfunctionItems;
- int m_currentIndex;
- int m_pageCount;
-
- QMap m_popupedValues;
- QMultiMap m_popupedExpression;
-
- qreal m_pageFooterHeight;
- qreal m_dataAreaSize;
- qreal m_reportFooterHeight;
- int m_renderedDataBandCount;
- BandDesignIntf* m_lastRenderedHeader;
- BandDesignIntf* m_lastDataBand;
- BandDesignIntf* m_lastRenderedFooter;
- BandDesignIntf* m_lastRenderedBand;
- bool m_renderCanceled;
- QVector m_maxHeightByColumn;
- QVector m_currentStartDataPos;
- int m_currentColumn;
- PagesRanges m_pagesRanges;
- QVector m_columnedBandItems;
- unsigned long long m_currentNameIndex;
- bool m_newPageStarted;
- bool m_lostHeadersMoved;
- bool m_dataSourceSorted = false;
-
-};
-} // namespace LimeReport
-#endif // LRREPORTRENDER_H