1 // Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #include "OCCViewer_AxialScaleDlg.h"
23 #include "OCCViewer_ViewWindow.h"
24 #include "OCCViewer_ViewPort3d.h"
26 #include <QtxDoubleSpinBox.h>
30 #include <QPushButton>
31 #include <QVBoxLayout>
32 #include <QHBoxLayout>
35 \class OCCViewer_AxialScaleDlg
36 \brief Dialog allowing to assign parameters of axes scaling
41 \param view - view window
42 \param parent - parent widget
44 OCCViewer_AxialScaleDlg::OCCViewer_AxialScaleDlg( OCCViewer_ViewWindow* view, QWidget* parent )
48 setWindowTitle( tr( "DLG_SCALING" ) );
50 setSizeGripEnabled( true );
52 // Create layout for this dialog
53 QVBoxLayout* layoutDlg = new QVBoxLayout( this );
54 layoutDlg->setSpacing( 6 );
55 layoutDlg->setMargin( 11 );
57 // Create croup box with grid layout
58 QGroupBox* aGroupBox = new QGroupBox( this );
59 QHBoxLayout* aHBoxLayout = new QHBoxLayout( aGroupBox );
60 aHBoxLayout->setMargin( 11 );
61 aHBoxLayout->setSpacing( 6 );
64 QLabel* TextLabelX = new QLabel( tr( "LBL_X" ), aGroupBox );
65 m_sbXcoeff = new QtxDoubleSpinBox( 1e-7, RealLast(), 0.1, aGroupBox );
66 m_sbXcoeff->setMinimumWidth( 80 );
67 m_sbXcoeff->setValue( 1.0 );
70 QLabel* TextLabelY = new QLabel( tr( "LBL_Y" ), aGroupBox );
71 m_sbYcoeff = new QtxDoubleSpinBox( 1e-7, RealLast(), 0.1, aGroupBox );
72 m_sbYcoeff->setMinimumWidth( 80 );
73 m_sbYcoeff->setValue( 1.0 );
76 QLabel* TextLabelZ = new QLabel( tr( "LBL_Z" ), aGroupBox );
77 m_sbZcoeff = new QtxDoubleSpinBox( 1e-7, RealLast(), 0.1, aGroupBox );
78 m_sbZcoeff->setMinimumWidth( 80 );
79 m_sbZcoeff->setValue( 1.0 );
81 // Create <Reset> button
82 m_bReset = new QPushButton( tr( "&Reset" ), aGroupBox );
84 // Layout widgets in the group box
85 aHBoxLayout->addWidget( TextLabelX );
86 aHBoxLayout->addWidget( m_sbXcoeff );
87 aHBoxLayout->addWidget( TextLabelY );
88 aHBoxLayout->addWidget( m_sbYcoeff );
89 aHBoxLayout->addWidget( TextLabelZ );
90 aHBoxLayout->addWidget( m_sbZcoeff );
91 aHBoxLayout->addSpacing( 10 );
92 aHBoxLayout->addWidget( m_bReset );
94 // OK, CANCEL, Apply button
95 QGroupBox* aGroupBox2 = new QGroupBox( this );
96 QHBoxLayout* aHBoxLayout2 = new QHBoxLayout( aGroupBox2 );
97 aHBoxLayout2->setMargin( 11 );
98 aHBoxLayout2->setSpacing( 6 );
100 QPushButton* m_bOk = new QPushButton( tr( "O&K" ), aGroupBox2 );
101 m_bOk->setDefault( true );
102 m_bOk->setAutoDefault( true );
103 // Create <Apply> button
104 QPushButton* m_bApply = new QPushButton( tr( "&Apply" ), aGroupBox2 );
105 m_bApply->setAutoDefault( true );
106 // Create <Cancel> button
107 QPushButton* m_bCancel = new QPushButton( tr( "&Cancel" ), aGroupBox2 );
108 m_bCancel->setAutoDefault( true );
111 aHBoxLayout2->addWidget( m_bOk );
112 aHBoxLayout2->addWidget( m_bApply );
113 aHBoxLayout2->addSpacing( 10 );
114 aHBoxLayout2->addStretch();
115 aHBoxLayout2->addWidget( m_bCancel );
117 // Layout top level widgets
118 layoutDlg->addWidget( aGroupBox );
119 layoutDlg->addWidget( aGroupBox2 );
121 // signals and slots connections
122 connect( m_bCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
123 connect( m_bOk, SIGNAL( clicked() ), this, SLOT( accept() ) );
124 connect( m_bApply, SIGNAL( clicked() ), this, SLOT( apply() ) );
125 connect( m_bReset, SIGNAL( clicked() ), this, SLOT( reset() ) );
127 connect( view, SIGNAL( Hide( QHideEvent* ) ), this, SLOT( hide() ) );
129 resize( minimumSizeHint() );
135 OCCViewer_AxialScaleDlg::~OCCViewer_AxialScaleDlg()
140 \brief Update widgets values from the view
142 void OCCViewer_AxialScaleDlg::Update()
144 // Get values from the OCC view
145 double aScaleFactor[3];
146 myView->getViewPort()->getView()->AxialScale( aScaleFactor[0], aScaleFactor[1], aScaleFactor[2] );
147 m_sbXcoeff->setValue( aScaleFactor[0] );
148 m_sbYcoeff->setValue( aScaleFactor[1] );
149 m_sbZcoeff->setValue( aScaleFactor[2] );
153 \brief Called when <OK> button is pressed
155 void OCCViewer_AxialScaleDlg::accept()
162 \brief Called when <Apply> button is pressed
164 bool OCCViewer_AxialScaleDlg::apply()
166 double aScaleFactor[3] = { m_sbXcoeff->value(), m_sbYcoeff->value(), m_sbZcoeff->value() };
167 myView->getViewPort()->getView()->SetAxialScale( aScaleFactor[0], aScaleFactor[1], aScaleFactor[2] );
172 \brief Called when <Reset> button is pressed
174 void OCCViewer_AxialScaleDlg::reset()
176 m_bReset->setFocus();
177 m_sbXcoeff->setValue( 1.0 );
178 m_sbYcoeff->setValue( 1.0 );
179 m_sbZcoeff->setValue( 1.0 );