Merge pull request #1002 from visualboyadvance-m/interframe-blending-changer

Interframe blending changer OSD improvement
This commit is contained in:
Fabrice de Gans 2022-09-23 16:55:41 -07:00 committed by GitHub
commit a92c448405
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 194 additions and 185 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-18 14:29+0000\n" "POT-Creation-Date: 2022-09-21 17:52+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -187,7 +187,7 @@ msgstr ""
msgid "GameShark" msgid "GameShark"
msgstr "" msgstr ""
#: guiinit.cpp:757 cmdevents.cpp:675 #: guiinit.cpp:757 cmdevents.cpp:678
msgid "GameGenie" msgid "GameGenie"
msgstr "" msgstr ""
@ -262,7 +262,7 @@ msgstr ""
msgid "%d x %d - %dbpp @ %dHz" msgid "%d x %d - %dbpp @ %dHz"
msgstr "" msgstr ""
#: guiinit.cpp:1846 cmdevents.cpp:745 xrc/DisplayConfig.xrc:85 #: guiinit.cpp:1846 cmdevents.cpp:748 xrc/DisplayConfig.xrc:85
#: xrc/DisplayConfig.xrc:135 xrc/DisplayConfig.xrc:221 #: xrc/DisplayConfig.xrc:135 xrc/DisplayConfig.xrc:221
#: xrc/GameBoyAdvanceConfig.xrc:32 xrc/GameBoyAdvanceConfig.xrc:204 #: xrc/GameBoyAdvanceConfig.xrc:32 xrc/GameBoyAdvanceConfig.xrc:204
#: xrc/SoundConfig.xrc:219 xrc/SoundConfig.xrc:309 #: xrc/SoundConfig.xrc:219 xrc/SoundConfig.xrc:309
@ -306,50 +306,50 @@ msgstr ""
msgid "Main display panel not found" msgid "Main display panel not found"
msgstr "" msgstr ""
#: guiinit.cpp:2929 #: guiinit.cpp:2941
#, c-format #, c-format
msgid "Duplicate menu accelerator: %s for %s and %s; keeping first" msgid "Duplicate menu accelerator: %s for %s and %s; keeping first"
msgstr "" msgstr ""
#: guiinit.cpp:2943 #: guiinit.cpp:2955
#, c-format #, c-format
msgid "Menu accelerator %s for %s overrides default for %s ; keeping menu" msgid "Menu accelerator %s for %s overrides default for %s ; keeping menu"
msgstr "" msgstr ""
#: guiinit.cpp:3082 #: guiinit.cpp:3094
#, c-format #, c-format
msgid "Invalid menu item %s; removing" msgid "Invalid menu item %s; removing"
msgstr "" msgstr ""
#: guiinit.cpp:3290 #: guiinit.cpp:3302
msgid "Code" msgid "Code"
msgstr "" msgstr ""
#: guiinit.cpp:3299 #: guiinit.cpp:3311
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: guiinit.cpp:3373 xrc/CheatAdd.xrc:31 #: guiinit.cpp:3385 xrc/CheatAdd.xrc:31
msgid "Address" msgid "Address"
msgstr "" msgstr ""
#: guiinit.cpp:3374 #: guiinit.cpp:3386
msgid "Old Value" msgid "Old Value"
msgstr "" msgstr ""
#: guiinit.cpp:3375 #: guiinit.cpp:3387
msgid "New Value" msgid "New Value"
msgstr "" msgstr ""
#: guiinit.cpp:3902 #: guiinit.cpp:3918
msgid "Menu commands" msgid "Menu commands"
msgstr "" msgstr ""
#: guiinit.cpp:3925 #: guiinit.cpp:3941
msgid "Other commands" msgid "Other commands"
msgstr "" msgstr ""
#: guiinit.cpp:4036 #: guiinit.cpp:4052
msgid "JoyBus host invalid; disabling" msgid "JoyBus host invalid; disabling"
msgstr "" msgstr ""
@ -358,7 +358,7 @@ msgid "Text files (*.txt;*.log)|*.txt;*.log|"
msgstr "" msgstr ""
#: viewers.cpp:562 viewers.cpp:772 gfxviewers.cpp:1600 gfxviewers.cpp:1742 #: viewers.cpp:562 viewers.cpp:772 gfxviewers.cpp:1600 gfxviewers.cpp:1742
#: cmdevents.cpp:1157 cmdevents.cpp:1235 cmdevents.cpp:1305 cmdevents.cpp:1374 #: cmdevents.cpp:1160 cmdevents.cpp:1238 cmdevents.cpp:1308 cmdevents.cpp:1377
#: viewsupt.cpp:1180 #: viewsupt.cpp:1180
msgid "Select output file" msgid "Select output file"
msgstr "" msgstr ""
@ -445,11 +445,11 @@ msgid ""
"Table (*.act)|*.act" "Table (*.act)|*.act"
msgstr "" msgstr ""
#: gfxviewers.cpp:1601 gfxviewers.cpp:1743 cmdevents.cpp:1158 viewsupt.cpp:1181 #: gfxviewers.cpp:1601 gfxviewers.cpp:1743 cmdevents.cpp:1161 viewsupt.cpp:1181
msgid "PNG images|*.png|BMP images|*.bmp" msgid "PNG images|*.png|BMP images|*.bmp"
msgstr "" msgstr ""
#: cmdevents.cpp:104 #: cmdevents.cpp:107
msgid "" msgid ""
"GameBoy Advance Files (*.agb;*.gba;*.bin;*.elf;*.mb;*.zip;*.7z;*.rar)|*.agb;" "GameBoy Advance Files (*.agb;*.gba;*.bin;*.elf;*.mb;*.zip;*.7z;*.rar)|*.agb;"
"*.gba;*.bin;*.elf;*.mb;*.agb.gz;*.gba.gz;*.bin.gz;*.elf.gz;*.mb.gz;*.agb.z;*." "*.gba;*.bin;*.elf;*.mb;*.agb.gz;*.gba.gz;*.bin.gz;*.elf.gz;*.mb.gz;*.agb.z;*."
@ -459,371 +459,371 @@ msgid ""
"*.7z;*.rar|" "*.7z;*.rar|"
msgstr "" msgstr ""
#: cmdevents.cpp:116 #: cmdevents.cpp:119
msgid "Open ROM file" msgid "Open ROM file"
msgstr "" msgstr ""
#: cmdevents.cpp:133 #: cmdevents.cpp:136
msgid "" msgid ""
"GameBoy Files (*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|*.dmg;*.gb;*." "GameBoy Files (*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|*.dmg;*.gb;*."
"gbc;*.cgb;*.sgb;*.dmg.gz;*.gb.gz;*.gbc.gz;*.cgb.gz;*.sgb.gz;*.dmg.z;*.gb.z;*." "gbc;*.cgb;*.sgb;*.dmg.gz;*.gb.gz;*.gbc.gz;*.cgb.gz;*.sgb.gz;*.dmg.z;*.gb.z;*."
"gbc.z;*.cgb.z;*.sgb.z;*.zip;*.7z;*.rar|" "gbc.z;*.cgb.z;*.sgb.z;*.zip;*.7z;*.rar|"
msgstr "" msgstr ""
#: cmdevents.cpp:140 #: cmdevents.cpp:143
msgid "Open GB ROM file" msgid "Open GB ROM file"
msgstr "" msgstr ""
#: cmdevents.cpp:157 #: cmdevents.cpp:160
msgid "" msgid ""
"GameBoy Color Files (*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|*.dmg;*." "GameBoy Color Files (*.dmg;*.gb;*.gbc;*.cgb;*.sgb;*.zip;*.7z;*.rar)|*.dmg;*."
"gb;*.gbc;*.cgb;*.sgb;*.dmg.gz;*.gb.gz;*.gbc.gz;*.cgb.gz;*.sgb.gz;*.dmg.z;*." "gb;*.gbc;*.cgb;*.sgb;*.dmg.gz;*.gb.gz;*.gbc.gz;*.cgb.gz;*.sgb.gz;*.dmg.z;*."
"gb.z;*.gbc.z;*.cgb.z;*.sgb.z;*.zip;*.7z;*.rar|" "gb.z;*.gbc.z;*.cgb.z;*.sgb.z;*.zip;*.7z;*.rar|"
msgstr "" msgstr ""
#: cmdevents.cpp:164 #: cmdevents.cpp:167
msgid "Open GBC ROM file" msgid "Open GBC ROM file"
msgstr "" msgstr ""
#: cmdevents.cpp:583 cmdevents.cpp:699 cmdevents.cpp:738 cmdevents.cpp:811 #: cmdevents.cpp:586 cmdevents.cpp:702 cmdevents.cpp:741 cmdevents.cpp:814
msgid "Unknown" msgid "Unknown"
msgstr "" msgstr ""
#: cmdevents.cpp:591 #: cmdevents.cpp:594
msgid "ROM" msgid "ROM"
msgstr "" msgstr ""
#: cmdevents.cpp:595 #: cmdevents.cpp:598
msgid "ROM+MBC1" msgid "ROM+MBC1"
msgstr "" msgstr ""
#: cmdevents.cpp:599 #: cmdevents.cpp:602
msgid "ROM+MBC1+RAM" msgid "ROM+MBC1+RAM"
msgstr "" msgstr ""
#: cmdevents.cpp:603 #: cmdevents.cpp:606
msgid "ROM+MBC1+RAM+BATT" msgid "ROM+MBC1+RAM+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:607 #: cmdevents.cpp:610
msgid "ROM+MBC2" msgid "ROM+MBC2"
msgstr "" msgstr ""
#: cmdevents.cpp:611 #: cmdevents.cpp:614
msgid "ROM+MBC2+BATT" msgid "ROM+MBC2+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:615 #: cmdevents.cpp:618
msgid "ROM+MMM01" msgid "ROM+MMM01"
msgstr "" msgstr ""
#: cmdevents.cpp:619 #: cmdevents.cpp:622
msgid "ROM+MMM01+RAM" msgid "ROM+MMM01+RAM"
msgstr "" msgstr ""
#: cmdevents.cpp:623 #: cmdevents.cpp:626
msgid "ROM+MMM01+RAM+BATT" msgid "ROM+MMM01+RAM+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:627 #: cmdevents.cpp:630
msgid "ROM+MBC3+TIMER+BATT" msgid "ROM+MBC3+TIMER+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:631 #: cmdevents.cpp:634
msgid "ROM+MBC3+TIMER+RAM+BATT" msgid "ROM+MBC3+TIMER+RAM+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:635 #: cmdevents.cpp:638
msgid "ROM+MBC3" msgid "ROM+MBC3"
msgstr "" msgstr ""
#: cmdevents.cpp:639 #: cmdevents.cpp:642
msgid "ROM+MBC3+RAM" msgid "ROM+MBC3+RAM"
msgstr "" msgstr ""
#: cmdevents.cpp:643 #: cmdevents.cpp:646
msgid "ROM+MBC3+RAM+BATT" msgid "ROM+MBC3+RAM+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:647 #: cmdevents.cpp:650
msgid "ROM+MBC5" msgid "ROM+MBC5"
msgstr "" msgstr ""
#: cmdevents.cpp:651 #: cmdevents.cpp:654
msgid "ROM+MBC5+RAM" msgid "ROM+MBC5+RAM"
msgstr "" msgstr ""
#: cmdevents.cpp:655 #: cmdevents.cpp:658
msgid "ROM+MBC5+RAM+BATT" msgid "ROM+MBC5+RAM+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:659 #: cmdevents.cpp:662
msgid "ROM+MBC5+RUMBLE" msgid "ROM+MBC5+RUMBLE"
msgstr "" msgstr ""
#: cmdevents.cpp:663 #: cmdevents.cpp:666
msgid "ROM+MBC5+RUMBLE+RAM" msgid "ROM+MBC5+RUMBLE+RAM"
msgstr "" msgstr ""
#: cmdevents.cpp:667 #: cmdevents.cpp:670
msgid "ROM+MBC5+RUMBLE+RAM+BATT" msgid "ROM+MBC5+RUMBLE+RAM+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:671 #: cmdevents.cpp:674
msgid "ROM+MBC7+BATT" msgid "ROM+MBC7+BATT"
msgstr "" msgstr ""
#: cmdevents.cpp:679 #: cmdevents.cpp:682
msgid "GameShark V3.0" msgid "GameShark V3.0"
msgstr "" msgstr ""
#: cmdevents.cpp:683 #: cmdevents.cpp:686
msgid "ROM+POCKET CAMERA" msgid "ROM+POCKET CAMERA"
msgstr "" msgstr ""
#: cmdevents.cpp:687 #: cmdevents.cpp:690
msgid "ROM+BANDAI TAMA5" msgid "ROM+BANDAI TAMA5"
msgstr "" msgstr ""
#: cmdevents.cpp:691 #: cmdevents.cpp:694
msgid "ROM+HuC-3" msgid "ROM+HuC-3"
msgstr "" msgstr ""
#: cmdevents.cpp:695 #: cmdevents.cpp:698
msgid "ROM+HuC-1" msgid "ROM+HuC-1"
msgstr "" msgstr ""
#: cmdevents.cpp:847 cmdevents.cpp:869 #: cmdevents.cpp:850 cmdevents.cpp:872
msgid "Select Dot Code file" msgid "Select Dot Code file"
msgstr "" msgstr ""
#: cmdevents.cpp:849 cmdevents.cpp:871 #: cmdevents.cpp:852 cmdevents.cpp:874
msgid "e-Reader Dot Code (*.bin;*.raw)|*.bin;*.raw" msgid "e-Reader Dot Code (*.bin;*.raw)|*.bin;*.raw"
msgstr "" msgstr ""
#: cmdevents.cpp:890 cmdevents.cpp:1085 #: cmdevents.cpp:893 cmdevents.cpp:1088
msgid "Select battery file" msgid "Select battery file"
msgstr "" msgstr ""
#: cmdevents.cpp:891 cmdevents.cpp:1086 #: cmdevents.cpp:894 cmdevents.cpp:1089
msgid "Battery file (*.sav)|*.sav|Flash save (*.dat)|*.dat" msgid "Battery file (*.sav)|*.sav|Flash save (*.dat)|*.dat"
msgstr "" msgstr ""
#: cmdevents.cpp:899 #: cmdevents.cpp:902
msgid "" msgid ""
"Importing a battery file will erase any saved games (permanently after the " "Importing a battery file will erase any saved games (permanently after the "
"next write). Do you want to continue?" "next write). Do you want to continue?"
msgstr "" msgstr ""
#: cmdevents.cpp:900 cmdevents.cpp:928 cmdevents.cpp:1048 #: cmdevents.cpp:903 cmdevents.cpp:931 cmdevents.cpp:1051
msgid "Confirm import" msgid "Confirm import"
msgstr "" msgstr ""
#: cmdevents.cpp:906 panel.cpp:392 #: cmdevents.cpp:909 panel.cpp:392
#, c-format #, c-format
msgid "Loaded battery %s" msgid "Loaded battery %s"
msgstr "" msgstr ""
#: cmdevents.cpp:908 #: cmdevents.cpp:911
#, c-format #, c-format
msgid "Error loading battery %s" msgid "Error loading battery %s"
msgstr "" msgstr ""
#: cmdevents.cpp:917 #: cmdevents.cpp:920
msgid "Select code file" msgid "Select code file"
msgstr "" msgstr ""
#: cmdevents.cpp:918 #: cmdevents.cpp:921
msgid "Gameshark Code File (*.spc;*.xpc)|*.spc;*.xpc" msgid "Gameshark Code File (*.spc;*.xpc)|*.spc;*.xpc"
msgstr "" msgstr ""
#: cmdevents.cpp:918 #: cmdevents.cpp:921
msgid "Gameshark Code File (*.gcf)|*.gcf" msgid "Gameshark Code File (*.gcf)|*.gcf"
msgstr "" msgstr ""
#: cmdevents.cpp:927 #: cmdevents.cpp:930
msgid "" msgid ""
"Importing a code file will replace any loaded cheats. Do you want to " "Importing a code file will replace any loaded cheats. Do you want to "
"continue?" "continue?"
msgstr "" msgstr ""
#: cmdevents.cpp:944 #: cmdevents.cpp:947
#, c-format #, c-format
msgid "Cannot open file %s" msgid "Cannot open file %s"
msgstr "" msgstr ""
#: cmdevents.cpp:954 #: cmdevents.cpp:957
#, c-format #, c-format
msgid "Unsupported code file %s" msgid "Unsupported code file %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1024 #: cmdevents.cpp:1027
#, c-format #, c-format
msgid "Loaded code file %s" msgid "Loaded code file %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1026 #: cmdevents.cpp:1029
#, c-format #, c-format
msgid "Error loading code file %s" msgid "Error loading code file %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1037 cmdevents.cpp:1113 #: cmdevents.cpp:1040 cmdevents.cpp:1116
msgid "Select snapshot file" msgid "Select snapshot file"
msgstr "" msgstr ""
#: cmdevents.cpp:1038 #: cmdevents.cpp:1041
msgid "" msgid ""
"GS & PAC Snapshots (*.sps;*.xps)|*.sps;*.xps|GameShark SP Snapshots (*.gsv)|" "GS & PAC Snapshots (*.sps;*.xps)|*.sps;*.xps|GameShark SP Snapshots (*.gsv)|"
"*.gsv" "*.gsv"
msgstr "" msgstr ""
#: cmdevents.cpp:1038 #: cmdevents.cpp:1041
msgid "Gameboy Snapshot (*.gbs)|*.gbs" msgid "Gameboy Snapshot (*.gbs)|*.gbs"
msgstr "" msgstr ""
#: cmdevents.cpp:1047 #: cmdevents.cpp:1050
msgid "" msgid ""
"Importing a snapshot file will erase any saved games (permanently after the " "Importing a snapshot file will erase any saved games (permanently after the "
"next write). Do you want to continue?" "next write). Do you want to continue?"
msgstr "" msgstr ""
#: cmdevents.cpp:1072 #: cmdevents.cpp:1075
#, c-format #, c-format
msgid "Loaded snapshot file %s" msgid "Loaded snapshot file %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1074 #: cmdevents.cpp:1077
#, c-format #, c-format
msgid "Error loading snapshot file %s" msgid "Error loading snapshot file %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1097 #: cmdevents.cpp:1100
#, c-format #, c-format
msgid "Wrote battery %s" msgid "Wrote battery %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1099 panel.cpp:701 #: cmdevents.cpp:1102 panel.cpp:701
#, c-format #, c-format
msgid "Error writing battery %s" msgid "Error writing battery %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1107 #: cmdevents.cpp:1110
msgid "EEPROM saves cannot be exported" msgid "EEPROM saves cannot be exported"
msgstr "" msgstr ""
#: cmdevents.cpp:1114 #: cmdevents.cpp:1117
msgid "Gameshark Snapshot (*.sps)|*.sps" msgid "Gameshark Snapshot (*.sps)|*.sps"
msgstr "" msgstr ""
#: cmdevents.cpp:1128 #: cmdevents.cpp:1131
msgid "Exported from VisualBoyAdvance-M" msgid "Exported from VisualBoyAdvance-M"
msgstr "" msgstr ""
#: cmdevents.cpp:1140 #: cmdevents.cpp:1143
#, c-format #, c-format
msgid "Saved snapshot file %s" msgid "Saved snapshot file %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1142 #: cmdevents.cpp:1145
#, c-format #, c-format
msgid "Error saving snapshot file %s" msgid "Error saving snapshot file %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1182 sys.cpp:557 #: cmdevents.cpp:1185 sys.cpp:557
#, c-format #, c-format
msgid "Wrote snapshot %s" msgid "Wrote snapshot %s"
msgstr "" msgstr ""
#: cmdevents.cpp:1203 cmdevents.cpp:1273 cmdevents.cpp:1344 cmdevents.cpp:1408 #: cmdevents.cpp:1206 cmdevents.cpp:1276 cmdevents.cpp:1347 cmdevents.cpp:1411
msgid " files (" msgid " files ("
msgstr "" msgstr ""
#: cmdevents.cpp:1439 #: cmdevents.cpp:1442
msgid "Select file" msgid "Select file"
msgstr "" msgstr ""
#: cmdevents.cpp:1756 cmdevents.cpp:1849 #: cmdevents.cpp:1759 cmdevents.cpp:1852
msgid "Select state file" msgid "Select state file"
msgstr "" msgstr ""
#: cmdevents.cpp:1757 cmdevents.cpp:1850 #: cmdevents.cpp:1760 cmdevents.cpp:1853
msgid "VisualBoyAdvance saved game files|*.sgm" msgid "VisualBoyAdvance saved game files|*.sgm"
msgstr "" msgstr ""
#: cmdevents.cpp:1880 cmdevents.cpp:1890 cmdevents.cpp:1901 #: cmdevents.cpp:1883 cmdevents.cpp:1893 cmdevents.cpp:1904
#, c-format #, c-format
msgid "Current state slot #%d" msgid "Current state slot #%d"
msgstr "" msgstr ""
#: cmdevents.cpp:1971 #: cmdevents.cpp:1974
msgid "Cannot use Colorizer Hack when GB BIOS File is enabled." msgid "Cannot use Colorizer Hack when GB BIOS File is enabled."
msgstr "" msgstr ""
#: cmdevents.cpp:2186 #: cmdevents.cpp:2189
msgid "Sound enabled" msgid "Sound enabled"
msgstr "" msgstr ""
#: cmdevents.cpp:2186 #: cmdevents.cpp:2189
msgid "Sound disabled" msgid "Sound disabled"
msgstr "" msgstr ""
#: cmdevents.cpp:2199 cmdevents.cpp:2213 #: cmdevents.cpp:2202 cmdevents.cpp:2216
#, c-format #, c-format
msgid "Volume: %d%%" msgid "Volume: %d%%"
msgstr "" msgstr ""
#: cmdevents.cpp:2288 #: cmdevents.cpp:2291
msgid "Set to 0 for pseudo tty" msgid "Set to 0 for pseudo tty"
msgstr "" msgstr ""
#: cmdevents.cpp:2290 #: cmdevents.cpp:2293
msgid "Port to wait for connection:" msgid "Port to wait for connection:"
msgstr "" msgstr ""
#: cmdevents.cpp:2291 #: cmdevents.cpp:2294
msgid "GDB Connection" msgid "GDB Connection"
msgstr "" msgstr ""
#: cmdevents.cpp:2344 #: cmdevents.cpp:2347
#, c-format #, c-format
msgid "Waiting for connection at %s" msgid "Waiting for connection at %s"
msgstr "" msgstr ""
#: cmdevents.cpp:2351 #: cmdevents.cpp:2354
#, c-format #, c-format
msgid "Waiting for connection on port %d" msgid "Waiting for connection on port %d"
msgstr "" msgstr ""
#: cmdevents.cpp:2354 #: cmdevents.cpp:2357
msgid "Waiting for GDB..." msgid "Waiting for GDB..."
msgstr "" msgstr ""
#: cmdevents.cpp:2769 #: cmdevents.cpp:2772
#, c-format #, c-format
msgid "Using pixel filter %s" msgid "Using pixel filter: %s"
msgstr "" msgstr ""
#: cmdevents.cpp:2784 #: cmdevents.cpp:2787
#, c-format #, c-format
msgid "Using interframe blending #%d" msgid "Using interframe blending: %s"
msgstr "" msgstr ""
#: cmdevents.cpp:2823 panel.cpp:194 panel.cpp:308 #: cmdevents.cpp:2826 panel.cpp:194 panel.cpp:308
msgid "Could not initialize the sound driver!" msgid "Could not initialize the sound driver!"
msgstr "" msgstr ""
#: cmdevents.cpp:2927 #: cmdevents.cpp:2930
msgid "Nintendo GameBoy (+Color+Advance) emulator." msgid "Nintendo GameBoy (+Color+Advance) emulator."
msgstr "" msgstr ""
#: cmdevents.cpp:2928 #: cmdevents.cpp:2931
msgid "" msgid ""
"Copyright (C) 1999-2003 Forgotten\n" "Copyright (C) 1999-2003 Forgotten\n"
"Copyright (C) 2004-2006 VBA development team\n" "Copyright (C) 2004-2006 VBA development team\n"
"Copyright (C) 2007-2020 VBA-M development team" "Copyright (C) 2007-2020 VBA-M development team"
msgstr "" msgstr ""
#: cmdevents.cpp:2929 #: cmdevents.cpp:2932
msgid "" msgid ""
"This program is free software: you can redistribute it and/or modify\n" "This program is free software: you can redistribute it and/or modify\n"
"it under the terms of the GNU General Public License as published by\n" "it under the terms of the GNU General Public License as published by\n"
@ -839,15 +839,15 @@ msgid ""
"along with this program. If not, see http://www.gnu.org/licenses ." "along with this program. If not, see http://www.gnu.org/licenses ."
msgstr "" msgstr ""
#: cmdevents.cpp:3189 #: cmdevents.cpp:3192
msgid "Cannot use GB BIOS when Colorizer Hack is enabled." msgid "Cannot use GB BIOS when Colorizer Hack is enabled."
msgstr "" msgstr ""
#: cmdevents.cpp:3249 #: cmdevents.cpp:3252
msgid "LAN link is already active. Disable link mode to disconnect." msgid "LAN link is already active. Disable link mode to disconnect."
msgstr "" msgstr ""
#: cmdevents.cpp:3255 #: cmdevents.cpp:3258
msgid "Network is not supported in local mode." msgid "Network is not supported in local mode."
msgstr "" msgstr ""
@ -1749,11 +1749,11 @@ msgid "Interframe blending :"
msgstr "" msgstr ""
#: xrc/DisplayConfig.xrc:136 #: xrc/DisplayConfig.xrc:136
msgid "Smart interframe blending" msgid "Smart"
msgstr "" msgstr ""
#: xrc/DisplayConfig.xrc:137 #: xrc/DisplayConfig.xrc:137
msgid "Interframe motion blur" msgid "Motion Blur"
msgstr "" msgstr ""
#: xrc/DisplayConfig.xrc:151 xrc/SoundConfig.xrc:91 #: xrc/DisplayConfig.xrc:151 xrc/SoundConfig.xrc:91

