File indexing completed on 2024-05-12 04:06:21

0001 /*
0002     SPDX-FileCopyrightText: 2010 Johannes Loehnert <loehnert.kde@gmx.de>
0003     SPDX-FileCopyrightText: 2010 Stefan Majewsky <majewsky@gmx.net>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef PALAPELISLICERS_GOLDBERG_GRID_H
0009 #define PALAPELISLICERS_GOLDBERG_GRID_H
0010 
0011 #include <KLocalizedString>
0012 #include <Pala/SlicerMode>
0013 
0014 #include "goldberg-engine.h"
0015 
0016 class GoldbergMode : public Pala::SlicerMode
0017 {
0018     public:
0019         GoldbergMode(const QByteArray& key, const QString& name) : Pala::SlicerMode(key, name) {}
0020         ~GoldbergMode() override {}
0021         virtual void generateGrid(GoldbergEngine *e, int piece_count) const = 0;
0022 };
0023 
0024 class PresetMode : public GoldbergMode
0025 {
0026     public:
0027         PresetMode() : GoldbergMode("preset", i18nc("Puzzle grid type", "Predefined settings")) {}
0028         void generateGrid(GoldbergEngine *e, int piece_count) const override;
0029 };
0030 
0031 class CairoMode : public GoldbergMode
0032 {
0033     public:
0034         CairoMode() : GoldbergMode("cairo", i18nc("Puzzle grid type", "Cairo (pentagonal) grid")) {}
0035         void generateGrid(GoldbergEngine *e, int piece_count) const override;
0036 };
0037 
0038 class HexMode : public GoldbergMode
0039 {
0040     public:
0041         HexMode() : GoldbergMode("hex", i18nc("Puzzle grid type", "Hexagonal grid")) {}
0042         void generateGrid(GoldbergEngine *e, int piece_count) const override;
0043 };
0044 
0045 class RectMode : public GoldbergMode
0046 {
0047     public:
0048         RectMode() : GoldbergMode("rect", i18nc("Puzzle grid type", "Rectangular grid")) {}
0049         void generateGrid(GoldbergEngine *e, int piece_count) const override;
0050 };
0051 
0052 class RotrexMode : public GoldbergMode
0053 {
0054     public:
0055         RotrexMode() : GoldbergMode("rotrex", i18nc("Puzzle grid type", "Rotrex (rhombi-trihexagonal) grid")) {}
0056         void generateGrid(GoldbergEngine *e, int piece_count) const override;
0057 };
0058 
0059 class IrregularMode : public GoldbergMode
0060 {
0061     public:
0062         IrregularMode() : GoldbergMode("irreg", i18nc("Puzzle grid type", "Irregular grid")) {}
0063 
0064         /// Checks if qvoronoi executable is there.
0065         static bool checkForQVoronoi();
0066 
0067         void generateGrid(GoldbergEngine *e, int piece_count) const override;
0068     private:
0069         void generateVoronoiGrid(GoldbergEngine *e, QList<QPointF> cell_centers) const;
0070 };
0071 
0072 #endif // PALAPELISLICERS_GOLDBERG_GRID_H