helper.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * helper.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "helper.h"
  12. #include "../lib/CConfigHandler.h"
  13. #include <QObject>
  14. #include <QScroller>
  15. #ifdef VCMI_ANDROID
  16. #include <QAndroidJniObject>
  17. #include <QtAndroid>
  18. #endif
  19. #ifdef VCMI_IOS
  20. #include "ios/revealdirectoryinfiles.h"
  21. #endif
  22. #ifdef VCMI_MOBILE
  23. static QScrollerProperties generateScrollerProperties()
  24. {
  25. QScrollerProperties result;
  26. result.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.25);
  27. result.setScrollMetric(QScrollerProperties::OvershootDragDistanceFactor, 0.25);
  28. result.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, QScrollerProperties::OvershootAlwaysOff);
  29. return result;
  30. }
  31. #endif
  32. namespace Helper
  33. {
  34. void loadSettings()
  35. {
  36. settings.init("config/settings.json", "vcmi:settings");
  37. persistentStorage.init("config/persistentStorage.json", "");
  38. }
  39. void enableScrollBySwiping(QObject * scrollTarget)
  40. {
  41. #ifdef VCMI_MOBILE
  42. QScroller::grabGesture(scrollTarget, QScroller::LeftMouseButtonGesture);
  43. QScroller * scroller = QScroller::scroller(scrollTarget);
  44. scroller->setScrollerProperties(generateScrollerProperties());
  45. #endif
  46. }
  47. QString getRealPath(QString path)
  48. {
  49. #ifdef VCMI_ANDROID
  50. if(path.contains("content://", Qt::CaseInsensitive))
  51. {
  52. auto str = QAndroidJniObject::fromString(path);
  53. return QAndroidJniObject::callStaticObjectMethod("eu/vcmi/vcmi/util/FileUtil", "getFilenameFromUri", "(Ljava/lang/String;Landroid/content/Context;)Ljava/lang/String;", str.object<jstring>(), QtAndroid::androidContext().object()).toString();
  54. }
  55. else
  56. return path;
  57. #else
  58. return path;
  59. #endif
  60. }
  61. void performNativeCopy(QString src, QString dst)
  62. {
  63. #ifdef VCMI_ANDROID
  64. auto srcStr = QAndroidJniObject::fromString(src);
  65. auto dstStr = QAndroidJniObject::fromString(dst);
  66. QAndroidJniObject::callStaticObjectMethod("eu/vcmi/vcmi/util/FileUtil", "copyFileFromUri", "(Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;)V", srcStr.object<jstring>(), dstStr.object<jstring>(), QtAndroid::androidContext().object());
  67. #else
  68. QFile::copy(src, dst);
  69. #endif
  70. }
  71. void revealDirectoryInFileBrowser(QString path)
  72. {
  73. const auto dirUrl = QUrl::fromLocalFile(QFileInfo{path}.absoluteFilePath());
  74. #ifdef VCMI_IOS
  75. iOS_utils::revealDirectoryInFiles(dirUrl);
  76. #else
  77. QDesktopServices::openUrl(dirUrl);
  78. #endif
  79. }
  80. }