the massive preparations - GUI

This commit is contained in:
tildearrow 2024-05-26 19:31:17 -05:00
parent 34c176a799
commit 00e0679442
48 changed files with 41493 additions and 2734 deletions

View file

@ -27,17 +27,17 @@
#include <imgui.h>
const char* waveGenBaseShapes[4]={
"Sine",
"Triangle",
"Saw",
"Pulse"
_N("Sine"),
_N("Triangle"),
_N("Saw"),
_N("Pulse")
};
const char* waveInterpolations[4]={
"None",
"Linear",
"Cosine",
"Cubic"
_N("None"),
_N("Linear"),
_N("Cosine"),
_N("Cubic")
};
double sinus(double x) {
@ -189,44 +189,44 @@ WaveFunc waveFuncs[]={
};
const char* fmWaveforms[] = {
"Sine",
"Rect. Sine",
"Abs. Sine",
"Quart. Sine",
"Squish. Sine",
"Abs. Squish. Sine",
_N("Sine"),
_N("Rect. Sine"),
_N("Abs. Sine"),
_N("Quart. Sine"),
_N("Squish. Sine"),
_N("Abs. Squish. Sine"),
"Square",
"rectSquare",
_N("Square"),
_N("rectSquare"),
"Saw",
"Rect. Saw",
"Abs. Saw",
_N("Saw"),
_N("Rect. Saw"),
_N("Abs. Saw"),
"Cubed Saw",
"Rect. Cubed Saw",
"Abs. Cubed Saw",
_N("Cubed Saw"),
_N("Rect. Cubed Saw"),
_N("Abs. Cubed Saw"),
"Cubed Sine",
"Rect. Cubed Sine",
"Abs. Cubed Sine",
"Quart. Cubed Sine",
"Squish. Cubed Sine",
"Squish. Abs. Cub. Sine",
_N("Cubed Sine"),
_N("Rect. Cubed Sine"),
_N("Abs. Cubed Sine"),
_N("Quart. Cubed Sine"),
_N("Squish. Cubed Sine"),
_N("Squish. Abs. Cub. Sine"),
"Triangle",
"Rect. Triangle",
"Abs. Triangle",
"Quart. Triangle",
"Squish. Triangle",
"Abs. Squish. Triangle",
_N("Triangle"),
_N("Rect. Triangle"),
_N("Abs. Triangle"),
_N("Quart. Triangle"),
_N("Squish. Triangle"),
_N("Abs. Squish. Triangle"),
"Cubed Triangle",
"Rect. Cubed Triangle",
"Abs. Cubed Triangle",
"Quart. Cubed Triangle",
"Squish. Cubed Triangle",
"Squish. Abs. Cub. Triangle",
_N("Cubed Triangle"),
_N("Rect. Cubed Triangle"),
_N("Abs. Cubed Triangle"),
_N("Quart. Cubed Triangle"),
_N("Squish. Cubed Triangle"),
_N("Squish. Abs. Cub. Triangle"),
};
const size_t fmWaveformsLen=sizeof(fmWaveforms)/sizeof(fmWaveforms[0]);
@ -409,8 +409,8 @@ void FurnaceGUI::drawWaveEdit() {
if (ImGui::Begin("Wavetable Editor",&waveEditOpen,globalWinFlags|(settings.allowEditDocking?0:ImGuiWindowFlags_NoDocking))) {
if (curWave<0 || curWave>=(int)e->song.wave.size()) {
ImGui::SetCursorPosY(ImGui::GetCursorPosY()+(ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeightWithSpacing()*2.0f)*0.5f);
CENTER_TEXT("no wavetable selected");
ImGui::Text("no wavetable selected");
CENTER_TEXT(_("no wavetable selected"));
ImGui::Text(_("no wavetable selected"));
if (ImGui::BeginTable("noAssetCenter",3)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch,0.5f);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed);
@ -421,7 +421,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::TableNextColumn();
if (e->song.wave.size()>0) {
if (ImGui::BeginCombo("##WaveSelect","select one...")) {
if (ImGui::BeginCombo("##WaveSelect",_("select one..."))) {
if (ImGui::BeginTable("WaveSelCombo",1,ImGuiTableFlags_ScrollY)) {
actualWaveList();
ImGui::EndTable();
@ -429,16 +429,16 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::EndCombo();
}
ImGui::SameLine();
ImGui::TextUnformatted("or");
ImGui::TextUnformatted(_("or"));
ImGui::SameLine();
}
if (ImGui::Button("Open")) {
if (ImGui::Button(_("Open"))) {
doAction(GUI_ACTION_WAVE_LIST_OPEN);
}
ImGui::SameLine();
ImGui::TextUnformatted("or");
ImGui::TextUnformatted(_("or"));
ImGui::SameLine();
if (ImGui::Button("Create New")) {
if (ImGui::Button(_("Create New"))) {
doAction(GUI_ACTION_WAVE_LIST_ADD);
}
@ -464,38 +464,38 @@ void FurnaceGUI::drawWaveEdit() {
doAction(GUI_ACTION_WAVE_LIST_OPEN_REPLACE);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Open");
ImGui::SetTooltip(_("Open"));
}
ImGui::SameLine();
if (ImGui::Button(ICON_FA_FLOPPY_O "##WESave")) {
doAction(GUI_ACTION_WAVE_LIST_SAVE);
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Save");
ImGui::SetTooltip(_("Save"));
}
if (ImGui::BeginPopupContextItem("WaveSaveFormats",ImGuiMouseButton_Right)) {
if (ImGui::MenuItem("save as .dmw...")) {
if (ImGui::MenuItem(_("save as .dmw..."))) {
doAction(GUI_ACTION_WAVE_LIST_SAVE_DMW);
}
if (ImGui::MenuItem("save raw...")) {
if (ImGui::MenuItem(_("save raw..."))) {
doAction(GUI_ACTION_WAVE_LIST_SAVE_RAW);
}
ImGui::EndPopup();
}
ImGui::SameLine();
if (ImGui::RadioButton("Steps",waveEditStyle==0)) {
if (ImGui::RadioButton(_("Steps"),waveEditStyle==0)) {
waveEditStyle=0;
}
ImGui::SameLine();
if (ImGui::RadioButton("Lines",waveEditStyle==1)) {
if (ImGui::RadioButton(_("Lines"),waveEditStyle==1)) {
waveEditStyle=1;
}
ImGui::TableNextColumn();
ImGui::Text("Width");
ImGui::Text(_("Width"));
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("use a width of:\n- any on Amiga/N163\n- 32 on Game Boy, PC Engine, SCC, Konami Bubble System, Namco WSG, Virtual Boy and WonderSwan\n- 64 on FDS\n- 128 on X1-010\nany other widths will be scaled during playback.");
ImGui::SetTooltip(_("use a width of:\n- any on Amiga/N163\n- 32 on Game Boy, PC Engine, SCC, Konami Bubble System, Namco WSG, Virtual Boy and WonderSwan\n- 64 on FDS\n- 128 on X1-010\nany other widths will be scaled during playback."));
}
ImGui::SameLine();
ImGui::SetNextItemWidth(96.0f*dpiScale);
@ -507,9 +507,9 @@ void FurnaceGUI::drawWaveEdit() {
MARK_MODIFIED;
}
ImGui::SameLine();
ImGui::Text("Height");
ImGui::Text(_("Height"));
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("use a height of:\n- 16 for Game Boy, WonderSwan, Namco WSG, Konami Bubble System, X1-010 Envelope shape and N163\n- 32 for PC Engine\n- 64 for FDS and Virtual Boy\n- 256 for X1-010 and SCC\nany other heights will be scaled during playback.");
ImGui::SetTooltip(_("use a height of:\n- 16 for Game Boy, WonderSwan, Namco WSG, Konami Bubble System, X1-010 Envelope shape and N163\n- 32 for PC Engine\n- 64 for FDS and Virtual Boy\n- 256 for X1-010 and SCC\nany other heights will be scaled during playback."));
}
ImGui::SameLine();
ImGui::SetNextItemWidth(96.0f*dpiScale);
@ -575,13 +575,13 @@ void FurnaceGUI::drawWaveEdit() {
waveGenSize.y=contentRegion.y;
if (ImGui::BeginChild("WaveGenView",waveGenSize)) {
if (ImGui::BeginTabBar("WaveGenOpt")) {
if (ImGui::BeginTabItem("Shapes")) {
if (ImGui::BeginTabItem(_("Shapes"))) {
waveGenFM=false;
if (waveGenBaseShape<0) waveGenBaseShape=0;
if (waveGenBaseShape>3) waveGenBaseShape=3;
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
if (CWSliderInt("##WGShape",&waveGenBaseShape,0,3,waveGenBaseShapes[waveGenBaseShape])) {
if (CWSliderInt("##WGShape",&waveGenBaseShape,0,3,_(waveGenBaseShapes[waveGenBaseShape]))) {
if (waveGenBaseShape<0) waveGenBaseShape=0;
if (waveGenBaseShape>3) waveGenBaseShape=3;
doGenerateWave();
@ -594,7 +594,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Duty");
ImGui::Text(_("Duty"));
ImGui::TableNextColumn();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
if (CWSliderFloat("##WGDuty",&waveGenDuty,0.0f,1.0f)) {
@ -604,7 +604,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("Exponent");
ImGui::Text(_("Exponent"));
ImGui::TableNextColumn();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
if (CWSliderInt("##WGExp",&waveGenPower,1,8)) {
@ -614,7 +614,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding();
ImGui::Text("XOR Point");
ImGui::Text(_("XOR Point"));
ImGui::TableNextColumn();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
if (CWSliderFloat("##WGXOR",&waveGenInvertPoint,0.0f,1.0f)) {
@ -624,7 +624,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::EndTable();
}
if (ImGui::TreeNode("Amplitude/Phase")) {
if (ImGui::TreeNode(_("Amplitude/Phase"))) {
if (ImGui::BeginTable("WGShapeProps",3)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.6f);
@ -665,7 +665,7 @@ void FurnaceGUI::drawWaveEdit() {
}
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("FM")) {
if (ImGui::BeginTabItem(_("FM"))) {
waveGenFM=true;
if (ImGui::BeginTable("WGFMProps",4)) {
@ -676,13 +676,13 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
ImGui::TableNextColumn();
ImGui::Text("Op");
ImGui::Text(_("Op"));
ImGui::TableNextColumn();
ImGui::Text("Level");
ImGui::Text(_("Level"));
ImGui::TableNextColumn();
ImGui::Text("Mult");
ImGui::Text(_("Mult"));
ImGui::TableNextColumn();
ImGui::Text("FB");
ImGui::Text(_("FB"));
for (int i=0; i<4; i++) {
ImGui::TableNextRow();
@ -720,14 +720,14 @@ void FurnaceGUI::drawWaveEdit() {
}
if (ImGui::BeginTable("WGFMWAVE",2)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize("Op").x);
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize(_("Op")).x);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,1);
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
ImGui::TableNextColumn();
ImGui::Text("Op");
ImGui::Text(_("Op"));
ImGui::TableNextColumn();
ImGui::Text("Waveform");
ImGui::Text(_("Waveform"));
for (int i=0; i<4; i++) {
ImGui::TableNextRow();
@ -738,7 +738,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::TableNextColumn();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
ImGui::PushID(i);
if (CWSliderInt("##WGWAVEFORM",&fmWaveform[i],0,fmWaveformsLen-1,fmWaveforms[fmWaveform[i]])) {
if (CWSliderInt("##WGWAVEFORM",&fmWaveform[i],0,fmWaveformsLen-1,_(fmWaveforms[fmWaveform[i]]))) {
doGenerateWave();
}
ImGui::PopID();
@ -746,8 +746,8 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::EndTable();
}
CENTER_TEXT("Connection Diagram");
ImGui::Text("Connection Diagram");
CENTER_TEXT(_("Connection Diagram"));
ImGui::Text(_("Connection Diagram"));
if (ImGui::BeginTable("WGFMCon",6)) {
ImGui::TableNextRow();
@ -762,7 +762,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::TableNextColumn();
ImGui::Text("4");
ImGui::TableNextColumn();
ImGui::Text("Out");
ImGui::Text(_("Out"));
ImGui::TableNextRow();
ImGui::TableNextColumn();
@ -869,7 +869,7 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("WaveTools")) {
if (ImGui::BeginTabItem(_("WaveTools"))) {
if (ImGui::BeginTable("WGParamItems",2)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch);
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed);
@ -882,18 +882,18 @@ void FurnaceGUI::drawWaveEdit() {
if (waveGenScaleX>256) waveGenScaleX=256;
}
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
if (CWSliderInt("##WGInterpolation",&waveInterpolation,0,3,waveInterpolations[waveInterpolation])) {
if (CWSliderInt("##WGInterpolation",&waveInterpolation,0,3,_(waveInterpolations[waveInterpolation]))) {
if (waveInterpolation<0) waveInterpolation=0;
if (waveInterpolation>3) waveInterpolation=3;
}
ImGui::TableNextColumn();
if (ImGui::Button("Scale X")) {
if (ImGui::Button(_("Scale X"))) {
if (waveGenScaleX>0 && wave->len!=waveGenScaleX) e->lockEngine([this,wave]() {
int origData[256];
// Copy original wave to temp buffer
// If longer than 256 samples, return
if (wave->len>256) {
showError("wavetable longer than 256 samples!");
showError(_("wavetable longer than 256 samples!"));
return;
}
memcpy(origData,wave->data,wave->len*sizeof(int));
@ -957,7 +957,7 @@ void FurnaceGUI::drawWaveEdit() {
if (waveGenScaleY>256) waveGenScaleY=256;
}
ImGui::TableNextColumn();
if (ImGui::Button("Scale Y")) {
if (ImGui::Button(_("Scale Y"))) {
if (waveGenScaleY>0 && wave->max!=(waveGenScaleY-1)) e->lockEngine([this,wave]() {
for (int i=0; i<wave->len; i++) {
wave->data[i]=(wave->data[i]*(waveGenScaleY))/(wave->max+1);
@ -975,7 +975,7 @@ void FurnaceGUI::drawWaveEdit() {
if (waveGenOffsetX>wave->len-1) waveGenOffsetX=wave->len-1;
}
ImGui::TableNextColumn();
if (ImGui::Button("Offset X")) {
if (ImGui::Button(_("Offset X"))) {
if (waveGenOffsetX!=0 && wave->len>0) e->lockEngine([this,wave]() {
int origData[256];
memcpy(origData,wave->data,wave->len*sizeof(int));
@ -997,7 +997,7 @@ void FurnaceGUI::drawWaveEdit() {
if (waveGenOffsetY>wave->max) waveGenOffsetY=wave->max;
}
ImGui::TableNextColumn();
if (ImGui::Button("Offset Y")) {
if (ImGui::Button(_("Offset Y"))) {
if (waveGenOffsetY!=0) e->lockEngine([this,wave]() {
for (int i=0; i<wave->len; i++) {
wave->data[i]=CLAMP(wave->data[i]+waveGenOffsetY,0,wave->max);
@ -1014,7 +1014,7 @@ void FurnaceGUI::drawWaveEdit() {
if (waveGenSmooth<1) waveGenSmooth=1;
}
ImGui::TableNextColumn();
if (ImGui::Button("Smooth")) {
if (ImGui::Button(_("Smooth"))) {
if (waveGenSmooth>0) e->lockEngine([this,wave]() {
int origData[256];
memcpy(origData,wave->data,wave->len*sizeof(int));
@ -1042,7 +1042,7 @@ void FurnaceGUI::drawWaveEdit() {
if (waveGenAmplify>100.0f) waveGenAmplify=100.0f;
}
ImGui::TableNextColumn();
if (ImGui::Button("Amplify")) {
if (ImGui::Button(_("Amplify"))) {
if (waveGenAmplify!=1.0f) e->lockEngine([this,wave]() {
for (int i=0; i<wave->len; i++) {
wave->data[i]=CLAMP(round((float)(wave->data[i]-(int)( /* Clang can you stop complaining */ (int)(wave->max+1)/(int)2))*waveGenAmplify),(int)(-((wave->max+1)/2)),(int)(wave->max/2))+(int)((wave->max+1)/2);
@ -1060,7 +1060,7 @@ void FurnaceGUI::drawWaveEdit() {
buttonSizeHalf.x-=ImGui::GetStyle().ItemSpacing.x;
buttonSizeHalf.x*=0.5;
if (ImGui::Button("Normalize",buttonSize)) {
if (ImGui::Button(_("Normalize"),buttonSize)) {
e->lockEngine([this,wave]() {
// find lowest point
int lowest=wave->max;
@ -1093,7 +1093,7 @@ void FurnaceGUI::drawWaveEdit() {
MARK_MODIFIED;
});
}
if (ImGui::Button("Invert",buttonSizeHalf)) {
if (ImGui::Button(_("Invert"),buttonSizeHalf)) {
e->lockEngine([this,wave]() {
for (int i=0; i<wave->len; i++) {
wave->data[i]=wave->max-wave->data[i];
@ -1102,7 +1102,7 @@ void FurnaceGUI::drawWaveEdit() {
});
}
ImGui::SameLine();
if (ImGui::Button("Reverse",buttonSizeHalf)) {
if (ImGui::Button(_("Reverse"),buttonSizeHalf)) {
e->lockEngine([this,wave]() {
int origData[256];
memcpy(origData,wave->data,wave->len*sizeof(int));
@ -1114,7 +1114,7 @@ void FurnaceGUI::drawWaveEdit() {
});
}
if (ImGui::Button("Half",buttonSizeHalf)) {
if (ImGui::Button(_("Half"),buttonSizeHalf)) {
int origData[256];
memcpy(origData,wave->data,wave->len*sizeof(int));
@ -1124,7 +1124,7 @@ void FurnaceGUI::drawWaveEdit() {
MARK_MODIFIED;
}
ImGui::SameLine();
if (ImGui::Button("Double",buttonSizeHalf)) {
if (ImGui::Button(_("Double"),buttonSizeHalf)) {
int origData[256];
memcpy(origData,wave->data,wave->len*sizeof(int));
@ -1134,7 +1134,7 @@ void FurnaceGUI::drawWaveEdit() {
MARK_MODIFIED;
}
if (ImGui::Button("Convert Signed/Unsigned",buttonSize)) {
if (ImGui::Button(_("Convert Signed/Unsigned"),buttonSize)) {
if (wave->max>0) e->lockEngine([this,wave]() {
for (int i=0; i<wave->len; i++) {
if (wave->data[i]>(wave->max/2)) {
@ -1146,7 +1146,7 @@ void FurnaceGUI::drawWaveEdit() {
MARK_MODIFIED;
});
}
if (ImGui::Button("Randomize",buttonSize)) {
if (ImGui::Button(_("Randomize"),buttonSize)) {
if (wave->max>0) e->lockEngine([this,wave]() {
for (int i=0; i<wave->len; i++) {
wave->data[i]=rand()%(wave->max+1);
@ -1164,11 +1164,11 @@ void FurnaceGUI::drawWaveEdit() {
ImGui::EndTable();
}
if (ImGui::RadioButton("Dec",!waveHex)) {
if (ImGui::RadioButton(_("Dec"),!waveHex)) {
waveHex=false;
}
ImGui::SameLine();
if (ImGui::RadioButton("Hex",waveHex)) {
if (ImGui::RadioButton(_("Hex"),waveHex)) {
waveHex=true;
}
ImGui::SameLine();
@ -1176,7 +1176,7 @@ void FurnaceGUI::drawWaveEdit() {
waveSigned=!waveSigned;
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Signed/Unsigned");
ImGui::SetTooltip(_("Signed/Unsigned"));
}
ImGui::SameLine();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); // wavetable text input size found here