0024927: Getting rid of "Persistent" functionality -- Samples and data
[occt.git] / samples / qt / Interface / src / Application.cxx
1 #include "Application.h"
2
3 #include "Translate.h"
4
5 #include <QMessageBox>
6 #include <stdlib.h>
7 #include <QMdiSubWindow>
8
9 ApplicationWindow::ApplicationWindow()
10     : ApplicationCommonWindow( ),
11       myImportPopup( 0 ),
12       myExportPopup( 0 )
13 {
14   createTranslatePopups();
15 }
16
17 ApplicationWindow::~ApplicationWindow()
18 {
19 }
20
21 void ApplicationWindow::createTranslatePopups()
22 {
23     if ( !myImportPopup )
24         myImportPopup = new QMenu( QObject::tr( "MNU_FILE_IMPORT" ), this );
25
26     if ( !myExportPopup )
27             myExportPopup = new QMenu( QObject::tr( "MNU_FILE_EXPORT" ), this );
28
29         QAction* a;
30         a = new QAction( QObject::tr("MNU_IMPORT_BREP"), this );
31         a->setStatusTip( QObject::tr("TBR_IMPORT_BREP") );
32         connect( a, SIGNAL( triggered() ), this, SLOT( onImport() ) );
33         myCasCadeTranslateActions.insert( FileImportBREPId, a );
34         myImportPopup->addAction( a );
35
36         a = new QAction( QObject::tr("MNU_EXPORT_BREP"), this );
37         a->setStatusTip( QObject::tr("TBR_EXPORT_BREP") );
38         connect( a, SIGNAL( triggered() ), this, SLOT( onExport() ) );
39         myCasCadeTranslateActions.insert( FileExportBREPId, a );
40         myExportPopup->addAction( a );
41
42         a = new QAction( QObject::tr("MNU_IMPORT_IGES"), this );
43         a->setStatusTip( QObject::tr("TBR_IMPORT_IGES") );
44         connect( a, SIGNAL( triggered() ), this, SLOT( onImport() ) );
45         myCasCadeTranslateActions.insert( FileImportIGESId, a );
46         myImportPopup->addAction( a );
47
48         a = new QAction( QObject::tr("MNU_EXPORT_IGES"), this );
49         a->setStatusTip( QObject::tr("TBR_EXPORT_IGES") );
50         connect( a, SIGNAL( triggered() ), this, SLOT( onExport() ) );
51         myCasCadeTranslateActions.insert( FileExportIGESId, a );
52         myExportPopup->addAction( a );
53
54         a = new QAction( QObject::tr("MNU_IMPORT_STEP"), this );
55         a->setStatusTip( QObject::tr("TBR_IMPORT_STEP") );
56         connect( a, SIGNAL( triggered() ), this, SLOT( onImport() ) );
57         myCasCadeTranslateActions.insert( FileImportSTEPId, a );
58         myImportPopup->addAction( a );
59
60         a = new QAction( QObject::tr("MNU_EXPORT_STEP"), this );
61         a->setStatusTip( QObject::tr("TBR_EXPORT_STEP") );
62         connect( a, SIGNAL( triggered() ), this, SLOT( onExport() ) );
63         myCasCadeTranslateActions.insert( FileExportSTEPId, a );
64         myExportPopup->addAction( a );
65
66         a = new QAction( QObject::tr("MNU_EXPORT_STL"), this );
67         a->setStatusTip( QObject::tr("TBR_EXPORT_STL") );
68         connect( a, SIGNAL( triggered() ), this, SLOT( onExport() ) );
69         myCasCadeTranslateActions.insert( FileExportSTLId, a );
70         myExportPopup->addAction( a );
71
72         a = new QAction( QObject::tr("MNU_EXPORT_VRML"), this );
73         a->setStatusTip( QObject::tr("TBR_EXPORT_VRML") );
74         connect( a, SIGNAL( triggered() ), this, SLOT( onExport() ) );
75         myCasCadeTranslateActions.insert( FileExportVRMLId, a );
76         myExportPopup->addAction( a );
77
78         myExportPopup->addSeparator();
79
80         a = new QAction( QObject::tr("MNU_EXPORT_IMAGE"), this );
81         a->setStatusTip( QObject::tr("TBR_EXPORT_IMAGE") );
82         connect( a, SIGNAL( triggered() ), this, SLOT( onExportImage() ) );
83         myExportPopup->addAction( a );
84 }
85
86 void ApplicationWindow::updateFileActions()
87 {
88   if ( myDocuments.isEmpty() )
89   {
90     if ( !isDocument() )
91     {
92       getFilePopup()->insertMenu( getFileSeparator(), myExportPopup );
93             getFilePopup()->insertMenu( myExportPopup->menuAction(), myImportPopup );
94       mySeparator = getFilePopup()->insertSeparator( myImportPopup->menuAction() );
95           }
96     else
97     {
98             getFilePopup()->removeAction( myImportPopup->menuAction() );
99             getFilePopup()->removeAction( myExportPopup->menuAction() );
100             getFilePopup()->removeAction( mySeparator );
101           }
102   }
103   ApplicationCommonWindow::updateFileActions();
104 }
105
106 void ApplicationWindow::onImport()
107 {
108     QAction* a = (QAction*)sender();
109     int type = translationFormat( a );
110     if ( type < 0 )
111         return;
112
113     bool stat = translate( type, true );
114     if ( stat )
115     {
116         DocumentCommon* doc = qobject_cast<MDIWindow*>( getWorkspace()->activeSubWindow()->widget() )->getDocument();
117         doc->fitAll();
118     }
119 }
120
121 void ApplicationWindow::onExport()
122 {
123     QAction* a = (QAction*)sender();
124     int type = translationFormat( a );
125     if ( type < 0 )
126         return;
127
128     translate( type, false );
129 }
130
131 int ApplicationWindow::translationFormat( const QAction* a )
132 {
133     int type = -1;
134     for ( int i = FileImportBREPId; i <= FileExportVRMLId; i++ )
135     {
136         if ( myCasCadeTranslateActions.at( i ) == a )
137         {
138             type = i;
139             break;
140         }
141     }
142     switch ( type )
143     {
144     case FileImportBREPId:
145     case FileExportBREPId:
146         type = Translate::FormatBREP;
147         break;
148     case FileImportIGESId:
149     case FileExportIGESId:
150         type = Translate::FormatIGES;
151         break;
152     case FileImportSTEPId:
153     case FileExportSTEPId:
154         type =  Translate::FormatSTEP;
155         break;
156     case FileExportSTLId:
157         type = Translate::FormatSTL;
158         break;
159     case FileExportVRMLId:
160         type = Translate::FormatVRML;
161         break;
162     }
163     return type;
164 }
165
166 bool ApplicationWindow::translate( const int format, const bool import )
167 {
168     static Translate* anTrans = createTranslator();
169     DocumentCommon* doc = qobject_cast<MDIWindow*>( getWorkspace()->activeSubWindow()->widget() )->getDocument();
170     Handle(AIS_InteractiveContext) context = doc->getContext();
171     bool status;
172     if ( import )
173         status = anTrans->importModel( format, context );
174     else
175         status = anTrans->exportModel( format, context );
176
177     if ( !status )
178     {
179         QString msg = QObject::tr( "INF_TRANSLATE_ERROR" );
180         if ( !anTrans->info().isEmpty() )
181             msg += QString( "\n" ) + anTrans->info();
182         QMessageBox::critical( this, QObject::tr( "TIT_ERROR" ), msg, QObject::tr( "BTN_OK" ), QString::null, QString::null, 0, 0 );
183     }
184     
185     return status;
186 }
187
188 Translate* ApplicationWindow::createTranslator()
189 {
190   Translate* anTrans = new Translate( this/*, "Translator"*/ );
191   return anTrans;
192 }
193
194 void ApplicationWindow::onSelectionChanged()
195 {
196   ApplicationCommonWindow::onSelectionChanged();
197
198   QMdiArea* ws = getWorkspace();
199   DocumentCommon* doc = qobject_cast<MDIWindow*>( ws->activeSubWindow()->widget() )->getDocument();
200   Handle(AIS_InteractiveContext) context = doc->getContext();
201   int numSel = context->NbSelected();
202
203   myCasCadeTranslateActions.at( FileExportBREPId )->setEnabled( numSel );
204   myCasCadeTranslateActions.at( FileExportIGESId )->setEnabled( numSel );
205   myCasCadeTranslateActions.at( FileExportSTEPId )->setEnabled( numSel );
206   myCasCadeTranslateActions.at( FileExportSTLId )->setEnabled( numSel );
207   myCasCadeTranslateActions.at( FileExportVRMLId )->setEnabled( numSel );
208 }
209
210 QString ApplicationWindow::getIEResourceDir()
211 {
212   static QString aResourceDir =
213     QString::fromUtf8 (qgetenv ("CSF_IEResourcesDefaults").constData());
214   
215   return aResourceDir;
216 }
217
218 void ApplicationWindow::onExportImage()
219 {
220     MDIWindow* w = qobject_cast<MDIWindow*>( getWorkspace()->activeSubWindow()->widget() );
221     if ( w )
222         w->dump();
223 }
224
225