111 lines
2.2 KiB
C
111 lines
2.2 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
#include "mappresent_global.h"
|
|||
|
|
#include <QWidget>
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
struct PresentIndex {
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>к<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
int row = 0;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20>к<EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
int col = 0;
|
|||
|
|
|
|||
|
|
PresentIndex& operator+=(const PresentIndex& other);
|
|||
|
|
bool operator!=(const PresentIndex& other) const;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|||
|
|
/// </summary>
|
|||
|
|
struct PresentOption {
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
PresentIndex selfIndex;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե
|
|||
|
|
/// </summary>
|
|||
|
|
QRectF selfOutline;
|
|||
|
|
|
|||
|
|
bool isMouseOver = false;
|
|||
|
|
bool isSelected = false;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>ί<EFBFBD><CEAF>
|
|||
|
|
/// </summary>
|
|||
|
|
class UnitPresentDelegate {
|
|||
|
|
public:
|
|||
|
|
virtual ~UnitPresentDelegate() = default;
|
|||
|
|
/// <summary>
|
|||
|
|
/// ƥ<>䵥Ԫ<E4B5A5><D4AA><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
virtual int unitType() const = 0;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>Ԫ<EFBFBD><D4AA>Ƭ
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="p"></param>
|
|||
|
|
/// <param name="option"></param>
|
|||
|
|
virtual void paint(QPainter* p, const PresentOption& option) = 0;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
class BasicUnitDelegate : public UnitPresentDelegate {
|
|||
|
|
public:
|
|||
|
|
int unitType() const override;
|
|||
|
|
|
|||
|
|
void paint(QPainter* p, const PresentOption& option) override;
|
|||
|
|
QList<QPointF> endPointsGet(const QRectF &rect);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
class MAPPRESENT_EXPORT MapPresent : public QWidget
|
|||
|
|
{
|
|||
|
|
Q_OBJECT
|
|||
|
|
private:
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>α䳤
|
|||
|
|
/// </summary>
|
|||
|
|
const float _primitive_region_square_len = 100;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
short _scale_times = 1;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ǰ<EFBFBD><C7B0>Ƭ<EFBFBD><C6AC>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
PresentIndex _center_index;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
MapPresent(QWidget* parent = nullptr);
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// ͨ<><CDA8>widget<65>϶<EFBFBD>λ<EFBFBD><CEBB>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="pos"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
PresentIndex indexGet(const QPointF& pos) const;
|
|||
|
|
/// <summary>
|
|||
|
|
/// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="idx"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
QRectF outlineGet(const PresentIndex& idx) const;
|
|||
|
|
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
void paintEvent(QPaintEvent* ev) override;
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
QList<PresentIndex> siblingsGet(const PresentIndex ¢er, uint16_t dist=1) const;
|
|||
|
|
QList<PresentIndex> itemFills(const PresentIndex &a, const PresentIndex &b) const;
|
|||
|
|
};
|