2 #include "VisuGUI_OffsetDlg.h"
5 #include "VisuGUI_Tools.h"
7 #include "VISU_ViewManager_i.hh"
8 #include "VISU_Actor.h"
10 #include "SalomeApp_Application.h"
11 #include "SVTK_ViewWindow.h"
12 #include "SVTK_ViewModel.h"
13 #include "SUIT_Desktop.h"
15 #include "QtxDblSpinBox.h"
18 #include "vtkRenderer.h"
24 #include <qcheckbox.h>
25 #include <qgroupbox.h>
26 #include <qpushbutton.h>
32 VisuGUI_OffsetDlg::VisuGUI_OffsetDlg (VisuGUI* theModule)
33 : QDialog(VISU::GetDesktop(theModule), 0, false, WStyle_Customize |
34 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | WDestructiveClose),
37 myPrsList.setAutoDelete(false);
39 setName("VisuGUI_OffsetDlg");
40 setCaption(tr("TIT_OFFSETDLG"));
41 setSizeGripEnabled(TRUE);
43 QVBoxLayout* TopLayout = new QVBoxLayout (this);
44 TopLayout->setSpacing(6);
45 TopLayout->setMargin(11);
47 QHBox* aOffsetsPane = new QHBox (this);
48 aOffsetsPane->setSpacing(6);
50 new QLabel ("dX:", aOffsetsPane);
51 myDxEdt = new QtxDblSpinBox (aOffsetsPane, "myDxEdt");
52 myDxEdt->setRange(-MAXVAL, MAXVAL);
54 new QLabel("dY:", aOffsetsPane);
55 myDyEdt = new QtxDblSpinBox (aOffsetsPane, "myDyEdt");
56 myDyEdt->setRange(-MAXVAL, MAXVAL);
58 new QLabel("dZ:", aOffsetsPane);
59 myDzEdt = new QtxDblSpinBox (aOffsetsPane, "myDzEdt");
60 myDzEdt->setRange(-MAXVAL, MAXVAL);
62 QPushButton* aResetBtn = new QPushButton(tr("BTN_RESET"), aOffsetsPane);
63 connect(aResetBtn, SIGNAL(clicked()), this, SLOT(onReset()));
65 TopLayout->addWidget(aOffsetsPane);
67 if (!VISU::GetCStudy(VISU::GetAppStudy(theModule))->GetProperties()->IsLocked()) {
68 mySaveChk = new QCheckBox ("Save to presentation", this);
69 TopLayout->addWidget(mySaveChk);
70 mySaveChk->setChecked(true);
75 // Common buttons ===========================================================
76 QGroupBox* GroupButtons = new QGroupBox(this, "GroupButtons");
77 GroupButtons->setColumnLayout(0, Qt::Vertical);
78 GroupButtons->layout()->setSpacing(0);
79 GroupButtons->layout()->setMargin(0);
80 QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout());
81 GroupButtonsLayout->setAlignment(Qt::AlignTop);
82 GroupButtonsLayout->setSpacing(6);
83 GroupButtonsLayout->setMargin(11);
85 QPushButton* buttonOk = new QPushButton(tr("&OK"), GroupButtons, "buttonOk");
86 buttonOk->setAutoDefault(TRUE);
87 buttonOk->setDefault(TRUE);
88 GroupButtonsLayout->addWidget(buttonOk, 0, 0);
89 GroupButtonsLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1);
91 QPushButton* buttonApply = new QPushButton(tr("&Apply"), GroupButtons, "buttonApply");
92 buttonOk->setAutoDefault(TRUE);
93 GroupButtonsLayout->addWidget(buttonApply, 0, 2);
94 GroupButtonsLayout->addItem(new QSpacerItem(5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 3);
96 QPushButton* buttonCancel = new QPushButton(tr("&Cancel") , GroupButtons, "buttonCancel");
97 buttonCancel->setAutoDefault(TRUE);
98 GroupButtonsLayout->addWidget(buttonCancel, 0, 4);
100 TopLayout->addWidget(GroupButtons);
102 connect(buttonOk, SIGNAL(clicked()), this, SLOT(accept()));
103 connect(buttonApply, SIGNAL(clicked()), this, SLOT(onApply()));
104 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
107 void VisuGUI_OffsetDlg::addPresentation (VISU::Prs3d_i* thePrs)
109 myPrsList.append(thePrs);
111 thePrs->GetOffset(aOffs.myOffset);
112 myOldOffsets.append(aOffs);
113 if (myPrsList.count() == 1) {
114 setOffset(aOffs.myOffset);
115 } else if (myPrsList.count() == 2) {
117 aOffset[0] = aOffset[1] = aOffset[2] = 0;
122 void VisuGUI_OffsetDlg::setOffset (const float* theOffset)
124 myDxEdt->setValue(theOffset[0]);
125 myDyEdt->setValue(theOffset[1]);
126 myDzEdt->setValue(theOffset[2]);
129 void VisuGUI_OffsetDlg::getOffset (float* theOffset) const
131 theOffset[0] = myDxEdt->value();
132 theOffset[1] = myDyEdt->value();
133 theOffset[2] = myDzEdt->value();
136 void VisuGUI_OffsetDlg::onReset()
138 myDxEdt->setValue(0);
139 myDyEdt->setValue(0);
140 myDzEdt->setValue(0);
143 bool VisuGUI_OffsetDlg::isToSave() const
146 return mySaveChk->isChecked();
151 void VisuGUI_OffsetDlg::updateOffset (VISU::Prs3d_i* thePrs, float* theOffset)
153 if (myPrsList.count() == 0) return;
155 if (isToSave()) thePrs->SetOffset(theOffset);
157 ViewManagerList aViewManagerList;
158 SalomeApp_Application* anApp = myModule->getApp();
159 anApp->viewManagers(SVTK_Viewer::Type(), aViewManagerList);
160 QPtrListIterator<SUIT_ViewManager> anVMIter (aViewManagerList);
161 for (; anVMIter.current(); ++anVMIter) {
162 SUIT_ViewManager* aViewManager = anVMIter.current();
163 QPtrVector<SUIT_ViewWindow> aViews = aViewManager->getViews();
164 for (int i = 0, iEnd = aViews.size(); i < iEnd; i++) {
165 if (SUIT_ViewWindow* aViewWindow = aViews.at(i)) {
166 if (SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>(aViewWindow)) {
167 vw->onAdjustTrihedron();
169 if (VISU_Actor* anActor = VISU::GetActor(thePrs, vw)) {
170 anActor->SetPosition(theOffset);
171 vw->getRenderer()->ResetCameraClippingRange();
174 Handle(SALOME_InteractiveObject) anIO;
175 CORBA::Object_var anObject = VISU::GetSelectedObj(myModule, &anIO);
176 if (!CORBA::is_nil(anObject))
177 vw->highlight(anIO, 1);
185 void VisuGUI_OffsetDlg::accept()
189 for (int i = 0; i < myPrsList.count(); i++) {
190 updateOffset(myPrsList.at(i), aOffset);
195 void VisuGUI_OffsetDlg::reject()
197 for (int i = 0; i < myPrsList.count(); i++) {
198 updateOffset(myPrsList.at(i), myOldOffsets[i].myOffset);
203 void VisuGUI_OffsetDlg::onApply()
207 for (int i = 0; i < myPrsList.count(); i++) {
208 updateOffset(myPrsList.at(i), aOffset);