#pragma once #include #include "../../sync/data.h" /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// enum { EDITOR_MAX_TRACKS = 16 * 1024, EDITOR_MAX_BOOKMARKS = 32 * 1024, }; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// enum GroupType { GROUP_TYPE_TRACK, GROUP_TYPE_GROUP, }; struct Group; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct Track { char* displayName; struct Group* group; uint32_t color; int width; // width in pixels of the track int index; bool hidden; bool folded; bool selected; bool active; } Track; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Grouping (notice that even one track without group becomes it own group to keep the code easier) typedef struct Group { const char* name; char* displayName; int width; bool folded; union { Track* track; Track** tracks; } t; enum GroupType type; int trackCount; } Group; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct TrackData { struct sync_data syncData; Track tracks[EDITOR_MAX_TRACKS]; Group groups[EDITOR_MAX_TRACKS]; int* bookmarks; int bookmarkCount; int groupCount; int activeTrack; int lastColor; int trackCount; int startRow; int endRow; int highlightRowStep; char* editText; } TrackData; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// bool TrackData_hasBookmark(TrackData* trackData, int row); void TrackData_toggleBookmark(TrackData* trackData, int row); int TrackData_getNextBookmark(TrackData* trackData, int row); int TrackData_getPrevBookmark(TrackData* trackData, int row); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Will get the get the track if it exists else create it int TrackData_createGetTrack(TrackData* trackData, const char* name); uint32_t TrackData_getNextColor(TrackData* trackData); void TrackData_linkGroups(TrackData* trackData); void TrackData_linkTrack(int index, const char* name, TrackData* trackData); void TrackData_setActiveTrack(TrackData* trackData, int track);