File indexing completed on 2024-04-21 05:54:01
0001 /* 0002 This file is part of the Okteta program, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2006-2009, 2011, 2014 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0007 */ 0008 0009 #include "program.hpp" 0010 0011 // program 0012 #include "about.hpp" 0013 #include "mainwindow.hpp" 0014 // Okteta Kasten 0015 #include <Kasten/Okteta/ByteArrayDocumentFactory> 0016 #include <Kasten/Okteta/ByteArrayViewFactory> 0017 #include <Kasten/Okteta/ByteArrayRawFileSynchronizerFactory> 0018 #include <Kasten/Okteta/ByteArrayStreamEncoderConfigEditorFactoryFactory> 0019 #include <Kasten/Okteta/ByteArrayDataGeneratorConfigEditorFactoryFactory> 0020 #include <Kasten/Okteta/ByteArrayStreamEncoderFactory> 0021 #include <Kasten/Okteta/ByteArrayDataGeneratorFactory> 0022 // tmp 0023 #include <Kasten/Okteta/ByteArrayViewProfileManager> 0024 // Kasten gui 0025 #include <Kasten/MultiDocumentStrategy> 0026 #include <Kasten/DialogHandler> 0027 #include <Kasten/ViewManager> 0028 #include <Kasten/ModelCodecViewManager> 0029 // Kasten core 0030 #include <Kasten/DocumentManager> 0031 #include <Kasten/DocumentCreateManager> 0032 #include <Kasten/DocumentSyncManager> 0033 #include <Kasten/ModelCodecManager> 0034 // KF 0035 #include <KDBusService> 0036 #include <KLocalizedString> 0037 #include <KCrash> 0038 // Qt 0039 #include <QCommandLineParser> 0040 #include <QVector> 0041 #include <QUrl> 0042 #include <QDir> 0043 0044 namespace Kasten { 0045 0046 // static constexpr char OffsetOptionId[] = "offset"; 0047 // static constexpr char OffsetOptionShortId[] = "o"; 0048 0049 static 0050 int& preConstructionHookHack(int& argc) 0051 { 0052 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 0053 return argc; 0054 } 0055 0056 0057 OktetaProgram::OktetaProgram(int& argc, char* argv[]) 0058 : mApp(preConstructionHookHack(argc), argv) 0059 { 0060 QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps, true); 0061 KLocalizedString::setApplicationDomain("okteta"); 0062 KCrash::initialize(); 0063 } 0064 0065 OktetaProgram::~OktetaProgram() 0066 { 0067 delete mDocumentStrategy; 0068 delete mDocumentManager; 0069 delete mViewManager; 0070 delete mDialogHandler; 0071 delete mByteArrayViewProfileManager; 0072 } 0073 0074 int OktetaProgram::execute() 0075 { 0076 mDocumentManager = new DocumentManager(); 0077 mViewManager = new ViewManager(); 0078 mDocumentStrategy = new MultiDocumentStrategy(mDocumentManager, mViewManager); 0079 mDialogHandler = new DialogHandler(); 0080 0081 OktetaAboutData aboutData; 0082 KAboutData::setApplicationData(aboutData); 0083 QApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("okteta"))); 0084 0085 QCommandLineParser parser; 0086 aboutData.setupCommandLine(&parser); 0087 0088 // urls to open 0089 parser.addPositionalArgument(QStringLiteral("urls"), i18n("File(s) to load."), QStringLiteral("[urls...]")); 0090 0091 // offset option 0092 // programOptions.add( OffsetOptionShortId ); 0093 // programOptions.add( OffsetOptionId, ki18n("Offset to set the cursor to"), 0 ); 0094 0095 parser.process(mApp); 0096 0097 aboutData.processCommandLine(&parser); 0098 0099 KDBusService programDBusService(KDBusService::Multiple | KDBusService::NoExitOnFailure); 0100 0101 // TODO: 0102 mByteArrayViewProfileManager = new ByteArrayViewProfileManager(); 0103 // mModelManagerManager->addModelManager( byteArrayViewProfileManager ); 0104 0105 const QVector<AbstractModelStreamEncoder*> encoderList = 0106 ByteArrayStreamEncoderFactory::createStreamEncoders(); 0107 0108 const QVector<AbstractModelDataGenerator*> generatorList = 0109 ByteArrayDataGeneratorFactory::createDataGenerators(); 0110 0111 const QVector<AbstractModelStreamEncoderConfigEditorFactory*> encoderConfigEditorFactoryList = 0112 ByteArrayStreamEncoderConfigEditorFactoryFactory::createFactorys(); 0113 0114 const QVector<AbstractModelDataGeneratorConfigEditorFactory*> generatorConfigEditorFactoryList = 0115 ByteArrayDataGeneratorConfigEditorFactoryFactory::createFactorys(); 0116 0117 mDocumentManager->codecManager()->setEncoders(encoderList); 0118 mDocumentManager->codecManager()->setGenerators(generatorList); 0119 mDocumentManager->codecManager()->setOverwriteDialog(mDialogHandler); 0120 mDocumentManager->createManager()->setDocumentFactory(new ByteArrayDocumentFactory()); 0121 mDocumentManager->syncManager()->setDocumentSynchronizerFactory(new ByteArrayRawFileSynchronizerFactory()); 0122 mDocumentManager->syncManager()->setOverwriteDialog(mDialogHandler); 0123 mDocumentManager->syncManager()->setSaveDiscardDialog(mDialogHandler); 0124 0125 mViewManager->setViewFactory(new ByteArrayViewFactory(mByteArrayViewProfileManager)); 0126 mViewManager->codecViewManager()->setEncoderConfigEditorFactories(encoderConfigEditorFactoryList); 0127 mViewManager->codecViewManager()->setGeneratorConfigEditorFactories(generatorConfigEditorFactoryList); 0128 0129 auto* mainWindow = new OktetaMainWindow(this); 0130 mDialogHandler->setWidget(mainWindow); 0131 0132 // started by session management? 0133 if (mApp.isSessionRestored() && KMainWindow::canBeRestored(1)) { 0134 mainWindow->restore(1); 0135 } else { 0136 // no session.. just start up normally 0137 const QStringList urls = parser.positionalArguments(); 0138 0139 // take arguments 0140 if (!urls.isEmpty()) { 0141 const QString currentPath = QDir::currentPath(); 0142 for (const QString& url : urls) { 0143 mDocumentStrategy->load(QUrl::fromUserInput(url, currentPath, QUrl::AssumeLocalFile)); 0144 } 0145 } 0146 0147 mainWindow->show(); 0148 0149 } 0150 0151 return QApplication::exec(); 0152 } 0153 0154 void OktetaProgram::quit() 0155 { 0156 qApp->quit(); 0157 } 0158 0159 }