/***************************************************************************** # Copyright (C) 1994-2008 by David Gordon. # All rights reserved. # # This software is part of a beta-test version of the Consed/Autofinish # package. It should not be redistributed or # used for any commercial purpose, including commercially funded # sequencing, without written permission from the author and the # University of Washington. # # This software is provided ``AS IS'' and any express or implied # warranties, including, but not limited to, the implied warranties of # merchantability and fitness for a particular purpose, are disclaimed. # In no event shall the authors or the University of Washington be # liable for any direct, indirect, incidental, special, exemplary, or # consequential damages (including, but not limited to, procurement of # substitute goods or services; loss of use, data, or profits; or # business interruption) however caused and on any theory of liability, # whether in contract, strict liability, or tort (including negligence # or otherwise) arising in any way out of the use of this software, even # if advised of the possibility of such damage. # # Building Consed from source is error prone and not simple which is # why I provide executables. Due to time limitations I cannot # provide any assistance in building Consed. Even if you do not # modify the source, you may introduce errors due to using a # different version of the compiler, a different version of motif, # different versions of other libraries than I used, etc. For this # reason, if you discover Consed bugs, I can only offer help with # those bugs if you first reproduce those bugs with an executable # provided by me--not an executable you have built. # # Modifying Consed is also difficult. Although Consed is modular, # some modules are used by many other modules. Thus making a change # in one place can have unforeseen effects on many other features. # It may takes months for you to notice these other side-effects # which may not seen connected at all. It is not feasable for me to # provide help with modifying Consed sources because of the # potentially huge amount of time involved. # #*****************************************************************************/ #ifndef TAGTYPES_INCLUDED #define TAGTYPES_INCLUDED #include "rwtptrsortedvector.h" #include "guicolortext.h" class tag; class LocatedFragment; class Contig; class userDefinedTagFieldType; class userDefinedTagField; class tagType { public: enum readOrConsensusType { read = 0x1, consensus = 0x2, both = 0x3, undefined = 0x0 }; tagType( const RWCString& soTagType, const RWCString& soColor, GuiColorText* pGuiColorText, const readOrConsensusType readOrConsensus, const bool bCanBeCreatedBySwiping ) : soTagType_( soTagType), soColor_( soColor ), pGuiColorText_( pGuiColorText ), readOrConsensus_( readOrConsensus ), bCanBeCreatedBySwiping_( bCanBeCreatedBySwiping) {} bool operator==( const tagType& tt ) const { return( soTagType_ == tt.soTagType_ ); } bool operator<( const tagType& tt ) const { return( soTagType_ < tt.soTagType_ ); } virtual bool bIsAUserDefinedTagType() { return false; } public: RWCString soTagType_; RWCString soColor_; GuiColorText* pGuiColorText_; readOrConsensusType readOrConsensus_; bool bCanBeCreatedBySwiping_; }; class userDefinedTagType : public tagType { public: userDefinedTagType( const RWCString& soTagType, const RWCString& soColor, GuiColorText* pGuiColorText, const readOrConsensusType readOrConsensus, const bool bCanBeCreatedBySwiping ) : tagType( soTagType, soColor, pGuiColorText, readOrConsensus, bCanBeCreatedBySwiping ) {} virtual bool bIsAUserDefinedTagType() { return true;} bool bCorrectNumberOfEachField( RWTPtrOrderedVector* pArrayOfUserDefinedTagFields, RWCString& soErrorMessage ); public: RWTPtrOrderedVector aUserDefinedTagFieldType_; // I do not believe this is used (DG, July 2009) RWTPtrOrderedVector aGuiColorText_; }; class tagTypes { public: tagTypes(); static tagTypes* pGetTagTypes() { return( pGlobalTagTypes_ ); } bool bIsAValidTagType( const RWCString& soTagType ); tagType* pGetTagType( const RWCString& soTagType ); GuiColorText* pGetGuiColorTextForTag( tag* pTag ); GuiColorText* pGetGuiColorTextForTagType( const RWCString& soTagType ); GuiColorText* pGetGuiColorTextForTagsOverlap(); void assignValidTagType( const RWCString& soTagType, const RWCString& soColor, const tagType::readOrConsensusType readOrConsensus , const bool bCanBeCreatedBySwiping ); RWCString soGetTagType( const int nIndex ) { return( aTagTypes_[ nIndex ]->soTagType_ ); } tagType::readOrConsensusType rcGetTagReadOrConsensusType( const int nIndex ) { return( aTagTypes_[ nIndex ]->readOrConsensus_ ); } int nGetNumberOfTagTypes() { return( aTagTypes_.length() ); } tag* pCreateReadTag( const RWCString& soTagType, const RWCString& soComment, const int nConsPosStart, const int nConsPosEnd, LocatedFragment* pLocFrag, const bool bWriteToPhdFileNotAceFile, bool& bUserPushedCancel ); tag* pCreateConsensusTag( const RWCString& soTagType, const RWCString& soComment, const int nConsPosStart, const int nConsPosEnd, Contig* pContig, const bool bNoTrans, bool& bUserPushedCancel, const RWCString& soContigName ); tag* pDuplicateTag( tag* pTag ); bool bTagTypeCanBeCreatedBySwiping( const int nTagType ) { return aTagTypes_[ nTagType ]->bCanBeCreatedBySwiping_; } void getColumnHeadingsForNavigatorBox( const RWCString& soTagType, RWCString& soColumnHeading1, RWCString& soColumnHeading2 ); void setTagTypesToHide( char* szTagTypesToHide ); bool bAreTagsOfThisTypeHidden( const RWCString& soTagType ); void checkingAfterStoringAllTagTypes(); public: static tagTypes* pGlobalTagTypes_; // fail if anyone tries to create a second object. static bool bTagTypesCreated_; RWTPtrSortedVector aTagTypes_; // comma separated and comma before and after the list RWCString soTagTypesToHide_; bool bCurrentlyShowAllTagTypes_; }; #endif