From e98c873ed24cd23b0ba9442a856e63243a18a869 Mon Sep 17 00:00:00 2001 From: Trevor SANDY Date: Fri, 12 Mar 2021 07:23:37 +0100 Subject: [PATCH] Add highlight lines and set step to editor preferences #417 --- builds/linux/obs/alldeps/PKGBUILD | 2 +- builds/linux/obs/alldeps/debian/changelog | 6 +- builds/linux/obs/alldeps/debian/lpub3d.dsc | 2 +- builds/linux/obs/alldeps/lpub3d.spec | 4 +- builds/utilities/ci/secure/.secrets.tar.enc | Bin 10256 -> 10256 bytes builds/utilities/version.info | 2 +- mainApp/docs/README.txt | 2 +- mainApp/docs/RELEASE_NOTES.html | 2 +- mainApp/editwindow.cpp | 97 ++++++++++++++------ mainApp/excludedparts.cpp | 2 +- mainApp/lpub.cpp | 34 ++++--- mainApp/lpub.h | 2 +- mainApp/lpub_preferences.cpp | 18 ++++ mainApp/lpub_preferences.h | 2 + mainApp/name.h | 1 + mainApp/nativeviewer.cpp | 13 +-- mainApp/org.trevorsandy.lpub3d.appdata.xml | 2 +- mainApp/traverse.cpp | 4 +- 18 files changed, 128 insertions(+), 67 deletions(-) diff --git a/builds/linux/obs/alldeps/PKGBUILD b/builds/linux/obs/alldeps/PKGBUILD index 8f1f27e02..97d427a45 100644 --- a/builds/linux/obs/alldeps/PKGBUILD +++ b/builds/linux/obs/alldeps/PKGBUILD @@ -2,7 +2,7 @@ # Last Update: July 19, 2020 # Copyright (c) 2017 - 2020 by Trevor SANDY pkgname=lpub3d -pkgver=2.4.1.2111 +pkgver=2.4.1.2112 pkgrel=1 pkgdesc="An LDraw Building Instruction Editor" url="https://github.com/trevorsandy/lpub3d.git" diff --git a/builds/linux/obs/alldeps/debian/changelog b/builds/linux/obs/alldeps/debian/changelog index d86277f30..de6b4827d 100644 --- a/builds/linux/obs/alldeps/debian/changelog +++ b/builds/linux/obs/alldeps/debian/changelog @@ -1,5 +1,5 @@ -lpub3d (2.4.1.2111) debian; urgency=medium +lpub3d (2.4.1.2112) debian; urgency=medium - * LPub3D version 2.4.1.1.2111_20210312 for Linux + * LPub3D version 2.4.1.1.2112_20210312 for Linux - -- Trevor SANDY Fri, 12 Mar 2021 07:22:58 +0100 + -- Trevor SANDY Fri, 12 Mar 2021 07:23:37 +0100 diff --git a/builds/linux/obs/alldeps/debian/lpub3d.dsc b/builds/linux/obs/alldeps/debian/lpub3d.dsc index 24579db9a..65312e25f 100644 --- a/builds/linux/obs/alldeps/debian/lpub3d.dsc +++ b/builds/linux/obs/alldeps/debian/lpub3d.dsc @@ -2,7 +2,7 @@ Format: 1.0 Source: lpub3d Binary: lpub3d Architecture: any -Version: 2.4.1.2111 +Version: 2.4.1.2112 Maintainer: Trevor SANDY Homepage: https://trevorsandy.github.io/lpub3d/ Standards-Version: 3.9.7 diff --git a/builds/linux/obs/alldeps/lpub3d.spec b/builds/linux/obs/alldeps/lpub3d.spec index b11b2de87..3a4511c69 100644 --- a/builds/linux/obs/alldeps/lpub3d.spec +++ b/builds/linux/obs/alldeps/lpub3d.spec @@ -116,7 +116,7 @@ BuildRequires: fdupes Summary: An LDraw Building Instruction Editor Name: lpub3d Icon: lpub3d.xpm -Version: 2.4.1.2111 +Version: 2.4.1.2112 Release: %{?dist} URL: https://trevorsandy.github.io/lpub3d Vendor: Trevor SANDY @@ -731,5 +731,5 @@ update-mime-database /usr/share/mime >/dev/null || true update-desktop-database || true %endif -* Fri Mar 12 2021 - trevor.dot.sandy.at.gmail.dot.com 2.4.1.2111 +* Fri Mar 12 2021 - trevor.dot.sandy.at.gmail.dot.com 2.4.1.2112 - LPub3D Linux package (rpm) release diff --git a/builds/utilities/ci/secure/.secrets.tar.enc b/builds/utilities/ci/secure/.secrets.tar.enc index cc66959f8f22b1c2246f2da610a6a4b0406194f3..87b6a07118f30ec4b1670a6b89b5a30c4dd596bc 100644 GIT binary patch literal 10256 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 W==z2fFh@b(_pxh~bpi*{b+x+*Fa7lZ literal 10256 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 WQrmgjR`S46O~AwqeZL2jiT$`d=LrA+ diff --git a/builds/utilities/version.info b/builds/utilities/version.info index ba8861030..18c956d56 100755 --- a/builds/utilities/version.info +++ b/builds/utilities/version.info @@ -1 +1 @@ -2 4 1 1 2111 cabb1f3 +2 4 1 1 2112 ada0606 diff --git a/mainApp/docs/README.txt b/mainApp/docs/README.txt index 5b4d2ec32..9ab95502f 100755 --- a/mainApp/docs/README.txt +++ b/mainApp/docs/README.txt @@ -1,4 +1,4 @@ -LPub3D 2.4.1.1.2111 (12 03 2021 07:22:58) +LPub3D 2.4.1.1.2112 (12 03 2021 07:23:37) Features, enhancements, fixes and changes ------------ diff --git a/mainApp/docs/RELEASE_NOTES.html b/mainApp/docs/RELEASE_NOTES.html index 6c36c400d..a6d02e208 100644 --- a/mainApp/docs/RELEASE_NOTES.html +++ b/mainApp/docs/RELEASE_NOTES.html @@ -9,7 +9,7 @@
-

