00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _ID3LIB_HEADER_FRAME_H_
00029 #define _ID3LIB_HEADER_FRAME_H_
00030
00031 #include "header.h"
00032 #include "field.h"
00033
00034 struct ID3_FrameDef;
00035
00036 class ID3_FrameHeader : public ID3_Header
00037 {
00038 public:
00039
00040 enum
00041 {
00042 TAGALTER = 1 << 15,
00043 FILEALTER = 1 << 14,
00044 READONLY = 1 << 13,
00045 COMPRESSION = 1 << 7,
00046 ENCRYPTION = 1 << 6,
00047 GROUPING = 1 << 5
00048 };
00049
00050 ID3_FrameHeader() : _frame_def(NULL), _dyn_frame_def(false) { ; }
00051 virtual ~ID3_FrameHeader() { this->Clear(); }
00052
00053 size_t Size() const;
00054 bool Parse(ID3_Reader&);
00055 void Render(ID3_Writer&) const;
00056 bool SetFrameID(ID3_FrameID id);
00057 ID3_FrameID GetFrameID() const;
00058 const char* GetTextID() const;
00059 const ID3_FrameDef* GetFrameDef() const;
00060 bool Clear();
00061 ID3_FrameHeader& operator=(const ID3_FrameHeader&);
00062
00063 bool SetCompression(bool b) { return this->SetFlags(COMPRESSION, b); }
00064 bool SetEncryption(bool b) { return this->SetFlags(ENCRYPTION, b); }
00065 bool SetGrouping(bool b) { return this->SetFlags(GROUPING, b); }
00066
00067 bool GetCompression() const { return _flags.test(COMPRESSION); }
00068 bool GetEncryption() const { return _flags.test(ENCRYPTION); }
00069 bool GetGrouping() const { return _flags.test(GROUPING); }
00070 bool GetReadOnly() const { return _flags.test(READONLY); }
00071
00072 protected:
00073 bool SetFlags(uint16 f, bool b)
00074 {
00075 bool changed = _flags.set(f, b);
00076 _changed = _changed || changed;
00077 return changed;
00078 }
00079 void SetUnknownFrame(const char*);
00080
00081 private:
00082 ID3_FrameDef* _frame_def;
00083 bool _dyn_frame_def;
00084 }
00085 ;
00086
00087 #endif