/*
    QAD - Qt ADvanced

    Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru

    This program 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.

    This program 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 Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef IMAGE_VIEW_H
#define IMAGE_VIEW_H

#include "qad_widgets_export.h"

#include <QGraphicsView>


class QGraphicsPixmapItem;


class QAD_WIDGETS_EXPORT ImageView: public QGraphicsView {
	Q_OBJECT
	Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
	Q_PROPERTY(bool viewInteractive READ viewInteractive WRITE setViewInteractive)
	Q_PROPERTY(bool smoothBigImages READ isSmoothBigImages WRITE setSmoothBigImages)

public:
	ImageView(QWidget * parent = nullptr);
	~ImageView() override;

	void setImage(const QImage & i, bool save = true);
	void setImage(const QByteArray & i);
	QByteArray image() const { return im_data; }
	QPixmap pixmap() const;
	bool viewInteractive() const { return interactive_; }
	void clear();

	bool isSmoothBigImages() const { return smooth_big; }
	void setSmoothBigImages(bool yes);

public slots:
	void autofit();
	void setPixmap(QPixmap pixmap);
	void setViewInteractive(bool yes);

signals:
	void clicked(QPointF, Qt::MouseButtons);
	void hovered(QPointF, Qt::MouseButtons);
	void released(QPointF, Qt::MouseButtons);

private:
	void mouseDoubleClickEvent(QMouseEvent *) override;
	void mousePressEvent(QMouseEvent * e) override;
	void mouseMoveEvent(QMouseEvent * e) override;
	void mouseReleaseEvent(QMouseEvent * e) override;
	void wheelEvent(QWheelEvent * e) override;
	bool eventFilter(QObject * o, QEvent * e) override;
	void adjustView();

	QGraphicsPixmapItem * item;
	QByteArray im_data;
	QPoint prev_pos;
	bool autofit_, interactive_, smooth_big;
	QPixmap map;
};

#endif // IMAGE_VIEW_H
