1 /*
2 * SPDX-FileCopyrightText: 2014 Kevin Ottens <ervin@kde.org>
3 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
4 */
5
6 #include <QApplication>
7 #include <QBoxLayout>
8 #include <QDockWidget>
9 #include <QProcess>
10 #include <QAction>
11
12 #include <KActionCollection>
13
14
15 #include <KXmlGuiWindow>
16
17 #include <KConfigGroup>
18 #include <KSharedConfig>
19
20 #include "widgets/applicationcomponents.h"
21 #include "widgets/availablepagesview.h"
22 #include "widgets/availablesourcesview.h"
23 #include "widgets/editorview.h"
24 #include "widgets/pageview.h"
25
26 #include "presentation/applicationmodel.h"
27
28 #include "utils/dependencymanager.h"
29 #include "integration/dependencies.h"
30
31 #include "aboutdata.h"
32
33 #include <iostream>
34 #include <KAboutData>
35 #include <KLocalizedString>
36 #include <QCommandLineParser>
37
main(int argc,char ** argv)38 int main(int argc, char **argv)
39 {
40 KLocalizedString::setApplicationDomain("zanshin");
41 QApplication app(argc, argv);
42 Integration::initializeGlobalAppDependencies();
43
44 auto aboutData = App::getAboutData();
45 QCommandLineParser parser;
46 KAboutData::setApplicationData(aboutData);
47 aboutData.setupCommandLine(&parser);
48 parser.process(app);
49 aboutData.processCommandLine(&parser);
50
51 KSharedConfig::Ptr config = KSharedConfig::openConfig(QStringLiteral("zanshin-migratorrc"));
52 KConfigGroup group = config->group("Migrations");
53 if (!group.readEntry("MigratedTags", false)) {
54 std::cerr << "Migrating tags, please wait..." << std::endl;
55 QProcess proc;
56 proc.start(QStringLiteral("zanshin-migrator"));
57 proc.waitForFinished(-1);
58 if (proc.exitStatus() == QProcess::CrashExit) {
59 std::cerr << "Migrator crashed!" << std::endl;
60 } else if (proc.exitCode() == 0) {
61 std::cerr << "Migration done" << std::endl;
62 } else {
63 std::cerr << "Migration error, code" << proc.exitCode() << std::endl;
64 }
65 }
66
67 auto widget = new QWidget;
68 auto components = new Widgets::ApplicationComponents(widget);
69 components->setModel(Presentation::ApplicationModel::Ptr::create());
70
71 auto layout = new QVBoxLayout;
72 layout->setContentsMargins(0, 0, 0, 0);
73 layout->addWidget(components->pageView());
74 widget->setLayout(layout);
75
76 auto sourcesDock = new QDockWidget(i18n("Sources"));
77 sourcesDock->setObjectName(QStringLiteral("sourcesDock"));
78 sourcesDock->setWidget(components->availableSourcesView());
79
80 auto pagesDock = new QDockWidget(i18n("Pages"));
81 pagesDock->setObjectName(QStringLiteral("pagesDock"));
82 pagesDock->setWidget(components->availablePagesView());
83
84 auto editorDock = new QDockWidget(i18n("Editor"));
85 editorDock->setObjectName(QStringLiteral("editorDock"));
86 editorDock->setWidget(components->editorView());
87
88 auto window = new KXmlGuiWindow;
89 window->setCentralWidget(widget);
90
91 window->addDockWidget(Qt::RightDockWidgetArea, editorDock);
92 window->addDockWidget(Qt::LeftDockWidgetArea, pagesDock);
93 window->addDockWidget(Qt::LeftDockWidgetArea, sourcesDock);
94
95 auto actions = components->globalActions();
96 actions.insert(QStringLiteral("dock_sources"), sourcesDock->toggleViewAction());
97 actions.insert(QStringLiteral("dock_pages"), pagesDock->toggleViewAction());
98 actions.insert(QStringLiteral("dock_editor"), editorDock->toggleViewAction());
99
100 auto ac = window->actionCollection();
101 ac->addAction(KStandardAction::Quit, window, SLOT(close()));
102 for (auto it = actions.constBegin(); it != actions.constEnd(); ++it) {
103 auto shortcut = it.value()->shortcut();
104 if (!shortcut.isEmpty()) {
105 ac->setDefaultShortcut(it.value(), shortcut);
106 }
107 ac->addAction(it.key(), it.value());
108 }
109
110 window->setupGUI(QSize(1024, 600),
111 KXmlGuiWindow::ToolBar
112 | KXmlGuiWindow::Keys
113 | KXmlGuiWindow::Save
114 | KXmlGuiWindow::Create);
115
116 delete window->findChild<QAction*>("help_contents");
117 delete window->findChild<QAction*>("help_whats_this");
118
119 window->show();
120
121 {
122 auto &deps = Utils::DependencyManager::globalInstance();
123 auto repo = deps.create<Domain::DataSourceRepository>();
124 repo->windowNeedsDataBackend(window);
125 }
126
127 return app.exec();
128 }
129