ReportItem::PrintResult ReportItemFrame::printMetaPaint(ReportItemMetaPaint *out, const ReportItem::Rect &bounding_rect) { qfLogFuncFrame() << this; qfDebug() << "\tbounding_rect:" << bounding_rect.toString(); qfDebug() << "\tdesignedRect:" << designedRect.toString();// << "isLeftTopFloating:" << isLeftTopFloating() << "isRightBottomFloating:" << isRightBottomFloating(); qfDebug() << "\tlayout:" << ((layout() == LayoutHorizontal)? "horizontal": "vertical") << ", is rubber:" << isRubber(layout()); QF_TIME_SCOPE("ReportItemFrame::printMetaPaint ***"); PrintResult res = PR_PrintedOk; if(!isVisible()) return res; Rect frame_content_br = bounding_rect; qfDebug() << "\tbbr 0:" << frame_content_br.toString(); if(designedRect.horizontalUnit == Rect::UnitMM && designedRect.width() - Epsilon > bounding_rect.width()) { qfDebug() << "\t<<<< FRAME NOT FIT WIDTH"; return checkPrintResult(PR_PrintAgainOnNextPage); } if(designedRect.verticalUnit == Rect::UnitMM && designedRect.height() - Epsilon > bounding_rect.height()) { qfDebug() << "\t<<<< FRAME NOT FIT HEIGHT"; return checkPrintResult(PR_PrintAgainOnNextPage); } frame_content_br.adjust(hinset(), vinset(), -hinset(), -vinset()); QList<double> column_sizes; double columns_gap = 0; if(column_sizes.isEmpty()) { qf::core::String s = columns(); QStringList sl = s.splitAndTrim(','); columns_gap = columnsGap(); double ly_size = frame_content_br.width() - (columns_gap * (sl.count() - 1)); column_sizes = qf::qmlwidgets::graphics::makeLayoutSizes(sl, ly_size); } ReportItemMetaPaintFrame *metapaint_frame = new ReportItemMetaPaintFrame(out, this); QF_ASSERT_EX(metapaint_frame != nullptr, "Meta paint item for item " + QString(this->metaObject()->className()) + " not created."); metapaint_frame->setInset(hinset(), vinset()); metapaint_frame->setLayout((qf::qmlwidgets::graphics::Layout)layout()); metapaint_frame->setAlignment(horizontalAlignment(), verticalAlignment()); Rect column_br_helper = frame_content_br; for(int current_column_index=0; current_column_index<column_sizes.count(); current_column_index++) { Rect column_br = column_br_helper; column_br.setWidth(column_sizes.value(current_column_index)); qfDebug() << "\tcolumn bounding rect:" << column_br.toString(); res = printMetaPaintChildren(metapaint_frame, column_br); if(res == PR_PrintAgainOnNextPage) { /// pokud je result neverfit, nech ho tam, at aspon vidime, co se nikdy nevejde if(!canBreak() && !(res == PR_ErrorNeverFit)) { // always delete current metapaint item when it cannot be broken // when keepWithPrev is true, delete also metapaint item for all metapaint items in it's keepWithPrev chain ReportItemFrame *parent_frame = this->parentFrame(); if(!parent_frame) { qfWarning() << "Parent frame shall not be NULL!"; } else { QF_CHECK(parent_frame->itemToPrintAt(parent_frame->m_indexToPrint) == this, "Internal error!"); while(true) { ReportItem *it = parent_frame->itemToPrintAt(parent_frame->m_indexToPrint); QF_ASSERT(it != nullptr, "Internal error!", break); //qfWarning() << "reseting index of:" << it; it->resetIndexToPrintRecursively(ReportItem::IncludingParaTexts); ReportItemMetaPaint *mpit = out->lastChild(); QF_ASSERT(mpit != nullptr, "Cannot delete NULL metapaint item!", break); QF_SAFE_DELETE(mpit); if(it->isKeepWithPrev()) { if(parent_frame->m_indexToPrint > 0) { parent_frame->m_indexToPrint--; //qfWarning() << "new m_indexToPrint:" << parent_frame->m_indexToPrint; continue; } else { qfWarning() << "Index to print == 0: Internal error!"; } } break; } } /* resetIndexToPrintRecursively(ReportItem::IncludingParaTexts); QF_SAFE_DELETE(mp); */ return checkPrintResult(res); } } column_br_helper = column_br; column_br_helper.moveLeft(column_br.right() + columns_gap); }