SplashDialog::SplashDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SplashDialog) { const int five_sec = 5000; ui->setupUi(this); QTimer* init_timer = new QTimer(this); connect(init_timer, SIGNAL(timeout()), this, SLOT(update())); init_timer->singleShot(five_sec, this, SLOT(closeSplash())); }
int ScribusCore::startGUI(bool showSplash, bool showFontInfo, bool showProfileInfo, const QString newGuiLanguage, const QString prefsUserFile) { // m_PaletteParent=new QWidget(0); // Q_CHECK_PTR(m_PaletteParent); ScribusMainWindow* scribus = new ScribusMainWindow(); Q_CHECK_PTR(scribus); if (!scribus) return(EXIT_FAILURE); ScMWList.append(scribus); m_currScMW=0; // ScMW=scribus; int retVal=initScribusCore(showSplash, showFontInfo, showProfileInfo,newGuiLanguage, prefsUserFile); if (retVal == 1) return(EXIT_FAILURE); retVal = scribus->initScMW(true); if (retVal == 1) return(EXIT_FAILURE); closeSplash(); m_ScribusInitialized=true; // ScQApp->setMainWidget(scribus); connect(ScQApp, SIGNAL(lastWindowClosed()), ScQApp, SLOT(quit())); scribus->show(); int subsRet=scribus->ShowSubs(); if (subsRet==0) { if (!m_Files.isEmpty()) { for (int i = 0; i < m_Files.size(); ++i) scribus->loadDoc(m_Files.at(i)); } else { if (PrefsManager::instance()->appPrefs.uiPrefs.showStartupDialog) scribus->startUpDialog(); else scribus->setFocus(); } } else if (subsRet==QMessageBox::Help) { scribus->slotRaiseOnlineHelp(); } qApp->setOverrideCursor(QCursor(Qt::ArrowCursor)); // A hook for plugins and scripts to trigger on. Some plugins and scripts // require the app to be fully set up (in particular, the main window to be // built and shown) before running their setup. emit appStarted(); return EXIT_SUCCESS; }
//Returns false when there are no fonts bool ScribusCore::initFonts(bool showFontInfo) { setSplashStatus( tr("Searching for Fonts") ); bool haveFonts=prefsManager->GetAllFonts(showFontInfo); if (!haveFonts) { closeSplash(); QString mess = tr("There are no fonts found on your system."); mess += "\n" + tr("Exiting now."); QMessageBox::critical(0, tr("Fatal Error"), mess, 1, 0, 0); } else setSplashStatus( tr("Font System Initialized") ); return haveFonts; }
int ScribusCore::startGUI(bool showSplash, bool showFontInfo, bool showProfileInfo, const QString newGuiLanguage, const QString prefsUserFile) { ScribusMainWindow* scribus = new ScribusMainWindow(); Q_CHECK_PTR(scribus); if (!scribus) return(EXIT_FAILURE); ScMWList.append(scribus); m_currScMW=0; int retVal=initScribusCore(showSplash, showFontInfo, showProfileInfo,newGuiLanguage, prefsUserFile); if (retVal == EXIT_FAILURE) return(EXIT_FAILURE); retVal = scribus->initScMW(true); if (retVal == EXIT_FAILURE) return(EXIT_FAILURE); closeSplash(); m_ScribusInitialized=true; connect(ScQApp, SIGNAL(lastWindowClosed()), ScQApp, SLOT(quit())); scribus->show(); int subsRet=scribus->ShowSubs(); if (subsRet==0) { if (!m_Files.isEmpty()) { for (int i = 0; i < m_Files.size(); ++i) scribus->loadDoc(m_Files.at(i)); } else { if (PrefsManager::instance()->appPrefs.uiPrefs.showStartupDialog && usingGUI()) scribus->startUpDialog(); else scribus->setFocus(); } } else if (subsRet==QMessageBox::Help) { scribus->slotRaiseOnlineHelp(); } return EXIT_SUCCESS; }
void UTLauncher::startServerBrowser() { splashTimer.singleShot(2000, this, SLOT(closeSplash())); if(!settings.value("StartMinimized", false).toBool()) { browser->show(); } else { qApp->setQuitOnLastWindowClosed(false); // workaround for app not starting } browser->setMOTD(bootstrap.MOTD()); auto hasEditorSupport = [=] { QString editorPath = bootstrap.editorExePath(); QString projectPath = bootstrap.projectPath(); return QFile::exists(editorPath) && QFile::exists(projectPath); }; auto openSettings = [=](bool mandatoryEditor = false) { ConfigDialog dialog(settings, mandatoryEditor); dialog.exec(); browser->setEditorSupport(hasEditorSupport()); browser->setHideOnClose(settings.value("MinimizeToTrayOnClose").toBool()); }; connect(browser, &ServerBrowser::openServer, [=](QString url, bool spectate, bool inEditor) { if(inEditor) { QString editorPath = bootstrap.editorExePath(); QString projectPath = bootstrap.projectPath(); if(!editorPath.length() || !projectPath.length()) { openSettings(true); return; } QProcess::startDetached(editorPath, QStringList() << projectPath << "-GAME" << (url + (spectate?"?SpectatorOnly=1":"")) ); } else { QString exePath = bootstrap.programExePath(); if(!exePath.length()) { openSettings(); return; } const auto serverEntry = browser->serverEntryFromAddress(url); auto launch = [=] { qDebug() << "Launching!!\n"; QProcess::startDetached(exePath, QStringList() #ifdef LAUNCH_WITH_UE4 << "UnrealTournament" #endif << (url + (spectate?"?SpectatorOnly=1":"")) << "-SaveToUserDir"); }; if(serverEntry) { if(bootstrap.isStockMap(serverEntry->map)) { launch(); return; } QString exePath = bootstrap.programExePath(); QFileInfo exeInfo(exePath); auto contentDir = QDir(exeInfo.dir()); contentDir.cdUp(); contentDir.cdUp(); contentDir.cd("Content"); auto zipFilePath = contentDir.absoluteFilePath(serverEntry->map + ".zip"); if(QFile::exists(zipFilePath)) { launch(); return; } Download mapDownload; mapDownload.setTarget("https://ut.rushbase.net/customcontent/Data/" + serverEntry->map + ".zip"); QProgressDialog dialog("Downloading map: " + serverEntry->map, "Cancel", 0, 100); QFile zipFile(zipFilePath); zipFile.open(QIODevice::WriteOnly); int httpCode = 200; connect(&mapDownload, &Download::error, [&](int code) { httpCode = code; if(code != 200) { zipFile.remove(); QMessageBox::critical(nullptr, "Unable to download map", QString("Got code %1 while trying to download map:<br>%2").arg(code).arg(serverEntry->map)); } }); connect(&mapDownload, &Download::chunk, [&](QByteArray chunk) { qDebug() << "Reading!\n"; zipFile.write(chunk); }); connect(&mapDownload, &Download::progress, [&](double progress) { dialog.setValue(100*progress); if(progress == 1.0) { dialog.accept(); } }); mapDownload.download(); qDebug() << "Downloading map " << serverEntry->map; if(!dialog.exec() || httpCode != 200) { zipFile.remove(); // remove unfinished download return; } zipFile.close(); QProgressDialog installDialog("Installing map: " + serverEntry->map, "", 0, 100); installDialog.setWindowModality(Qt::ApplicationModal); installDialog.show(); installDialog.setValue(0); qDebug() << "Installed!!\n"; QuaZip zip(zipFilePath); auto textCodec = QTextCodec::codecForName("TSCII"); zip.setFileNameCodec(textCodec); zip.setCommentCodec(textCodec); zip.open(QuaZip::mdUnzip); QuaZipFile file(&zip); size_t totalSize = 0; for(bool f=zip.goToFirstFile(); f; f=zip.goToNextFile()) { QuaZipFileInfo info; zip.getCurrentFileInfo(&info); totalSize += info.uncompressedSize; } qDebug() << "Total size " << totalSize; size_t accumulatedSize = 0; /* TODO!!!!: this whole thing needs to be redone asynchronously */ for(bool f=zip.goToFirstFile(); f; f=zip.goToNextFile()) { file.open(QIODevice::ReadOnly); //same functionality as QIODevice::readData() -- data is a char*, maxSize is qint64 //file.readData(data,maxSize); QString filename = file.getActualFileName(); if(file.isOpen()) { qApp->processEvents(); qDebug() << installDialog.isVisible() << installDialog.value(); if(!installDialog.isVisible() && installDialog.value() != 100 && installDialog.value() != -1) return; bool isDir = (filename.right(1) == "/"); if(isDir) { contentDir.mkpath(filename); } else { QFile f(contentDir.absoluteFilePath(filename)); f.open(QIODevice::WriteOnly); auto data = file.readAll(); accumulatedSize += data.size(); qDebug() << accumulatedSize; installDialog.setValue(100 * (double)accumulatedSize / totalSize); qApp->processEvents(); qDebug() << installDialog.isVisible() << installDialog.value(); if(!installDialog.isVisible() && installDialog.value() != 100 && installDialog.value() != -1) return; f.write(data); } qDebug() << file.getActualFileName() << isDir; //do something with the data if(file.isOpen()) file.close(); qApp->processEvents(); qDebug() << installDialog.isVisible() << installDialog.value(); if(!installDialog.isVisible() && installDialog.value() != 100 && installDialog.value() != -1) return; } else { qDebug() << "Cannot open" << filename << "inside zip";; } } qDebug() << "Closing zip\n"; zip.close(); launch(); } } }); disconnect(&bootstrap, &Bootstrap::ready, this, &UTLauncher::prepareConfig); connect(&bootstrap, &Bootstrap::ready, this, [=] { browser->setMOTD(bootstrap.MOTD()); }); connect(browser, &ServerBrowser::openSettings, openSettings); browser->setEditorSupport(hasEditorSupport()); browser->setHideOnClose(settings.value("MinimizeToTrayOnClose", false).toBool()); systemTray.setToolTip("UTLauncher"); auto systemTrayMenu = new QMenu(browser); auto showBrowser = new QAction(awesome->icon(fa::listalt), "Server List", this); connect(showBrowser, &QAction::triggered, [=]() { browser->showNormal(); browser->raise(); browser->activateWindow(); }); auto runUTAction = new QAction(awesome->icon( fa::gamepad ),"Run UT", this); connect(runUTAction, &QAction::triggered, [=]() { QString exePath = bootstrap.programExePath(); if(!exePath.length()) { browser->show(); openSettings(); return; } QProcess::startDetached(exePath #ifdef LAUNCH_WITH_UE4 , QStringList() << "UnrealTournament" << "-SaveToUserDir" #endif ); }); auto runEditorAction = new QAction(awesome->icon( fa::code ),"Run Editor", this); connect(runEditorAction, &QAction::triggered, [=]() { QString editorPath = bootstrap.editorExePath(); QString projectPath = bootstrap.projectPath(); QProcess::startDetached(editorPath, QStringList() << projectPath); }); auto quitAction = new QAction(awesome->icon( fa::signout ),"Quit", this); connect(quitAction, &QAction::triggered, [=]() { QApplication::quit(); }); systemTrayMenu->addAction(showBrowser); systemTrayMenu->addSeparator(); systemTrayMenu->addAction(runUTAction); systemTrayMenu->addAction(runEditorAction); systemTrayMenu->addSeparator(); systemTrayMenu->addAction(quitAction); systemTray.setContextMenu(systemTrayMenu); systemTray.show(); connect(&systemTray, &QSystemTrayIcon::activated, [=](QSystemTrayIcon::ActivationReason reason) { qApp->setQuitOnLastWindowClosed(true); runEditorAction->setVisible(hasEditorSupport()); switch(reason) { case QSystemTrayIcon::Trigger: { if(browser->isHidden()) { browser->show(); } else { browser->hide(); } break; } } }); }