Part: refactor DlgPrimitives dialog

This commit is contained in:
wmayer
2023-01-03 15:53:12 +01:00
parent f039789d0b
commit f1481b1f0c
2 changed files with 1906 additions and 1478 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -39,6 +39,22 @@ namespace Gui { class Document; }
namespace Part {
class Feature;
class Primitive;
class Plane;
class Box;
class Cylinder;
class Cone;
class Sphere;
class Ellipsoid;
class Torus;
class Prism;
class Wedge;
class Helix;
class Spiral;
class Circle;
class Ellipse;
class Vertex;
class Line;
class RegularPolygon;
}
namespace PartGui {
@@ -62,6 +78,320 @@ public:
};
class Ui_DlgPrimitives;
class AbstractPrimitive : public QObject
{
Q_OBJECT
public:
AbstractPrimitive(Part::Primitive* feature = nullptr);
virtual ~AbstractPrimitive() = default;
bool hasValidPrimitive() const;
virtual const char* getDefaultName() const = 0;
virtual QString create(const QString& objectName, const QString& placement) const = 0;
virtual QString change(const QString& objectName, const QString& placement) const = 0;
public Q_SLOTS:
virtual void changeValue(QWidget*) = 0;
protected:
void connectSignalMapper(QWidget *sender, const char *signal, QSignalMapper* mapper);
protected:
App::DocumentObjectWeakPtrT featurePtr;
};
// ----------------------------------------------------------------------------
class PlanePrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
PlanePrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Plane* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class BoxPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
BoxPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Box* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class CylinderPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
CylinderPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Cylinder* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class ConePrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
ConePrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Cone* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class SpherePrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
SpherePrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Sphere* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class EllipsoidPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
EllipsoidPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Ellipsoid* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class TorusPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
TorusPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Torus* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class PrismPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
PrismPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Prism* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class WedgePrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
WedgePrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Wedge* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class HelixPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
HelixPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Helix* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class SpiralPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
SpiralPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Spiral* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class CirclePrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
CirclePrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Circle* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class EllipsePrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
EllipsePrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Ellipse* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class PolygonPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
PolygonPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::RegularPolygon* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class LinePrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
LinePrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Line* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class VertexPrimitive : public AbstractPrimitive
{
Q_OBJECT
public:
VertexPrimitive(std::shared_ptr<Ui_DlgPrimitives> ui, Part::Vertex* feature = nullptr);
const char* getDefaultName() const override;
QString create(const QString& objectName, const QString& placement) const override;
QString change(const QString& objectName, const QString& placement) const override;
void changeValue(QWidget*) override;
private:
std::shared_ptr<Ui_DlgPrimitives> ui;
};
// ----------------------------------------------------------------------------
class DlgPrimitives : public QWidget
{
Q_OBJECT
@@ -73,66 +403,25 @@ public:
void accept(const QString&);
void reject();
private Q_SLOTS:
void on_buttonCircleFromThreePoints_clicked();
void onChangePlane(QWidget*);
void onChangeBox(QWidget*);
void onChangeCylinder(QWidget*);
void onChangeCone(QWidget*);
void onChangeSphere(QWidget*);
void onChangeEllipsoid(QWidget*);
void onChangeTorus(QWidget*);
void onChangePrism(QWidget*);
void onChangeWedge(QWidget*);
void onChangeHelix(QWidget*);
void onChangeSpiral(QWidget*);
void onChangeCircle(QWidget*);
void onChangeEllipse(QWidget*);
void onChangeVertex(QWidget*);
void onChangeLine(QWidget*);
void onChangeRegularPolygon(QWidget*);
private:
void buttonCircleFromThreePoints();
private:
QString createPlane(const QString& objectName, const QString& placement) const;
QString createBox(const QString& objectName, const QString& placement) const;
QString createCylinder(const QString& objectName, const QString& placement) const;
QString createCone(const QString& objectName, const QString& placement) const;
QString createSphere(const QString& objectName, const QString& placement) const;
QString createEllipsoid(const QString& objectName, const QString& placement) const;
QString createTorus(const QString& objectName, const QString& placement) const;
QString createPrism(const QString& objectName, const QString& placement) const;
QString createWedge(const QString& objectName, const QString& placement) const;
QString createHelix(const QString& objectName, const QString& placement) const;
QString createSpiral(const QString& objectName, const QString& placement) const;
QString createCircle(const QString& objectName, const QString& placement) const;
QString createEllipse(const QString& objectName, const QString& placement) const;
QString createVertex(const QString& objectName, const QString& placement) const;
QString createLine(const QString& objectName, const QString& placement) const;
QString createRegularPolygon(const QString& objectName, const QString& placement) const;
QString changePlane(const QString& objectName, const QString& placement) const;
QString changeBox(const QString& objectName, const QString& placement) const;
QString changeCylinder(const QString& objectName, const QString& placement) const;
QString changeCone(const QString& objectName, const QString& placement) const;
QString changeSphere(const QString& objectName, const QString& placement) const;
QString changeEllipsoid(const QString& objectName, const QString& placement) const;
QString changeTorus(const QString& objectName, const QString& placement) const;
QString changePrism(const QString& objectName, const QString& placement) const;
QString changeWedge(const QString& objectName, const QString& placement) const;
QString changeHelix(const QString& objectName, const QString& placement) const;
QString changeSpiral(const QString& objectName, const QString& placement) const;
QString changeCircle(const QString& objectName, const QString& placement) const;
QString changeEllipse(const QString& objectName, const QString& placement) const;
QString changeVertex(const QString& objectName, const QString& placement) const;
QString changeLine(const QString& objectName, const QString& placement) const;
QString changeRegularPolygon(const QString& objectName, const QString& placement) const;
static void pickCallback(void * ud, SoEventCallback * n);
void executeCallback(Picker*);
void connectSignalMapper(QWidget *sender, const char *signal, QSignalMapper* mapper);
void acceptChanges(const QString&);
void tryCreatePrimitive(const QString&);
void addPrimitive(std::shared_ptr<AbstractPrimitive>);
std::shared_ptr<AbstractPrimitive> getPrimitive(int index) const;
int findIndexOfValidPrimitive() const;
void activatePage();
private:
std::unique_ptr<Ui_DlgPrimitives> ui;
using AbstractPrimitivePtr = std::shared_ptr<AbstractPrimitive>;
std::vector<AbstractPrimitivePtr> primitive;
std::shared_ptr<Ui_DlgPrimitives> ui;
App::DocumentObjectWeakPtrT featurePtr;
};