MeVisLabToolboxReference
MeVisLab/Standard/Sources/ML/MLCSO/CSOBase/CSOManager/CSOManager.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //----------------------------------------------------------------------------------
00005 
00010 //----------------------------------------------------------------------------------
00011 
00012 #ifndef __CSOManager_H
00013 #define __CSOManager_H
00014 
00015 #include "../CSOList.h"
00016 
00017 #include "../CSORules/CSOGroupRules.h"
00018 #include "../CSORules/CSOListRules.h"
00019 
00020 
00021 ML_START_NAMESPACE
00022 
00024 
00028 class MLCSO_EXPORT CSOManager : public Module
00029 {
00030 
00031 public:
00032 
00034   CSOManager(int numInImages=0,int numOutImages=0);
00035 
00037   void updateManager();
00038 
00040   void updateCSOManager();
00042   void updateGroupManager();
00043 
00044   
00046   inline int getSelectionPathPointColoringMode() { return _selectionPathPointColoringModeFld->getEnumValue(); }
00048   inline int getSelectionPathPointWidthMode() { return _selectionPathPointWidthModeFld->getEnumValue(); }
00050   void getSelectionPathPointColor(Vector3& origColor);
00052   void getSelectionPathPointWidth(float& origLineWidth);
00053 
00055   Vector3 getSelectedPathPointsFixedColor() const { return _selectionFixedPathPointColorFld->getVector3Value(); }
00057   float getSelectedPathPointsBrightenValue() const { return _selectionWidenPathPointWidthFld->getFloatValue(); }
00059   float getSelectedPathPointsFixedLineWidth() const { return _selectionFixedPathPointWidthFld->getFloatValue(); }
00061   float getSelectedPathPointsWidenValue() const { return _selectionWidenPathPointWidthFld->getFloatValue(); }
00062 
00064   Vector3 getSelectedSeedPointFixedColor() const { return _selectedSeedPointFixedColorFld->getVector3Value(); }
00066   float getSelectedSeedPointBrightenValue() const { return _selectedSeedPointBrightenColorFld->getFloatValue(); }  
00068   float getSelectedSeedPointFixedSize() const { return  _selectedSeedPointSizeFld->getFloatValue(); }
00070   float getSelectedSeedPointEnlargeValue() const { return _selectedSeedPointEnlargeSizeFld->getFloatValue(); }
00071   
00073   inline int getSelectedSeedPointColoringMode() { return _selectedSeedPointColoringModeFld->getEnumValue(); }
00075   inline int getSelectedSeedPointSizeMode() { return _selectedSeedPointSizeModeFld->getEnumValue(); }
00077   void getSelectedSeedPointColor(Vector3& origColor);
00079   void getSelectedSeedPointSize(float& origSize);
00080 
00082 
00084   std::string getCSODefaultLabel();
00085 
00087   inline std::string getCSODefaultDescription() const { return _csoDefaultDescriptionFld->getStringValue(); }
00089   inline bool getCSODefaultShowState() const { return _csoDefaultShowStateFld->getBoolValue(); }
00091   inline bool getCSODefaultVoxelizeState() const { return _csoDefaultVoxelizeStateFld->getBoolValue(); }
00093   inline bool getCSODefaultEditableState() const { return _csoDefaultEditableStateFld->getBoolValue(); }
00094 
00096 
00098   std::string getGroupDefaultLabel();
00099 
00101   inline std::string getGroupDefaultDescription() const { return _groupDefaultDescriptionFld->getStringValue(); }
00103   inline bool getGroupDefaultUseTimePointIndex() const { return _groupDefaultUseTimePointIndexFld->getBoolValue(); }
00105   inline int  getGroupDefaultTimePointIndex() const { return _groupDefaultTimePointIndexFld->getIntValue(); }
00107   inline bool getGroupDefaultUseShowState() const { return _groupDefaultUseShowStateFld->getBoolValue(); }
00109   inline bool getGroupDefaultShowState() const { return _groupDefaultShowStateFld->getBoolValue(); }
00111   inline bool getGroupDefaultUseVoxelizeState() const { return _groupDefaultUseVoxelizeStateFld->getBoolValue(); }
00113   inline bool getGroupDefaultVoxelizeState() const { return _groupDefaultVoxelizeStateFld->getBoolValue(); }
00115   inline bool getGroupDefaultUseEditableState() const { return _groupDefaultUseEditableStateFld->getBoolValue(); }
00117   inline bool getGroupDefaultEditableState() const { return _groupDefaultEditableStateFld->getBoolValue(); }
00118 
00120   inline bool getGroupDefaultUsePathPointStyle() const { return _groupDefaultUsePathPointStyleFld->getBoolValue(); }
00121   inline CSOLineStyle getGroupDefaultPathPointStyle() const { return static_cast<CSOLineStyle>(_groupDefaultPathPointStyleFld->getEnumValue()); }
00123   inline bool getGroupDefaultUsePathPointWidth() const { return _groupDefaultUsePathPointWidthFld->getBoolValue(); }
00124   inline float getGroupDefaultPathPointWidth() const { return _groupDefaultPathPointWidthFld->getFloatValue(); }
00126   inline bool getGroupDefaultUsePathPointColor() const { return _groupDefaultUsePathPointColorFld->getBoolValue(); }
00127   inline Vector3 getGroupDefaultPathPointColor() const { return _groupDefaultPathPointColorFld->getVector3Value();  }
00129   inline bool getGroupDefaultUsePathPointAlpha() const { return _groupDefaultUsePathPointAlphaFld->getBoolValue(); }
00130   inline float getGroupDefaultPathPointAlpha() const { return _groupDefaultPathPointAlphaFld->getFloatValue(); }
00131 
00133   inline bool getGroupDefaultUseSeedPointStyle() const { return _groupDefaultUseSeedPointStyleFld->getBoolValue(); }
00134   inline int  getGroupDefaultSeedPointStyle() const { return _groupDefaultSeedPointStyleFld->getEnumValue(); }
00136   inline bool getGroupDefaultUseSeedPointSize() const { return _groupDefaultUseSeedPointSizeFld->getBoolValue(); }
00137   inline float getGroupDefaultSeedPointSize() const { return _groupDefaultSeedPointSizeFld->getFloatValue(); }
00139   inline bool getGroupDefaultUseSeedPointColor() const { return _groupDefaultUseSeedPointColorFld->getBoolValue(); }
00140   inline Vector3 getGroupDefaultSeedPointColor() const { return _groupDefaultSeedPointColorFld->getVector3Value(); }
00142   inline bool getGroupDefaultUseSeedPointAlpha() const { return _groupDefaultUseSeedPointAlphaFld->getBoolValue(); }
00143   inline float getGroupDefaultSeedPointAlpha() const { return _groupDefaultSeedPointAlphaFld->getFloatValue(); }
00144 
00146   inline bool getGroupDefaultUseVoxelWriteMode() const { return _groupDefaultUseVoxelWriteModeFld->getBoolValue(); }
00147   inline int getGroupDefaultVoxelWriteMode() const { return _groupDefaultVoxelWriteModeFld->getEnumValue(); }
00149   inline bool getGroupDefaultUseVoxelWriteValue() const { return _groupDefaultUseVoxelWriteValueFld->getBoolValue(); }
00150   inline float getGroupDefaultVoxelWriteValue() const { return _groupDefaultVoxelWriteValueFld->getFloatValue(); }
00151 
00152   
00154   inline int getGroupDefaultNumMaximumCSOs() const { return _groupDefaultNumMaximumCSOsFld->getIntValue(); }
00156   inline CSOGroupOverflowHandling getGroupDefaultOverflowHandling() const { return static_cast<CSOGroupOverflowHandling>(_groupDefaultOverflowHandlingFld->getEnumValue()); }
00158   inline CSORemoveHandling getGroupDefaultRemoveFromGroupHandling() const { return static_cast<CSORemoveHandling>(_groupDefaultRemoveFromGroupHandlingFld->getEnumValue()); }
00159 
00161   inline CSORemoveEmptyGroupHandling getDefaultRemoveEmptyGroupHandling() const { return static_cast<CSORemoveEmptyGroupHandling>(_listDefaultRemoveEmptyGroupHandlingFld->getEnumValue()); }
00162 
00164 
00165   inline bool getGroupDefaultUseMarkerSettings() const { return _groupDefaultUseMarkerSettingsFld->getBoolValue(); }
00167   inline bool getGroupDefaultUseVisuals() const { return _groupDefaultUseVisualsFld->getBoolValue(); }
00169   inline bool getGroupDefaultUseVoxelWrite() const { return _groupDefaultUseVoxelWriteFld->getBoolValue(); }
00171 
00172 protected:
00173 
00175   virtual ~CSOManager();
00176 
00178   virtual void activateAttachments();
00179 
00181   virtual void handleNotification(Field* field);
00182 
00184   void setInternalVariables();
00185 
00186 private:
00187 
00188   /* FIELDS */
00189 
00191   BaseField* _outCSOListFld;
00193   BaseField* _inCSOListFld;
00194 
00196   BoolField* _workDirectlyOnInputCSOListFld;
00197 
00199   StringField* _csoDisplayTreeFld;
00201   StringField* _groupDisplayTreeFld;
00203   BoolField* _shouldUpdateCsoDisplayTreeFld;
00205   BoolField* _shouldUpdateGroupDisplayTreeFld;
00206 
00208   StringField* _csoSelectedItemsFld;
00210   StringField* _groupSelectedItemsFld;
00212   StringField* _groupSelectedCSOItemsFld;
00214   StringField* _csoSelectedGroupItemsFld;
00215 
00217   BoolField* _enableUndoRedoFld;
00219   NotifyField* _triggerUndoFld;
00221   NotifyField* _triggerRedoFld;
00223   IntField* _numUndosFld;
00225   IntField* _numRedosFld;
00227   IntField* _undoStackLimitFld;
00228 
00230   NotifyField* _addCSOtoGroupFld;
00232   NotifyField* _breakCSOFromGroupFld;
00233 
00235   NotifyField* _removeAllCSOsAndGroupsFld;
00236 
00238   NotifyField* _csoRemoveSelectedFld;
00240   NotifyField* _csoCopySelectedFld;
00242   NotifyField* _csoPasteFld;
00243 
00245   NotifyField* _groupCreateNewFld;
00247   BoolField* _selectLastCreatedGroupFld;
00249   NotifyField* _groupRemoveSelectedFld;
00251   NotifyField* _groupCopySelectedFld;
00253   NotifyField* _groupPasteFld;
00254 
00256   EnumField* _selectionPathPointColoringModeFld;
00258   EnumField* _selectionPathPointWidthModeFld;
00260   FloatField* _selectionBrightenPathPointColorFld;
00262   ColorField* _selectionFixedPathPointColorFld;
00264   FloatField* _selectionWidenPathPointWidthFld;
00266   FloatField* _selectionFixedPathPointWidthFld;
00267 
00269   EnumField* _selectedSeedPointColoringModeFld;
00271   EnumField* _selectedSeedPointSizeModeFld;
00273   FloatField* _selectedSeedPointBrightenColorFld;
00275   ColorField* _selectedSeedPointFixedColorFld;
00277   FloatField* _selectedSeedPointEnlargeSizeFld;
00279   FloatField* _selectedSeedPointSizeFld;
00280 
00282   IntField* _csoSingleIdFld;
00284   StringField* _csoSingleLabelFld;
00286   StringField* _csoSingleDescriptionFld;
00287 
00289   IntField* _csoSingleTimePointIndexFld;
00291   BoolField* _csoSingleShowStateFld;
00293   BoolField* _csoSingleVoxelizeStateFld;
00295   BoolField* _csoSingleEditableStateFld;
00296 
00298   EnumField* _csoSinglePathPointStyleFld;
00300   FloatField* _csoSinglePathPointWidthFld;
00302   ColorField* _csoSinglePathPointColorFld;
00304   FloatField* _csoSinglePathPointAlphaFld;
00305 
00307   EnumField* _csoSingleSeedPointStyleFld;
00309   FloatField* _csoSingleSeedPointSizeFld;
00311   ColorField* _csoSingleSeedPointColorFld;
00313   FloatField* _csoSingleSeedPointAlphaFld;
00314 
00316   EnumField* _csoSingleVoxelWriteModeFld;
00318   FloatField* _csoSingleVoxelWriteValueFld;
00319 
00321   StringField* _csoDefaultLabelFld;
00323   BoolField* _csoDefaultLabelAddUniqueIdFld;
00325   StringField* _csoDefaultLabelUniqueIdFormatFld;
00327   BoolField* _csoDefaultLabelAddUniqueIdAlwaysFld;
00328 
00330   StringField* _csoDefaultDescriptionFld;
00332   BoolField* _csoDefaultShowStateFld;
00334   BoolField* _csoDefaultVoxelizeStateFld;
00336   BoolField* _csoDefaultEditableStateFld;
00337 
00339   NotifyField* _csoSingleApplyFld;
00340 
00341 
00343   IntField* _groupSingleIdFld;
00345   StringField* _groupSingleLabelFld;
00347   StringField* _groupSingleDescriptionFld;
00348 
00350   BoolField* _groupSingleUseTimePointIndexFld;
00352   IntField* _groupSingleTimePointIndexFld;
00354   BoolField* _groupSingleUseShowStateFld;
00356   BoolField* _groupSingleShowStateFld;
00358   BoolField* _groupSingleUseVoxelizeStateFld;
00360   BoolField* _groupSingleVoxelizeStateFld;
00362   BoolField* _groupSingleUseEditableStateFld;
00364   BoolField* _groupSingleEditableStateFld;    
00365 
00366  
00368   BoolField* _groupSingleUsePathPointStyleFld;
00369   EnumField* _groupSinglePathPointStyleFld;
00371   FloatField* _groupSinglePathPointWidthFld;
00372   BoolField* _groupSingleUsePathPointWidthFld;
00374   BoolField* _groupSingleUsePathPointColorFld;
00375   ColorField* _groupSinglePathPointColorFld;
00377   BoolField* _groupSingleUsePathPointAlphaFld;
00378   FloatField* _groupSinglePathPointAlphaFld;
00379 
00380 
00381 
00383   BoolField* _groupSingleUseSeedPointStyleFld;
00384   EnumField* _groupSingleSeedPointStyleFld;
00386   BoolField* _groupSingleUseSeedPointSizeFld;
00387   FloatField* _groupSingleSeedPointSizeFld;
00389   BoolField* _groupSingleUseSeedPointColorFld;
00390   ColorField* _groupSingleSeedPointColorFld;
00392   BoolField* _groupSingleUseSeedPointAlphaFld;
00393   FloatField* _groupSingleSeedPointAlphaFld;
00394 
00396   BoolField* _groupSingleUseVoxelWriteModeFld;
00398   EnumField* _groupSingleVoxelWriteModeFld;
00400   BoolField* _groupSingleUseVoxelWriteValueFld;
00401   FloatField* _groupSingleVoxelWriteValueFld;
00402 
00404   IntField* _groupSingleNumMaximumCSOsFld;
00406   EnumField* _groupSingleOverflowHandlingFld;
00408   EnumField* _groupSingleRemoveFromGroupHandlingFld;
00410   EnumField* _groupSingleDeleteGroupCSOHandlingFld;
00411 
00413   StringField* _groupDefaultLabelFld;
00415   BoolField* _groupDefaultLabelAddUniqueIdFld;
00417   StringField* _groupDefaultLabelUniqueIdFormatFld;
00419   BoolField* _groupDefaultLabelAddUniqueIdAlwaysFld;
00420 
00422   StringField* _groupDefaultDescriptionFld;
00423 
00425   BoolField* _groupDefaultUseTimePointIndexFld;
00427   IntField* _groupDefaultTimePointIndexFld;
00429   BoolField* _groupDefaultUseShowStateFld;
00431   BoolField* _groupDefaultShowStateFld;
00433   BoolField* _groupDefaultUseVoxelizeStateFld;
00435   BoolField* _groupDefaultVoxelizeStateFld;
00437   BoolField* _groupDefaultUseEditableStateFld;
00439   BoolField* _groupDefaultEditableStateFld;    
00440 
00442   BoolField* _groupDefaultUsePathPointStyleFld;
00443   EnumField* _groupDefaultPathPointStyleFld;
00445   BoolField* _groupDefaultUsePathPointWidthFld;
00446   FloatField* _groupDefaultPathPointWidthFld;
00448   BoolField* _groupDefaultUsePathPointColorFld;
00449   ColorField* _groupDefaultPathPointColorFld;
00451   BoolField* _groupDefaultUsePathPointAlphaFld;
00452   FloatField* _groupDefaultPathPointAlphaFld;
00453 
00455   BoolField* _groupDefaultUseSeedPointSizeFld;
00456   FloatField* _groupDefaultSeedPointSizeFld;
00458   BoolField* _groupDefaultUseSeedPointStyleFld;
00459   EnumField* _groupDefaultSeedPointStyleFld;
00461   BoolField* _groupDefaultUseSeedPointColorFld;
00462   ColorField* _groupDefaultSeedPointColorFld;
00464   BoolField* _groupDefaultUseSeedPointAlphaFld;
00465   FloatField* _groupDefaultSeedPointAlphaFld;
00466 
00468   BoolField* _groupDefaultUseVoxelWriteModeFld;
00470   EnumField* _groupDefaultVoxelWriteModeFld;
00472   BoolField* _groupDefaultUseVoxelWriteValueFld;
00473   FloatField* _groupDefaultVoxelWriteValueFld;
00474 
00476   IntField* _groupDefaultNumMaximumCSOsFld;
00478   EnumField* _groupDefaultOverflowHandlingFld;
00480   EnumField* _groupDefaultRemoveFromGroupHandlingFld;
00481 
00483   NotifyField* _groupSingleApplyFld;
00484 
00486 
00488   EnumField* _listSingleRemoveEmptyGroupHandlingFld;
00489 
00491   EnumField* _listDefaultRemoveEmptyGroupHandlingFld;
00492 
00494 
00496   BoolField* _useSelectionCSONotificationFld;
00498   BoolField* _useSelectionGroupNotificationFld;
00500   BoolField* _useFinishedCSONotificationFld;
00502   BoolField* _useFinishedGroupNotificationFld;
00504   BoolField* _useCSOMovedNotificationFld;
00506   BoolField* _useRepaintNotificationFld;
00508   BoolField* _useInteractionInitNotificationFld;
00510   BoolField* _useNewCSOStartedNotificationFld;
00511 
00513   NotifyField* _notifyOnSelectionCSOFld;
00515   NotifyField* _notifyOnSelectionGroupFld;
00517   NotifyField* _notifyOnFinishedCSOFld;
00519   NotifyField* _notifyOnFinishedGroupFld;
00521   NotifyField* _notifyOnCSOMovedFld;
00523   NotifyField* _notifyOnRepaintFld;
00525   NotifyField* _notifyOnInteractionInitFld;
00527   NotifyField* _notifyOnStartNewCSOFld;
00528 
00530 
00532   BoolField* _enableSelectionNotificationFld;
00534   BoolField* _enableFinishedNotificationFld;
00536   BoolField* _enableCSOMovedNotificationFld;
00538   BoolField* _enableRepaintNotificationFld;
00539 
00541   NotifyField* _triggerSelectionNotificationFld;
00543   NotifyField* _triggerFinishedNotificationFld;
00545   NotifyField* _triggerCSOMovedNotificationFld;
00547   NotifyField* _triggerRepaintNotificationFld;
00549   BoolField* _outputApplicationEventsDebugFld;
00550 
00552 
00553   BoolField* _groupDefaultUseVoxelWriteFld;
00554   BoolField* _groupSingleUseVoxelWriteFld;
00556   BoolField* _groupSingleUseVisualsFld;
00558   BoolField* _groupSingleUseMarkerSettingsFld;
00560   BoolField* _groupDefaultUseVisualsFld;
00562   BoolField* _groupDefaultUseMarkerSettingsFld;
00564 
00566 
00567   /* MEMBER VARIABLES */
00568 
00571   struct GroupCSOPair {
00572     CSO*      cso;
00573     CSOGroup* group;
00574   };
00575 
00577   CSOListPtr _outCSOList;
00579   CSOListPtr _inCSOList;
00580 
00582   bool _isOutputCSOListOwner;
00584   bool _isWorkingDirectlyOnInputCSOList;
00585 
00587   std::vector<GroupCSOPair>_csoSelectedGroups;
00589   std::vector<GroupCSOPair>_groupSelectedCSOs;
00590 
00592   std::vector<CSO*>_copiedCSOs;
00594   std::vector<CSOGroup*>_copiedGroups;
00595 
00597   bool _isInNotificationCB;
00598 
00600   bool _useSelectionCSONotification;
00602   bool _useSelectionGroupNotification;
00604   bool _useFinishedCSONotification;
00606   bool _useFinishedGroupNotification;
00608   bool _useCSOMovedNotification;
00610   bool _useRepaintNotification;
00612   bool _useInteractionInitNotification;
00614   bool _useNewCSOStartedNotification;
00615 
00617   bool _selectedCSOItemsChangedFromField;
00619   bool _selectedCSOGroupItemsChangedFromField;
00620 
00622   bool _isNotifyingItself;
00623 
00624   /* METHODS */
00625 
00627   static void _csoListNotificationCB(void* userData, int notificationFlag);
00628 
00630   void _updateManagerFields();
00631 
00633   void _updateCSOManagerFields();
00635   void _updateGroupManagerFields();
00636 
00638   void _updateInformationFields();
00639 
00642   bool _parseCSOSelectedItemsString();
00645   bool _parseGroupSelectedItemsString();
00646 
00648   void _parseStringToVector(std::string toParse, std::vector<int>& parsedIds);
00649 
00651   void _parseCSOGroupToVector();
00653   void _parseGroupCSOToVector();
00654 
00656   void _parsePair(std::string toParse, int& firstId, int& secondId);
00658   void _addPairToVector(int csoId, int groupId, std::vector<GroupCSOPair>& gcPairVec);
00659 
00660 
00663   void _openUndoRedoGroup();
00666   void _closeUndoRedoGroup();
00667 
00669   void _createCSOString();
00671   void _createGroupString();
00672 
00674   void _updateCSOInformationFields();
00676   void _updateGroupInformationFields();
00677 
00679   void _copySelectedCSOs();
00681   void _copySelectedGroups();
00683   void _pasteCopiedCSOs();
00685   void _pasteCopiedGroups();
00686 
00688   void _addSelectedCSOtoGroup();
00690   void _breakSelectedCSOFromGroup();
00691 
00693   void _removeCSOs();
00695   void _removeGroups();
00696 
00698   void _createGroup();
00699   
00700   static void baseEventCB(void* userData, BaseEvent* event);
00701 
00702   int _eventGroupCounter;
00703 
00704   ML_MODULE_CLASS_HEADER(CSOManager);
00705 };
00706 
00708 
00709 
00710 ML_END_NAMESPACE
00711 
00712 
00713 #endif // __CSOManager_H
00714