81 lines
3.4 KiB
C++
81 lines
3.4 KiB
C++
#include <QGuiApplication>
|
||
#include <QQmlApplicationEngine>
|
||
#include <QQmlError>
|
||
#include <QQmlContext>
|
||
#include <QCommandLineParser>
|
||
#include <QQuickStyle>
|
||
|
||
#include "app/VaultManager.h"
|
||
#include "app/WindowController.h"
|
||
#include "core/DocumentManager.h"
|
||
#include "core/SettingsStore.h"
|
||
#include "core/VaultIndex.h"
|
||
#include "git/GitManager.h"
|
||
#include "markdown/MdParser.h"
|
||
#include "sync/SyncManager.h"
|
||
|
||
#include <cmark-gfm.h>
|
||
#include <git2.h>
|
||
|
||
int main(int argc, char *argv[])
|
||
{
|
||
// Единообразный светлый стиль — без нативной тёмной темы macOS
|
||
QQuickStyle::setStyle("Basic");
|
||
QGuiApplication app(argc, argv);
|
||
app.setApplicationName("Flora");
|
||
app.setOrganizationName("Flora");
|
||
app.setApplicationVersion("0.0.1");
|
||
|
||
QCommandLineParser parser;
|
||
parser.setApplicationDescription("Минималистичный markdown-заметочник с git-историей");
|
||
parser.addHelpOption();
|
||
parser.addVersionOption();
|
||
parser.process(app);
|
||
|
||
// Версии библиотек — быстрая проверка, что зависимости подключены и слинкованы.
|
||
int gitMajor = 0, gitMinor = 0, gitRev = 0;
|
||
git_libgit2_version(&gitMajor, &gitMinor, &gitRev);
|
||
qInfo("Flora %s | cmark-gfm %s | libgit2 %d.%d.%d",
|
||
qPrintable(app.applicationVersion()),
|
||
cmark_version_string(),
|
||
gitMajor, gitMinor, gitRev);
|
||
|
||
SettingsStore settingsStore;
|
||
GitManager gitManager;
|
||
SyncManager syncManager;
|
||
VaultManager vaultManager(&settingsStore, &gitManager);
|
||
DocumentManager documentManager;
|
||
MdParser mdParser;
|
||
VaultIndex vaultIndex;
|
||
|
||
QQmlApplicationEngine engine;
|
||
QObject::connect(&engine, &QQmlApplicationEngine::warnings,
|
||
[](const QList<QQmlError> &list) {
|
||
for (const QQmlError &e : list)
|
||
qWarning("QML: %s", qPrintable(e.toString()));
|
||
});
|
||
engine.rootContext()->setContextProperty("settingsStore", &settingsStore);
|
||
engine.rootContext()->setContextProperty("gitManager", &gitManager);
|
||
engine.rootContext()->setContextProperty("syncManager", &syncManager);
|
||
engine.rootContext()->setContextProperty("vaultManager", &vaultManager);
|
||
engine.rootContext()->setContextProperty("documentManager", &documentManager);
|
||
engine.rootContext()->setContextProperty("mdParser", &mdParser);
|
||
engine.rootContext()->setContextProperty("vaultIndex", &vaultIndex);
|
||
|
||
WindowController windowController(
|
||
&engine, QStringLiteral("qrc:/qt/qml/Flora/qml/MainWindow.qml"));
|
||
engine.rootContext()->setContextProperty("windowController", &windowController);
|
||
|
||
// Основное окно = последнее (основное) хранилище. Если хранилищ нет —
|
||
// откроется мастер первого запуска.
|
||
windowController.openWindow(settingsStore.currentVault());
|
||
|
||
// Окна создаются через QQmlComponent (WindowController), поэтому проверяем
|
||
// количество окон, а не engine.rootObjects() (для таких объектов он пуст).
|
||
if (windowController.windowCount() == 0) {
|
||
qWarning("=== Не удалось создать окно приложения ===");
|
||
return -1;
|
||
}
|
||
|
||
return app.exec();
|
||
} |