void ScriptConsole::runScript() { ui->tabs->setCurrentIndex(1); ui->logBrowser->setHtml(""); appendLogLine(QString("Starting script at %1").arg(QDateTime::currentDateTime().toString())); if (!StelApp::getInstance().getScriptMgr().runScriptDirect(ui->scriptEdit->toPlainText(), ui->includeEdit->text())) { QString msg = QString("ERROR - cannot run script"); qWarning() << "ScriptConsole::runScript " + msg; appendLogLine(msg); return; } }
void ScriptConsole::quickRun(int idx) { ui->quickrunCombo->setCurrentIndex(0); QString scriptText; if (idx==1) { scriptText = QTextDocumentFragment::fromHtml(ui->scriptEdit->textCursor().selectedText(), ui->scriptEdit->document()).toPlainText(); qDebug() << "selected script text is:" << scriptText; } if (idx==2) { scriptText = "LabelMgr.deleteAllLabels();\n"; } if (idx==3) { scriptText = "ScreenImageMgr.deleteAllImages()\n"; } if (idx==4) { scriptText = "core.clear(\"natural\");\n"; } if (idx==5) { scriptText = "core.clear(\"starchart\");\n"; } if (scriptText.isEmpty()) return; appendLogLine(QString("Running: %1").arg(scriptText)); StelApp::getInstance().getScriptMgr().runScriptDirect(scriptText); }
void ScriptConsole::scriptEnded() { qDebug() << "ScriptConsole::scriptEnded"; QString html = ui->logBrowser->toHtml(); appendLogLine(QString("Script finished at %1").arg(QDateTime::currentDateTime().toString())); ui->runButton->setEnabled(true); ui->stopButton->setEnabled(false); }
void ScriptConsole::quickRun(int idx) { ui->quickrunCombo->setCurrentIndex(0); QString scriptText; if (idx==1) { scriptText = QTextDocumentFragment::fromHtml(ui->scriptEdit->textCursor().selectedText(), ui->scriptEdit->document()).toPlainText(); qDebug() << "selected script text is:" << scriptText; } if (idx==2) { scriptText = "LabelMgr.deleteAllLabels();\n"; } if (idx==3) { scriptText = "ScreenImageMgr.deleteAllImages()\n"; } if (idx==4) { scriptText = "core.clear(\"natural\");\n"; } if (idx==5) { scriptText = "core.clear(\"starchart\");\n"; } if (scriptText.isEmpty()) return; QTemporaryFile file(QDir::tempPath() + "/stelscriptXXXXXX.ssc"); if (file.open()) { QString fileName = file.fileName(); QTextStream out(&file); out << scriptText; file.close(); appendLogLine(QString("Running: %1").arg(scriptText)); StelApp::getInstance().getScriptMgr().runScript(fileName); } else { appendLogLine("Can't run quick script (could not open temp file)"); } }
void LogDialog::printLogFile() { _count = 0; _logTextBox->clear(); QString log = getCurrentLog(); QStringList logList = log.split('\n'); for (const auto& message : logList) { appendLogLine(message); } updateMessageCount(); }
void ScriptConsole::runScript() { ui->tabs->setCurrentIndex(1); ui->logBrowser->setHtml(""); QTemporaryFile file(QDir::tempPath() + "/stelscriptXXXXXX.ssc"); QString fileName; if (file.open()) { QTextStream out(&file); out << ui->scriptEdit->toPlainText() << "\n"; fileName = file.fileName(); file.close(); } else { QString msg = "ERROR - cannot open tmp file for writing script text"; qWarning() << "ScriptConsole::runScript " + msg; appendLogLine(msg); return; } ui->runButton->setEnabled(false); ui->stopButton->setEnabled(true); appendLogLine(QString("Starting script at %1").arg(QDateTime::currentDateTime().toString())); if (!StelApp::getInstance().getScriptMgr().runScript(fileName, ui->includeEdit->text())) { QString msg = QString("ERROR - cannot run script from temp file: \"%1\"").arg(fileName); qWarning() << "ScriptConsole::runScript " + msg; appendLogLine(msg); if (file.open()) { int n=0; while(!file.atEnd()) { appendLogLine(QString("%1:%2").arg(n,2).arg(QString(file.readLine()))); } file.close(); } return; } }
void VSearcher::handleSearchFinished(const QSharedPointer<VSearchResult> &p_result) { Q_ASSERT(m_inSearch); Q_ASSERT(p_result->m_state != VSearchState::Idle); qDebug() << "handleSearchFinished" << (int)p_result->m_state; QString msg; switch (p_result->m_state) { case VSearchState::Busy: msg = tr("Search is on going."); appendLogLine(msg); return; case VSearchState::Success: msg = tr("Search succeeded."); appendLogLine(msg); showMessage(msg); break; case VSearchState::Fail: msg = tr("Search failed."); appendLogLine(msg); showMessage(msg); VUtils::showMessage(QMessageBox::Warning, tr("Warning"), tr("Search failed."), p_result->m_errMsg, QMessageBox::Ok, QMessageBox::Ok, this); break; case VSearchState::Cancelled: Q_ASSERT(m_askedToStop); msg = tr("User cancelled the search. Aborted!"); appendLogLine(msg); showMessage(msg); m_askedToStop = false; break; default: break; } if (p_result->m_state != VSearchState::Fail && p_result->hasError()) { VUtils::showMessage(QMessageBox::Warning, tr("Warning"), tr("Errors found during search."), p_result->m_errMsg, QMessageBox::Ok, QMessageBox::Ok, this); } m_search.clear(); m_inSearch = false; m_searchBtn->setEnabled(true); setProgressVisible(false); }
void VSearcher::setupUI() { if (m_uiInitialized) { return; } m_uiInitialized = true; // Search button. m_searchBtn = new QPushButton(VIconUtils::buttonIcon(":/resources/icons/search.svg"), "", this); m_searchBtn->setToolTip(tr("Search")); m_searchBtn->setProperty("FlatBtn", true); connect(m_searchBtn, &QPushButton::clicked, this, &VSearcher::startSearch); // Clear button. m_clearBtn = new QPushButton(VIconUtils::buttonDangerIcon(":/resources/icons/clear_search.svg"), "", this); m_clearBtn->setToolTip(tr("Clear Results")); m_clearBtn->setProperty("FlatBtn", true); connect(m_clearBtn, &QPushButton::clicked, this, [this]() { m_results->clearResults(); }); // Advanced button. m_advBtn = new QPushButton(VIconUtils::buttonIcon(":/resources/icons/search_advanced.svg"), "", this); m_advBtn->setToolTip(tr("Advanced Settings")); m_advBtn->setProperty("FlatBtn", true); m_advBtn->setCheckable(true); connect(m_advBtn, &QPushButton::toggled, this, [this](bool p_checked) { m_advWidget->setVisible(p_checked); }); // Console button. m_consoleBtn = new QPushButton(VIconUtils::buttonIcon(":/resources/icons/search_console.svg"), "", this); m_consoleBtn->setToolTip(tr("Console")); m_consoleBtn->setProperty("FlatBtn", true); m_consoleBtn->setCheckable(true); connect(m_consoleBtn, &QPushButton::toggled, this, [this](bool p_checked) { m_consoleEdit->setVisible(p_checked); }); m_numLabel = new QLabel(this); QHBoxLayout *btnLayout = new QHBoxLayout(); btnLayout->addWidget(m_searchBtn); btnLayout->addWidget(m_clearBtn); btnLayout->addWidget(m_advBtn); btnLayout->addWidget(m_consoleBtn); btnLayout->addStretch(); btnLayout->addWidget(m_numLabel); btnLayout->setContentsMargins(0, 0, 0, 0); // Keyword. m_keywordCB = VUtils::getComboBox(this); m_keywordCB->setEditable(true); m_keywordCB->setLineEdit(new VLineEdit(this)); m_keywordCB->setToolTip(tr("Keywords to search for")); m_keywordCB->lineEdit()->setPlaceholderText(tr("Supports space, &&, and ||")); m_keywordCB->lineEdit()->setProperty("EmbeddedEdit", true); connect(m_keywordCB, &QComboBox::currentTextChanged, this, &VSearcher::handleInputChanged); connect(m_keywordCB->lineEdit(), &QLineEdit::returnPressed, this, &VSearcher::animateSearchClick); m_keywordCB->completer()->setCaseSensitivity(Qt::CaseSensitive); // Scope. m_searchScopeCB = VUtils::getComboBox(this); m_searchScopeCB->setToolTip(tr("Scope to search")); connect(m_searchScopeCB, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &VSearcher::handleInputChanged); // Object. m_searchObjectCB = VUtils::getComboBox(this); m_searchObjectCB->setToolTip(tr("Object to search")); connect(m_searchObjectCB, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &VSearcher::handleInputChanged); // Target. m_searchTargetCB = VUtils::getComboBox(this); m_searchTargetCB->setToolTip(tr("Target to search")); connect(m_searchTargetCB, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &VSearcher::handleInputChanged); // Pattern. m_filePatternCB = VUtils::getComboBox(this); m_filePatternCB->setEditable(true); m_filePatternCB->setLineEdit(new VLineEdit(this)); m_filePatternCB->setToolTip(tr("Wildcard pattern to filter the files to be searched")); m_filePatternCB->lineEdit()->setProperty("EmbeddedEdit", true); m_filePatternCB->completer()->setCaseSensitivity(Qt::CaseSensitive); // Engine. m_searchEngineCB = VUtils::getComboBox(this); m_searchEngineCB->setToolTip(tr("Engine to execute the search")); // Case sensitive. m_caseSensitiveCB = new QCheckBox(tr("&Case sensitive"), this); // Whole word only. m_wholeWordOnlyCB = new QCheckBox(tr("&Whole word only"), this); // Fuzzy search. m_fuzzyCB = new QCheckBox(tr("&Fuzzy search"), this); m_fuzzyCB->setToolTip(tr("Not available for content search")); connect(m_fuzzyCB, &QCheckBox::stateChanged, this, [this](int p_state) { bool checked = p_state == Qt::Checked; m_wholeWordOnlyCB->setEnabled(!checked); }); // Regular expression. m_regularExpressionCB = new QCheckBox(tr("Re&gular expression"), this); connect(m_regularExpressionCB, &QCheckBox::stateChanged, this, [this](int p_state) { bool checked = p_state == Qt::Checked; m_wholeWordOnlyCB->setEnabled(!checked); m_fuzzyCB->setEnabled(!checked); }); QFormLayout *advLayout = VUtils::getFormLayout(); advLayout->addRow(tr("File pattern:"), m_filePatternCB); advLayout->addRow(tr("Engine:"), m_searchEngineCB); advLayout->addRow(m_caseSensitiveCB); advLayout->addRow(m_wholeWordOnlyCB); advLayout->addRow(m_fuzzyCB); advLayout->addRow(m_regularExpressionCB); advLayout->setContentsMargins(0, 0, 0, 0); m_advWidget = new QWidget(this); m_advWidget->setLayout(advLayout); m_advWidget->hide(); // Progress bar. m_proBar = new QProgressBar(this); m_proBar->setRange(0, 0); // Cancel button. m_cancelBtn = new QPushButton(VIconUtils::buttonIcon(":/resources/icons/close.svg"), "", this); m_cancelBtn->setToolTip(tr("Cancel")); m_cancelBtn->setProperty("FlatBtn", true); connect(m_cancelBtn, &QPushButton::clicked, this, [this]() { if (m_inSearch) { appendLogLine(tr("Cancelling the search...")); m_askedToStop = true; m_search.stop(); } }); QHBoxLayout *proLayout = new QHBoxLayout(); proLayout->addWidget(m_proBar); proLayout->addWidget(m_cancelBtn); proLayout->setContentsMargins(0, 0, 0, 0); // Console. m_consoleEdit = new QPlainTextEdit(this); m_consoleEdit->setReadOnly(true); m_consoleEdit->setLineWrapMode(QPlainTextEdit::WidgetWidth); m_consoleEdit->setProperty("LineEdit", true); m_consoleEdit->setPlaceholderText(tr("Output logs will be shown here")); m_consoleEdit->setMaximumHeight(m_searchScopeCB->height() * 2); m_consoleEdit->hide(); // List. m_results = new VSearchResultTree(this); m_results->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); connect(m_results, &VSearchResultTree::countChanged, this, [this](int p_count) { m_clearBtn->setEnabled(p_count > 0); updateNumLabel(p_count); }); QFormLayout *formLayout = VUtils::getFormLayout(); formLayout->addRow(tr("Keywords:"), m_keywordCB); formLayout->addRow(tr("Scope:"), m_searchScopeCB); formLayout->addRow(tr("Object:"), m_searchObjectCB); formLayout->addRow(tr("Target:"), m_searchTargetCB); formLayout->setContentsMargins(0, 0, 0, 0); QVBoxLayout *mainLayout = new QVBoxLayout(); mainLayout->addLayout(btnLayout); mainLayout->addLayout(formLayout); mainLayout->addWidget(m_advWidget); mainLayout->addLayout(proLayout); mainLayout->addWidget(m_consoleEdit); mainLayout->addWidget(m_results); mainLayout->setContentsMargins(3, 0, 3, 0); setLayout(mainLayout); }
void VSearcher::startSearch() { if (m_inSearch) { return; } m_searchBtn->setEnabled(false); setProgressVisible(true); m_results->clearResults(); m_askedToStop = false; m_inSearch = true; m_consoleEdit->clear(); appendLogLine(tr("Search started.")); updateItemToComboBox(m_keywordCB); updateItemToComboBox(m_filePatternCB); m_search.clear(); QSharedPointer<VSearchConfig> config(new VSearchConfig(m_searchScopeCB->currentData().toInt(), m_searchObjectCB->currentData().toInt(), m_searchTargetCB->currentData().toInt(), m_searchEngineCB->currentData().toInt(), getSearchOption(), m_keywordCB->currentText(), m_filePatternCB->currentText())); m_search.setConfig(config); g_config->setSearchOptions(config->toConfig()); QSharedPointer<VSearchResult> result; switch (config->m_scope) { case VSearchConfig::CurrentNote: { QVector<VFile *> files; files.append(g_mainWin->getCurrentFile()); if (files[0]) { QString msg(tr("Search current note %1.").arg(files[0]->getName())); appendLogLine(msg); showMessage(msg); } result = m_search.search(files); break; } case VSearchConfig::OpenedNotes: { QVector<VEditTabInfo> tabs = g_mainWin->getEditArea()->getAllTabsInfo(); QVector<VFile *> files; files.reserve(tabs.size()); for (auto const & ta : tabs) { files.append(ta.m_editTab->getFile()); } result = m_search.search(files); break; } case VSearchConfig::CurrentFolder: { VDirectory *dir = g_mainWin->getDirectoryTree()->currentDirectory(); if (dir) { QString msg(tr("Search current folder %1.").arg(dir->getName())); appendLogLine(msg); showMessage(msg); } result = m_search.search(dir); break; } case VSearchConfig::CurrentNotebook: { QVector<VNotebook *> notebooks; notebooks.append(g_mainWin->getNotebookSelector()->currentNotebook()); if (notebooks[0]) { QString msg(tr("Search current notebook %1.").arg(notebooks[0]->getName())); appendLogLine(msg); showMessage(msg); } result = m_search.search(notebooks); break; } case VSearchConfig::AllNotebooks: { const QVector<VNotebook *> ¬ebooks = g_vnote->getNotebooks(); result = m_search.search(notebooks); break; } case VSearchConfig::ExplorerDirectory: { QString rootDirectory = g_mainWin->getExplorer()->getRootDirectory(); if (!rootDirectory.isEmpty()) { QString msg(tr("Search Explorer directory %1.").arg(rootDirectory)); appendLogLine(msg); showMessage(msg); } result = m_search.search(rootDirectory); break; } default: break; } handleSearchFinished(result); }