2022-03-21 22:34:43 +00:00
|
|
|
/**
|
|
|
|
* Furnace Tracker - multi-system chiptune tracker
|
2023-01-20 00:18:40 +00:00
|
|
|
* Copyright (C) 2021-2023 tildearrow and contributors
|
2022-03-21 22:34:43 +00:00
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
*/
|
|
|
|
|
2022-03-21 21:34:19 +00:00
|
|
|
#include "gui.h"
|
|
|
|
#include "IconsFontAwesome4.h"
|
|
|
|
#include "misc/cpp/imgui_stdlib.h"
|
|
|
|
#include "plot_nolerp.h"
|
|
|
|
#include "guiConst.h"
|
|
|
|
#include <fmt/printf.h>
|
2022-05-05 05:52:15 +00:00
|
|
|
#include <imgui.h>
|
2022-03-21 21:34:19 +00:00
|
|
|
|
|
|
|
const char* sampleNote[12]={
|
|
|
|
"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"
|
|
|
|
};
|
|
|
|
|
2022-09-09 23:53:20 +00:00
|
|
|
void FurnaceGUI::drawInsList(bool asChild) {
|
2022-03-21 21:34:19 +00:00
|
|
|
if (nextWindow==GUI_WINDOW_INS_LIST) {
|
|
|
|
insListOpen=true;
|
|
|
|
ImGui::SetNextWindowFocus();
|
|
|
|
nextWindow=GUI_WINDOW_NOTHING;
|
|
|
|
}
|
2022-09-09 23:53:20 +00:00
|
|
|
if (!insListOpen && !asChild) return;
|
|
|
|
bool began=false;
|
|
|
|
if (asChild) {
|
|
|
|
began=ImGui::BeginChild("Instruments");
|
|
|
|
} else {
|
|
|
|
began=ImGui::Begin("Instruments",&insListOpen,globalWinFlags);
|
|
|
|
}
|
|
|
|
if (began) {
|
2022-05-05 05:52:15 +00:00
|
|
|
if (settings.unifiedDataView) settings.horizontalDataView=0;
|
2022-03-21 21:34:19 +00:00
|
|
|
if (ImGui::Button(ICON_FA_PLUS "##InsAdd")) {
|
2022-05-29 07:59:11 +00:00
|
|
|
if (!settings.unifiedDataView) doAction(GUI_ACTION_INS_LIST_ADD);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Add");
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
if (ImGui::BeginPopupContextItem("UnifiedAdd",ImGuiMouseButton_Left)) {
|
|
|
|
if (ImGui::MenuItem("instrument")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_ADD);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("wavetable")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_ADD);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("sample (create)")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_ADD);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
2022-11-13 23:29:37 +00:00
|
|
|
} else {
|
|
|
|
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
|
|
|
displayInsTypeList=true;
|
|
|
|
displayInsTypeListMakeInsSample=-1;
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_FILES_O "##InsClone")) {
|
2022-05-29 07:59:11 +00:00
|
|
|
if (!settings.unifiedDataView) doAction(GUI_ACTION_INS_LIST_DUPLICATE);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Duplicate");
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
if (ImGui::BeginPopupContextItem("UnifiedClone",ImGuiMouseButton_Left)) {
|
|
|
|
if (ImGui::MenuItem("instrument")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_DUPLICATE);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("wavetable")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_DUPLICATE);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("sample")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_DUPLICATE);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_FOLDER_OPEN "##InsLoad")) {
|
2022-05-29 07:59:11 +00:00
|
|
|
if (!settings.unifiedDataView) doAction(GUI_ACTION_INS_LIST_OPEN);
|
2022-05-09 18:20:44 +00:00
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
2022-12-11 02:09:13 +00:00
|
|
|
ImGui::SetTooltip("Open");
|
2022-12-10 19:32:51 +00:00
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
if (ImGui::BeginPopupContextItem("UnifiedLoad",ImGuiMouseButton_Left)) {
|
|
|
|
if (ImGui::MenuItem("instrument")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_OPEN);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("instrument (replace...)")) {
|
|
|
|
doAction((curIns>=0 && curIns<(int)e->song.ins.size())?GUI_ACTION_INS_LIST_OPEN_REPLACE:GUI_ACTION_INS_LIST_OPEN);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("wavetable")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_OPEN);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("sample")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_OPEN);
|
|
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
if (ImGui::MenuItem("instrument from TX81Z")) {
|
|
|
|
doAction(GUI_ACTION_TX81Z_REQUEST);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (ImGui::BeginPopupContextItem("InsOpenOpt")) {
|
|
|
|
if (ImGui::MenuItem("replace...")) {
|
|
|
|
doAction((curIns>=0 && curIns<(int)e->song.ins.size())?GUI_ACTION_INS_LIST_OPEN_REPLACE:GUI_ACTION_INS_LIST_OPEN);
|
|
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
if (ImGui::MenuItem("load from TX81Z")) {
|
|
|
|
doAction(GUI_ACTION_TX81Z_REQUEST);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
2022-05-09 18:20:44 +00:00
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Open (insert; right-click to replace)");
|
2022-05-09 18:20:44 +00:00
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_FLOPPY_O "##InsSave")) {
|
2022-05-29 07:59:11 +00:00
|
|
|
if (!settings.unifiedDataView) doAction(GUI_ACTION_INS_LIST_SAVE);
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Save");
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
if (ImGui::BeginPopupContextItem("UnifiedSave",ImGuiMouseButton_Left)) {
|
|
|
|
if (ImGui::MenuItem("instrument")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_SAVE);
|
|
|
|
}
|
2022-11-21 00:19:24 +00:00
|
|
|
if (ImGui::MenuItem("instrument (legacy .fui)")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_SAVE_OLD);
|
|
|
|
}
|
2022-09-04 07:26:29 +00:00
|
|
|
if (ImGui::MenuItem("instrument (.dmp)")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_SAVE_DMP);
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (ImGui::MenuItem("wavetable")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_SAVE);
|
|
|
|
}
|
2022-09-04 07:26:29 +00:00
|
|
|
if (ImGui::MenuItem("wavetable (.dmw)")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_SAVE_DMW);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("wavetable (raw)")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_SAVE_RAW);
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (ImGui::MenuItem("sample")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_SAVE);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
2022-09-04 07:26:29 +00:00
|
|
|
} else {
|
|
|
|
if (ImGui::BeginPopupContextItem("InsSaveFormats",ImGuiMouseButton_Right)) {
|
2022-11-21 00:19:24 +00:00
|
|
|
if (ImGui::MenuItem("save in legacy format...")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_SAVE_OLD);
|
|
|
|
}
|
2022-09-04 07:26:29 +00:00
|
|
|
if (ImGui::MenuItem("save as .dmp...")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_SAVE_DMP);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::ArrowButton("InsUp",ImGuiDir_Up)) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_MOVE_UP);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Move up");
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::ArrowButton("InsDown",ImGuiDir_Down)) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_MOVE_DOWN);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Move down");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_TIMES "##InsDelete")) {
|
2022-05-29 07:59:11 +00:00
|
|
|
if (!settings.unifiedDataView) doAction(GUI_ACTION_INS_LIST_DELETE);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Delete");
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
if (ImGui::BeginPopupContextItem("UnifiedDelete",ImGuiMouseButton_Left)) {
|
|
|
|
if (ImGui::MenuItem("instrument")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_DELETE);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("wavetable")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_DELETE);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("sample")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_DELETE);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
ImGui::Separator();
|
2022-05-05 05:52:15 +00:00
|
|
|
int availableRows=ImGui::GetContentRegionAvail().y/ImGui::GetFrameHeight();
|
|
|
|
if (availableRows<1) availableRows=1;
|
|
|
|
int columns=settings.horizontalDataView?(int)(ceil((double)(e->song.ins.size()+1)/(double)availableRows)):1;
|
|
|
|
if (columns<1) columns=1;
|
|
|
|
if (columns>64) columns=64;
|
|
|
|
if (ImGui::BeginTable("InsListScroll",columns,(settings.horizontalDataView?ImGuiTableFlags_ScrollX:0)|ImGuiTableFlags_ScrollY)) {
|
2022-03-21 21:34:19 +00:00
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text(ICON_FA_TASKS " Instruments");
|
|
|
|
ImGui::Indent();
|
|
|
|
}
|
|
|
|
|
2022-05-05 05:52:15 +00:00
|
|
|
if (settings.horizontalDataView) {
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
}
|
|
|
|
|
|
|
|
int curRow=0;
|
2022-04-21 07:53:09 +00:00
|
|
|
for (int i=-1; i<(int)e->song.ins.size(); i++) {
|
2022-05-29 07:59:11 +00:00
|
|
|
ImGui::PushID(i);
|
2022-10-03 23:56:18 +00:00
|
|
|
String name=ICON_FA_CIRCLE_O;
|
2022-04-21 07:53:09 +00:00
|
|
|
const char* insType="Bug!";
|
|
|
|
if (i>=0) {
|
|
|
|
DivInstrument* ins=e->song.ins[i];
|
|
|
|
insType=(ins->type>DIV_INS_MAX)?"Unknown":insTypes[ins->type];
|
2022-07-22 00:00:32 +00:00
|
|
|
if (ins->type==DIV_INS_N163) insType=settings.c163Name.c_str();
|
2022-04-21 07:53:09 +00:00
|
|
|
switch (ins->type) {
|
|
|
|
case DIV_INS_FM:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_FM]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_STD:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_STD]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_GB:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_GB]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_GAMEPAD "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_C64:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_C64]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_KEYBOARD_O "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_AMIGA:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_AMIGA]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_PCE:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_PCE]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_ID_BADGE "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_AY:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_AY]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_AY8930:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_AY8930]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_TIA:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_TIA]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_SAA1099:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SAA1099]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_VIC:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VIC]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_PET:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_PET]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_SQUARE "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_VRC6:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VRC6]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_VRC6_SAW:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VRC6_SAW]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_OPLL:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPLL]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_OPL:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPL]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_FDS:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_FDS]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_FLOPPY_O "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_VBOY:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VBOY]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BINOCULARS "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_N163:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_N163]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_CALCULATOR "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_SCC:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SCC]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_CALCULATOR "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_OPZ:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPZ]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_POKEY:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_POKEY]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_BEEPER:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_BEEPER]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_SQUARE "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_SWAN:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SWAN]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_GAMEPAD "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_MIKEY:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MIKEY]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_VERA:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_VERA]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_KEYBOARD_O "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_X1_010:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_X1_010]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
2022-04-27 05:56:15 +00:00
|
|
|
case DIV_INS_ES5506:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_ES5506]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
2022-04-27 05:56:15 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_MULTIPCM:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MULTIPCM]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
2022-04-27 05:56:15 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_SNES:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SNES]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
2022-04-27 05:56:15 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_SU:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SU]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_MICROCHIP "##_INS%d",i);
|
2022-04-27 05:56:15 +00:00
|
|
|
break;
|
2022-05-20 07:43:39 +00:00
|
|
|
case DIV_INS_NAMCO:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_NAMCO]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_PIE_CHART "##_INS%d",i);
|
2022-05-20 07:43:39 +00:00
|
|
|
break;
|
2022-05-30 23:37:07 +00:00
|
|
|
case DIV_INS_OPL_DRUMS:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPL_DRUMS]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_COFFEE "##_INS%d",i);
|
2022-05-30 23:37:07 +00:00
|
|
|
break;
|
2022-09-23 08:41:38 +00:00
|
|
|
case DIV_INS_OPM:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_OPM]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_AREA_CHART "##_INS%d",i);
|
2022-09-23 08:41:38 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_NES:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_NES]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_GAMEPAD "##_INS%d",i);
|
2022-09-23 08:41:38 +00:00
|
|
|
break;
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
case DIV_INS_MSM6258:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MSM6258]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_MSM6295:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MSM6295]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_ADPCMA:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_ADPCMA]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_ADPCMB:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_ADPCMB]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_SEGAPCM:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SEGAPCM]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_QSOUND:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_QSOUND]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_YMZ280B:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_YMZ280B]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
break;
|
|
|
|
case DIV_INS_RF5C68:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_RF5C68]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_VOLUME_UP "##_INS%d",i);
|
Prepare for split sample chip instrument
(MSM6258, MSM6295, QSound, Sega PCM, ADPCM-A, ADPCM-B, YMZ280B, RF5C68)
Instrument color and icons are placeholder.
different volume range, hard panned/soft panned and/or independent volume per output, chip-dependent features (global volume, echo, etc)
Allow use sample in instrument tab for chip with sample support
Prepare to support X1-010 Seta 2 style bankswitch behavior
Prepare to support AY89x0 PCM DAC
Support volume for PCE sample (DAC)
Fix Lynx, Y8950 sample pitch matches to sample preview
Support PCM DAC with backward and pingpong loop mode
Reduce some codes
Add Sega PCM, AY89x0, QSound, PCM DAC, Lynx per-channel debug support
2022-08-27 07:27:36 +00:00
|
|
|
break;
|
2022-10-01 08:15:40 +00:00
|
|
|
case DIV_INS_MSM5232:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_MSM5232]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
2022-10-01 08:15:40 +00:00
|
|
|
break;
|
2022-10-12 05:46:33 +00:00
|
|
|
case DIV_INS_T6W28:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_T6W28]);
|
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
|
|
|
break;
|
2022-12-08 05:18:22 +00:00
|
|
|
case DIV_INS_K007232:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_K007232]);
|
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
|
|
|
break;
|
2022-12-15 05:47:46 +00:00
|
|
|
case DIV_INS_GA20:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_GA20]);
|
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
|
|
|
break;
|
|
|
|
case DIV_INS_POKEMINI:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_POKEMINI]);
|
|
|
|
name=fmt::sprintf(ICON_FA_BAR_CHART "##_INS%d",i);
|
|
|
|
break;
|
2023-02-11 12:56:41 +00:00
|
|
|
case DIV_INS_SM8521:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_SM8521]);
|
|
|
|
name=fmt::sprintf(ICON_FA_PIE_CHART "##_INS%d",i);
|
|
|
|
break;
|
2022-04-21 07:53:09 +00:00
|
|
|
default:
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_INSTR_UNKNOWN]);
|
2022-10-03 23:56:18 +00:00
|
|
|
name=fmt::sprintf(ICON_FA_QUESTION "##_INS%d",i);
|
2022-04-21 07:53:09 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-05-05 05:52:15 +00:00
|
|
|
if (!settings.horizontalDataView) {
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
} else if (curRow==0) {
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
}
|
2022-04-21 07:53:09 +00:00
|
|
|
if (ImGui::Selectable(name.c_str(),(i==-1)?(curIns<0 || curIns>=e->song.insLen):(curIns==i))) {
|
2022-03-21 21:34:19 +00:00
|
|
|
curIns=i;
|
2022-05-21 23:36:15 +00:00
|
|
|
wavePreviewInit=true;
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-05-19 18:06:26 +00:00
|
|
|
if (wantScrollList && curIns==i) ImGui::SetScrollHereY();
|
2022-03-21 21:34:19 +00:00
|
|
|
if (settings.insFocusesPattern && patternOpen && ImGui::IsItemActivated()) {
|
|
|
|
nextWindow=GUI_WINDOW_PATTERN;
|
|
|
|
curIns=i;
|
2022-05-21 23:36:15 +00:00
|
|
|
wavePreviewInit=true;
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-11-05 21:22:15 +00:00
|
|
|
if (ImGui::IsItemHovered() && i>=0 && !mobileUI) {
|
2022-10-03 23:56:18 +00:00
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
2022-04-21 07:53:09 +00:00
|
|
|
ImGui::SetTooltip("%s",insType);
|
2022-10-03 23:56:18 +00:00
|
|
|
ImGui::PopStyleColor();
|
2022-03-21 21:34:19 +00:00
|
|
|
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
|
|
|
insEditOpen=true;
|
|
|
|
nextWindow=GUI_WINDOW_INS_EDIT;
|
|
|
|
}
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (i>=0) {
|
|
|
|
if (ImGui::BeginPopupContextItem("InsRightMenu")) {
|
|
|
|
curIns=i;
|
2022-10-03 23:56:18 +00:00
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
2022-05-29 07:59:11 +00:00
|
|
|
if (ImGui::MenuItem("replace...")) {
|
|
|
|
doAction((curIns>=0 && curIns<(int)e->song.ins.size())?GUI_ACTION_INS_LIST_OPEN_REPLACE:GUI_ACTION_INS_LIST_OPEN);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("save")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_SAVE);
|
|
|
|
}
|
2022-11-21 00:19:24 +00:00
|
|
|
if (ImGui::MenuItem("save (legacy .fui)")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_SAVE_OLD);
|
|
|
|
}
|
2022-09-04 07:26:29 +00:00
|
|
|
if (ImGui::MenuItem("save (.dmp)")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_SAVE_DMP);
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (ImGui::MenuItem("delete")) {
|
|
|
|
doAction(GUI_ACTION_INS_LIST_DELETE);
|
|
|
|
}
|
2022-10-03 23:56:18 +00:00
|
|
|
ImGui::PopStyleColor();
|
2022-05-29 07:59:11 +00:00
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
|
|
|
}
|
2022-10-03 23:56:18 +00:00
|
|
|
if (i>=0) {
|
2022-10-08 22:41:34 +00:00
|
|
|
if (i<(int)e->song.ins.size()) {
|
|
|
|
DivInstrument* ins=e->song.ins[i];
|
|
|
|
ImGui::SameLine();
|
|
|
|
ImGui::Text("%.2X: %s",i,ins->name.c_str());
|
|
|
|
}
|
2022-10-03 23:56:18 +00:00
|
|
|
} else {
|
|
|
|
ImGui::SameLine();
|
|
|
|
ImGui::Text("- None -");
|
|
|
|
}
|
|
|
|
ImGui::PopStyleColor();
|
2022-05-05 05:52:15 +00:00
|
|
|
if (settings.horizontalDataView) {
|
|
|
|
if (++curRow>=availableRows) curRow=0;
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
ImGui::PopID();
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
ImGui::Unindent();
|
|
|
|
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text(ICON_FA_AREA_CHART " Wavetables");
|
|
|
|
ImGui::Indent();
|
|
|
|
actualWaveList();
|
|
|
|
ImGui::Unindent();
|
|
|
|
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
ImGui::Text(ICON_FA_VOLUME_UP " Samples");
|
|
|
|
ImGui::Indent();
|
|
|
|
actualSampleList();
|
|
|
|
ImGui::Unindent();
|
|
|
|
}
|
|
|
|
|
|
|
|
ImGui::EndTable();
|
|
|
|
}
|
|
|
|
}
|
2022-09-09 23:53:20 +00:00
|
|
|
if (asChild) {
|
|
|
|
ImGui::EndChild();
|
|
|
|
} else {
|
|
|
|
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_INS_LIST;
|
|
|
|
ImGui::End();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
|
2022-09-09 23:53:20 +00:00
|
|
|
void FurnaceGUI::drawWaveList(bool asChild) {
|
2022-03-21 21:34:19 +00:00
|
|
|
if (nextWindow==GUI_WINDOW_WAVE_LIST) {
|
|
|
|
waveListOpen=true;
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
ImGui::SetWindowFocus("Instruments");
|
|
|
|
} else {
|
|
|
|
ImGui::SetNextWindowFocus();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
nextWindow=GUI_WINDOW_NOTHING;
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) return;
|
2022-09-09 23:53:20 +00:00
|
|
|
if (!waveListOpen && !asChild) return;
|
|
|
|
bool began=false;
|
|
|
|
if (asChild) {
|
|
|
|
began=ImGui::BeginChild("Wavetables");
|
|
|
|
} else {
|
|
|
|
began=ImGui::Begin("Wavetables",&waveListOpen,globalWinFlags);
|
|
|
|
}
|
|
|
|
if (began) {
|
2022-03-21 21:34:19 +00:00
|
|
|
if (ImGui::Button(ICON_FA_PLUS "##WaveAdd")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_ADD);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Add");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_FILES_O "##WaveClone")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_DUPLICATE);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Duplicate");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_FOLDER_OPEN "##WaveLoad")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_OPEN);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
2022-12-11 02:09:13 +00:00
|
|
|
ImGui::SetTooltip("Open");
|
2022-12-10 19:32:51 +00:00
|
|
|
}
|
2022-08-13 09:17:32 +00:00
|
|
|
if (ImGui::BeginPopupContextItem("WaveOpenOpt")) {
|
|
|
|
if (ImGui::MenuItem("replace...")) {
|
|
|
|
doAction((curWave>=0 && curWave<(int)e->song.wave.size())?GUI_ACTION_WAVE_LIST_OPEN_REPLACE:GUI_ACTION_WAVE_LIST_OPEN);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_FLOPPY_O "##WaveSave")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_SAVE);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Save");
|
|
|
|
}
|
2022-09-04 07:26:29 +00:00
|
|
|
if (!settings.unifiedDataView) {
|
|
|
|
if (ImGui::BeginPopupContextItem("WaveSaveFormats",ImGuiMouseButton_Right)) {
|
|
|
|
if (ImGui::MenuItem("save as .dmw...")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_SAVE_DMW);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("save raw...")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_SAVE_RAW);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::ArrowButton("WaveUp",ImGuiDir_Up)) {
|
2022-05-26 04:50:11 +00:00
|
|
|
doAction(GUI_ACTION_WAVE_LIST_MOVE_UP);
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Move up");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::ArrowButton("WaveDown",ImGuiDir_Down)) {
|
2022-05-26 04:50:11 +00:00
|
|
|
doAction(GUI_ACTION_WAVE_LIST_MOVE_DOWN);
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Move down");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_TIMES "##WaveDelete")) {
|
|
|
|
doAction(GUI_ACTION_WAVE_LIST_DELETE);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Delete");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::Separator();
|
|
|
|
if (ImGui::BeginTable("WaveListScroll",1,ImGuiTableFlags_ScrollY)) {
|
|
|
|
actualWaveList();
|
|
|
|
ImGui::EndTable();
|
|
|
|
}
|
|
|
|
}
|
2022-09-09 23:53:20 +00:00
|
|
|
if (asChild) {
|
|
|
|
ImGui::EndChild();
|
|
|
|
} else {
|
|
|
|
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_WAVE_LIST;
|
|
|
|
ImGui::End();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
|
2022-09-09 23:53:20 +00:00
|
|
|
void FurnaceGUI::drawSampleList(bool asChild) {
|
2022-03-21 21:34:19 +00:00
|
|
|
if (nextWindow==GUI_WINDOW_SAMPLE_LIST) {
|
|
|
|
sampleListOpen=true;
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) {
|
|
|
|
ImGui::SetWindowFocus("Instruments");
|
|
|
|
} else {
|
|
|
|
ImGui::SetNextWindowFocus();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
nextWindow=GUI_WINDOW_NOTHING;
|
|
|
|
}
|
2022-05-29 07:59:11 +00:00
|
|
|
if (settings.unifiedDataView) return;
|
2022-09-09 23:53:20 +00:00
|
|
|
if (!sampleListOpen && !asChild) return;
|
|
|
|
bool began=false;
|
|
|
|
if (asChild) {
|
|
|
|
began=ImGui::BeginChild("Samples");
|
|
|
|
} else {
|
|
|
|
began=ImGui::Begin("Samples",&sampleListOpen,globalWinFlags);
|
|
|
|
}
|
|
|
|
if (began) {
|
2022-04-02 23:21:29 +00:00
|
|
|
if (ImGui::Button(ICON_FA_FILE "##SampleAdd")) {
|
2022-03-21 21:34:19 +00:00
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_ADD);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Add");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
2022-04-12 07:15:12 +00:00
|
|
|
if (ImGui::Button(ICON_FA_FILES_O "##SampleClone")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_DUPLICATE);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Duplicate");
|
|
|
|
}
|
2022-04-12 07:15:12 +00:00
|
|
|
ImGui::SameLine();
|
2022-03-21 21:34:19 +00:00
|
|
|
if (ImGui::Button(ICON_FA_FOLDER_OPEN "##SampleLoad")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_OPEN);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
2022-12-11 02:09:13 +00:00
|
|
|
ImGui::SetTooltip("Open");
|
2022-12-10 19:32:51 +00:00
|
|
|
}
|
2022-08-13 09:17:32 +00:00
|
|
|
if (ImGui::BeginPopupContextItem("SampleOpenOpt")) {
|
|
|
|
if (ImGui::MenuItem("replace...")) {
|
|
|
|
doAction((curSample>=0 && curSample<(int)e->song.sample.size())?GUI_ACTION_SAMPLE_LIST_OPEN_REPLACE:GUI_ACTION_SAMPLE_LIST_OPEN);
|
|
|
|
}
|
|
|
|
ImGui::Separator();
|
|
|
|
if (ImGui::MenuItem("import raw...")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_OPEN_RAW);
|
|
|
|
}
|
|
|
|
if (ImGui::MenuItem("import raw (replace)...")) {
|
|
|
|
doAction((curSample>=0 && curSample<(int)e->song.sample.size())?GUI_ACTION_SAMPLE_LIST_OPEN_REPLACE_RAW:GUI_ACTION_SAMPLE_LIST_OPEN_RAW);
|
|
|
|
}
|
|
|
|
ImGui::EndPopup();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_FLOPPY_O "##SampleSave")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_SAVE);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Save");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::ArrowButton("SampleUp",ImGuiDir_Up)) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_MOVE_UP);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Move up");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::ArrowButton("SampleDown",ImGuiDir_Down)) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_MOVE_DOWN);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Move down");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_TIMES "##SampleDelete")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_DELETE);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Delete");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_VOLUME_UP "##PreviewSampleL")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_PREVIEW);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Preview");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SameLine();
|
|
|
|
if (ImGui::Button(ICON_FA_VOLUME_OFF "##StopSampleL")) {
|
|
|
|
doAction(GUI_ACTION_SAMPLE_LIST_STOP_PREVIEW);
|
|
|
|
}
|
2022-12-10 19:32:51 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
ImGui::SetTooltip("Stop preview");
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::Separator();
|
|
|
|
if (ImGui::BeginTable("SampleListScroll",1,ImGuiTableFlags_ScrollY)) {
|
|
|
|
actualSampleList();
|
|
|
|
ImGui::EndTable();
|
|
|
|
}
|
|
|
|
ImGui::Unindent();
|
|
|
|
}
|
2022-09-09 23:53:20 +00:00
|
|
|
if (asChild) {
|
|
|
|
ImGui::EndChild();
|
|
|
|
} else {
|
|
|
|
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_SAMPLE_LIST;
|
|
|
|
ImGui::End();
|
|
|
|
}
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void FurnaceGUI::actualWaveList() {
|
2022-05-28 02:02:19 +00:00
|
|
|
float wavePreview[257];
|
2022-03-21 21:34:19 +00:00
|
|
|
for (int i=0; i<(int)e->song.wave.size(); i++) {
|
|
|
|
DivWavetable* wave=e->song.wave[i];
|
|
|
|
for (int i=0; i<wave->len; i++) {
|
|
|
|
wavePreview[i]=wave->data[i];
|
|
|
|
}
|
|
|
|
if (wave->len>0) wavePreview[wave->len]=wave->data[wave->len-1];
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
|
|
|
if (ImGui::Selectable(fmt::sprintf("%d##_WAVE%d\n",i,i).c_str(),curWave==i)) {
|
|
|
|
curWave=i;
|
|
|
|
}
|
2022-05-19 18:06:26 +00:00
|
|
|
if (wantScrollList && curWave==i) ImGui::SetScrollHereY();
|
2022-03-21 21:34:19 +00:00
|
|
|
if (ImGui::IsItemHovered()) {
|
|
|
|
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
|
|
|
waveEditOpen=true;
|
2023-02-11 00:20:05 +00:00
|
|
|
nextWindow=GUI_WINDOW_WAVE_EDIT;
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
ImGui::SameLine();
|
|
|
|
PlotNoLerp(fmt::sprintf("##_WAVEP%d",i).c_str(),wavePreview,wave->len+1,0,NULL,0,wave->max);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void FurnaceGUI::actualSampleList() {
|
|
|
|
for (int i=0; i<(int)e->song.sample.size(); i++) {
|
2022-12-07 08:42:54 +00:00
|
|
|
bool memWarning=false;
|
|
|
|
|
2022-03-21 21:34:19 +00:00
|
|
|
DivSample* sample=e->song.sample[i];
|
|
|
|
ImGui::TableNextRow();
|
|
|
|
ImGui::TableNextColumn();
|
2022-12-07 08:42:54 +00:00
|
|
|
for (int j=0; j<e->song.systemLen; j++) {
|
|
|
|
DivDispatch* dispatch=e->getDispatch(j);
|
|
|
|
if (dispatch==NULL) continue;
|
|
|
|
|
2022-12-09 05:30:27 +00:00
|
|
|
for (int k=0; k<DIV_MAX_SAMPLE_TYPE; k++) {
|
2022-12-07 08:42:54 +00:00
|
|
|
if (dispatch->getSampleMemCapacity(k)==0) continue;
|
|
|
|
if (!dispatch->isSampleLoaded(k,i) && sample->renderOn[k][j]) {
|
|
|
|
memWarning=true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (memWarning) break;
|
|
|
|
}
|
|
|
|
if (memWarning) ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_SAMPLE_CHIP_WARNING]);
|
2022-03-21 21:34:19 +00:00
|
|
|
if (ImGui::Selectable(fmt::sprintf("%d: %s##_SAM%d",i,sample->name,i).c_str(),curSample==i)) {
|
|
|
|
curSample=i;
|
|
|
|
samplePos=0;
|
|
|
|
updateSampleTex=true;
|
|
|
|
}
|
2022-11-05 21:22:15 +00:00
|
|
|
if (ImGui::IsItemHovered() && !mobileUI) {
|
2022-12-07 08:42:54 +00:00
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
2022-03-21 21:34:19 +00:00
|
|
|
ImGui::SetTooltip("Bank %d: %s",i/12,sampleNote[i%12]);
|
|
|
|
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
|
|
|
sampleEditOpen=true;
|
2023-02-11 00:20:05 +00:00
|
|
|
nextWindow=GUI_WINDOW_SAMPLE_EDIT;
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-12-07 08:42:54 +00:00
|
|
|
ImGui::PopStyleColor();
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-12-07 08:42:54 +00:00
|
|
|
if (memWarning) {
|
|
|
|
ImGui::SameLine();
|
|
|
|
ImGui::Text(ICON_FA_EXCLAMATION_TRIANGLE);
|
|
|
|
if (ImGui::IsItemHovered() && !mobileUI) {
|
|
|
|
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
|
|
|
ImGui::SetTooltip("out of memory for this sample!");
|
|
|
|
ImGui::PopStyleColor();
|
|
|
|
}
|
|
|
|
ImGui::PopStyleColor();
|
|
|
|
}
|
|
|
|
if (wantScrollList && curSample==i) ImGui::SetScrollHereY();
|
2022-03-21 21:34:19 +00:00
|
|
|
}
|
2022-03-31 20:25:58 +00:00
|
|
|
}
|