View File

@ -7,7 +7,7 @@
void initAutoupdater() void initAutoupdater()
{ {
// even if we are a nightly, only check latest stable version // even if we are a nightly, only check latest stable version
wxString version = str_split(vbam_version, '-')[0]; wxString version = strutils::split(vbam_version, '-')[0];
#ifndef NO_HTTPS #ifndef NO_HTTPS
win_sparkle_set_appcast_url("https://data.vba-m.com/appcast.xml"); win_sparkle_set_appcast_url("https://data.vba-m.com/appcast.xml");
#else #else

View File

@ -1,4 +1,5 @@
#include "wxvbam.h" #include "wxvbam.h"
#include <algorithm> #include <algorithm>
#include <wx/aboutdlg.h> #include <wx/aboutdlg.h>
#include <wx/ffile.h> #include <wx/ffile.h>
@ -10,6 +11,7 @@
#include <wx/wfstream.h> #include <wx/wfstream.h>
#include <wx/msgdlg.h> #include <wx/msgdlg.h>
#include "strutils.h"
#include "../common/version_cpp.h" #include "../common/version_cpp.h"
#include "../gb/gbPrinter.h" #include "../gb/gbPrinter.h"
#include "../gba/agbprint.h" #include "../gba/agbprint.h"
@ -2766,7 +2768,7 @@ EVT_HANDLER_MASK(ChangeFilter, "Change Pixel Filter", CMDEN_NREC_ANY)
} }
wxString msg; wxString msg;
msg.Printf(_("Using pixel filter %s"), pixel_filters->GetString(gopts.filter)); msg.Printf(_("Using pixel filter: %s"), pixel_filters_->GetString(gopts.filter));
systemScreenMessage(msg); systemScreenMessage(msg);
} }
@ -2781,7 +2783,7 @@ EVT_HANDLER_MASK(ChangeIFB, "Change Interframe Blending", CMDEN_NREC_ANY)
} }
wxString msg; wxString msg;
msg.Printf(_("Using interframe blending #%d"), gopts.ifb); msg.Printf(_("Using interframe blending: %s"), interframe_blenders_->GetString(gopts.ifb));
systemScreenMessage(msg); systemScreenMessage(msg);
} }

