#ifndef __MAINWND__H__ #define __MAINWND__H__ // Standard stuff #include #include // Qt stuff #include #include // vtk stuff #include #include #include #include // Plugins interface #include #include #include #include // #include // ------------------------------------------------------------------------- class MainWnd; class DoubleClickCommand : public vtkCommand { public: typedef DoubleClickCommand Self; public: vtkTypeMacro( DoubleClickCommand, vtkCommand ); public: static DoubleClickCommand* New( ); void SetMainWnd( MainWnd* wnd ); void Execute( vtkObject* caller, unsigned long eid, void* data ); protected: DoubleClickCommand( ); virtual ~DoubleClickCommand( ); private: // Purposely not implemented DoubleClickCommand( const Self& ); Self& operator=( const Self& ); protected: MainWnd* m_MainWnd; }; // ------------------------------------------------------------------------- namespace Ui { class MainWnd; } // ------------------------------------------------------------------------- /** */ class MainWnd : public QMainWindow { Q_OBJECT; public: friend class DoubleClickCommand; typedef MainWnd Self; // Plugins types typedef cpPlugins::Interface::Interface TPluginsInterface; typedef cpPlugins::Interface::Object TPluginObject; typedef cpPlugins::Interface::DataObject TPluginData; typedef cpPlugins::Interface::Image TPluginImage; typedef cpPlugins::Interface::ProcessObject TPlugin; typedef cpPlugins::Interface::Parameters TParameters; // typedef cpPlugins::Extensions::Visualization::MPRWithDifferentWindows TMPR; typedef std::map< std::string, std::string > TStringMap; enum PluginType { GlobalPluginType = 0, DoubleClickPluginType, SpherePluginType, NonePluginType }; enum PluginCategory { SegmentationPluginCategory = 0, SegmentationFilteringPluginCategory, MeshProcessingPluginCategory, NonePluginCategory }; public: explicit MainWnd( QWidget* parent = 0 ); virtual ~MainWnd( ); protected: void _LoadApplicationPreferences( ); bool _LoadPlugins( ); bool _CheckClassesInPlugins( const TStringMap& classes ); void _AddPluginActions( const TStringMap& classes, QMenu* menu, const char* method ); TPluginImage* _LoadImage( const std::string& image_type, const std::string& image_dim ); void _UpdateEnabledFlags( ); bool _ParametersDialog( const TParameters& parameters ); void _ExecuteDoubleClickPlugin( const double* pnt ); template< class P > void _JoinSegmentations( ); /* TODO template< class I > */ /* void _SliceMesh( int axis ); static void _SliceEventCallback( vtkObject* caller, long unsigned int eventId, void* clientData, void* callData ); */ private slots: void _triggered_actionReloadPlugins( ); void _triggered_actionOpenInputImage( ); void _triggered_actionOpenSegmentedImage( ); void _triggered_actionSwitchMode( ); void _triggered_actionSegmentImage( ); void _triggered_actionFilterSegmentation( ); void _triggered_actionProcessMesh( ); /* TODO void triggered_aOpenSegmentedImage( ); void triggered_aFilterSegmentedImage( ); void triggered_aSegmentedImageToMesh( ); void triggered_aLoadInputImage( ); void triggered_aLoadSegmentedImage( ); */ private: /* Ui::MainWnd* m_UI; // Application preferences std::string m_ApplicationPreferencesFile; TStringMap m_ApplicationPreferences; // Plugins objects std::string m_PluginsConfigurationFile; TPluginsInterface m_Plugins; // Needed object from plugins TStringMap m_BaseClasses; TStringMap m_SegmentationClasses; TStringMap m_SegmentationFilterClasses; TStringMap m_MeshFilterClasses; // Historic objects std::string m_LastOpenedFile; // Real data TPluginImage* m_InputImage; TPluginImage* m_SegmentedImage; // Visualization stuff // TMPR* m_MPR; // Active plugin TPlugin* m_ActivePlugin; QWidget* m_ActiveParameters; Self::PluginType m_ActivePluginType; Self::PluginCategory m_ActivePluginCategory; vtkSmartPointer< DoubleClickCommand > m_DoubleClickCommand; */ }; #endif // __MAINWND__H__ // eof - $RCSfile$