support horizontal mode in wavetable list
This commit is contained in:
parent
5195f7562a
commit
3f6200aa9a
|
@ -488,7 +488,7 @@ below all the binds, select a key from the dropdown list to add it. it will appe
|
||||||
|
|
||||||
- **Unified instrument/wavetable/sample list**: combines all three types of assets into one list.
|
- **Unified instrument/wavetable/sample list**: combines all three types of assets into one list.
|
||||||
- the buttons act as appropriate to the currently selected asset or header.
|
- the buttons act as appropriate to the currently selected asset or header.
|
||||||
- **Horizontal instrument list**: when there are more instruments than there is room to display them...
|
- **Horizontal instrument/wavetable list**: when there are more instruments/wavetables than there is room to display them...
|
||||||
- if on, scroll horizontally through multiple columns.
|
- if on, scroll horizontally through multiple columns.
|
||||||
- if off, scroll vertically in one long column.
|
- if off, scroll vertically in one long column.
|
||||||
- only appears if "Unified instrument/wavetable/sample list" is off.
|
- only appears if "Unified instrument/wavetable/sample list" is off.
|
||||||
|
|
|
@ -997,6 +997,37 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename func_waveItemData>
|
||||||
|
void FurnaceGUI::waveListHorizontalGroup(float* wavePreview, int dir, int count, const func_waveItemData& waveItemData) {
|
||||||
|
if (count==0) return;
|
||||||
|
|
||||||
|
float idealWidthMin=225.0f*dpiScale;
|
||||||
|
float idealWidthMax=350.0f*dpiScale;
|
||||||
|
float availX=ImGui::GetContentRegionAvail().x;
|
||||||
|
int columnCount=CLAMP((int)(availX/idealWidthMin),1,count);
|
||||||
|
int rowCount=(int)ceilf(count/(float)columnCount);
|
||||||
|
columnCount=(int)ceilf(count/(float)rowCount);
|
||||||
|
float columnWidth=MIN(CLAMP(availX/columnCount,idealWidthMin,idealWidthMax),availX);
|
||||||
|
if (ImGui::BeginTable("##waveListGroupTable", columnCount, ImGuiTableFlags_SizingFixedSame)) {
|
||||||
|
for (int col=0; col<columnCount; col++) {
|
||||||
|
ImGui::TableSetupColumn("##column", ImGuiTableColumnFlags_WidthFixed, columnWidth);
|
||||||
|
}
|
||||||
|
for (int row=0; row<rowCount; row++) {
|
||||||
|
ImGui::TableNextRow();
|
||||||
|
for (int col=0; col<columnCount; col++) {
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
int idx=row + col*rowCount;
|
||||||
|
if (idx>=count) continue;
|
||||||
|
|
||||||
|
int waveIdx, asset;
|
||||||
|
waveItemData(row + col*rowCount, &waveIdx, &asset);
|
||||||
|
waveListItem(waveIdx, wavePreview, dir, asset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FurnaceGUI::actualWaveList() {
|
void FurnaceGUI::actualWaveList() {
|
||||||
float wavePreview[257];
|
float wavePreview[257];
|
||||||
|
|
||||||
|
@ -1021,10 +1052,17 @@ void FurnaceGUI::actualWaveList() {
|
||||||
ImGui::EndPopup();
|
ImGui::EndPopup();
|
||||||
}
|
}
|
||||||
if (treeNode) {
|
if (treeNode) {
|
||||||
int assetIndex=0;
|
if(settings.horizontalDataView) {
|
||||||
for (int j: i.entries) {
|
waveListHorizontalGroup(wavePreview, dirIndex, i.entries.size(), [&](int i_, int* waveIdx, int* asset) {
|
||||||
waveListItem(j,wavePreview,dirIndex,assetIndex);
|
*waveIdx=i.entries[i_];
|
||||||
assetIndex++;
|
*asset=i_;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
int assetIndex=0;
|
||||||
|
for (int j: i.entries) {
|
||||||
|
waveListItem(j,wavePreview,dirIndex,assetIndex);
|
||||||
|
assetIndex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
@ -1037,10 +1075,19 @@ void FurnaceGUI::actualWaveList() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int i=0; i<(int)e->song.wave.size(); i++) {
|
if(settings.horizontalDataView) {
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
waveListItem(i,wavePreview,-1,-1);
|
waveListHorizontalGroup(wavePreview, -1, (int)e->song.wave.size(), [&](int i, int* waveIdx, int* asset) {
|
||||||
|
*waveIdx=i;
|
||||||
|
*asset=-1;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
for (int i=0; i<(int)e->song.wave.size(); i++) {
|
||||||
|
ImGui::TableNextRow();
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
waveListItem(i,wavePreview,-1,-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2817,6 +2817,8 @@ class FurnaceGUI {
|
||||||
void actualWaveList();
|
void actualWaveList();
|
||||||
void actualSampleList();
|
void actualSampleList();
|
||||||
|
|
||||||
|
template <typename func_waveItemData>
|
||||||
|
void waveListHorizontalGroup(float* wavePreview, int dir, int count, const func_waveItemData& waveItemData);
|
||||||
void insListItem(int index, int dir, int asset);
|
void insListItem(int index, int dir, int asset);
|
||||||
void waveListItem(int index, float* wavePreview, int dir, int asset);
|
void waveListItem(int index, float* wavePreview, int dir, int asset);
|
||||||
void sampleListItem(int index, int dir, int asset);
|
void sampleListItem(int index, int dir, int asset);
|
||||||
|
|
|
@ -3575,7 +3575,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
|
|
||||||
ImGui::BeginDisabled(settings.unifiedDataView);
|
ImGui::BeginDisabled(settings.unifiedDataView);
|
||||||
bool horizontalDataViewB=settings.horizontalDataView;
|
bool horizontalDataViewB=settings.horizontalDataView;
|
||||||
if (ImGui::Checkbox(_("Horizontal instrument list"),&horizontalDataViewB)) {
|
if (ImGui::Checkbox(_("Horizontal instrument/wavetable list"),&horizontalDataViewB)) {
|
||||||
settings.horizontalDataView=horizontalDataViewB;
|
settings.horizontalDataView=horizontalDataViewB;
|
||||||
settingsChanged=true;
|
settingsChanged=true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue