]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/MainWindow.h
...
[cpPlugins.git] / lib / cpBaseQtApplication / MainWindow.h
1 #ifndef __cpBaseQtApplication__MainWindow__h__
2 #define __cpBaseQtApplication__MainWindow__h__
3
4 #include <cpBaseQtApplication_Export.h>
5 #include <QMainWindow>
6 #include <QMessageBox>
7 #include <cpPlugins/Interface/Plugins.h>
8 #include <cpPlugins/Interface/Workspace.h>
9 #include <cpBaseQtApplication/Blocker.h>
10
11 // -------------------------------------------------------------------------
12 #define cpBaseQtApplication_ConnectAction( _act_, _slt_ )               \
13   this->connect(                                                        \
14     this->m_UI->_act_, SIGNAL( triggered( ) ), this, SLOT( _slt_( ) )   \
15     )
16
17 // -------------------------------------------------------------------------
18 #define cpBaseQtApplication_Execute( _cmd_ )            \
19   {                                                     \
20     this->m_Blocker.block( );                           \
21     try                                                 \
22     {                                                   \
23       _cmd_;                                            \
24       this->m_Blocker.unblock( );                       \
25     }                                                   \
26     catch( std::exception& err )                        \
27     {                                                   \
28       this->m_Blocker.unblock( );                       \
29       QMessageBox::critical(                            \
30         this,                                           \
31         QMessageBox::tr( "Error executing filter" ),    \
32         QMessageBox::tr( err.what( ) )                  \
33         );                                              \
34     }                                                   \
35     catch( ... )                                        \
36     {                                                   \
37       this->m_Blocker.unblock( );                       \
38       QMessageBox::critical(                            \
39         this,                                           \
40         QMessageBox::tr( "Error executing filter" ),    \
41         QMessageBox::tr( "Unknown error" )              \
42         );                                              \
43     }                                                   \
44     this->m_Blocker.unblock( );                         \
45   }
46
47 // -------------------------------------------------------------------------
48 namespace cpExtensions { namespace QT { class ActorsWidgetInterface; } }
49
50 // -------------------------------------------------------------------------
51 namespace cpBaseQtApplication
52 {
53   namespace Pipeline { class Canvas; }
54   namespace Plugins  { class Navigator; }
55
56   /**
57    */
58   class cpBaseQtApplication_EXPORT MainWindow
59     : public QMainWindow
60   {
61     Q_OBJECT;
62
63   public:
64     typedef MainWindow  Self;
65     typedef QMainWindow Superclass;
66
67     typedef cpPlugins::Interface::Plugins   TPlugins;
68     typedef cpPlugins::Interface::Workspace TWorkspace;
69
70   public:
71     explicit MainWindow(
72       int argc, char* argv[],
73       QWidget* parent = NULL
74       );
75     virtual ~MainWindow( );
76
77     TWorkspace* workspace( const std::string& wname );
78     const TWorkspace* workspace( const std::string& wname ) const;
79
80     Pipeline::Canvas* canvas( );
81     const Pipeline::Canvas* canvas( ) const;
82     void setCanvas( Pipeline::Canvas* c );
83
84     Plugins::Navigator* navigator( );
85     const Plugins::Navigator* navigator( ) const;
86     void setNavigator( Plugins::Navigator* n );
87
88     cpExtensions::QT::ActorsWidgetInterface* viewer( );
89     const cpExtensions::QT::ActorsWidgetInterface* viewer( ) const;
90     void setViewer( cpExtensions::QT::ActorsWidgetInterface* v );
91
92   protected:
93     template< class _TViewer >
94     _TViewer* _configureViewer( QWidget* w )
95       {
96         _TViewer* v = dynamic_cast< _TViewer* >( w );
97         if( v == NULL )
98           v = new _TViewer( );
99         return( v );
100       }
101
102   protected slots:
103     void _loadPlugins( const std::string& filename );
104     void _loadPlugins( );
105     void _loadPluginsFromPath( const std::string& path );
106     void _loadPluginsFromPath( );
107
108     void _clearWorkspaces( );
109
110     virtual void _addWorkspace( const std::string& name );
111     void _addWorkspace( );
112
113     void _saveWorkspace( const std::string& wname, const std::string& fname );
114     void _saveWorkspace( const std::string& wname, bool force );
115     void _saveWorkspace( );
116
117     void _loadWorkspace( const std::string& fname );
118     void _loadWorkspace( );
119
120     void _actorsProperties( );
121
122   protected:
123     Blocker           m_Blocker;
124     std::string       m_RunPath;
125     TPlugins::Pointer m_Plugins;
126     std::string       m_LastSaveFileName;
127     std::map< std::string, TWorkspace::Pointer > m_Workspaces;
128
129     bool        m_SingleWorkspace;
130     std::string m_BaseWindowTitle;
131
132     Pipeline::Canvas*                        m_Canvas;
133     Plugins::Navigator*                      m_Navigator;
134     cpExtensions::QT::ActorsWidgetInterface* m_Viewer;
135   };
136
137 } // ecapseman
138
139 #endif // __cpBaseQtApplication__MainWindow__h__
140
141 // eof - $RCSfile$