1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-23 22:37:55 +02:00
Files
vcmi/launcher/helper.cpp

147 lines
3.7 KiB
C++
Raw Normal View History

2024-04-21 16:56:39 +02:00
/*
2025-01-15 20:30:48 +01:00
* helper.cpp, part of VCMI engine
2024-04-21 16:56:39 +02:00
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "helper.h"
2025-03-17 21:58:31 +01:00
#include "mainwindow_moc.h"
#include "settingsView/csettingsview_moc.h"
#include "modManager/cmodlistview_moc.h"
2024-04-21 16:56:39 +02:00
#include "../lib/CConfigHandler.h"
#include <QObject>
#include <QScroller>
2025-01-15 20:30:48 +01:00
#ifdef VCMI_ANDROID
#include <QAndroidJniObject>
#include <QtAndroid>
2025-08-31 14:02:19 +02:00
#include <QAndroidJniEnvironment>
2025-01-15 20:30:48 +01:00
#endif
2025-02-15 00:35:08 +01:00
#ifdef VCMI_IOS
#include "ios/revealdirectoryinfiles.h"
#endif
2024-06-08 15:56:20 +00:00
#ifdef VCMI_MOBILE
static QScrollerProperties generateScrollerProperties()
{
QScrollerProperties result;
result.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.25);
result.setScrollMetric(QScrollerProperties::OvershootDragDistanceFactor, 0.25);
result.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, QScrollerProperties::OvershootAlwaysOff);
return result;
}
#endif
namespace Helper
{
void loadSettings()
2024-04-21 16:56:39 +02:00
{
settings.init("config/settings.json", "vcmi:settings");
2024-06-20 21:33:45 +02:00
persistentStorage.init("config/persistentStorage.json", "");
2024-04-21 16:56:39 +02:00
}
2025-03-17 21:58:31 +01:00
void reLoadSettings()
{
loadSettings();
for(const auto widget : qApp->allWidgets())
if(auto settingsView = qobject_cast<CSettingsView *>(widget))
2025-03-23 13:09:03 +01:00
{
2025-03-17 21:58:31 +01:00
settingsView->loadSettings();
2025-03-23 13:09:03 +01:00
break;
}
2025-03-17 21:58:31 +01:00
getMainWindow()->updateTranslation();
getMainWindow()->getModView()->reload();
}
void enableScrollBySwiping(QObject * scrollTarget)
{
#ifdef VCMI_MOBILE
QScroller::grabGesture(scrollTarget, QScroller::LeftMouseButtonGesture);
2024-06-08 15:56:20 +00:00
QScroller * scroller = QScroller::scroller(scrollTarget);
scroller->setScrollerProperties(generateScrollerProperties());
#endif
}
2025-01-15 20:30:48 +01:00
QString getRealPath(QString path)
{
#ifdef VCMI_ANDROID
if(path.contains("content://", Qt::CaseInsensitive))
{
auto str = QAndroidJniObject::fromString(path);
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();
}
else
return path;
#else
return path;
#endif
}
void performNativeCopy(QString src, QString dst)
{
#ifdef VCMI_ANDROID
auto srcStr = QAndroidJniObject::fromString(src);
auto dstStr = QAndroidJniObject::fromString(dst);
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());
#else
2025-01-17 09:24:09 +03:00
QFile::copy(src, dst);
2025-01-15 20:30:48 +01:00
#endif
}
2025-02-15 00:35:08 +01:00
void revealDirectoryInFileBrowser(QString path)
{
const auto dirUrl = QUrl::fromLocalFile(QFileInfo{path}.absoluteFilePath());
#ifdef VCMI_IOS
iOS_utils::revealDirectoryInFiles(dirUrl);
#else
QDesktopServices::openUrl(dirUrl);
#endif
}
2025-03-17 21:58:31 +01:00
MainWindow * getMainWindow()
{
foreach(QWidget *w, qApp->allWidgets())
if(auto mainWin = qobject_cast<MainWindow*>(w))
return mainWin;
return nullptr;
}
2025-08-31 14:02:19 +02:00
void keepScreenOn(bool on)
{
#if defined(VCMI_ANDROID)
// based on https://stackoverflow.com/a/38846485
QtAndroid::runOnAndroidThread([on]
{
QAndroidJniObject activity = QtAndroid::androidActivity();
if(activity.isValid())
{
QAndroidJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;");
if(window.isValid())
{
const int FLAG_KEEP_SCREEN_ON = 128;
if(on)
window.callMethod<void>("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
else
window.callMethod<void>("clearFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
}
}
QAndroidJniEnvironment env;
if (env->ExceptionCheck())
env->ExceptionClear();
});
#endif
}
}