#ifndef __FLTreeNodes__H
#define __FLTreeNodes__H

#include "WimpLib:List.h"
#include "FileList.h"
#include "FLTrack.h"
#include "WimpLib:OTreeList.h"

#define FLItemAction_TogglePlay      (EWOTreeItemArea_User + 0)
#define FLItemAction_DragNode        (EWOTreeItemArea_User + 1)
#define FLItemAction_EditCollective  (EWOTreeItemArea_User + 2)
#define FLItemAction_EditArtist      (EWOTreeItemArea_User + 3)
#define FLItemAction_EditBox         (EWOTreeItemArea_User + 4)
#define FLItemAction_EditAlbum       (EWOTreeItemArea_User + 5)
#define FLItemAction_EditTitle       (EWOTreeItemArea_User + 6)
#define FLItemAction_EditMimeType    (EWOTreeItemArea_User + 7)
#define FLItemAction_EditBroadcaster (EWOTreeItemArea_User + 8)
#define FLItemAction_EditStation     (EWOTreeItemArea_User + 9)
#define FLItemAction_ResizeColumn0   (EWOTreeItemArea_User + 256)

#define FLTreeMode_GroupBy_MimeType     0x00000100
#define FLTreeMode_GroupBy_Broadcaster  0x00000200
#define FLTreeMode_GroupBy_Rate         0x00000400

#define FLTreeMode_GroupBy_ObjectType   0x00000800

#define FLTreeMode_GroupBy_Collective   0x00001000
#define FLTreeMode_GroupBy_Artist       0x00002000
#define FLTreeMode_GroupBy_Box          0x00004000
#define FLTreeMode_GroupBy_Album        0x00008000
#define FLTreeMode_GroupBy_Compilation  0x00010000
#define FLTreeMode_GroupBy_CompByArtist 0x00020000

#define FLTreeMode_OrderBy_Alphabetic   0x00000000
#define FLTreeMode_OrderBy_TrackNumber  0x01000000
#define FLTreeMode_OrderBy_Raw          0x02000000

#define FLTreeMode_SortAlbum_Date       0x04000000

#define FLTreeMode_Flat                 0x10000000
#define FLTreeMode_IsLink               0x80000000

#define FLTreeMode_Mask_Keys            0x000000ff
#define FLTreeMode_Mask_GroupBy_Radios  0x00000700
#define FLTreeMode_Mask_GroupBy_Files   0x0003F000
#define FLTreeMode_Mask_GroupBy         0x0003FF00
#define FLTreeMode_Mask_OrderBy         0x03000000
#define FLTreeMode_Mask_Flags           0x80000000
#define FLTreeMode_Mask_Read            0x1703FF00

void throw_FLTreeNodes_FLTreeNodes(void);
void FLTreeNodes_NotFLTreeNodes(void);
OTreeNode* throw_FLTreeNodes_NewFileListNode(unsigned int treetype);
OTreeNode* throw_FLTreeNodes_NewQueueNode(unsigned int treetype);
OTreeNode* throw_FLTreeNodes_NewSearchNode(unsigned int treetype);
OTreeNode* throw_FLTreeNodes_Insert(OTreeList* pOList, const FileList* pDoc, const FLTrack* pTrack);
void FLTreeNodes_Remove(OTreeList* pOList, OTreeNode*);
bool     FLTreeNodes_IsTrack(const OTreeNode*);
FLTrack* throw_FLTreeNodes_GetTrack(const OTreeNode*);
int FLTreeNodes_ShowNode(const OTreeNode*, bool bForce);
void FLTreeNodes_GetChildTracks(const OTreeNode* pNode, List* pList);
int FLHeaderNode_GetFirstColumnPos(void);
int FLQueueNode_GetFirstColumnPos(void);
const char* FLTreeNodes_GetField(const OTreeNode* pNode, EMetaId id);

#endif
