File indexing completed on 2024-12-01 03:46:43

0001 /*
0002     This file is part of the KDE games kwin4 program
0003     SPDX-FileCopyrightText: 1995-2007 Martin Heni <kde@heni-online.de>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 /**
0009  * \mainpage KWin4 API Documentation
0010  *
0011  * \section intro_sec Introduction
0012  *
0013  * This is the API documentation for the KDE game 'kwin4'.
0014  *
0015  * \section design_sec Design
0016  *
0017  * The design diagram shows the dependencies for the key classes of
0018  * the KWin4 program.
0019  * The coloring of the classes shows roughly their function in the
0020  * groups (program, document and engine, display, QGraphics and KGame library).
0021  *
0022  * \image html kwin4classes.png "Class diagram for KWin4"
0023  */
0024 
0025 // own
0026 #include "kfourinline_debug.h"
0027 #include "kfourinline_version.h"
0028 #include "kwin4.h"
0029 // KF
0030 #include <KAboutData>
0031 #include <KCrash>
0032 #include <KDBusService>
0033 #include <KLocalizedString>
0034 // Qt
0035 #include <QApplication>
0036 #include <QCommandLineOption>
0037 #include <QCommandLineParser>
0038 
0039 // Debug level for the program
0040 int global_debug = 0;
0041 // Skip intro
0042 bool global_skip_intro = false;
0043 // Demo (autoplay mode)
0044 bool global_demo_mode = false;
0045 
0046 // Main function
0047 int main(int argc, char *argv[])
0048 {
0049     global_debug = 0;
0050 
0051     QApplication app(argc, argv);
0052 
0053     KLocalizedString::setApplicationDomain(QByteArrayLiteral("kfourinline"));
0054 
0055     KAboutData aboutData(QStringLiteral("kfourinline"),
0056                          i18n("KFourInLine"),
0057                          QStringLiteral(KFOURINLINE_VERSION_STRING),
0058                          i18n("KFourInLine: Two player board game"),
0059                          KAboutLicense::GPL,
0060                          i18n("(c) 1995-2007, Martin Heni"));
0061     aboutData.addAuthor(i18n("Martin Heni"), i18n("Game design and code"), QStringLiteral("kde@heni-online.de"));
0062     aboutData.addAuthor(i18n("Johann Ollivier Lapeyre"), i18n("Graphics"), QStringLiteral("johann.ollivierlapeyre@gmail.com"));
0063     aboutData.addAuthor(i18n("Eugene Trounev"), i18n("Graphics"), QStringLiteral("eugene.trounev@gmail.com"));
0064     aboutData.addAuthor(i18n("Benjamin Meyer"), i18n("Code Improvements"));
0065     aboutData.setHomepage(QStringLiteral("https://apps.kde.org/kfourinline"));
0066 
0067     KAboutData::setApplicationData(aboutData);
0068 
0069     KCrash::initialize();
0070 
0071     QCommandLineParser parser;
0072     parser.addOption(QCommandLineOption({QStringLiteral("d"), QStringLiteral("debug")}, i18n("Enter debug level"), QStringLiteral("level")));
0073     parser.addOption(QCommandLineOption({QStringLiteral("skipintro")}, i18n("Skip intro animation")));
0074     parser.addOption(QCommandLineOption({QStringLiteral("demo")}, i18n("Run game in demo (autoplay) mode")));
0075 
0076     aboutData.setupCommandLine(&parser);
0077     parser.process(app);
0078     aboutData.processCommandLine(&parser);
0079 
0080     app.setWindowIcon(QIcon::fromTheme(QStringLiteral("kfourinline")));
0081     /* command line handling */
0082 
0083     // Check for debug command line option
0084     if (parser.isSet(QStringLiteral("debug"))) {
0085         global_debug = QString(parser.value(QStringLiteral("debug"))).toInt();
0086         qCDebug(KFOURINLINE_LOG) << "Debug level set to" << global_debug;
0087     }
0088     // Check for debug command line option
0089     if (parser.isSet(QStringLiteral("skipintro"))) {
0090         global_skip_intro = true;
0091         qCDebug(KFOURINLINE_LOG) << "Skip intro cmd line chosen" << global_skip_intro;
0092     }
0093     // Check for debug command line option
0094     if (parser.isSet(QStringLiteral("demo"))) {
0095         global_demo_mode = true;
0096         qCDebug(KFOURINLINE_LOG) << "Running in demo mode" << global_demo_mode;
0097     }
0098 
0099     KDBusService service;
0100 
0101     // Start application
0102     // Start session
0103     if (app.isSessionRestored()) {
0104         kRestoreMainWindows<KWin4App>();
0105     } else {
0106         KWin4App *kwin4 = new KWin4App();
0107         kwin4->show();
0108     }
0109 
0110     return app.exec();
0111 }