Previously, a C-style cast was used to convert a
Common::Array<Plugin *>, populated with pointers to StaticPlugin
and DynamicPlugin instances, to a
Common::Array<PluginSubclass<T> *>, but PluginSubclass<T> is a
*sibling* class to StaticPlugin/DynamicPlugin, so this cast was
invalid and the results undefined. The methods for retrieving
subclasses of plugins can't be easily changed to just generate an
array of temporary wrapper objects that expose an identical API
which dereferences to the preferred PluginObject subclass because
pointers to these objects are retained by other parts of ScummVM,
so the wrappers would needed to be persisted or they would need to
just re-expose the underlying Plugin object again. This indicated
that a way to solve this problem is to have the callers receive
Plugin objects and get the PluginObject from the Plugin by
explicitly stating their desired type, in a similar manner to
std::get(std::variant), so that the pattern used by this patch to
solve the problem.
Closes gh-1051.
In most cases that's the right one to check. USE_CLOUD is defined when
either USE_LIBCURL or USE_SDL_NET are, which means if there is no curl,
USE_CLOUD still could be defined and linking errors would appear.
Formerly the GMM, AGI and SCI duplicated the logic for USE_SAVEGAME_TIMESTAMP.
Now I added a method to SaveLoadChooser instead, which takes care of this. This
might not be the best placement of such a functionality, thus I added a TODO
which talks about moving it to a better place.
This reduces the code duplication in all client code, which formerly duplicated
the querying of the plugin, game id etc. and now simply calls the newly added
method runModalWithCurrentTarget() on a SaveLoadChooser object.
We already pass the title and process button name to the constructor of
SaveLoadChooser and then do not offer any way of changing it, thus changing
the edit mode of the chooser is kind of pointless and was never actually used.
Instead we pass the mode on SaveLoadChooser construction now.
When clearing an existant object clear() should be used.
When constructing objects (or using default values for parameters) the
constructor of String without any argument should be used.
This changes only a few instances I noticed while looking over some recent
commit logs.
Now SaveStateDescriptor no longer subclasses HashMap. Instead all possible
saved meta data is included directly into SaveStateDescriptor.
This is slightly less flexible, but we never needed that flexibility so far.
On the other hand it should reduce the memory usage. At least on my system
(Linux/amd64) the old SaveStateDescriptor had a size of 928 and the new
SaveStateDescriptor has a size of 200.
I manually resolved all conflicts, and inspected every single change.
Many were due to the version string mismatch and thus easily resolved.
The MSVC project files add in the 1-3-0 branch were not merged,
neither where the changes to gui/themes/translations.dat.
Conflicts:
NEWS
backends/base-backend.cpp
backends/graphics/samsungtvsdl/samsungtvsdl-graphics.cpp
backends/module.mk
backends/platform/ds/arm9/makefile
backends/platform/psp/README.PSP
backends/platform/samsungtv/main.cpp
backends/platform/samsungtv/samsungtv.cpp
backends/saves/posix/posix-saves.cpp
base/commandLine.cpp
base/internal_version.h
base/main.cpp
common/array.h
configure
devtools/create_project/create_project.cpp
dists/android/AndroidManifest.xml
dists/android/plugin-manifest.xml
dists/iphone/Info.plist
dists/irix/scummvm.spec
dists/macosx/Info.plist
dists/redhat/scummvm-tools.spec
dists/redhat/scummvm.spec
dists/scummvm.rc
dists/slackware/scummvm.SlackBuild
dists/wii/meta.xml
engines/sci/parser/vocabulary.cpp
engines/tinsel/handle.cpp
gui/themes/translations.dat
FR #2821513: "GUI: add tooltips".
Added tooltips for Add Game button, clear field buttons and couple
other.
Current problem: Only first call correctly restores text. I could
not find where restore information gets lost.
svn-id: r49774
Now it is possible to specify hotkeys in place for ButtonWidget
and CheckboxWidget (the only widgets with hotkeys now).
Use de-facto standard with putting hotkey between tildes (~).
Like '~O~pen'. The tildes gets stripped before after hotkey
is extracted.
This is done for giving translators possibility to specify
their own hotkeys.
Old hotkeys defined at widget instance creation are left for
leaving possibility to specify non-printable hotkeys such as
Common::ASCII_ESCAPE.
Translation files were updated respectively.
svn-id: r49766
Based on patch #2903830: "Updated Translation Prototype" by alexbevi
which in turn is based on patch #1739965 by jvprat.
Currently it builds all translations right into ScummVM. Once the
feature will be accepted more widely, i.e. more translations will
pop up, it will be trivial to move translation strings to external
file.
Finished translation: Russian
Unfinished translation: Hungarian
Things which are nice to do:
- Language code -> language mapping for more user friendness
- Specifying fonts to be used with language
- Updating of interface language without restart. It will require
moving of much code to reflowLayout() methods for each dialog
The .po files must be in single byte encodings. I.e. no support
for Unicode.
svn-id: r49759
This removes the dependency on array.h from str.h.
Also, begun migration from the confusing type name "StringList" to
the more appropriate StringArray.
svn-id: r48282