23 #include <qpushbutton.h>
28 #include <qinputdialog.h>
29 #include <QMessageBox>
31 #include <QHBoxLayout>
33 #include <QGridLayout>
51 #define TR(id) OLocalizator::getString("TYFaceModelerPickEditor", (id))
52 #define IMG(id) OLocalizator::getPicture("TYPickEditor", (id))
65 QMenu* pPopup =
new QMenu(NULL);
67 std::map<QAction*, int> retCodes;
68 std::map<QAction*, LPTYGeometryNode> posRetCodes;
69 std::map<QAction*, TYAcousticRectangle*> dupRetCodes;
70 std::map<QAction*, TYAcousticRectangle*> dimAccRectRetCodes;
71 std::map<QAction*, TYAcousticRectangle*> remAccRectRetCodes;
75 while ((i < pElts->size()) && (i + 1 < pElts->size()))
80 QFont font = pPopup->font();
81 code = pPopup->addAction(QIcon(QPixmap(
IMG(
"id_icon_editeelt"))),
92 code = pPopup->addAction(
TR(
"id_popup_dimension"));
100 code = pPopup->addAction(QIcon(
IMG(
"id_icon_moving")),
TR(
"id_popup_position"));
109 code = pPopup->addAction(QIcon(QPixmap(
IMG(
"id_icon_duplicate"))),
TR(
"id_popup_duplicate"));
114 code = pPopup->addAction(QIcon(QPixmap(
IMG(
"id_icon_del"))),
TR(
"id_popup_remove"));
117 pPopup->addSeparator();
122 code = pPopup->addAction(QIcon(QPixmap(
IMG(
"id_icon_editeelt"))),
134 QAction* popupRet = pPopup->exec(QCursor::pos());
136 if (retCodes.find(popupRet) != retCodes.end())
138 pElts->at(retCodes[popupRet])->edit(
_pModeler);
140 else if (dimAccRectRetCodes.find(popupRet) != dimAccRectRetCodes.end())
144 else if (posRetCodes.find(popupRet) != posRetCodes.end())
152 else if (remAccRectRetCodes.find(popupRet) != remAccRectRetCodes.end())
160 pParent->updateGraphicTree();
167 else if (dupRetCodes.find(popupRet) != dupRetCodes.end())
169 dupRetCodes[popupRet]->setParent(pParent);
184 if (pElement ==
nullptr)
190 if (pVolParent ==
nullptr)
196 if (pGeoNode ==
nullptr)
206 pCopy->deepCopy(pGeoNode,
false);
212 ORepere3D repere = pCopy->getORepere3D();
217 pCopy->setRepere(repere);
219 pCopy->updateGraphicTree();
242 pDlg->setWindowTitle(
TR(
"id_popup_dimension"));
244 QGridLayout* pLayout =
new QGridLayout();
245 pDlg->setLayout(pLayout);
247 QBoxLayout* pEditLayout =
new QHBoxLayout();
248 pEditLayout->setContentsMargins(10, 10, 10, 10);
249 pLayout->addLayout(pEditLayout, 0, 1);
254 float sizeX = NAN, sizeY = NAN;
258 QLabel* pXLabelName =
new QLabel(pDlg);
259 pXLabelName->setText(
TR(
"id_x_label"));
260 pEditLayout->addWidget(pXLabelName);
262 pXLineEdit->setFixedWidth(60);
263 pXLineEdit->setText(QString().setNum(sizeX,
'f', 2));
264 pEditLayout->addWidget(pXLineEdit);
267 pEditLayout->addSpacing(10);
268 QLabel* pYLabelName =
new QLabel(pDlg);
269 pYLabelName->setText(
TR(
"id_y_label"));
270 pEditLayout->addWidget(pYLabelName);
272 pYLineEdit->setFixedWidth(60);
273 pYLineEdit->setText(QString().setNum(sizeY,
'f', 2));
274 pEditLayout->addWidget(pYLineEdit);
276 QBoxLayout* pBtnLayout =
new QHBoxLayout();
277 pLayout->addLayout(pBtnLayout, 1, 1);
279 pBtnLayout->addStretch(1);
281 QPushButton* pButtonOK =
new QPushButton(
TR(
"id_ok_btn"), pDlg);
282 pButtonOK->setDefault(
true);
283 QObject::connect(pButtonOK, &QPushButton::clicked, pDlg, &QDialog::accept);
284 pBtnLayout->addWidget(pButtonOK);
286 QPushButton* pButtonCancel =
new QPushButton(
TR(
"id_cancel_btn"), pDlg);
287 pButtonCancel->setShortcut(Qt::Key_Escape);
288 QObject::connect(pButtonCancel, &QPushButton::clicked, pDlg, &QDialog::reject);
289 pBtnLayout->addWidget(pButtonCancel);
292 int ret = pDlg->exec();
295 if (ret == QDialog::Accepted)
299 float sizeX = pXLineEdit->text().toDouble();
300 float sizeY = pYLineEdit->text().toDouble();
302 if (sizeX <= 1E-4 || sizeY <= 1.E-4)
304 QMessageBox::warning(
_pModeler,
"Tympan",
TR(
"id_warning_size_not_ok"),
321 pRect->updateGraphicTree();
TYGeometryNode TYAcousticRectangleGeoNode
Noeud geometrique de type TYAcousticRectangle.
fichier contenant differents types d'actions (fichier header)
TYMainWindow * getTYMainWnd()
Retourne le pointeur sur la fenetre principale.
pour l'application Tympan (fichier header)
gestion du picking des faces (fichier header)
outil IHM pour une entrée utilisateur (fichier header)
Fenetre principale de l'application Tympan (fichier header)
Classe generique pour une fenetre de modeleur (fichier header)
Objet pour le picking graphique (fichier header)
double _y
y coordinate of OCoord3D
double _x
x coordinate of OCoord3D
virtual OPrototype * clone() const =0
3D frame with a point and 3 vectors.
OPoint3D _origin
The origin point.
void updateSiteFrame()
Reconstruit l'arborescence du TYSiteFrame.
TYModelerFrame * _pModeler
Le modeler associe a cet editor.
bool addSubRect(LPTYAcousticRectangleGeoNode pAccRectGeoNode)
virtual void updateGrid()
virtual bool remAcousticSurf(const LPTYAcousticSurfaceGeoNode pAccSurfGeoNode)
LPTYAcousticSurfaceGeoNode findAcousticSurf(const LPTYAcousticSurface pAccSurf)
void addAction(TYAction *pAction)
Ajoute une nouvelle action a l'historique.
Definit une action, necessaire pour la gestion de l'undo.
ajout d'une surface acoustique a un ensemble de surfaces acoustiques
TYElement * getParent() const
static void setIsSavedOk(const bool &toSave)
virtual void setIsGeometryModified(bool isModified)
TYFaceModelerPickEditor(TYModelerFrame *pModeler)
~TYFaceModelerPickEditor()
void showDimensionsDialog(TYRectangle *pRect, TYAcousticRectangleNode *pParent=NULL)
void copyRectangle(TYElement *pElement)
virtual void showPopupMenu(std::shared_ptr< LPTYElementArray > pElts)
static TYGeometryNode * GetGeoNode(TYElement *pElement)
void updateModelers(bool clipping=true, bool axesAndGrid=true, bool displayList=true)
Generic class for a modeler window.
TYActionManager * getActionManager()
bool askForResetResultat()
gestion de l'element actionne par picking
void showPositionDialog(TYGeometryNode *pGeoNode, bool activeHeight)
void setSize(float sizeX, float sizeY)
void getSize(float &sizeX, float &sizeY)
suppression d'une surface acoustique a un ensemble de surfaces acoustiques
Action de redimensionnement d'un rectangle.