97 lines
2.8 KiB
C++
Executable File
97 lines
2.8 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* Shows a report of combat power in form of curves
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
*/
|
|
|
|
#include "lts_report_display_widget.h"
|
|
|
|
#include <QResizeEvent>
|
|
#include <QPainter>
|
|
#include <QPaintEvent>
|
|
#include <QTimer>
|
|
|
|
// Taken from KDReportsLayoutHelper.cpp START
|
|
// (WebCMS-TES-UAE-RP 2953 Falsche Positionierung im AAR)
|
|
QT_BEGIN_NAMESPACE
|
|
Q_GUI_EXPORT extern int qt_defaultDpi(); // This is what QTextDocument uses...
|
|
QT_END_NAMESPACE
|
|
// Taken from KDReportsLayoutHelper.cpp END
|
|
|
|
namespace LtsWidgets
|
|
{
|
|
|
|
LtsReportDisplayWidget::LtsReportDisplayWidget(QWidget *parent)
|
|
: QWidget(parent)
|
|
{
|
|
// setAttribute(Qt::WA_OpaquePaintEvent);
|
|
// minimale Breite, danach sollte die ScrollArea einen horizontalen Scrollbar darstellen
|
|
setMinimumWidth(400);
|
|
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
|
}
|
|
|
|
void LtsReportDisplayWidget::setReport(KDReports::Report *report)
|
|
{
|
|
m_report = report;
|
|
update();
|
|
}
|
|
|
|
void LtsReportDisplayWidget::paintEvent(QPaintEvent *event)
|
|
{
|
|
if (!m_report)
|
|
{
|
|
QWidget::paintEvent(event);
|
|
return;
|
|
}
|
|
if (m_pixmap.size() != size())
|
|
{
|
|
QImage img(size(), QImage::Format_ARGB32);
|
|
QPainter p(&img);
|
|
p.fillRect(rect(), Qt::white);
|
|
m_report->paintPage(0, p);
|
|
p.end();
|
|
m_pixmap = QPixmap::fromImage(img);
|
|
}
|
|
QPainter p(this);
|
|
p.drawPixmap(0, 0, m_pixmap);
|
|
p.end();
|
|
}
|
|
|
|
void LtsReportDisplayWidget::resizeEvent(QResizeEvent *event)
|
|
{
|
|
QWidget::resizeEvent(event);
|
|
if (!m_report)
|
|
return;
|
|
qreal withPixel = size().width();
|
|
// qreal withMM = withPixel / physicalDpiX() * 25.4;
|
|
qreal withMM = withPixel / qt_defaultDpi() * 25.4;
|
|
m_report->setWidthForEndlessPrinter(withMM);
|
|
|
|
if (!m_bNewMinSizeSlotCalled)
|
|
{
|
|
m_bNewMinSizeSlotCalled = true;
|
|
QTimer::singleShot(10, this, &LtsReportDisplayWidget::setNewMinimumSize);
|
|
}
|
|
}
|
|
|
|
void LtsReportDisplayWidget::setNewMinimumSize()
|
|
{
|
|
m_bNewMinSizeSlotCalled = false;
|
|
if (!m_report)
|
|
return;
|
|
// die neue minimale Höhe festlegen um ggf. einen vertikalen Scrollbar anzuzeigen
|
|
QSize newSize = m_report->paperSize().toSize();
|
|
// DEBUG_LOG(m_logger) << "old min height: " << minimumHeight() << " - new min height: " << newSize.height() << END_LOG;
|
|
// Zur Erklärung: es kann passieren, dass die ScrollArea entscheidet, dass der vertikale Scrollbar jetzt nicht mehr nötig ist
|
|
// dies triggert ein resize Event und demnach eine neue Breite. Dadurch verändert sich dann natürlich auch die
|
|
// neue minimale Höhe was widerrum dazu führt, dass der Scrollbar wieder nötig ist usw.
|
|
// deshalb eine kleine hysterese, hoffentlich reicht es so
|
|
if (minimumHeight() >= newSize.height() && minimumHeight() - 20 <= newSize.height())
|
|
return;
|
|
setMinimumHeight(newSize.height());
|
|
}
|
|
|
|
} // namespace LtsWidgets
|