wiRedPanda
Logic Circuit Simulator
Loading...
Searching...
No Matches
ExternalFilePath.h
Go to the documentation of this file.
1// Copyright 2015 - 2026, GIBIS-UNIFESP and the wiRedPanda contributors
2// SPDX-License-Identifier: GPL-3.0-or-later
3
12
13#pragma once
14
15#include <optional>
16
17#include <QDir>
18#include <QFileInfo>
19#include <QString>
20
22
24
32inline QString resolve(const QString &storedPath, const QString &contextDir)
33{
34 if (storedPath.isEmpty() || contextDir.isEmpty()) {
35 return storedPath;
36 }
37
38 const QDir dir(contextDir);
39 const QString asGiven = dir.filePath(storedPath);
40 if (QFileInfo(asGiven).isFile()) {
41 return asGiven;
42 }
43
44 return dir.filePath(QFileInfo(QString(storedPath).replace('\\', '/')).fileName());
45}
46
52inline QString forWriting(const QString &path, SerializationPurpose purpose)
53{
54 if (path.startsWith(":/") || purpose == SerializationPurpose::InMemorySnapshot) {
55 return path;
56 }
57 return QFileInfo(path).fileName();
58}
59
68inline std::optional<QString> forReading(const QString &storedValue, const QString &contextDir, SerializationPurpose purpose)
69{
71 return storedValue;
72 }
73
74 if (storedValue.startsWith(":/")) {
75 return std::nullopt;
76 }
77
78 return resolve(storedValue, contextDir);
79}
80
81} // namespace ExternalFilePath
Deserialization/serialization context structs passed through load()/save() call chains.
SerializationPurpose
What a serialization operation is for – shared by both load() and save(), so the same distinction is ...
QString resolve(const QString &storedPath, const QString &contextDir)
std::optional< QString > forReading(const QString &storedValue, const QString &contextDir, SerializationPurpose purpose)
QString forWriting(const QString &path, SerializationPurpose purpose)