the massive preparations - GUI
This commit is contained in:
parent
34c176a799
commit
00e0679442
7729
po/furnace.pot
7729
po/furnace.pot
File diff suppressed because it is too large
Load diff
7729
po/pt_BR.po
7729
po/pt_BR.po
File diff suppressed because it is too large
Load diff
|
@ -13,7 +13,7 @@ echo '"MIME-Version: 1.0\n"
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
' >> po/furnace.pot
|
||||
|
||||
find src/ -type f -regex ".*\(cpp\|h\)$" | xargs xgettext --omit-header -k_ -L C++ -o - >> po/furnace.pot
|
||||
find src/ -type f -regex ".*\(cpp\|h\)$" | xargs xgettext --omit-header -k_ -k_N -L C++ -o - >> po/furnace.pot || exit 1
|
||||
|
||||
cd po
|
||||
for i in ${EXPORT_LANGS[@]}; do
|
||||
|
|
|
@ -140,7 +140,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Columns");
|
||||
ImGui::Text(_("Columns"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::InputInt("##COSColumns",&chanOscCols,1,3)) {
|
||||
|
@ -149,7 +149,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
}
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Size (ms)");
|
||||
ImGui::Text(_("Size (ms)"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::InputFloat("##COSWinSize",&chanOscWindowSize,1.0f,10.0f)) {
|
||||
|
@ -160,7 +160,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Automatic columns");
|
||||
ImGui::Text(_("Automatic columns"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
const char* previewColType=autoColsTypes[chanOscAutoColsType&3];
|
||||
|
@ -174,19 +174,19 @@ void FurnaceGUI::drawChanOsc() {
|
|||
}
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Checkbox("Center waveform",&chanOscWaveCorr)) {
|
||||
if (ImGui::Checkbox(_("Center waveform"),&chanOscWaveCorr)) {
|
||||
centerSettingReset=true;
|
||||
}
|
||||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Checkbox("Randomize phase on note",&chanOscRandomPhase)) {
|
||||
if (ImGui::Checkbox(_("Randomize phase on note"),&chanOscRandomPhase)) {
|
||||
}
|
||||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Amplitude");
|
||||
ImGui::Text(_("Amplitude"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (CWSliderFloat("##COSAmp",&chanOscAmplify,0.0f,2.0f)) {
|
||||
|
@ -196,7 +196,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Line size");
|
||||
ImGui::Text(_("Line size"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (CWSliderFloat("##COSLine",&chanOscLineSize,0.25f,16.0f)) {
|
||||
|
@ -208,14 +208,14 @@ void FurnaceGUI::drawChanOsc() {
|
|||
ImGui::EndTable();
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Gradient",&chanOscUseGrad);
|
||||
ImGui::Checkbox(_("Gradient"),&chanOscUseGrad);
|
||||
|
||||
if (chanOscUseGrad) {
|
||||
if (chanOscGradTex==NULL) {
|
||||
chanOscGradTex=rend->createTexture(true,chanOscGrad.width,chanOscGrad.height,true,bestTexFormat);
|
||||
|
||||
if (chanOscGradTex==NULL) {
|
||||
logE("error while creating gradient texture!");
|
||||
logE(_("error while creating gradient texture!"));
|
||||
} else {
|
||||
updateChanOscGradTex=true;
|
||||
}
|
||||
|
@ -233,7 +233,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
if (rend->updateTexture(chanOscGradTex,chanOscGrad.grad.get(),chanOscGrad.width*4)) {
|
||||
updateChanOscGradTex=false;
|
||||
} else {
|
||||
logE("error while updating gradient texture!");
|
||||
logE(_("error while updating gradient texture!"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -289,11 +289,11 @@ void FurnaceGUI::drawChanOsc() {
|
|||
i.prevY=i.y;
|
||||
}
|
||||
if (ImGui::BeginPopup("gradPointSettings",ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||
if (ImGui::ColorPicker4("Color",(float*)&i.color)) {
|
||||
if (ImGui::ColorPicker4(_("Color"),(float*)&i.color)) {
|
||||
updateChanOscGradTex=true;
|
||||
}
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Distance");
|
||||
ImGui::Text(_("Distance"));
|
||||
ImGui::SameLine();
|
||||
float pDist=i.distance*100.0f;
|
||||
if (ImGui::SliderFloat("##PDistance",&pDist,0.0f,150.0f,"%.1f%%")) {
|
||||
|
@ -302,7 +302,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
}
|
||||
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Spread");
|
||||
ImGui::Text(_("Spread"));
|
||||
ImGui::SameLine();
|
||||
float pSpread=i.spread*100.0f;
|
||||
if (ImGui::SliderFloat("##PSpread",&pSpread,0.0f,150.0f,"%.1f%%")) {
|
||||
|
@ -311,7 +311,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
}
|
||||
|
||||
pushDestColor();
|
||||
if (ImGui::Button("Remove")) {
|
||||
if (ImGui::Button(_("Remove"))) {
|
||||
removePoint=index;
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
@ -335,26 +335,26 @@ void FurnaceGUI::drawChanOsc() {
|
|||
}
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::ColorEdit4("Background",(float*)&chanOscGrad.bgColor)) {
|
||||
if (ImGui::ColorEdit4(_("Background"),(float*)&chanOscGrad.bgColor)) {
|
||||
updateChanOscGradTex=true;
|
||||
}
|
||||
ImGui::Combo("X Axis##AxisX",&chanOscColorX,chanOscRefs,GUI_OSCREF_MAX);
|
||||
ImGui::Combo("Y Axis##AxisY",&chanOscColorY,chanOscRefs,GUI_OSCREF_MAX);
|
||||
ImGui::Combo(_("X Axis##AxisX"),&chanOscColorX,chanOscRefs,GUI_OSCREF_MAX);
|
||||
ImGui::Combo(_("Y Axis##AxisY"),&chanOscColorY,chanOscRefs,GUI_OSCREF_MAX);
|
||||
|
||||
ImGui::EndTable();
|
||||
}
|
||||
} else {
|
||||
ImGui::SetNextItemWidth(400.0f*dpiScale);
|
||||
ImGui::ColorPicker4("Color",(float*)&chanOscColor);
|
||||
ImGui::ColorPicker4(_("Color"),(float*)&chanOscColor);
|
||||
}
|
||||
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Text format:");
|
||||
ImGui::Text(_("Text format:"));
|
||||
ImGui::SameLine();
|
||||
ImGui::InputText("##TextFormat",&chanOscTextFormat);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
if (ImGui::BeginTooltip()) {
|
||||
ImGui::TextUnformatted(
|
||||
ImGui::TextUnformatted(_(
|
||||
"format guide:\n"
|
||||
"- %c: channel name\n"
|
||||
"- %C: channel short name\n"
|
||||
|
@ -372,14 +372,14 @@ void FurnaceGUI::drawChanOsc() {
|
|||
"- %b: volume (hex)\n"
|
||||
"- %l: new line\n"
|
||||
"- %%: percent sign"
|
||||
);
|
||||
));
|
||||
ImGui::EndTooltip();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::ColorEdit4("Text color",(float*)&chanOscTextColor);
|
||||
ImGui::ColorEdit4(_("Text color"),(float*)&chanOscTextColor);
|
||||
|
||||
if (ImGui::Button("OK")) {
|
||||
if (ImGui::Button(_("OK"))) {
|
||||
chanOscOptions=false;
|
||||
}
|
||||
} else {
|
||||
|
@ -397,7 +397,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
|
||||
// check work thread
|
||||
if (chanOscWorkPool==NULL) {
|
||||
logV("creating chan osc work pool");
|
||||
logV(_("creating chan osc work pool"));
|
||||
chanOscWorkPool=new DivWorkPool(settings.chanOscThreads);
|
||||
}
|
||||
|
||||
|
@ -426,18 +426,18 @@ void FurnaceGUI::drawChanOsc() {
|
|||
|
||||
// check FFT status existence
|
||||
if (!fft_->ready) {
|
||||
logD("creating FFT plan for channel %d",fft_->relatedCh);
|
||||
logD(_("creating FFT plan for channel %d"),fft_->relatedCh);
|
||||
fft_->inBuf=(double*)fftw_malloc(FURNACE_FFT_SIZE*sizeof(double));
|
||||
fft_->outBuf=(fftw_complex*)fftw_malloc(FURNACE_FFT_SIZE*sizeof(fftw_complex));
|
||||
fft_->corrBuf=(double*)fftw_malloc(FURNACE_FFT_SIZE*sizeof(double));
|
||||
fft_->plan=fftw_plan_dft_r2c_1d(FURNACE_FFT_SIZE,fft_->inBuf,fft_->outBuf,FFTW_ESTIMATE);
|
||||
fft_->planI=fftw_plan_dft_c2r_1d(FURNACE_FFT_SIZE,fft_->outBuf,fft_->corrBuf,FFTW_ESTIMATE);
|
||||
if (fft_->plan==NULL) {
|
||||
logE("failed to create plan!");
|
||||
logE(_("failed to create plan!"));
|
||||
} else if (fft_->planI==NULL) {
|
||||
logE("failed to create inverse plan!");
|
||||
logE(_("failed to create inverse plan!"));
|
||||
} else if (fft_->inBuf==NULL || fft_->outBuf==NULL || fft_->corrBuf==NULL) {
|
||||
logE("failed to create FFT buffers");
|
||||
logE(_("failed to create FFT buffers"));
|
||||
} else {
|
||||
fft_->ready=true;
|
||||
}
|
||||
|
@ -582,7 +582,7 @@ void FurnaceGUI::drawChanOsc() {
|
|||
ChanOscStatus* fft=oscFFTs[i];
|
||||
int ch=oscChans[i];
|
||||
if (buf==NULL) {
|
||||
ImGui::Text("Error!");
|
||||
ImGui::Text(_("Error!"));
|
||||
} else {
|
||||
ImVec2 size=ImGui::GetContentRegionAvail();
|
||||
size.y=availY/rows;
|
||||
|
|
|
@ -46,13 +46,13 @@ void FurnaceGUI::drawChannels() {
|
|||
ImGui::TableSetupColumn("c4",ImGuiTableColumnFlags_WidthFixed,48.0f*dpiScale);
|
||||
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Pat");
|
||||
ImGui::Text(_("Pat"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Osc");
|
||||
ImGui::Text(_("Osc"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Swap");
|
||||
ImGui::Text(_("Swap"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Name");
|
||||
ImGui::Text(_("Name"));
|
||||
for (int i=0; i<e->getTotalChannelCount(); i++) {
|
||||
ImGui::PushID(i);
|
||||
ImGui::TableNextRow();
|
||||
|
@ -61,14 +61,14 @@ void FurnaceGUI::drawChannels() {
|
|||
MARK_MODIFIED;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Show in pattern");
|
||||
ImGui::SetTooltip(_("Show in pattern"));
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Checkbox("##VisibleChanOsc",&e->curSubSong->chanShowChanOsc[i])) {
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Show in per-channel oscilloscope");
|
||||
ImGui::SetTooltip(_("Show in per-channel oscilloscope"));
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button(ICON_FA_ARROWS)) {
|
||||
|
@ -79,7 +79,7 @@ void FurnaceGUI::drawChannels() {
|
|||
ImGui::Button(ICON_FA_ARROWS "##ChanDrag");
|
||||
ImGui::EndDragDropSource();
|
||||
} else if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("%s #%d\n(drag to swap channels)",e->getSystemName(e->sysOfChan[i]),e->dispatchChanOfChan[i]);
|
||||
ImGui::SetTooltip(_("%s #%d\n(drag to swap channels)"),e->getSystemName(e->sysOfChan[i]),e->dispatchChanOfChan[i]);
|
||||
}
|
||||
if (ImGui::BeginDragDropTarget()) {
|
||||
const ImGuiPayload* dragItem=ImGui::AcceptDragDropPayload("FUR_CHAN");
|
||||
|
|
|
@ -48,22 +48,22 @@ void FurnaceGUI::drawPalette() {
|
|||
int width=ImGui::GetContentRegionAvail().x;
|
||||
ImGui::SetNextItemWidth(width);
|
||||
|
||||
const char* hint="Search...";
|
||||
const char* hint=_("Search...");
|
||||
switch (curPaletteType) {
|
||||
case CMDPAL_TYPE_RECENT:
|
||||
hint="Search recent files...";
|
||||
hint=_("Search recent files...");
|
||||
break;
|
||||
case CMDPAL_TYPE_INSTRUMENTS:
|
||||
hint="Search instruments...";
|
||||
hint=_("Search instruments...");
|
||||
break;
|
||||
case CMDPAL_TYPE_SAMPLES:
|
||||
hint="Search samples...";
|
||||
hint=_("Search samples...");
|
||||
break;
|
||||
case CMDPAL_TYPE_INSTRUMENT_CHANGE:
|
||||
hint="Search instruments (to change to)...";
|
||||
hint=_("Search instruments (to change to)...");
|
||||
break;
|
||||
case CMDPAL_TYPE_ADD_CHIP:
|
||||
hint="Search chip (to add)...";
|
||||
hint=_("Search chip (to add)...");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ void FurnaceGUI::drawPalette() {
|
|||
|
||||
case CMDPAL_TYPE_INSTRUMENTS:
|
||||
case CMDPAL_TYPE_INSTRUMENT_CHANGE:
|
||||
if (matchFuzzy("- None -",paletteQuery.c_str())) {
|
||||
if (matchFuzzy(_("- None -"),paletteQuery.c_str())) {
|
||||
paletteSearchResults.push_back(0);
|
||||
}
|
||||
for (int i=0; i<e->song.insLen; i++) {
|
||||
|
@ -120,7 +120,7 @@ void FurnaceGUI::drawPalette() {
|
|||
break;
|
||||
|
||||
default:
|
||||
logE("invalid command palette type");
|
||||
logE(_("invalid command palette type"));
|
||||
ImGui::CloseCurrentPopup();
|
||||
break;
|
||||
};
|
||||
|
@ -164,7 +164,7 @@ void FurnaceGUI::drawPalette() {
|
|||
case CMDPAL_TYPE_INSTRUMENTS:
|
||||
case CMDPAL_TYPE_INSTRUMENT_CHANGE:
|
||||
if (id==0) {
|
||||
s="- None -";
|
||||
s=_("- None -");
|
||||
} else {
|
||||
s=fmt::sprintf("%02X: %s", id-1, e->song.ins[id-1]->name.c_str());
|
||||
}
|
||||
|
@ -176,7 +176,7 @@ void FurnaceGUI::drawPalette() {
|
|||
s=getSystemName((DivSystem)id);
|
||||
break;
|
||||
default:
|
||||
logE("invalid command palette type");
|
||||
logE(_("invalid command palette type"));
|
||||
break;
|
||||
};
|
||||
|
||||
|
@ -196,7 +196,7 @@ void FurnaceGUI::drawPalette() {
|
|||
accepted=ImGui::IsKeyPressed(ImGuiKey_Enter);
|
||||
}
|
||||
|
||||
if (ImGui::Button("Cancel") || ImGui::IsKeyPressed(ImGuiKey_Escape)) {
|
||||
if (ImGui::Button(_("Cancel")) || ImGui::IsKeyPressed(ImGuiKey_Escape)) {
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
||||
|
@ -238,7 +238,7 @@ void FurnaceGUI::drawPalette() {
|
|||
}
|
||||
break;
|
||||
default:
|
||||
logE("invalid command palette type");
|
||||
logE(_("invalid command palette type"));
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -29,324 +29,324 @@ void FurnaceGUI::drawCompatFlags() {
|
|||
}
|
||||
if (!compatFlagsOpen) return;
|
||||
if (ImGui::Begin("Compatibility Flags",&compatFlagsOpen,globalWinFlags)) {
|
||||
ImGui::TextWrapped("these flags are designed to provide better DefleMask/older Furnace compatibility.\nit is recommended to disable most of these unless you rely on specific quirks.");
|
||||
ImGui::TextWrapped(_("these flags are designed to provide better DefleMask/older Furnace compatibility.\nit is recommended to disable most of these unless you rely on specific quirks."));
|
||||
if (ImGui::BeginTabBar("settingsTab")) {
|
||||
if (ImGui::BeginTabItem("DefleMask")) {
|
||||
ImGui::Checkbox("Limit slide range",&e->song.limitSlides);
|
||||
if (ImGui::BeginTabItem(_("DefleMask"))) {
|
||||
ImGui::Checkbox(_("Limit slide range"),&e->song.limitSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, slides are limited to a compatible range.\nmay cause problems with slides in negative octaves.");
|
||||
ImGui::SetTooltip(_("when enabled, slides are limited to a compatible range.\nmay cause problems with slides in negative octaves."));
|
||||
}
|
||||
InvCheckbox("Compatible noise layout on NES and PC Engine",&e->song.properNoiseLayout);
|
||||
InvCheckbox(_("Compatible noise layout on NES and PC Engine"),&e->song.properNoiseLayout);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("use a rather unusual compatible noise frequency layout.\nremoves some noise frequencies on PC Engine.");
|
||||
ImGui::SetTooltip(_("use a rather unusual compatible noise frequency layout.\nremoves some noise frequencies on PC Engine."));
|
||||
}
|
||||
ImGui::Checkbox("Game Boy instrument duty is wave volume",&e->song.waveDutyIsVol);
|
||||
ImGui::Checkbox(_("Game Boy instrument duty is wave volume"),&e->song.waveDutyIsVol);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("if enabled, an instrument with duty macro in the wave channel will be mapped to wavetable volume.");
|
||||
ImGui::SetTooltip(_("if enabled, an instrument with duty macro in the wave channel will be mapped to wavetable volume."));
|
||||
}
|
||||
|
||||
ImGui::Checkbox("Restart macro on portamento",&e->song.resetMacroOnPorta);
|
||||
ImGui::Checkbox(_("Restart macro on portamento"),&e->song.resetMacroOnPorta);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, a portamento effect will reset the channel's macro if used in combination with a note.");
|
||||
ImGui::SetTooltip(_("when enabled, a portamento effect will reset the channel's macro if used in combination with a note."));
|
||||
}
|
||||
ImGui::Checkbox("Legacy volume slides",&e->song.legacyVolumeSlides);
|
||||
ImGui::Checkbox(_("Legacy volume slides"),&e->song.legacyVolumeSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("simulate glitchy volume slide behavior by silently overflowing the volume when the slide goes below 0.");
|
||||
ImGui::SetTooltip(_("simulate glitchy volume slide behavior by silently overflowing the volume when the slide goes below 0."));
|
||||
}
|
||||
ImGui::Checkbox("Compatible arpeggio",&e->song.compatibleArpeggio);
|
||||
ImGui::Checkbox(_("Compatible arpeggio"),&e->song.compatibleArpeggio);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("delay arpeggio by one tick on every new note.");
|
||||
ImGui::SetTooltip(_("delay arpeggio by one tick on every new note."));
|
||||
}
|
||||
ImGui::Checkbox("Disable DAC when sample ends",&e->song.brokenDACMode);
|
||||
ImGui::Checkbox(_("Disable DAC when sample ends"),&e->song.brokenDACMode);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, the DAC in YM2612 will be disabled if there isn't any sample playing.");
|
||||
ImGui::SetTooltip(_("when enabled, the DAC in YM2612 will be disabled if there isn't any sample playing."));
|
||||
}
|
||||
ImGui::Checkbox("Broken speed alternation",&e->song.brokenSpeedSel);
|
||||
ImGui::Checkbox(_("Broken speed alternation"),&e->song.brokenSpeedSel);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("determines next speed based on whether the row is odd/even instead of alternating between speeds.");
|
||||
ImGui::SetTooltip(_("determines next speed based on whether the row is odd/even instead of alternating between speeds."));
|
||||
}
|
||||
ImGui::Checkbox("Ignore duplicate slide effects",&e->song.ignoreDuplicateSlides);
|
||||
ImGui::Checkbox(_("Ignore duplicate slide effects"),&e->song.ignoreDuplicateSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("if this is on, only the first slide of a row in a channel will be considered.");
|
||||
ImGui::SetTooltip(_("if this is on, only the first slide of a row in a channel will be considered."));
|
||||
}
|
||||
ImGui::Checkbox("Ignore 0Dxx on the last order",&e->song.ignoreJumpAtEnd);
|
||||
ImGui::Checkbox(_("Ignore 0Dxx on the last order"),&e->song.ignoreJumpAtEnd);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("if this is on, a jump to next row effect will not take place when it is on the last order of a song.");
|
||||
ImGui::SetTooltip(_("if this is on, a jump to next row effect will not take place when it is on the last order of a song."));
|
||||
}
|
||||
ImGui::Checkbox("Buggy portamento after pitch slide",&e->song.buggyPortaAfterSlide);
|
||||
ImGui::Checkbox(_("Buggy portamento after pitch slide"),&e->song.buggyPortaAfterSlide);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("simulates a bug in where portamento does not work after sliding.");
|
||||
ImGui::SetTooltip(_("simulates a bug in where portamento does not work after sliding."));
|
||||
}
|
||||
ImGui::Checkbox("FM pitch slide octave boundary odd behavior",&e->song.fbPortaPause);
|
||||
ImGui::Checkbox(_("FM pitch slide octave boundary odd behavior"),&e->song.fbPortaPause);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("if this is on, a pitch slide that crosses the octave boundary will stop for one tick and then continue from the nearest octave boundary.\nfor .dmf compatibility.");
|
||||
ImGui::SetTooltip(_("if this is on, a pitch slide that crosses the octave boundary will stop for one tick and then continue from the nearest octave boundary.\nfor .dmf compatibility."));
|
||||
}
|
||||
InvCheckbox("Don't apply Game Boy envelope on note-less instrument change",&e->song.gbInsAffectsEnvelope);
|
||||
InvCheckbox(_("Don't apply Game Boy envelope on note-less instrument change"),&e->song.gbInsAffectsEnvelope);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("if this is on, an instrument change will not affect the envelope.");
|
||||
ImGui::SetTooltip(_("if this is on, an instrument change will not affect the envelope."));
|
||||
}
|
||||
ImGui::Checkbox("Ignore DAC mode change outside of intended channel in ExtCh mode",&e->song.ignoreDACModeOutsideIntendedChannel);
|
||||
ImGui::Checkbox(_("Ignore DAC mode change outside of intended channel in ExtCh mode"),&e->song.ignoreDACModeOutsideIntendedChannel);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("if this is on, 17xx has no effect on the operator channels in YM2612.");
|
||||
ImGui::SetTooltip(_("if this is on, 17xx has no effect on the operator channels in YM2612."));
|
||||
}
|
||||
ImGui::Checkbox("E1xy/E2xy also take priority over slide stops",&e->song.e1e2AlsoTakePriority);
|
||||
ImGui::Checkbox(_("E1xy/E2xy also take priority over slide stops"),&e->song.e1e2AlsoTakePriority);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("does this make any sense by now?");
|
||||
ImGui::SetTooltip(_("does this make any sense by now?"));
|
||||
}
|
||||
ImGui::Checkbox("E1xy/E2xy stop when repeating the same note",&e->song.e1e2StopOnSameNote);
|
||||
ImGui::Checkbox(_("E1xy/E2xy stop when repeating the same note"),&e->song.e1e2StopOnSameNote);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("ugh, if only this wasn't a thing...");
|
||||
ImGui::SetTooltip(_("ugh, if only this wasn't a thing..."));
|
||||
}
|
||||
ImGui::Checkbox("SN76489 duty macro always resets phase",&e->song.snDutyReset);
|
||||
ImGui::Checkbox(_("SN76489 duty macro always resets phase"),&e->song.snDutyReset);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, duty macro will always reset phase, even if its value hasn't changed.");
|
||||
ImGui::SetTooltip(_("when enabled, duty macro will always reset phase, even if its value hasn't changed."));
|
||||
}
|
||||
InvCheckbox("Broken volume scaling strategy",&e->song.newVolumeScaling);
|
||||
InvCheckbox(_("Broken volume scaling strategy"),&e->song.newVolumeScaling);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled:\n- log scaling: multiply\n- linear scaling: subtract\nwhen disabled:\n- log scaling: subtract\n- linear scaling: multiply");
|
||||
ImGui::SetTooltip(_("when enabled:\n- log scaling: multiply\n- linear scaling: subtract\nwhen disabled:\n- log scaling: subtract\n- linear scaling: multiply"));
|
||||
}
|
||||
InvCheckbox("Don't persist volume macro after it finishes",&e->song.volMacroLinger);
|
||||
InvCheckbox(_("Don't persist volume macro after it finishes"),&e->song.volMacroLinger);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, a value in the volume column that happens after the volume macro is done will disregard the macro.");
|
||||
ImGui::SetTooltip(_("when enabled, a value in the volume column that happens after the volume macro is done will disregard the macro."));
|
||||
}
|
||||
ImGui::Checkbox("Broken output volume on instrument change",&e->song.brokenOutVol);
|
||||
ImGui::Checkbox(_("Broken output volume on instrument change"),&e->song.brokenOutVol);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("if enabled, no checks for the presence of a volume macro will be made.\nthis will cause the last macro value to linger unless a value in the volume column is present.");
|
||||
ImGui::SetTooltip(_("if enabled, no checks for the presence of a volume macro will be made.\nthis will cause the last macro value to linger unless a value in the volume column is present."));
|
||||
}
|
||||
ImGui::Checkbox("Broken output volume - Episode 2 (PLEASE KEEP ME DISABLED)",&e->song.brokenOutVol2);
|
||||
ImGui::Checkbox(_("Broken output volume - Episode 2 (PLEASE KEEP ME DISABLED)"),&e->song.brokenOutVol2);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("these compatibility flags are getting SO damn ridiculous and out of control.\nas you may have guessed, this one exists due to yet ANOTHER DefleMask-specific behavior.\nplease keep this off at all costs, because I will not support it when ROM export comes.\noh, and don't start an argument out of it. Furnace isn't a DefleMask replacement, and no,\nI am not trying to make it look like one with all these flags.\n\noh, and what about the other flags that don't have to do with DefleMask?\nthose are for .mod import, future FamiTracker import and personal taste!\n\nend of rant");
|
||||
ImGui::SetTooltip(_("these compatibility flags are getting SO damn ridiculous and out of control.\nas you may have guessed, this one exists due to yet ANOTHER DefleMask-specific behavior.\nplease keep this off at all costs, because I will not support it when ROM export comes.\noh, and don't start an argument out of it. Furnace isn't a DefleMask replacement, and no,\nI am not trying to make it look like one with all these flags.\n\noh, and what about the other flags that don't have to do with DefleMask?\nthose are for .mod import, future FamiTracker import and personal taste!\n\nend of rant"));
|
||||
}
|
||||
ImGui::Checkbox("Treat SN76489 periods under 8 as 1",&e->song.snNoLowPeriods);
|
||||
ImGui::Checkbox(_("Treat SN76489 periods under 8 as 1"),&e->song.snNoLowPeriods);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, any SN period under 8 will be written as 1 instead.\nthis replicates DefleMask behavior, but reduces available period range.");
|
||||
ImGui::SetTooltip(_("when enabled, any SN period under 8 will be written as 1 instead.\nthis replicates DefleMask behavior, but reduces available period range."));
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Old Furnace")) {
|
||||
ImGui::Checkbox("Arpeggio inhibits non-porta slides",&e->song.arpNonPorta);
|
||||
if (ImGui::BeginTabItem(_("Old Furnace"))) {
|
||||
ImGui::Checkbox(_("Arpeggio inhibits non-porta slides"),&e->song.arpNonPorta);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.5");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.5.5"));
|
||||
}
|
||||
ImGui::Checkbox("Wack FM algorithm macro",&e->song.algMacroBehavior);
|
||||
ImGui::Checkbox(_("Wack FM algorithm macro"),&e->song.algMacroBehavior);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.5");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.5.5"));
|
||||
}
|
||||
ImGui::Checkbox("Broken shortcut slides (E1xy/E2xy)",&e->song.brokenShortcutSlides);
|
||||
ImGui::Checkbox(_("Broken shortcut slides (E1xy/E2xy)"),&e->song.brokenShortcutSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.5.7");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.5.7"));
|
||||
}
|
||||
ImGui::Checkbox("Stop portamento on note off",&e->song.stopPortaOnNoteOff);
|
||||
ImGui::Checkbox(_("Stop portamento on note off"),&e->song.stopPortaOnNoteOff);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre1"));
|
||||
}
|
||||
InvCheckbox("Don't allow instrument change during slides",&e->song.newInsTriggersInPorta);
|
||||
InvCheckbox(_("Don't allow instrument change during slides"),&e->song.newInsTriggersInPorta);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre1"));
|
||||
}
|
||||
InvCheckbox("Don't reset note to base on arpeggio stop",&e->song.arp0Reset);
|
||||
InvCheckbox(_("Don't reset note to base on arpeggio stop"),&e->song.arp0Reset);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre1"));
|
||||
}
|
||||
InvCheckbox("ExtCh channel status is not shared among operators",&e->song.sharedExtStat);
|
||||
InvCheckbox(_("ExtCh channel status is not shared among operators"),&e->song.sharedExtStat);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre1"));
|
||||
}
|
||||
InvCheckbox("Disable new SegaPCM features (macros and better panning)",&e->song.newSegaPCM);
|
||||
InvCheckbox(_("Disable new SegaPCM features (macros and better panning)"),&e->song.newSegaPCM);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre1"));
|
||||
}
|
||||
ImGui::Checkbox("Old FM octave boundary behavior",&e->song.oldOctaveBoundary);
|
||||
ImGui::Checkbox(_("Old FM octave boundary behavior"),&e->song.oldOctaveBoundary);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre1"));
|
||||
}
|
||||
ImGui::Checkbox("Disable OPN2 DAC volume control",&e->song.noOPN2Vol);
|
||||
ImGui::Checkbox(_("Disable OPN2 DAC volume control"),&e->song.noOPN2Vol);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre1"));
|
||||
}
|
||||
ImGui::Checkbox("Broken initial position of portamento after arpeggio",&e->song.brokenPortaArp);
|
||||
ImGui::Checkbox(_("Broken initial position of portamento after arpeggio"),&e->song.brokenPortaArp);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre1.5");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre1.5"));
|
||||
}
|
||||
ImGui::Checkbox("Disable new sample features",&e->song.disableSampleMacro);
|
||||
ImGui::Checkbox(_("Disable new sample features"),&e->song.disableSampleMacro);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre2");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre2"));
|
||||
}
|
||||
ImGui::Checkbox("Old arpeggio macro + pitch slide strategy",&e->song.oldArpStrategy);
|
||||
ImGui::Checkbox(_("Old arpeggio macro + pitch slide strategy"),&e->song.oldArpStrategy);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre2");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre2"));
|
||||
}
|
||||
ImGui::Checkbox("Broken portamento during legato",&e->song.brokenPortaLegato);
|
||||
ImGui::Checkbox(_("Broken portamento during legato"),&e->song.brokenPortaLegato);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre4");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre4"));
|
||||
}
|
||||
ImGui::Checkbox("Broken macros in some FM chips after note off",&e->song.brokenFMOff);
|
||||
ImGui::Checkbox(_("Broken macros in some FM chips after note off"),&e->song.brokenFMOff);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre5");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre5"));
|
||||
}
|
||||
ImGui::Checkbox("Pre-note does not take effects into consideration",&e->song.preNoteNoEffect);
|
||||
ImGui::Checkbox(_("Pre-note does not take effects into consideration"),&e->song.preNoteNoEffect);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6pre9");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6pre9"));
|
||||
}
|
||||
ImGui::Checkbox("Disable new NES DPCM features",&e->song.oldDPCM);
|
||||
ImGui::Checkbox(_("Disable new NES DPCM features"),&e->song.oldDPCM);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6.1");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6.1"));
|
||||
}
|
||||
ImGui::Checkbox("Legacy technical ALWAYS_SET_VOLUME behavior",&e->song.oldAlwaysSetVolume);
|
||||
ImGui::Checkbox(_("Legacy technical ALWAYS_SET_VOLUME behavior"),&e->song.oldAlwaysSetVolume);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6.1\nthis flag will be removed if I find out that none of the songs break after disabling it.");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6.1\nthis flag will be removed if I find out that none of the songs break after disabling it."));
|
||||
}
|
||||
ImGui::Checkbox("Old sample offset effect",&e->song.oldSampleOffset);
|
||||
ImGui::Checkbox(_("Old sample offset effect"),&e->song.oldSampleOffset);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("behavior changed in 0.6.3");
|
||||
ImGui::SetTooltip(_("behavior changed in 0.6.3"));
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem(".mod import")) {
|
||||
ImGui::Checkbox("Don't slide on the first tick of a row",&e->song.noSlidesOnFirstTick);
|
||||
if (ImGui::BeginTabItem(_(".mod import"))) {
|
||||
ImGui::Checkbox(_("Don't slide on the first tick of a row"),&e->song.noSlidesOnFirstTick);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("simulates ProTracker's behavior of not applying volume/pitch slides on the first tick of a row.");
|
||||
ImGui::SetTooltip(_("simulates ProTracker's behavior of not applying volume/pitch slides on the first tick of a row."));
|
||||
}
|
||||
ImGui::Checkbox("Reset arpeggio position on row change",&e->song.rowResetsArpPos);
|
||||
ImGui::Checkbox(_("Reset arpeggio position on row change"),&e->song.rowResetsArpPos);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("simulates ProTracker's behavior of arpeggio being bound to the current tick of a row.");
|
||||
ImGui::SetTooltip(_("simulates ProTracker's behavior of arpeggio being bound to the current tick of a row."));
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Pitch/Playback")) {
|
||||
ImGui::Text("Pitch linearity:");
|
||||
if (ImGui::BeginTabItem(_("Pitch/Playback"))) {
|
||||
ImGui::Text(_("Pitch linearity:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("None",e->song.linearPitch==0)) {
|
||||
if (ImGui::RadioButton(_("None"),e->song.linearPitch==0)) {
|
||||
e->song.linearPitch=0;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("like ProTracker/FamiTracker");
|
||||
ImGui::SetTooltip(_("like ProTracker/FamiTracker"));
|
||||
}
|
||||
if (e->song.linearPitch==1) {
|
||||
pushWarningColor(true);
|
||||
if (ImGui::RadioButton("Partial (only 04xy/E5xx)",e->song.linearPitch==1)) {
|
||||
if (ImGui::RadioButton(_("Partial (only 04xy/E5xx)"),e->song.linearPitch==1)) {
|
||||
e->song.linearPitch=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("like DefleMask\n\nthis pitch linearity mode is deprecated due to:\n- excessive complexity\n- lack of possible optimization\n\nit is recommended to change it now because I will remove this option in the future!");
|
||||
ImGui::SetTooltip(_("like DefleMask\n\nthis pitch linearity mode is deprecated due to:\n- excessive complexity\n- lack of possible optimization\n\nit is recommended to change it now because I will remove this option in the future!"));
|
||||
}
|
||||
popWarningColor();
|
||||
}
|
||||
if (ImGui::RadioButton("Full",e->song.linearPitch==2)) {
|
||||
if (ImGui::RadioButton(_("Full"),e->song.linearPitch==2)) {
|
||||
e->song.linearPitch=2;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("like Impulse Tracker");
|
||||
ImGui::SetTooltip(_("like Impulse Tracker"));
|
||||
}
|
||||
ImGui::Unindent();
|
||||
|
||||
if (e->song.linearPitch==2) {
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(120.0f*dpiScale);
|
||||
if (ImGui::InputScalar("Pitch slide speed multiplier",ImGuiDataType_U8,&e->song.pitchSlideSpeed,&_ONE,&_ONE)) {
|
||||
if (ImGui::InputScalar(_("Pitch slide speed multiplier"),ImGuiDataType_U8,&e->song.pitchSlideSpeed,&_ONE,&_ONE)) {
|
||||
if (e->song.pitchSlideSpeed<1) e->song.pitchSlideSpeed=1;
|
||||
if (e->song.pitchSlideSpeed>64) e->song.pitchSlideSpeed=64;
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Text("Loop modality:");
|
||||
ImGui::Text(_("Loop modality:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("Reset channels",e->song.loopModality==0)) {
|
||||
if (ImGui::RadioButton(_("Reset channels"),e->song.loopModality==0)) {
|
||||
e->song.loopModality=0;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("select to reset channels on loop. may trigger a voltage click on every loop!");
|
||||
ImGui::SetTooltip(_("select to reset channels on loop. may trigger a voltage click on every loop!"));
|
||||
}
|
||||
if (ImGui::RadioButton("Soft reset channels",e->song.loopModality==1)) {
|
||||
if (ImGui::RadioButton(_("Soft reset channels"),e->song.loopModality==1)) {
|
||||
e->song.loopModality=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("select to turn channels off on loop.");
|
||||
ImGui::SetTooltip(_("select to turn channels off on loop."));
|
||||
}
|
||||
if (ImGui::RadioButton("Do nothing",e->song.loopModality==2)) {
|
||||
if (ImGui::RadioButton(_("Do nothing"),e->song.loopModality==2)) {
|
||||
e->song.loopModality=2;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("select to not reset channels on loop.");
|
||||
ImGui::SetTooltip(_("select to not reset channels on loop."));
|
||||
}
|
||||
ImGui::Unindent();
|
||||
|
||||
ImGui::Text("Cut/delay effect policy:");
|
||||
ImGui::Text(_("Cut/delay effect policy:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("Strict",e->song.delayBehavior==0)) {
|
||||
if (ImGui::RadioButton(_("Strict"),e->song.delayBehavior==0)) {
|
||||
e->song.delayBehavior=0;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("only when time is less than speed (like DefleMask/ProTracker)");
|
||||
ImGui::SetTooltip(_("only when time is less than speed (like DefleMask/ProTracker)"));
|
||||
}
|
||||
if (ImGui::RadioButton("Strict (old)",e->song.delayBehavior==1)) {
|
||||
if (ImGui::RadioButton(_("Strict (old)"),e->song.delayBehavior==1)) {
|
||||
e->song.delayBehavior=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("only when time is less than or equal to speed (original buggy behavior)");
|
||||
ImGui::SetTooltip(_("only when time is less than or equal to speed (original buggy behavior)"));
|
||||
}
|
||||
if (ImGui::RadioButton("Lax",e->song.delayBehavior==2)) {
|
||||
if (ImGui::RadioButton(_("Lax"),e->song.delayBehavior==2)) {
|
||||
e->song.delayBehavior=2;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("no checks");
|
||||
ImGui::SetTooltip(_("no checks"));
|
||||
}
|
||||
ImGui::Unindent();
|
||||
|
||||
ImGui::Text("Simultaneous jump (0B+0D) treatment:");
|
||||
ImGui::Text(_("Simultaneous jump (0B+0D) treatment:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("Normal",e->song.jumpTreatment==0)) {
|
||||
if (ImGui::RadioButton(_("Normal"),e->song.jumpTreatment==0)) {
|
||||
e->song.jumpTreatment=0;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("accept 0B+0D to jump to a specific row of an order");
|
||||
ImGui::SetTooltip(_("accept 0B+0D to jump to a specific row of an order"));
|
||||
}
|
||||
if (ImGui::RadioButton("Old Furnace",e->song.jumpTreatment==1)) {
|
||||
if (ImGui::RadioButton(_("Old Furnace"),e->song.jumpTreatment==1)) {
|
||||
e->song.jumpTreatment=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("only accept the first jump effect");
|
||||
ImGui::SetTooltip(_("only accept the first jump effect"));
|
||||
}
|
||||
if (ImGui::RadioButton("DefleMask",e->song.jumpTreatment==2)) {
|
||||
if (ImGui::RadioButton(_("DefleMask"),e->song.jumpTreatment==2)) {
|
||||
e->song.jumpTreatment=2;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("only accept 0Dxx");
|
||||
ImGui::SetTooltip(_("only accept 0Dxx"));
|
||||
}
|
||||
ImGui::Unindent();
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Other")) {
|
||||
ImGui::Checkbox("Auto-insert one tick gap between notes",&e->song.oneTickCut);
|
||||
if (ImGui::BeginTabItem(_("Other"))) {
|
||||
ImGui::Checkbox(_("Auto-insert one tick gap between notes"),&e->song.oneTickCut);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, a one-tick note cut will be inserted between non-legato/non-portamento notes.\nthis simulates the behavior of some Amiga/SNES music engines.\n\nineffective on C64.");
|
||||
ImGui::SetTooltip(_("when enabled, a one-tick note cut will be inserted between non-legato/non-portamento notes.\nthis simulates the behavior of some Amiga/SNES music engines.\n\nineffective on C64."));
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
InvCheckbox("Don't reset slides after note off",&e->song.noteOffResetsSlides);
|
||||
InvCheckbox(_("Don't reset slides after note off"),&e->song.noteOffResetsSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, note off will not reset the channel's slide effect.");
|
||||
ImGui::SetTooltip(_("when enabled, note off will not reset the channel's slide effect."));
|
||||
}
|
||||
InvCheckbox("Don't reset portamento after reaching target",&e->song.targetResetsSlides);
|
||||
InvCheckbox(_("Don't reset portamento after reaching target"),&e->song.targetResetsSlides);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, the slide effect will not be disabled after it reaches its target.");
|
||||
ImGui::SetTooltip(_("when enabled, the slide effect will not be disabled after it reaches its target."));
|
||||
}
|
||||
ImGui::Checkbox("Continuous vibrato",&e->song.continuousVibrato);
|
||||
ImGui::Checkbox(_("Continuous vibrato"),&e->song.continuousVibrato);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, vibrato phase/position will not be reset on a new note.");
|
||||
ImGui::SetTooltip(_("when enabled, vibrato phase/position will not be reset on a new note."));
|
||||
}
|
||||
InvCheckbox("Pitch macro is not linear",&e->song.pitchMacroIsLinear);
|
||||
InvCheckbox(_("Pitch macro is not linear"),&e->song.pitchMacroIsLinear);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, the pitch macro of an instrument is in frequency/period space.");
|
||||
ImGui::SetTooltip(_("when enabled, the pitch macro of an instrument is in frequency/period space."));
|
||||
}
|
||||
ImGui::Checkbox("Reset arpeggio effect position on new note",&e->song.resetArpPhaseOnNewNote);
|
||||
ImGui::Checkbox(_("Reset arpeggio effect position on new note"),&e->song.resetArpPhaseOnNewNote);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, arpeggio effect (00xy) position is reset on a new note.");
|
||||
ImGui::SetTooltip(_("when enabled, arpeggio effect (00xy) position is reset on a new note."));
|
||||
}
|
||||
ImGui::Checkbox("Volume scaling rounds up",&e->song.ceilVolumeScaling);
|
||||
ImGui::Checkbox(_("Volume scaling rounds up"),&e->song.ceilVolumeScaling);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("when enabled, volume macros round up when applied\nthis prevents volume scaling from causing vol=0, which is silent on some chips\n\nineffective on logarithmic channels");
|
||||
ImGui::SetTooltip(_("when enabled, volume macros round up when applied\nthis prevents volume scaling from causing vol=0, which is silent on some chips\n\nineffective on logarithmic channels"));
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
|
|
|
@ -110,17 +110,17 @@ void FurnaceGUI::drawCSPlayer() {
|
|||
}
|
||||
if (!csPlayerOpen) return;
|
||||
if (ImGui::Begin("Command Stream Player",&csPlayerOpen,globalWinFlags)) {
|
||||
if (ImGui::Button("Load")) {
|
||||
if (ImGui::Button(_("Load"))) {
|
||||
openFileDialog(GUI_FILE_CMDSTREAM_OPEN);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Kill")) {
|
||||
if (ImGui::Button(_("Kill"))) {
|
||||
if (!e->killStream()) {
|
||||
showError("Kikai wa mou shindeiru!");
|
||||
showError(_("Kikai wa mou shindeiru!"));
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Burn Current Song")) {
|
||||
if (ImGui::Button(_("Burn Current Song"))) {
|
||||
SafeWriter* w=e->saveCommand();
|
||||
if (w!=NULL) {
|
||||
if (!e->playStream(w->getFinalBuf(),w->size())) {
|
||||
|
@ -138,34 +138,34 @@ void FurnaceGUI::drawCSPlayer() {
|
|||
if (cs) {
|
||||
if (ImGui::BeginTabBar("CSOptions")) {
|
||||
int chans=e->getTotalChannelCount();
|
||||
if (ImGui::BeginTabItem("Status")) {
|
||||
if (ImGui::BeginTabItem(_("Status"))) {
|
||||
if (ImGui::BeginTable("CSStat",12,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_ScrollX|ImGuiTableFlags_Borders)) {
|
||||
ImGui::TableSetupScrollFreeze(1,1);
|
||||
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("channel");
|
||||
ImGui::Text(_("channel"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("start");
|
||||
ImGui::Text(_("start"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("PC");
|
||||
ImGui::Text(_("PC"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("wait");
|
||||
ImGui::Text(_("wait"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("SP");
|
||||
ImGui::Text(_("SP"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("note");
|
||||
ImGui::Text(_("note"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("pitch");
|
||||
ImGui::Text(_("pitch"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("vol");
|
||||
ImGui::Text(_("vol"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("vols");
|
||||
ImGui::Text(_("vols"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("vib");
|
||||
ImGui::Text(_("vib"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("porta");
|
||||
ImGui::Text(_("porta"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("arp");
|
||||
ImGui::Text(_("arp"));
|
||||
|
||||
for (int i=0; i<chans; i++) {
|
||||
DivCSChannelState* state=cs->getChanState(i);
|
||||
|
@ -200,7 +200,7 @@ void FurnaceGUI::drawCSPlayer() {
|
|||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Trace")) {
|
||||
if (ImGui::BeginTabItem(_("Trace"))) {
|
||||
ImGui::PushFont(patFont);
|
||||
if (ImGui::BeginTable("CSTrace",chans,ImGuiTableFlags_SizingFixedSame|ImGuiTableFlags_Borders|ImGuiTableFlags_ScrollX)) {
|
||||
char tempID[32];
|
||||
|
@ -241,10 +241,10 @@ void FurnaceGUI::drawCSPlayer() {
|
|||
ImGui::PopFont();
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Disassemble")) {
|
||||
if (ImGui::BeginTabItem(_("Disassemble"))) {
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Hex")) {
|
||||
if (ImGui::BeginTabItem(_("Hex"))) {
|
||||
ImGui::PushFont(patFont);
|
||||
if (ImGui::BeginTable("CSHexPos",chans,ImGuiTableFlags_SizingStretchSame)) {
|
||||
ImGui::TableNextRow();
|
||||
|
|
|
@ -202,7 +202,7 @@ void FurnaceGUI::finishSelection() {
|
|||
selEnd.xFine=2+e->curPat[selEnd.xCoarse].effectCols*2;
|
||||
}
|
||||
|
||||
logV("finish selection: %d.%d,%d - %d.%d,%d",selStart.xCoarse,selStart.xFine,selStart.y,selEnd.xCoarse,selEnd.xFine,selEnd.y);
|
||||
logV(_("finish selection: %d.%d,%d - %d.%d,%d"),selStart.xCoarse,selStart.xFine,selStart.y,selEnd.xCoarse,selEnd.xFine,selEnd.y);
|
||||
|
||||
e->setMidiBaseChan(cursor.xCoarse);
|
||||
}
|
||||
|
|
|
@ -73,10 +73,10 @@ const char* sampleNote[12]={
|
|||
void FurnaceGUI::insListItem(int i, int dir, int asset) {
|
||||
ImGui::PushID(i);
|
||||
String name=(settings.insIconsStyle==0)?"":ICON_FA_CIRCLE_O;
|
||||
const char* insType="Bug!";
|
||||
const char* insType=_("Bug!");
|
||||
if (i>=0 && i<e->song.insLen) {
|
||||
DivInstrument* ins=e->song.ins[i];
|
||||
insType=(ins->type>=DIV_INS_MAX)?"Unknown":insTypes[ins->type][0];
|
||||
insType=(ins->type>=DIV_INS_MAX)?_("Unknown"):_(insTypes[ins->type][0]);
|
||||
const char** insIcon=NULL;
|
||||
|
||||
if (ins->type>=DIV_INS_MAX) {
|
||||
|
@ -133,19 +133,19 @@ void FurnaceGUI::insListItem(int i, int dir, int asset) {
|
|||
curIns=i;
|
||||
updateFMPreview=true;
|
||||
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
||||
if (ImGui::MenuItem("duplicate")) {
|
||||
if (ImGui::MenuItem(_("duplicate"))) {
|
||||
doAction(GUI_ACTION_INS_LIST_DUPLICATE);
|
||||
}
|
||||
if (ImGui::MenuItem("replace...")) {
|
||||
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")) {
|
||||
if (ImGui::MenuItem(_("save"))) {
|
||||
doAction(GUI_ACTION_INS_LIST_SAVE);
|
||||
}
|
||||
if (ImGui::MenuItem("save (.dmp)")) {
|
||||
if (ImGui::MenuItem(_("save (.dmp)"))) {
|
||||
doAction(GUI_ACTION_INS_LIST_SAVE_DMP);
|
||||
}
|
||||
if (ImGui::MenuItem("delete")) {
|
||||
if (ImGui::MenuItem(_("delete"))) {
|
||||
doAction(GUI_ACTION_INS_LIST_DELETE);
|
||||
}
|
||||
ImGui::PopStyleColor();
|
||||
|
@ -240,7 +240,7 @@ void FurnaceGUI::sampleListItem(int i, int dir, int asset) {
|
|||
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::SetTooltip(_("out of memory for this sample!"));
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
ImGui::PopStyleColor();
|
||||
|
@ -251,22 +251,22 @@ void FurnaceGUI::sampleListItem(int i, int dir, int asset) {
|
|||
updateSampleTex=true;
|
||||
lastAssetType=2;
|
||||
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
||||
if (ImGui::MenuItem("make instrument")) {
|
||||
if (ImGui::MenuItem(_("make instrument"))) {
|
||||
doAction(GUI_ACTION_SAMPLE_MAKE_INS);
|
||||
}
|
||||
if (ImGui::MenuItem("make me a drum kit")) {
|
||||
if (ImGui::MenuItem(_("make me a drum kit"))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_MAKE_MAP);
|
||||
}
|
||||
if (ImGui::MenuItem("duplicate")) {
|
||||
if (ImGui::MenuItem(_("duplicate"))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_DUPLICATE);
|
||||
}
|
||||
if (ImGui::MenuItem("replace...")) {
|
||||
if (ImGui::MenuItem(_("replace..."))) {
|
||||
doAction((curSample>=0 && curSample<(int)e->song.sample.size())?GUI_ACTION_SAMPLE_LIST_OPEN_REPLACE:GUI_ACTION_SAMPLE_LIST_OPEN);
|
||||
}
|
||||
if (ImGui::MenuItem("save")) {
|
||||
if (ImGui::MenuItem(_("save"))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_SAVE);
|
||||
}
|
||||
if (ImGui::MenuItem("delete")) {
|
||||
if (ImGui::MenuItem(_("delete"))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_DELETE);
|
||||
}
|
||||
ImGui::PopStyleColor();
|
||||
|
@ -309,7 +309,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
}
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Add");
|
||||
ImGui::SetTooltip(_("Add"));
|
||||
}
|
||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
||||
makeInsTypeList=e->getPossibleInsTypes();
|
||||
|
@ -335,7 +335,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
}
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Duplicate");
|
||||
ImGui::SetTooltip(_("Duplicate"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_FOLDER_OPEN "##InsLoad")) {
|
||||
|
@ -356,47 +356,47 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
}
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Open");
|
||||
ImGui::SetTooltip(_("Open"));
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("InsOpenOpt")) {
|
||||
if (settings.unifiedDataView) {
|
||||
if (ImGui::MenuItem("replace instrument...")) {
|
||||
if (ImGui::MenuItem(_("replace instrument..."))) {
|
||||
doAction((curIns>=0 && curIns<(int)e->song.ins.size())?GUI_ACTION_INS_LIST_OPEN_REPLACE:GUI_ACTION_INS_LIST_OPEN);
|
||||
}
|
||||
if (ImGui::MenuItem("load instrument from TX81Z")) {
|
||||
if (ImGui::MenuItem(_("load instrument from TX81Z"))) {
|
||||
doAction(GUI_ACTION_TX81Z_REQUEST);
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::MenuItem("replace wavetable...")) {
|
||||
if (ImGui::MenuItem(_("replace wavetable..."))) {
|
||||
doAction((curWave>=0 && curWave<(int)e->song.wave.size())?GUI_ACTION_WAVE_LIST_OPEN_REPLACE:GUI_ACTION_WAVE_LIST_OPEN);
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::MenuItem("replace sample...")) {
|
||||
if (ImGui::MenuItem(_("replace sample..."))) {
|
||||
doAction((curSample>=0 && curSample<(int)e->song.sample.size())?GUI_ACTION_SAMPLE_LIST_OPEN_REPLACE:GUI_ACTION_SAMPLE_LIST_OPEN);
|
||||
}
|
||||
if (ImGui::MenuItem("import raw sample...")) {
|
||||
if (ImGui::MenuItem(_("import raw sample..."))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_OPEN_RAW);
|
||||
}
|
||||
if (ImGui::MenuItem("import raw sample (replace)...")) {
|
||||
if (ImGui::MenuItem(_("import raw sample (replace)..."))) {
|
||||
doAction((curSample>=0 && curSample<(int)e->song.sample.size())?GUI_ACTION_SAMPLE_LIST_OPEN_REPLACE_RAW:GUI_ACTION_SAMPLE_LIST_OPEN_RAW);
|
||||
}
|
||||
} else {
|
||||
if (ImGui::MenuItem("replace...")) {
|
||||
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")) {
|
||||
if (ImGui::MenuItem(_("load from TX81Z"))) {
|
||||
doAction(GUI_ACTION_TX81Z_REQUEST);
|
||||
}
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Open (insert; right-click to replace)");
|
||||
ImGui::SetTooltip(_("Open (insert; right-click to replace)"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_FLOPPY_O "##InsSave")) {
|
||||
|
@ -417,30 +417,30 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
}
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Save");
|
||||
ImGui::SetTooltip(_("Save"));
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("InsSaveFormats",ImGuiMouseButton_Right)) {
|
||||
if (settings.unifiedDataView) {
|
||||
if (ImGui::MenuItem("save instrument as .dmp...")) {
|
||||
if (ImGui::MenuItem(_("save instrument as .dmp..."))) {
|
||||
doAction(GUI_ACTION_INS_LIST_SAVE_DMP);
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::MenuItem("save wavetable as .dmw...")) {
|
||||
if (ImGui::MenuItem(_("save wavetable as .dmw..."))) {
|
||||
doAction(GUI_ACTION_WAVE_LIST_SAVE_DMW);
|
||||
}
|
||||
if (ImGui::MenuItem("save raw wavetable...")) {
|
||||
if (ImGui::MenuItem(_("save raw wavetable..."))) {
|
||||
doAction(GUI_ACTION_WAVE_LIST_SAVE_RAW);
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
if (ImGui::MenuItem("save raw sample...")) {
|
||||
if (ImGui::MenuItem(_("save raw sample..."))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_SAVE_RAW);
|
||||
}
|
||||
} else {
|
||||
if (ImGui::MenuItem("save as .dmp...")) {
|
||||
if (ImGui::MenuItem(_("save as .dmp..."))) {
|
||||
doAction(GUI_ACTION_INS_LIST_SAVE_DMP);
|
||||
}
|
||||
}
|
||||
|
@ -453,7 +453,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
}
|
||||
popToggleColors();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Toggle folders/standard view");
|
||||
ImGui::SetTooltip(_("Toggle folders/standard view"));
|
||||
}
|
||||
if (!insListDir) {
|
||||
ImGui::SameLine();
|
||||
|
@ -475,7 +475,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
}
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move up");
|
||||
ImGui::SetTooltip(_("Move up"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_ARROW_DOWN "##InsDown")) {
|
||||
|
@ -496,7 +496,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
}
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move down");
|
||||
ImGui::SetTooltip(_("Move down"));
|
||||
}
|
||||
} else {
|
||||
ImGui::SameLine();
|
||||
|
@ -507,7 +507,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
ImGui::InputText("##FolderName",&folderString);
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginDisabled(folderString.empty());
|
||||
if (ImGui::Button("Create")) {
|
||||
if (ImGui::Button(_("Create"))) {
|
||||
if (settings.unifiedDataView) {
|
||||
switch (lastAssetType) {
|
||||
case 0:
|
||||
|
@ -537,7 +537,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
ImGui::EndPopup();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("New folder");
|
||||
ImGui::SetTooltip(_("New folder"));
|
||||
}
|
||||
}
|
||||
if (lastAssetType==2) {
|
||||
|
@ -546,7 +546,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
doAction(GUI_ACTION_SAMPLE_LIST_PREVIEW);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Preview (right click to stop)");
|
||||
ImGui::SetTooltip(_("Preview (right click to stop)"));
|
||||
}
|
||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_STOP_PREVIEW);
|
||||
|
@ -573,7 +573,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
}
|
||||
popDestColor();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Delete");
|
||||
ImGui::SetTooltip(_("Delete"));
|
||||
}
|
||||
ImGui::Separator();
|
||||
int availableRows=ImGui::GetContentRegionAvail().y/ImGui::GetFrameHeight();
|
||||
|
@ -590,7 +590,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
lastAssetType=0;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("Instruments");
|
||||
ImGui::Text(_("Instruments"));
|
||||
ImGui::Indent();
|
||||
}
|
||||
|
||||
|
@ -605,16 +605,16 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
int dirIndex=0;
|
||||
int dirToDelete=-1;
|
||||
for (DivAssetDir& i: e->song.insDir) {
|
||||
String nodeName=fmt::sprintf("%s %s##_ADI%d",i.name.empty()?ICON_FA_FOLDER_O:ICON_FA_FOLDER,i.name.empty()?"<uncategorized>":i.name,i.name.empty()?-1:dirIndex);
|
||||
String nodeName=fmt::sprintf("%s %s##_ADI%d",i.name.empty()?ICON_FA_FOLDER_O:ICON_FA_FOLDER,i.name.empty()?_("<uncategorized>"):i.name,i.name.empty()?-1:dirIndex);
|
||||
String popupID=fmt::sprintf("DirRightMenu%d",dirIndex);
|
||||
bool treeNode=ImGui::TreeNodeEx(nodeName.c_str(),ImGuiTreeNodeFlags_SpanAvailWidth|(i.name.empty()?ImGuiTreeNodeFlags_DefaultOpen:0));
|
||||
DRAG_SOURCE(dirIndex,-1,"FUR_INSDIR");
|
||||
DRAG_TARGET(dirIndex,-1,e->song.insDir,"FUR_INSDIR");
|
||||
if (ImGui::BeginPopupContextItem(popupID.c_str())) {
|
||||
if (ImGui::MenuItem("rename...")) {
|
||||
if (ImGui::MenuItem(_("rename..."))) {
|
||||
editStr(&i.name);
|
||||
}
|
||||
if (ImGui::MenuItem("delete")) {
|
||||
if (ImGui::MenuItem(_("delete"))) {
|
||||
dirToDelete=dirIndex;
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
|
@ -660,7 +660,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
lastAssetType=1;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("Wavetables");
|
||||
ImGui::Text(_("Wavetables"));
|
||||
ImGui::Indent();
|
||||
actualWaveList();
|
||||
ImGui::Unindent();
|
||||
|
@ -671,7 +671,7 @@ void FurnaceGUI::drawInsList(bool asChild) {
|
|||
lastAssetType=2;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("Samples");
|
||||
ImGui::Text(_("Samples"));
|
||||
ImGui::Indent();
|
||||
actualSampleList();
|
||||
ImGui::Unindent();
|
||||
|
@ -711,24 +711,24 @@ void FurnaceGUI::drawWaveList(bool asChild) {
|
|||
doAction(GUI_ACTION_WAVE_LIST_ADD);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Add");
|
||||
ImGui::SetTooltip(_("Add"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_FILES_O "##WaveClone")) {
|
||||
doAction(GUI_ACTION_WAVE_LIST_DUPLICATE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Duplicate");
|
||||
ImGui::SetTooltip(_("Duplicate"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_FOLDER_OPEN "##WaveLoad")) {
|
||||
doAction(GUI_ACTION_WAVE_LIST_OPEN);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Open");
|
||||
ImGui::SetTooltip(_("Open"));
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("WaveOpenOpt")) {
|
||||
if (ImGui::MenuItem("replace...")) {
|
||||
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();
|
||||
|
@ -738,14 +738,14 @@ void FurnaceGUI::drawWaveList(bool asChild) {
|
|||
doAction(GUI_ACTION_WAVE_LIST_SAVE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Save");
|
||||
ImGui::SetTooltip(_("Save"));
|
||||
}
|
||||
if (!settings.unifiedDataView) {
|
||||
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();
|
||||
|
@ -758,7 +758,7 @@ void FurnaceGUI::drawWaveList(bool asChild) {
|
|||
}
|
||||
popToggleColors();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Toggle folders/standard view");
|
||||
ImGui::SetTooltip(_("Toggle folders/standard view"));
|
||||
}
|
||||
if (!waveListDir) {
|
||||
ImGui::SameLine();
|
||||
|
@ -766,14 +766,14 @@ void FurnaceGUI::drawWaveList(bool asChild) {
|
|||
doAction(GUI_ACTION_WAVE_LIST_MOVE_UP);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move up");
|
||||
ImGui::SetTooltip(_("Move up"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_ARROW_DOWN "##WaveDown")) {
|
||||
doAction(GUI_ACTION_WAVE_LIST_MOVE_DOWN);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move down");
|
||||
ImGui::SetTooltip(_("Move down"));
|
||||
}
|
||||
} else {
|
||||
ImGui::SameLine();
|
||||
|
@ -784,7 +784,7 @@ void FurnaceGUI::drawWaveList(bool asChild) {
|
|||
ImGui::InputText("##FolderName",&folderString);
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginDisabled(folderString.empty());
|
||||
if (ImGui::Button("Create")) {
|
||||
if (ImGui::Button(_("Create"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->song.waveDir.push_back(DivAssetDir(folderString));
|
||||
});
|
||||
|
@ -794,7 +794,7 @@ void FurnaceGUI::drawWaveList(bool asChild) {
|
|||
ImGui::EndPopup();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("New folder");
|
||||
ImGui::SetTooltip(_("New folder"));
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
@ -804,7 +804,7 @@ void FurnaceGUI::drawWaveList(bool asChild) {
|
|||
}
|
||||
popDestColor();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Delete");
|
||||
ImGui::SetTooltip(_("Delete"));
|
||||
}
|
||||
ImGui::Separator();
|
||||
if (ImGui::BeginTable("WaveListScroll",1,ImGuiTableFlags_ScrollY)) {
|
||||
|
@ -843,35 +843,35 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
|||
doAction(GUI_ACTION_SAMPLE_LIST_ADD);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Add");
|
||||
ImGui::SetTooltip(_("Add"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_FILES_O "##SampleClone")) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_DUPLICATE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Duplicate");
|
||||
ImGui::SetTooltip(_("Duplicate"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_FOLDER_OPEN "##SampleLoad")) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_OPEN);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Open");
|
||||
ImGui::SetTooltip(_("Open"));
|
||||
}
|
||||
if (mobileUI && ImGui::IsItemActive() && CHECK_LONG_HOLD) {
|
||||
ImGui::OpenPopup("SampleOpenOpt");
|
||||
NOTIFY_LONG_HOLD;
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("SampleOpenOpt")) {
|
||||
if (ImGui::MenuItem("replace...")) {
|
||||
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...")) {
|
||||
if (ImGui::MenuItem(_("import raw..."))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_OPEN_RAW);
|
||||
}
|
||||
if (ImGui::MenuItem("import raw (replace)...")) {
|
||||
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();
|
||||
|
@ -881,14 +881,14 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
|||
doAction(GUI_ACTION_SAMPLE_LIST_SAVE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Save");
|
||||
ImGui::SetTooltip(_("Save"));
|
||||
}
|
||||
if (mobileUI && ImGui::IsItemActive() && CHECK_LONG_HOLD) {
|
||||
ImGui::OpenPopup("SampleSaveOpt");
|
||||
NOTIFY_LONG_HOLD;
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("SampleSaveOpt")) {
|
||||
if (ImGui::MenuItem("save raw...")) {
|
||||
if (ImGui::MenuItem(_("save raw..."))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_SAVE_RAW);
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
|
@ -900,7 +900,7 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
|||
}
|
||||
popToggleColors();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Toggle folders/standard view");
|
||||
ImGui::SetTooltip(_("Toggle folders/standard view"));
|
||||
}
|
||||
if (!sampleListDir) {
|
||||
ImGui::SameLine();
|
||||
|
@ -908,14 +908,14 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
|||
doAction(GUI_ACTION_SAMPLE_LIST_MOVE_UP);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move up");
|
||||
ImGui::SetTooltip(_("Move up"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_ARROW_DOWN "##SampleDown")) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_MOVE_DOWN);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move down");
|
||||
ImGui::SetTooltip(_("Move down"));
|
||||
}
|
||||
} else {
|
||||
ImGui::SameLine();
|
||||
|
@ -926,7 +926,7 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
|||
ImGui::InputText("##FolderName",&folderString);
|
||||
ImGui::SameLine();
|
||||
ImGui::BeginDisabled(folderString.empty());
|
||||
if (ImGui::Button("Create")) {
|
||||
if (ImGui::Button(_("Create"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->song.sampleDir.push_back(DivAssetDir(folderString));
|
||||
});
|
||||
|
@ -936,7 +936,7 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
|||
ImGui::EndPopup();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("New folder");
|
||||
ImGui::SetTooltip(_("New folder"));
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
@ -944,7 +944,7 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
|||
doAction(GUI_ACTION_SAMPLE_LIST_PREVIEW);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Preview (right click to stop)");
|
||||
ImGui::SetTooltip(_("Preview (right click to stop)"));
|
||||
}
|
||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_STOP_PREVIEW);
|
||||
|
@ -956,7 +956,7 @@ void FurnaceGUI::drawSampleList(bool asChild) {
|
|||
}
|
||||
popDestColor();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Delete");
|
||||
ImGui::SetTooltip(_("Delete"));
|
||||
}
|
||||
ImGui::Separator();
|
||||
if (ImGui::BeginTable("SampleListScroll",1,ImGuiTableFlags_ScrollY)) {
|
||||
|
@ -982,16 +982,16 @@ void FurnaceGUI::actualWaveList() {
|
|||
int dirIndex=0;
|
||||
int dirToDelete=-1;
|
||||
for (DivAssetDir& i: e->song.waveDir) {
|
||||
String nodeName=fmt::sprintf("%s %s##_ADW%d",i.name.empty()?ICON_FA_FOLDER_O:ICON_FA_FOLDER,i.name.empty()?"<uncategorized>":i.name,i.name.empty()?-1:dirIndex);
|
||||
String nodeName=fmt::sprintf("%s %s##_ADW%d",i.name.empty()?ICON_FA_FOLDER_O:ICON_FA_FOLDER,i.name.empty()?_("<uncategorized>"):i.name,i.name.empty()?-1:dirIndex);
|
||||
String popupID=fmt::sprintf("DirRightMenu%d",dirIndex);
|
||||
bool treeNode=ImGui::TreeNodeEx(nodeName.c_str(),ImGuiTreeNodeFlags_SpanAvailWidth|(i.name.empty()?ImGuiTreeNodeFlags_DefaultOpen:0));
|
||||
DRAG_SOURCE(dirIndex,-1,"FUR_WAVEDIR");
|
||||
DRAG_TARGET(dirIndex,-1,e->song.waveDir,"FUR_WAVEDIR");
|
||||
if (ImGui::BeginPopupContextItem(popupID.c_str())) {
|
||||
if (ImGui::MenuItem("rename...")) {
|
||||
if (ImGui::MenuItem(_("rename..."))) {
|
||||
editStr(&i.name);
|
||||
}
|
||||
if (ImGui::MenuItem("delete")) {
|
||||
if (ImGui::MenuItem(_("delete"))) {
|
||||
dirToDelete=dirIndex;
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
|
@ -1028,16 +1028,16 @@ void FurnaceGUI::actualSampleList() {
|
|||
int dirIndex=0;
|
||||
int dirToDelete=-1;
|
||||
for (DivAssetDir& i: e->song.sampleDir) {
|
||||
String nodeName=fmt::sprintf("%s %s##_ADS%d",i.name.empty()?ICON_FA_FOLDER_O:ICON_FA_FOLDER,i.name.empty()?"<uncategorized>":i.name,i.name.empty()?-1:dirIndex);
|
||||
String nodeName=fmt::sprintf("%s %s##_ADS%d",i.name.empty()?ICON_FA_FOLDER_O:ICON_FA_FOLDER,i.name.empty()?_("<uncategorized>"):i.name,i.name.empty()?-1:dirIndex);
|
||||
String popupID=fmt::sprintf("DirRightMenu%d",dirIndex);
|
||||
bool treeNode=ImGui::TreeNodeEx(nodeName.c_str(),ImGuiTreeNodeFlags_SpanAvailWidth|(i.name.empty()?ImGuiTreeNodeFlags_DefaultOpen:0));
|
||||
DRAG_SOURCE(dirIndex,-1,"FUR_SDIR");
|
||||
DRAG_TARGET(dirIndex,-1,e->song.sampleDir,"FUR_SDIR");
|
||||
if (ImGui::BeginPopupContextItem(popupID.c_str())) {
|
||||
if (ImGui::MenuItem("rename...")) {
|
||||
if (ImGui::MenuItem(_("rename..."))) {
|
||||
editStr(&i.name);
|
||||
}
|
||||
if (ImGui::MenuItem("delete")) {
|
||||
if (ImGui::MenuItem(_("delete"))) {
|
||||
dirToDelete=dirIndex;
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
|
|
|
@ -35,21 +35,21 @@ void FurnaceGUI::doAction(int what) {
|
|||
switch (what) {
|
||||
case GUI_ACTION_NEW:
|
||||
if (modified) {
|
||||
showWarning("Unsaved changes! Save changes before creating a new song?",GUI_WARN_NEW);
|
||||
showWarning(_("Unsaved changes! Save changes before creating a new song?"),GUI_WARN_NEW);
|
||||
} else {
|
||||
displayNew=true;
|
||||
}
|
||||
break;
|
||||
case GUI_ACTION_OPEN:
|
||||
if (modified) {
|
||||
showWarning("Unsaved changes! Save changes before opening another file?",GUI_WARN_OPEN);
|
||||
showWarning(_("Unsaved changes! Save changes before opening another file?"),GUI_WARN_OPEN);
|
||||
} else {
|
||||
openFileDialog(GUI_FILE_OPEN);
|
||||
}
|
||||
break;
|
||||
case GUI_ACTION_OPEN_BACKUP:
|
||||
if (modified) {
|
||||
showWarning("Unsaved changes! Save changes before opening backup?",GUI_WARN_OPEN_BACKUP);
|
||||
showWarning(_("Unsaved changes! Save changes before opening backup?"),GUI_WARN_OPEN_BACKUP);
|
||||
} else {
|
||||
openFileDialog(GUI_FILE_OPEN_BACKUP);
|
||||
}
|
||||
|
@ -59,7 +59,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
openFileDialog(GUI_FILE_SAVE);
|
||||
} else {
|
||||
if (save(curFileName,e->song.isDMF?e->song.version:0)>0) {
|
||||
showError(fmt::sprintf("Error while saving file! (%s)",lastError));
|
||||
showError(fmt::sprintf(_("Error while saving file! (%s)"),lastError));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -186,7 +186,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
msg.sysExLen=15;
|
||||
memcpy(msg.sysExData.get(),avRequest,15);
|
||||
if (!e->sendMidiMessage(msg)) {
|
||||
showError("Error while sending request (MIDI output not configured?)");
|
||||
showError(_("Error while sending request (MIDI output not configured?)"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -194,7 +194,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
e->syncReset();
|
||||
break;
|
||||
case GUI_ACTION_CLEAR:
|
||||
showWarning("Select an option: (cannot be undone!)",GUI_WARN_CLEAR);
|
||||
showWarning(_("Select an option: (cannot be undone!)"),GUI_WARN_CLEAR);
|
||||
break;
|
||||
case GUI_ACTION_COMMAND_PALETTE:
|
||||
displayPalette=true;
|
||||
|
@ -688,7 +688,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
}
|
||||
curIns=e->addInstrument(cursor.xCoarse);
|
||||
if (curIns==-1) {
|
||||
showError("too many instruments!");
|
||||
showError(_("too many instruments!"));
|
||||
} else {
|
||||
if (settings.blankIns) {
|
||||
e->song.ins[curIns]->fm.fb=0;
|
||||
|
@ -717,7 +717,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
int prevIns=curIns;
|
||||
curIns=e->addInstrument(cursor.xCoarse);
|
||||
if (curIns==-1) {
|
||||
showError("too many instruments!");
|
||||
showError(_("too many instruments!"));
|
||||
} else {
|
||||
(*e->song.ins[curIns])=(*e->song.ins[prevIns]);
|
||||
wantScrollListIns=true;
|
||||
|
@ -822,7 +822,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
|
||||
curWave=e->addWave();
|
||||
if (curWave==-1) {
|
||||
showError("too many wavetables!");
|
||||
showError(_("too many wavetables!"));
|
||||
} else {
|
||||
wantScrollListWave=true;
|
||||
e->song.wave[curWave]->len=finalWidth;
|
||||
|
@ -840,7 +840,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
int prevWave=curWave;
|
||||
curWave=e->addWave();
|
||||
if (curWave==-1) {
|
||||
showError("too many wavetables!");
|
||||
showError(_("too many wavetables!"));
|
||||
} else {
|
||||
(*e->song.wave[curWave])=(*e->song.wave[prevWave]);
|
||||
wantScrollListWave=true;
|
||||
|
@ -906,7 +906,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
case GUI_ACTION_SAMPLE_LIST_ADD:
|
||||
curSample=e->addSample();
|
||||
if (curSample==-1) {
|
||||
showError("too many samples!");
|
||||
showError(_("too many samples!"));
|
||||
} else {
|
||||
wantScrollListSample=true;
|
||||
MARK_MODIFIED;
|
||||
|
@ -918,7 +918,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
DivSample* prevSample=e->getSample(curSample);
|
||||
curSample=e->addSample();
|
||||
if (curSample==-1) {
|
||||
showError("too many samples!");
|
||||
showError(_("too many samples!"));
|
||||
} else {
|
||||
e->lockEngine([this,prevSample]() {
|
||||
DivSample* sample=e->getSample(curSample);
|
||||
|
@ -1121,7 +1121,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
|
||||
e->lockEngine([this,sample,pos]() {
|
||||
if (!sample->insert(pos,sampleClipboardLen)) {
|
||||
showError("couldn't paste! make sure your sample is 8 or 16-bit.");
|
||||
showError(_("couldn't paste! make sure your sample is 8 or 16-bit."));
|
||||
} else {
|
||||
if (sample->depth==DIV_SAMPLE_DEPTH_8BIT) {
|
||||
for (size_t i=0; i<sampleClipboardLen; i++) {
|
||||
|
@ -1590,7 +1590,7 @@ void FurnaceGUI::doAction(int what) {
|
|||
DivSample* sample=e->song.sample[curSample];
|
||||
curIns=e->addInstrument(cursor.xCoarse);
|
||||
if (curIns==-1) {
|
||||
showError("too many instruments!");
|
||||
showError(_("too many instruments!"));
|
||||
} else {
|
||||
e->song.ins[curIns]->type=insType;
|
||||
e->song.ins[curIns]->name=sample->name;
|
||||
|
@ -1625,13 +1625,13 @@ void FurnaceGUI::doAction(int what) {
|
|||
DivSample* sample=e->song.sample[curSample];
|
||||
SAMPLE_OP_BEGIN;
|
||||
if (end-start<1) {
|
||||
showError("select at least one sample!");
|
||||
showError(_("select at least one sample!"));
|
||||
} else if (end-start>256) {
|
||||
showError("maximum size is 256 samples!");
|
||||
showError(_("maximum size is 256 samples!"));
|
||||
} else {
|
||||
curWave=e->addWave();
|
||||
if (curWave==-1) {
|
||||
showError("too many wavetables!");
|
||||
showError(_("too many wavetables!"));
|
||||
} else {
|
||||
DivWavetable* wave=e->song.wave[curWave];
|
||||
wave->min=0;
|
||||
|
|
|
@ -44,44 +44,44 @@ const float mobileButtonDistances[4][8]={
|
|||
|
||||
const char* mobileButtonLabels[32]={
|
||||
// page 1
|
||||
"cut",
|
||||
"copy",
|
||||
"paste",
|
||||
"delete",
|
||||
"select\nall",
|
||||
"piano",
|
||||
"undo",
|
||||
"redo",
|
||||
_N("cut"),
|
||||
_N("copy"),
|
||||
_N("paste"),
|
||||
_N("delete"),
|
||||
_N("select\nall"),
|
||||
_N("piano"),
|
||||
_N("undo"),
|
||||
_N("redo"),
|
||||
|
||||
// page 2
|
||||
"paste\nmix",
|
||||
"paste\nmix bg",
|
||||
"paste\nins",
|
||||
"paste\nins bg",
|
||||
"paste\nflood",
|
||||
"paste\noverflow",
|
||||
"transpose\nnotes",
|
||||
"transpose\nvalues",
|
||||
_N("paste\nmix"),
|
||||
_N("paste\nmix bg"),
|
||||
_N("paste\nins"),
|
||||
_N("paste\nins bg"),
|
||||
_N("paste\nflood"),
|
||||
_N("paste\noverflow"),
|
||||
_N("transpose\nnotes"),
|
||||
_N("transpose\nvalues"),
|
||||
|
||||
// page 3
|
||||
"change\nins",
|
||||
"find/\nreplace",
|
||||
"collapse",
|
||||
"expand",
|
||||
"flip",
|
||||
"invert",
|
||||
"interpolate",
|
||||
"scale",
|
||||
_N("change\nins"),
|
||||
_N("find/\nreplace"),
|
||||
_N("collapse"),
|
||||
_N("expand"),
|
||||
_N("flip"),
|
||||
_N("invert"),
|
||||
_N("interpolate"),
|
||||
_N("scale"),
|
||||
|
||||
// page 4
|
||||
"fade",
|
||||
"randomize",
|
||||
"opmask",
|
||||
"scroll\nmode",
|
||||
"input\nlatch",
|
||||
"set\nlatch",
|
||||
"clear\nlatch",
|
||||
"clear"
|
||||
_N("fade"),
|
||||
_N("randomize"),
|
||||
_N("opmask"),
|
||||
_N("scroll\nmode"),
|
||||
_N("input\nlatch"),
|
||||
_N("set\nlatch"),
|
||||
_N("clear\nlatch"),
|
||||
_N("clear")
|
||||
};
|
||||
|
||||
const int mobileButtonActions[32]={
|
||||
|
@ -293,7 +293,7 @@ void FurnaceGUI::drawMobileControls() {
|
|||
(mobileEditButtonPos.x*canvasW)+cos(buttonDir*2.0*M_PI)*buttonDist*buttonMirrorX*anim,
|
||||
(mobileEditButtonPos.y*canvasH)+sin(buttonDir*2.0*M_PI)*buttonDist*buttonMirrorY*anim
|
||||
));
|
||||
if (ImGui::Button(mobileButtonLabels[i+mobileEditPage*8],mobileEditButtonSize)) {
|
||||
if (ImGui::Button(_(mobileButtonLabels[i+mobileEditPage*8]),mobileEditButtonSize)) {
|
||||
if (mobileButtonActions[i+mobileEditPage*8]) {
|
||||
doAction(mobileButtonActions[i+mobileEditPage*8]);
|
||||
}
|
||||
|
@ -418,44 +418,44 @@ void FurnaceGUI::drawMobileControls() {
|
|||
ImVec2 buttonSize=ImGui::GetContentRegionAvail();
|
||||
buttonSize.y=30.0f*dpiScale;
|
||||
|
||||
if (ImGui::Button("Pattern",buttonSize)) {
|
||||
if (ImGui::Button(_("Pattern"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_PATTERN;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Orders",buttonSize)) {
|
||||
if (ImGui::Button(_("Orders"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_ORDERS;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Ins",buttonSize)) {
|
||||
if (ImGui::Button(_("Ins"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_INSTRUMENT;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Wave",buttonSize)) {
|
||||
if (ImGui::Button(_("Wave"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_WAVETABLE;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Sample",buttonSize)) {
|
||||
if (ImGui::Button(_("Sample"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_SAMPLE;
|
||||
}
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Song",buttonSize)) {
|
||||
if (ImGui::Button(_("Song"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_SONG;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Channels",buttonSize)) {
|
||||
if (ImGui::Button(_("Channels"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_CHANNELS;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Chips",buttonSize)) {
|
||||
if (ImGui::Button(_("Chips"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_CHIPS;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Mixer",buttonSize)) {
|
||||
if (ImGui::Button(_("Mixer"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_MIXER;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Other",buttonSize)) {
|
||||
if (ImGui::Button(_("Other"),buttonSize)) {
|
||||
mobScene=GUI_SCENE_OTHER;
|
||||
}
|
||||
ImGui::EndTable();
|
||||
|
@ -484,36 +484,36 @@ void FurnaceGUI::drawMobileControls() {
|
|||
}
|
||||
break;
|
||||
case GUI_SCENE_SONG: {
|
||||
if (ImGui::Button("New")) {
|
||||
if (ImGui::Button(_("New"))) {
|
||||
mobileMenuOpen=false;
|
||||
//doAction(GUI_ACTION_NEW);
|
||||
if (modified) {
|
||||
showWarning("Unsaved changes! Save changes before creating a new song?",GUI_WARN_NEW);
|
||||
showWarning(_("Unsaved changes! Save changes before creating a new song?"),GUI_WARN_NEW);
|
||||
} else {
|
||||
displayNew=true;
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Open")) {
|
||||
if (ImGui::Button(_("Open"))) {
|
||||
mobileMenuOpen=false;
|
||||
doAction(GUI_ACTION_OPEN);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Save")) {
|
||||
if (ImGui::Button(_("Save"))) {
|
||||
mobileMenuOpen=false;
|
||||
doAction(GUI_ACTION_SAVE);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Save as...")) {
|
||||
if (ImGui::Button(_("Save as..."))) {
|
||||
mobileMenuOpen=false;
|
||||
doAction(GUI_ACTION_SAVE_AS);
|
||||
}
|
||||
|
||||
if (ImGui::Button("Export")) {
|
||||
if (ImGui::Button(_("Export"))) {
|
||||
doAction(GUI_ACTION_EXPORT);
|
||||
}
|
||||
|
||||
if (ImGui::Button("Restore Backup")) {
|
||||
if (ImGui::Button(_("Restore Backup"))) {
|
||||
mobileMenuOpen=false;
|
||||
doAction(GUI_ACTION_OPEN_BACKUP);
|
||||
}
|
||||
|
@ -521,15 +521,15 @@ void FurnaceGUI::drawMobileControls() {
|
|||
ImGui::Separator();
|
||||
|
||||
if (ImGui::BeginTabBar("MobileSong")) {
|
||||
if (ImGui::BeginTabItem("Song Info")) {
|
||||
if (ImGui::BeginTabItem(_("Song Info"))) {
|
||||
drawSongInfo(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Subsongs")) {
|
||||
if (ImGui::BeginTabItem(_("Subsongs"))) {
|
||||
drawSubSongs(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Speed")) {
|
||||
if (ImGui::BeginTabItem(_("Speed"))) {
|
||||
drawSpeed(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
|
@ -538,85 +538,85 @@ void FurnaceGUI::drawMobileControls() {
|
|||
break;
|
||||
}
|
||||
case GUI_SCENE_CHANNELS:
|
||||
ImGui::Text("Channels here...");
|
||||
ImGui::Text(_("Channels here..."));
|
||||
break;
|
||||
case GUI_SCENE_CHIPS:
|
||||
ImGui::Text("Chips here...");
|
||||
ImGui::Text(_("Chips here..."));
|
||||
break;
|
||||
case GUI_SCENE_MIXER:
|
||||
ImGui::Text("What the hell...");
|
||||
ImGui::Text(_("What the hell..."));
|
||||
break;
|
||||
case GUI_SCENE_OTHER: {
|
||||
if (ImGui::Button("Osc")) {
|
||||
if (ImGui::Button(_("Osc"))) {
|
||||
oscOpen=!oscOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("ChanOsc")) {
|
||||
if (ImGui::Button(_("ChanOsc"))) {
|
||||
chanOscOpen=!chanOscOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("RegView")) {
|
||||
if (ImGui::Button(_("RegView"))) {
|
||||
regViewOpen=!regViewOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Stats")) {
|
||||
if (ImGui::Button(_("Stats"))) {
|
||||
statsOpen=!statsOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Grooves")) {
|
||||
if (ImGui::Button(_("Grooves"))) {
|
||||
groovesOpen=!groovesOpen;
|
||||
}
|
||||
if (ImGui::Button("Compat Flags")) {
|
||||
if (ImGui::Button(_("Compat Flags"))) {
|
||||
compatFlagsOpen=!compatFlagsOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("XYOsc")) {
|
||||
if (ImGui::Button(_("XYOsc"))) {
|
||||
xyOscOpen=!xyOscOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Meter")) {
|
||||
if (ImGui::Button(_("Meter"))) {
|
||||
volMeterOpen=!volMeterOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Memory")) {
|
||||
if (ImGui::Button(_("Memory"))) {
|
||||
memoryOpen=!memoryOpen;
|
||||
}
|
||||
|
||||
if (ImGui::Button("CV")) {
|
||||
if (ImGui::Button(_("CV"))) {
|
||||
cvOpen=!cvOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Presets")) {
|
||||
if (ImGui::Button(_("Presets"))) {
|
||||
userPresetsOpen=!userPresetsOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("PatManager")) {
|
||||
if (ImGui::Button(_("PatManager"))) {
|
||||
patManagerOpen=!patManagerOpen;
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Button("Panic");
|
||||
ImGui::Button(_("Panic"));
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Settings")) {
|
||||
if (ImGui::Button(_("Settings"))) {
|
||||
mobileMenuOpen=false;
|
||||
settingsOpen=true;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Log")) {
|
||||
if (ImGui::Button(_("Log"))) {
|
||||
logOpen=!logOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Debug")) {
|
||||
if (ImGui::Button(_("Debug"))) {
|
||||
debugOpen=!debugOpen;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("About")) {
|
||||
if (ImGui::Button(_("About"))) {
|
||||
mobileMenuOpen=false;
|
||||
mobileMenuPos=0.0f;
|
||||
aboutOpen=true;
|
||||
}
|
||||
if (ImGui::Button("Switch to Desktop Mode")) {
|
||||
if (ImGui::Button(_("Switch to Desktop Mode"))) {
|
||||
toggleMobileUI(!mobileUI);
|
||||
}
|
||||
|
||||
|
@ -626,16 +626,16 @@ void FurnaceGUI::drawMobileControls() {
|
|||
}
|
||||
|
||||
if (numAmiga) {
|
||||
ImGui::Text(
|
||||
ImGui::Text(_(
|
||||
"this is NOT ROM export! only use for making sure the\n"
|
||||
"Furnace Amiga emulator is working properly by\n"
|
||||
"comparing it with real Amiga output."
|
||||
);
|
||||
));
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Directory");
|
||||
ImGui::Text(_("Directory"));
|
||||
ImGui::SameLine();
|
||||
ImGui::InputText("##AVDPath",&workingDirROMExport);
|
||||
if (ImGui::Button("Bake Data")) {
|
||||
if (ImGui::Button(_("Bake Data"))) {
|
||||
std::vector<DivROMExportOutput> out=e->buildROM(DIV_ROM_AMIGA_VALIDATION);
|
||||
if (workingDirROMExport.size()>0) {
|
||||
if (workingDirROMExport[workingDirROMExport.size()-1]!=DIR_SEPARATOR) workingDirROMExport+=DIR_SEPARATOR_STR;
|
||||
|
@ -650,7 +650,7 @@ void FurnaceGUI::drawMobileControls() {
|
|||
i.data->finish();
|
||||
delete i.data;
|
||||
}
|
||||
showError(fmt::sprintf("Done! Baked %d files.",(int)out.size()));
|
||||
showError(fmt::sprintf(_("Done! Baked %d files."),(int)out.size()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -678,7 +678,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Octave");
|
||||
ImGui::Text(_("Octave"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::InputInt("##Octave",&curOctave,1,1)) {
|
||||
|
@ -695,7 +695,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
if (ImGui::SmallButton(changeCoarse?"Coarse Step":"Edit Step")) {
|
||||
if (ImGui::SmallButton(changeCoarse?_("Coarse Step"):_("Edit Step"))) {
|
||||
changeCoarse=!changeCoarse;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
|
@ -728,7 +728,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
play();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Play");
|
||||
ImGui::SetTooltip(_("Play"));
|
||||
}
|
||||
popToggleColors();
|
||||
ImGui::SameLine();
|
||||
|
@ -736,25 +736,25 @@ void FurnaceGUI::drawEditControls() {
|
|||
stop();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Stop");
|
||||
ImGui::SetTooltip(_("Stop"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Edit",&edit);
|
||||
ImGui::Checkbox(_("Edit"),&edit);
|
||||
ImGui::SameLine();
|
||||
bool metro=e->getMetronome();
|
||||
if (ImGui::Checkbox("Metronome",&metro)) {
|
||||
if (ImGui::Checkbox(_("Metronome"),&metro)) {
|
||||
e->setMetronome(metro);
|
||||
}
|
||||
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Follow");
|
||||
ImGui::Text(_("Follow"));
|
||||
ImGui::SameLine();
|
||||
unimportant(ImGui::Checkbox("Orders",&followOrders));
|
||||
unimportant(ImGui::Checkbox(_("Orders"),&followOrders));
|
||||
ImGui::SameLine();
|
||||
unimportant(ImGui::Checkbox("Pattern",&followPattern));
|
||||
unimportant(ImGui::Checkbox(_("Pattern"),&followPattern));
|
||||
|
||||
bool repeatPattern=e->getRepeatPattern();
|
||||
if (ImGui::Checkbox("Repeat pattern",&repeatPattern)) {
|
||||
if (ImGui::Checkbox(_("Repeat pattern"),&repeatPattern)) {
|
||||
e->setRepeatPattern(repeatPattern);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
@ -763,17 +763,17 @@ void FurnaceGUI::drawEditControls() {
|
|||
pendingStepUpdate=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Step one row");
|
||||
ImGui::SetTooltip(_("Step one row"));
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
pushToggleColors(noteInputPoly);
|
||||
if (ImGui::Button(noteInputPoly?("Poly##PolyInput"):("Mono##PolyInput"))) {
|
||||
if (ImGui::Button(noteInputPoly?(_("Poly##PolyInput")):(_("Mono##PolyInput")))) {
|
||||
noteInputPoly=!noteInputPoly;
|
||||
e->setAutoNotePoly(noteInputPoly);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Polyphony");
|
||||
ImGui::SetTooltip(_("Polyphony"));
|
||||
}
|
||||
popToggleColors();
|
||||
}
|
||||
|
@ -786,7 +786,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
stop();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Stop");
|
||||
ImGui::SetTooltip(_("Stop"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
pushToggleColors(e->isPlaying());
|
||||
|
@ -794,7 +794,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
play();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Play");
|
||||
ImGui::SetTooltip(_("Play"));
|
||||
}
|
||||
popToggleColors();
|
||||
ImGui::SameLine();
|
||||
|
@ -803,7 +803,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
pendingStepUpdate=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Step one row");
|
||||
ImGui::SetTooltip(_("Step one row"));
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
|
@ -813,7 +813,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
e->setRepeatPattern(!repeatPattern);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Repeat pattern");
|
||||
ImGui::SetTooltip(_("Repeat pattern"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
|
@ -823,7 +823,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
edit=!edit;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Edit");
|
||||
ImGui::SetTooltip(_("Edit"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
|
@ -834,12 +834,12 @@ void FurnaceGUI::drawEditControls() {
|
|||
e->setMetronome(!metro);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Metronome");
|
||||
ImGui::SetTooltip(_("Metronome"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("Octave");
|
||||
ImGui::Text(_("Octave"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(96.0f*dpiScale);
|
||||
if (ImGui::InputInt("##Octave",&curOctave,1,1)) {
|
||||
|
@ -854,7 +854,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::SmallButton(changeCoarse?"Coarse Step":"Edit Step")) {
|
||||
if (ImGui::SmallButton(changeCoarse?_("Coarse Step"):_("Edit Step"))) {
|
||||
changeCoarse=!changeCoarse;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
@ -880,20 +880,20 @@ void FurnaceGUI::drawEditControls() {
|
|||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("Follow");
|
||||
ImGui::Text(_("Follow"));
|
||||
ImGui::SameLine();
|
||||
unimportant(ImGui::Checkbox("Orders",&followOrders));
|
||||
unimportant(ImGui::Checkbox(_("Orders"),&followOrders));
|
||||
ImGui::SameLine();
|
||||
unimportant(ImGui::Checkbox("Pattern",&followPattern));
|
||||
unimportant(ImGui::Checkbox(_("Pattern"),&followPattern));
|
||||
|
||||
ImGui::SameLine();
|
||||
pushToggleColors(noteInputPoly);
|
||||
if (ImGui::Button(noteInputPoly?("Poly##PolyInput"):("Mono##PolyInput"))) {
|
||||
if (ImGui::Button(noteInputPoly?_("Poly##PolyInput"):_("Mono##PolyInput"))) {
|
||||
noteInputPoly=!noteInputPoly;
|
||||
e->setAutoNotePoly(noteInputPoly);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Polyphony");
|
||||
ImGui::SetTooltip(_("Polyphony"));
|
||||
}
|
||||
popToggleColors();
|
||||
}
|
||||
|
@ -908,21 +908,21 @@ void FurnaceGUI::drawEditControls() {
|
|||
play();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Play");
|
||||
ImGui::SetTooltip(_("Play"));
|
||||
}
|
||||
popToggleColors();
|
||||
if (ImGui::Button(ICON_FA_STOP "##Stop",buttonSize)) {
|
||||
stop();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Stop");
|
||||
ImGui::SetTooltip(_("Stop"));
|
||||
}
|
||||
if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne",buttonSize)) {
|
||||
e->stepOne(cursor.y);
|
||||
pendingStepUpdate=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Step one row");
|
||||
ImGui::SetTooltip(_("Step one row"));
|
||||
}
|
||||
|
||||
bool repeatPattern=e->getRepeatPattern();
|
||||
|
@ -931,7 +931,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
e->setRepeatPattern(!repeatPattern);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Repeat pattern");
|
||||
ImGui::SetTooltip(_("Repeat pattern"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
|
@ -940,7 +940,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
edit=!edit;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Edit");
|
||||
ImGui::SetTooltip(_("Edit"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
|
@ -950,13 +950,13 @@ void FurnaceGUI::drawEditControls() {
|
|||
e->setMetronome(!metro);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Metronome");
|
||||
ImGui::SetTooltip(_("Metronome"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
ImGui::Text("Oct.");
|
||||
ImGui::Text(_("Oct."));
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Octave");
|
||||
ImGui::SetTooltip(_("Octave"));
|
||||
}
|
||||
float avail=ImGui::GetContentRegionAvail().x;
|
||||
ImGui::SetNextItemWidth(avail);
|
||||
|
@ -971,7 +971,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
}
|
||||
}
|
||||
|
||||
if (ImGui::SmallButton(changeCoarse?"Coarse":"Step")) {
|
||||
if (ImGui::SmallButton(changeCoarse?_("Coarse"):_("Step"))) {
|
||||
changeCoarse=!changeCoarse;
|
||||
}
|
||||
ImGui::SetNextItemWidth(avail);
|
||||
|
@ -995,34 +995,34 @@ void FurnaceGUI::drawEditControls() {
|
|||
}
|
||||
}
|
||||
|
||||
ImGui::Text("Foll.");
|
||||
ImGui::Text(_("Foll."));
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Follow");
|
||||
ImGui::SetTooltip(_("Follow"));
|
||||
}
|
||||
pushToggleColors(followOrders);
|
||||
if (ImGui::Button("Ord##FollowOrders",buttonSize)) { handleUnimportant
|
||||
if (ImGui::Button(_("Ord##FollowOrders"),buttonSize)) { handleUnimportant
|
||||
followOrders=!followOrders;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Orders");
|
||||
ImGui::SetTooltip(_("Orders"));
|
||||
}
|
||||
popToggleColors();
|
||||
pushToggleColors(followPattern);
|
||||
if (ImGui::Button("Pat##FollowPattern",buttonSize)) { handleUnimportant
|
||||
if (ImGui::Button(_("Pat##FollowPattern"),buttonSize)) { handleUnimportant
|
||||
followPattern=!followPattern;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Pattern");
|
||||
ImGui::SetTooltip(_("Pattern"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
pushToggleColors(noteInputPoly);
|
||||
if (ImGui::Button(noteInputPoly?("Poly##PolyInput"):("Mono##PolyInput"))) {
|
||||
if (ImGui::Button(noteInputPoly?_("Poly##PolyInput"):_("Mono##PolyInput"))) {
|
||||
noteInputPoly=!noteInputPoly;
|
||||
e->setAutoNotePoly(noteInputPoly);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Polyphony");
|
||||
ImGui::SetTooltip(_("Polyphony"));
|
||||
}
|
||||
popToggleColors();
|
||||
}
|
||||
|
@ -1037,7 +1037,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
stop();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Stop");
|
||||
ImGui::SetTooltip(_("Stop"));
|
||||
}
|
||||
popToggleColors();
|
||||
} else {
|
||||
|
@ -1045,7 +1045,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
play(oldRow);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Play");
|
||||
ImGui::SetTooltip(_("Play"));
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
@ -1054,7 +1054,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
play();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Play from the beginning of this pattern");
|
||||
ImGui::SetTooltip(_("Play from the beginning of this pattern"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_STEP_FORWARD "##PlayRepeat")) {
|
||||
|
@ -1062,7 +1062,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
play();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Repeat from the beginning of this pattern");
|
||||
ImGui::SetTooltip(_("Repeat from the beginning of this pattern"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_ARROW_DOWN "##StepOne")) {
|
||||
|
@ -1070,7 +1070,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
pendingStepUpdate=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Step one row");
|
||||
ImGui::SetTooltip(_("Step one row"));
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
|
@ -1079,7 +1079,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
edit=!edit;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Edit");
|
||||
ImGui::SetTooltip(_("Edit"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
|
@ -1090,7 +1090,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
e->setMetronome(!metro);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Metronome");
|
||||
ImGui::SetTooltip(_("Metronome"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
|
@ -1101,18 +1101,18 @@ void FurnaceGUI::drawEditControls() {
|
|||
e->setRepeatPattern(!repeatPattern);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Repeat pattern");
|
||||
ImGui::SetTooltip(_("Repeat pattern"));
|
||||
}
|
||||
popToggleColors();
|
||||
|
||||
ImGui::SameLine();
|
||||
pushToggleColors(noteInputPoly);
|
||||
if (ImGui::Button(noteInputPoly?("Poly##PolyInput"):("Mono##PolyInput"))) {
|
||||
if (ImGui::Button(noteInputPoly?_("Poly##PolyInput"):_("Mono##PolyInput"))) {
|
||||
noteInputPoly=!noteInputPoly;
|
||||
e->setAutoNotePoly(noteInputPoly);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Polyphony");
|
||||
ImGui::SetTooltip(_("Polyphony"));
|
||||
}
|
||||
popToggleColors();
|
||||
}
|
||||
|
@ -1122,7 +1122,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
if (ImGui::Begin("Edit Controls",&editControlsOpen,globalWinFlags)) {
|
||||
ImGui::Columns(2);
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Octave");
|
||||
ImGui::Text(_("Octave"));
|
||||
ImGui::SameLine();
|
||||
float cursor=ImGui::GetCursorPosX();
|
||||
float avail=ImGui::GetContentRegionAvail().x;
|
||||
|
@ -1139,7 +1139,7 @@ void FurnaceGUI::drawEditControls() {
|
|||
}
|
||||
|
||||
ImGui::AlignTextToFramePadding();
|
||||
if (ImGui::SmallButton(changeCoarse?"Coarse":"Step")) {
|
||||
if (ImGui::SmallButton(changeCoarse?_("Coarse"):_("Step"))) {
|
||||
changeCoarse=!changeCoarse;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
@ -1166,8 +1166,8 @@ void FurnaceGUI::drawEditControls() {
|
|||
}
|
||||
ImGui::NextColumn();
|
||||
|
||||
unimportant(ImGui::Checkbox("Follow orders",&followOrders));
|
||||
unimportant(ImGui::Checkbox("Follow pattern",&followPattern));
|
||||
unimportant(ImGui::Checkbox(_("Follow orders"),&followOrders));
|
||||
unimportant(ImGui::Checkbox(_("Follow pattern"),&followPattern));
|
||||
}
|
||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_EDIT_CONTROLS;
|
||||
ImGui::End();
|
||||
|
|
|
@ -197,7 +197,7 @@ void FurnaceGUI::makeUndo(ActionType action, UndoRegion region) {
|
|||
|
||||
auto it=oldPatMap.find(id);
|
||||
if (it==oldPatMap.end()) {
|
||||
logW("no data in oldPatMap for channel %d!",i);
|
||||
logW(_("no data in oldPatMap for channel %d!"),i);
|
||||
continue;
|
||||
} else {
|
||||
op=it->second;
|
||||
|
@ -661,7 +661,7 @@ void FurnaceGUI::doPasteFurnace(PasteMode mode, int arg, bool readClipboard, Str
|
|||
}
|
||||
|
||||
if (invalidData) {
|
||||
logW("invalid clipboard data! failed at line %d char %d",i,charPos);
|
||||
logW(_("invalid clipboard data! failed at line %d char %d"),i,charPos);
|
||||
logW("%s",line.c_str());
|
||||
break;
|
||||
}
|
||||
|
@ -1200,7 +1200,7 @@ void FurnaceGUI::doPasteMPT(PasteMode mode, int arg, bool readClipboard, String
|
|||
|
||||
if (invalidData)
|
||||
{
|
||||
logW("invalid clipboard data! failed at line %d char %d",i,charPos);
|
||||
logW(_("invalid clipboard data! failed at line %d char %d"),i,charPos);
|
||||
logW("%s",line.c_str());
|
||||
break;
|
||||
}
|
||||
|
@ -1562,7 +1562,7 @@ void FurnaceGUI::doFlip() {
|
|||
void FurnaceGUI::doCollapse(int divider, const SelectionPoint& sStart, const SelectionPoint& sEnd) {
|
||||
if (divider<2) return;
|
||||
if (e->curSubSong->patLen<divider) {
|
||||
showError("can't collapse any further!");
|
||||
showError(_("can't collapse any further!"));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1666,7 +1666,7 @@ void FurnaceGUI::doExpand(int multiplier, const SelectionPoint& sStart, const Se
|
|||
void FurnaceGUI::doCollapseSong(int divider) {
|
||||
if (divider<2) return;
|
||||
if (e->curSubSong->patLen<divider) {
|
||||
showError("can't collapse any further!");
|
||||
showError(_("can't collapse any further!"));
|
||||
return;
|
||||
}
|
||||
finishSelection();
|
||||
|
@ -1746,7 +1746,7 @@ void FurnaceGUI::doCollapseSong(int divider) {
|
|||
void FurnaceGUI::doExpandSong(int multiplier) {
|
||||
if (multiplier<2) return;
|
||||
if (e->curSubSong->patLen>(256/multiplier)) {
|
||||
showError("can't expand any further!");
|
||||
showError(_("can't expand any further!"));
|
||||
return;
|
||||
}
|
||||
finishSelection();
|
||||
|
@ -1833,7 +1833,7 @@ void FurnaceGUI::doDrag() {
|
|||
// copy and clear
|
||||
String c=doCopy(true,false,dragStart,dragEnd);
|
||||
|
||||
logV("copy: %s",c);
|
||||
logV(_("copy: %s"),c);
|
||||
|
||||
// replace
|
||||
cursor=selStart;
|
||||
|
@ -1848,7 +1848,7 @@ void FurnaceGUI::moveSelected(int x, int y) {
|
|||
// copy and clear
|
||||
String c=doCopy(true,false,selStart,selEnd);
|
||||
|
||||
logV("copy: %s",c);
|
||||
logV(_("copy: %s"),c);
|
||||
|
||||
// replace
|
||||
selStart.xCoarse+=x;
|
||||
|
|
|
@ -15,23 +15,23 @@ void FurnaceGUI::drawEffectList() {
|
|||
float availB=ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing();
|
||||
if (availB>0) {
|
||||
ImGui::PushTextWrapPos(availB);
|
||||
ImGui::TextWrapped("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse]));
|
||||
ImGui::TextWrapped(_("Chip at cursor: %s"),e->getSystemName(e->sysOfChan[cursor.xCoarse]));
|
||||
ImGui::PopTextWrapPos();
|
||||
}
|
||||
effectSearch.Draw("Search");
|
||||
effectSearch.Draw(_("Search"));
|
||||
ImGui::SameLine();
|
||||
ImGui::Button(ICON_FA_BARS "##SortEffects");
|
||||
if (ImGui::BeginPopupContextItem("effectSort",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
ImGui::Text("Effect types to show:");
|
||||
ImGui::Text(_("Effect types to show:"));
|
||||
for (int i=1; i<10; i++) {
|
||||
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[i+GUI_COLOR_PATTERN_EFFECT_INVALID]);
|
||||
ImGui::Checkbox(fxColorsNames[i],&effectsShow[i]);
|
||||
ImGui::Checkbox(_(fxColorsNames[i]),&effectsShow[i]);
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
|
||||
if (ImGui::Button("All")) memset(effectsShow,1,sizeof(bool)*10);
|
||||
if (ImGui::Button(_("All"))) memset(effectsShow,1,sizeof(bool)*10);
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("None")) memset(effectsShow,0,sizeof(bool)*10);
|
||||
if (ImGui::Button(_("None"))) memset(effectsShow,0,sizeof(bool)*10);
|
||||
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
@ -42,9 +42,9 @@ void FurnaceGUI::drawEffectList() {
|
|||
|
||||
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Name");
|
||||
ImGui::Text(_("Name"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Description");
|
||||
ImGui::Text(_("Description"));
|
||||
|
||||
const char* prevName=NULL;
|
||||
for (int i=0; i<256; i++) {
|
||||
|
@ -81,7 +81,7 @@ void FurnaceGUI::drawEffectList() {
|
|||
if (strlen(name)>6) {
|
||||
ImGui::TextWrapped("%s",&name[6]);
|
||||
} else {
|
||||
ImGui::Text("ERROR");
|
||||
ImGui::Text(_("ERROR"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,68 +26,68 @@
|
|||
void FurnaceGUI::drawExportAudio(bool onWindow) {
|
||||
exitDisabledTimer=1;
|
||||
|
||||
ImGui::Text("Export type:");
|
||||
ImGui::Text(_("Export type:"));
|
||||
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("one file",audioExportOptions.mode==DIV_EXPORT_MODE_ONE)) {
|
||||
if (ImGui::RadioButton(_("one file"),audioExportOptions.mode==DIV_EXPORT_MODE_ONE)) {
|
||||
audioExportOptions.mode=DIV_EXPORT_MODE_ONE;
|
||||
}
|
||||
if (ImGui::RadioButton("multiple files (one per chip)",audioExportOptions.mode==DIV_EXPORT_MODE_MANY_SYS)) {
|
||||
if (ImGui::RadioButton(_("multiple files (one per chip)"),audioExportOptions.mode==DIV_EXPORT_MODE_MANY_SYS)) {
|
||||
audioExportOptions.mode=DIV_EXPORT_MODE_MANY_SYS;
|
||||
}
|
||||
if (ImGui::RadioButton("multiple files (one per channel)",audioExportOptions.mode==DIV_EXPORT_MODE_MANY_CHAN)) {
|
||||
if (ImGui::RadioButton(_("multiple files (one per channel)"),audioExportOptions.mode==DIV_EXPORT_MODE_MANY_CHAN)) {
|
||||
audioExportOptions.mode=DIV_EXPORT_MODE_MANY_CHAN;
|
||||
}
|
||||
ImGui::Unindent();
|
||||
|
||||
if (audioExportOptions.mode!=DIV_EXPORT_MODE_MANY_SYS) {
|
||||
ImGui::Text("Bit depth:");
|
||||
ImGui::Text(_("Bit depth:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("16-bit integer",audioExportOptions.format==DIV_EXPORT_FORMAT_S16)) {
|
||||
if (ImGui::RadioButton(_("16-bit integer"),audioExportOptions.format==DIV_EXPORT_FORMAT_S16)) {
|
||||
audioExportOptions.format=DIV_EXPORT_FORMAT_S16;
|
||||
}
|
||||
if (ImGui::RadioButton("32-bit float",audioExportOptions.format==DIV_EXPORT_FORMAT_F32)) {
|
||||
if (ImGui::RadioButton(_("32-bit float"),audioExportOptions.format==DIV_EXPORT_FORMAT_F32)) {
|
||||
audioExportOptions.format=DIV_EXPORT_FORMAT_F32;
|
||||
}
|
||||
ImGui::Unindent();
|
||||
}
|
||||
|
||||
if (ImGui::InputInt("Sample rate",&audioExportOptions.sampleRate,100,10000)) {
|
||||
if (ImGui::InputInt(_("Sample rate"),&audioExportOptions.sampleRate,100,10000)) {
|
||||
if (audioExportOptions.sampleRate<8000) audioExportOptions.sampleRate=8000;
|
||||
if (audioExportOptions.sampleRate>384000) audioExportOptions.sampleRate=384000;
|
||||
}
|
||||
|
||||
if (audioExportOptions.mode!=DIV_EXPORT_MODE_MANY_SYS) {
|
||||
if (ImGui::InputInt("Channels in file",&audioExportOptions.chans,1,1)) {
|
||||
if (ImGui::InputInt(_("Channels in file"),&audioExportOptions.chans,1,1)) {
|
||||
if (audioExportOptions.chans<1) audioExportOptions.chans=1;
|
||||
if (audioExportOptions.chans>16) audioExportOptions.chans=16;
|
||||
}
|
||||
}
|
||||
|
||||
if (ImGui::InputInt("Loops",&audioExportOptions.loops,1,2)) {
|
||||
if (ImGui::InputInt(_("Loops"),&audioExportOptions.loops,1,2)) {
|
||||
if (audioExportOptions.loops<0) audioExportOptions.loops=0;
|
||||
}
|
||||
if (ImGui::InputDouble("Fade out (seconds)",&audioExportOptions.fadeOut,1.0,2.0,"%.1f")) {
|
||||
if (ImGui::InputDouble(_("Fade out (seconds)"),&audioExportOptions.fadeOut,1.0,2.0,"%.1f")) {
|
||||
if (audioExportOptions.fadeOut<0.0) audioExportOptions.fadeOut=0.0;
|
||||
}
|
||||
|
||||
bool isOneOn=false;
|
||||
if (audioExportOptions.mode==DIV_EXPORT_MODE_MANY_CHAN) {
|
||||
ImGui::Text("Channels to export:");
|
||||
ImGui::Text(_("Channels to export:"));
|
||||
ImGui::SameLine();
|
||||
if (ImGui::SmallButton("All")) {
|
||||
if (ImGui::SmallButton(_("All"))) {
|
||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||
audioExportOptions.channelMask[i]=true;
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::SmallButton("None")) {
|
||||
if (ImGui::SmallButton(_("None"))) {
|
||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||
audioExportOptions.channelMask[i]=false;
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::SmallButton("Invert")) {
|
||||
if (ImGui::SmallButton(_("Invert"))) {
|
||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||
audioExportOptions.channelMask[i]=!audioExportOptions.channelMask[i];
|
||||
}
|
||||
|
@ -107,12 +107,12 @@ void FurnaceGUI::drawExportAudio(bool onWindow) {
|
|||
|
||||
if (onWindow) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
if (ImGui::Button(_("Cancel"),ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
|
||||
if (isOneOn) {
|
||||
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
|
||||
if (ImGui::Button(_("Export"),ImVec2(200.0f*dpiScale,0))) {
|
||||
switch (audioExportOptions.mode) {
|
||||
case DIV_EXPORT_MODE_ONE:
|
||||
openFileDialog(GUI_FILE_EXPORT_AUDIO_ONE);
|
||||
|
@ -127,15 +127,15 @@ void FurnaceGUI::drawExportAudio(bool onWindow) {
|
|||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
} else {
|
||||
ImGui::Text("select at least one channel");
|
||||
ImGui::Text(_("select at least one channel"));
|
||||
}
|
||||
}
|
||||
|
||||
void FurnaceGUI::drawExportVGM(bool onWindow) {
|
||||
exitDisabledTimer=1;
|
||||
|
||||
ImGui::Text("settings:");
|
||||
if (ImGui::BeginCombo("format version",fmt::sprintf("%d.%.2x",vgmExportVersion>>8,vgmExportVersion&0xff).c_str())) {
|
||||
ImGui::Text(_("settings:"));
|
||||
if (ImGui::BeginCombo(_("format version"),fmt::sprintf("%d.%.2x",vgmExportVersion>>8,vgmExportVersion&0xff).c_str())) {
|
||||
for (int i=0; i<7; i++) {
|
||||
if (ImGui::Selectable(fmt::sprintf("%d.%.2x",vgmVersions[i]>>8,vgmVersions[i]&0xff).c_str(),vgmExportVersion==vgmVersions[i])) {
|
||||
vgmExportVersion=vgmVersions[i];
|
||||
|
@ -143,17 +143,17 @@ void FurnaceGUI::drawExportVGM(bool onWindow) {
|
|||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
ImGui::Checkbox("loop",&vgmExportLoop);
|
||||
ImGui::Checkbox(_("loop"),&vgmExportLoop);
|
||||
if (vgmExportLoop && e->song.loopModality==2) {
|
||||
ImGui::Text("loop trail:");
|
||||
ImGui::Text(_("loop trail:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("auto-detect",vgmExportTrailingTicks==-1)) {
|
||||
if (ImGui::RadioButton(_("auto-detect"),vgmExportTrailingTicks==-1)) {
|
||||
vgmExportTrailingTicks=-1;
|
||||
}
|
||||
if (ImGui::RadioButton("add one loop",vgmExportTrailingTicks==-2)) {
|
||||
if (ImGui::RadioButton(_("add one loop"),vgmExportTrailingTicks==-2)) {
|
||||
vgmExportTrailingTicks=-2;
|
||||
}
|
||||
if (ImGui::RadioButton("custom",vgmExportTrailingTicks>=0)) {
|
||||
if (ImGui::RadioButton(_("custom"),vgmExportTrailingTicks>=0)) {
|
||||
vgmExportTrailingTicks=0;
|
||||
}
|
||||
if (vgmExportTrailingTicks>=0) {
|
||||
|
@ -164,9 +164,9 @@ void FurnaceGUI::drawExportVGM(bool onWindow) {
|
|||
}
|
||||
ImGui::Unindent();
|
||||
}
|
||||
ImGui::Checkbox("add pattern change hints",&vgmExportPatternHints);
|
||||
ImGui::Checkbox(_("add pattern change hints"),&vgmExportPatternHints);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
ImGui::SetTooltip(_(
|
||||
"inserts data blocks on pattern changes.\n"
|
||||
"useful if you are writing a playback routine.\n\n"
|
||||
|
||||
|
@ -178,17 +178,17 @@ void FurnaceGUI::drawExportVGM(bool onWindow) {
|
|||
"- pp: pattern index (one per channel)\n\n"
|
||||
|
||||
"pattern indexes are ordered as they appear in the song."
|
||||
);
|
||||
));
|
||||
}
|
||||
ImGui::Checkbox("direct stream mode",&vgmExportDirectStream);
|
||||
ImGui::Checkbox(_("direct stream mode"),&vgmExportDirectStream);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
ImGui::SetTooltip(_(
|
||||
"required for DualPCM and MSM6258 export.\n\n"
|
||||
"allows for volume/direction changes when playing samples,\n"
|
||||
"at the cost of a massive increase in file size."
|
||||
);
|
||||
));
|
||||
}
|
||||
ImGui::Text("chips to export:");
|
||||
ImGui::Text(_("chips to export:"));
|
||||
bool hasOneAtLeast=false;
|
||||
for (int i=0; i<e->song.systemLen; i++) {
|
||||
int minVersion=e->minVGMVersion(e->song.system[i]);
|
||||
|
@ -197,32 +197,32 @@ void FurnaceGUI::drawExportVGM(bool onWindow) {
|
|||
ImGui::EndDisabled();
|
||||
if (minVersion>vgmExportVersion) {
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) {
|
||||
ImGui::SetTooltip("this chip is only available in VGM %d.%.2x and higher!",minVersion>>8,minVersion&0xff);
|
||||
ImGui::SetTooltip(_("this chip is only available in VGM %d.%.2x and higher!"),minVersion>>8,minVersion&0xff);
|
||||
}
|
||||
} else if (minVersion==0) {
|
||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) {
|
||||
ImGui::SetTooltip("this chip is not supported by the VGM format!");
|
||||
ImGui::SetTooltip(_("this chip is not supported by the VGM format!"));
|
||||
}
|
||||
} else {
|
||||
if (willExport[i]) hasOneAtLeast=true;
|
||||
}
|
||||
}
|
||||
ImGui::Text("select the chip you wish to export, but only up to %d of each type.",(vgmExportVersion>=0x151)?2:1);
|
||||
ImGui::Text(_("select the chip you wish to export, but only up to %d of each type."),(vgmExportVersion>=0x151)?2:1);
|
||||
if (hasOneAtLeast) {
|
||||
if (onWindow) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
if (ImGui::Button(_("Cancel"),ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
|
||||
if (ImGui::Button(_("Export"),ImVec2(200.0f*dpiScale,0))) {
|
||||
openFileDialog(GUI_FILE_EXPORT_VGM);
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
} else {
|
||||
ImGui::Text("nothing to export");
|
||||
ImGui::Text(_("nothing to export"));
|
||||
if (onWindow) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::Button("Cancel",ImVec2(400.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
if (ImGui::Button(_("Cancel"),ImVec2(400.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -230,20 +230,20 @@ void FurnaceGUI::drawExportVGM(bool onWindow) {
|
|||
void FurnaceGUI::drawExportZSM(bool onWindow) {
|
||||
exitDisabledTimer=1;
|
||||
|
||||
ImGui::Text("Commander X16 Zsound Music File");
|
||||
if (ImGui::InputInt("Tick Rate (Hz)",&zsmExportTickRate,1,2)) {
|
||||
ImGui::Text(_("Commander X16 Zsound Music File"));
|
||||
if (ImGui::InputInt(_("Tick Rate (Hz)"),&zsmExportTickRate,1,2)) {
|
||||
if (zsmExportTickRate<1) zsmExportTickRate=1;
|
||||
if (zsmExportTickRate>44100) zsmExportTickRate=44100;
|
||||
}
|
||||
ImGui::Checkbox("loop",&zsmExportLoop);
|
||||
ImGui::Checkbox(_("loop"),&zsmExportLoop);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("optimize size",&zsmExportOptimize);
|
||||
ImGui::Checkbox(_("optimize size"),&zsmExportOptimize);
|
||||
if (onWindow) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
if (ImGui::Button(_("Cancel"),ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
|
||||
if (ImGui::Button(_("Export"),ImVec2(200.0f*dpiScale,0))) {
|
||||
openFileDialog(GUI_FILE_EXPORT_ZSM);
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
@ -252,21 +252,21 @@ void FurnaceGUI::drawExportZSM(bool onWindow) {
|
|||
void FurnaceGUI::drawExportAmigaVal(bool onWindow) {
|
||||
exitDisabledTimer=1;
|
||||
|
||||
ImGui::Text(
|
||||
ImGui::Text(_(
|
||||
"this is NOT ROM export! only use for making sure the\n"
|
||||
"Furnace Amiga emulator is working properly by\n"
|
||||
"comparing it with real Amiga output."
|
||||
);
|
||||
));
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Directory");
|
||||
ImGui::Text(_("Directory"));
|
||||
ImGui::SameLine();
|
||||
ImGui::InputText("##AVDPath",&workingDirROMExport);
|
||||
if (onWindow) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
if (ImGui::Button(_("Cancel"),ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
if (ImGui::Button("Bake Data",ImVec2(200.0f*dpiScale,0))) {
|
||||
if (ImGui::Button(_("Bake Data"),ImVec2(200.0f*dpiScale,0))) {
|
||||
std::vector<DivROMExportOutput> out=e->buildROM(DIV_ROM_AMIGA_VALIDATION);
|
||||
if (workingDirROMExport.size()>0) {
|
||||
if (workingDirROMExport[workingDirROMExport.size()-1]!=DIR_SEPARATOR) workingDirROMExport+=DIR_SEPARATOR_STR;
|
||||
|
@ -281,7 +281,7 @@ void FurnaceGUI::drawExportAmigaVal(bool onWindow) {
|
|||
i.data->finish();
|
||||
delete i.data;
|
||||
}
|
||||
showError(fmt::sprintf("Done! Baked %d files.",(int)out.size()));
|
||||
showError(fmt::sprintf(_("Done! Baked %d files."),(int)out.size()));
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
}
|
||||
|
@ -290,14 +290,14 @@ void FurnaceGUI::drawExportText(bool onWindow) {
|
|||
exitDisabledTimer=1;
|
||||
|
||||
ImGui::Text(
|
||||
"this option exports the song to a text file.\n"
|
||||
_("this option exports the song to a text file.\n")
|
||||
);
|
||||
if (onWindow) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
if (ImGui::Button(_("Cancel"),ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
|
||||
if (ImGui::Button(_("Export"),ImVec2(200.0f*dpiScale,0))) {
|
||||
openFileDialog(GUI_FILE_EXPORT_TEXT);
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
@ -306,19 +306,19 @@ void FurnaceGUI::drawExportText(bool onWindow) {
|
|||
void FurnaceGUI::drawExportCommand(bool onWindow) {
|
||||
exitDisabledTimer=1;
|
||||
|
||||
ImGui::Text(
|
||||
ImGui::Text(_(
|
||||
"this option exports a text or binary file which\n"
|
||||
"contains a dump of the internal command stream\n"
|
||||
"produced when playing the song.\n\n"
|
||||
|
||||
"technical/development use only!"
|
||||
);
|
||||
));
|
||||
if (onWindow) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
if (ImGui::Button(_("Cancel"),ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
|
||||
if (ImGui::Button(_("Export"),ImVec2(200.0f*dpiScale,0))) {
|
||||
openFileDialog(GUI_FILE_EXPORT_CMDSTREAM);
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
@ -327,21 +327,21 @@ void FurnaceGUI::drawExportCommand(bool onWindow) {
|
|||
void FurnaceGUI::drawExportDMF(bool onWindow) {
|
||||
exitDisabledTimer=1;
|
||||
|
||||
ImGui::Text(
|
||||
ImGui::Text(_(
|
||||
"export in DefleMask module format.\n"
|
||||
"only do it if you really, really need to, or are downgrading an existing .dmf."
|
||||
);
|
||||
));
|
||||
|
||||
ImGui::Text("format version:");
|
||||
ImGui::RadioButton("1.1.3 and higher",&dmfExportVersion,0);
|
||||
ImGui::RadioButton("1.0/legacy (0.12)",&dmfExportVersion,1);
|
||||
ImGui::Text(_("format version:"));
|
||||
ImGui::RadioButton(_("1.1.3 and higher"),&dmfExportVersion,0);
|
||||
ImGui::RadioButton(_("1.0/legacy (0.12)"),&dmfExportVersion,1);
|
||||
|
||||
if (onWindow) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::Button("Cancel",ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
if (ImGui::Button(_("Cancel"),ImVec2(200.0f*dpiScale,0))) ImGui::CloseCurrentPopup();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
if (ImGui::Button("Export",ImVec2(200.0f*dpiScale,0))) {
|
||||
if (ImGui::Button(_("Export"),ImVec2(200.0f*dpiScale,0))) {
|
||||
if (dmfExportVersion==1) {
|
||||
openFileDialog(GUI_FILE_SAVE_DMF_LEGACY);
|
||||
} else {
|
||||
|
@ -354,11 +354,11 @@ void FurnaceGUI::drawExportDMF(bool onWindow) {
|
|||
void FurnaceGUI::drawExport() {
|
||||
if (settings.exportOptionsLayout==1 || curExportType==GUI_EXPORT_NONE) {
|
||||
if (ImGui::BeginTabBar("ExportTypes")) {
|
||||
if (ImGui::BeginTabItem("Audio")) {
|
||||
if (ImGui::BeginTabItem(_("Audio"))) {
|
||||
drawExportAudio(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("VGM")) {
|
||||
if (ImGui::BeginTabItem(_("VGM"))) {
|
||||
drawExportVGM(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
|
@ -367,7 +367,7 @@ void FurnaceGUI::drawExport() {
|
|||
if ((e->song.system[i]==DIV_SYSTEM_VERA) || (e->song.system[i]==DIV_SYSTEM_YM2151)) numZSMCompat++;
|
||||
}
|
||||
if (numZSMCompat>0) {
|
||||
if (ImGui::BeginTabItem("ZSM")) {
|
||||
if (ImGui::BeginTabItem(_("ZSM"))) {
|
||||
drawExportZSM(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
|
@ -377,20 +377,20 @@ void FurnaceGUI::drawExport() {
|
|||
if (e->song.system[i]==DIV_SYSTEM_AMIGA) numAmiga++;
|
||||
}
|
||||
if (numAmiga && settings.iCannotWait) {
|
||||
if (ImGui::BeginTabItem("Amiga Validation")) {
|
||||
if (ImGui::BeginTabItem(_("Amiga Validation"))) {
|
||||
drawExportAmigaVal(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
}
|
||||
if (ImGui::BeginTabItem("Text")) {
|
||||
if (ImGui::BeginTabItem(_("Text"))) {
|
||||
drawExportText(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Command Stream")) {
|
||||
if (ImGui::BeginTabItem(_("Command Stream"))) {
|
||||
drawExportCommand(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("DMF")) {
|
||||
if (ImGui::BeginTabItem(_("DMF"))) {
|
||||
drawExportDMF(true);
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
|
@ -419,39 +419,39 @@ void FurnaceGUI::drawExport() {
|
|||
drawExportDMF(true);
|
||||
break;
|
||||
default:
|
||||
ImGui::Text("congratulations! you've unlocked a secret panel.");
|
||||
if (ImGui::Button("Toggle hidden systems")) {
|
||||
ImGui::Text(_("congratulations! you've unlocked a secret panel."));
|
||||
if (ImGui::Button(_("Toggle hidden systems"))) {
|
||||
settings.hiddenSystems=!settings.hiddenSystems;
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
if (ImGui::Button("Toggle all instrument types")) {
|
||||
if (ImGui::Button(_("Toggle all instrument types"))) {
|
||||
settings.displayAllInsTypes=!settings.displayAllInsTypes;
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
if (ImGui::Button("Set pitch linearity to Partial")) {
|
||||
if (ImGui::Button(_("Set pitch linearity to Partial"))) {
|
||||
e->song.linearPitch=1;
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
if (ImGui::Button("Enable multi-threading settings")) {
|
||||
if (ImGui::Button(_("Enable multi-threading settings"))) {
|
||||
settings.showPool=1;
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
if (ImGui::Button("Set fat to max")) {
|
||||
if (ImGui::Button(_("Set fat to max"))) {
|
||||
ImGuiStyle& sty=ImGui::GetStyle();
|
||||
sty.FramePadding=ImVec2(20.0f*dpiScale,20.0f*dpiScale);
|
||||
sty.ItemSpacing=ImVec2(10.0f*dpiScale,10.0f*dpiScale);
|
||||
sty.ItemInnerSpacing=ImVec2(10.0f*dpiScale,10.0f*dpiScale);
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
if (ImGui::Button("Set muscle and fat to zero")) {
|
||||
if (ImGui::Button(_("Set muscle and fat to zero"))) {
|
||||
ImGuiStyle& sty=ImGui::GetStyle();
|
||||
sty.FramePadding=ImVec2(0,0);
|
||||
sty.ItemSpacing=ImVec2(0,0);
|
||||
sty.ItemInnerSpacing=ImVec2(0,0);
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
if (ImGui::Button("Tell tildearrow this must be a mistake")) {
|
||||
showError("yeah, it's a bug. write a bug report in the GitHub page and tell me how did you get here.");
|
||||
if (ImGui::Button(_("Tell tildearrow this must be a mistake"))) {
|
||||
showError(_("yeah, it's a bug. write a bug report in the GitHub page and tell me how did you get here."));
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -26,21 +26,21 @@
|
|||
#include "../ta-log.h"
|
||||
|
||||
const char* queryModes[GUI_QUERY_MAX]={
|
||||
"ignore",
|
||||
"equals",
|
||||
"not equal",
|
||||
"between",
|
||||
"not between",
|
||||
"any",
|
||||
"none"
|
||||
_N("ignore"),
|
||||
_N("equals"),
|
||||
_N("not equal"),
|
||||
_N("between"),
|
||||
_N("not between"),
|
||||
_N("any"),
|
||||
_N("none")
|
||||
};
|
||||
|
||||
const char* queryReplaceModes[GUI_QUERY_REPLACE_MAX]={
|
||||
"set",
|
||||
"add",
|
||||
"add (overflow)",
|
||||
"scale %",
|
||||
"clear"
|
||||
_N("set"),
|
||||
_N("add"),
|
||||
_N("add (overflow)"),
|
||||
_N("scale %"),
|
||||
_N("clear")
|
||||
};
|
||||
|
||||
int queryNote(int note, int octave) {
|
||||
|
@ -517,14 +517,14 @@ void FurnaceGUI::drawFindReplace() {
|
|||
int eraseIndex=-1;
|
||||
char tempID[1024];
|
||||
if (ImGui::BeginTabBar("FindOrReplace")) {
|
||||
if (ImGui::BeginTabItem("Find")) {
|
||||
if (ImGui::BeginTabItem(_("Find"))) {
|
||||
if (queryViewingResults) {
|
||||
if (!curQueryResults.empty()) {
|
||||
ImVec2 avail=ImGui::GetContentRegionAvail();
|
||||
avail.y-=ImGui::GetFrameHeightWithSpacing();
|
||||
if (ImGui::BeginTable("FindResults",4,ImGuiTableFlags_Borders|ImGuiTableFlags_ScrollY,avail)) {
|
||||
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize("order").x);
|
||||
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize("row").x);
|
||||
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize(_("order")).x);
|
||||
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,ImGui::CalcTextSize(_("row")).x);
|
||||
ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch);
|
||||
ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthFixed);
|
||||
|
||||
|
@ -532,13 +532,13 @@ void FurnaceGUI::drawFindReplace() {
|
|||
|
||||
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("order");
|
||||
ImGui::Text(_("order"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("row");
|
||||
ImGui::Text(_("row"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("channel");
|
||||
ImGui::Text(_("channel"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("go");
|
||||
ImGui::Text(_("go"));
|
||||
|
||||
int index=0;
|
||||
for (FurnaceGUIQueryResult& i: curQueryResults) {
|
||||
|
@ -582,9 +582,9 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::EndTable();
|
||||
}
|
||||
} else {
|
||||
ImGui::Text("no matches found!");
|
||||
ImGui::Text(_("no matches found!"));
|
||||
}
|
||||
if (ImGui::Button("Back")) {
|
||||
if (ImGui::Button(_("Back"))) {
|
||||
queryViewingResults=false;
|
||||
}
|
||||
} else {
|
||||
|
@ -598,7 +598,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Note");
|
||||
ImGui::Text(_("Note"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
ImGui::Combo("##NCondition",&i.noteMode,queryModes,GUI_QUERY_MAX);
|
||||
|
@ -666,7 +666,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Ins");
|
||||
ImGui::Text(_("Ins"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
ImGui::Combo("##ICondition",&i.insMode,queryModes,GUI_QUERY_MAX);
|
||||
|
@ -684,7 +684,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Volume");
|
||||
ImGui::Text(_("Volume"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
ImGui::Combo("##VCondition",&i.volMode,queryModes,GUI_QUERY_MAX);
|
||||
|
@ -704,7 +704,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Effect");
|
||||
ImGui::Text(_("Effect"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
ImGui::Combo("##ECondition",&i.effectMode[j],queryModes,GUI_QUERY_MAX);
|
||||
|
@ -722,7 +722,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Value");
|
||||
ImGui::Text(_("Value"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
ImGui::Combo("##EVCondition",&i.effectValMode[j],queryModes,GUI_QUERY_MAX);
|
||||
|
@ -747,18 +747,18 @@ void FurnaceGUI::drawFindReplace() {
|
|||
}
|
||||
popDestColor();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Delete query");
|
||||
ImGui::SetTooltip(_("Delete query"));
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (i.effectCount<8) {
|
||||
if (ImGui::Button("Add effect")) {
|
||||
if (ImGui::Button(_("Add effect"))) {
|
||||
i.effectCount++;
|
||||
}
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (i.effectCount>0) {
|
||||
pushDestColor();
|
||||
if (ImGui::Button("Remove effect")) {
|
||||
if (ImGui::Button(_("Remove effect"))) {
|
||||
i.effectCount--;
|
||||
}
|
||||
popDestColor();
|
||||
|
@ -783,24 +783,24 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
|
||||
ImGui::Text("Search range:");
|
||||
ImGui::Text(_("Search range:"));
|
||||
|
||||
if (ImGui::RadioButton("Song",curQueryRangeY==0)) {
|
||||
if (ImGui::RadioButton(_("Song"),curQueryRangeY==0)) {
|
||||
curQueryRangeY=0;
|
||||
}
|
||||
if (ImGui::RadioButton("Selection",curQueryRangeY==1)) {
|
||||
if (ImGui::RadioButton(_("Selection"),curQueryRangeY==1)) {
|
||||
curQueryRangeY=1;
|
||||
}
|
||||
if (ImGui::RadioButton("Pattern",curQueryRangeY==2)) {
|
||||
if (ImGui::RadioButton(_("Pattern"),curQueryRangeY==2)) {
|
||||
curQueryRangeY=2;
|
||||
}
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Confine to channels",&curQueryRangeX);
|
||||
ImGui::Checkbox(_("Confine to channels"),&curQueryRangeX);
|
||||
|
||||
ImGui::BeginDisabled(!curQueryRangeX);
|
||||
snprintf(tempID,1024,"%d: %s",curQueryRangeXMin+1,e->getChannelName(curQueryRangeXMin));
|
||||
if (ImGui::BeginCombo("From",tempID)) {
|
||||
if (ImGui::BeginCombo(_("From"),tempID)) {
|
||||
for (int i=0; i<e->getTotalChannelCount(); i++) {
|
||||
snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i));
|
||||
if (ImGui::Selectable(tempID,curQueryRangeXMin==i)) {
|
||||
|
@ -811,7 +811,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
}
|
||||
|
||||
snprintf(tempID,1024,"%d: %s",curQueryRangeXMax+1,e->getChannelName(curQueryRangeXMax));
|
||||
if (ImGui::BeginCombo("To",tempID)) {
|
||||
if (ImGui::BeginCombo(_("To"),tempID)) {
|
||||
for (int i=0; i<e->getTotalChannelCount(); i++) {
|
||||
snprintf(tempID,1024,"%d: %s",i+1,e->getChannelName(i));
|
||||
if (ImGui::Selectable(tempID,curQueryRangeXMax==i)) {
|
||||
|
@ -823,37 +823,37 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::EndDisabled();
|
||||
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Match effect position:");
|
||||
ImGui::Text(_("Match effect position:"));
|
||||
|
||||
if (ImGui::RadioButton("No",curQueryEffectPos==0)) {
|
||||
if (ImGui::RadioButton(_("No"),curQueryEffectPos==0)) {
|
||||
curQueryEffectPos=0;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("match effects regardless of position.");
|
||||
ImGui::SetTooltip(_("match effects regardless of position."));
|
||||
}
|
||||
if (ImGui::RadioButton("Lax",curQueryEffectPos==1)) {
|
||||
if (ImGui::RadioButton(_("Lax"),curQueryEffectPos==1)) {
|
||||
curQueryEffectPos=1;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("match effects only if they appear in-order.");
|
||||
ImGui::SetTooltip(_("match effects only if they appear in-order."));
|
||||
}
|
||||
if (ImGui::RadioButton("Strict",curQueryEffectPos==2)) {
|
||||
if (ImGui::RadioButton(_("Strict"),curQueryEffectPos==2)) {
|
||||
curQueryEffectPos=2;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("match effects only if they appear exactly as specified.");
|
||||
ImGui::SetTooltip(_("match effects only if they appear exactly as specified."));
|
||||
}
|
||||
|
||||
ImGui::EndTable();
|
||||
}
|
||||
|
||||
if (ImGui::Button("Find")) {
|
||||
if (ImGui::Button(_("Find"))) {
|
||||
doFind();
|
||||
}
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Replace")) {
|
||||
if (ImGui::BeginTabItem(_("Replace"))) {
|
||||
if (ImGui::BeginTable("QueryReplace",3,ImGuiTableFlags_BordersOuter)) {
|
||||
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
|
||||
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.5);
|
||||
|
@ -861,7 +861,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Note",&queryReplaceNoteDo);
|
||||
ImGui::Checkbox(_("Note"),&queryReplaceNoteDo);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::BeginDisabled(!queryReplaceNoteDo);
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
|
@ -905,13 +905,13 @@ void FurnaceGUI::drawFindReplace() {
|
|||
if (queryReplaceNote>180) queryReplaceNote=180;
|
||||
}
|
||||
} else if (queryReplaceNoteMode==GUI_QUERY_REPLACE_SCALE) {
|
||||
ImGui::Text("INVALID");
|
||||
ImGui::Text(_("INVALID"));
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Ins",&queryReplaceInsDo);
|
||||
ImGui::Checkbox(_("Ins"),&queryReplaceInsDo);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::BeginDisabled(!queryReplaceInsDo);
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
|
@ -940,7 +940,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Volume",&queryReplaceVolDo);
|
||||
ImGui::Checkbox(_("Volume"),&queryReplaceVolDo);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::BeginDisabled(!queryReplaceVolDo);
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
|
@ -971,7 +971,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::PushID(0x100+i);
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Effect",&queryReplaceEffectDo[i]);
|
||||
ImGui::Checkbox(_("Effect"),&queryReplaceEffectDo[i]);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::BeginDisabled(!queryReplaceEffectDo[i]);
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
|
@ -1000,7 +1000,7 @@ void FurnaceGUI::drawFindReplace() {
|
|||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Value",&queryReplaceEffectValDo[i]);
|
||||
ImGui::Checkbox(_("Value"),&queryReplaceEffectValDo[i]);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::BeginDisabled(!queryReplaceEffectValDo[i]);
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
|
@ -1034,14 +1034,14 @@ void FurnaceGUI::drawFindReplace() {
|
|||
ImGui::TableNextColumn();
|
||||
ImGui::TableNextColumn();
|
||||
if (queryReplaceEffectCount<8) {
|
||||
if (ImGui::Button("Add effect")) {
|
||||
if (ImGui::Button(_("Add effect"))) {
|
||||
queryReplaceEffectCount++;
|
||||
}
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (queryReplaceEffectCount>0) {
|
||||
pushDestColor();
|
||||
if (ImGui::Button("Remove effect")) {
|
||||
if (ImGui::Button(_("Remove effect"))) {
|
||||
queryReplaceEffectCount--;
|
||||
}
|
||||
popDestColor();
|
||||
|
@ -1049,20 +1049,20 @@ void FurnaceGUI::drawFindReplace() {
|
|||
|
||||
ImGui::EndTable();
|
||||
}
|
||||
ImGui::Text("Effect replace mode:");
|
||||
if (ImGui::RadioButton("Replace matches only",queryReplaceEffectPos==1)) {
|
||||
ImGui::Text(_("Effect replace mode:"));
|
||||
if (ImGui::RadioButton(_("Replace matches only"),queryReplaceEffectPos==1)) {
|
||||
queryReplaceEffectPos=1;
|
||||
}
|
||||
if (ImGui::RadioButton("Replace matches, then free spaces",queryReplaceEffectPos==2)) {
|
||||
if (ImGui::RadioButton(_("Replace matches, then free spaces"),queryReplaceEffectPos==2)) {
|
||||
queryReplaceEffectPos=2;
|
||||
}
|
||||
if (ImGui::RadioButton("Clear effects",queryReplaceEffectPos==0)) {
|
||||
if (ImGui::RadioButton(_("Clear effects"),queryReplaceEffectPos==0)) {
|
||||
queryReplaceEffectPos=0;
|
||||
}
|
||||
if (ImGui::RadioButton("Insert in free spaces",queryReplaceEffectPos==3)) {
|
||||
if (ImGui::RadioButton(_("Insert in free spaces"),queryReplaceEffectPos==3)) {
|
||||
queryReplaceEffectPos=3;
|
||||
}
|
||||
if (ImGui::Button("Replace##QueryReplace")) {
|
||||
if (ImGui::Button(_("Replace##QueryReplace"))) {
|
||||
doReplace();
|
||||
}
|
||||
ImGui::EndTabItem();
|
||||
|
|
|
@ -35,7 +35,7 @@ void FurnaceGUI::drawGrooves() {
|
|||
if (ImGui::Begin("Grooves",&groovesOpen,globalWinFlags)) {
|
||||
int delGroove=-1;
|
||||
|
||||
ImGui::Text("use effect 09xx to select a groove pattern.");
|
||||
ImGui::Text(_("use effect 09xx to select a groove pattern."));
|
||||
if (!e->song.grooves.empty()) if (ImGui::BeginTable("GrooveList",3,ImGuiTableFlags_Borders)) {
|
||||
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed);
|
||||
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch);
|
||||
|
@ -45,7 +45,7 @@ void FurnaceGUI::drawGrooves() {
|
|||
ImGui::TableNextColumn();
|
||||
ImGui::Text("#");
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("pattern");
|
||||
ImGui::Text(_("pattern"));
|
||||
ImGui::TableNextColumn();
|
||||
// ImGui::Text("remove"); removed because the text clips from the fixed width
|
||||
|
||||
|
@ -129,7 +129,7 @@ void FurnaceGUI::drawGrooves() {
|
|||
}
|
||||
popDestColor();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("remove");
|
||||
ImGui::SetTooltip(_("remove"));
|
||||
}
|
||||
|
||||
index++;
|
||||
|
|
1002
src/gui/gui.cpp
1002
src/gui/gui.cpp
File diff suppressed because it is too large
Load diff
|
@ -124,7 +124,7 @@ const char* insTypes[DIV_INS_MAX+1][3]={
|
|||
{"FM (OPN)",ICON_FA_AREA_CHART,ICON_FUR_INS_FM},
|
||||
{"Game Boy",ICON_FA_GAMEPAD,ICON_FUR_INS_GB},
|
||||
{"C64",ICON_FA_KEYBOARD_O,ICON_FUR_INS_C64},
|
||||
{"Generic Sample",ICON_FA_VOLUME_UP,ICON_FUR_INS_AMIGA},
|
||||
{_N("Generic Sample"),ICON_FA_VOLUME_UP,ICON_FUR_INS_AMIGA},
|
||||
{"PC Engine",ICON_FA_ID_BADGE,ICON_FUR_INS_PCE},
|
||||
{"AY-3-8910/SSG",ICON_FA_BAR_CHART,ICON_FUR_INS_AY},
|
||||
{"AY8930",ICON_FA_BAR_CHART,ICON_FUR_INS_AY8930},
|
||||
|
@ -146,13 +146,13 @@ const char* insTypes[DIV_INS_MAX+1][3]={
|
|||
{"Atari Lynx",ICON_FA_BAR_CHART,ICON_FUR_INS_MIKEY},
|
||||
{"VERA",ICON_FA_KEYBOARD_O,ICON_FUR_INS_VERA},
|
||||
{"X1-010",ICON_FA_BAR_CHART,ICON_FUR_INS_X1_010},
|
||||
{"VRC6 (saw)",ICON_FA_BAR_CHART,ICON_FUR_INS_VRC6_SAW},
|
||||
{_("VRC6 (saw)"),ICON_FA_BAR_CHART,ICON_FUR_INS_VRC6_SAW},
|
||||
{"ES5506",ICON_FA_VOLUME_UP,ICON_FUR_INS_ES5506},
|
||||
{"MultiPCM",ICON_FA_VOLUME_UP,ICON_FUR_INS_MULTIPCM},
|
||||
{"SNES",ICON_FA_VOLUME_UP,ICON_FUR_INS_SNES},
|
||||
{"Sound Unit",ICON_FA_MICROCHIP,ICON_FUR_INS_SU},
|
||||
{"Namco WSG",ICON_FA_PIE_CHART,ICON_FUR_INS_NAMCO},
|
||||
{"OPL (drums)",ICON_FA_COFFEE,ICON_FUR_INS_OPL_DRUMS},
|
||||
{_N("OPL (drums)"),ICON_FA_COFFEE,ICON_FUR_INS_OPL_DRUMS},
|
||||
{"FM (OPM)",ICON_FA_AREA_CHART,ICON_FUR_INS_OPM},
|
||||
{"NES",ICON_FA_GAMEPAD,ICON_FUR_INS_NES},
|
||||
{"MSM6258",ICON_FA_VOLUME_UP,ICON_FUR_INS_MSM6258},
|
||||
|
@ -176,8 +176,8 @@ const char* insTypes[DIV_INS_MAX+1][3]={
|
|||
{"C140",ICON_FA_VOLUME_UP,ICON_FUR_INS_C140},
|
||||
{"C219",ICON_FA_VOLUME_UP,ICON_FUR_INS_C219},
|
||||
{"FM (ESFM)",ICON_FA_AREA_CHART,ICON_FUR_INS_ESFM},
|
||||
{"PowerNoise (noise)",ICON_FUR_NOISE,ICON_FUR_INS_POWERNOISE},
|
||||
{"PowerNoise (slope)",ICON_FUR_SAW,ICON_FUR_INS_POWERNOISE_SAW},
|
||||
{_N("PowerNoise (noise)"),ICON_FUR_NOISE,ICON_FUR_INS_POWERNOISE},
|
||||
{_N("PowerNoise (slope)"),ICON_FUR_SAW,ICON_FUR_INS_POWERNOISE_SAW},
|
||||
{"Dave",ICON_FA_BAR_CHART,ICON_FUR_INS_DAVE},
|
||||
{"Nintendo DS",ICON_FA_BAR_CHART,ICON_FUR_INS_NDS},
|
||||
{"GBA DMA",ICON_FA_GAMEPAD,ICON_FUR_INS_GBA_DMA},
|
||||
|
@ -188,9 +188,9 @@ const char* insTypes[DIV_INS_MAX+1][3]={
|
|||
};
|
||||
|
||||
const char* sampleLoopModes[DIV_SAMPLE_LOOP_MAX]={
|
||||
"Forward",
|
||||
"Backward",
|
||||
"Ping pong"
|
||||
_N("Forward"),
|
||||
_N("Backward"),
|
||||
_N("Ping pong")
|
||||
};
|
||||
|
||||
const char* sampleDepths[DIV_SAMPLE_DEPTH_MAX]={
|
||||
|
@ -214,25 +214,25 @@ const char* sampleDepths[DIV_SAMPLE_DEPTH_MAX]={
|
|||
};
|
||||
|
||||
const char* resampleStrats[]={
|
||||
"none",
|
||||
"linear",
|
||||
"cubic spline",
|
||||
"blep synthesis",
|
||||
"sinc",
|
||||
"best possible"
|
||||
_N("none"),
|
||||
_N("linear"),
|
||||
_N("cubic spline"),
|
||||
_N("blep synthesis"),
|
||||
_N("sinc"),
|
||||
_N("best possible")
|
||||
};
|
||||
|
||||
const char* fxColorsNames[]={
|
||||
"Invalid",
|
||||
"Pitch",
|
||||
"Volume",
|
||||
"Panning",
|
||||
"Song",
|
||||
"Time",
|
||||
"Speed",
|
||||
"System (Primary)",
|
||||
"System (Secondary)",
|
||||
"Miscellaneous"
|
||||
_N("Invalid"),
|
||||
_N("Pitch"),
|
||||
_N("Volume"),
|
||||
_N("Panning"),
|
||||
_N("Song"),
|
||||
_N("Time"),
|
||||
_N("Speed"),
|
||||
_N("System (Primary)"),
|
||||
_N("System (Secondary)"),
|
||||
_N("Miscellaneous")
|
||||
};
|
||||
|
||||
const FurnaceGUIColors fxColors[256]={
|
||||
|
@ -527,274 +527,274 @@ const FurnaceGUIColors fxColors[256]={
|
|||
|
||||
// format: ("ACTION_ENUM", "Action name", defaultBind)
|
||||
const FurnaceGUIActionDef guiActions[GUI_ACTION_MAX]={
|
||||
D("GLOBAL_MIN", "---Global", NOT_AN_ACTION),
|
||||
D("NEW", "New", FURKMOD_CMD|SDLK_n),
|
||||
D("OPEN", "Open file", FURKMOD_CMD|SDLK_o),
|
||||
D("OPEN_BACKUP", "Restore backup", 0),
|
||||
D("SAVE", "Save file", FURKMOD_CMD|SDLK_s),
|
||||
D("SAVE_AS", "Save as", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_s),
|
||||
D("EXPORT", "Export", 0),
|
||||
D("UNDO", "Undo", FURKMOD_CMD|SDLK_z),
|
||||
D("GLOBAL_MIN", _N("---Global"), NOT_AN_ACTION),
|
||||
D("NEW", _N("New"), FURKMOD_CMD|SDLK_n),
|
||||
D("OPEN", _N("Open file"), FURKMOD_CMD|SDLK_o),
|
||||
D("OPEN_BACKUP", _N("Restore backup"), 0),
|
||||
D("SAVE", _N("Save file"), FURKMOD_CMD|SDLK_s),
|
||||
D("SAVE_AS", _N("Save as"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_s),
|
||||
D("EXPORT", _N("Export"), 0),
|
||||
D("UNDO", _N("Undo"), FURKMOD_CMD|SDLK_z),
|
||||
#ifdef __APPLE__
|
||||
D("REDO", "Redo", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_z),
|
||||
D("REDO", _N("Redo"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_z),
|
||||
#else
|
||||
D("REDO", "Redo", FURKMOD_CMD|SDLK_y),
|
||||
D("REDO", _N("Redo"), FURKMOD_CMD|SDLK_y),
|
||||
#endif
|
||||
D("QUIT", "Exit", 0),
|
||||
D("PLAY_TOGGLE", "Play/Stop (toggle)", SDLK_RETURN),
|
||||
D("PLAY", "Play", 0),
|
||||
D("STOP", "Stop", 0),
|
||||
D("PLAY_START", "Play (from beginning)", SDLK_F5),
|
||||
D("PLAY_REPEAT", "Play (repeat pattern)", 0),
|
||||
D("PLAY_CURSOR", "Play from cursor", FURKMOD_SHIFT|SDLK_RETURN),
|
||||
D("STEP_ONE", "Step row", FURKMOD_CMD|SDLK_RETURN),
|
||||
D("OCTAVE_UP", "Octave up", SDLK_KP_MULTIPLY),
|
||||
D("OCTAVE_DOWN", "Octave down", SDLK_KP_DIVIDE),
|
||||
D("INS_UP", "Previous instrument", FURKMOD_SHIFT|SDLK_KP_DIVIDE),
|
||||
D("INS_DOWN", "Next instrument", FURKMOD_SHIFT|SDLK_KP_MULTIPLY),
|
||||
D("STEP_UP", "Increase edit step", FURKMOD_CMD|SDLK_KP_MULTIPLY),
|
||||
D("STEP_DOWN", "Decrease edit step", FURKMOD_CMD|SDLK_KP_DIVIDE),
|
||||
D("TOGGLE_EDIT", "Toggle edit mode", SDLK_SPACE),
|
||||
D("METRONOME", "Metronome", FURKMOD_CMD|SDLK_m),
|
||||
D("REPEAT_PATTERN", "Toggle repeat pattern", 0),
|
||||
D("FOLLOW_ORDERS", "Follow orders", 0),
|
||||
D("FOLLOW_PATTERN", "Follow pattern", 0),
|
||||
D("FULLSCREEN", "Toggle full-screen", SDLK_F11),
|
||||
D("TX81Z_REQUEST", "Request voice from TX81Z", 0),
|
||||
D("PANIC", "Panic", SDLK_F12),
|
||||
D("CLEAR", "Clear song data", 0),
|
||||
D("QUIT", _N("Exit"), 0),
|
||||
D("PLAY_TOGGLE", _N("Play/Stop (toggle)"), SDLK_RETURN),
|
||||
D("PLAY", _N("Play"), 0),
|
||||
D("STOP", _N("Stop"), 0),
|
||||
D("PLAY_START", _N("Play (from beginning)"), SDLK_F5),
|
||||
D("PLAY_REPEAT", _N("Play (repeat pattern)"), 0),
|
||||
D("PLAY_CURSOR", _N("Play from cursor"), FURKMOD_SHIFT|SDLK_RETURN),
|
||||
D("STEP_ONE", _N("Step row"), FURKMOD_CMD|SDLK_RETURN),
|
||||
D("OCTAVE_UP", _N("Octave up"), SDLK_KP_MULTIPLY),
|
||||
D("OCTAVE_DOWN", _N("Octave down"), SDLK_KP_DIVIDE),
|
||||
D("INS_UP", _N("Previous instrument"), FURKMOD_SHIFT|SDLK_KP_DIVIDE),
|
||||
D("INS_DOWN", _N("Next instrument"), FURKMOD_SHIFT|SDLK_KP_MULTIPLY),
|
||||
D("STEP_UP", _N("Increase edit step"), FURKMOD_CMD|SDLK_KP_MULTIPLY),
|
||||
D("STEP_DOWN", _N("Decrease edit step"), FURKMOD_CMD|SDLK_KP_DIVIDE),
|
||||
D("TOGGLE_EDIT", _N("Toggle edit mode"), SDLK_SPACE),
|
||||
D("METRONOME", _N("Metronome"), FURKMOD_CMD|SDLK_m),
|
||||
D("REPEAT_PATTERN", _N("Toggle repeat pattern"), 0),
|
||||
D("FOLLOW_ORDERS", _N("Follow orders"), 0),
|
||||
D("FOLLOW_PATTERN", _N("Follow pattern"), 0),
|
||||
D("FULLSCREEN", _N("Toggle full-screen"), SDLK_F11),
|
||||
D("TX81Z_REQUEST", _N("Request voice from TX81Z"), 0),
|
||||
D("PANIC", _N("Panic"), SDLK_F12),
|
||||
D("CLEAR", _N("Clear song data"), 0),
|
||||
|
||||
D("COMMAND_PALETTE", "Command Palette", FURKMOD_CMD|SDLK_p),
|
||||
D("COMMAND_PALETTE", _N("Command Palette"), FURKMOD_CMD|SDLK_p),
|
||||
D("CMDPAL_MIN", "", NOT_AN_ACTION),
|
||||
D("CMDPAL_RECENT", "Recent files (Palette)", 0),
|
||||
D("CMDPAL_INSTRUMENTS", "Instruments (Palette)", 0),
|
||||
D("CMDPAL_SAMPLES", "Samples (Palette)", 0),
|
||||
D("CMDPAL_INSTRUMENT_CHANGE", "Change instrument (Palette)", 0),
|
||||
D("CMDPAL_ADD_CHIP", "Add chip (Palette)", 0),
|
||||
D("CMDPAL_RECENT", _N("Recent files (Palette)"), 0),
|
||||
D("CMDPAL_INSTRUMENTS", _N("Instruments (Palette)"), 0),
|
||||
D("CMDPAL_SAMPLES", _N("Samples (Palette)"), 0),
|
||||
D("CMDPAL_INSTRUMENT_CHANGE", _N("Change instrument (Palette)"), 0),
|
||||
D("CMDPAL_ADD_CHIP", _N("Add chip (Palette)"), 0),
|
||||
D("CMDPAL_MAX", "", NOT_AN_ACTION),
|
||||
|
||||
D("WINDOW_EDIT_CONTROLS", "Edit Controls", 0),
|
||||
D("WINDOW_ORDERS", "Orders", 0),
|
||||
D("WINDOW_INS_LIST", "Instrument List", 0),
|
||||
D("WINDOW_INS_EDIT", "Instrument Editor", 0),
|
||||
D("WINDOW_SONG_INFO", "Song Information", 0),
|
||||
D("WINDOW_SPEED", "Speed", 0),
|
||||
D("WINDOW_PATTERN", "Pattern", 0),
|
||||
D("WINDOW_WAVE_LIST", "Wavetable List", 0),
|
||||
D("WINDOW_WAVE_EDIT", "Wavetable Editor", 0),
|
||||
D("WINDOW_SAMPLE_LIST", "Sample List", 0),
|
||||
D("WINDOW_SAMPLE_EDIT", "Sample Editor", 0),
|
||||
D("WINDOW_ABOUT", "About", 0),
|
||||
D("WINDOW_EDIT_CONTROLS", _N("Edit Controls"), 0),
|
||||
D("WINDOW_ORDERS", _N("Orders"), 0),
|
||||
D("WINDOW_INS_LIST", _N("Instrument List"), 0),
|
||||
D("WINDOW_INS_EDIT", _N("Instrument Editor"), 0),
|
||||
D("WINDOW_SONG_INFO", _N("Song Information"), 0),
|
||||
D("WINDOW_SPEED", _N("Speed"), 0),
|
||||
D("WINDOW_PATTERN", _N("Pattern"), 0),
|
||||
D("WINDOW_WAVE_LIST", _N("Wavetable List"), 0),
|
||||
D("WINDOW_WAVE_EDIT", _N("Wavetable Editor"), 0),
|
||||
D("WINDOW_SAMPLE_LIST", _N("Sample List"), 0),
|
||||
D("WINDOW_SAMPLE_EDIT", _N("Sample Editor"), 0),
|
||||
D("WINDOW_ABOUT", _N("About"), 0),
|
||||
#ifdef __APPLE__
|
||||
D("WINDOW_SETTINGS", "Settings", FURKMOD_CMD|SDLK_COMMA),
|
||||
D("WINDOW_SETTINGS", _N("Settings"), FURKMOD_CMD|SDLK_COMMA),
|
||||
#else
|
||||
D("WINDOW_SETTINGS", "Settings", 0),
|
||||
D("WINDOW_SETTINGS", _N("Settings"), 0),
|
||||
#endif
|
||||
D("WINDOW_MIXER", "Mixer", 0),
|
||||
D("WINDOW_DEBUG", "Debug Menu", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_d),
|
||||
D("WINDOW_OSCILLOSCOPE", "Oscilloscope (master)", 0),
|
||||
D("WINDOW_VOL_METER", "Volume Meter", 0),
|
||||
D("WINDOW_STATS", "Statistics", 0),
|
||||
D("WINDOW_COMPAT_FLAGS", "Compatibility Flags", 0),
|
||||
D("WINDOW_PIANO", "Piano", 0),
|
||||
D("WINDOW_NOTES", "Song Comments", 0),
|
||||
D("WINDOW_CHANNELS", "Channels", 0),
|
||||
D("WINDOW_PAT_MANAGER", "Pattern Manager", 0),
|
||||
D("WINDOW_SYS_MANAGER", "Chip Manager", 0),
|
||||
D("WINDOW_REGISTER_VIEW", "Register View", 0),
|
||||
D("WINDOW_LOG", "Log Viewer", 0),
|
||||
D("WINDOW_EFFECT_LIST", "Effect List", 0),
|
||||
D("WINDOW_CHAN_OSC", "Oscilloscope (per-channel)", 0),
|
||||
D("WINDOW_SUBSONGS", "Subsongs", 0),
|
||||
D("WINDOW_FIND", "Find/Replace", FURKMOD_CMD|SDLK_f),
|
||||
D("WINDOW_CLOCK", "Clock", 0),
|
||||
D("WINDOW_GROOVES", "Grooves", 0),
|
||||
D("WINDOW_XY_OSC", "Oscilloscope (X-Y)", 0),
|
||||
D("WINDOW_MEMORY", "Memory Composition", 0),
|
||||
D("WINDOW_CS_PLAYER", "Command Stream Player", 0),
|
||||
D("WINDOW_USER_PRESETS", "User Presets", 0),
|
||||
D("WINDOW_MIXER", _N("Mixer"), 0),
|
||||
D("WINDOW_DEBUG", _N("Debug Menu"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_d),
|
||||
D("WINDOW_OSCILLOSCOPE", _N("Oscilloscope (master)"), 0),
|
||||
D("WINDOW_VOL_METER", _N("Volume Meter"), 0),
|
||||
D("WINDOW_STATS", _N("Statistics"), 0),
|
||||
D("WINDOW_COMPAT_FLAGS", _N("Compatibility Flags"), 0),
|
||||
D("WINDOW_PIANO", _N("Piano"), 0),
|
||||
D("WINDOW_NOTES", _N("Song Comments"), 0),
|
||||
D("WINDOW_CHANNELS", _N("Channels"), 0),
|
||||
D("WINDOW_PAT_MANAGER", _N("Pattern Manager"), 0),
|
||||
D("WINDOW_SYS_MANAGER", _N("Chip Manager"), 0),
|
||||
D("WINDOW_REGISTER_VIEW", _N("Register View"), 0),
|
||||
D("WINDOW_LOG", _N("Log Viewer"), 0),
|
||||
D("WINDOW_EFFECT_LIST", _N("Effect List"), 0),
|
||||
D("WINDOW_CHAN_OSC", _N("Oscilloscope (per-channel)"), 0),
|
||||
D("WINDOW_SUBSONGS", _N("Subsongs"), 0),
|
||||
D("WINDOW_FIND", _N("Find/Replace"), FURKMOD_CMD|SDLK_f),
|
||||
D("WINDOW_CLOCK", _N("Clock"), 0),
|
||||
D("WINDOW_GROOVES", _N("Grooves"), 0),
|
||||
D("WINDOW_XY_OSC", _N("Oscilloscope (X-Y)"), 0),
|
||||
D("WINDOW_MEMORY", _N("Memory Composition"), 0),
|
||||
D("WINDOW_CS_PLAYER", _N("Command Stream Player"), 0),
|
||||
D("WINDOW_USER_PRESETS", _N("User Presets"), 0),
|
||||
|
||||
D("COLLAPSE_WINDOW", "Collapse/expand current window", 0),
|
||||
D("CLOSE_WINDOW", "Close current window", FURKMOD_SHIFT|SDLK_ESCAPE),
|
||||
D("COLLAPSE_WINDOW", _N("Collapse/expand current window"), 0),
|
||||
D("CLOSE_WINDOW", _N("Close current window"), FURKMOD_SHIFT|SDLK_ESCAPE),
|
||||
D("GLOBAL_MAX", "", NOT_AN_ACTION),
|
||||
|
||||
D("PAT_MIN", "---Pattern", NOT_AN_ACTION),
|
||||
D("PAT_NOTE_UP", "Transpose (+1)", FURKMOD_CMD|SDLK_F2),
|
||||
D("PAT_NOTE_DOWN", "Transpose (-1)", FURKMOD_CMD|SDLK_F1),
|
||||
D("PAT_OCTAVE_UP", "Transpose (+1 octave)", FURKMOD_CMD|SDLK_F4),
|
||||
D("PAT_OCTAVE_DOWN", "Transpose (-1 octave)", FURKMOD_CMD|SDLK_F3),
|
||||
D("PAT_VALUE_UP", "Increase values (+1)", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_F2),
|
||||
D("PAT_VALUE_DOWN", "Increase values (-1)", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_F1),
|
||||
D("PAT_VALUE_UP_COARSE", "Increase values (+16)", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_F4),
|
||||
D("PAT_VALUE_DOWN_COARSE", "Increase values (-16)", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_F3),
|
||||
D("PAT_SELECT_ALL", "Select all", FURKMOD_CMD|SDLK_a),
|
||||
D("PAT_CUT", "Cut", FURKMOD_CMD|SDLK_x),
|
||||
D("PAT_COPY", "Copy", FURKMOD_CMD|SDLK_c),
|
||||
D("PAT_PASTE", "Paste", FURKMOD_CMD|SDLK_v),
|
||||
D("PAT_PASTE_MIX", "Paste Mix (foreground)", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_v),
|
||||
D("PAT_PASTE_MIX_BG", "Paste Mix (background)", 0),
|
||||
D("PAT_PASTE_FLOOD", "Paste Flood", 0),
|
||||
D("PAT_PASTE_OVERFLOW", "Paste Overflow", 0),
|
||||
D("PAT_CURSOR_UP", "Move cursor up", SDLK_UP),
|
||||
D("PAT_CURSOR_DOWN", "Move cursor down", SDLK_DOWN),
|
||||
D("PAT_CURSOR_LEFT", "Move cursor left", SDLK_LEFT),
|
||||
D("PAT_CURSOR_RIGHT", "Move cursor right", SDLK_RIGHT),
|
||||
D("PAT_CURSOR_UP_ONE", "Move cursor up by one (override Edit Step)", FURKMOD_SHIFT|SDLK_HOME),
|
||||
D("PAT_CURSOR_DOWN_ONE", "Move cursor down by one (override Edit Step)", FURKMOD_SHIFT|SDLK_END),
|
||||
D("PAT_CURSOR_LEFT_CHANNEL", "Move cursor to previous channel", 0),
|
||||
D("PAT_CURSOR_RIGHT_CHANNEL", "Move cursor to next channel", 0),
|
||||
D("PAT_CURSOR_NEXT_CHANNEL", "Move cursor to next channel (overflow)", 0),
|
||||
D("PAT_CURSOR_PREVIOUS_CHANNEL", "Move cursor to previous channel (overflow)", 0),
|
||||
D("PAT_CURSOR_BEGIN", "Move cursor to beginning of pattern", SDLK_HOME),
|
||||
D("PAT_CURSOR_END", "Move cursor to end of pattern", SDLK_END),
|
||||
D("PAT_CURSOR_UP_COARSE", "Move cursor up (coarse)", SDLK_PAGEUP),
|
||||
D("PAT_CURSOR_DOWN_COARSE", "Move cursor down (coarse)", SDLK_PAGEDOWN),
|
||||
D("PAT_SELECTION_UP", "Expand selection upwards", FURKMOD_SHIFT|SDLK_UP),
|
||||
D("PAT_SELECTION_DOWN", "Expand selection downwards", FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("PAT_SELECTION_LEFT", "Expand selection to the left", FURKMOD_SHIFT|SDLK_LEFT),
|
||||
D("PAT_SELECTION_RIGHT", "Expand selection to the right", FURKMOD_SHIFT|SDLK_RIGHT),
|
||||
D("PAT_SELECTION_UP_ONE", "Expand selection upwards by one (override Edit Step)", 0),
|
||||
D("PAT_SELECTION_DOWN_ONE", "Expand selection downwards by one (override Edit Step)", 0),
|
||||
D("PAT_SELECTION_BEGIN", "Expand selection to beginning of pattern", 0),
|
||||
D("PAT_SELECTION_END", "Expand selection to end of pattern", 0),
|
||||
D("PAT_SELECTION_UP_COARSE", "Expand selection upwards (coarse)", FURKMOD_SHIFT|SDLK_PAGEUP),
|
||||
D("PAT_SELECTION_DOWN_COARSE", "Expand selection downwards (coarse)", FURKMOD_SHIFT|SDLK_PAGEDOWN),
|
||||
D("PAT_MOVE_UP", "Move selection up", FURKMOD_ALT|SDLK_UP),
|
||||
D("PAT_MOVE_DOWN", "Move selection down", FURKMOD_ALT|SDLK_DOWN),
|
||||
D("PAT_MOVE_LEFT_CHANNEL", "Move selection to previous channel", FURKMOD_ALT|SDLK_LEFT),
|
||||
D("PAT_MOVE_RIGHT_CHANNEL", "Move selection to next channel", FURKMOD_ALT|SDLK_RIGHT),
|
||||
D("PAT_DELETE", "Delete", SDLK_DELETE),
|
||||
D("PAT_PULL_DELETE", "Pull delete", SDLK_BACKSPACE),
|
||||
D("PAT_INSERT", "Insert", SDLK_INSERT),
|
||||
D("PAT_MUTE_CURSOR", "Mute channel at cursor", FURKMOD_ALT|SDLK_F9),
|
||||
D("PAT_SOLO_CURSOR", "Solo channel at cursor", FURKMOD_ALT|SDLK_F10),
|
||||
D("PAT_UNMUTE_ALL", "Unmute all channels", FURKMOD_ALT|FURKMOD_SHIFT|SDLK_F9),
|
||||
D("PAT_NEXT_ORDER", "Go to next order", 0),
|
||||
D("PAT_PREV_ORDER", "Go to previous order", 0),
|
||||
D("PAT_COLLAPSE", "Collapse channel at cursor", 0),
|
||||
D("PAT_INCREASE_COLUMNS", "Increase effect columns", 0),
|
||||
D("PAT_DECREASE_COLUMNS", "Decrease effect columns", 0),
|
||||
D("PAT_INTERPOLATE", "Interpolate", 0),
|
||||
D("PAT_FADE", "Fade", 0),
|
||||
D("PAT_INVERT_VALUES", "Invert values", 0),
|
||||
D("PAT_FLIP_SELECTION", "Flip selection", 0),
|
||||
D("PAT_COLLAPSE_ROWS", "Collapse rows", 0),
|
||||
D("PAT_EXPAND_ROWS", "Expand rows", 0),
|
||||
D("PAT_COLLAPSE_PAT", "Collapse pattern", 0),
|
||||
D("PAT_EXPAND_PAT", "Expand pattern", 0),
|
||||
D("PAT_COLLAPSE_SONG", "Collapse song", 0),
|
||||
D("PAT_EXPAND_SONG", "Expand song", 0),
|
||||
D("PAT_LATCH", "Set note input latch", 0),
|
||||
D("PAT_SCROLL_MODE", "Change mobile scroll mode", 0),
|
||||
D("PAT_CLEAR_LATCH", "Clear note input latch", 0),
|
||||
D("PAT_MIN", _N("---Pattern"), NOT_AN_ACTION),
|
||||
D("PAT_NOTE_UP", _N("Transpose (+1)"), FURKMOD_CMD|SDLK_F2),
|
||||
D("PAT_NOTE_DOWN", _N("Transpose (-1)"), FURKMOD_CMD|SDLK_F1),
|
||||
D("PAT_OCTAVE_UP", _N("Transpose (+1 octave)"), FURKMOD_CMD|SDLK_F4),
|
||||
D("PAT_OCTAVE_DOWN", _N("Transpose (-1 octave)"), FURKMOD_CMD|SDLK_F3),
|
||||
D("PAT_VALUE_UP", _N("Increase values (+1)"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_F2),
|
||||
D("PAT_VALUE_DOWN", _N("Increase values (-1)"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_F1),
|
||||
D("PAT_VALUE_UP_COARSE", _N("Increase values (+16)"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_F4),
|
||||
D("PAT_VALUE_DOWN_COARSE", _N("Increase values (-16)"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_F3),
|
||||
D("PAT_SELECT_ALL", _N("Select all"), FURKMOD_CMD|SDLK_a),
|
||||
D("PAT_CUT", _N("Cut"), FURKMOD_CMD|SDLK_x),
|
||||
D("PAT_COPY", _N("Copy"), FURKMOD_CMD|SDLK_c),
|
||||
D("PAT_PASTE", _N("Paste"), FURKMOD_CMD|SDLK_v),
|
||||
D("PAT_PASTE_MIX", _N("Paste Mix (foreground)"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_v),
|
||||
D("PAT_PASTE_MIX_BG", _N("Paste Mix (background)"), 0),
|
||||
D("PAT_PASTE_FLOOD", _N("Paste Flood"), 0),
|
||||
D("PAT_PASTE_OVERFLOW", _N("Paste Overflow"), 0),
|
||||
D("PAT_CURSOR_UP", _N("Move cursor up"), SDLK_UP),
|
||||
D("PAT_CURSOR_DOWN", _N("Move cursor down"), SDLK_DOWN),
|
||||
D("PAT_CURSOR_LEFT", _N("Move cursor left"), SDLK_LEFT),
|
||||
D("PAT_CURSOR_RIGHT", _N("Move cursor right"), SDLK_RIGHT),
|
||||
D("PAT_CURSOR_UP_ONE", _N("Move cursor up by one (override Edit Step)"), FURKMOD_SHIFT|SDLK_HOME),
|
||||
D("PAT_CURSOR_DOWN_ONE", _N("Move cursor down by one (override Edit Step)"), FURKMOD_SHIFT|SDLK_END),
|
||||
D("PAT_CURSOR_LEFT_CHANNEL", _N("Move cursor to previous channel"), 0),
|
||||
D("PAT_CURSOR_RIGHT_CHANNEL", _N("Move cursor to next channel"), 0),
|
||||
D("PAT_CURSOR_NEXT_CHANNEL", _N("Move cursor to next channel (overflow)"), 0),
|
||||
D("PAT_CURSOR_PREVIOUS_CHANNEL", _N("Move cursor to previous channel (overflow)"), 0),
|
||||
D("PAT_CURSOR_BEGIN", _N("Move cursor to beginning of pattern"), SDLK_HOME),
|
||||
D("PAT_CURSOR_END", _N("Move cursor to end of pattern"), SDLK_END),
|
||||
D("PAT_CURSOR_UP_COARSE", _N("Move cursor up (coarse)"), SDLK_PAGEUP),
|
||||
D("PAT_CURSOR_DOWN_COARSE", _N("Move cursor down (coarse)"), SDLK_PAGEDOWN),
|
||||
D("PAT_SELECTION_UP", _N("Expand selection upwards"), FURKMOD_SHIFT|SDLK_UP),
|
||||
D("PAT_SELECTION_DOWN", _N("Expand selection downwards"), FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("PAT_SELECTION_LEFT", _N("Expand selection to the left"), FURKMOD_SHIFT|SDLK_LEFT),
|
||||
D("PAT_SELECTION_RIGHT", _N("Expand selection to the right"), FURKMOD_SHIFT|SDLK_RIGHT),
|
||||
D("PAT_SELECTION_UP_ONE", _N("Expand selection upwards by one (override Edit Step)"), 0),
|
||||
D("PAT_SELECTION_DOWN_ONE", _N("Expand selection downwards by one (override Edit Step)"), 0),
|
||||
D("PAT_SELECTION_BEGIN", _N("Expand selection to beginning of pattern"), 0),
|
||||
D("PAT_SELECTION_END", _N("Expand selection to end of pattern"), 0),
|
||||
D("PAT_SELECTION_UP_COARSE", _N("Expand selection upwards (coarse)"), FURKMOD_SHIFT|SDLK_PAGEUP),
|
||||
D("PAT_SELECTION_DOWN_COARSE", _N("Expand selection downwards (coarse)"), FURKMOD_SHIFT|SDLK_PAGEDOWN),
|
||||
D("PAT_MOVE_UP", _N("Move selection up"), FURKMOD_ALT|SDLK_UP),
|
||||
D("PAT_MOVE_DOWN", _N("Move selection down"), FURKMOD_ALT|SDLK_DOWN),
|
||||
D("PAT_MOVE_LEFT_CHANNEL", _N("Move selection to previous channel"), FURKMOD_ALT|SDLK_LEFT),
|
||||
D("PAT_MOVE_RIGHT_CHANNEL", _N("Move selection to next channel"), FURKMOD_ALT|SDLK_RIGHT),
|
||||
D("PAT_DELETE", _N("Delete"), SDLK_DELETE),
|
||||
D("PAT_PULL_DELETE", _N("Pull delete"), SDLK_BACKSPACE),
|
||||
D("PAT_INSERT", _N("Insert"), SDLK_INSERT),
|
||||
D("PAT_MUTE_CURSOR", _N("Mute channel at cursor"), FURKMOD_ALT|SDLK_F9),
|
||||
D("PAT_SOLO_CURSOR", _N("Solo channel at cursor"), FURKMOD_ALT|SDLK_F10),
|
||||
D("PAT_UNMUTE_ALL", _N("Unmute all channels"), FURKMOD_ALT|FURKMOD_SHIFT|SDLK_F9),
|
||||
D("PAT_NEXT_ORDER", _N("Go to next order"), 0),
|
||||
D("PAT_PREV_ORDER", _N("Go to previous order"), 0),
|
||||
D("PAT_COLLAPSE", _N("Collapse channel at cursor"), 0),
|
||||
D("PAT_INCREASE_COLUMNS", _N("Increase effect columns"), 0),
|
||||
D("PAT_DECREASE_COLUMNS", _N("Decrease effect columns"), 0),
|
||||
D("PAT_INTERPOLATE", _N("Interpolate"), 0),
|
||||
D("PAT_FADE", _N("Fade"), 0),
|
||||
D("PAT_INVERT_VALUES", _N("Invert values"), 0),
|
||||
D("PAT_FLIP_SELECTION", _N("Flip selection"), 0),
|
||||
D("PAT_COLLAPSE_ROWS", _N("Collapse rows"), 0),
|
||||
D("PAT_EXPAND_ROWS", _N("Expand rows"), 0),
|
||||
D("PAT_COLLAPSE_PAT", _N("Collapse pattern"), 0),
|
||||
D("PAT_EXPAND_PAT", _N("Expand pattern"), 0),
|
||||
D("PAT_COLLAPSE_SONG", _N("Collapse song"), 0),
|
||||
D("PAT_EXPAND_SONG", _N("Expand song"), 0),
|
||||
D("PAT_LATCH", _N("Set note input latch"), 0),
|
||||
D("PAT_SCROLL_MODE", _N("Change mobile scroll mode"), 0),
|
||||
D("PAT_CLEAR_LATCH", _N("Clear note input latch"), 0),
|
||||
D("PAT_MAX", "", NOT_AN_ACTION),
|
||||
|
||||
D("INS_LIST_MIN", "---Instrument list", NOT_AN_ACTION),
|
||||
D("INS_LIST_ADD", "Add instrument", SDLK_INSERT),
|
||||
D("INS_LIST_DUPLICATE", "Duplicate instrument", FURKMOD_CMD|SDLK_d),
|
||||
D("INS_LIST_OPEN", "Open instrument", 0),
|
||||
D("INS_LIST_OPEN_REPLACE", "Open instrument (replace current)", 0),
|
||||
D("INS_LIST_SAVE", "Save instrument", 0),
|
||||
D("INS_LIST_SAVE_DMP", "Save instrument (.dmp)", 0),
|
||||
D("INS_LIST_MOVE_UP", "Move instrument up in list", FURKMOD_SHIFT|SDLK_UP),
|
||||
D("INS_LIST_MOVE_DOWN", "Move instrument down in list", FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("INS_LIST_DELETE", "Delete instrument", 0),
|
||||
D("INS_LIST_EDIT", "Edit instrument", FURKMOD_SHIFT|SDLK_RETURN),
|
||||
D("INS_LIST_UP", "Instrument cursor up", SDLK_UP),
|
||||
D("INS_LIST_DOWN", "Instrument cursor down", SDLK_DOWN),
|
||||
D("INS_LIST_DIR_VIEW", "Instruments: toggle folders/standard view", FURKMOD_CMD|SDLK_v),
|
||||
D("INS_LIST_MIN", _N("---Instrument list"), NOT_AN_ACTION),
|
||||
D("INS_LIST_ADD", _N("Add instrument"), SDLK_INSERT),
|
||||
D("INS_LIST_DUPLICATE", _N("Duplicate instrument"), FURKMOD_CMD|SDLK_d),
|
||||
D("INS_LIST_OPEN", _N("Open instrument"), 0),
|
||||
D("INS_LIST_OPEN_REPLACE", _N("Open instrument (replace current)"), 0),
|
||||
D("INS_LIST_SAVE", _N("Save instrument"), 0),
|
||||
D("INS_LIST_SAVE_DMP", _N("Save instrument (.dmp)"), 0),
|
||||
D("INS_LIST_MOVE_UP", _N("Move instrument up in list"), FURKMOD_SHIFT|SDLK_UP),
|
||||
D("INS_LIST_MOVE_DOWN", _N("Move instrument down in list"), FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("INS_LIST_DELETE", _N("Delete instrument"), 0),
|
||||
D("INS_LIST_EDIT", _N("Edit instrument"), FURKMOD_SHIFT|SDLK_RETURN),
|
||||
D("INS_LIST_UP", _N("Instrument cursor up"), SDLK_UP),
|
||||
D("INS_LIST_DOWN", _N("Instrument cursor down"), SDLK_DOWN),
|
||||
D("INS_LIST_DIR_VIEW", _N("Instruments: toggle folders/standard view"), FURKMOD_CMD|SDLK_v),
|
||||
D("INS_LIST_MAX", "", NOT_AN_ACTION),
|
||||
|
||||
D("WAVE_LIST_MIN", "---Wavetable list", NOT_AN_ACTION),
|
||||
D("WAVE_LIST_ADD", "Add wavetable", SDLK_INSERT),
|
||||
D("WAVE_LIST_DUPLICATE", "Duplicate wavetable", FURKMOD_CMD|SDLK_d),
|
||||
D("WAVE_LIST_OPEN", "Open wavetable", 0),
|
||||
D("WAVE_LIST_OPEN_REPLACE", "Open wavetable (replace current)", 0),
|
||||
D("WAVE_LIST_SAVE", "Save wavetable", 0),
|
||||
D("WAVE_LIST_SAVE_DMW", "Save wavetable (.dmw)", 0),
|
||||
D("WAVE_LIST_SAVE_RAW", "Save wavetable (raw)", 0),
|
||||
D("WAVE_LIST_MOVE_UP", "Move wavetable up in list", FURKMOD_SHIFT|SDLK_UP),
|
||||
D("WAVE_LIST_MOVE_DOWN", "Move wavetable down in list", FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("WAVE_LIST_DELETE", "Delete wavetable", 0),
|
||||
D("WAVE_LIST_EDIT", "Edit wavetable", FURKMOD_SHIFT|SDLK_RETURN),
|
||||
D("WAVE_LIST_UP", "Wavetable cursor up", SDLK_UP),
|
||||
D("WAVE_LIST_DOWN", "Wavetable cursor down", SDLK_DOWN),
|
||||
D("WAVE_LIST_DIR_VIEW", "Wavetables: toggle folders/standard view", FURKMOD_CMD|SDLK_v),
|
||||
D("WAVE_LIST_MIN", _N("---Wavetable list"), NOT_AN_ACTION),
|
||||
D("WAVE_LIST_ADD", _N("Add wavetable"), SDLK_INSERT),
|
||||
D("WAVE_LIST_DUPLICATE", _N("Duplicate wavetable"), FURKMOD_CMD|SDLK_d),
|
||||
D("WAVE_LIST_OPEN", _N("Open wavetable"), 0),
|
||||
D("WAVE_LIST_OPEN_REPLACE", _N("Open wavetable (replace current)"), 0),
|
||||
D("WAVE_LIST_SAVE", _N("Save wavetable"), 0),
|
||||
D("WAVE_LIST_SAVE_DMW", _N("Save wavetable (.dmw)"), 0),
|
||||
D("WAVE_LIST_SAVE_RAW", _N("Save wavetable (raw)"), 0),
|
||||
D("WAVE_LIST_MOVE_UP", _N("Move wavetable up in list"), FURKMOD_SHIFT|SDLK_UP),
|
||||
D("WAVE_LIST_MOVE_DOWN", _N("Move wavetable down in list"), FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("WAVE_LIST_DELETE", _N("Delete wavetable"), 0),
|
||||
D("WAVE_LIST_EDIT", _N("Edit wavetable"), FURKMOD_SHIFT|SDLK_RETURN),
|
||||
D("WAVE_LIST_UP", _N("Wavetable cursor up"), SDLK_UP),
|
||||
D("WAVE_LIST_DOWN", _N("Wavetable cursor down"), SDLK_DOWN),
|
||||
D("WAVE_LIST_DIR_VIEW", _N("Wavetables: toggle folders/standard view"), FURKMOD_CMD|SDLK_v),
|
||||
D("WAVE_LIST_MAX", "", NOT_AN_ACTION),
|
||||
|
||||
D("SAMPLE_LIST_MIN", "---Sample list", NOT_AN_ACTION),
|
||||
D("SAMPLE_LIST_ADD", "Add sample", SDLK_INSERT),
|
||||
D("SAMPLE_LIST_DUPLICATE", "Duplicate sample", FURKMOD_CMD|SDLK_d),
|
||||
D("SAMPLE_LIST_OPEN", "Open sample", 0),
|
||||
D("SAMPLE_LIST_OPEN_REPLACE", "Open sample (replace current)", 0),
|
||||
D("SAMPLE_LIST_OPEN_RAW", "Import raw sample data", 0),
|
||||
D("SAMPLE_LIST_OPEN_REPLACE_RAW", "Import raw sample data (replace current)", 0),
|
||||
D("SAMPLE_LIST_SAVE", "Save sample", 0),
|
||||
D("SAMPLE_LIST_SAVE_RAW", "Save sample (raw)", 0),
|
||||
D("SAMPLE_LIST_MOVE_UP", "Move sample up in list", FURKMOD_SHIFT|SDLK_UP),
|
||||
D("SAMPLE_LIST_MOVE_DOWN", "Move sample down in list", FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("SAMPLE_LIST_DELETE", "Delete sample", 0),
|
||||
D("SAMPLE_LIST_EDIT", "Edit sample", FURKMOD_SHIFT|SDLK_RETURN),
|
||||
D("SAMPLE_LIST_UP", "Sample cursor up", SDLK_UP),
|
||||
D("SAMPLE_LIST_DOWN", "Sample cursor down", SDLK_DOWN),
|
||||
D("SAMPLE_LIST_PREVIEW", "Sample preview", 0),
|
||||
D("SAMPLE_LIST_STOP_PREVIEW", "Stop sample preview", 0),
|
||||
D("SAMPLE_LIST_DIR_VIEW", "Samples: Toggle folders/standard view", FURKMOD_CMD|SDLK_v),
|
||||
D("SAMPLE_LIST_MAKE_MAP", "Samples: Make me a drum kit", 0),
|
||||
D("SAMPLE_LIST_MIN", _N("---Sample list"), NOT_AN_ACTION),
|
||||
D("SAMPLE_LIST_ADD", _N("Add sample"), SDLK_INSERT),
|
||||
D("SAMPLE_LIST_DUPLICATE", _N("Duplicate sample"), FURKMOD_CMD|SDLK_d),
|
||||
D("SAMPLE_LIST_OPEN", _N("Open sample"), 0),
|
||||
D("SAMPLE_LIST_OPEN_REPLACE", _N("Open sample (replace current)"), 0),
|
||||
D("SAMPLE_LIST_OPEN_RAW", _N("Import raw sample data"), 0),
|
||||
D("SAMPLE_LIST_OPEN_REPLACE_RAW", _N("Import raw sample data (replace current)"), 0),
|
||||
D("SAMPLE_LIST_SAVE", _N("Save sample"), 0),
|
||||
D("SAMPLE_LIST_SAVE_RAW", _N("Save sample (raw)"), 0),
|
||||
D("SAMPLE_LIST_MOVE_UP", _N("Move sample up in list"), FURKMOD_SHIFT|SDLK_UP),
|
||||
D("SAMPLE_LIST_MOVE_DOWN", _N("Move sample down in list"), FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("SAMPLE_LIST_DELETE", _N("Delete sample"), 0),
|
||||
D("SAMPLE_LIST_EDIT", _N("Edit sample"), FURKMOD_SHIFT|SDLK_RETURN),
|
||||
D("SAMPLE_LIST_UP", _N("Sample cursor up"), SDLK_UP),
|
||||
D("SAMPLE_LIST_DOWN", _N("Sample cursor down"), SDLK_DOWN),
|
||||
D("SAMPLE_LIST_PREVIEW", _N("Sample preview"), 0),
|
||||
D("SAMPLE_LIST_STOP_PREVIEW", _N("Stop sample preview"), 0),
|
||||
D("SAMPLE_LIST_DIR_VIEW", _N("Samples: Toggle folders/standard view"), FURKMOD_CMD|SDLK_v),
|
||||
D("SAMPLE_LIST_MAKE_MAP", _N("Samples: Make me a drum kit"), 0),
|
||||
D("SAMPLE_LIST_MAX", "", NOT_AN_ACTION),
|
||||
|
||||
D("SAMPLE_MIN", "---Sample editor", NOT_AN_ACTION),
|
||||
D("SAMPLE_SELECT", "Sample editor mode: Select", FURKMOD_SHIFT|SDLK_i),
|
||||
D("SAMPLE_DRAW", "Sample editor mode: Draw", FURKMOD_SHIFT|SDLK_d),
|
||||
D("SAMPLE_CUT", "Sample editor: Cut", FURKMOD_CMD|SDLK_x),
|
||||
D("SAMPLE_COPY", "Sample editor: Copy", FURKMOD_CMD|SDLK_c),
|
||||
D("SAMPLE_PASTE", "Sample editor: Paste", FURKMOD_CMD|SDLK_v),
|
||||
D("SAMPLE_PASTE_REPLACE", "Sample editor: Paste replace", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_v),
|
||||
D("SAMPLE_PASTE_MIX", "Sample editor: Paste mix", FURKMOD_CMD|FURKMOD_ALT|SDLK_v),
|
||||
D("SAMPLE_SELECT_ALL", "Sample editor: Select all", FURKMOD_CMD|SDLK_a),
|
||||
D("SAMPLE_RESIZE", "Sample editor: Resize", FURKMOD_CMD|SDLK_r),
|
||||
D("SAMPLE_RESAMPLE", "Sample editor: Resample", FURKMOD_CMD|SDLK_e),
|
||||
D("SAMPLE_AMPLIFY", "Sample editor: Amplify", FURKMOD_CMD|SDLK_b),
|
||||
D("SAMPLE_NORMALIZE", "Sample editor: Normalize", FURKMOD_CMD|SDLK_n),
|
||||
D("SAMPLE_FADE_IN", "Sample editor: Fade in", FURKMOD_CMD|SDLK_i),
|
||||
D("SAMPLE_FADE_OUT", "Sample editor: Fade out", FURKMOD_CMD|SDLK_o),
|
||||
D("SAMPLE_SILENCE", "Sample editor: Apply silence", FURKMOD_SHIFT|SDLK_DELETE),
|
||||
D("SAMPLE_INSERT", "Sample editor: Insert silence", SDLK_INSERT),
|
||||
D("SAMPLE_DELETE", "Sample editor: Delete", SDLK_DELETE),
|
||||
D("SAMPLE_TRIM", "Sample editor: Trim", FURKMOD_CMD|SDLK_DELETE),
|
||||
D("SAMPLE_REVERSE", "Sample editor: Reverse", FURKMOD_CMD|SDLK_t),
|
||||
D("SAMPLE_INVERT", "Sample editor: Invert", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_t),
|
||||
D("SAMPLE_SIGN", "Sample editor: Signed/unsigned exchange", FURKMOD_CMD|SDLK_u),
|
||||
D("SAMPLE_FILTER", "Sample editor: Apply filter", FURKMOD_CMD|SDLK_f),
|
||||
D("SAMPLE_CROSSFADE_LOOP", "Sample editor: Crossfade loop points", NOT_AN_ACTION),
|
||||
D("SAMPLE_PREVIEW", "Sample editor: Preview sample", 0),
|
||||
D("SAMPLE_STOP_PREVIEW", "Sample editor: Stop sample preview", 0),
|
||||
D("SAMPLE_ZOOM_IN", "Sample editor: Zoom in", FURKMOD_CMD|SDLK_EQUALS),
|
||||
D("SAMPLE_ZOOM_OUT", "Sample editor: Zoom out", FURKMOD_CMD|SDLK_MINUS),
|
||||
D("SAMPLE_ZOOM_AUTO", "Sample editor: Toggle auto-zoom", FURKMOD_CMD|SDLK_0),
|
||||
D("SAMPLE_MAKE_INS", "Sample editor: Create instrument from sample", 0),
|
||||
D("SAMPLE_SET_LOOP", "Sample editor: Set loop to selection", FURKMOD_CMD|SDLK_l),
|
||||
D("SAMPLE_CREATE_WAVE", "Sample editor: Create wavetable from selection", FURKMOD_CMD|SDLK_w),
|
||||
D("SAMPLE_MIN", _N("---Sample editor"), NOT_AN_ACTION),
|
||||
D("SAMPLE_SELECT", _N("Sample editor mode: Select"), FURKMOD_SHIFT|SDLK_i),
|
||||
D("SAMPLE_DRAW", _N("Sample editor mode: Draw"), FURKMOD_SHIFT|SDLK_d),
|
||||
D("SAMPLE_CUT", _N("Sample editor: Cut"), FURKMOD_CMD|SDLK_x),
|
||||
D("SAMPLE_COPY", _N("Sample editor: Copy"), FURKMOD_CMD|SDLK_c),
|
||||
D("SAMPLE_PASTE", _N("Sample editor: Paste"), FURKMOD_CMD|SDLK_v),
|
||||
D("SAMPLE_PASTE_REPLACE", _N("Sample editor: Paste replace"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_v),
|
||||
D("SAMPLE_PASTE_MIX", _N("Sample editor: Paste mix"), FURKMOD_CMD|FURKMOD_ALT|SDLK_v),
|
||||
D("SAMPLE_SELECT_ALL", _N("Sample editor: Select all"), FURKMOD_CMD|SDLK_a),
|
||||
D("SAMPLE_RESIZE", _N("Sample editor: Resize"), FURKMOD_CMD|SDLK_r),
|
||||
D("SAMPLE_RESAMPLE", _N("Sample editor: Resample"), FURKMOD_CMD|SDLK_e),
|
||||
D("SAMPLE_AMPLIFY", _N("Sample editor: Amplify"), FURKMOD_CMD|SDLK_b),
|
||||
D("SAMPLE_NORMALIZE", _N("Sample editor: Normalize"), FURKMOD_CMD|SDLK_n),
|
||||
D("SAMPLE_FADE_IN", _N("Sample editor: Fade in"), FURKMOD_CMD|SDLK_i),
|
||||
D("SAMPLE_FADE_OUT", _N("Sample editor: Fade out"), FURKMOD_CMD|SDLK_o),
|
||||
D("SAMPLE_SILENCE", _N("Sample editor: Apply silence"), FURKMOD_SHIFT|SDLK_DELETE),
|
||||
D("SAMPLE_INSERT", _N("Sample editor: Insert silence"), SDLK_INSERT),
|
||||
D("SAMPLE_DELETE", _N("Sample editor: Delete"), SDLK_DELETE),
|
||||
D("SAMPLE_TRIM", _N("Sample editor: Trim"), FURKMOD_CMD|SDLK_DELETE),
|
||||
D("SAMPLE_REVERSE", _N("Sample editor: Reverse"), FURKMOD_CMD|SDLK_t),
|
||||
D("SAMPLE_INVERT", _N("Sample editor: Invert"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_t),
|
||||
D("SAMPLE_SIGN", _N("Sample editor: Signed/unsigned exchange"), FURKMOD_CMD|SDLK_u),
|
||||
D("SAMPLE_FILTER", _N("Sample editor: Apply filter"), FURKMOD_CMD|SDLK_f),
|
||||
D("SAMPLE_CROSSFADE_LOOP", _N("Sample editor: Crossfade loop points"), NOT_AN_ACTION),
|
||||
D("SAMPLE_PREVIEW", _N("Sample editor: Preview sample"), 0),
|
||||
D("SAMPLE_STOP_PREVIEW", _N("Sample editor: Stop sample preview"), 0),
|
||||
D("SAMPLE_ZOOM_IN", _N("Sample editor: Zoom in"), FURKMOD_CMD|SDLK_EQUALS),
|
||||
D("SAMPLE_ZOOM_OUT", _N("Sample editor: Zoom out"), FURKMOD_CMD|SDLK_MINUS),
|
||||
D("SAMPLE_ZOOM_AUTO", _N("Sample editor: Toggle auto-zoom"), FURKMOD_CMD|SDLK_0),
|
||||
D("SAMPLE_MAKE_INS", _N("Sample editor: Create instrument from sample"), 0),
|
||||
D("SAMPLE_SET_LOOP", _N("Sample editor: Set loop to selection"), FURKMOD_CMD|SDLK_l),
|
||||
D("SAMPLE_CREATE_WAVE", _N("Sample editor: Create wavetable from selection"), FURKMOD_CMD|SDLK_w),
|
||||
D("SAMPLE_MAX", "", NOT_AN_ACTION),
|
||||
|
||||
D("ORDERS_MIN", "---Orders", NOT_AN_ACTION),
|
||||
D("ORDERS_UP", "Previous order", SDLK_UP),
|
||||
D("ORDERS_DOWN", "Next order", SDLK_DOWN),
|
||||
D("ORDERS_LEFT", "Order cursor left", SDLK_LEFT),
|
||||
D("ORDERS_RIGHT", "Order cursor right", SDLK_RIGHT),
|
||||
D("ORDERS_INCREASE", "Increase order value", 0),
|
||||
D("ORDERS_DECREASE", "Decrease order value", 0),
|
||||
D("ORDERS_EDIT_MODE", "Switch order edit mode", 0),
|
||||
D("ORDERS_LINK", "Order: toggle alter entire row", FURKMOD_CMD|SDLK_l),
|
||||
D("ORDERS_ADD", "Add order", SDLK_INSERT),
|
||||
D("ORDERS_DUPLICATE", "Duplicate order", FURKMOD_CMD|SDLK_d),
|
||||
D("ORDERS_DEEP_CLONE", "Deep clone order", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_d),
|
||||
D("ORDERS_DUPLICATE_END", "Copy current order to end of song", FURKMOD_CMD|SDLK_e),
|
||||
D("ORDERS_DEEP_CLONE_END", "Deep clone current order to end of song", FURKMOD_CMD|FURKMOD_SHIFT|SDLK_e),
|
||||
D("ORDERS_REMOVE", "Remove order", SDLK_DELETE),
|
||||
D("ORDERS_MOVE_UP", "Move order up", FURKMOD_SHIFT|SDLK_UP),
|
||||
D("ORDERS_MOVE_DOWN", "Move order down", FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("ORDERS_REPLAY", "Replay order", 0),
|
||||
D("ORDERS_MIN", _N("---Orders"), NOT_AN_ACTION),
|
||||
D("ORDERS_UP", _N("Previous order"), SDLK_UP),
|
||||
D("ORDERS_DOWN", _N("Next order"), SDLK_DOWN),
|
||||
D("ORDERS_LEFT", _N("Order cursor left"), SDLK_LEFT),
|
||||
D("ORDERS_RIGHT", _N("Order cursor right"), SDLK_RIGHT),
|
||||
D("ORDERS_INCREASE", _N("Increase order value"), 0),
|
||||
D("ORDERS_DECREASE", _N("Decrease order value"), 0),
|
||||
D("ORDERS_EDIT_MODE", _N("Switch order edit mode"), 0),
|
||||
D("ORDERS_LINK", _N("Order: toggle alter entire row"), FURKMOD_CMD|SDLK_l),
|
||||
D("ORDERS_ADD", _N("Add order"), SDLK_INSERT),
|
||||
D("ORDERS_DUPLICATE", _N("Duplicate order"), FURKMOD_CMD|SDLK_d),
|
||||
D("ORDERS_DEEP_CLONE", _N("Deep clone order"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_d),
|
||||
D("ORDERS_DUPLICATE_END", _N("Copy current order to end of song"), FURKMOD_CMD|SDLK_e),
|
||||
D("ORDERS_DEEP_CLONE_END", _N("Deep clone current order to end of song"), FURKMOD_CMD|FURKMOD_SHIFT|SDLK_e),
|
||||
D("ORDERS_REMOVE", _N("Remove order"), SDLK_DELETE),
|
||||
D("ORDERS_MOVE_UP", _N("Move order up"), FURKMOD_SHIFT|SDLK_UP),
|
||||
D("ORDERS_MOVE_DOWN", _N("Move order down"), FURKMOD_SHIFT|SDLK_DOWN),
|
||||
D("ORDERS_REPLAY", _N("Replay order"), 0),
|
||||
D("ORDERS_MAX", "", NOT_AN_ACTION),
|
||||
};
|
||||
#undef D
|
||||
|
@ -1389,11 +1389,11 @@ const int* chipCategories[]={
|
|||
};
|
||||
|
||||
const char* chipCategoryNames[]={
|
||||
"All chips",
|
||||
"FM",
|
||||
"Square",
|
||||
"Wavetable",
|
||||
"Special",
|
||||
"Sample",
|
||||
_N("All chips"),
|
||||
_N("FM"),
|
||||
_N("Square"),
|
||||
_N("Wavetable"),
|
||||
_N("Special"),
|
||||
_N("Sample"),
|
||||
NULL
|
||||
};
|
||||
|
|
1929
src/gui/insEdit.cpp
1929
src/gui/insEdit.cpp
File diff suppressed because it is too large
Load diff
|
@ -86,7 +86,7 @@ void FurnaceGUI::endIntroTune() {
|
|||
e->createNewFromDefaults();
|
||||
} else { // load pending song
|
||||
if (load(curFileName)>0) {
|
||||
showError(fmt::sprintf("Error while loading file! (%s)",lastError));
|
||||
showError(fmt::sprintf(_("Error while loading file! (%s)"),lastError));
|
||||
curFileName="";
|
||||
e->createNewFromDefaults();
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ void FurnaceGUI::drawIntro(double introTime, bool monitor) {
|
|||
}
|
||||
if (ImGui::Begin(monitor?"IntroMon X":"Intro",NULL,monitor?globalWinFlags:(ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoDocking|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoBackground))) {
|
||||
if (monitor) {
|
||||
if (ImGui::Button("Preview")) {
|
||||
if (ImGui::Button(_("Preview"))) {
|
||||
introPos=0;
|
||||
tutorial.introPlayed=false;
|
||||
shortIntro=false;
|
||||
|
@ -173,9 +173,9 @@ void FurnaceGUI::drawIntro(double introTime, bool monitor) {
|
|||
|
||||
if (monitor) {
|
||||
ImVec2 textPos=ImLerp(top,bottom,ImVec2(0.5,0.5));
|
||||
textPos.x-=ImGui::CalcTextSize("SORRY NOTHING").x*0.5;
|
||||
textPos.y-=ImGui::CalcTextSize("SORRY NOTHING").y*0.5;
|
||||
dl->AddText(textPos,ImGui::GetColorU32(uiColors[GUI_COLOR_TEXT]),"SORRY NOTHING");
|
||||
textPos.x-=ImGui::CalcTextSize(_("SORRY NOTHING")).x*0.5;
|
||||
textPos.y-=ImGui::CalcTextSize(_("SORRY NOTHING")).y*0.5;
|
||||
dl->AddText(textPos,ImGui::GetColorU32(uiColors[GUI_COLOR_TEXT]),_("SORRY NOTHING"));
|
||||
}
|
||||
|
||||
if (introSkip<0.5 || monitor) {
|
||||
|
@ -307,7 +307,7 @@ void FurnaceGUI::drawIntro(double introTime, bool monitor) {
|
|||
}
|
||||
|
||||
dl->AddRectFilled(top,bottom,ImGui::GetColorU32(ImVec4(0.0,0.0,0.0,CLAMP(introSkip*2.0,0.0,1.0)-CLAMP((introSkip-0.5)*4,0.0,1.0))));
|
||||
if (introSkip<0.5) dl->AddText(ImVec2(8.0*dpiScale,8.0*dpiScale),ImGui::GetColorU32(ImVec4(1.0,1.0,1.0,CLAMP(introSkip*8.0,0.0,1.0))),"hold to skip");
|
||||
if (introSkip<0.5) dl->AddText(ImVec2(8.0*dpiScale,8.0*dpiScale),ImGui::GetColorU32(ImVec4(1.0,1.0,1.0,CLAMP(introSkip*8.0,0.0,1.0))),_("hold to skip"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,11 +22,11 @@
|
|||
#include <imgui.h>
|
||||
|
||||
const char* logLevels[5]={
|
||||
"ERROR",
|
||||
"warning",
|
||||
"info",
|
||||
"debug",
|
||||
"trace"
|
||||
_N("ERROR"),
|
||||
_N("warning"),
|
||||
_N("info"),
|
||||
_N("debug"),
|
||||
_N("trace")
|
||||
};
|
||||
|
||||
FurnaceGUIColors logColors[5]={
|
||||
|
@ -45,9 +45,9 @@ void FurnaceGUI::drawLog() {
|
|||
}
|
||||
if (!logOpen) return;
|
||||
if (ImGui::Begin("Log Viewer",&logOpen,globalWinFlags)) {
|
||||
ImGui::Checkbox("Follow",&followLog);
|
||||
ImGui::Checkbox(_("Follow"),&followLog);
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("Level");
|
||||
ImGui::Text(_("Level"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
ImGui::Combo("##LogLevel",&logLevel,logLevels,5);
|
||||
|
@ -65,11 +65,11 @@ void FurnaceGUI::drawLog() {
|
|||
|
||||
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::TextUnformatted("time");
|
||||
ImGui::TextUnformatted(_("time"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::TextUnformatted("level");
|
||||
ImGui::TextUnformatted(_("level"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::TextUnformatted("message");
|
||||
ImGui::TextUnformatted(_("message"));
|
||||
|
||||
int pos=logPosition;
|
||||
for (int i=0; i<TA_LOG_SIZE; i++) {
|
||||
|
@ -80,7 +80,7 @@ void FurnaceGUI::drawLog() {
|
|||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%02d:%02d:%02d",logEntry.time.tm_hour,logEntry.time.tm_min,logEntry.time.tm_sec);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::TextColored(uiColors[logColors[logEntry.loglevel]],"%s",logLevels[logEntry.loglevel]);
|
||||
ImGui::TextColored(uiColors[logColors[logEntry.loglevel]],"%s",_(logLevels[logEntry.loglevel]));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::TextWrapped("%s",logEntry.text.c_str());
|
||||
}
|
||||
|
|
|
@ -143,7 +143,7 @@ void FurnaceGUI::drawMemory() {
|
|||
DivSample* sample=e->getSample(entry.asset);
|
||||
ImGui::Text("%d: %s",curHover,sample->name.c_str());
|
||||
if ((int)entry.type>=(int)DIV_MEMORY_BANK0) {
|
||||
ImGui::Text("bank %d",(int)entry.type-(int)DIV_MEMORY_BANK0);
|
||||
ImGui::Text(_("bank %d"),(int)entry.type-(int)DIV_MEMORY_BANK0);
|
||||
}
|
||||
if ((entry.end-entry.begin)>=1024 && settings.memUsageUnit==1) {
|
||||
ImGui::Text("%d-%d ($%x-$%x): %dK ($%x)",(int)entry.begin,(int)entry.end-1,(int)entry.begin,(int)entry.end-1,(int)(entry.end-entry.begin)>>10,(int)(entry.end-entry.begin));
|
||||
|
@ -172,8 +172,8 @@ void FurnaceGUI::drawMemory() {
|
|||
|
||||
if (!have) {
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY()+(ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeight()+ImGui::GetStyle().ItemSpacing.y)*0.5f);
|
||||
CENTER_TEXT("no chips with memory");
|
||||
ImGui::Text("no chips with memory");
|
||||
CENTER_TEXT(_("no chips with memory"));
|
||||
ImGui::Text(_("no chips with memory"));
|
||||
}
|
||||
}
|
||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_MEMORY;
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
#include "imgui_internal.h"
|
||||
|
||||
const char* portNamesStereo[2]={
|
||||
"left",
|
||||
"right"
|
||||
_N("left"),
|
||||
_N("right")
|
||||
};
|
||||
|
||||
ImVec2 FurnaceGUI::calcPortSetSize(String label, int ins, int outs) {
|
||||
|
@ -125,10 +125,10 @@ bool FurnaceGUI::portSet(String label, unsigned int portSetID, int ins, int outs
|
|||
|
||||
// input ports
|
||||
for (int i=0; i<ins; i++) {
|
||||
String portLabel="input";
|
||||
String portLabel=_("input");
|
||||
String subPortID=fmt::sprintf("subPort%.5x",(portSetID<<4)|i);
|
||||
if (ins==2) {
|
||||
portLabel=portNamesStereo[i&1];
|
||||
portLabel=_(portNamesStereo[i&1]);
|
||||
} else if (ins>2) {
|
||||
portLabel=fmt::sprintf("%d",i+1);
|
||||
}
|
||||
|
@ -165,10 +165,10 @@ bool FurnaceGUI::portSet(String label, unsigned int portSetID, int ins, int outs
|
|||
|
||||
// output ports
|
||||
for (int i=0; i<outs; i++) {
|
||||
String portLabel="output";
|
||||
String portLabel=_("output");
|
||||
String subPortID=fmt::sprintf("subPort%.5x",(portSetID<<4)|i);
|
||||
if (outs==2) {
|
||||
portLabel=portNamesStereo[i&1];
|
||||
portLabel=_(portNamesStereo[i&1]);
|
||||
} else if (outs>2) {
|
||||
portLabel=fmt::sprintf("%d",i+1);
|
||||
}
|
||||
|
@ -225,8 +225,8 @@ void FurnaceGUI::drawMixer() {
|
|||
}
|
||||
if (ImGui::Begin("Mixer",&mixerOpen,globalWinFlags|(settings.allowEditDocking?0:ImGuiWindowFlags_NoDocking))) {
|
||||
if (ImGui::BeginTabBar("MixerView")) {
|
||||
if (ImGui::BeginTabItem("Mixer")) {
|
||||
if (ImGui::SliderFloat("Master Volume",&e->song.masterVol,0,3,"%.2fx")) {
|
||||
if (ImGui::BeginTabItem(_("Mixer"))) {
|
||||
if (ImGui::SliderFloat(_("Master Volume"),&e->song.masterVol,0,3,"%.2fx")) {
|
||||
if (e->song.masterVol<0) e->song.masterVol=0;
|
||||
if (e->song.masterVol>3) e->song.masterVol=3;
|
||||
MARK_MODIFIED;
|
||||
|
@ -247,7 +247,7 @@ void FurnaceGUI::drawMixer() {
|
|||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("%d. %s",i+1,getSystemName(e->song.system[i]));
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Checkbox("Invert",&doInvert)) {
|
||||
if (ImGui::Checkbox(_("Invert"),&doInvert)) {
|
||||
e->song.systemVol[i]=-e->song.systemVol[i];
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
|
@ -265,7 +265,7 @@ void FurnaceGUI::drawMixer() {
|
|||
MARK_MODIFIED;
|
||||
} rightClickable
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Volume");
|
||||
ImGui::Text(_("Volume"));
|
||||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
|
@ -276,7 +276,7 @@ void FurnaceGUI::drawMixer() {
|
|||
MARK_MODIFIED;
|
||||
} rightClickable
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Panning");
|
||||
ImGui::Text(_("Panning"));
|
||||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
|
@ -287,7 +287,7 @@ void FurnaceGUI::drawMixer() {
|
|||
MARK_MODIFIED;
|
||||
} rightClickable
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Front/Rear");
|
||||
ImGui::Text(_("Front/Rear"));
|
||||
|
||||
ImGui::PopID();
|
||||
}
|
||||
|
@ -296,20 +296,20 @@ void FurnaceGUI::drawMixer() {
|
|||
}
|
||||
ImGui::EndTabItem();
|
||||
}
|
||||
if (ImGui::BeginTabItem("Patchbay")) {
|
||||
if (ImGui::BeginTabItem(_("Patchbay"))) {
|
||||
std::map<unsigned int,ImVec2> portPos;
|
||||
|
||||
if (ImGui::BeginTable("PatchbayOptions",3)) {
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Checkbox("Automatic patchbay",&e->song.patchbayAuto)) {
|
||||
if (ImGui::Checkbox(_("Automatic patchbay"),&e->song.patchbayAuto)) {
|
||||
if (e->song.patchbayAuto) e->autoPatchbayP();
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Display hidden ports",&displayHiddenPorts);
|
||||
ImGui::Checkbox(_("Display hidden ports"),&displayHiddenPorts);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Checkbox("Display internal",&displayInternalPorts);
|
||||
ImGui::Checkbox(_("Display internal"),&displayInternalPorts);
|
||||
ImGui::EndTable();
|
||||
}
|
||||
|
||||
|
@ -319,7 +319,7 @@ void FurnaceGUI::drawMixer() {
|
|||
if (ImGui::BeginChild("Patchbay",ImVec2(0,0),true)) {
|
||||
ImDrawList* dl=ImGui::GetWindowDrawList();
|
||||
ImVec2 topPos=ImGui::GetCursorPos();
|
||||
ImVec2 sysSize=calcPortSetSize("System",displayHiddenPorts?DIV_MAX_OUTPUTS:e->getAudioDescGot().outChans,0);
|
||||
ImVec2 sysSize=calcPortSetSize(_("System"),displayHiddenPorts?DIV_MAX_OUTPUTS:e->getAudioDescGot().outChans,0);
|
||||
topPos.x+=ImGui::GetContentRegionAvail().x-sysSize.x;
|
||||
if (ImGui::GetContentRegionAvail().y>sysSize.y) topPos.y+=(ImGui::GetContentRegionAvail().y-sysSize.y)*0.5+ImGui::GetScrollY();
|
||||
|
||||
|
@ -351,7 +351,7 @@ void FurnaceGUI::drawMixer() {
|
|||
|
||||
// metronome/sample preview
|
||||
if (displayInternalPorts) {
|
||||
if (portSet("Sample Preview",0xffd,0,1,0,1,selectedSubPort,portPos)) {
|
||||
if (portSet(_("Sample Preview"),0xffd,0,1,0,1,selectedSubPort,portPos)) {
|
||||
selectedPortSet=0xffd;
|
||||
if (selectedSubPort>=0) {
|
||||
portDragActive=true;
|
||||
|
@ -364,7 +364,7 @@ void FurnaceGUI::drawMixer() {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (portSet("Metronome",0xffe,0,1,0,1,selectedSubPort,portPos)) {
|
||||
if (portSet(_("Metronome"),0xffe,0,1,0,1,selectedSubPort,portPos)) {
|
||||
selectedPortSet=0xffe;
|
||||
if (selectedSubPort>=0) {
|
||||
portDragActive=true;
|
||||
|
@ -380,7 +380,7 @@ void FurnaceGUI::drawMixer() {
|
|||
}
|
||||
|
||||
ImGui::SetCursorPos(topPos);
|
||||
if (portSet("System",0x1000,displayHiddenPorts?DIV_MAX_OUTPUTS:e->getAudioDescGot().outChans,0,e->getAudioDescGot().outChans,0,selectedSubPort,portPos)) {
|
||||
if (portSet(_("System"),0x1000,displayHiddenPorts?DIV_MAX_OUTPUTS:e->getAudioDescGot().outChans,0,e->getAudioDescGot().outChans,0,selectedSubPort,portPos)) {
|
||||
selectedPortSet=0x1000;
|
||||
if (selectedSubPort>=0) {
|
||||
portDragActive=true;
|
||||
|
@ -443,7 +443,7 @@ void FurnaceGUI::drawMixer() {
|
|||
}
|
||||
}
|
||||
if (ImGui::BeginPopup("SubPortOptions",ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings)) {
|
||||
if (ImGui::MenuItem("disconnect all")) {
|
||||
if (ImGui::MenuItem(_("disconnect all"))) {
|
||||
e->patchDisconnectAll(selectedPortSet);
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
|
|
|
@ -119,8 +119,8 @@ void FurnaceGUI::drawNewSong() {
|
|||
std::vector<int> sysDefStack;
|
||||
|
||||
ImGui::PushFont(bigFont);
|
||||
ImGui::SetCursorPosX((ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Choose a System!").x)*0.5);
|
||||
ImGui::Text("Choose a System!");
|
||||
ImGui::SetCursorPosX((ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize(_("Choose a System!")).x)*0.5);
|
||||
ImGui::Text(_("Choose a System!"));
|
||||
ImGui::PopFont();
|
||||
|
||||
ImVec2 avail=ImGui::GetContentRegionAvail();
|
||||
|
@ -130,7 +130,7 @@ void FurnaceGUI::drawNewSong() {
|
|||
if (newSongFirstFrame)
|
||||
ImGui::SetKeyboardFocusHere();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::InputTextWithHint("##SysSearch","Search...",&newSongQuery)) {
|
||||
if (ImGui::InputTextWithHint("##SysSearch",_("Search..."),&newSongQuery)) {
|
||||
String lowerCase=newSongQuery;
|
||||
for (char& i: lowerCase) {
|
||||
if (i>='A' && i<='Z') i+='a'-'A';
|
||||
|
@ -176,9 +176,9 @@ void FurnaceGUI::drawNewSong() {
|
|||
if (newSongQuery.empty()) {
|
||||
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Categories");
|
||||
ImGui::Text(_("Categories"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Systems");
|
||||
ImGui::Text(_("Systems"));
|
||||
}
|
||||
|
||||
ImGui::TableNextRow();
|
||||
|
@ -207,9 +207,9 @@ void FurnaceGUI::drawNewSong() {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
if (newSongQuery.empty()) {
|
||||
ImGui::Text("no systems here yet!");
|
||||
ImGui::Text(_("no systems here yet!"));
|
||||
} else {
|
||||
ImGui::Text("no results");
|
||||
ImGui::Text(_("no results"));
|
||||
}
|
||||
} else {
|
||||
bool alreadyHover=false;
|
||||
|
@ -225,9 +225,9 @@ void FurnaceGUI::drawNewSong() {
|
|||
}
|
||||
ImGui::EndChild();
|
||||
|
||||
if (ImGui::Button("I'm feeling lucky")) {
|
||||
if (ImGui::Button(_("I'm feeling lucky"))) {
|
||||
if (sysCategories.size()==0) {
|
||||
showError("no categories available! what in the world.");
|
||||
showError(_("no categories available! what in the world."));
|
||||
ImGui::CloseCurrentPopup();
|
||||
} else {
|
||||
int tries=0;
|
||||
|
@ -262,7 +262,7 @@ void FurnaceGUI::drawNewSong() {
|
|||
}
|
||||
|
||||
if (tries>=50) {
|
||||
showError("it appears you're extremely lucky today!");
|
||||
showError(_("it appears you're extremely lucky today!"));
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
}
|
||||
|
@ -270,7 +270,7 @@ void FurnaceGUI::drawNewSong() {
|
|||
|
||||
ImGui::SameLine();
|
||||
|
||||
if (ImGui::Button("Cancel") || ImGui::IsKeyPressed(ImGuiKey_Escape)) {
|
||||
if (ImGui::Button(_("Cancel")) || ImGui::IsKeyPressed(ImGuiKey_Escape)) {
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ void FurnaceGUI::drawOrderButtons() {
|
|||
doAction(GUI_ACTION_ORDERS_ADD);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Add new order");
|
||||
ImGui::SetTooltip(_("Add new order"));
|
||||
}
|
||||
NEXT_BUTTON;
|
||||
|
||||
|
@ -122,7 +122,7 @@ void FurnaceGUI::drawOrderButtons() {
|
|||
}
|
||||
popDestColor();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Remove order");
|
||||
ImGui::SetTooltip(_("Remove order"));
|
||||
}
|
||||
NEXT_BUTTON;
|
||||
|
||||
|
@ -134,7 +134,7 @@ void FurnaceGUI::drawOrderButtons() {
|
|||
doAction(GUI_ACTION_ORDERS_DEEP_CLONE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Duplicate order (right-click to deep clone)");
|
||||
ImGui::SetTooltip(_("Duplicate order (right-click to deep clone)"));
|
||||
}
|
||||
NEXT_BUTTON;
|
||||
|
||||
|
@ -143,7 +143,7 @@ void FurnaceGUI::drawOrderButtons() {
|
|||
doAction(GUI_ACTION_ORDERS_MOVE_UP);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move order up");
|
||||
ImGui::SetTooltip(_("Move order up"));
|
||||
}
|
||||
NEXT_BUTTON;
|
||||
|
||||
|
@ -152,7 +152,7 @@ void FurnaceGUI::drawOrderButtons() {
|
|||
doAction(GUI_ACTION_ORDERS_MOVE_DOWN);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move order down");
|
||||
ImGui::SetTooltip(_("Move order down"));
|
||||
}
|
||||
NEXT_BUTTON;
|
||||
|
||||
|
@ -164,7 +164,7 @@ void FurnaceGUI::drawOrderButtons() {
|
|||
doAction(GUI_ACTION_ORDERS_DEEP_CLONE_END);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Place copy of current order at end of song (right-click to deep clone)");
|
||||
ImGui::SetTooltip(_("Place copy of current order at end of song (right-click to deep clone)"));
|
||||
}
|
||||
NEXT_BUTTON;
|
||||
|
||||
|
@ -174,9 +174,9 @@ void FurnaceGUI::drawOrderButtons() {
|
|||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
if (changeAllOrders) {
|
||||
ImGui::SetTooltip("Order change mode: entire row");
|
||||
ImGui::SetTooltip(_("Order change mode: entire row"));
|
||||
} else {
|
||||
ImGui::SetTooltip("Order change mode: one");
|
||||
ImGui::SetTooltip(_("Order change mode: one"));
|
||||
}
|
||||
}
|
||||
NEXT_BUTTON;
|
||||
|
@ -202,13 +202,13 @@ void FurnaceGUI::drawOrderButtons() {
|
|||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
if (orderEditMode==3) {
|
||||
ImGui::SetTooltip("Order edit mode: Select and type (scroll vertically)");
|
||||
ImGui::SetTooltip(_("Order edit mode: Select and type (scroll vertically)"));
|
||||
} else if (orderEditMode==2) {
|
||||
ImGui::SetTooltip("Order edit mode: Select and type (scroll horizontally)");
|
||||
ImGui::SetTooltip(_("Order edit mode: Select and type (scroll horizontally)"));
|
||||
} else if (orderEditMode==1) {
|
||||
ImGui::SetTooltip("Order edit mode: Select and type (don't scroll)");
|
||||
ImGui::SetTooltip(_("Order edit mode: Select and type (don't scroll)"));
|
||||
} else {
|
||||
ImGui::SetTooltip("Order edit mode: Click to change");
|
||||
ImGui::SetTooltip(_("Order edit mode: Click to change"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -173,7 +173,7 @@ void FurnaceGUI::drawOsc() {
|
|||
if (oscZoom>2.0) oscZoom=2.0;
|
||||
} rightClickable
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("zoom: %.2fx (%.1fdB)",oscZoom,20.0*log10(oscZoom*2.0));
|
||||
ImGui::SetTooltip(_("zoom: %.2fx (%.1fdB)"),oscZoom,20.0*log10(oscZoom*2.0));
|
||||
}
|
||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Middle)) {
|
||||
oscZoom=0.5;
|
||||
|
@ -184,7 +184,7 @@ void FurnaceGUI::drawOsc() {
|
|||
if (oscWindowSize>100.0) oscWindowSize=100.0;
|
||||
} rightClickable
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("window size: %.1fms",oscWindowSize);
|
||||
ImGui::SetTooltip(_("window size: %.1fms"),oscWindowSize);
|
||||
}
|
||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Middle)) {
|
||||
oscWindowSize=20.0;
|
||||
|
@ -382,7 +382,7 @@ void FurnaceGUI::drawOsc() {
|
|||
float val=20.0*log10(2.0*fabs(0.5-((ImGui::GetMousePos().y-inRect.Min.y)/(inRect.Max.y-inRect.Min.y))));
|
||||
if (val>0.0f) val=0.0f;
|
||||
if (val<=-INFINITY) {
|
||||
ImGui::SetTooltip("(-Infinity)dB");
|
||||
ImGui::SetTooltip(_("(-Infinity)dB"));
|
||||
} else {
|
||||
ImGui::SetTooltip("%.1fdB",val);
|
||||
}
|
||||
|
|
|
@ -33,28 +33,28 @@ void FurnaceGUI::drawPatManager() {
|
|||
unsigned char isUsed[DIV_MAX_PATTERNS];
|
||||
bool isNull[DIV_MAX_PATTERNS];
|
||||
if (ImGui::Begin("Pattern Manager",&patManagerOpen,globalWinFlags)) {
|
||||
if (ImGui::Button("De-duplicate patterns")) {
|
||||
if (ImGui::Button(_("De-duplicate patterns"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->curSubSong->optimizePatterns();
|
||||
});
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Re-arrange patterns")) {
|
||||
if (ImGui::Button(_("Re-arrange patterns"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->curSubSong->rearrangePatterns();
|
||||
});
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Sort orders")) {
|
||||
if (ImGui::Button(_("Sort orders"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->curSubSong->sortOrders();
|
||||
});
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Make patterns unique")) {
|
||||
if (ImGui::Button(_("Make patterns unique"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->curSubSong->makePatUnique();
|
||||
});
|
||||
|
@ -100,9 +100,9 @@ void FurnaceGUI::drawPatManager() {
|
|||
ImGui::PushFont(mainFont);
|
||||
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
||||
if (isNull[k]) {
|
||||
ImGui::SetTooltip("Pattern %.2X\n- not allocated",k);
|
||||
ImGui::SetTooltip(_("Pattern %.2X\n- not allocated"),k);
|
||||
} else {
|
||||
ImGui::SetTooltip("Pattern %.2X\n- use count: %d (%.0f%%)\n\nright-click to erase",k,isUsed[k],100.0*(double)isUsed[k]/(double)e->curSubSong->ordersLen);
|
||||
ImGui::SetTooltip(_("Pattern %.2X\n- use count: %d (%.0f%%)\n\nright-click to erase"),k,isUsed[k],100.0*(double)isUsed[k]/(double)e->curSubSong->ordersLen);
|
||||
}
|
||||
ImGui::PopStyleColor();
|
||||
ImGui::PopFont();
|
||||
|
|
|
@ -465,7 +465,7 @@ void FurnaceGUI::drawPattern() {
|
|||
ImDrawList* tdl=NULL;
|
||||
|
||||
if (chans<1) {
|
||||
ImGui::Text("there aren't any channels to show.");
|
||||
ImGui::Text(_("there aren't any channels to show."));
|
||||
} else if (ImGui::BeginTable("PatternView",displayChans+2,ImGuiTableFlags_BordersInnerV|ImGuiTableFlags_ScrollX|ImGuiTableFlags_ScrollY|ImGuiTableFlags_NoPadInnerX|ImGuiTableFlags_NoBordersInFrozenArea|((settings.cursorFollowsWheel || wheelCalmDown)?ImGuiTableFlags_NoScrollWithMouse:0))) {
|
||||
ImGui::TableSetupColumn("pos",ImGuiTableColumnFlags_WidthFixed);
|
||||
char chanID[2048];
|
||||
|
@ -489,7 +489,7 @@ void FurnaceGUI::drawPattern() {
|
|||
ImGui::OpenPopup("PatternOpt");
|
||||
}
|
||||
if (ImGui::IsItemHovered() && !mobileUI) {
|
||||
ImGui::SetTooltip("click for pattern options (effect columns/pattern names/visualizer)");
|
||||
ImGui::SetTooltip(_("click for pattern options (effect columns/pattern names/visualizer)"));
|
||||
}
|
||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
||||
fancyPattern=!fancyPattern;
|
||||
|
@ -501,12 +501,12 @@ void FurnaceGUI::drawPattern() {
|
|||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding,origWinPadding);
|
||||
ImGui::PushFont(mainFont);
|
||||
if (ImGui::BeginPopup("PatternOpt",ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings)) {
|
||||
ImGui::Text("Options:");
|
||||
ImGui::Text(_("Options:"));
|
||||
ImGui::Indent();
|
||||
ImGui::Checkbox("Effect columns/collapse",&patExtraButtons);
|
||||
ImGui::Checkbox("Pattern names",&patChannelNames);
|
||||
ImGui::Checkbox("Channel group hints",&patChannelPairs);
|
||||
if (ImGui::Checkbox("Visualizer",&fancyPattern)) {
|
||||
ImGui::Checkbox(_("Effect columns/collapse"),&patExtraButtons);
|
||||
ImGui::Checkbox(_("Pattern names"),&patChannelNames);
|
||||
ImGui::Checkbox(_("Channel group hints"),&patChannelPairs);
|
||||
if (ImGui::Checkbox(_("Visualizer"),&fancyPattern)) {
|
||||
inhibitMenu=true;
|
||||
e->enableCommandStream(fancyPattern);
|
||||
e->getCommandStream(cmdStream);
|
||||
|
@ -514,19 +514,19 @@ void FurnaceGUI::drawPattern() {
|
|||
}
|
||||
ImGui::Unindent();
|
||||
|
||||
ImGui::Text("Channel status:");
|
||||
ImGui::Text(_("Channel status:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("No##_PCS0",patChannelHints==0)) {
|
||||
if (ImGui::RadioButton(_("No##_PCS0"),patChannelHints==0)) {
|
||||
patChannelHints=0;
|
||||
}
|
||||
if (ImGui::RadioButton("Yes##_PCS1",patChannelHints==1)) {
|
||||
if (ImGui::RadioButton(_("Yes##_PCS1"),patChannelHints==1)) {
|
||||
patChannelHints=1;
|
||||
}
|
||||
/*
|
||||
if (ImGui::RadioButton("Regular##_PCS2",patChannelHints==2)) {
|
||||
if (ImGui::RadioButton(_("Regular##_PCS2"),patChannelHints==2)) {
|
||||
patChannelHints=2;
|
||||
}
|
||||
if (ImGui::RadioButton("Detailed##_PCS3",patChannelHints==3)) {
|
||||
if (ImGui::RadioButton(_("Detailed##_PCS3"),patChannelHints==3)) {
|
||||
patChannelHints=3;
|
||||
}*/
|
||||
ImGui::Unindent();
|
||||
|
@ -1417,11 +1417,11 @@ void FurnaceGUI::drawPattern() {
|
|||
if (tdl!=NULL && failedNoteOn) {
|
||||
ImVec2 winCenter=ImGui::GetWindowPos()+ImGui::GetWindowSize()*0.5f;
|
||||
ImGui::PushFont(bigFont);
|
||||
ImVec2 warnHeadSize=ImGui::CalcTextSize("WARNING!!");
|
||||
ImVec2 warnHeadSize=ImGui::CalcTextSize(_("WARNING!!"));
|
||||
ImGui::PopFont();
|
||||
ImVec2 warnTextSize1=ImGui::CalcTextSize("this instrument cannot be previewed because");
|
||||
ImVec2 warnTextSize2=ImGui::CalcTextSize("none of the chips can play it");
|
||||
ImVec2 warnTextSize3=ImGui::CalcTextSize("your instrument is in peril!! be careful...");
|
||||
ImVec2 warnTextSize1=ImGui::CalcTextSize(_("this instrument cannot be previewed because"));
|
||||
ImVec2 warnTextSize2=ImGui::CalcTextSize(_("none of the chips can play it"));
|
||||
ImVec2 warnTextSize3=ImGui::CalcTextSize(_("your instrument is in peril!! be careful..."));
|
||||
|
||||
float maxTextSize=warnHeadSize.x;
|
||||
if (warnTextSize1.x>maxTextSize) maxTextSize=warnTextSize1.x;
|
||||
|
@ -1449,28 +1449,28 @@ void FurnaceGUI::drawPattern() {
|
|||
MAX(1,40*dpiScale),
|
||||
ImVec2(winCenter.x-warnHeadSize.x*0.5,whereY),
|
||||
ImGui::GetColorU32(ImGuiCol_Text),
|
||||
"WARNING!!"
|
||||
_("WARNING!!")
|
||||
);
|
||||
whereY+=warnHeadSize.y;
|
||||
|
||||
tdl->AddText(
|
||||
ImVec2(winCenter.x-warnTextSize1.x*0.5,whereY),
|
||||
ImGui::GetColorU32(ImGuiCol_Text),
|
||||
"this instrument cannot be previewed because"
|
||||
_("this instrument cannot be previewed because")
|
||||
);
|
||||
whereY+=warnTextSize1.y;
|
||||
|
||||
tdl->AddText(
|
||||
ImVec2(winCenter.x-warnTextSize2.x*0.5,whereY),
|
||||
ImGui::GetColorU32(ImGuiCol_Text),
|
||||
"none of the chips can play it"
|
||||
_("none of the chips can play it")
|
||||
);
|
||||
whereY+=warnTextSize2.y;
|
||||
|
||||
tdl->AddText(
|
||||
ImVec2(winCenter.x-warnTextSize3.x*0.5,whereY),
|
||||
ImGui::GetColorU32(ImGuiCol_Text),
|
||||
"your instrument is in peril!! be careful..."
|
||||
_("your instrument is in peril!! be careful...")
|
||||
);
|
||||
whereY+=warnTextSize3.y;
|
||||
}
|
||||
|
@ -1759,7 +1759,5 @@ void FurnaceGUI::drawPattern() {
|
|||
}
|
||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_PATTERN;
|
||||
ImGui::End();
|
||||
//int delta1=SDL_GetPerformanceCounter();
|
||||
//logV("render time: %dµs",(delta1-delta0)/(SDL_GetPerformanceFrequency()/1000000));
|
||||
}
|
||||
|
||||
|
|
|
@ -100,38 +100,38 @@ void FurnaceGUI::drawPiano() {
|
|||
ImGui::SameLine();
|
||||
ImGui::Button(ICON_FA_ELLIPSIS_V "##PianoOptions",optionSize);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Options");
|
||||
ImGui::SetTooltip(_("Options"));
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("PianoOptions",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
ImGui::Text("Key layout:");
|
||||
ImGui::Text(_("Key layout:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("Automatic",pianoView==PIANO_LAYOUT_AUTOMATIC)) {
|
||||
if (ImGui::RadioButton(_("Automatic"),pianoView==PIANO_LAYOUT_AUTOMATIC)) {
|
||||
pianoView=PIANO_LAYOUT_AUTOMATIC;
|
||||
}
|
||||
if (ImGui::RadioButton("Standard",pianoView==PIANO_LAYOUT_STANDARD)) {
|
||||
if (ImGui::RadioButton(_("Standard"),pianoView==PIANO_LAYOUT_STANDARD)) {
|
||||
pianoView=PIANO_LAYOUT_STANDARD;
|
||||
}
|
||||
if (ImGui::RadioButton("Continuous",pianoView==PIANO_LAYOUT_CONTINUOUS)) {
|
||||
if (ImGui::RadioButton(_("Continuous"),pianoView==PIANO_LAYOUT_CONTINUOUS)) {
|
||||
pianoView=PIANO_LAYOUT_CONTINUOUS;
|
||||
}
|
||||
ImGui::Unindent();
|
||||
ImGui::Text("Value input pad:");
|
||||
ImGui::Text(_("Value input pad:"));
|
||||
ImGui::Indent();
|
||||
if (ImGui::RadioButton("Disabled",pianoInputPadMode==PIANO_INPUT_PAD_DISABLE)) {
|
||||
if (ImGui::RadioButton(_("Disabled"),pianoInputPadMode==PIANO_INPUT_PAD_DISABLE)) {
|
||||
pianoInputPadMode=PIANO_INPUT_PAD_DISABLE;
|
||||
}
|
||||
if (ImGui::RadioButton("Replace piano",pianoInputPadMode==PIANO_INPUT_PAD_REPLACE)) {
|
||||
if (ImGui::RadioButton(_("Replace piano"),pianoInputPadMode==PIANO_INPUT_PAD_REPLACE)) {
|
||||
pianoInputPadMode=PIANO_INPUT_PAD_REPLACE;
|
||||
}
|
||||
if (ImGui::RadioButton("Split (automatic)",pianoInputPadMode==PIANO_INPUT_PAD_SPLIT_AUTO)) {
|
||||
if (ImGui::RadioButton(_("Split (automatic)"),pianoInputPadMode==PIANO_INPUT_PAD_SPLIT_AUTO)) {
|
||||
pianoInputPadMode=PIANO_INPUT_PAD_SPLIT_AUTO;
|
||||
}
|
||||
if (ImGui::RadioButton("Split (always visible)",pianoInputPadMode==PIANO_INPUT_PAD_SPLIT_VISIBLE)) {
|
||||
if (ImGui::RadioButton(_("Split (always visible)"),pianoInputPadMode==PIANO_INPUT_PAD_SPLIT_VISIBLE)) {
|
||||
pianoInputPadMode=PIANO_INPUT_PAD_SPLIT_VISIBLE;
|
||||
}
|
||||
ImGui::Unindent();
|
||||
ImGui::Checkbox("Share play/edit offset/range",&pianoSharePosition);
|
||||
ImGui::Checkbox("Read-only (can't input notes)",&pianoReadonly);
|
||||
ImGui::Checkbox(_("Share play/edit offset/range"),&pianoSharePosition);
|
||||
ImGui::Checkbox(_("Read-only (can't input notes)"),&pianoReadonly);
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ void FurnaceGUI::drawRegView() {
|
|||
unsigned char* regPool=e->getRegisterPool(i,size,depth);
|
||||
unsigned short* regPoolW=(unsigned short*)regPool;
|
||||
if (regPool==NULL) {
|
||||
ImGui::Text("- no register pool available");
|
||||
ImGui::Text(_("- no register pool available"));
|
||||
} else {
|
||||
ImGui::PushFont(patFont);
|
||||
if (ImGui::BeginTable("Memory",17)) {
|
||||
|
|
|
@ -62,21 +62,21 @@ const double timeMultipliers[13]={
|
|||
#define MAX_RATE(_name,_x) \
|
||||
if (e->isPreviewingSample()) { \
|
||||
if ((int)e->getSamplePreviewRate()>(int)(_x)) { \
|
||||
SAMPLE_WARN(warnRate,fmt::sprintf("%s: maximum sample rate is %d",_name,(int)(_x))); \
|
||||
SAMPLE_WARN(warnRate,fmt::sprintf(_("%s: maximum sample rate is %d"),_name,(int)(_x))); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define MIN_RATE(_name,_x) \
|
||||
if (e->isPreviewingSample()) { \
|
||||
if ((int)e->getSamplePreviewRate()<(int)(_x)) { \
|
||||
SAMPLE_WARN(warnRate,fmt::sprintf("%s: minimum sample rate is %d",_name,(int)(_x))); \
|
||||
SAMPLE_WARN(warnRate,fmt::sprintf(_("%s: minimum sample rate is %d"),_name,(int)(_x))); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define EXACT_RATE(_name,_x) \
|
||||
if (e->isPreviewingSample()) { \
|
||||
if ((int)e->getSamplePreviewRate()!=(int)(_x)) { \
|
||||
SAMPLE_WARN(warnRate,fmt::sprintf("%s: sample rate must be %d",_name,(int)(_x))); \
|
||||
SAMPLE_WARN(warnRate,fmt::sprintf(_("%s: sample rate must be %d"),_name,(int)(_x))); \
|
||||
} \
|
||||
}
|
||||
|
||||
|
@ -96,8 +96,8 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
if (ImGui::Begin("Sample Editor",&sampleEditOpen,globalWinFlags|(settings.allowEditDocking?0:ImGuiWindowFlags_NoDocking))) {
|
||||
if (curSample<0 || curSample>=(int)e->song.sample.size()) {
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY()+(ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeightWithSpacing()*2.0f)*0.5f);
|
||||
CENTER_TEXT("no sample selected");
|
||||
ImGui::Text("no sample selected");
|
||||
CENTER_TEXT(_("no sample selected"));
|
||||
ImGui::Text(_("no sample selected"));
|
||||
if (ImGui::BeginTable("noAssetCenter",3)) {
|
||||
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch,0.5f);
|
||||
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed);
|
||||
|
@ -108,7 +108,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
ImGui::TableNextColumn();
|
||||
|
||||
if (e->song.sample.size()>0) {
|
||||
if (ImGui::BeginCombo("##SampleSelect","select one...")) {
|
||||
if (ImGui::BeginCombo("##SampleSelect",_("select one..."))) {
|
||||
if (ImGui::BeginTable("SampleSelCombo",1,ImGuiTableFlags_ScrollY)) {
|
||||
actualSampleList();
|
||||
ImGui::EndTable();
|
||||
|
@ -116,16 +116,16 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
ImGui::EndCombo();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::TextUnformatted("or");
|
||||
ImGui::TextUnformatted(_("or"));
|
||||
ImGui::SameLine();
|
||||
}
|
||||
if (ImGui::Button("Open")) {
|
||||
if (ImGui::Button(_("Open"))) {
|
||||
doAction(GUI_ACTION_SAMPLE_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_SAMPLE_LIST_ADD);
|
||||
}
|
||||
|
||||
|
@ -134,16 +134,16 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
} else {
|
||||
DivSample* sample=e->song.sample[curSample];
|
||||
String sampleType="Invalid";
|
||||
String sampleType=_("Invalid");
|
||||
if (sample->depth<DIV_SAMPLE_DEPTH_MAX) {
|
||||
if (sampleDepths[sample->depth]!=NULL) {
|
||||
sampleType=sampleDepths[sample->depth];
|
||||
}
|
||||
}
|
||||
String loopType="Invalid";
|
||||
String loopType=_("Invalid");
|
||||
if (sample->loopMode<DIV_SAMPLE_LOOP_MAX) {
|
||||
if (sampleLoopModes[sample->loopMode]!=NULL) {
|
||||
loopType=sampleLoopModes[sample->loopMode];
|
||||
loopType=_(sampleLoopModes[sample->loopMode]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -168,10 +168,10 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
doAction(GUI_ACTION_SAMPLE_LIST_OPEN_REPLACE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Open");
|
||||
ImGui::SetTooltip(_("Open"));
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("SampleEOpenOpt")) {
|
||||
if (ImGui::MenuItem("import raw...")) {
|
||||
if (ImGui::MenuItem(_("import raw..."))) {
|
||||
doAction((curSample>=0 && curSample<(int)e->song.sample.size())?GUI_ACTION_SAMPLE_LIST_OPEN_REPLACE_RAW:GUI_ACTION_SAMPLE_LIST_OPEN_RAW);
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
|
@ -181,10 +181,10 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
doAction(GUI_ACTION_SAMPLE_LIST_SAVE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Save");
|
||||
ImGui::SetTooltip(_("Save"));
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("SampleESaveOpt")) {
|
||||
if (ImGui::MenuItem("save raw...")) {
|
||||
if (ImGui::MenuItem(_("save raw..."))) {
|
||||
doAction(GUI_ACTION_SAMPLE_LIST_SAVE_RAW);
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
|
@ -192,7 +192,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::Text("Name");
|
||||
ImGui::Text(_("Name"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
ImGui::PushID(2+curSample);
|
||||
|
@ -226,18 +226,18 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
if (sample->loopStart&15) {
|
||||
int tryWith=(sample->loopStart+8)&(~15);
|
||||
if (tryWith>(int)sample->samples) tryWith-=16;
|
||||
String alignHint=fmt::sprintf("SNES: loop start must be a multiple of 16 (try with %d)",tryWith);
|
||||
String alignHint=fmt::sprintf(_("SNES: loop start must be a multiple of 16 (try with %d)"),tryWith);
|
||||
SAMPLE_WARN(warnLoopStart,alignHint);
|
||||
}
|
||||
if (sample->loopEnd&15) {
|
||||
int tryWith=(sample->loopEnd+8)&(~15);
|
||||
if (tryWith>(int)sample->samples) tryWith-=16;
|
||||
String alignHint=fmt::sprintf("SNES: loop end must be a multiple of 16 (try with %d)",tryWith);
|
||||
String alignHint=fmt::sprintf(_("SNES: loop end must be a multiple of 16 (try with %d)"),tryWith);
|
||||
SAMPLE_WARN(warnLoopEnd,alignHint);
|
||||
}
|
||||
}
|
||||
if (sample->samples&15) {
|
||||
SAMPLE_WARN(warnLength,"SNES: sample length will be padded to multiple of 16");
|
||||
SAMPLE_WARN(warnLength,_("SNES: sample length will be padded to multiple of 16"));
|
||||
}
|
||||
if (dispatch!=NULL) {
|
||||
MAX_RATE("SNES",dispatch->chipClock/8.0);
|
||||
|
@ -246,7 +246,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
case DIV_SYSTEM_QSOUND:
|
||||
if (sample->loop) {
|
||||
if (sample->loopEnd-sample->loopStart>32767) {
|
||||
SAMPLE_WARN(warnLoopPos,"QSound: loop cannot be longer than 32767 samples");
|
||||
SAMPLE_WARN(warnLoopPos,_("QSound: loop cannot be longer than 32767 samples"));
|
||||
}
|
||||
}
|
||||
if (sample->samples>65535) {
|
||||
|
@ -256,24 +256,24 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
case DIV_SYSTEM_NES:
|
||||
if (sample->loop) {
|
||||
if (sample->loopStart!=0 || sample->loopEnd!=(int)(sample->samples)) {
|
||||
SAMPLE_WARN(warnLoopPos,"NES: loop point ignored on DPCM (may only loop entire sample)");
|
||||
SAMPLE_WARN(warnLoopPos,_("NES: loop point ignored on DPCM (may only loop entire sample)"));
|
||||
}
|
||||
}
|
||||
if (sample->samples>32648) {
|
||||
SAMPLE_WARN(warnLength,"NES: maximum DPCM sample length is 32648");
|
||||
SAMPLE_WARN(warnLength,_("NES: maximum DPCM sample length is 32648"));
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_X1_010:
|
||||
if (sample->loop) {
|
||||
SAMPLE_WARN(warnLoop,"X1-010: samples can't loop");
|
||||
SAMPLE_WARN(warnLoop,_("X1-010: samples can't loop"));
|
||||
}
|
||||
if (sample->samples>131072) {
|
||||
SAMPLE_WARN(warnLength,"X1-010: maximum sample length is 131072");
|
||||
SAMPLE_WARN(warnLength,_("X1-010: maximum sample length is 131072"));
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_GA20:
|
||||
if (sample->loop) {
|
||||
SAMPLE_WARN(warnLoop,"GA20: samples can't loop");
|
||||
SAMPLE_WARN(warnLoop,_("GA20: samples can't loop"));
|
||||
}
|
||||
if (dispatch!=NULL) {
|
||||
MIN_RATE("GA20",dispatch->chipClock/1024);
|
||||
|
@ -284,10 +284,10 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
case DIV_SYSTEM_YM2608_CSM:
|
||||
if (sample->loop) {
|
||||
if (sample->loopStart!=0 || sample->loopEnd!=(int)(sample->samples)) {
|
||||
SAMPLE_WARN(warnLoopPos,"YM2608: loop point ignored on ADPCM (may only loop entire sample)");
|
||||
SAMPLE_WARN(warnLoopPos,_("YM2608: loop point ignored on ADPCM (may only loop entire sample)"));
|
||||
}
|
||||
if (sample->samples&511) {
|
||||
SAMPLE_WARN(warnLength,"YM2608: sample length will be padded to multiple of 512");
|
||||
SAMPLE_WARN(warnLength,_("YM2608: sample length will be padded to multiple of 512"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -297,16 +297,16 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
case DIV_SYSTEM_YM2610B:
|
||||
case DIV_SYSTEM_YM2610B_EXT:
|
||||
if (sample->loop) {
|
||||
SAMPLE_WARN(warnLoop,"YM2610: ADPCM-A samples can't loop");
|
||||
SAMPLE_WARN(warnLoop,_("YM2610: ADPCM-A samples can't loop"));
|
||||
if (sample->loopStart!=0 || sample->loopEnd!=(int)(sample->samples)) {
|
||||
SAMPLE_WARN(warnLoopPos,"YM2610: loop point ignored on ADPCM-B (may only loop entire sample)");
|
||||
SAMPLE_WARN(warnLoopPos,_("YM2610: loop point ignored on ADPCM-B (may only loop entire sample)"));
|
||||
}
|
||||
if (sample->samples&511) {
|
||||
SAMPLE_WARN(warnLength,"YM2610: sample length will be padded to multiple of 512");
|
||||
SAMPLE_WARN(warnLength,_("YM2610: sample length will be padded to multiple of 512"));
|
||||
}
|
||||
}
|
||||
if (sample->samples>2097152) {
|
||||
SAMPLE_WARN(warnLength,"YM2610: maximum ADPCM-A sample length is 2097152");
|
||||
SAMPLE_WARN(warnLength,_("YM2610: maximum ADPCM-A sample length is 2097152"));
|
||||
}
|
||||
if (dispatch!=NULL) {
|
||||
EXACT_RATE("YM2610 (ADPCM-A)",dispatch->chipClock/432);
|
||||
|
@ -315,24 +315,24 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
case DIV_SYSTEM_Y8950:
|
||||
if (sample->loop) {
|
||||
if (sample->loopStart!=0 || sample->loopEnd!=(int)(sample->samples)) {
|
||||
SAMPLE_WARN(warnLoopPos,"Y8950: loop point ignored on ADPCM (may only loop entire sample)");
|
||||
SAMPLE_WARN(warnLoopPos,_("Y8950: loop point ignored on ADPCM (may only loop entire sample)"));
|
||||
}
|
||||
if (sample->samples&511) {
|
||||
SAMPLE_WARN(warnLength,"Y8950: sample length will be padded to multiple of 512");
|
||||
SAMPLE_WARN(warnLength,_("Y8950: sample length will be padded to multiple of 512"));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_AMIGA:
|
||||
if (sample->loop) {
|
||||
if (sample->loopStart&1) {
|
||||
SAMPLE_WARN(warnLoopStart,"Amiga: loop start must be a multiple of 2");
|
||||
SAMPLE_WARN(warnLoopStart,_("Amiga: loop start must be a multiple of 2"));
|
||||
}
|
||||
if (sample->loopEnd&1) {
|
||||
SAMPLE_WARN(warnLoopEnd,"Amiga: loop end must be a multiple of 2");
|
||||
SAMPLE_WARN(warnLoopEnd,_("Amiga: loop end must be a multiple of 2"));
|
||||
}
|
||||
}
|
||||
if (sample->samples>131070) {
|
||||
SAMPLE_WARN(warnLength,"Amiga: maximum sample length is 131070");
|
||||
SAMPLE_WARN(warnLength,_("Amiga: maximum sample length is 131070"));
|
||||
}
|
||||
if (dispatch!=NULL) {
|
||||
MAX_RATE("Amiga",31250.0);
|
||||
|
@ -341,7 +341,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
case DIV_SYSTEM_SEGAPCM:
|
||||
case DIV_SYSTEM_SEGAPCM_COMPAT:
|
||||
if (sample->samples>65280) {
|
||||
SAMPLE_WARN(warnLength,"SegaPCM: maximum sample length is 65280");
|
||||
SAMPLE_WARN(warnLength,_("SegaPCM: maximum sample length is 65280"));
|
||||
}
|
||||
if (dispatch!=NULL) {
|
||||
MAX_RATE("SegaPCM",dispatch->chipClock/256);
|
||||
|
@ -350,16 +350,16 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
case DIV_SYSTEM_K053260:
|
||||
if (sample->loop) {
|
||||
if (sample->loopStart!=0 || sample->loopEnd!=(int)(sample->samples)) {
|
||||
SAMPLE_WARN(warnLoopPos,"K053260: loop point ignored (may only loop entire sample)");
|
||||
SAMPLE_WARN(warnLoopPos,_("K053260: loop point ignored (may only loop entire sample)"));
|
||||
}
|
||||
}
|
||||
if (sample->samples>65535) {
|
||||
SAMPLE_WARN(warnLength,"K053260: maximum sample length is 65535");
|
||||
SAMPLE_WARN(warnLength,_("K053260: maximum sample length is 65535"));
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_C140:
|
||||
if (sample->samples>65535) {
|
||||
SAMPLE_WARN(warnLength,"C140: maximum sample length is 65535");
|
||||
SAMPLE_WARN(warnLength,_("C140: maximum sample length is 65535"));
|
||||
}
|
||||
if (dispatch!=NULL) {
|
||||
MAX_RATE("C140",dispatch->rate);
|
||||
|
@ -368,14 +368,14 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
case DIV_SYSTEM_C219:
|
||||
if (sample->loop) {
|
||||
if (sample->loopStart&1) {
|
||||
SAMPLE_WARN(warnLoopStart,"C219: loop start must be a multiple of 2");
|
||||
SAMPLE_WARN(warnLoopStart,_("C219: loop start must be a multiple of 2"));
|
||||
}
|
||||
if (sample->loopEnd&1) {
|
||||
SAMPLE_WARN(warnLoopEnd,"C219: loop end must be a multiple of 2");
|
||||
SAMPLE_WARN(warnLoopEnd,_("C219: loop end must be a multiple of 2"));
|
||||
}
|
||||
}
|
||||
if (sample->samples>131072) {
|
||||
SAMPLE_WARN(warnLength,"C219: maximum sample length is 131072");
|
||||
SAMPLE_WARN(warnLength,_("C219: maximum sample length is 131072"));
|
||||
}
|
||||
if (dispatch!=NULL) {
|
||||
MAX_RATE("C219",dispatch->rate);
|
||||
|
@ -383,23 +383,23 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
break;
|
||||
case DIV_SYSTEM_MSM6295:
|
||||
if (sample->loop) {
|
||||
SAMPLE_WARN(warnLoop,"MSM6295: samples can't loop");
|
||||
SAMPLE_WARN(warnLoop,_("MSM6295: samples can't loop"));
|
||||
}
|
||||
if (sample->samples>129024) {
|
||||
SAMPLE_WARN(warnLength,"MSM6295: maximum bankswitched sample length is 129024");
|
||||
SAMPLE_WARN(warnLength,_("MSM6295: maximum bankswitched sample length is 129024"));
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_GBA_DMA:
|
||||
if (sample->loop) {
|
||||
if (sample->loopStart&3) {
|
||||
SAMPLE_WARN(warnLoopStart,"GBA DMA: loop start must be a multiple of 4");
|
||||
SAMPLE_WARN(warnLoopStart,_("GBA DMA: loop start must be a multiple of 4"));
|
||||
}
|
||||
if ((sample->loopEnd-sample->loopStart)&15) {
|
||||
SAMPLE_WARN(warnLoopEnd,"GBA DMA: loop length must be a multiple of 16");
|
||||
SAMPLE_WARN(warnLoopEnd,_("GBA DMA: loop length must be a multiple of 16"));
|
||||
}
|
||||
}
|
||||
if (sample->samples&15) {
|
||||
SAMPLE_WARN(warnLength,"GBA DMA: sample length will be padded to multiple of 16");
|
||||
SAMPLE_WARN(warnLength,_("GBA DMA: sample length will be padded to multiple of 16"));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -408,10 +408,10 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
if (e->song.system[i]!=DIV_SYSTEM_PCM_DAC) {
|
||||
if (e->song.system[i]==DIV_SYSTEM_ES5506) {
|
||||
if (sample->loopMode==DIV_SAMPLE_LOOP_BACKWARD) {
|
||||
SAMPLE_WARN(warnLoopMode,"ES5506: backward loop mode isn't supported");
|
||||
SAMPLE_WARN(warnLoopMode,_("ES5506: backward loop mode isn't supported"));
|
||||
}
|
||||
} else if (sample->loopMode!=DIV_SAMPLE_LOOP_FORWARD) {
|
||||
SAMPLE_WARN(warnLoopMode,"backward/ping-pong only supported in Generic PCM DAC\nping-pong also on ES5506");
|
||||
SAMPLE_WARN(warnLoopMode,_("backward/ping-pong only supported in Generic PCM DAC\nping-pong also on ES5506"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -441,26 +441,26 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
sampleInfo=!sampleInfo;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("Info");
|
||||
ImGui::Text(_("Info"));
|
||||
ImGui::TableNextColumn();
|
||||
pushToggleColors(!sampleCompatRate);
|
||||
if (ImGui::Button("Rate")) {
|
||||
if (ImGui::Button(_("Rate"))) {
|
||||
sampleCompatRate=false;
|
||||
}
|
||||
popToggleColors();
|
||||
ImGui::SameLine();
|
||||
pushToggleColors(sampleCompatRate);
|
||||
if (ImGui::Button("Compat Rate")) {
|
||||
if (ImGui::Button(_("Compat Rate"))) {
|
||||
sampleCompatRate=true;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("used in DefleMask-compatible sample mode (17xx), in where samples are mapped to an octave.");
|
||||
ImGui::SetTooltip(_("used in DefleMask-compatible sample mode (17xx), in where samples are mapped to an octave."));
|
||||
}
|
||||
popToggleColors();
|
||||
ImGui::TableNextColumn();
|
||||
bool doLoop=(sample->loop);
|
||||
pushWarningColor(!warnLoop.empty());
|
||||
String loopCheckboxName=(doLoop && (sample->loopEnd-sample->loopStart)>0)?fmt::sprintf("Loop (length: %d)##Loop",sample->loopEnd-sample->loopStart):String("Loop");
|
||||
String loopCheckboxName=(doLoop && (sample->loopEnd-sample->loopStart)>0)?fmt::sprintf(_("Loop (length: %d)##Loop"),sample->loopEnd-sample->loopStart):String(_("Loop"));
|
||||
if (ImGui::Checkbox(loopCheckboxName.c_str(),&doLoop)) { MARK_MODIFIED
|
||||
if (doLoop) {
|
||||
sample->loop=true;
|
||||
|
@ -484,21 +484,21 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
popWarningColor();
|
||||
if (ImGui::IsItemHovered() && (!warnLoop.empty() || sample->depth==DIV_SAMPLE_DEPTH_BRR)) {
|
||||
if (sample->depth==DIV_SAMPLE_DEPTH_BRR) {
|
||||
SAMPLE_WARN(warnLoop,"changing the loop in a BRR sample may result in glitches!");
|
||||
SAMPLE_WARN(warnLoop,_("changing the loop in a BRR sample may result in glitches!"));
|
||||
}
|
||||
ImGui::SetTooltip("%s",warnLoop.c_str());
|
||||
}
|
||||
|
||||
if (selColumns>1) {
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Chips");
|
||||
ImGui::Text(_("Chips"));
|
||||
}
|
||||
|
||||
if (sampleInfo) {
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Type");
|
||||
ImGui::Text(_("Type"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::BeginCombo("##SampleType",sampleType.c_str())) {
|
||||
|
@ -526,7 +526,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
if (sample->depth==DIV_SAMPLE_DEPTH_BRR || isThereSNES) {
|
||||
bool be=sample->brrEmphasis;
|
||||
if (ImGui::Checkbox("BRR emphasis",&be)) {
|
||||
if (ImGui::Checkbox(_("BRR emphasis"),&be)) {
|
||||
sample->prepareUndo(true);
|
||||
sample->brrEmphasis=be;
|
||||
e->renderSamplesP(curSample);
|
||||
|
@ -535,15 +535,15 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
if (sample->depth==DIV_SAMPLE_DEPTH_BRR) {
|
||||
ImGui::SetTooltip("this is a BRR sample.\nenabling this option will muffle it (only affects non-SNES chips).");
|
||||
ImGui::SetTooltip(_("this is a BRR sample.\nenabling this option will muffle it (only affects non-SNES chips)."));
|
||||
} else {
|
||||
ImGui::SetTooltip("enable this option to slightly boost high frequencies\nto compensate for the SNES' Gaussian filter's muffle.");
|
||||
ImGui::SetTooltip(_("enable this option to slightly boost high frequencies\nto compensate for the SNES' Gaussian filter's muffle."));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sample->depth!=DIV_SAMPLE_DEPTH_8BIT && e->getSampleFormatMask()&(1L<<DIV_SAMPLE_DEPTH_8BIT)) {
|
||||
bool di=sample->dither;
|
||||
if (ImGui::Checkbox("8-bit dither",&di)) {
|
||||
if (ImGui::Checkbox(_("8-bit dither"),&di)) {
|
||||
sample->prepareUndo(true);
|
||||
sample->dither=di;
|
||||
e->renderSamplesP(curSample);
|
||||
|
@ -551,7 +551,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
MARK_MODIFIED;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("dither the sample when used on a chip that only supports 8-bit samples.");
|
||||
ImGui::SetTooltip(_("dither the sample when used on a chip that only supports 8-bit samples."));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -587,7 +587,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Note");
|
||||
ImGui::Text(_("Note"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::BeginCombo("##SampleNote",noteNames[sampleNoteCoarse+60])) {
|
||||
|
@ -692,7 +692,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
|
||||
pushWarningColor(!warnLoopPos.empty() || !warnLoopStart.empty());
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Start");
|
||||
ImGui::Text(_("Start"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::InputInt("##LoopStartPosition",&sample->loopStart,1,16)) { MARK_MODIFIED
|
||||
|
@ -713,7 +713,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
if (ImGui::IsItemHovered() && (!warnLoopPos.empty() || !warnLoopStart.empty() || sample->depth==DIV_SAMPLE_DEPTH_BRR)) {
|
||||
if (ImGui::BeginTooltip()) {
|
||||
if (sample->depth==DIV_SAMPLE_DEPTH_BRR) {
|
||||
ImGui::Text("changing the loop in a BRR sample may result in glitches!");
|
||||
ImGui::Text(_("changing the loop in a BRR sample may result in glitches!"));
|
||||
}
|
||||
if (!warnLoopStart.empty()) {
|
||||
ImGui::Text("%s",warnLoopStart.c_str());
|
||||
|
@ -728,7 +728,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
|
||||
pushWarningColor(!warnLoopPos.empty() || !warnLoopEnd.empty());
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("End");
|
||||
ImGui::Text(_("End"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::InputInt("##LoopEndPosition",&sample->loopEnd,1,16)) { MARK_MODIFIED
|
||||
|
@ -749,7 +749,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
if (ImGui::IsItemHovered() && (!warnLoopPos.empty() || !warnLoopEnd.empty() || sample->depth==DIV_SAMPLE_DEPTH_BRR)) {
|
||||
if (ImGui::BeginTooltip()) {
|
||||
if (sample->depth==DIV_SAMPLE_DEPTH_BRR) {
|
||||
ImGui::Text("changing the loop in a BRR sample may result in glitches!");
|
||||
ImGui::Text(_("changing the loop in a BRR sample may result in glitches!"));
|
||||
}
|
||||
if (!warnLoopEnd.empty()) {
|
||||
ImGui::Text("%s",warnLoopEnd.c_str());
|
||||
|
@ -838,13 +838,13 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
String toolText;
|
||||
if (memName==NULL) {
|
||||
toolText=fmt::sprintf("%s\n%d bytes free",e->getSystemName(e->song.system[j]),totalFree);
|
||||
toolText=fmt::sprintf(_("%s\n%d bytes free"),e->getSystemName(e->song.system[j]),totalFree);
|
||||
} else {
|
||||
toolText=fmt::sprintf("%s (%s)\n%d bytes free",e->getSystemName(e->song.system[j]),memName,totalFree);
|
||||
toolText=fmt::sprintf(_("%s (%s)\n%d bytes free"),e->getSystemName(e->song.system[j]),memName,totalFree);
|
||||
}
|
||||
|
||||
if (isMemWarning[i][j] && sample->renderOn[i][j]) {
|
||||
toolText+="\n\nnot enough memory for this sample!";
|
||||
toolText+=_("\n\nnot enough memory for this sample!");
|
||||
}
|
||||
|
||||
ImGui::SetTooltip("%s",toolText.c_str());
|
||||
|
@ -868,7 +868,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
popToggleColors();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Edit mode: Select");
|
||||
ImGui::SetTooltip(_("Edit mode: Select"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
pushToggleColors(sampleDragMode);
|
||||
|
@ -877,7 +877,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
popToggleColors();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Edit mode: Draw");
|
||||
ImGui::SetTooltip(_("Edit mode: Draw"));
|
||||
}
|
||||
ImGui::BeginDisabled(sample->depth!=DIV_SAMPLE_DEPTH_8BIT && sample->depth!=DIV_SAMPLE_DEPTH_16BIT);
|
||||
sameLineMaybe();
|
||||
|
@ -888,22 +888,22 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
resizeSize=sample->samples;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Resize");
|
||||
ImGui::SetTooltip(_("Resize"));
|
||||
}
|
||||
if (openSampleResizeOpt) {
|
||||
openSampleResizeOpt=false;
|
||||
ImGui::OpenPopup("SResizeOpt");
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("SResizeOpt",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
if (ImGui::InputInt("Samples",&resizeSize,1,64)) {
|
||||
if (ImGui::InputInt(_("Samples"),&resizeSize,1,64)) {
|
||||
if (resizeSize<0) resizeSize=0;
|
||||
if (resizeSize>16777215) resizeSize=16777215;
|
||||
}
|
||||
if (ImGui::Button("Resize")) {
|
||||
if (ImGui::Button(_("Resize"))) {
|
||||
sample->prepareUndo(true);
|
||||
e->lockEngine([this,sample]() {
|
||||
if (!sample->resize(resizeSize)) {
|
||||
showError("couldn't resize! make sure your sample is 8 or 16-bit.");
|
||||
showError(_("couldn't resize! make sure your sample is 8 or 16-bit."));
|
||||
}
|
||||
e->renderSamples(curSample);
|
||||
});
|
||||
|
@ -923,14 +923,14 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
resampleTarget=targetRate;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Resample");
|
||||
ImGui::SetTooltip(_("Resample"));
|
||||
}
|
||||
if (openSampleResampleOpt) {
|
||||
openSampleResampleOpt=false;
|
||||
ImGui::OpenPopup("SResampleOpt");
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("SResampleOpt",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
ImGui::Text("Rate");
|
||||
ImGui::Text(_("Rate"));
|
||||
if (ImGui::InputDouble("##SRRate",&resampleTarget,1.0,50.0,"%g")) {
|
||||
if (resampleTarget<0) resampleTarget=0;
|
||||
if (resampleTarget>96000) resampleTarget=96000;
|
||||
|
@ -948,17 +948,17 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
resampleTarget*=2.0;
|
||||
}
|
||||
double factor=resampleTarget/(double)targetRate;
|
||||
if (ImGui::InputDouble("Factor",&factor,0.125,0.5,"%g")) {
|
||||
if (ImGui::InputDouble(_("Factor"),&factor,0.125,0.5,"%g")) {
|
||||
resampleTarget=(double)targetRate*factor;
|
||||
if (resampleTarget<0) resampleTarget=0;
|
||||
if (resampleTarget>96000) resampleTarget=96000;
|
||||
}
|
||||
ImGui::Combo("Filter",&resampleStrat,resampleStrats,6);
|
||||
if (ImGui::Button("Resample")) {
|
||||
ImGui::Combo(_("Filter"),&resampleStrat,resampleStrats,6);
|
||||
if (ImGui::Button(_("Resample"))) {
|
||||
sample->prepareUndo(true);
|
||||
e->lockEngine([this,sample,targetRate]() {
|
||||
if (!sample->resample(targetRate,resampleTarget,resampleStrat)) {
|
||||
showError("couldn't resample! make sure your sample is 8 or 16-bit.");
|
||||
showError(_("couldn't resample! make sure your sample is 8 or 16-bit."));
|
||||
}
|
||||
e->renderSamples(curSample);
|
||||
});
|
||||
|
@ -979,35 +979,35 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
doUndoSample();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Undo");
|
||||
ImGui::SetTooltip(_("Undo"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FA_REPEAT "##SRedo")) {
|
||||
doRedoSample();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Redo");
|
||||
ImGui::SetTooltip(_("Redo"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
|
||||
sameLineMaybe();
|
||||
ImGui::Button(ICON_FA_VOLUME_UP "##SAmplify");
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Amplify");
|
||||
ImGui::SetTooltip(_("Amplify"));
|
||||
}
|
||||
if (openSampleAmplifyOpt) {
|
||||
openSampleAmplifyOpt=false;
|
||||
ImGui::OpenPopup("SAmplifyOpt");
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("SAmplifyOpt",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
ImGui::Text("Volume");
|
||||
ImGui::Text(_("Volume"));
|
||||
if (ImGui::InputFloat("##SRVolume",&lifyVol,10.0,50.0,"%g%%")) {
|
||||
if (amplifyVol<0) amplifyVol=0;
|
||||
if (amplifyVol>10000) amplifyVol=10000;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Text("(%.1fdB)",20.0*log10(amplifyVol/100.0f));
|
||||
if (ImGui::Button("Apply")) {
|
||||
if (ImGui::Button(_("Apply"))) {
|
||||
sample->prepareUndo(true);
|
||||
e->lockEngine([this,sample]() {
|
||||
SAMPLE_OP_BEGIN;
|
||||
|
@ -1043,42 +1043,42 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
doAction(GUI_ACTION_SAMPLE_NORMALIZE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Normalize");
|
||||
ImGui::SetTooltip(_("Normalize"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FUR_SAMPLE_FADEIN "##SFadeIn")) {
|
||||
doAction(GUI_ACTION_SAMPLE_FADE_IN);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Fade in");
|
||||
ImGui::SetTooltip(_("Fade in"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FUR_SAMPLE_FADEOUT "##SFadeOut")) {
|
||||
doAction(GUI_ACTION_SAMPLE_FADE_OUT);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Fade out");
|
||||
ImGui::SetTooltip(_("Fade out"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
ImGui::Button(ICON_FUR_SAMPLE_INSERT_SILENCE "##SInsertSilence");
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Insert silence");
|
||||
ImGui::SetTooltip(_("Insert silence"));
|
||||
}
|
||||
if (openSampleSilenceOpt) {
|
||||
openSampleSilenceOpt=false;
|
||||
ImGui::OpenPopup("SSilenceOpt");
|
||||
}
|
||||
if (ImGui::BeginPopupContextItem("SSilenceOpt",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
if (ImGui::InputInt("Samples",&silenceSize,1,64)) {
|
||||
if (ImGui::InputInt(_("Samples"),&silenceSize,1,64)) {
|
||||
if (silenceSize<0) silenceSize=0;
|
||||
if (silenceSize>16777215) silenceSize=16777215;
|
||||
}
|
||||
if (ImGui::Button("Go")) {
|
||||
if (ImGui::Button(_("Go"))) {
|
||||
int pos=(sampleSelStart==-1 || sampleSelStart==sampleSelEnd)?sample->samples:sampleSelStart;
|
||||
sample->prepareUndo(true);
|
||||
e->lockEngine([this,sample,pos]() {
|
||||
if (!sample->insert(pos,silenceSize)) {
|
||||
showError("couldn't insert! make sure your sample is 8 or 16-bit.");
|
||||
showError(_("couldn't insert! make sure your sample is 8 or 16-bit."));
|
||||
}
|
||||
e->renderSamples(curSample);
|
||||
});
|
||||
|
@ -1095,21 +1095,21 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
doAction(GUI_ACTION_SAMPLE_SILENCE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Apply silence");
|
||||
ImGui::SetTooltip(_("Apply silence"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FA_TIMES "##SDelete")) {
|
||||
doAction(GUI_ACTION_SAMPLE_DELETE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Delete");
|
||||
ImGui::SetTooltip(_("Delete"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FA_CROP "##STrim")) {
|
||||
doAction(GUI_ACTION_SAMPLE_TRIM);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Trim");
|
||||
ImGui::SetTooltip(_("Trim"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Dummy(ImVec2(4.0*dpiScale,dpiScale));
|
||||
|
@ -1118,26 +1118,26 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
doAction(GUI_ACTION_SAMPLE_REVERSE);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Reverse");
|
||||
ImGui::SetTooltip(_("Reverse"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FUR_SAMPLE_INVERT "##SInvert")) {
|
||||
doAction(GUI_ACTION_SAMPLE_INVERT);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Invert");
|
||||
ImGui::SetTooltip(_("Invert"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FUR_SAMPLE_SIGN "##SSign")) {
|
||||
doAction(GUI_ACTION_SAMPLE_SIGN);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Signed/unsigned exchange");
|
||||
ImGui::SetTooltip(_("Signed/unsigned exchange"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
ImGui::Button(ICON_FUR_SAMPLE_FILTER "##SFilter");
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Apply filter");
|
||||
ImGui::SetTooltip(_("Apply filter"));
|
||||
}
|
||||
if (openSampleFilterOpt) {
|
||||
openSampleFilterOpt=false;
|
||||
|
@ -1148,23 +1148,23 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
float bandP=sampleFilterB*100.0f;
|
||||
float highP=sampleFilterH*100.0f;
|
||||
float resP=sampleFilterRes*100.0f;
|
||||
ImGui::Text("Cutoff:");
|
||||
if (ImGui::InputFloat("From",&sampleFilterCutStart,10.0f,1000.0f,"%.0f")) {
|
||||
ImGui::Text(_("Cutoff:"));
|
||||
if (ImGui::InputFloat(_("From"),&sampleFilterCutStart,10.0f,1000.0f,"%.0f")) {
|
||||
if (sampleFilterCutStart<0.0) sampleFilterCutStart=0.0;
|
||||
if (sampleFilterCutStart>sample->centerRate*0.5) sampleFilterCutStart=sample->centerRate*0.5;
|
||||
}
|
||||
if (ImGui::InputFloat("To",&sampleFilterCutEnd,10.0f,1000.0f,"%.0f")) {
|
||||
if (ImGui::InputFloat(_("To"),&sampleFilterCutEnd,10.0f,1000.0f,"%.0f")) {
|
||||
if (sampleFilterCutEnd<0.0) sampleFilterCutEnd=0.0;
|
||||
if (sampleFilterCutEnd>sample->centerRate*0.5) sampleFilterCutEnd=sample->centerRate*0.5;
|
||||
}
|
||||
ImGui::Separator();
|
||||
if (ImGui::SliderFloat("Resonance",&resP,0.0f,99.0f,"%.1f%%")) {
|
||||
if (ImGui::SliderFloat(_("Resonance"),&resP,0.0f,99.0f,"%.1f%%")) {
|
||||
sampleFilterRes=resP/100.0f;
|
||||
if (sampleFilterRes<0.0f) sampleFilterRes=0.0f;
|
||||
if (sampleFilterRes>0.99f) sampleFilterRes=0.99f;
|
||||
}
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Power");
|
||||
ImGui::Text(_("Power"));
|
||||
ImGui::SameLine();
|
||||
if (ImGui::RadioButton("1x",sampleFilterPower==1)) {
|
||||
sampleFilterPower=1;
|
||||
|
@ -1178,23 +1178,23 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
sampleFilterPower=3;
|
||||
}
|
||||
ImGui::Separator();
|
||||
if (ImGui::SliderFloat("Low-pass",&lowP,0.0f,100.0f,"%.1f%%")) {
|
||||
if (ImGui::SliderFloat(_("Low-pass"),&lowP,0.0f,100.0f,"%.1f%%")) {
|
||||
sampleFilterL=lowP/100.0f;
|
||||
if (sampleFilterL<0.0f) sampleFilterL=0.0f;
|
||||
if (sampleFilterL>1.0f) sampleFilterL=1.0f;
|
||||
}
|
||||
if (ImGui::SliderFloat("Band-pass",&bandP,0.0f,100.0f,"%.1f%%")) {
|
||||
if (ImGui::SliderFloat(_("Band-pass"),&bandP,0.0f,100.0f,"%.1f%%")) {
|
||||
sampleFilterB=bandP/100.0f;
|
||||
if (sampleFilterB<0.0f) sampleFilterB=0.0f;
|
||||
if (sampleFilterB>1.0f) sampleFilterB=1.0f;
|
||||
}
|
||||
if (ImGui::SliderFloat("High-pass",&highP,0.0f,100.0f,"%.1f%%")) {
|
||||
if (ImGui::SliderFloat(_("High-pass"),&highP,0.0f,100.0f,"%.1f%%")) {
|
||||
sampleFilterH=highP/100.0f;
|
||||
if (sampleFilterH<0.0f) sampleFilterH=0.0f;
|
||||
if (sampleFilterH>1.0f) sampleFilterH=1.0f;
|
||||
}
|
||||
|
||||
if (ImGui::Button("Apply")) {
|
||||
if (ImGui::Button(_("Apply"))) {
|
||||
sample->prepareUndo(true);
|
||||
e->lockEngine([this,sample]() {
|
||||
SAMPLE_OP_BEGIN;
|
||||
|
@ -1259,7 +1259,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
sameLineMaybe();
|
||||
ImGui::Button(ICON_FUR_CROSSFADE "##CrossFade");
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Crossfade loop points");
|
||||
ImGui::SetTooltip(_("Crossfade loop points"));
|
||||
}
|
||||
if (openSampleCrossFadeOpt) {
|
||||
openSampleCrossFadeOpt=false;
|
||||
|
@ -1268,22 +1268,22 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
if (ImGui::BeginPopupContextItem("SCrossFadeOpt",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
if (sampleCrossFadeLoopLength>sample->loopStart) sampleCrossFadeLoopLength=sample->loopStart;
|
||||
if (sampleCrossFadeLoopLength>(sample->loopEnd-sample->loopStart)) sampleCrossFadeLoopLength=sample->loopEnd-sample->loopStart;
|
||||
if (ImGui::SliderInt("Number of samples",&sampleCrossFadeLoopLength,0,100000)) {
|
||||
if (ImGui::SliderInt(_("Number of samples"),&sampleCrossFadeLoopLength,0,100000)) {
|
||||
if (sampleCrossFadeLoopLength<0) sampleCrossFadeLoopLength=0;
|
||||
if (sampleCrossFadeLoopLength>sample->loopStart) sampleCrossFadeLoopLength=sample->loopStart;
|
||||
if (sampleCrossFadeLoopLength>(sample->loopEnd-sample->loopStart)) sampleCrossFadeLoopLength=sample->loopEnd-sample->loopStart;
|
||||
if (sampleCrossFadeLoopLength>100000) sampleCrossFadeLoopLength=100000;
|
||||
}
|
||||
if (ImGui::SliderInt("Linear <-> Equal power",&sampleCrossFadeLoopLaw,0,100)) {
|
||||
if (ImGui::SliderInt(_("Linear <-> Equal power"),&sampleCrossFadeLoopLaw,0,100)) {
|
||||
if (sampleCrossFadeLoopLaw<0) sampleCrossFadeLoopLaw=0;
|
||||
if (sampleCrossFadeLoopLaw>100) sampleCrossFadeLoopLaw=100;
|
||||
}
|
||||
if (ImGui::Button("Apply")) {
|
||||
if (ImGui::Button(_("Apply"))) {
|
||||
if (sampleCrossFadeLoopLength>sample->loopStart) {
|
||||
showError("Crossfade: length would go out of bounds. Aborted...");
|
||||
showError(_("Crossfade: length would go out of bounds. Aborted..."));
|
||||
ImGui::CloseCurrentPopup();
|
||||
} else if (sampleCrossFadeLoopLength>(sample->loopEnd-sample->loopStart)) {
|
||||
showError("Crossfade: length would overflow loopStart. Try a smaller random value.");
|
||||
showError(_("Crossfade: length would overflow loopStart. Try a smaller random value."));
|
||||
ImGui::CloseCurrentPopup();
|
||||
} else {
|
||||
sample->prepareUndo(true);
|
||||
|
@ -1329,28 +1329,28 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
e->previewSample(curSample);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Preview sample");
|
||||
ImGui::SetTooltip(_("Preview sample"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FA_STOP "##StopSample")) {
|
||||
e->stopSamplePreview();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Stop sample preview");
|
||||
ImGui::SetTooltip(_("Stop sample preview"));
|
||||
}
|
||||
sameLineMaybe();
|
||||
if (ImGui::Button(ICON_FA_UPLOAD "##MakeIns")) {
|
||||
doAction(GUI_ACTION_SAMPLE_MAKE_INS);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Create instrument from sample");
|
||||
ImGui::SetTooltip(_("Create instrument from sample"));
|
||||
}
|
||||
|
||||
sameLineMaybe(ImGui::CalcTextSize("Zoom").x+150.0f*dpiScale+ImGui::CalcTextSize("100%").x);
|
||||
double zoomPercent=100.0/sampleZoom;
|
||||
bool checkZoomLimit=false;
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Zoom");
|
||||
ImGui::Text(_("Zoom"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(150.0f*dpiScale);
|
||||
if (ImGui::InputDouble("##SZoom",&zoomPercent,zoomPercent/8.0,20.0,"%g%%")) {
|
||||
|
@ -1733,40 +1733,40 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
|
||||
if (ImGui::BeginPopup("SRightClick",ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||
ImGui::BeginDisabled(sample->depth!=DIV_SAMPLE_DEPTH_8BIT && sample->depth!=DIV_SAMPLE_DEPTH_16BIT);
|
||||
if (ImGui::MenuItem("cut",BIND_FOR(GUI_ACTION_SAMPLE_CUT))) {
|
||||
if (ImGui::MenuItem(_("cut"),BIND_FOR(GUI_ACTION_SAMPLE_CUT))) {
|
||||
doAction(GUI_ACTION_SAMPLE_CUT);
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
if (ImGui::MenuItem("copy",BIND_FOR(GUI_ACTION_SAMPLE_COPY))) {
|
||||
if (ImGui::MenuItem(_("copy"),BIND_FOR(GUI_ACTION_SAMPLE_COPY))) {
|
||||
doAction(GUI_ACTION_SAMPLE_COPY);
|
||||
}
|
||||
ImGui::BeginDisabled(sample->depth!=DIV_SAMPLE_DEPTH_8BIT && sample->depth!=DIV_SAMPLE_DEPTH_16BIT);
|
||||
if (ImGui::MenuItem("paste",BIND_FOR(GUI_ACTION_SAMPLE_PASTE))) {
|
||||
if (ImGui::MenuItem(_("paste"),BIND_FOR(GUI_ACTION_SAMPLE_PASTE))) {
|
||||
doAction(GUI_ACTION_SAMPLE_PASTE);
|
||||
}
|
||||
if (ImGui::MenuItem("paste (replace)",BIND_FOR(GUI_ACTION_SAMPLE_PASTE_REPLACE))) {
|
||||
if (ImGui::MenuItem(_("paste (replace)"),BIND_FOR(GUI_ACTION_SAMPLE_PASTE_REPLACE))) {
|
||||
doAction(GUI_ACTION_SAMPLE_PASTE_REPLACE);
|
||||
}
|
||||
if (ImGui::MenuItem("paste (mix)",BIND_FOR(GUI_ACTION_SAMPLE_PASTE_MIX))) {
|
||||
if (ImGui::MenuItem(_("paste (mix)"),BIND_FOR(GUI_ACTION_SAMPLE_PASTE_MIX))) {
|
||||
doAction(GUI_ACTION_SAMPLE_PASTE_MIX);
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
if (ImGui::MenuItem("select all",BIND_FOR(GUI_ACTION_SAMPLE_SELECT_ALL))) {
|
||||
if (ImGui::MenuItem(_("select all"),BIND_FOR(GUI_ACTION_SAMPLE_SELECT_ALL))) {
|
||||
doAction(GUI_ACTION_SAMPLE_SELECT_ALL);
|
||||
}
|
||||
ImGui::Separator();
|
||||
if (ImGui::MenuItem("set loop to selection",BIND_FOR(GUI_ACTION_SAMPLE_SET_LOOP))) {
|
||||
if (ImGui::MenuItem(_("set loop to selection"),BIND_FOR(GUI_ACTION_SAMPLE_SET_LOOP))) {
|
||||
doAction(GUI_ACTION_SAMPLE_SET_LOOP);
|
||||
}
|
||||
if (ImGui::MenuItem("create wavetable from selection",BIND_FOR(GUI_ACTION_SAMPLE_CREATE_WAVE))) {
|
||||
if (ImGui::MenuItem(_("create wavetable from selection"),BIND_FOR(GUI_ACTION_SAMPLE_CREATE_WAVE))) {
|
||||
doAction(GUI_ACTION_SAMPLE_CREATE_WAVE);
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
String statusBar=sampleDragMode?"Draw":"Select";
|
||||
String statusBar=sampleDragMode?_("Draw"):_("Select");
|
||||
String statusBar2="";
|
||||
String statusBar3=fmt::sprintf("%d samples, %d bytes",sample->samples,sample->getCurBufLen());
|
||||
String statusBar3=fmt::sprintf(_("%d samples, %d bytes"),sample->samples,sample->getCurBufLen());
|
||||
bool drawSelection=false;
|
||||
|
||||
if (!sampleDragMode) {
|
||||
|
@ -1781,7 +1781,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
if (start==end) {
|
||||
statusBar+=fmt::sprintf(" (%d)",start);
|
||||
} else {
|
||||
statusBar+=fmt::sprintf(" (%d-%d: %d samples)",start,end,end-start);
|
||||
statusBar+=fmt::sprintf(_(" (%d-%d: %d samples)"),start,end,end-start);
|
||||
}
|
||||
drawSelection=true;
|
||||
}
|
||||
|
@ -1973,7 +1973,7 @@ void FurnaceGUI::drawSampleEdit() {
|
|||
}
|
||||
|
||||
if (sample->depth!=DIV_SAMPLE_DEPTH_8BIT && sample->depth!=DIV_SAMPLE_DEPTH_16BIT && sampleDragMode) {
|
||||
statusBar="Non-8/16-bit samples cannot be edited without prior conversion.";
|
||||
statusBar=_("Non-8/16-bit samples cannot be edited without prior conversion.");
|
||||
}
|
||||
|
||||
ImGui::SetCursorPosY(ImGui::GetCursorPosY()+ImGui::GetStyle().ScrollbarSize);
|
||||
|
|
|
@ -37,7 +37,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Name");
|
||||
ImGui::Text(_("Name"));
|
||||
ImGui::TableNextColumn();
|
||||
float avail=ImGui::GetContentRegionAvail().x;
|
||||
ImGui::SetNextItemWidth(avail);
|
||||
|
@ -47,7 +47,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Author");
|
||||
ImGui::Text(_("Author"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(avail);
|
||||
if (ImGui::InputText("##Author",&e->song.author,ImGuiInputTextFlags_UndoRedo)) {
|
||||
|
@ -57,7 +57,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Album");
|
||||
ImGui::Text(_("Album"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(avail);
|
||||
if (ImGui::InputText("##Category",&e->song.category,ImGuiInputTextFlags_UndoRedo)) {
|
||||
|
@ -66,7 +66,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("System");
|
||||
ImGui::Text(_("System"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(MAX(16.0f*dpiScale,avail-autoButtonSize-ImGui::GetStyle().ItemSpacing.x));
|
||||
if (ImGui::InputText("##SystemName",&e->song.systemName,ImGuiInputTextFlags_UndoRedo)) {
|
||||
|
@ -76,7 +76,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) {
|
|||
}
|
||||
ImGui::SameLine();
|
||||
pushToggleColors(e->song.autoSystem);
|
||||
if (ImGui::Button("Auto")) {
|
||||
if (ImGui::Button(_("Auto"))) {
|
||||
e->song.autoSystem=!e->song.autoSystem;
|
||||
if (e->song.autoSystem) {
|
||||
autoDetectSystem();
|
||||
|
@ -97,7 +97,7 @@ void FurnaceGUI::drawSongInfo(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Tuning (A-4)");
|
||||
ImGui::Text(_("Tuning (A-4)"));
|
||||
ImGui::TableNextColumn();
|
||||
float tune=e->song.tuning;
|
||||
float avail=ImGui::GetContentRegionAvail().x;
|
||||
|
|
|
@ -38,14 +38,14 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
if (ImGui::SmallButton(tempoView?"Base Tempo##TempoOrHz":"Tick Rate##TempoOrHz")) {
|
||||
if (ImGui::SmallButton(tempoView?_("Base Tempo##TempoOrHz"):_("Tick Rate##TempoOrHz"))) {
|
||||
tempoView=!tempoView;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
if (tempoView) {
|
||||
ImGui::SetTooltip("click to display tick rate");
|
||||
ImGui::SetTooltip(_("click to display tick rate"));
|
||||
} else {
|
||||
ImGui::SetTooltip("click to display base tempo");
|
||||
ImGui::SetTooltip(_("click to display base tempo"));
|
||||
}
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
|
@ -77,17 +77,17 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
if (keepGrooveAlive || e->curSubSong->speeds.len>2) {
|
||||
if (ImGui::SmallButton("Groove")) {
|
||||
if (ImGui::SmallButton(_("Groove"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->curSubSong->speeds.len=1;
|
||||
});
|
||||
if (e->isPlaying()) play();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("click for one speed");
|
||||
ImGui::SetTooltip(_("click for one speed"));
|
||||
}
|
||||
} else if (e->curSubSong->speeds.len>1) {
|
||||
if (ImGui::SmallButton("Speeds")) {
|
||||
if (ImGui::SmallButton(_("Speeds"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->curSubSong->speeds.len=4;
|
||||
e->curSubSong->speeds.val[2]=e->curSubSong->speeds.val[0];
|
||||
|
@ -96,10 +96,10 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
if (e->isPlaying()) play();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("click for groove pattern");
|
||||
ImGui::SetTooltip(_("click for groove pattern"));
|
||||
}
|
||||
} else {
|
||||
if (ImGui::SmallButton("Speed")) {
|
||||
if (ImGui::SmallButton(_("Speed"))) {
|
||||
e->lockEngine([this]() {
|
||||
e->curSubSong->speeds.len=2;
|
||||
e->curSubSong->speeds.val[1]=e->curSubSong->speeds.val[0];
|
||||
|
@ -107,7 +107,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
if (e->isPlaying()) play();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("click for two (alternating) speeds");
|
||||
ImGui::SetTooltip(_("click for two (alternating) speeds"));
|
||||
}
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
|
@ -165,7 +165,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Virtual Tempo");
|
||||
ImGui::Text(_("Virtual Tempo"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(halfAvail);
|
||||
if (ImGui::InputScalar("##VTempoN",ImGuiDataType_S16,&e->curSubSong->virtualTempoN,&_ONE,&_TEN)) { MARK_MODIFIED
|
||||
|
@ -174,7 +174,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
e->virtualTempoChanged();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Numerator");
|
||||
ImGui::SetTooltip(_("Numerator"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(halfAvail);
|
||||
|
@ -184,13 +184,13 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
e->virtualTempoChanged();
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Denominator (set to base tempo)");
|
||||
ImGui::SetTooltip(_("Denominator (set to base tempo)"));
|
||||
}
|
||||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Divider");
|
||||
ImGui::Text(_("Divider"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(halfAvail);
|
||||
unsigned char realTB=e->curSubSong->timeBase+1;
|
||||
|
@ -205,7 +205,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Highlight");
|
||||
ImGui::Text(_("Highlight"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(halfAvail);
|
||||
if (ImGui::InputScalar("##Highlight1",ImGuiDataType_U8,&e->curSubSong->hilightA,&_ONE,&_FOUR)) {
|
||||
|
@ -228,7 +228,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Pattern Length");
|
||||
ImGui::Text(_("Pattern Length"));
|
||||
ImGui::TableNextColumn();
|
||||
float avail=ImGui::GetContentRegionAvail().x;
|
||||
ImGui::SetNextItemWidth(avail);
|
||||
|
@ -242,7 +242,7 @@ void FurnaceGUI::drawSpeed(bool asChild) {
|
|||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Song Length");
|
||||
ImGui::Text(_("Song Length"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::SetNextItemWidth(avail);
|
||||
int ordLen=e->curSubSong->ordersLen;
|
||||
|
|
|
@ -29,7 +29,7 @@ void FurnaceGUI::drawSpoiler() {
|
|||
if (!spoilerOpen) return;
|
||||
if (ImGui::Begin("Spoiler",&spoilerOpen,globalWinFlags|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_AlwaysAutoResize)) {
|
||||
ImGui::PushFont(bigFont);
|
||||
ImGui::Text("SPOILER");
|
||||
ImGui::Text(_("SPOILER"));
|
||||
ImGui::PopFont();
|
||||
}
|
||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_SPOILER;
|
||||
|
|
|
@ -33,7 +33,7 @@ void FurnaceGUI::drawStats() {
|
|||
double maxGot=1000000000.0*(double)e->getAudioDescGot().bufsize/(double)e->getAudioDescGot().rate;
|
||||
String procStr=fmt::sprintf("%.1f%%",100.0*((double)lastProcTime/(double)maxGot));
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Audio load");
|
||||
ImGui::Text(_("Audio load"));
|
||||
ImGui::SameLine();
|
||||
ImGui::ProgressBar((double)lastProcTime/maxGot,ImVec2(-FLT_MIN,0),procStr.c_str());
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ void FurnaceGUI::drawSubSongs(bool asChild) {
|
|||
char id[1024];
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*3.0f-ImGui::GetStyle().ItemSpacing.x*2.0f);
|
||||
if (e->curSubSong->name.empty()) {
|
||||
snprintf(id,1023,"%d. <no name>",(int)e->getCurrentSubSong()+1);
|
||||
snprintf(id,1023,_("%d. <no name>"),(int)e->getCurrentSubSong()+1);
|
||||
} else {
|
||||
snprintf(id,1023,"%d. %s",(int)e->getCurrentSubSong()+1,e->curSubSong->name.c_str());
|
||||
}
|
||||
|
@ -52,14 +52,14 @@ void FurnaceGUI::drawSubSongs(bool asChild) {
|
|||
e->moveSubSongUp(i);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move up");
|
||||
ImGui::SetTooltip(_("Move up"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::SmallButton(ICON_FA_ARROW_DOWN "##SubDown")) {
|
||||
e->moveSubSongDown(i);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Move down");
|
||||
ImGui::SetTooltip(_("Move down"));
|
||||
}
|
||||
ImGui::PopID();
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ void FurnaceGUI::drawSubSongs(bool asChild) {
|
|||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_PLUS "##SubSongAdd")) {
|
||||
if (!e->addSubSong()) {
|
||||
showError("too many subsongs!");
|
||||
showError(_("too many subsongs!"));
|
||||
} else {
|
||||
e->changeSongP(e->song.subsong.size()-1);
|
||||
updateScroll(0);
|
||||
|
@ -85,12 +85,12 @@ void FurnaceGUI::drawSubSongs(bool asChild) {
|
|||
}
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Add");
|
||||
ImGui::SetTooltip(_("Add"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_FILES_O "##SubSongDuplicate")) {
|
||||
if (!e->duplicateSubSong(e->getCurrentSubSong())) {
|
||||
showError("too many subsongs!");
|
||||
showError(_("too many subsongs!"));
|
||||
} else {
|
||||
e->changeSongP(e->song.subsong.size()-1);
|
||||
updateScroll(0);
|
||||
|
@ -105,24 +105,24 @@ void FurnaceGUI::drawSubSongs(bool asChild) {
|
|||
}
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Duplicate");
|
||||
ImGui::SetTooltip(_("Duplicate"));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
pushDestColor();
|
||||
if (ImGui::Button(ICON_FA_MINUS "##SubSongDel")) {
|
||||
if (e->song.subsong.size()<=1) {
|
||||
showError("this is the only subsong!");
|
||||
showError(_("this is the only subsong!"));
|
||||
} else {
|
||||
showWarning("are you sure you want to remove this subsong?",GUI_WARN_SUBSONG_DEL);
|
||||
showWarning(_("are you sure you want to remove this subsong?"),GUI_WARN_SUBSONG_DEL);
|
||||
}
|
||||
}
|
||||
popDestColor();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Remove");
|
||||
ImGui::SetTooltip(_("Remove"));
|
||||
}
|
||||
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Name");
|
||||
ImGui::Text(_("Name"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::InputText("##SubSongName",&e->curSubSong->name,ImGuiInputTextFlags_UndoRedo)) {
|
||||
|
|
|
@ -39,11 +39,11 @@ void FurnaceGUI::drawSysManager() {
|
|||
//ImGui::SetNextWindowSizeConstraints(ImVec2(440.0f*dpiScale,400.0f*dpiScale),ImVec2(canvasW,canvasH));
|
||||
}
|
||||
if (ImGui::Begin("Chip Manager",&sysManagerOpen,globalWinFlags)) {
|
||||
ImGui::Checkbox("Preserve channel order",&preserveChanPos);
|
||||
ImGui::Checkbox(_("Preserve channel order"),&preserveChanPos);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Clone channel data",&sysDupCloneChannels);
|
||||
ImGui::Checkbox(_("Clone channel data"),&sysDupCloneChannels);
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Clone at end",&sysDupEnd);
|
||||
ImGui::Checkbox(_("Clone at end"),&sysDupEnd);
|
||||
if (ImGui::BeginTable("SystemList",3)) {
|
||||
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed);
|
||||
ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch);
|
||||
|
@ -51,9 +51,9 @@ void FurnaceGUI::drawSysManager() {
|
|||
ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Name");
|
||||
ImGui::Text(_("Name"));
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("Actions");
|
||||
ImGui::Text(_("Actions"));
|
||||
for (unsigned char i=0; i<e->song.systemLen; i++) {
|
||||
ImGui::PushID(i);
|
||||
ImGui::TableNextRow();
|
||||
|
@ -66,7 +66,7 @@ void FurnaceGUI::drawSysManager() {
|
|||
ImGui::Button(ICON_FA_ARROWS "##SysDrag");
|
||||
ImGui::EndDragDropSource();
|
||||
} else if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("(drag to swap chips)");
|
||||
ImGui::SetTooltip(_("(drag to swap chips)"));
|
||||
}
|
||||
if (ImGui::BeginDragDropTarget()) {
|
||||
const ImGuiPayload* dragItem=ImGui::AcceptDragDropPayload("FUR_SYS");
|
||||
|
@ -87,15 +87,15 @@ void FurnaceGUI::drawSysManager() {
|
|||
ImGui::TreePop();
|
||||
}
|
||||
ImGui::TableNextColumn();
|
||||
if (ImGui::Button("Clone##SysDup")) {
|
||||
if (ImGui::Button(_("Clone##SysDup"))) {
|
||||
if (!e->duplicateSystem(i,sysDupCloneChannels,sysDupEnd)) {
|
||||
showError("cannot clone chip! ("+e->getLastError()+")");
|
||||
showError(fmt::sprintf(_("cannot clone chip! (%s)"),e->getLastError()));
|
||||
} else {
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Button("Change##SysChange");
|
||||
ImGui::Button(_("Change##SysChange"));
|
||||
if (ImGui::BeginPopupContextItem("SysPickerC",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
DivSystem picked=systemPicker();
|
||||
if (picked!=DIV_SYSTEM_NULL) {
|
||||
|
@ -106,7 +106,7 @@ void FurnaceGUI::drawSysManager() {
|
|||
}
|
||||
updateWindowTitle();
|
||||
} else {
|
||||
showError("cannot change chip! ("+e->getLastError()+")");
|
||||
showError(fmt::sprintf(_("cannot change chip! (%s)"),e->getLastError()));
|
||||
}
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
@ -117,11 +117,11 @@ void FurnaceGUI::drawSysManager() {
|
|||
pushDestColor();
|
||||
if (ImGui::Button(ICON_FA_TIMES "##SysRemove")) {
|
||||
sysToDelete=i;
|
||||
showWarning("Are you sure you want to remove this chip?",GUI_WARN_SYSTEM_DEL);
|
||||
showWarning(_("Are you sure you want to remove this chip?"),GUI_WARN_SYSTEM_DEL);
|
||||
}
|
||||
popDestColor();
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Remove");
|
||||
ImGui::SetTooltip(_("Remove"));
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
ImGui::PopID();
|
||||
|
@ -135,7 +135,7 @@ void FurnaceGUI::drawSysManager() {
|
|||
DivSystem picked=systemPicker();
|
||||
if (picked!=DIV_SYSTEM_NULL) {
|
||||
if (!e->addSystem(picked)) {
|
||||
showError("cannot add chip! ("+e->getLastError()+")");
|
||||
showError(fmt::sprintf(_("cannot add chip! (%s)"),e->getLastError()));
|
||||
} else {
|
||||
MARK_MODIFIED;
|
||||
}
|
||||
|
|
|
@ -32,10 +32,10 @@ DivSystem FurnaceGUI::systemPicker() {
|
|||
}
|
||||
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
|
||||
if (ImGui::InputTextWithHint("##SysSearch","Search...",&sysSearchQuery)) reissueSearch=true;
|
||||
if (ImGui::InputTextWithHint("##SysSearch",_("Search..."),&sysSearchQuery)) reissueSearch=true;
|
||||
if (ImGui::BeginTabBar("SysCats")) {
|
||||
for (int i=0; chipCategories[i]; i++) {
|
||||
if (ImGui::BeginTabItem(chipCategoryNames[i])) {
|
||||
if (ImGui::BeginTabItem(_(chipCategoryNames[i]))) {
|
||||
if (ImGui::IsItemActive()) {
|
||||
reissueSearch=true;
|
||||
}
|
||||
|
@ -94,4 +94,4 @@ DivSystem FurnaceGUI::systemPicker() {
|
|||
}
|
||||
ImGui::EndChild();
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -482,18 +482,18 @@ struct FurnaceCV {
|
|||
|
||||
static const char* cvText[]={
|
||||
// intro
|
||||
"Play demo songs?\n"
|
||||
_N("Play demo songs?\n"
|
||||
"- Down: Play current song\n"
|
||||
"- Up: Play demo songs",
|
||||
"- Up: Play demo songs"),
|
||||
|
||||
"Welcome to Combat Vehicle!\n\n"
|
||||
_N("Welcome to Combat Vehicle!\n\n"
|
||||
"Controls:\n"
|
||||
"X - Shoot Arrow Key - Move\n"
|
||||
"Z - Special Esc - Quit",
|
||||
"Z - Special Esc - Quit"),
|
||||
|
||||
"GAME OVER",
|
||||
_N("GAME OVER"),
|
||||
|
||||
"High Score!"
|
||||
_N("High Score!")
|
||||
};
|
||||
|
||||
void FurnaceGUI::syncTutorial() {
|
||||
|
@ -653,16 +653,16 @@ void FurnaceGUI::drawTutorial() {
|
|||
if (ImGui::BeginPopupModal("Welcome",NULL,ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoTitleBar)) {
|
||||
ImGui::PushFont(bigFont);
|
||||
ImGui::SetCursorPosX((ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Welcome!").x)*0.5);
|
||||
ImGui::Text("Welcome!");
|
||||
ImGui::Text(_("Welcome!"));
|
||||
ImGui::PopFont();
|
||||
|
||||
ImGui::Text("welcome to Furnace, the biggest open-source chiptune tracker!");
|
||||
ImGui::Text(_("welcome to Furnace, the biggest open-source chiptune tracker!"));
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::TextWrapped("here are some tips to get you started:");
|
||||
ImGui::TextWrapped(_("here are some tips to get you started:"));
|
||||
|
||||
ImGui::TextWrapped(
|
||||
ImGui::TextWrapped(_(
|
||||
"- add an instrument by clicking on + in Instruments\n"
|
||||
"- click on the pattern view to focus it\n"
|
||||
"- channel columns have the following, in this order: note, instrument, volume and effects\n"
|
||||
|
@ -672,19 +672,19 @@ void FurnaceGUI::drawTutorial() {
|
|||
"- hit enter to play/stop the song\n"
|
||||
"- extend the song by adding more orders in the Orders window\n"
|
||||
"- click on the Orders matrix to change the patterns of a channel (left click increases; right click decreases)"
|
||||
);
|
||||
));
|
||||
|
||||
ImGui::TextWrapped(
|
||||
ImGui::TextWrapped(_(
|
||||
"if you need help, you may:\n"
|
||||
"- read the manual (a file called manual.pdf)\n"
|
||||
"- ask for help in Discussions (https://github.com/tildearrow/furnace/discussions), the Furnace Discord (https://discord.gg/EfrwT2wq7z) or Furnace in Revolt (official: https://rvlt.gg/GRPS6tmc)"
|
||||
);
|
||||
));
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::TextWrapped("if you find any issues, be sure to report them! the issue tracker is here: https://github.com/tildearrow/furnace/issues");
|
||||
ImGui::TextWrapped(_("if you find any issues, be sure to report them! the issue tracker is here: https://github.com/tildearrow/furnace/issues"));
|
||||
|
||||
if (ImGui::Button("OK")) {
|
||||
if (ImGui::Button(_("OK"))) {
|
||||
tutorial.protoWelcome=true;
|
||||
commitTutorial();
|
||||
ImGui::CloseCurrentPopup();
|
||||
|
@ -1388,13 +1388,13 @@ void FurnaceCV::render(unsigned char joyIn) {
|
|||
}
|
||||
memset(tile0,0,80*56*sizeof(short));
|
||||
memset(tile1,0,80*56*sizeof(short));
|
||||
startTyping(cvText[3],2,3);
|
||||
startTyping(_(cvText[3]),2,3);
|
||||
e->setConf("cvHiScore",hiScore);
|
||||
e->saveConf();
|
||||
curText=4;
|
||||
textWait=90;
|
||||
} else {
|
||||
startTyping(cvText[2],15,13);
|
||||
startTyping(_(cvText[2]),15,13);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1423,7 +1423,7 @@ void FurnaceCV::render(unsigned char joyIn) {
|
|||
inGame=true;
|
||||
}
|
||||
if (transWait==40) {
|
||||
putText(CV_FONTBASE_8x16,true,fmt::sprintf("STAGE %d",stage+2),16,13);
|
||||
putText(CV_FONTBASE_8x16,true,fmt::sprintf(_("STAGE %d"),stage+2),16,13);
|
||||
} else if (transWait>40) {
|
||||
for (int i=1; i<28; i++) {
|
||||
for (int j=0; j<40; j++) {
|
||||
|
@ -1459,7 +1459,7 @@ void FurnaceCV::render(unsigned char joyIn) {
|
|||
inGame=true;
|
||||
} else {
|
||||
memset(tile1,0,80*56*sizeof(short));
|
||||
startTyping(cvText[curText++],2,3);
|
||||
startTyping(_(cvText[curText++]),2,3);
|
||||
textWait=90;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -334,7 +334,7 @@ void FurnaceGUI::drawUserPresets() {
|
|||
std::vector<int> depthStack;
|
||||
|
||||
if (userCategory==NULL) {
|
||||
ImGui::Text("Error! User category does not exist!");
|
||||
ImGui::Text(_("Error! User category does not exist!"));
|
||||
} else if (ImGui::BeginTable("UserPresets",2,ImGuiTableFlags_BordersInnerV,ImVec2(ImGui::GetContentRegionAvail().x,ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeightWithSpacing()))) {
|
||||
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch,0.25f);
|
||||
ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.75f);
|
||||
|
@ -343,10 +343,10 @@ void FurnaceGUI::drawUserPresets() {
|
|||
ImGui::TableNextColumn();
|
||||
if (ImGui::BeginChild("UList",ImVec2(ImGui::GetContentRegionAvail().x,ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeightWithSpacing()))) {
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Systems");
|
||||
ImGui::Text(_("Systems"));
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button(ICON_FA_PLUS "##AddPreset")) {
|
||||
userCategory->systems.push_back(FurnaceGUISysDef("New Preset",{}));
|
||||
userCategory->systems.push_back(FurnaceGUISysDef(_("New Preset"),{}));
|
||||
selectedUserPreset.clear();
|
||||
selectedUserPreset.push_back(userCategory->systems.size()-1);
|
||||
}
|
||||
|
@ -358,20 +358,20 @@ void FurnaceGUI::drawUserPresets() {
|
|||
ImGui::TableNextColumn();
|
||||
if (ImGui::BeginChild("UEdit",ImVec2(ImGui::GetContentRegionAvail().x,ImGui::GetContentRegionAvail().y-ImGui::GetFrameHeightWithSpacing()))) {
|
||||
if (selectedUserPreset.empty()) {
|
||||
ImGui::Text("select a preset");
|
||||
ImGui::Text(_("select a preset"));
|
||||
} else {
|
||||
FurnaceGUISysDef* preset=selectPreset(userCategory->systems);
|
||||
bool doRemovePreset=false;
|
||||
|
||||
if (preset!=NULL) {
|
||||
ImGui::AlignTextToFramePadding();
|
||||
ImGui::Text("Name");
|
||||
ImGui::Text(_("Name"));
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Remove").x-ImGui::GetStyle().ItemSpacing.x*2.0-ImGui::GetStyle().ItemInnerSpacing.x*2.0);
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize(_("Remove")).x-ImGui::GetStyle().ItemSpacing.x*2.0-ImGui::GetStyle().ItemInnerSpacing.x*2.0);
|
||||
ImGui::InputText("##PName",&preset->name);
|
||||
ImGui::SameLine();
|
||||
pushDestColor();
|
||||
if (ImGui::Button("Remove##UPresetRemove")) {
|
||||
if (ImGui::Button(_("Remove##UPresetRemove"))) {
|
||||
doRemovePreset=true;
|
||||
}
|
||||
popDestColor();
|
||||
|
@ -390,7 +390,7 @@ void FurnaceGUI::drawUserPresets() {
|
|||
ImGui::PushID(i);
|
||||
|
||||
tempID=fmt::sprintf("%s##USystem",getSystemName(chip.sys));
|
||||
ImGui::Button(tempID.c_str(),ImVec2(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0,0));
|
||||
ImGui::Button(tempID.c_str(),ImVec2(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize(_("Invert")).x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0,0));
|
||||
if (ImGui::BeginPopupContextItem("SysPickerCU",ImGuiPopupFlags_MouseButtonLeft)) {
|
||||
DivSystem picked=systemPicker();
|
||||
if (picked!=DIV_SYSTEM_NULL) {
|
||||
|
@ -402,7 +402,7 @@ void FurnaceGUI::drawUserPresets() {
|
|||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Checkbox("Invert",&doInvert)) {
|
||||
if (ImGui::Checkbox(_("Invert"),&doInvert)) {
|
||||
chip.vol=-chip.vol;
|
||||
mustBake=true;
|
||||
}
|
||||
|
@ -414,7 +414,7 @@ void FurnaceGUI::drawUserPresets() {
|
|||
}
|
||||
popDestColor();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
|
||||
if (CWSliderFloat("Volume",&vol,0.0f,3.0f)) {
|
||||
if (CWSliderFloat(_("Volume"),&vol,0.0f,3.0f)) {
|
||||
if (doInvert) {
|
||||
if (vol<0.0001) vol=0.0001;
|
||||
}
|
||||
|
@ -424,19 +424,19 @@ void FurnaceGUI::drawUserPresets() {
|
|||
mustBake=true;
|
||||
} rightClickable
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
|
||||
if (CWSliderFloat("Panning",&chip.pan,-1.0f,1.0f)) {
|
||||
if (CWSliderFloat(_("Panning"),&chip.pan,-1.0f,1.0f)) {
|
||||
if (chip.pan<-1.0f) chip.pan=-1.0f;
|
||||
if (chip.pan>1.0f) chip.pan=1.0f;
|
||||
mustBake=true;
|
||||
} rightClickable
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
|
||||
if (CWSliderFloat("Front/Rear",&chip.panFR,-1.0f,1.0f)) {
|
||||
if (CWSliderFloat(_("Front/Rear"),&chip.panFR,-1.0f,1.0f)) {
|
||||
if (chip.panFR<-1.0f) chip.panFR=-1.0f;
|
||||
if (chip.panFR>1.0f) chip.panFR=1.0f;
|
||||
mustBake=true;
|
||||
} rightClickable
|
||||
|
||||
if (ImGui::TreeNode("Configure")) {
|
||||
if (ImGui::TreeNode(_("Configure"))) {
|
||||
DivConfig sysFlags;
|
||||
sysFlags.loadFromMemory(chip.flags.c_str());
|
||||
if (drawSysConf(-1,i,chip.sys,sysFlags,false)) {
|
||||
|
@ -467,16 +467,16 @@ void FurnaceGUI::drawUserPresets() {
|
|||
|
||||
ImGui::Separator();
|
||||
|
||||
ImGui::Text("Advanced");
|
||||
ImGui::Text(_("Advanced"));
|
||||
if (ImGui::InputTextMultiline("##UExtra",&preset->extra,ImVec2(ImGui::GetContentRegionAvail().x,120.0f*dpiScale),ImGuiInputTextFlags_UndoRedo)) {
|
||||
mustBake=true;
|
||||
}
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip(
|
||||
ImGui::SetTooltip(_(
|
||||
"insert additional settings in `option=value` format.\n"
|
||||
"available options:\n"
|
||||
"- tickRate"
|
||||
);
|
||||
));
|
||||
}
|
||||
|
||||
if (mustBake) preset->bake();
|
||||
|
@ -506,21 +506,21 @@ void FurnaceGUI::drawUserPresets() {
|
|||
ImGui::EndTable();
|
||||
}
|
||||
|
||||
if (ImGui::Button("Save and Close")) {
|
||||
if (ImGui::Button(_("Save and Close"))) {
|
||||
userPresetsOpen=false;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
ImGui::Dummy(ImVec2(8.0f*dpiScale,1.0f));
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Import")) {
|
||||
if (ImGui::Button(_("Import"))) {
|
||||
openFileDialog(GUI_FILE_IMPORT_USER_PRESETS);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Import (replace)")) {
|
||||
if (ImGui::Button(_("Import (replace)"))) {
|
||||
openFileDialog(GUI_FILE_IMPORT_USER_PRESETS_REPLACE);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Export")) {
|
||||
if (ImGui::Button(_("Export"))) {
|
||||
openFileDialog(GUI_FILE_EXPORT_USER_PRESETS);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,23 +90,23 @@ String getKeyName(int key, bool emptyNone) {
|
|||
if (emptyNone) {
|
||||
return "";
|
||||
} else {
|
||||
return "<nothing>";
|
||||
return _("<nothing>");
|
||||
}
|
||||
}
|
||||
String ret;
|
||||
if (key&FURKMOD_CTRL) ret+="Ctrl-";
|
||||
if (key&FURKMOD_CTRL) ret+=_("Ctrl-");
|
||||
if (key&FURKMOD_META) ret+=META_MODIFIER_NAME;
|
||||
if (key&FURKMOD_ALT) ret+="Alt-";
|
||||
if (key&FURKMOD_SHIFT) ret+="Shift-";
|
||||
if (key&FURKMOD_ALT) ret+=_("Alt-");
|
||||
if (key&FURKMOD_SHIFT) ret+=_("Shift-");
|
||||
if ((key&FURK_MASK)==0xffffff) {
|
||||
ret+="...";
|
||||
return ret;
|
||||
}
|
||||
const char* name=SDL_GetKeyName(key&FURK_MASK);
|
||||
if (name==NULL) {
|
||||
ret+="Unknown";
|
||||
ret+=_("Unknown");
|
||||
} else if (name[0]==0) {
|
||||
ret+="Unknown";
|
||||
ret+=_("Unknown");
|
||||
} else {
|
||||
ret+=name;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -42,21 +42,21 @@ void FurnaceGUI::drawXYOsc() {
|
|||
int xyOscXChannelP1 = xyOscXChannel+1;
|
||||
int xyOscYChannelP1 = xyOscYChannel+1;
|
||||
|
||||
ImGui::Text("X Channel");
|
||||
ImGui::Text(_("X Channel"));
|
||||
ImGui::SameLine();
|
||||
if (ImGui::DragInt("##XChannel",&xyOscXChannelP1,1.0f,1,DIV_MAX_OUTPUTS)) {
|
||||
xyOscXChannel=MIN(MAX(xyOscXChannelP1,1),DIV_MAX_OUTPUTS)-1;
|
||||
} rightClickable
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Invert##X",&xyOscXInvert);
|
||||
ImGui::Text("Y Channel");
|
||||
ImGui::Checkbox(_("Invert##X"),&xyOscXInvert);
|
||||
ImGui::Text(_("Y Channel"));
|
||||
ImGui::SameLine();
|
||||
if (ImGui::DragInt("##YChannel",&xyOscYChannelP1,1.0f,1,DIV_MAX_OUTPUTS)) {
|
||||
xyOscXChannel=MIN(MAX(xyOscYChannelP1,1),DIV_MAX_OUTPUTS)-1;
|
||||
} rightClickable
|
||||
ImGui::SameLine();
|
||||
ImGui::Checkbox("Invert##Y",&xyOscYInvert);
|
||||
if (ImGui::SliderFloat("Zoom",&xyOscZoom,0.5f,4.0f,"%.2fx")) {
|
||||
ImGui::Checkbox(_("Invert##Y"),&xyOscYInvert);
|
||||
if (ImGui::SliderFloat(_("Zoom"),&xyOscZoom,0.5f,4.0f,"%.2fx")) {
|
||||
xyOscZoom=MAX(xyOscZoom,0.0f);
|
||||
} rightClickable
|
||||
if (ImGui::IsItemHovered()) {
|
||||
|
@ -65,19 +65,19 @@ void FurnaceGUI::drawXYOsc() {
|
|||
if (ImGui::IsItemClicked(ImGuiMouseButton_Middle)) {
|
||||
xyOscZoom=1.0f;
|
||||
}
|
||||
if (ImGui::SliderInt("Samples",&xyOscSamples,2,32768)) {
|
||||
if (ImGui::SliderInt(_("Samples"),&xyOscSamples,2,32768)) {
|
||||
xyOscSamples=MIN(MAX(xyOscSamples,2),32768);
|
||||
} rightClickable
|
||||
if (ImGui::SliderFloat("Decay Time (ms)",&xyOscDecayTime,1.0f,1000.0f,"%.1f",ImGuiSliderFlags_Logarithmic)) {
|
||||
if (ImGui::SliderFloat(_("Decay Time (ms)"),&xyOscDecayTime,1.0f,1000.0f,"%.1f",ImGuiSliderFlags_Logarithmic)) {
|
||||
xyOscDecayTime=MAX(xyOscDecayTime,0.0f);
|
||||
} rightClickable
|
||||
if (ImGui::SliderFloat("Intensity",&xyOscIntensity,0.0f,5.0f,"%.2f")) {
|
||||
if (ImGui::SliderFloat(_("Intensity"),&xyOscIntensity,0.0f,5.0f,"%.2f")) {
|
||||
xyOscIntensity=MAX(xyOscIntensity,0.0f);
|
||||
} rightClickable
|
||||
if (ImGui::SliderFloat("Line Thickness",&xyOscThickness,0.0f,10.0f,"%.2f")) {
|
||||
if (ImGui::SliderFloat(_("Line Thickness"),&xyOscThickness,0.0f,10.0f,"%.2f")) {
|
||||
xyOscThickness=MAX(xyOscThickness,0.0f);
|
||||
} rightClickable
|
||||
if (ImGui::Button("OK")) {
|
||||
if (ImGui::Button(_("OK"))) {
|
||||
xyOscOptions=false;
|
||||
}
|
||||
} else {
|
||||
|
@ -210,13 +210,13 @@ void FurnaceGUI::drawXYOsc() {
|
|||
float valX=20.0f*log10f(fabsf((ImGui::GetMousePos().x-inSqrCenter.x)/scaleX));
|
||||
float valY=20.0f*log10f(fabsf((ImGui::GetMousePos().y-inSqrCenter.y)/scaleY));
|
||||
if (valX<=-INFINITY && valY<=-INFINITY) {
|
||||
ImGui::SetTooltip("(-Infinity)dB,(-Infinity)dB");
|
||||
ImGui::SetTooltip(_("(-Infinity)dB,(-Infinity)dB"));
|
||||
} else if (valX<=-INFINITY) {
|
||||
ImGui::SetTooltip("(-Infinity)dB,%.1fdB",valY);
|
||||
ImGui::SetTooltip(_("(-Infinity)dB,%.1fdB"),valY);
|
||||
} else if (valY<=-INFINITY) {
|
||||
ImGui::SetTooltip("%.1fdB,(-Infinity)dB",valY);
|
||||
ImGui::SetTooltip(_("%.1fdB,(-Infinity)dB"),valY);
|
||||
} else {
|
||||
ImGui::SetTooltip("%.1fdB,%.1fdB",valX,valY);
|
||||
ImGui::SetTooltip(_("%.1fdB,%.1fdB"),valX,valY);
|
||||
}
|
||||
}
|
||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
||||
|
|
|
@ -47,8 +47,11 @@ typedef std::string String;
|
|||
#define _(_str) gettext(_str)
|
||||
#else
|
||||
#define _(_str) _str
|
||||
#define ngettext(_strS,_strP,_cond) (((_cond)==1)?(_strS):(_strP))
|
||||
#endif
|
||||
|
||||
#define _N(_str) _str
|
||||
|
||||
typedef std::wstring WString;
|
||||
|
||||
enum TAParamResult {
|
||||
|
|
Loading…
Reference in a new issue