void CModuleIndexDialog::indexAllModules( const QList<CSwordModuleInfo*>& modules ) { static bool indexing = false; if (!indexing) { indexing = true; if (modules.count() < 1) return; m_currentModuleIndex = 0; m_progress = new QProgressDialog(QString(""), tr("Cancel"), 0, modules.count()*100); m_progress->setWindowModality(Qt::WindowModal); // not useful actually, should have parent for this m_progress->setWindowTitle(tr("Creating indices")); m_progress->show(); m_progress->raise(); foreach (CSwordModuleInfo* info, modules) { //TODO: how to cancel //QObject::connect(CPointers::backend(), SIGNAL(sigSwordSetupChanged()), this, SLOT(swordSetupChanged())); connect(this, SIGNAL(sigCancel()), info, SLOT(cancelIndexing()) ); connect(m_progress, SIGNAL(canceled()), info, SLOT(cancelIndexing())); connect(info, SIGNAL(indexingFinished()), this, SLOT(slotFinished())); connect(info, SIGNAL(indexingProgress(int)), this, SLOT(slotModuleProgress(int)) ); QString modname(info->name()); const QString labelText = tr("Creating index for work: %1").arg(modname); m_progress->setLabelText(labelText); //todo: if we want to cancel indexing from info->buildIndex(); //waits until this module is finished m_currentModuleIndex++; disconnect(m_progress, SIGNAL(canceled()), info, SLOT(cancelIndexing())); disconnect(info, SIGNAL(indexingFinished()), this, SLOT(slotFinished())); disconnect(info, SIGNAL(indexingProgress(int)), this, SLOT(slotModuleProgress(int)) ); if (m_progress->wasCanceled()) break; }
// Constructs an empty log file. // It must be displayed without error. LogData::LogData() : AbstractLogData(), indexing_data_(), fileMutex_(), workerThread_( &indexing_data_ ) { // Start with an "empty" log attached_file_ = nullptr; currentOperation_ = nullptr; nextOperation_ = nullptr; codec_ = QTextCodec::codecForName( "ISO-8859-1" ); #if defined(GLOGG_USES_QTFILEWATCHER) fileWatcher_ = std::make_shared<QtFileWatcher>(); #elif defined(GLOGG_SUPPORTS_INOTIFY) || defined(WIN32) fileWatcher_ = std::make_shared<PlatformFileWatcher>(); #endif // Initialise the file watcher connect( fileWatcher_.get(), SIGNAL( fileChanged( const QString& ) ), this, SLOT( fileChangedOnDisk() ) ); // Forward the update signal connect( &workerThread_, SIGNAL( indexingProgressed( int ) ), this, SIGNAL( loadingProgressed( int ) ) ); connect( &workerThread_, SIGNAL( indexingFinished( LoadingStatus ) ), this, SLOT( indexingFinished( LoadingStatus ) ) ); // Starts the worker thread workerThread_.start(); }
HelpSearchWidget::HelpSearchWidget(HelpEnginePtr engine, QWidget* parent) : QWidget(parent), mVerticalLayout(new QVBoxLayout(this)), mEngine(engine) { this->setLayout(mVerticalLayout); mVerticalLayout->setMargin(0); helpSearchEngine = new QHelpSearchEngine(mEngine->engine()); connect(helpSearchEngine, SIGNAL(indexingStarted()), this, SLOT(indexingStarted())); connect(helpSearchEngine, SIGNAL(indexingFinished()), this, SLOT(indexingFinished())); connect(helpSearchEngine, SIGNAL(searchingStarted()), this, SLOT(searchingIsStarted())); connect(helpSearchEngine, SIGNAL(searchingFinished(int)), this, SLOT(searchingIsFinished(int))); mVerticalLayout->addWidget(helpSearchEngine->queryWidget()); mVerticalLayout->addWidget(helpSearchEngine->resultWidget()); connect(helpSearchEngine->queryWidget(), SIGNAL(search()), this, SLOT(search())); helpSearchEngine->reindexDocumentation(); connect(helpSearchEngine->resultWidget(), SIGNAL(requestShowLink(const QUrl&)), this, SIGNAL(requestShowLink(const QUrl&))); }
bool BtSearchInterface::indexModules() { QStringList moduleList = m_moduleList.split(", "); CSMI modules = CSwordBackend::instance()->getConstPointerList(moduleList); bool success = true; m_wasCancelled = false; if (m_progressObject == 0) m_progressObject = findQmlObject("indexProgress"); QList<CSwordModuleInfo *> nonIndexedModules; Q_FOREACH(const CSwordModuleInfo *cm, modules) { if (cm->hasIndex()) continue; CSwordModuleInfo *m = const_cast<CSwordModuleInfo*>(cm); nonIndexedModules.append(m); } m_thread = new IndexThread(nonIndexedModules); bool ok = connect(m_thread, SIGNAL(indexingProgress(int)), this, SLOT(slotModuleProgress(int))); Q_ASSERT(ok); ok = connect(m_thread, SIGNAL(beginIndexingModule(const QString&)), this, SLOT(slotBeginModuleIndexing(const QString&))); Q_ASSERT(ok); ok = connect(m_thread, SIGNAL(indexingFinished()), this, SLOT(slotIndexingFinished())); Q_ASSERT(ok); m_thread->start(); return success; }
void SnappingUtils::prepareIndexProgress( int index ) { if ( index == mIndexLayerCount ) emit indexingFinished(); else emit indexingProgress( index ); }
bool rebuildSearchIndex(QCoreApplication *app, const QString &collectionFile, CmdLineParser &cmd) { TRACE_OBJ QHelpEngine engine(collectionFile); if (!engine.setupData()) { cmd.showMessage(QCoreApplication::translate("Assistant", "Error: %1") .arg(engine.error()), true); return false; } QHelpSearchEngine * const searchEngine = engine.searchEngine(); QObject::connect(searchEngine, SIGNAL(indexingFinished()), app, SLOT(quit())); searchEngine->reindexDocumentation(); return app->exec() == 0; }
QT_BEGIN_NAMESPACE MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent) : QMainWindow(parent) , m_bookmarkWidget(0) , m_filterCombo(0) , m_toolBarMenu(0) , m_cmdLine(cmdLine) , m_progressWidget(0) , m_qtDocInstaller(0) , m_connectedInitSignals(false) { TRACE_OBJ setToolButtonStyle(Qt::ToolButtonFollowStyle); setDockOptions(dockOptions() | AllowNestedDocks); QString collectionFile; if (usesDefaultCollection()) { MainWindow::collectionFileDirectory(true); collectionFile = MainWindow::defaultHelpCollectionFileName(); } else { collectionFile = cmdLine->collectionFile(); } HelpEngineWrapper &helpEngineWrapper = HelpEngineWrapper::instance(collectionFile); BookmarkManager *bookMarkManager = BookmarkManager::instance(); if (!initHelpDB(!cmdLine->collectionFileGiven())) { qDebug("Fatal error: Help engine initialization failed. " "Error message was: %s\nAssistant will now exit.", qPrintable(HelpEngineWrapper::instance().error())); std::exit(1); } m_centralWidget = new CentralWidget(this); setCentralWidget(m_centralWidget); m_indexWindow = new IndexWindow(this); QDockWidget *indexDock = new QDockWidget(tr("Index"), this); indexDock->setObjectName(QLatin1String("IndexWindow")); indexDock->setWidget(m_indexWindow); addDockWidget(Qt::LeftDockWidgetArea, indexDock); m_contentWindow = new ContentWindow; QDockWidget *contentDock = new QDockWidget(tr("Contents"), this); contentDock->setObjectName(QLatin1String("ContentWindow")); contentDock->setWidget(m_contentWindow); addDockWidget(Qt::LeftDockWidgetArea, contentDock); m_searchWindow = new SearchWidget(helpEngineWrapper.searchEngine()); m_searchWindow->setFont(!helpEngineWrapper.usesBrowserFont() ? qApp->font() : helpEngineWrapper.browserFont()); QDockWidget *searchDock = new QDockWidget(tr("Search"), this); searchDock->setObjectName(QLatin1String("SearchWindow")); searchDock->setWidget(m_searchWindow); addDockWidget(Qt::LeftDockWidgetArea, searchDock); QDockWidget *bookmarkDock = new QDockWidget(tr("Bookmarks"), this); bookmarkDock->setObjectName(QLatin1String("BookmarkWindow")); bookmarkDock->setWidget(m_bookmarkWidget = bookMarkManager->bookmarkDockWidget()); addDockWidget(Qt::LeftDockWidgetArea, bookmarkDock); QDockWidget *openPagesDock = new QDockWidget(tr("Open Pages"), this); openPagesDock->setObjectName(QLatin1String("Open Pages")); OpenPagesManager *openPagesManager = OpenPagesManager::createInstance(this, usesDefaultCollection(), m_cmdLine->url()); openPagesDock->setWidget(openPagesManager->openPagesWidget()); addDockWidget(Qt::LeftDockWidgetArea, openPagesDock); connect(m_centralWidget, SIGNAL(addBookmark(QString, QString)), bookMarkManager, SLOT(addBookmark(QString, QString))); connect(bookMarkManager, SIGNAL(escapePressed()), this, SLOT(activateCurrentCentralWidgetTab())); connect(bookMarkManager, SIGNAL(setSource(QUrl)), m_centralWidget, SLOT(setSource(QUrl))); connect(bookMarkManager, SIGNAL(setSourceInNewTab(QUrl)), openPagesManager, SLOT(createPage(QUrl))); QHelpSearchEngine *searchEngine = helpEngineWrapper.searchEngine(); connect(searchEngine, SIGNAL(indexingStarted()), this, SLOT(indexingStarted())); connect(searchEngine, SIGNAL(indexingFinished()), this, SLOT(indexingFinished())); QString defWindowTitle = tr("Qt Assistant"); setWindowTitle(defWindowTitle); setupActions(); statusBar()->show(); m_centralWidget->connectTabBar(); setupFilterToolbar(); setupAddressToolbar(); const QString windowTitle = helpEngineWrapper.windowTitle(); setWindowTitle(windowTitle.isEmpty() ? defWindowTitle : windowTitle); QByteArray iconArray = helpEngineWrapper.applicationIcon(); if (iconArray.size() > 0) { QPixmap pix; pix.loadFromData(iconArray); QIcon appIcon(pix); qApp->setWindowIcon(appIcon); } else { QIcon appIcon(QLatin1String(":/trolltech/assistant/images/assistant-128.png")); qApp->setWindowIcon(appIcon); } QToolBar *toolBar = addToolBar(tr("Bookmark Toolbar")); toolBar->setObjectName(QLatin1String("Bookmark Toolbar")); bookMarkManager->setBookmarksToolbar(toolBar); // Show the widget here, otherwise the restore geometry and state won't work // on x11. show(); toolBar->hide(); toolBarMenu()->addAction(toolBar->toggleViewAction()); QByteArray ba(helpEngineWrapper.mainWindow()); if (!ba.isEmpty()) restoreState(ba); ba = helpEngineWrapper.mainWindowGeometry(); if (!ba.isEmpty()) { restoreGeometry(ba); } else { tabifyDockWidget(contentDock, indexDock); tabifyDockWidget(indexDock, bookmarkDock); tabifyDockWidget(bookmarkDock, searchDock); contentDock->raise(); const QRect screen = QApplication::desktop()->screenGeometry(); resize(4*screen.width()/5, 4*screen.height()/5); } if (!helpEngineWrapper.hasFontSettings()) { helpEngineWrapper.setUseAppFont(false); helpEngineWrapper.setUseBrowserFont(false); helpEngineWrapper.setAppFont(qApp->font()); helpEngineWrapper.setAppWritingSystem(QFontDatabase::Latin); helpEngineWrapper.setBrowserFont(qApp->font()); helpEngineWrapper.setBrowserWritingSystem(QFontDatabase::Latin); } else { updateApplicationFont(); } updateAboutMenuText(); QTimer::singleShot(0, this, SLOT(insertLastPages())); if (m_cmdLine->enableRemoteControl()) (void)new RemoteControl(this); if (m_cmdLine->contents() == CmdLineParser::Show) showContents(); else if (m_cmdLine->contents() == CmdLineParser::Hide) hideContents(); if (m_cmdLine->index() == CmdLineParser::Show) showIndex(); else if (m_cmdLine->index() == CmdLineParser::Hide) hideIndex(); if (m_cmdLine->bookmarks() == CmdLineParser::Show) showBookmarksDockWidget(); else if (m_cmdLine->bookmarks() == CmdLineParser::Hide) hideBookmarksDockWidget(); if (m_cmdLine->search() == CmdLineParser::Show) showSearch(); else if (m_cmdLine->search() == CmdLineParser::Hide) hideSearch(); if (m_cmdLine->contents() == CmdLineParser::Activate) showContents(); else if (m_cmdLine->index() == CmdLineParser::Activate) showIndex(); else if (m_cmdLine->bookmarks() == CmdLineParser::Activate) showBookmarksDockWidget(); if (!m_cmdLine->currentFilter().isEmpty()) { const QString &curFilter = m_cmdLine->currentFilter(); if (helpEngineWrapper.customFilters().contains(curFilter)) helpEngineWrapper.setCurrentFilter(curFilter); } if (usesDefaultCollection()) QTimer::singleShot(0, this, SLOT(lookForNewQtDocumentation())); else checkInitState(); connect(&helpEngineWrapper, SIGNAL(documentationRemoved(QString)), this, SLOT(documentationRemoved(QString))); connect(&helpEngineWrapper, SIGNAL(documentationUpdated(QString)), this, SLOT(documentationUpdated(QString))); setTabPosition(Qt::AllDockWidgetAreas, QTabWidget::North); GlobalActions::instance()->updateActions(); if (helpEngineWrapper.addressBarEnabled()) showNewAddress(); }
void QHelpSearchIndexWriter::run() { #if !defined(QT_NO_EXCEPTIONS) try { #endif QMutexLocker mutexLocker(&mutex); if (m_cancel) return; const bool reindex = this->m_reindex; const QString collectionFile(this->m_collectionFile); mutexLocker.unlock(); QHelpEngineCore engine(collectionFile, 0); if (!engine.setupData()) return; const QLatin1String key("CluceneIndexedNamespaces"); if (reindex) engine.setCustomValue(key, QLatin1String("")); QMap<QString, QDateTime> indexMap; const QLatin1String oldKey("CluceneSearchNamespaces"); if (!engine.customValue(oldKey, QString()).isNull()) { // old style qhc file < 4.4.2, need to convert... const QStringList indexedNamespaces = engine.customValue(oldKey).toString() .split(QLatin1String("|"), QString::SkipEmptyParts); foreach (const QString &nameSpace, indexedNamespaces) indexMap.insert(nameSpace, QDateTime()); engine.removeCustomValue(oldKey); } else { QDataStream dataStream(engine.customValue(key).toByteArray()); dataStream >> indexMap; } QString indexPath = m_indexFilesFolder; QFileInfo fInfo(indexPath); if (fInfo.exists() && !fInfo.isWritable()) { qWarning("Full Text Search, could not create index (missing permissions for '%s').", qPrintable(indexPath)); return; } emit indexingStarted(); QCLuceneIndexWriter *writer = 0; QCLuceneStandardAnalyzer analyzer; const QStringList registeredDocs = engine.registeredDocumentations(); QLocalSocket localSocket; localSocket.connectToServer(QString(QLatin1String("QtAssistant%1")) .arg(QLatin1String(QT_VERSION_STR))); QLocalServer localServer; bool otherInstancesRunning = true; if (!localSocket.waitForConnected()) { otherInstancesRunning = false; localServer.listen(QString(QLatin1String("QtAssistant%1")) .arg(QLatin1String(QT_VERSION_STR))); } // check if it's locked, and if the other instance is running if (!otherInstancesRunning && QCLuceneIndexReader::isLocked(indexPath)) QCLuceneIndexReader::unlock(indexPath); if (QCLuceneIndexReader::isLocked(indexPath)) { // poll unless indexing finished to fake progress while (QCLuceneIndexReader::isLocked(indexPath)) { mutexLocker.relock(); if (m_cancel) break; mutexLocker.unlock(); this->sleep(1); } emit indexingFinished(); return; } if (QCLuceneIndexReader::indexExists(indexPath) && !reindex) { foreach(const QString &namespaceName, registeredDocs) { mutexLocker.relock(); if (m_cancel) { emit indexingFinished(); return; } mutexLocker.unlock(); if (!indexMap.contains(namespaceName)) { // make sure we remove some partly indexed stuff removeDocuments(indexPath, namespaceName); } else { QString path = engine.documentationFileName(namespaceName); if (indexMap.value(namespaceName) < QFileInfo(path).lastModified()) { // make sure we remove some outdated indexed stuff indexMap.remove(namespaceName); removeDocuments(indexPath, namespaceName); } if (indexMap.contains(namespaceName)) { // make sure we really have content indexed for namespace QCLuceneTermQuery query(QCLuceneTerm(NamespaceField, namespaceName)); QCLuceneIndexSearcher indexSearcher(indexPath); QCLuceneHits hits = indexSearcher.search(query); if (hits.length() <= 0) indexMap.remove(namespaceName); } } }
void BtSearchInterface::slotIndexingFinished() { emit indexingFinished(); }