View File

@ -3715,7 +3715,7 @@ bool MainFrame::BindControls()
ch = GetValidatedChild<wxChoice, wxGenericValidator>(d, "Filter", wxGenericValidator(&gopts.filter)); ch = GetValidatedChild<wxChoice, wxGenericValidator>(d, "Filter", wxGenericValidator(&gopts.filter));
// Save the Filters choice control to extract the names from the XRC. // Save the Filters choice control to extract the names from the XRC.
pixel_filters = ch; pixel_filters_ = ch;
// these two are filled and/or hidden at dialog load time // these two are filled and/or hidden at dialog load time
wxControl* pll; wxControl* pll;
@ -3731,6 +3731,10 @@ bool MainFrame::BindControls()
NULL, &PluginEnableHandler); NULL, &PluginEnableHandler);
ch = GetValidatedChild<wxChoice, wxGenericValidator>(d, "IFB", wxGenericValidator(&gopts.ifb)); ch = GetValidatedChild<wxChoice, wxGenericValidator>(d, "IFB", wxGenericValidator(&gopts.ifb));
d->Fit(); d->Fit();
// Save the interframe blender choice control to extract the names from the XRC.
interframe_blenders_ = ch;
} }
d = LoadXRCropertySheetDialog("SoundConfig"); d = LoadXRCropertySheetDialog("SoundConfig");
wxSlider* sl; wxSlider* sl;