LPub3D 2.4.1.1.2111 (12 03 2021 07:22:58)

+

LPub3D 2.4.1.1.2112 (12 03 2021 07:23:37)


LPub3D Official release.
diff --git a/mainApp/editwindow.cpp b/mainApp/editwindow.cpp index 152b0cff4..8d1acfe83 100644 --- a/mainApp/editwindow.cpp +++ b/mainApp/editwindow.cpp @@ -979,12 +979,9 @@ void EditWindow::highlightSelectedLines(QVector &lines, bool clear, bool ed lineColor = QColor(THEME_SCENE_BGCOLOR_DARK); } } else { - if (Preferences::displayTheme == THEME_DEFAULT) { - lineColor = QColor(Qt::yellow).lighter(180); - } else if (Preferences::displayTheme == THEME_DARK) { - lineColor = QColor(Qt::yellow).lighter(180); + lineColor = QColor(editorSelection ? Qt::cyan : Qt::green).lighter(180); + if (Preferences::displayTheme == THEME_DARK) lineColor.setAlpha(100); // make 60% transparent - } } } @@ -1124,9 +1121,11 @@ void EditWindow::updateSelectedParts() { if (isIncludeFile) return; + int lineNumber = 0; int currentLine = 0; int selectedLines = 0; bool clearSelection = false; + TypeLine typeLine = { -1/*fileOrderIndex*/, 0/*lineNumber*/ }; QVector lineTypeIndexes; QVector toggleLines; @@ -1169,25 +1168,36 @@ void EditWindow::updateSelectedParts() { while (currentLine < selectedLines) { - QString selection = content.at(currentLine); - int lineNumber = getSelectedLineNumber(); - TypeLine typeLine(fileOrderIndex,lineNumber); - emit setStepForLineSig(typeLine); + if (Preferences::editorLoadSelectionStep) + { + lineNumber = getSelectedLineNumber(); + typeLine = { fileOrderIndex, lineNumber }; + emit setStepForLineSig(typeLine); + } if (content.at(currentLine).startsWith("1") || content.at(currentLine).contains(" PLI BEGIN SUB ")) { - lineTypeIndexes.append(typeLine); - if (stepLines.isInScope(lineNumber)) + if (!Preferences::editorLoadSelectionStep) { - toggleLines.append(lineNumber); - clearSelection = savedSelection.contains(lineNumber); - highlightSelectedLines(toggleLines, clearSelection, true/*editorSelection*/); - if (clearSelection) - savedSelection.removeAll(lineNumber); - else - savedSelection.append(lineNumber); - toggleLines.clear(); + lineNumber = getSelectedLineNumber(); + typeLine = { fileOrderIndex, lineNumber }; + } + + lineTypeIndexes.append(typeLine); + + if (Preferences::editorHighlightLines) { + if (stepLines.isInScope(lineNumber)) + { + toggleLines.append(lineNumber); + clearSelection = savedSelection.contains(lineNumber); + highlightSelectedLines(toggleLines, clearSelection, true/*editorSelection*/); + if (clearSelection) + savedSelection.removeAll(lineNumber); + else + savedSelection.append(lineNumber); + toggleLines.clear(); + } } } // set next selected line @@ -1447,10 +1457,12 @@ void EditWindow::closeEvent(QCloseEvent *_event) void EditWindow::preferences() { - QString windowTitle = QString("Editor Preferences"); - int editorDecoration = Preferences::editorDecoration; - int editorLinesPerPage = Preferences::editorLinesPerPage; - bool editorBufferedPaging = Preferences::editorBufferedPaging; + QString windowTitle = QString("Editor Preferences"); + int editorDecoration = Preferences::editorDecoration; + int editorLinesPerPage = Preferences::editorLinesPerPage; + bool editorBufferedPaging = Preferences::editorBufferedPaging; + bool editorHighlightLines = Preferences::editorHighlightLines; + bool editorLoadSelectionStep = Preferences::editorLoadSelectionStep; auto showMessage = [&windowTitle] (const QString change) { QPixmap _icon = QPixmap(":/icons/lpub96.png"); @@ -1482,31 +1494,44 @@ void EditWindow::preferences() form->addWidget(editorDecorationGrpBox); QFormLayout *editorDecorationSubform = new QFormLayout(editorDecorationGrpBox); - QLabel *editorDecorationLabel = new QLabel("Text Decoration:", dialog); + QLabel *editorDecorationLabel = new QLabel(tr("Text Decoration:"), dialog); QComboBox * editorDecorationCombo = new QComboBox(dialog); editorDecorationCombo->addItem(tr("Simple")); editorDecorationCombo->addItem(tr("Standard")); editorDecorationCombo->setCurrentIndex(editorDecoration); - editorDecorationCombo->setToolTip("Set text decoration. Fancy decoration will slow-down loading very large models"); - editorDecorationCombo->setStatusTip("Use dropdown to select LDraw editor text decoration"); + editorDecorationCombo->setToolTip(tr("Set text decoration. Fancy decoration will slow-down loading very large models")); editorDecorationSubform->addRow(editorDecorationLabel, editorDecorationCombo); // options - buffered paging QGroupBox *editorBufferedPagingGrpBox = new QGroupBox(tr("Buffered paging")); editorBufferedPagingGrpBox->setCheckable(true); editorBufferedPagingGrpBox->setChecked(editorBufferedPaging); - editorBufferedPagingGrpBox->setToolTip("Set buffered paging. Improve the loading times for very large models"); + editorBufferedPagingGrpBox->setToolTip(tr("Set buffered paging. Improve the loading times for very large models")); form->addWidget(editorBufferedPagingGrpBox); QFormLayout *editorBufferedPagingSubform = new QFormLayout(editorBufferedPagingGrpBox); - QLabel *editorLinesPerPageLabel = new QLabel("Lines Per Buffered Page:", dialog); + QLabel *editorLinesPerPageLabel = new QLabel(tr("Lines Per Buffered Page:"), dialog); QSpinBox *editorLinesPerPageSpin = new QSpinBox(dialog); editorLinesPerPageSpin->setRange(EDITOR_MIN_LINES_DEFAULT,EDITOR_MAX_LINES_DEFAULT); editorLinesPerPageSpin->setValue(editorLinesPerPage); - editorLinesPerPageSpin->setToolTip("Set lines per page to optimize scrolling."); - editorLinesPerPageSpin->setStatusTip(QString("Set the desired buffered lines per page between %1 and %2.").arg(EDITOR_MIN_LINES_DEFAULT).arg(EDITOR_MAX_LINES_DEFAULT)); + editorLinesPerPageSpin->setToolTip(tr("Set lines per page between %1 and %2 to optimize scrolling.").arg(EDITOR_MIN_LINES_DEFAULT).arg(EDITOR_MAX_LINES_DEFAULT)); editorBufferedPagingSubform->addRow(editorLinesPerPageLabel, editorLinesPerPageSpin); + // options - selected lines + QGroupBox *editorSelectedItemsGrpBox = new QGroupBox(tr("Selected Items")); + form->addWidget(editorSelectedItemsGrpBox); + QFormLayout *editorSelectedItemsSubform = new QFormLayout(editorSelectedItemsGrpBox); + + QCheckBox *editorHighlightLinesBox = new QCheckBox(tr("Highlight Selected Lines"), dialog); + editorHighlightLinesBox->setToolTip(tr("Highlight selected line(s) when clicked in Editor")); + editorHighlightLinesBox->setChecked(editorHighlightLines); + editorSelectedItemsSubform->addRow(editorHighlightLinesBox); + + QCheckBox *editorLoadSelectionStepBox = new QCheckBox(tr("Load Selection Step in 3DViewer"), dialog); + editorLoadSelectionStepBox->setToolTip(tr("Load the first step (on multi-line select) of selected lines in the 3DViewer")); + editorLoadSelectionStepBox->setChecked(editorLoadSelectionStep); + editorSelectedItemsSubform->addRow(editorLoadSelectionStepBox); + // options - button box QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, dialog); @@ -1533,6 +1558,18 @@ void EditWindow::preferences() Settings.setValue(QString("%1/%2").arg(SETTINGS,"EditorLinesPerPage"),Preferences::editorLinesPerPage); emit lpubAlert->messageSig(LOG_INFO,QString("Buffered lines par page changed from %1 to %2").arg(editorLinesPerPage).arg(Preferences::editorLinesPerPage)); } + + Preferences::editorHighlightLines = editorHighlightLinesBox->isChecked(); + if (editorHighlightLines != Preferences::editorHighlightLines) { + Settings.setValue(QString("%1/%2").arg(SETTINGS,"EditorHighlightLines"),Preferences::editorHighlightLines); + emit lpubAlert->messageSig(LOG_INFO,QString("Highlight selected lines changed from %1 to %2").arg(editorHighlightLines).arg(Preferences::editorLinesPerPage)); + } + + Preferences::editorLoadSelectionStep = editorLoadSelectionStepBox->isChecked(); + if (editorLoadSelectionStep != Preferences::editorLoadSelectionStep) { + Settings.setValue(QString("%1/%2").arg(SETTINGS,"EditorLoadSelectionStep"),Preferences::editorLoadSelectionStep); + emit lpubAlert->messageSig(LOG_INFO,QString("Load selection step in 3DViewer changed from %1 to %2").arg(editorLoadSelectionStep).arg(Preferences::editorLoadSelectionStep)); + } } } diff --git a/mainApp/excludedparts.cpp b/mainApp/excludedparts.cpp index b52026c7b..bb63567db 100644 --- a/mainApp/excludedparts.cpp +++ b/mainApp/excludedparts.cpp @@ -34,7 +34,7 @@ ExcludedParts::ExcludedParts() if (excludedParts.size() == 0) { bool rxFound = false; QString excludedPartsFile = Preferences::excludedPartsFile; - QRegExp rx("^(\\b.*\[^\\s]\\b)(?:\\s)\\s+(.*)$"); + QRegExp rx("^(\\b.*[^\\s]\\b)(?:\\s)\\s+(.*)$"); if (!excludedPartsFile.isEmpty()) { QFile file(excludedPartsFile); if ( ! file.open(QFile::ReadOnly | QFile::Text)) { diff --git a/mainApp/lpub.cpp b/mainApp/lpub.cpp index ba3774283..eb3e888f8 100644 --- a/mainApp/lpub.cpp +++ b/mainApp/lpub.cpp @@ -392,6 +392,7 @@ void Gui::updateClipboard() void Gui::displayPage() { emit messageSig(LOG_STATUS, "Processing page display..."); + pageProcessRunning = PROC_DISPLAY_PAGE; timer.start(); if (macroNesting == 0) { bool updateViewer = currentStep ? currentStep->updateViewer : true; @@ -405,6 +406,7 @@ void Gui::displayPage() if (! ContinuousPage()) emit messageSig(LOG_STATUS,QString("Page loaded%1.") .arg(Preferences::modeGUI ? QString(". %1").arg(gui->elapsedTime(timer.elapsed())) : "")); + pageProcessRunning = PROC_NONE; } void Gui::nextPage() @@ -1247,18 +1249,21 @@ void Gui::displayFile( int stepNumber = 1; Where top(modelName,0); Where bottom(modelName,0); - if (getCurrentStep()) { - top = getCurrentStep()->topOfStep(); - bottom = getCurrentStep()->bottomOfStep(); - stepNumber = getCurrentStep()->stepNumber.number; - } - if (!bottom.lineNumber) { - bool partsAdded = false; - while (!partsAdded) - mi->scanForward(bottom, StepMask|StepGroupMask, partsAdded); + if (!pageProcessRunning && !exporting()) { + if (getCurrentStep()) { + top = getCurrentStep()->topOfStep(); + bottom = getCurrentStep()->bottomOfStep(); + stepNumber = getCurrentStep()->stepNumber.number; + } + if (!bottom.lineNumber) { + Rc rc = OkRc; + bool partsAdded = false; + while (!partsAdded && rc != EndOfFileRc) + rc = mi->scanForward(bottom, StepMask|StepGroupEndMask, partsAdded); + } } - StepLines lineScope(top.lineNumber, bottom.lineNumber); - displayFileSig(ldrawFile, modelName, lineScope); + const StepLines lineScope(top.lineNumber, bottom.lineNumber); + displayFileSig(ldrawFile, modelName, lineScope); #ifdef QT_DEBUG_MODE emit messageSig(LOG_DEBUG,tr("Editor loaded step %1, lines %2-%3 - %4") .arg(stepNumber) @@ -2984,7 +2989,8 @@ Gui::Gui() displayPageNum = 1; numPrograms = 0; - processOption = EXPORT_ALL_PAGES; + pageProcessRunning = PROC_NONE; // display page process + processOption = EXPORT_ALL_PAGES; // export process exportMode = EXPORT_PDF; pageRangeText = "1"; exportPixelRatio = 1.0; @@ -2998,7 +3004,7 @@ Gui::Gui() previousPageContinuousIsRunning = false; mBuildModRange = { 0, 0, -1 }; - mStepRotation = {0.0f, 0.0f, 0.0f}; + mStepRotation = { 0.0f, 0.0f, 0.0f }; mRotStepAngleX = 0.0f; mRotStepAngleY = 0.0f; mRotStepAngleZ = 0.0f; @@ -5537,7 +5543,7 @@ void Gui::parseError(const QString message, const Where &here, Preferences::MsgK Preferences::MsgID msgID(msgKey,messageLine.indexToString()); Preferences::showMessage(msgID, parseMessage, keyType[msgKey][0], keyType[msgKey][1], option, override); } - if (writingToTmp) + if (pageProcessRunning == PROC_WRITE_TO_TMP) emit progressPermMessageSig(QString("Writing submodel [Parse Error%1") .arg(okToShowMessage ? "]... " : " - see log]... " )); } diff --git a/mainApp/lpub.h b/mainApp/lpub.h index c82445ebf..f2e772c70 100644 --- a/mainApp/lpub.h +++ b/mainApp/lpub.h @@ -1518,7 +1518,7 @@ public slots: int numPrograms; - bool writingToTmp; + int pageProcessRunning; // indicate page processing stage - 0=none, 1=writeToTmp,2-find/drawPage..., bool okToInvokeProgressBar() { diff --git a/mainApp/lpub_preferences.cpp b/mainApp/lpub_preferences.cpp index c94d42e65..1d1bd7947 100644 --- a/mainApp/lpub_preferences.cpp +++ b/mainApp/lpub_preferences.cpp @@ -269,6 +269,8 @@ bool Preferences::defaultBlendFile = false; bool Preferences::useSystemEditor = false; bool Preferences::buildModEnabled = true; bool Preferences::editorBufferedPaging = true; +bool Preferences::editorHighlightLines = true; +bool Preferences::editorLoadSelectionStep = true; #ifdef Q_OS_MAC bool Preferences::missingRendererLibs = false; @@ -2886,6 +2888,22 @@ void Preferences::editorPreferences() } else { editorDecoration = Settings.value(QString("%1/%2").arg(SETTINGS,"EditorDecoration")).toInt(); } + + // Highlight selected lines when clicked in Editor + if ( ! Settings.contains(QString("%1/%2").arg(SETTINGS,"EditorHighlightLines"))) { + QVariant uValue(editorHighlightLines); + Settings.setValue(QString("%1/%2").arg(SETTINGS,"EditorHighlightLines"),uValue); + } else { + editorHighlightLines = Settings.value(QString("%1/%2").arg(SETTINGS,"EditorHighlightLines")).toBool(); + } + + // Load the first step (on multi-line select) of selected lines in the 3DViewer + if ( ! Settings.contains(QString("%1/%2").arg(SETTINGS,"EditorLoadSelectionStep"))) { + QVariant uValue(editorLoadSelectionStep); + Settings.setValue(QString("%1/%2").arg(SETTINGS,"EditorLoadSelectionStep"),uValue); + } else { + editorLoadSelectionStep = Settings.value(QString("%1/%2").arg(SETTINGS,"EditorLoadSelectionStep")).toBool(); + } } void Preferences::userInterfacePreferences() diff --git a/mainApp/lpub_preferences.h b/mainApp/lpub_preferences.h index d018df115..370a3d5f6 100644 --- a/mainApp/lpub_preferences.h +++ b/mainApp/lpub_preferences.h @@ -333,6 +333,8 @@ class Preferences static bool debugLogging; static bool useSystemEditor; static bool editorBufferedPaging; + static bool editorHighlightLines; + static bool editorLoadSelectionStep; #ifdef Q_OS_MAC static bool missingRendererLibs; diff --git a/mainApp/name.h b/mainApp/name.h index 4e001c24f..6110b7990 100644 --- a/mainApp/name.h +++ b/mainApp/name.h @@ -68,6 +68,7 @@ enum Theme { ThemeDark, ThemeDefault }; enum SaveOnSender { SaveOnNone, SaveOnRedraw, SaveOnUpdate }; enum NativeType { NTypeDefault, NTypeCalledOut, NTypeMultiStep }; enum ShowLineType { LINE_HIGHLIGHT, LINE_ERROR }; +enum ProcessType { PROC_NONE, PROC_WRITE_TO_TMP, PROC_DISPLAY_PAGE }; enum SceneObjectInfo { ObjectId }; diff --git a/mainApp/nativeviewer.cpp b/mainApp/nativeviewer.cpp index 467439ecf..3fc1920c1 100644 --- a/mainApp/nativeviewer.cpp +++ b/mainApp/nativeviewer.cpp @@ -3315,21 +3315,18 @@ void Gui::setCurrentStep(Step *step) void Gui::setStepForLine(const TypeLine &here) { - if (!currentStep || (!currentStep->multiStep && !currentStep->calledOut)) + if (!currentStep || !gMainWindow->isVisible() || exporting()) return; - const Where top = currentStep->multiStep ? currentStep->topOfSteps() : currentStep->topOfCallout(); - const Where bottom = currentStep->multiStep ? currentStep->bottomOfSteps() : currentStep->bottomOfCallout(); - QString stepKey = getViewerStepKeyFromRange(Where(here.modelIndex, here.lineIndex), top, bottom); + const QString stepKey = getViewerStepKeyFromRange(Where(here.modelIndex, here.lineIndex), topOfPage(), bottomOfPage()); + if (!stepKey.isEmpty()) { if (!currentStep->viewerStepKey.startsWith(&stepKey)) { setCurrentStep(stepKey); showLine(getCurrentStep()->topOfStep()); enableBuildModActions(); - if (gMainWindow->isVisible()) { - getCurrentStep()->viewerOptions->ZoomExtents = true; - getCurrentStep()->loadTheViewer(); - } + getCurrentStep()->viewerOptions->ZoomExtents = true; + getCurrentStep()->loadTheViewer(); } } } diff --git a/mainApp/org.trevorsandy.lpub3d.appdata.xml b/mainApp/org.trevorsandy.lpub3d.appdata.xml index d874ff288..f39379a4c 100644 --- a/mainApp/org.trevorsandy.lpub3d.appdata.xml +++ b/mainApp/org.trevorsandy.lpub3d.appdata.xml @@ -68,7 +68,7 @@ lpub3d24 - +

LPub3D Linux AppImage package

diff --git a/mainApp/traverse.cpp b/mainApp/traverse.cpp index ab50684ef..5af95f0a9 100644 --- a/mainApp/traverse.cpp +++ b/mainApp/traverse.cpp @@ -4715,7 +4715,7 @@ void Gui::writeToTmp(const QString &fileName, void Gui::writeToTmp() { - writingToTmp = true; + pageProcessRunning = PROC_WRITE_TO_TMP; QElapsedTimer writeToTmpTimer; writeToTmpTimer.start(); @@ -4815,7 +4815,7 @@ void Gui::writeToTmp() emit messageSig(LOG_INFO_STATUS, QString("%1 submodels written to temp directory. %2") .arg(writtenFiles).arg(writeToTmpElapsedTime)); - writingToTmp = false; + pageProcessRunning = PROC_NONE; } /*