diff options
12 files changed, 273 insertions, 90 deletions
diff --git a/share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl b/share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl index 60aa8715873..47f83a1b428 100644 --- a/share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl +++ b/share/qtcreator/qmldesigner/studio_templates/projects/common/app.qmlproject.tpl @@ -90,7 +90,7 @@ Project { /* Required for deployment */ targetDirectory: "/opt/%{ProjectName}" - qdsVersion: "3.0" + qdsVersion: "3.2" @if %{IsQt6Project} /* If any modules the project imports require widgets (e.g. QtCharts), widgetApp must be true */ diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index 4bed100402d..6cfe8d9f806 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -182,7 +182,8 @@ bool AndroidDeployQtStep::init() return false; } - if (!selectedAbis.isEmpty() && !dev->canSupportAbis(selectedAbis)) { + const bool abiListNotEmpty = !selectedAbis.isEmpty() && !dev->supportedAbis().isEmpty(); + if (abiListNotEmpty && !dev->canSupportAbis(selectedAbis)) { const QString error = tr("The deployment device \"%1\" does not support the " "architectures used by the kit.\n" "The kit supports \"%2\", but the device uses \"%3\".") diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 8609fc7a89f..d0b782df442 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -35,6 +35,8 @@ #include <coreplugin/icore.h> +#include <extensionsystem/iplugin.h> + #include <projectexplorer/devicesupport/devicemanager.h> #include <projectexplorer/devicesupport/idevicewidget.h> #include <projectexplorer/kitinformation.h> @@ -588,6 +590,8 @@ void AndroidDeviceManager::setupDevicesWatcher() m_adbDeviceWatcherProcess->setCommand(command); m_adbDeviceWatcherProcess->setEnvironment(AndroidConfigurations::toolsEnvironment(m_androidConfig)); m_adbDeviceWatcherProcess->start(); + qCDebug(androidDeviceLog).noquote() << "ADB device watcher started:" + << command.toUserOutput(); // Setup AVD filesystem watcher to listen for changes when an avd is created/deleted, // or started/stopped @@ -611,6 +615,28 @@ void AndroidDeviceManager::setupDevicesWatcher() updateAvdsList(); } +void AndroidDeviceManager::shutdownDevicesWatcher() +{ + m_avdsFutureWatcher.waitForFinished(); + m_removeAvdFutureWatcher.waitForFinished(); + + if (m_adbDeviceWatcherProcess) { + m_adbDeviceWatcherProcess->terminate(); + m_adbDeviceWatcherProcess->waitForFinished(); + m_adbDeviceWatcherProcess.reset(); + + // Despite terminate/waitForFinished, the process may still + // be around and remain if Qt Creator finishes too early. + QTimer::singleShot(1000, this, [this] { emit devicesWatcherShutdownFinished(); }); + } +} + +ExtensionSystem::IPlugin::ShutdownFlag AndroidDeviceManager::devicesShutdownFlag() const +{ + return m_adbDeviceWatcherProcess ? ExtensionSystem::IPlugin::AsynchronousShutdown + : ExtensionSystem::IPlugin::SynchronousShutdown; +} + void AndroidDeviceManager::HandleAvdsListChange() { DeviceManager *const devMgr = DeviceManager::instance(); @@ -764,16 +790,6 @@ AndroidDeviceManager::AndroidDeviceManager(QObject *parent) m_androidConfig(AndroidConfigurations::currentConfig()), m_avdManager(m_androidConfig) { - connect(qApp, &QCoreApplication::aboutToQuit, this, [this]() { - if (m_adbDeviceWatcherProcess) { - m_adbDeviceWatcherProcess->terminate(); - m_adbDeviceWatcherProcess->waitForFinished(); - m_adbDeviceWatcherProcess.reset(); - } - m_avdsFutureWatcher.waitForFinished(); - m_removeAvdFutureWatcher.waitForFinished(); - }); - connect(&m_removeAvdFutureWatcher, &QFutureWatcherBase::finished, this, &AndroidDeviceManager::handleAvdRemoved); } diff --git a/src/plugins/android/androiddevice.h b/src/plugins/android/androiddevice.h index d10663e1590..574e2756f1a 100644 --- a/src/plugins/android/androiddevice.h +++ b/src/plugins/android/androiddevice.h @@ -30,6 +30,8 @@ #include "androidconfigurations.h" #include "androiddeviceinfo.h" +#include <extensionsystem/iplugin.h> + #include <projectexplorer/devicesupport/idevice.h> #include <projectexplorer/devicesupport/idevicefactory.h> @@ -106,9 +108,13 @@ private: class AndroidDeviceManager : public QObject { + Q_OBJECT + public: static AndroidDeviceManager *instance(); void setupDevicesWatcher(); + void shutdownDevicesWatcher(); + ExtensionSystem::IPlugin::ShutdownFlag devicesShutdownFlag() const; void updateAvdsList(); IDevice::DeviceState getDeviceState(const QString &serial, IDevice::MachineType type) const; void updateDeviceState(const ProjectExplorer::IDevice::ConstPtr &device); @@ -120,6 +126,9 @@ public: QString getRunningAvdsSerialNumber(const QString &name) const; +signals: + void devicesWatcherShutdownFinished(); + private: AndroidDeviceManager(QObject *parent = nullptr); void HandleDevicesListChange(const QString &serialNumber); diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp index 3207b0c38a4..bda2f80587e 100644 --- a/src/plugins/android/androidplugin.cpp +++ b/src/plugins/android/androidplugin.cpp @@ -160,6 +160,19 @@ bool AndroidPlugin::initialize(const QStringList &arguments, QString *errorMessa return true; } +AndroidPlugin::ShutdownFlag AndroidPlugin::aboutToShutdown() +{ + AndroidDeviceManager *dm = AndroidDeviceManager::instance(); + const IPlugin::ShutdownFlag sf = dm->devicesShutdownFlag(); + + if (sf == AsynchronousShutdown) + connect(dm, &AndroidDeviceManager::devicesWatcherShutdownFinished, + this, &ExtensionSystem::IPlugin::asynchronousShutdownFinished); + + dm->shutdownDevicesWatcher(); + return sf; +} + void AndroidPlugin::kitsRestored() { const bool qtForAndroidInstalled diff --git a/src/plugins/android/androidplugin.h b/src/plugins/android/androidplugin.h index d4ad726cf05..3d46ca08674 100644 --- a/src/plugins/android/androidplugin.h +++ b/src/plugins/android/androidplugin.h @@ -44,6 +44,9 @@ class AndroidPlugin final : public ExtensionSystem::IPlugin class AndroidPluginPrivate *d = nullptr; +public: + ShutdownFlag aboutToShutdown() final; + #ifdef WITH_TESTS private slots: void testAndroidSdkManagerProgressParser_data(); diff --git a/src/plugins/coreplugin/locator/directoryfilter.cpp b/src/plugins/coreplugin/locator/directoryfilter.cpp index b5e69451667..cb010653afb 100644 --- a/src/plugins/coreplugin/locator/directoryfilter.cpp +++ b/src/plugins/coreplugin/locator/directoryfilter.cpp @@ -141,10 +141,10 @@ void DirectoryFilter::restoreState(const QByteArray &state) setIncludedByDefault(defaultFilter); locker.unlock(); - updateFileIterator(); } else { ILocatorFilter::restoreState(state); } + updateFileIterator(); } bool DirectoryFilter::openConfigDialog(QWidget *parent, bool &needsRefresh) diff --git a/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp b/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp index fd17d9b5bc3..00987711c56 100644 --- a/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp +++ b/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp @@ -51,6 +51,11 @@ ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &i // -> InstanceList // Pass // -> Effect + // Particle3D + // -> ParticleEmitter3D + // ParticleAbstractShape3D + // -> ParticleEmitter3D + // -> Attractor3D const TypeName textureType = "QtQuick3D.Texture"; if (insertInfo.isSubclassOf(textureType)) { @@ -92,6 +97,13 @@ ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &i } else if (insertInfo.isSubclassOf("QtQuick3D.Pass")) { if (parentInfo.isSubclassOf("QtQuick3D.Effect")) propertyList.append("passes"); + } else if (insertInfo.isSubclassOf("QtQuick3D.Particles3D.Particle3D")) { + if (parentInfo.isSubclassOf("QtQuick3D.Particles3D.ParticleEmitter3D")) + propertyList.append("particle"); + } else if (insertInfo.isSubclassOf("QQuick3DParticleAbstractShape")) { + if (parentInfo.isSubclassOf("QtQuick3D.Particles3D.ParticleEmitter3D") + || parentInfo.isSubclassOf("QtQuick3D.Particles3D.Attractor3D")) + propertyList.append("shape"); } } diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp index 1d3e2c13ddf..8909c471e0e 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp @@ -175,9 +175,11 @@ class CollectionTask : protected Visitor { public: CollectionTask(QFutureInterface<SemanticHighlighter::Use> &futureInterface, - const QmlJSTools::SemanticInfo &semanticInfo) + const QmlJSTools::SemanticInfo &semanticInfo, + const TextEditor::FontSettings &fontSettings) : m_futureInterface(futureInterface) , m_semanticInfo(semanticInfo) + , m_fontSettings(fontSettings) , m_scopeChain(semanticInfo.scopeChain()) , m_scopeBuilder(&m_scopeChain) , m_lineOfLastUse(0) @@ -408,13 +410,11 @@ protected: length = end-begin; } - const TextEditor::FontSettings &fontSettings = TextEditor::TextEditorSettings::fontSettings(); - QTextCharFormat format; if (d.isWarning()) - format = fontSettings.toTextCharFormat(TextEditor::C_WARNING); + format = m_fontSettings.toTextCharFormat(TextEditor::C_WARNING); else - format = fontSettings.toTextCharFormat(TextEditor::C_ERROR); + format = m_fontSettings.toTextCharFormat(TextEditor::C_ERROR); format.setToolTip(d.message); @@ -445,17 +445,15 @@ protected: length = end-begin; } - const TextEditor::FontSettings &fontSettings = TextEditor::TextEditorSettings::fontSettings(); - QTextCharFormat format; if (d.severity == Severity::Warning || d.severity == Severity::MaybeWarning || d.severity == Severity::ReadingTypeInfoWarning) { - format = fontSettings.toTextCharFormat(TextEditor::C_WARNING); + format = m_fontSettings.toTextCharFormat(TextEditor::C_WARNING); } else if (d.severity == Severity::Error || d.severity == Severity::MaybeError) { - format = fontSettings.toTextCharFormat(TextEditor::C_ERROR); + format = m_fontSettings.toTextCharFormat(TextEditor::C_ERROR); } else if (d.severity == Severity::Hint) { - format = fontSettings.toTextCharFormat(TextEditor::C_WARNING); + format = m_fontSettings.toTextCharFormat(TextEditor::C_WARNING); format.setUnderlineColor(Qt::darkGreen); } @@ -534,6 +532,7 @@ private: QFutureInterface<SemanticHighlighter::Use> &m_futureInterface; const QmlJSTools::SemanticInfo &m_semanticInfo; + const TextEditor::FontSettings &m_fontSettings; ScopeChain m_scopeChain; ScopeBuilder m_scopeBuilder; QStringList m_stateNames; @@ -565,8 +564,11 @@ void SemanticHighlighter::rerun(const QmlJSTools::SemanticInfo &semanticInfo) m_watcher.cancel(); m_startRevision = m_document->document()->revision(); - auto future = Utils::runAsync(QThread::LowestPriority, &SemanticHighlighter::run, - this, semanticInfo); + auto future = Utils::runAsync(QThread::LowestPriority, + &SemanticHighlighter::run, + this, + semanticInfo, + TextEditor::TextEditorSettings::fontSettings()); m_watcher.setFuture(future); m_futureSynchronizer.addFuture(future); } @@ -600,9 +602,11 @@ void SemanticHighlighter::finished() m_document->syntaxHighlighter(), m_watcher.future()); } -void SemanticHighlighter::run(QFutureInterface<SemanticHighlighter::Use> &futureInterface, const QmlJSTools::SemanticInfo &semanticInfo) +void SemanticHighlighter::run(QFutureInterface<SemanticHighlighter::Use> &futureInterface, + const QmlJSTools::SemanticInfo &semanticInfo, + const TextEditor::FontSettings &fontSettings) { - CollectionTask task(futureInterface, semanticInfo); + CollectionTask task(futureInterface, semanticInfo, fontSettings); reportMessagesInfo(task.diagnosticRanges(), task.extraFormats()); task.run(); } diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.h b/src/plugins/qmljseditor/qmljssemantichighlighter.h index f36b9b5518a..c47b2afdb88 100644 --- a/src/plugins/qmljseditor/qmljssemantichighlighter.h +++ b/src/plugins/qmljseditor/qmljssemantichighlighter.h @@ -82,7 +82,9 @@ public: private: void applyResults(int from, int to); void finished(); - void run(QFutureInterface<Use> &futureInterface, const QmlJSTools::SemanticInfo &semanticInfo); + void run(QFutureInterface<Use> &futureInterface, + const QmlJSTools::SemanticInfo &semanticInfo, + const TextEditor::FontSettings &fontSettings); QFutureWatcher<Use> m_watcher; QmlJSEditorDocument *m_document; diff --git a/tests/system/suite_general/tst_cmake_speedcrunch/test.py b/tests/system/suite_general/tst_cmake_speedcrunch/test.py index e6f07b22c5a..9a9e88d3c95 100644 --- a/tests/system/suite_general/tst_cmake_speedcrunch/test.py +++ b/tests/system/suite_general/tst_cmake_speedcrunch/test.py @@ -65,7 +65,7 @@ def main(): compareProjectTree(naviTreeView % "speedcrunch( \[\S+\])?", treeFile) # Invoke a rebuild of the application - invokeMenuItem("Build", "Rebuild All Projects") + selectFromLocator("t rebuild", "Rebuild (Rebuild All Projects)") # Wait for, and test if the build succeeded waitForCompile(300000) diff --git a/tests/system/suite_general/tst_cmake_speedcrunch/testdata/projecttree_speedcrunch.tsv b/tests/system/suite_general/tst_cmake_speedcrunch/testdata/projecttree_speedcrunch.tsv index 8236d245f58..2fd1d59bb2b 100644 --- a/tests/system/suite_general/tst_cmake_speedcrunch/testdata/projecttree_speedcrunch.tsv +++ b/tests/system/suite_general/tst_cmake_speedcrunch/testdata/projecttree_speedcrunch.tsv @@ -1,33 +1,41 @@ "text" "nestinglevel" "CMakeLists.txt" "0" "speedcrunch" "0" +"Header Files" "1" +"genericdock.h" "2" "Source Files" "1" "core" "2" "book.cpp" "3" "constants.cpp" "3" "evaluator.cpp" "3" "functions.cpp" "3" +"manualserver.cpp" "3" "numberformatter.cpp" "3" +"opcode.cpp" "3" +"pageserver.cpp" "3" +"session.cpp" "3" +"sessionhistory.cpp" "3" "settings.cpp" "3" +"userfunction.cpp" "3" +"variable.cpp" "3" "gui" "2" "aboutbox.cpp" "3" -"application.cpp" "3" -"autohidelabel.cpp" "3" +"bitfieldwidget.cpp" "3" "bookdock.cpp" "3" -"constantsdock.cpp" "3" "constantswidget.cpp" "3" "editor.cpp" "3" -"functionsdock.cpp" "3" "functionswidget.cpp" "3" -"historydock.cpp" "3" "historywidget.cpp" "3" +"keypad.cpp" "3" "mainwindow.cpp" "3" +"manualwindow.cpp" "3" "resultdisplay.cpp" "3" "syntaxhighlighter.cpp" "3" -"tipwidget.cpp" "3" +"userfunctionlistwidget.cpp" "3" "variablelistwidget.cpp" "3" -"variablesdock.cpp" "3" "math" "2" +"cmath.cpp" "3" +"cnumberparser.cpp" "3" "floatcommon.c" "3" "floatconst.c" "3" "floatconvert.c" "3" @@ -35,6 +43,7 @@ "floatexp.c" "3" "floatgamma.c" "3" "floathmath.c" "3" +"floatincgamma.c" "3" "floatio.c" "3" "floatipower.c" "3" "floatlog.c" "3" @@ -46,18 +55,140 @@ "floattrig.c" "3" "hmath.cpp" "3" "number.c" "3" -"resources" "2" -"speedcrunch.rc" "3" -"thirdparty" "2" -"binreloc.c" "3" +"quantity.cpp" "3" +"rational.cpp" "3" +"units.cpp" "3" "main.cpp" "2" +"/" "2" +"color-schemes" "3" +"Solarized Dark.json" "4" +"Solarized Light.json" "4" +"Standard.json" "4" +"Sublime.json" "4" +"Terminal.json" "4" +"Tomorrow Night Blue.json" "4" +"Tomorrow Night Bright.json" "4" +"Tomorrow Night Eighties.json" "4" +"Tomorrow Night.json" "4" +"Tomorrow.json" "4" +"locale" "3" +"ar.qm" "4" +"ca_ES.qm" "4" +"cs_CZ.qm" "4" +"da.qm" "4" +"de_DE.qm" "4" +"el.qm" "4" +"en_GB.qm" "4" +"en_US.qm" "4" +"es_AR.qm" "4" +"es_ES.qm" "4" +"et_EE.qm" "4" +"eu_ES.qm" "4" +"fi_FI.qm" "4" +"fr_FR.qm" "4" +"he_IL.qm" "4" +"hu_HU.qm" "4" +"id_ID.qm" "4" +"it_IT.qm" "4" +"ja_JP.qm" "4" +"ko_KR.qm" "4" +"lt.qm" "4" +"lv_LV.qm" "4" +"nb_NO.qm" "4" +"nl_NL.qm" "4" +"pl_PL.qm" "4" +"pt_BR.qm" "4" +"pt_PT.qm" "4" +"ro_RO.qm" "4" +"ru_RU.qm" "4" +"sk.qm" "4" +"sv_SE.qm" "4" +"tr_TR.qm" "4" +"uz_Latn_UZ.qm" "4" +"vi.qm" "4" +"zh_CN.qm" "4" +"speedcrunch.png" "3" +"<Other Locations>" "1" +"manual.qrc" "3" +"/manual" "4" +"manual-de_DE.qch" "5" +"manual-de_DE.qhc" "5" +"manual-en_US.qch" "5" +"manual-en_US.qhc" "5" +"manual-es_ES.qch" "5" +"manual-es_ES.qhc" "5" +"manual-fr_FR.qch" "5" +"manual-fr_FR.qhc" "5" +"testcmath" "0" +"Source Files" "1" +"math" "2" +"cmath.cpp" "3" +"cnumberparser.cpp" "3" +"floatcommon.c" "3" +"floatconst.c" "3" +"floatconvert.c" "3" +"floaterf.c" "3" +"floatexp.c" "3" +"floatgamma.c" "3" +"floathmath.c" "3" +"floatio.c" "3" +"floatipower.c" "3" +"floatlog.c" "3" +"floatlogic.c" "3" +"floatlong.c" "3" +"floatnum.c" "3" +"floatpower.c" "3" +"floatseries.c" "3" +"floattrig.c" "3" +"hmath.cpp" "3" +"number.c" "3" +"quantity.cpp" "3" +"rational.cpp" "3" +"units.cpp" "3" +"tests" "2" +"testcmath.cpp" "3" +"testdmath" "0" +"Source Files" "1" +"math" "2" +"cmath.cpp" "3" +"cnumberparser.cpp" "3" +"floatcommon.c" "3" +"floatconst.c" "3" +"floatconvert.c" "3" +"floaterf.c" "3" +"floatexp.c" "3" +"floatgamma.c" "3" +"floathmath.c" "3" +"floatio.c" "3" +"floatipower.c" "3" +"floatlog.c" "3" +"floatlogic.c" "3" +"floatlong.c" "3" +"floatnum.c" "3" +"floatpower.c" "3" +"floatseries.c" "3" +"floattrig.c" "3" +"hmath.cpp" "3" +"number.c" "3" +"quantity.cpp" "3" +"rational.cpp" "3" +"units.cpp" "3" +"tests" "2" +"testdmath.cpp" "3" "testevaluator" "0" "Source Files" "1" "core" "2" "evaluator.cpp" "3" "functions.cpp" "3" +"numberformatter.cpp" "3" +"session.cpp" "3" +"sessionhistory.cpp" "3" "settings.cpp" "3" +"userfunction.cpp" "3" +"variable.cpp" "3" "math" "2" +"cmath.cpp" "3" +"cnumberparser.cpp" "3" "floatcommon.c" "3" "floatconst.c" "3" "floatconvert.c" "3" @@ -76,6 +207,9 @@ "floattrig.c" "3" "hmath.cpp" "3" "number.c" "3" +"quantity.cpp" "3" +"rational.cpp" "3" +"units.cpp" "3" "tests" "2" "testevaluator.cpp" "3" "testfloatnum" "0" @@ -103,6 +237,8 @@ "testhmath" "0" "Source Files" "1" "math" "2" +"cmath.cpp" "3" +"cnumberparser.cpp" "3" "floatcommon.c" "3" "floatconst.c" "3" "floatconvert.c" "3" @@ -121,58 +257,45 @@ "floattrig.c" "3" "hmath.cpp" "3" "number.c" "3" +"quantity.cpp" "3" +"rational.cpp" "3" +"units.cpp" "3" "tests" "2" "testhmath.cpp" "3" -"<Headers>" "0" -"core" "1" -"book.h" "2" -"constants.h" "2" -"errors.h" "2" -"evaluator.h" "2" -"functions.h" "2" -"numberformatter.h" "2" -"settings.h" "2" -"gui" "1" -"aboutbox.h" "2" -"application.h" "2" -"autohidelabel.h" "2" -"bookdock.h" "2" -"constantsdock.h" "2" -"constantswidget.h" "2" -"editor.h" "2" -"functionsdock.h" "2" -"functionswidget.h" "2" -"historydock.h" "2" -"historywidget.h" "2" -"mainwindow.h" "2" -"resultdisplay.h" "2" -"syntaxhighlighter.h" "2" -"tipwidget.h" "2" -"variablelistwidget.h" "2" -"variablesdock.h" "2" -"math" "1" -"floatcommon.h" "2" -"floatconfig.h" "2" -"floatconst.h" "2" -"floatconvert.h" "2" -"floaterf.h" "2" -"floatexp.h" "2" -"floatgamma.h" "2" -"floathmath.h" "2" -"floatincgamma.h" "2" -"floatio.h" "2" -"floatipower.h" "2" -"floatlog.h" "2" -"floatlogic.h" "2" -"floatlong.h" "2" -"floatnum.h" "2" -"floatpower.h" "2" -"floatseries.h" "2" -"floattrig.h" "2" -"hmath.h" "2" -"number.h" "2" -"thirdparty" "1" -"binreloc.h" "2" +"testser" "0" +"Source Files" "1" +"core" "2" +"numberformatter.cpp" "3" +"settings.cpp" "3" +"math" "2" +"cmath.cpp" "3" +"cnumberparser.cpp" "3" +"floatcommon.c" "3" +"floatconst.c" "3" +"floatconvert.c" "3" +"floaterf.c" "3" +"floatexp.c" "3" +"floatgamma.c" "3" +"floathmath.c" "3" +"floatio.c" "3" +"floatipower.c" "3" +"floatlog.c" "3" +"floatlogic.c" "3" +"floatlong.c" "3" +"floatnum.c" "3" +"floatpower.c" "3" +"floatseries.c" "3" +"floattrig.c" "3" +"hmath.cpp" "3" +"number.c" "3" +"quantity.cpp" "3" +"rational.cpp" "3" +"units.cpp" "3" +"tests" "2" +"testser.cpp" "3" +"src" "1" +"CMakeLists.txt" "2" "CMake Modules" "0" "cmake_uninstall.cmake.in" "1" "SourceFiles.cmake" "1" +"<Other Locations>" "1" |