amuse/Editor/Common.cpp

109 lines
3.3 KiB
C++
Raw Normal View History

#include "Common.hpp"
2018-08-03 19:31:47 -07:00
#include "MainWindow.hpp"
#include <QMessageBox>
#include <QObject>
2018-07-31 01:04:43 -07:00
#include <QProcess>
boo::SystemString QStringToSysString(const QString& str)
{
#ifdef _WIN32
return (wchar_t*)str.utf16();
#else
return str.toUtf8().toStdString();
#endif
}
QString SysStringToQString(const boo::SystemString& str)
{
#ifdef _WIN32
return QString::fromStdWString(str);
#else
return QString::fromStdString(str);
#endif
}
2018-07-16 21:48:38 -07:00
bool MkPath(const QString& path, UIMessenger& messenger)
{
QFileInfo fInfo(path);
2018-07-16 21:48:38 -07:00
return MkPath(fInfo.dir(), fInfo.fileName(), messenger);
}
2018-07-16 21:48:38 -07:00
bool MkPath(const QDir& dir, const QString& file, UIMessenger& messenger)
{
if (!dir.mkpath(file))
{
2018-08-03 19:31:47 -07:00
QString msg = QString(MainWindow::tr("A directory at '%1/%2' could not be created.")).arg(dir.path()).arg(file);
messenger.critical(MainWindow::tr("Unable to create directory"), msg);
return false;
}
return true;
}
2018-07-31 01:04:43 -07:00
void ShowInGraphicalShell(QWidget* parent, const QString& pathIn)
{
const QFileInfo fileInfo(pathIn);
// Mac, Windows support folder or file.
#if defined(Q_OS_WIN)
2018-08-19 13:05:39 -07:00
QString paths = QProcessEnvironment::systemEnvironment().value(QStringLiteral("Path"));
QString explorer;
for (QString path : paths.split(QStringLiteral(";")))
{
QFileInfo finfo(QDir(path), QStringLiteral("explorer.exe"));
if (finfo.exists())
{
explorer = finfo.filePath();
break;
}
}
2018-07-31 01:04:43 -07:00
if (explorer.isEmpty()) {
QMessageBox::warning(parent,
2018-08-03 19:31:47 -07:00
MainWindow::tr("Launching Windows Explorer Failed"),
MainWindow::tr("Could not find explorer.exe in path to launch Windows Explorer."));
2018-07-31 01:04:43 -07:00
return;
}
QStringList param;
if (!fileInfo.isDir())
param += QLatin1String("/select,");
param += QDir::toNativeSeparators(fileInfo.canonicalFilePath());
2018-08-19 13:05:39 -07:00
QProcess::startDetached(explorer, param);
2018-07-31 01:04:43 -07:00
#elif defined(Q_OS_MAC)
QStringList scriptArgs;
scriptArgs << QLatin1String("-e")
<< QString::fromLatin1("tell application \"Finder\" to reveal POSIX file \"%1\"")
.arg(fileInfo.canonicalFilePath());
QProcess::execute(QLatin1String("/usr/bin/osascript"), scriptArgs);
scriptArgs.clear();
scriptArgs << QLatin1String("-e")
<< QLatin1String("tell application \"Finder\" to activate");
QProcess::execute(QLatin1String("/usr/bin/osascript"), scriptArgs);
#else
// we cannot select a file here, because no file browser really supports it...
const QString folder = fileInfo.isDir() ? fileInfo.absoluteFilePath() : fileInfo.filePath();
QProcess browserProc;
const QString browserArgs = QStringLiteral("xdg-open \"%1\"").arg(QFileInfo(folder).path());
browserProc.startDetached(browserArgs);
#endif
}
QString ShowInGraphicalShellString()
{
#if defined(Q_OS_WIN)
2018-08-03 19:31:47 -07:00
return MainWindow::tr("Show in Explorer");
2018-07-31 01:04:43 -07:00
#elif defined(Q_OS_MAC)
2018-08-03 19:31:47 -07:00
return MainWindow::tr("Show in Finder");
2018-07-31 01:04:43 -07:00
#else
2018-08-03 19:31:47 -07:00
return MainWindow::tr("Show in Browser");
2018-07-31 01:04:43 -07:00
#endif
}
2018-08-05 21:20:42 -07:00
QTransform RectToRect(const QRectF& from, const QRectF& to)
{
QPolygonF orig(from);
orig.pop_back();
QPolygonF resize(to);
resize.pop_back();
QTransform ret;
QTransform::quadToQuad(orig, resize, ret);
return ret;
}