diff --git a/src/Mod/Part/Gui/CMakeLists.txt b/src/Mod/Part/Gui/CMakeLists.txt index 0312b08a99..bee5d964cb 100644 --- a/src/Mod/Part/Gui/CMakeLists.txt +++ b/src/Mod/Part/Gui/CMakeLists.txt @@ -53,6 +53,7 @@ set(PartGui_MOC_HDRS DlgSettings3DViewPartImp.h DlgSettingsGeneral.h DlgSettingsObjectColor.h + DlgProjectionOnSurface.h PropertyEnumAttacherItem.h TaskFaceColors.h TaskShapeBuilder.h @@ -91,6 +92,7 @@ set(PartGui_UIC_SRCS DlgSettings3DViewPart.ui DlgSettingsGeneral.ui DlgSettingsObjectColor.ui + DlgProjectionOnSurface.ui TaskFaceColors.ui TaskShapeBuilder.ui TaskLoft.ui @@ -161,6 +163,9 @@ SET(PartGui_SRCS DlgSettingsObjectColor.cpp DlgSettingsObjectColor.h DlgSettingsObjectColor.ui + DlgProjectionOnSurface.cpp + DlgProjectionOnSurface.h + DlgProjectionOnSurface.ui Resources/Part.qrc PreCompiled.cpp PreCompiled.h diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index de8f4e4fc4..9b6cf5464c 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -64,6 +64,7 @@ #include "DlgRevolution.h" #include "DlgFilletEdges.h" #include "DlgPrimitives.h" +#include "DlgProjectionOnSurface.h" #include "CrossSections.h" #include "Mirroring.h" #include "ViewProvider.h" @@ -2371,6 +2372,35 @@ bool CmdBoxSelection::isActive(void) return hasActiveDocument(); } +//=========================================================================== +// Part_projectionOnSurface +//=========================================================================== +DEF_STD_CMD_A(CmdPartProjectionOnSurface); + +CmdPartProjectionOnSurface::CmdPartProjectionOnSurface() + :Command("Part_projectionOnSurface") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Create projection on surface..."); + sToolTipText = QT_TR_NOOP("Create projection on surface..."); + sWhatsThis = "Part_projectionOnSurface"; + sStatusTip = sToolTipText; + sPixmap = "Part_Extrude"; +} + +void CmdPartProjectionOnSurface::activated(int iMsg) +{ + Q_UNUSED(iMsg); + PartGui::TaskProjectionOnSurface* dlg = new PartGui::TaskProjectionOnSurface(); + Gui::Control().showDialog(dlg); +} + +bool CmdPartProjectionOnSurface::isActive(void) +{ + return (hasActiveDocument() && !Gui::Control().activeDialog()); +} + void CreatePartCommands(void) { Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); @@ -2419,4 +2449,5 @@ void CreatePartCommands(void) rcCmdMgr.addCommand(new CmdMeasureToggle3d()); rcCmdMgr.addCommand(new CmdMeasureToggleDelta()); rcCmdMgr.addCommand(new CmdBoxSelection()); + rcCmdMgr.addCommand(new CmdPartProjectionOnSurface()); } diff --git a/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp b/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp new file mode 100644 index 0000000000..850522c8b2 --- /dev/null +++ b/src/Mod/Part/Gui/DlgProjectionOnSurface.cpp @@ -0,0 +1,62 @@ +#include "PreCompiled.h" + +#include "DlgProjectionOnSurface.h" +#include "ui_DlgProjectionOnSurface.h" + +#include + + + +using namespace PartGui; + +DlgProjectionOnSurface::DlgProjectionOnSurface(QWidget *parent) : + QDialog(parent), + ui(new Ui::DlgProjectionOnSurface) +{ + ui->setupUi(this); +} + +DlgProjectionOnSurface::~DlgProjectionOnSurface() +{ + delete ui; +} + +TaskProjectionOnSurface::TaskProjectionOnSurface() +{ + widget = new DlgProjectionOnSurface(); + taskbox = new Gui::TaskView::TaskBox( + Gui::BitmapFactory().pixmap("Part_Extrude"), + widget->windowTitle(), true, 0); + taskbox->groupLayout()->addWidget(widget); + Content.push_back(taskbox); +} + +TaskProjectionOnSurface::~TaskProjectionOnSurface() +{ + // automatically deleted in the sub-class +} + +bool TaskProjectionOnSurface::accept() +{ + widget->accept(); + return (widget->result() == QDialog::Accepted); +} + +bool TaskProjectionOnSurface::reject() +{ + widget->reject(); + return true; +} + +void TaskProjectionOnSurface::clicked(int id) +{ + if (id == QDialogButtonBox::Apply) { + try { + //widget->apply(); + } + catch (Base::AbortException&) { + + }; + } +} + diff --git a/src/Mod/Part/Gui/DlgProjectionOnSurface.h b/src/Mod/Part/Gui/DlgProjectionOnSurface.h new file mode 100644 index 0000000000..63c97417c2 --- /dev/null +++ b/src/Mod/Part/Gui/DlgProjectionOnSurface.h @@ -0,0 +1,52 @@ +#ifndef DLGPROJECTIONONSURFACE_H +#define DLGPROJECTIONONSURFACE_H + +#include + +#include +#include + +namespace Ui { +} + +namespace PartGui { + + class Ui_DlgProjectionOnSurface; + +class DlgProjectionOnSurface : public QDialog +{ + //Q_OBJECT + +public: + explicit DlgProjectionOnSurface(QWidget *parent = 0); + ~DlgProjectionOnSurface(); + +private: + Ui_DlgProjectionOnSurface*ui; +}; + +class TaskProjectionOnSurface : public Gui::TaskView::TaskDialog +{ + //Q_OBJECT + +public: + TaskProjectionOnSurface(); + ~TaskProjectionOnSurface(); + +public: + bool accept(); + bool reject(); + void clicked(int); + + virtual QDialogButtonBox::StandardButtons getStandardButtons() const + { + return QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Close; + } + +private: + DlgProjectionOnSurface* widget; + Gui::TaskView::TaskBox* taskbox; +}; + +} // namespace PartGui +#endif // DLGPROJECTIONONSURFACE_H diff --git a/src/Mod/Part/Gui/DlgProjectionOnSurface.ui b/src/Mod/Part/Gui/DlgProjectionOnSurface.ui new file mode 100644 index 0000000000..bc24847d5c --- /dev/null +++ b/src/Mod/Part/Gui/DlgProjectionOnSurface.ui @@ -0,0 +1,32 @@ + + + DlgProjectionOnSurface + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 180 + 120 + 75 + 23 + + + + PushButton + + + + + + diff --git a/src/Mod/Part/Gui/Workbench.cpp b/src/Mod/Part/Gui/Workbench.cpp index bad5f1f02a..7ac930a675 100644 --- a/src/Mod/Part/Gui/Workbench.cpp +++ b/src/Mod/Part/Gui/Workbench.cpp @@ -134,6 +134,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Part_Offset" << "Part_Offset2D" << "Part_Thickness" + << "Part_projectionOnSurface" << "Separator" << "Part_EditAttachment"; @@ -188,7 +189,8 @@ Gui::ToolBarItem* Workbench::setupToolBars() const << "Part_Loft" << "Part_Sweep" << "Part_CompOffset" - << "Part_Thickness"; + << "Part_Thickness" + << "Part_projectionOnSurface"; Gui::ToolBarItem* boolop = new Gui::ToolBarItem(root); boolop->setCommand("Boolean");