WIP on grouping
This commit is contained in:
parent
bd4dd1e358
commit
46fb889216
@ -83,47 +83,16 @@ static inline int getTrackCount()
|
|||||||
|
|
||||||
static int getNextTrack()
|
static int getNextTrack()
|
||||||
{
|
{
|
||||||
TrackData* trackData = &s_editorData.trackData;
|
return emini(getActiveTrack() + 1, getTrackCount());
|
||||||
int i, track_count = getTrackCount();
|
|
||||||
int active_track = getActiveTrack();
|
|
||||||
|
|
||||||
for (i = active_track + 1; i < track_count; ++i)
|
|
||||||
{
|
|
||||||
// if track has no group its always safe to assume that can select the track
|
|
||||||
|
|
||||||
if (!trackData->tracks[i].group)
|
|
||||||
return i;
|
|
||||||
|
|
||||||
if (!trackData->tracks[i].group->folded)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return active_track;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static int getPrevTrack()
|
static int getPrevTrack()
|
||||||
{
|
{
|
||||||
TrackData* trackData = &s_editorData.trackData;
|
return emaxi(getActiveTrack() - 1, 0);
|
||||||
int i, active_track = getActiveTrack();
|
|
||||||
|
|
||||||
for (i = active_track - 1; i >= 0; --i)
|
|
||||||
{
|
|
||||||
// if track has no group its always safe to assume that can select the track
|
|
||||||
|
|
||||||
if (!trackData->tracks[i].group)
|
|
||||||
return i;
|
|
||||||
|
|
||||||
if (!trackData->tracks[i].group->folded)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return active_track;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void Editor_create()
|
void Editor_create()
|
||||||
|
|||||||
@ -133,6 +133,7 @@ void TrackData_linkGroups(TrackData* trackData)
|
|||||||
group->t.track = track;
|
group->t.track = track;
|
||||||
group->trackCount = 1;
|
group->trackCount = 1;
|
||||||
processed_tracks[i] = true;
|
processed_tracks[i] = true;
|
||||||
|
track->group = group;
|
||||||
current_group++;
|
current_group++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,6 +97,23 @@ struct TrackInfo
|
|||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
|
||||||
|
static void updateStartTrack(Track* track, int posX, TrackViewInfo* view)
|
||||||
|
{
|
||||||
|
float delta_pos = (float)posX / (float)view->windowSizeX;
|
||||||
|
|
||||||
|
if (delta_pos < 0.2f)
|
||||||
|
{
|
||||||
|
if (view->startTrack > 0)
|
||||||
|
view->startTrack--;
|
||||||
|
}
|
||||||
|
else if (delta_pos > 0.8f)
|
||||||
|
view->startTrack++;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static int renderName(const char* name, int x, int y, int minSize, bool folded)
|
static int renderName(const char* name, int x, int y, int minSize, bool folded)
|
||||||
{
|
{
|
||||||
@ -194,6 +211,21 @@ static void renderText(const struct TrackInfo* info, struct sync_track* track, i
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static int findStartTrack(Group* group, Track* startTrack)
|
||||||
|
{
|
||||||
|
int i, track_count = group->trackCount;
|
||||||
|
|
||||||
|
for (i = 0; i < track_count; ++i)
|
||||||
|
{
|
||||||
|
if (group->t.tracks[i] == startTrack)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static int getTrackSize(TrackData* trackData, Track* track)
|
static int getTrackSize(TrackData* trackData, Track* track)
|
||||||
{
|
{
|
||||||
int size = 0;
|
int size = 0;
|
||||||
@ -209,7 +241,7 @@ static int getTrackSize(TrackData* trackData, Track* track)
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
int getGroupSize(TrackData* trackData, Group* group)
|
int getGroupSize(TrackData* trackData, Group* group, int startTrack)
|
||||||
{
|
{
|
||||||
int i, size = 0, count = group->trackCount;
|
int i, size = 0, count = group->trackCount;
|
||||||
int text_size = (Emgui_getTextSize(group->name) & 0xffff) + 40;
|
int text_size = (Emgui_getTextSize(group->name) & 0xffff) + 40;
|
||||||
@ -217,7 +249,7 @@ int getGroupSize(TrackData* trackData, Group* group)
|
|||||||
if (group->folded)
|
if (group->folded)
|
||||||
return track_size_folded;
|
return track_size_folded;
|
||||||
|
|
||||||
for (i = 0; i < count; ++i)
|
for (i = startTrack; i < count; ++i)
|
||||||
size += getTrackSize(trackData, group->t.tracks[i]);
|
size += getTrackSize(trackData, group->t.tracks[i]);
|
||||||
|
|
||||||
size = emaxi(size, text_size);
|
size = emaxi(size, text_size);
|
||||||
@ -242,6 +274,7 @@ static int renderChannel(struct TrackInfo* info, int startX, int editRow, Track*
|
|||||||
if (trackData->selected)
|
if (trackData->selected)
|
||||||
{
|
{
|
||||||
Emgui_fill(Emgui_color32(0xff, 0xff, 0x00, 0x80), startX, info->midPos, size, font_size + 1);
|
Emgui_fill(Emgui_color32(0xff, 0xff, 0x00, 0x80), startX, info->midPos, size, font_size + 1);
|
||||||
|
//updateStartTrack(trackData, startX, info->viewInfo);
|
||||||
|
|
||||||
//if (trackData->editText)
|
//if (trackData->editText)
|
||||||
// Emgui_drawText(trackData->editText, x_pos, info->midPos, Emgui_color32(255, 255, 255, 255));
|
// Emgui_drawText(trackData->editText, x_pos, info->midPos, Emgui_color32(255, 255, 255, 255));
|
||||||
@ -328,16 +361,19 @@ static int renderChannel(struct TrackInfo* info, int startX, int editRow, Track*
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static int renderGroup(Group* group, int posX, struct TrackInfo info, TrackData* trackData)
|
static int renderGroup(Group* group, Track* startTrack, int posX, int* trackOffset, struct TrackInfo info, TrackData* trackData)
|
||||||
{
|
{
|
||||||
int i, size, track_count = group->trackCount;
|
int i, startTrackIndex = 0, size, track_count = group->trackCount;
|
||||||
int oldY = info.startY;
|
const int oldY = info.startY;
|
||||||
|
const int windowSizeX = info.viewInfo->windowSizeX;
|
||||||
|
|
||||||
drawFoldButton(posX + 6, oldY - (font_size + 5), &group->folded);
|
drawFoldButton(posX + 6, oldY - (font_size + 5), &group->folded);
|
||||||
|
|
||||||
Emgui_setFont(info.viewInfo->smallFontId);
|
Emgui_setFont(info.viewInfo->smallFontId);
|
||||||
|
|
||||||
size = getGroupSize(trackData, group);
|
startTrackIndex = findStartTrack(group, startTrack);
|
||||||
|
|
||||||
|
size = getGroupSize(trackData, group, startTrackIndex);
|
||||||
|
|
||||||
printf("size %d\n", size);
|
printf("size %d\n", size);
|
||||||
|
|
||||||
@ -345,21 +381,30 @@ static int renderGroup(Group* group, int posX, struct TrackInfo info, TrackData*
|
|||||||
|
|
||||||
renderGroupHeader(group, posX, oldY, size);
|
renderGroupHeader(group, posX, oldY, size);
|
||||||
|
|
||||||
// ----
|
|
||||||
|
|
||||||
info.startPos += 5;
|
info.startPos += 5;
|
||||||
info.startY += 40;
|
info.startY += 40;
|
||||||
|
|
||||||
|
*trackOffset += (track_count - startTrackIndex);
|
||||||
|
|
||||||
if (!group->folded)
|
if (!group->folded)
|
||||||
{
|
{
|
||||||
for (i = 0; i < track_count; ++i)
|
for (i = startTrackIndex; i < track_count; ++i)
|
||||||
posX += renderChannel(&info, posX, -1, group->t.tracks[i]);
|
{
|
||||||
|
Track* t = group->t.tracks[i];
|
||||||
|
posX += renderChannel(&info, posX, -1, t);
|
||||||
|
|
||||||
|
if (posX >= windowSizeX)
|
||||||
|
{
|
||||||
|
if (trackData->activeTrack >= i)
|
||||||
|
info.viewInfo->startTrack++;
|
||||||
|
return posX;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Emgui_setDefaultFont();
|
Emgui_setDefaultFont();
|
||||||
|
|
||||||
return size;
|
return posX;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -367,9 +412,8 @@ static int renderGroup(Group* group, int posX, struct TrackInfo info, TrackData*
|
|||||||
void renderGroups(TrackViewInfo* viewInfo, TrackData* trackData)
|
void renderGroups(TrackViewInfo* viewInfo, TrackData* trackData)
|
||||||
{
|
{
|
||||||
struct TrackInfo info;
|
struct TrackInfo info;
|
||||||
Group* groups = trackData->groups;
|
const int sel_track = trackData->activeTrack;
|
||||||
//const int sel_track = trackData->activeTrack;
|
int start_track = viewInfo->startTrack;
|
||||||
int start_track = 0; //viewInfo->startTrack;
|
|
||||||
int x_pos = 40;
|
int x_pos = 40;
|
||||||
//int end_track = 0;
|
//int end_track = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@ -412,29 +456,33 @@ void renderGroups(TrackViewInfo* viewInfo, TrackData* trackData)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = start_track; i < trackData->groupCount; ++i)
|
for (i = start_track; i < trackData->syncData.num_tracks; )
|
||||||
{
|
{
|
||||||
int size;
|
Track* track = &trackData->tracks[i];
|
||||||
|
Group* group = track->group;
|
||||||
Group* group = &groups[i];
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
if (group->trackCount == 1)
|
if (group->trackCount == 1)
|
||||||
{
|
{
|
||||||
size = renderChannel(&info, x_pos, -1, group->t.track);
|
++i;
|
||||||
|
x_pos += renderChannel(&info, x_pos, -1, track);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
x_pos += renderGroup(group, track, x_pos, &i, info, trackData);
|
||||||
size = renderGroup(group, x_pos, info, trackData);
|
|
||||||
}
|
|
||||||
|
|
||||||
x_pos += size;
|
//i += group->trackCount;
|
||||||
|
|
||||||
if (x_pos >= viewInfo->windowSizeX)
|
if (x_pos >= viewInfo->windowSizeX)
|
||||||
|
{
|
||||||
|
if (sel_track >= i)
|
||||||
|
viewInfo->startTrack++;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sel_track < start_track)
|
||||||
|
viewInfo->startTrack = emaxi(viewInfo->startTrack - 1, 0);
|
||||||
|
|
||||||
Emgui_fill(Emgui_color32(127, 127, 127, 56), 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 1);
|
Emgui_fill(Emgui_color32(127, 127, 127, 56), 0, mid_screen_y + adjust_top_size, viewInfo->windowSizeX, font_size + 1);
|
||||||
/*
|
/*
|
||||||
end_track = syncData->num_tracks;
|
end_track = syncData->num_tracks;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user