MinetestMapperGUI/geometry.h

62 lines
1.6 KiB
C++

#ifndef GEOMETRY_H
#define GEOMETRY_H
#include <QDebug>
#include <QMap>
#include <QMetaEnum>
#include <QObject> // For Q_GADGET
#include <QRegularExpression>
class Geometry
{
Q_GADGET
public:
enum Format
{
FormatKeep = -2, // Special value used when setting geometry: don't change current format.
FormatUnknown = -1,
FormatNone = 0,
CenterDimensions = 1,
CornerDimensions = 2,
Corners = 3,
FormatCustom,
FormatMax
};
Q_ENUM(Format)
static const char *formatName(Geometry::Format id);
static Geometry::Format formatId(const QString &name);
static Geometry::Format formatId(const char *name);
int center[2];
int dimension[2];
int corner[2][2];
Geometry() { setMax(); }
Geometry(const char *s) { set(s); }
Geometry(const QString &s) { set(s); }
// Geometry(const Geometry &g);
Geometry::Format set(const QString &str);
void setMax();
void setCenterDimensions(int cx, int cy, int dx, int dy);
void setCornerDimensions(int cx, int cy, int dx, int dy);
void setCorners(int c0x, int c0y, int c1x, int c1y);
QString getString(Geometry::Format format = Geometry::FormatNone);
private:
static const QRegularExpression corners;
static const QRegularExpression centerDimension;
static const QRegularExpression cornerDimension;
static const QRegularExpression cornerDimensionAlternate;
bool adjustCorners();
void computeCorner0(void);
void computeCorner1();
void computeCenter(void); // Depends dimensions to be correct !
void computeDimensions();
Format format = FormatNone;
};
#endif // GEOMETRY_H