View File

@ -129,6 +129,7 @@ const wxAcceleratorEntryUnicode default_accels[] = {
wxAcceleratorEntryUnicode(wxMOD_CMD, WXK_F10, wxID_FILE10), wxAcceleratorEntryUnicode(wxMOD_CMD, WXK_F10, wxID_FILE10),
wxAcceleratorEntryUnicode(wxMOD_CMD, wxT('0'), XRCID("VideoLayersReset")), wxAcceleratorEntryUnicode(wxMOD_CMD, wxT('0'), XRCID("VideoLayersReset")),
wxAcceleratorEntryUnicode(wxMOD_CMD, wxT('G'), XRCID("ChangeFilter")), wxAcceleratorEntryUnicode(wxMOD_CMD, wxT('G'), XRCID("ChangeFilter")),
wxAcceleratorEntryUnicode(wxMOD_CMD, wxT('I'), XRCID("ChangeIFB")),
wxAcceleratorEntryUnicode(wxMOD_NONE, WXK_NUMPAD_ADD, XRCID("IncreaseVolume")), wxAcceleratorEntryUnicode(wxMOD_NONE, WXK_NUMPAD_ADD, XRCID("IncreaseVolume")),
wxAcceleratorEntryUnicode(wxMOD_NONE, WXK_NUMPAD_SUBTRACT, XRCID("DecreaseVolume")), wxAcceleratorEntryUnicode(wxMOD_NONE, WXK_NUMPAD_SUBTRACT, XRCID("DecreaseVolume")),
wxAcceleratorEntryUnicode(wxMOD_NONE, WXK_NUMPAD_ENTER, XRCID("ToggleSound")) wxAcceleratorEntryUnicode(wxMOD_NONE, WXK_NUMPAD_ENTER, XRCID("ToggleSound"))
@ -631,12 +632,12 @@ void load_opts()
cfg->Read(opt.opt, opt.stropt, *opt.stropt); cfg->Read(opt.opt, opt.stropt, *opt.stropt);
opt.curstr = *opt.stropt; opt.curstr = *opt.stropt;
} else if (!opt.enumvals.empty()) { } else if (!opt.enumvals.empty()) {
auto enum_opts = str_split(opt.enumvals.MakeLower(), wxT("|")); auto enum_opts = strutils::split(opt.enumvals.MakeLower(), wxT("|"));
opt.curint = *opt.intopt; opt.curint = *opt.intopt;
bool gotit = cfg->Read(opt.opt, &s); s.MakeLower(); bool gotit = cfg->Read(opt.opt, &s); s.MakeLower();
if (gotit && !s.empty()) { if (gotit && !s.empty()) {
const auto found_pos = vec_find(enum_opts, s); const auto found_pos = enum_opts.Index(s);
const bool matched = ((int)found_pos != wxNOT_FOUND); const bool matched = ((int)found_pos != wxNOT_FOUND);
if (!matched) { if (!matched) {
@ -795,7 +796,7 @@ void update_opts()
} else if (!opt.enumvals.empty()) { } else if (!opt.enumvals.empty()) {
if (*opt.intopt != opt.curint) { if (*opt.intopt != opt.curint) {
opt.curint = *opt.intopt; opt.curint = *opt.intopt;
auto enum_opts = str_split(opt.enumvals.MakeLower(), wxT("|")); auto enum_opts = strutils::split(opt.enumvals.MakeLower(), wxT("|"));
cfg->Write(opt.opt, enum_opts[opt.curint]); cfg->Write(opt.opt, enum_opts[opt.curint]);
} }
@ -938,9 +939,9 @@ bool opt_set(const wxString& name, const wxString& val)
} else if (!opt->enumvals.empty()) { } else if (!opt->enumvals.empty()) {
wxString s = val; s.MakeLower(); wxString s = val; s.MakeLower();
wxString ev = opt->enumvals; ev.MakeLower(); wxString ev = opt->enumvals; ev.MakeLower();
auto enum_opts = str_split(ev, wxT("|")); auto enum_opts = strutils::split(ev, wxT("|"));
const std::size_t found_pos = vec_find(enum_opts, s); const std::size_t found_pos = enum_opts.Index(s);
const bool matched = ((int)found_pos != wxNOT_FOUND); const bool matched = ((int)found_pos != wxNOT_FOUND);
if (!matched) { if (!matched) {
@ -1016,7 +1017,7 @@ bool opt_set(const wxString& name, const wxString& val)
if (name.Find(wxT('/')) == wxNOT_FOUND) if (name.Find(wxT('/')) == wxNOT_FOUND)
return false; return false;
auto parts = str_split(name, wxT("/")); auto parts = strutils::split(name, wxT("/"));
if (parts[0] != wxT("Keyboard")) { if (parts[0] != wxT("Keyboard")) {
cmditem* cmd = std::lower_bound(&cmdtab[0], &cmdtab[ncmds], cmditem{parts[1],wxString(),0,0,NULL}, cmditem_lt); cmditem* cmd = std::lower_bound(&cmdtab[0], &cmdtab[ncmds], cmditem{parts[1],wxString(),0,0,NULL}, cmditem_lt);

View File

@ -1,10 +1,13 @@
#include "strutils.h" #include "strutils.h"
#include <wx/tokenzr.h> #include <wx/tokenzr.h>
namespace strutils {
// From: https://stackoverflow.com/a/7408245/262458 // From: https://stackoverflow.com/a/7408245/262458
// //
// Modified to ignore empty tokens or return sep for them. // Modified to ignore empty tokens or return sep for them.
wxArrayString str_split(const wxString& text, const wxString& sep, bool empty_token_is_sep) { wxArrayString split(const wxString& text, const wxString& sep, bool empty_token_is_sep) {
wxArrayString tokens; wxArrayString tokens;
size_t start = 0, end = 0; size_t start = 0, end = 0;
@ -29,11 +32,9 @@ wxArrayString str_split(const wxString& text, const wxString& sep, bool empty_to
return tokens; return tokens;
} }
wxArrayString str_split_with_sep(const wxString& text, const wxString& sep) wxArrayString split_with_sep(const wxString& text, const wxString& sep)
{ {
return str_split(text, sep, true); return split(text, sep, true);
} }
size_t vec_find(wxArrayString& opts, const wxString& val) { } // namespace strutils
return opts.Index(val);
}

View File

@ -7,15 +7,16 @@
#include <wx/string.h> #include <wx/string.h>
#include <wx/arrstr.h> #include <wx/arrstr.h>
namespace strutils {
// From: https://stackoverflow.com/a/7408245/262458 // From: https://stackoverflow.com/a/7408245/262458
wxArrayString str_split(const wxString& text, const wxString& sep, bool empty_token_is_sep=false); wxArrayString split(const wxString& text, const wxString& sep, bool empty_token_is_sep=false);
// Same as above, but it includes the sep dir. // Same as above, but it includes the sep dir.
// If "A,,,B" is the text and "," is sep, then // If "A,,,B" is the text and "," is sep, then
// 'A', ',' and 'B' will be in the output. // 'A', ',' and 'B' will be in the output.
wxArrayString str_split_with_sep(const wxString& text, const wxString& sep); wxArrayString split_with_sep(const wxString& text, const wxString& sep);
// From: https://stackoverflow.com/a/15099743/262458 } // namespace strutils
size_t vec_find(wxArrayString& opts, const wxString& val);
#endif #endif

View File

@ -2,96 +2,95 @@
#include "tests.hpp" #include "tests.hpp"
TEST_CASE("str_split() basic test") { TEST_CASE("strutils::split() basic test") {
wxString foo = "foo|bar|baz"; wxString foo = "foo|bar|baz";
auto vec = str_split(foo, '|'); auto vec = strutils::split(foo, '|');
REQUIRE(vec.size() == 3); CHECK(vec.size() == 3);
REQUIRE(vec[0] == "foo"); CHECK(vec[0] == "foo");
REQUIRE(vec[1] == "bar"); CHECK(vec[1] == "bar");
REQUIRE(vec[2] == "baz"); CHECK(vec[2] == "baz");
} }
TEST_CASE("str_split() multi-char separator") { TEST_CASE("strutils::split() multi-char separator") {
wxString foo = "foo|-|bar|-|baz"; wxString foo = "foo|-|bar|-|baz";
auto vec = str_split(foo, "|-|"); auto vec = strutils::split(foo, "|-|");
REQUIRE(vec.size() == 3); CHECK(vec.size() == 3);
REQUIRE(vec[0] == "foo"); CHECK(vec[0] == "foo");
REQUIRE(vec[1] == "bar"); CHECK(vec[1] == "bar");
REQUIRE(vec[2] == "baz"); CHECK(vec[2] == "baz");
} }
TEST_CASE("str_split() skips empty tokens") { TEST_CASE("strutils::split() skips empty tokens") {
wxString foo = "|-|foo|-||-|bar|-|baz|-|"; wxString foo = "|-|foo|-||-|bar|-|baz|-|";
auto vec = str_split(foo, "|-|"); auto vec = strutils::split(foo, "|-|");
REQUIRE(vec.size() == 3); CHECK(vec.size() == 3);
REQUIRE(vec[0] == "foo"); CHECK(vec[0] == "foo");
REQUIRE(vec[1] == "bar"); CHECK(vec[1] == "bar");
REQUIRE(vec[2] == "baz"); CHECK(vec[2] == "baz");
} }
TEST_CASE("str_split() empty input") { TEST_CASE("strutils::split() empty input") {
wxString foo; wxString foo;
auto vec = str_split(foo, "|-|"); auto vec = strutils::split(foo, "|-|");
REQUIRE(vec.size() == 0); CHECK(vec.size() == 0);
} }
TEST_CASE("str_split() no tokens, just separators") { TEST_CASE("strutils::split() no tokens, just separators") {
wxString foo = "|-||-||-||-||-|"; wxString foo = "|-||-||-||-||-|";
auto vec = str_split(foo, "|-|"); auto vec = strutils::split(foo, "|-|");
REQUIRE(vec.size() == 0); CHECK(vec.size() == 0);
} }
TEST_CASE("str_split_with_sep() basic test") { TEST_CASE("strutils::split_with_sep() basic test") {
wxString foo = "foo|bar|baz|"; wxString foo = "foo|bar|baz|";
auto vec = str_split_with_sep(foo, '|'); auto vec = strutils::split_with_sep(foo, '|');
REQUIRE(vec.size() == 4); CHECK(vec.size() == 4);
REQUIRE(vec[0] == "foo"); CHECK(vec[0] == "foo");
REQUIRE(vec[1] == "bar"); CHECK(vec[1] == "bar");
REQUIRE(vec[2] == "baz"); CHECK(vec[2] == "baz");
REQUIRE(vec[3] == "|"); CHECK(vec[3] == "|");
} }
TEST_CASE("str_split_with_sep() multi-char sep") { TEST_CASE("strutils::split_with_sep() multi-char sep") {
wxString foo = "foo|-|bar|-|baz|-|"; wxString foo = "foo|-|bar|-|baz|-|";
auto vec = str_split_with_sep(foo, "|-|"); auto vec = strutils::split_with_sep(foo, "|-|");
REQUIRE(vec.size() == 4); CHECK(vec.size() == 4);
REQUIRE(vec[0] == "foo"); CHECK(vec[0] == "foo");
REQUIRE(vec[1] == "bar"); CHECK(vec[1] == "bar");
REQUIRE(vec[2] == "baz"); CHECK(vec[2] == "baz");
REQUIRE(vec[3] == "|-|"); CHECK(vec[3] == "|-|");
} }
TEST_CASE("str_split_with_sep() multiple sep tokens") { TEST_CASE("strutils::split_with_sep() multiple sep tokens") {
wxString foo = "|-|foo|-||-|bar|-|baz|-|"; wxString foo = "|-|foo|-||-|bar|-|baz|-|";
auto vec = str_split_with_sep(foo, "|-|"); auto vec = strutils::split_with_sep(foo, "|-|");
REQUIRE(vec.size() == 6); CHECK(vec.size() == 6);
REQUIRE(vec[0] == "|-|"); CHECK(vec[0] == "|-|");
REQUIRE(vec[1] == "foo"); CHECK(vec[1] == "foo");
REQUIRE(vec[2] == "|-|"); CHECK(vec[2] == "|-|");
REQUIRE(vec[3] == "bar"); CHECK(vec[3] == "bar");
REQUIRE(vec[4] == "baz"); CHECK(vec[4] == "baz");
REQUIRE(vec[5] == "|-|"); CHECK(vec[5] == "|-|");
} }

View File

@ -135,7 +135,7 @@ nonstd::optional<wxGameControl> wxGameControl::FromString(const wxString &name)
return nonstd::nullopt; return nonstd::nullopt;
} }
auto parts = str_split(name, wxT("/")); auto parts = strutils::split(name, wxT("/"));
if (parts.size() != 3) { if (parts.size() != 3) {
wxLogDebug("Wrong split size: %d", parts.size()); wxLogDebug("Wrong split size: %d", parts.size());
return nonstd::nullopt; return nonstd::nullopt;

View File

@ -229,7 +229,7 @@ wxAcceleratorEntry_v wxJoyKeyTextCtrl::ToAccelFromString(const wxString& s, wxCh
if (s.size() == 0) if (s.size() == 0)
return empty; return empty;
for (const auto& token : str_split_with_sep(s, sep)) { for (const auto& token : strutils::split_with_sep(s, sep)) {
if (!ParseString(token, token.size(), mod, key, joy)) if (!ParseString(token, token.size(), mod, key, joy))
return empty; return empty;
ret.insert(ret.begin(), wxAcceleratorEntryUnicode(token, joy, mod, key)); ret.insert(ret.begin(), wxAcceleratorEntryUnicode(token, joy, mod, key));

View File

@ -204,7 +204,7 @@ static bool checkForPairKeyMod(const wxString& s, int& mod, int& key)
{ {
long ulkey, ulmod; long ulkey, ulmod;
// key:mod as pair // key:mod as pair
auto pair = str_split(s, ":"); auto pair = strutils::split(s, ":");
if (pair.size() == 2 && pair[0].ToLong(&ulkey) && pair[1].ToLong(&ulmod)) if (pair.size() == 2 && pair[0].ToLong(&ulkey) && pair[1].ToLong(&ulmod))
{ {
key = (int)ulkey; key = (int)ulkey;
@ -309,7 +309,7 @@ wxAcceleratorEntry_v wxKeyTextCtrl::FromString(const wxString& s, wxChar sep)
wxAcceleratorEntry_v ret, empty; wxAcceleratorEntry_v ret, empty;
int mod, key; int mod, key;
for (const auto& token : str_split_with_sep(s, sep)) { for (const auto& token : strutils::split_with_sep(s, sep)) {
if (!ParseString(token, token.size(), mod, key)) if (!ParseString(token, token.size(), mod, key))
return empty; return empty;
ret.insert(ret.begin(), wxAcceleratorEntryUnicode(mod, key)); ret.insert(ret.begin(), wxAcceleratorEntryUnicode(mod, key));

View File

@ -43,7 +43,7 @@ std::set<wxUserInput> wxUserInput::FromString(const wxString& string) {
return user_inputs; return user_inputs;
} }
for (const auto& token : str_split_with_sep(string, wxT(","))) { for (const auto& token : strutils::split_with_sep(string, wxT(","))) {
int mod, key, joy; int mod, key, joy;
if (!wxJoyKeyTextCtrl::ParseString(token, token.size(), mod, key, joy)) { if (!wxJoyKeyTextCtrl::ParseString(token, token.size(), mod, key, joy)) {
user_inputs.clear(); user_inputs.clear();

View File

@ -331,7 +331,7 @@ bool wxvbamApp::OnInit()
// process command-line options // process command-line options
for (size_t i = 0; i < pending_optset.size(); i++) { for (size_t i = 0; i < pending_optset.size(); i++) {
auto parts = str_split(pending_optset[i], wxT('=')); auto parts = strutils::split(pending_optset[i], wxT('='));
opt_set(parts[0], parts[1]); opt_set(parts[0], parts[1]);
} }
@ -680,7 +680,7 @@ bool wxvbamApp::OnCmdLineParsed(wxCmdLineParser& cl)
for (int i = 0; i < nparm; i++) { for (int i = 0; i < nparm; i++) {
auto p = cl.GetParam(i); auto p = cl.GetParam(i);
auto parts = str_split(p, wxT('=')); auto parts = strutils::split(p, wxT('='));
if (parts.size() > 1) { if (parts.size() > 1) {
opt_set(parts[0], parts[1]); opt_set(parts[0], parts[1]);

View File

@ -382,7 +382,8 @@ private:
// Load a named wxDialog from the XRC file // Load a named wxDialog from the XRC file
wxDialog* LoadXRCropertySheetDialog(const char* name); wxDialog* LoadXRCropertySheetDialog(const char* name);
wxChoice* pixel_filters = nullptr; wxChoice* pixel_filters_ = nullptr;
wxChoice* interframe_blenders_ = nullptr;
#include "cmdhandlers.h" #include "cmdhandlers.h"
}; };

View File

@ -133,8 +133,8 @@
<object class="wxChoice" name="IFB"> <object class="wxChoice" name="IFB">
<content> <content>
<item>None</item> <item>None</item>
<item>Smart interframe blending</item> <item>Smart</item>
<item>Interframe motion blur</item> <item>Motion Blur</item>
</content> </content>
</object> </object>
<flag>wxALL|wxEXPAND</flag> <flag>wxALL|wxEXPAND</flag>