Refractor ImageScrollArea
This commit is contained in:
+114
-87
@@ -1,121 +1,148 @@
|
||||
#include "imagescrollarea.h"
|
||||
#include <QMouseEvent>
|
||||
#include <QScrollBar>
|
||||
#include <QKeyEvent>
|
||||
#include <QPalette>
|
||||
#include "imageringlist.h"
|
||||
#include <QDebug>
|
||||
#include <QKeyEvent>
|
||||
#include <QGridLayout>
|
||||
#include <QMimeData>
|
||||
#include <QMessageBox>
|
||||
#include <QCoreApplication>
|
||||
#include <QPainter>
|
||||
#include <QFileInfo>
|
||||
#include <QScrollBar>
|
||||
#include <cmath>
|
||||
|
||||
ImageScrollArea::ImageScrollArea(QWidget *parent) : QScrollArea(parent),
|
||||
m_scale(-1)
|
||||
ImageScrollArea::ImageScrollArea(Database *database, QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
m_label = new QLabel(this);
|
||||
setWidget(m_label);
|
||||
setAlignment(Qt::AlignCenter);
|
||||
setBackgroundRole(QPalette::Dark);
|
||||
QGridLayout *layout = new QGridLayout(this);
|
||||
setLayout(layout);
|
||||
|
||||
ImageWidgetGL *imageWidgetGL = new ImageWidgetGL(database, this);
|
||||
m_imageWidget = imageWidgetGL;
|
||||
|
||||
m_verticalScrollBar = new QScrollBar(Qt::Vertical, this);
|
||||
m_horizontalScrollBar = new QScrollBar(Qt::Horizontal, this);
|
||||
|
||||
layout->setSpacing(0);
|
||||
layout->addWidget(dynamic_cast<ImageWidgetGL*>(m_imageWidget), 0, 0);
|
||||
layout->addWidget(m_verticalScrollBar, 0, 1);
|
||||
layout->addWidget(m_horizontalScrollBar, 1, 0);
|
||||
|
||||
connect(m_verticalScrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollEvent()));
|
||||
connect(m_horizontalScrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollEvent()));
|
||||
|
||||
if(imageWidgetGL)
|
||||
{
|
||||
connect(imageWidgetGL, &ImageWidgetGL::fileDropped, this, &ImageScrollArea::fileDropped);
|
||||
connect(imageWidgetGL, &ImageWidgetGL::status, this, &ImageScrollArea::status);
|
||||
connect(imageWidgetGL, &ImageWidgetGL::scrollBarsUpdate, this, &ImageScrollArea::updateScrollbars);
|
||||
}
|
||||
}
|
||||
|
||||
void ImageScrollArea::setImage(const QPixmap &img)
|
||||
ImageScrollArea::~ImageScrollArea()
|
||||
{
|
||||
m_pixmap = img;
|
||||
QPixmap pix;
|
||||
if(m_scale < 0)
|
||||
pix = img.scaled(size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
|
||||
}
|
||||
|
||||
void ImageScrollArea::allocateThumbnails(const QStringList &paths)
|
||||
{
|
||||
m_imageWidget->allocateThumbnails(paths);
|
||||
}
|
||||
|
||||
void ImageScrollArea::showThumbnail(bool enable)
|
||||
{
|
||||
m_imageWidget->showThumbnail(enable);
|
||||
}
|
||||
|
||||
void ImageScrollArea::setBayerMask(int mask)
|
||||
{
|
||||
m_imageWidget->setBayerMask(mask);
|
||||
}
|
||||
|
||||
void ImageScrollArea::updateScrollbars(int valueH, int stepH, int maxH, int valueV, int stepV, int maxV)
|
||||
{
|
||||
if(maxH > 0)
|
||||
{
|
||||
m_horizontalScrollBar->show();
|
||||
m_horizontalScrollBar->setRange(0, maxH);
|
||||
m_horizontalScrollBar->setPageStep(stepH);
|
||||
m_horizontalScrollBar->setValue(valueH);
|
||||
}
|
||||
else
|
||||
pix = img.scaled(img.size() * m_scale, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||
m_horizontalScrollBar->hide();
|
||||
|
||||
m_label->setPixmap(pix);
|
||||
m_label->resize(pix.size());
|
||||
|
||||
horizontalScrollBar()->setValue(horizontalScrollBar()->maximum() / 2);
|
||||
verticalScrollBar()->setValue(verticalScrollBar()->maximum() / 2);
|
||||
}
|
||||
|
||||
void ImageScrollArea::setScale(float scale)
|
||||
{
|
||||
if(scale > 4 || (scale < 0.2 && scale > 0) || m_pixmap.isNull())
|
||||
return;
|
||||
|
||||
m_scale = scale;
|
||||
QSize newSize = m_scale < 0 ? size() : m_pixmap.size()*scale;
|
||||
m_label->setPixmap(m_pixmap.scaled(newSize, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
m_label->resize(newSize);
|
||||
if(maxV > 0)
|
||||
{
|
||||
m_verticalScrollBar->show();
|
||||
m_verticalScrollBar->setRange(0, maxV);
|
||||
m_verticalScrollBar->setPageStep(stepV);
|
||||
m_verticalScrollBar->setValue(valueV);
|
||||
}
|
||||
else
|
||||
m_verticalScrollBar->hide();
|
||||
}
|
||||
|
||||
void ImageScrollArea::zoomIn()
|
||||
{
|
||||
if(m_scale < 0)
|
||||
m_scale = (float)size().width()/m_pixmap.size().width();
|
||||
|
||||
setScale(m_scale + 0.1);
|
||||
m_imageWidget->zoom(1);
|
||||
}
|
||||
|
||||
void ImageScrollArea::zoomOut()
|
||||
{
|
||||
if(m_scale < 0)
|
||||
m_scale = (float)size().width()/m_pixmap.size().width();
|
||||
|
||||
setScale(m_scale - 0.1);
|
||||
m_imageWidget->zoom(-1);
|
||||
}
|
||||
|
||||
void ImageScrollArea::bestFit()
|
||||
{
|
||||
setScale(-1);
|
||||
m_horizontalScrollBar->hide();
|
||||
m_verticalScrollBar->hide();
|
||||
m_imageWidget->bestFit();
|
||||
}
|
||||
|
||||
void ImageScrollArea::oneToOne()
|
||||
{
|
||||
setScale(1);
|
||||
m_imageWidget->zoom(0);
|
||||
}
|
||||
|
||||
void ImageScrollArea::keyPressEvent(QKeyEvent *event)
|
||||
void ImageScrollArea::imageLoaded(Image *image)
|
||||
{
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
void ImageScrollArea::keyReleaseEvent(QKeyEvent *event)
|
||||
{
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
void ImageScrollArea::mouseMoveEvent(QMouseEvent *event)
|
||||
{
|
||||
QPoint delta = m_lastPos - event->pos();
|
||||
horizontalScrollBar()->setValue(horizontalScrollBar()->value() + delta.x());
|
||||
verticalScrollBar()->setValue(verticalScrollBar()->value() + delta.y());
|
||||
m_lastPos = event->pos();
|
||||
}
|
||||
|
||||
void ImageScrollArea::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
m_lastPos = event->pos();
|
||||
}
|
||||
|
||||
void ImageScrollArea::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
if(m_scale < 0 && !m_pixmap.isNull())
|
||||
if(image && image->rawImage())
|
||||
{
|
||||
m_label->setPixmap(m_pixmap.scaled(event->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
m_label->resize(event->size());
|
||||
m_imageWidget->setImage(image->rawImage(), image->number());
|
||||
m_imageWidget->setWCS(image->info().wcs);
|
||||
}
|
||||
QScrollArea::resizeEvent(event);
|
||||
}
|
||||
|
||||
void ImageScrollArea::wheelEvent(QWheelEvent *event)
|
||||
void ImageScrollArea::thumbnailLoaded(const Image *image)
|
||||
{
|
||||
if(m_scale < 0)
|
||||
m_scale = (float)size().width()/m_pixmap.size().width();
|
||||
|
||||
QPointF top(horizontalScrollBar()->value(), verticalScrollBar()->value());
|
||||
QPointF mousePos = (top + event->position()) / m_scale;
|
||||
|
||||
QPoint delta = event->angleDelta();
|
||||
if(delta.y() > 0)
|
||||
setScale(m_scale + 0.1);
|
||||
else
|
||||
setScale(m_scale - 0.1);
|
||||
|
||||
mousePos *= m_scale;
|
||||
top = mousePos - event->position();
|
||||
horizontalScrollBar()->setValue(top.x());
|
||||
verticalScrollBar()->setValue(top.y());
|
||||
m_imageWidget->thumbnailLoaded(image);
|
||||
}
|
||||
|
||||
void ImageScrollArea::setMTFParams(const MTFParam ¶ms)
|
||||
{
|
||||
m_imageWidget->setMTFParams(params);
|
||||
}
|
||||
|
||||
void ImageScrollArea::invert(bool enable)
|
||||
{
|
||||
m_imageWidget->invert(enable);
|
||||
}
|
||||
|
||||
void ImageScrollArea::superPixel(bool enable)
|
||||
{
|
||||
m_imageWidget->superPixel(enable);
|
||||
}
|
||||
|
||||
void ImageScrollArea::falseColor(bool enable)
|
||||
{
|
||||
m_imageWidget->falseColor(enable);
|
||||
}
|
||||
|
||||
QImage ImageScrollArea::renderToImage()
|
||||
{
|
||||
return m_imageWidget->renderToImage();
|
||||
}
|
||||
|
||||
void ImageScrollArea::scrollEvent()
|
||||
{
|
||||
m_imageWidget->setOffset(m_horizontalScrollBar->value(), m_verticalScrollBar->value());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user