// Originally user templates were stored whereever the user wanted and maintained in the option "User/Templates". // This behavior has now been changed to always store user templates in [config]/templates/user/ The advantage is // that we don't have to maintain the template list and it's not lost when resetting the configuration. // This function allows to move existing templates to the the new location. void TemplateManager::checkForOldUserTemplates() { ConfigManagerInterface *cfg = ConfigManager::getInstance(); if (!cfg) return; QStringList userTemplateList = cfg->getOption("User/Templates").toStringList(); if (!userTemplateList.isEmpty()) { bool move = txsConfirmWarning(tr("TeXstudio found user templates in deprecated locations.\n" "From now on user templates are hosted at\n%1\n" "Should TeXstudio move the existing user templates there?\n" "If not, they will not be available via the Make Template dialog.").arg(userTemplateDir())); if (move) { foreach (const QString &fname, userTemplateList) { QFileInfo fi(fname); if (!fi.exists()) { userTemplateList.removeOne(fname); continue; } QString newName = userTemplateDir() + fi.fileName(); if (!QFile::copy(fname, newName)) { txsWarning(tr("Copying template from\n%1\nto\n%2\nfailed.").arg(fname).arg(newName)); } else { if (!QFile::remove(fname)) { txsInformation(tr("File\n%1\n could not be removed.").arg(fname)); } userTemplateList.removeOne(fname); } } }
bool LatexLogWidget::loadLogFile(const QString &logname, const QString & compiledFileName){ resetLog(); QFileInfo fi(logname); if (logname.isEmpty() || !fi.exists()) { setInfo(tr("Log file not found.")); return false; } if (!fi.isReadable()) { setInfo(tr("Log file not readable.")); return false; } QFile f(logname); if (f.open(QIODevice::ReadOnly)) { double fileSizeLimitMB = ConfigManagerInterface::getInstance()->getOption("LogView/WarnIfFileSizeLargerMB").toDouble(); if (f.size() > fileSizeLimitMB*1024*1024 && !txsConfirmWarning(tr("The logfile is very large (%1 MB) are you sure you want to load it?").arg(double(f.size()) / 1024 / 1024, 0, 'f', 2))) return false; //QByteArray fullLog = simplifyLineConserving(f.readAll()); // TODO: if we want to have simplification here it has to be smarter. // The above version trims whitespace, which leads to undesired effects due to the 80 char // line width of the log. "line\n 1" would become "\line\n1" and, when rejoining lines for error/warning detection "line1". // Do we need this or can we just leave the output as it is? QByteArray fullLog = f.readAll(); f.close(); int sure; QTextCodec * codec = guessEncodingBasic(fullLog, &sure); if (!sure || !codec) codec = QTextCodec::codecForLocale(); log->setPlainText(codec->toUnicode(fullLog)); logModel->parseLogDocument(log->document(), compiledFileName); logpresent=true; // workaround to https://sourceforge.net/p/texstudio/feature-requests/622/ // There seems to be a bug in Qt (4.8.4) that resizeRowsToContents() does not work correctly if // horizontalHeader()->setStretchLastSection(true) and the tableView has not yet been shown // when iterating through the columns to determine the maximal height, everything is fine // until the last column. There the calculated height is too large. // As a workaround we will temporarily deactivate column stretching. // Note: To reproduce, you can call the viewer via The ViewLog button. When showing the viewer // by clicking the ViewTab, the widget is shown before loading (so there the bug did not appear.) bool visible = errorTable->isVisible(); if (!visible) errorTable->horizontalHeader()->setStretchLastSection(false); errorTable->resizeColumnsToContents(); errorTable->resizeRowsToContents(); if (!visible) errorTable->horizontalHeader()->setStretchLastSection(true); selectLogEntry(0); emit logLoaded(); return true; } setInfo(tr("Log file not readable.")); return false; }
bool ScriptObject::confirmWarning(const QString& message){ return txsConfirmWarning(message); }