#ifndef IMAGEVIEW_H
#define IMAGEVIEW_H

#include <QWidget>
#include <QPixmap>
#include <QMouseEvent>
#include <QGraphicsView>
#include "CameraMaterialGroupWnd/MaterialWindow/DraggableLine.h"
#include <QRubberBand>

class ImageView : public QGraphicsView
{
    Q_OBJECT

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

    //����ͼƬ
    void setPixmap(const QPixmap& pixmap);
    void setCurPixmap(const QPixmap& pixmap);

    //���ñ��
    void addRuler();
    void cancelRuler();
    void setIsDrawing(bool drawing) { m_isDrawing = drawing; }

protected:
    void paintEvent(QPaintEvent* event) override;
    void mousePressEvent(QMouseEvent* event) override;
    void mouseMoveEvent(QMouseEvent* event) override;
    void mouseReleaseEvent(QMouseEvent* event) override;
    void wheelEvent(QWheelEvent* event) override;
    void resizeEvent(QResizeEvent* event) override;
    void scrollContentsBy(int dx, int dy) override;

private:
    void drawCrosshair(QPainter& painter);
private:
    QGraphicsPixmapItem* m_pixmapItem;
    QPixmap m_pixmap;
    QPoint m_lastMousePos;  // ��һ������λ��
    QPointF m_imageOffset;  // ͼƬ��ƫ����
    RulerLineItem* m_pRuleLine;
    QList<RulerLineItem*> m_pRuleLines;
    bool m_bMouseTranslate;
    qreal m_minScale;

    bool m_isDrawing;
    bool m_curDrawing;
    QPainterPath m_currentPath;
    QGraphicsPathItem* m_currentPathItem;
    QList<QGraphicsPathItem*> m_drawnPaths;
    QPoint m_rightClickPressPos;
    bool m_rightButtonPressed;
    //���
    bool m_isCreating;
    QPointF m_startPos;
    QGraphicsLineItem* m_pTempLine = nullptr;
    bool m_bRulerState;

    void saveImage();
    void clearDrawnLines();

};

#endif // IMAGEVIEW_H