From 8d9c0d4eef7c1874337a92f7b8e76775def6c2d3 Mon Sep 17 00:00:00 2001 From: Joris Goosen Date: Fri, 25 Oct 2024 14:54:46 +0200 Subject: [PATCH] add a button for libPaths and make the preferences a bit less ugly --- .../JASP/Widgets/FileMenu/PrefsAdvanced.qml | 194 ++++++++++-------- .../JASP/Widgets/FileMenu/PrefsTextInput.qml | 14 ++ Desktop/gui/preferencesmodel.cpp.in | 23 ++- Desktop/gui/preferencesmodel.h | 1 + Desktop/utilities/settings.cpp | 2 +- 5 files changed, 146 insertions(+), 88 deletions(-) diff --git a/Desktop/components/JASP/Widgets/FileMenu/PrefsAdvanced.qml b/Desktop/components/JASP/Widgets/FileMenu/PrefsAdvanced.qml index 1ec7065c6f..ae7e61be6b 100644 --- a/Desktop/components/JASP/Widgets/FileMenu/PrefsAdvanced.qml +++ b/Desktop/components/JASP/Widgets/FileMenu/PrefsAdvanced.qml @@ -38,56 +38,7 @@ ScrollView onCheckedChanged: preferencesModel.modulesRemember = checked toolTip: qsTr("Continue where you left of the next time JASP starts.\nEnabling this option makes JASP remember which Modules you've enabled.") - KeyNavigation.tab: developerMode - } - - CheckBox - { - id: developerMode - label: qsTr("Developer mode (Beta version)") - checked: preferencesModel.developerMode - onCheckedChanged: preferencesModel.developerMode = checked - toolTip: qsTr("To use JASP Modules enable this option.") - - KeyNavigation.tab: browseDeveloperFolderButton - } - - Item - { - id: editDeveloperFolder - enabled: preferencesModel.developerMode - width: parent.width - height: browseDeveloperFolderButton.height - - RectangularButton - { - id: browseDeveloperFolderButton - text: qsTr("Select developer folder") - onClicked: preferencesModel.browseDeveloperFolder() - anchors.left: parent.left - anchors.leftMargin: jaspTheme.subOptionOffset - toolTip: qsTr("Browse to your JASP Module folder.") - - KeyNavigation.tab: developerFolderText.textInput - activeFocusOnTab: true - } - - PrefsTextInput - { - id: developerFolderText - - text: preferencesModel.developerFolder - onEditingFinished: preferencesModel.developerFolder = text - nextEl: cranRepoUrl.textInput - - height: browseDeveloperFolderButton.height - anchors - { - left: browseDeveloperFolderButton.right - right: parent.right - top: parent.top - } - } + KeyNavigation.tab: cranRepoUrl } Item @@ -108,27 +59,28 @@ ScrollView margins: jaspTheme.generalAnchorMargin } } - + PrefsTextInput { id: cranRepoUrl - + text: preferencesModel.cranRepoURL onEditingFinished: preferencesModel.cranRepoURL = text nextEl: githubPatDefault - + height: browseDeveloperFolderButton.height anchors { left: cranRepoUrlLabel.right right: parent.right + margins: jaspTheme.generalAnchorMargin } KeyNavigation.tab: githubPatDefault } } - - + + CheckBox { id: githubPatDefault @@ -139,7 +91,7 @@ ScrollView KeyNavigation.tab: githubPatCustomToken } - + Item { id: githubPatCustomTokenItem @@ -159,16 +111,16 @@ ScrollView leftMargin: jaspTheme.subOptionOffset } } - + PrefsTextInput { id: githubPatCustomToken - + text: preferencesModel.githubPatCustom onEditingFinished: preferencesModel.githubPatCustom = text - nextEl: directLibpathDevModEnabled - + nextEl: developerMode + height: browseDeveloperFolderButton.height anchors { @@ -179,9 +131,20 @@ ScrollView textInput.echoMode: TextInput.Password - KeyNavigation.tab: directLibpathDevModEnabled + KeyNavigation.tab: developerMode } - } + } + + CheckBox + { + id: developerMode + label: qsTr("Developer mode") + checked: preferencesModel.developerMode + onCheckedChanged: preferencesModel.developerMode = checked + toolTip: qsTr("To use JASP Modules enable this option.") + + KeyNavigation.tab: generateMarkdown + } CheckBox { @@ -191,10 +154,30 @@ ScrollView checked: preferencesModel.generateMarkdown onCheckedChanged: preferencesModel.generateMarkdown = checked visible: preferencesModel.developerMode + enabled: preferencesModel.developerMode KeyNavigation.tab: cleanModulesFolder } + + RoundedButton + { + id: cleanModulesFolder + text: qsTr("Clear installed modules and packages") + toolTip: qsTr("This will erase the 'renv' and 'Modules' folders in the appdata.") + onClicked: mainWindow.clearModulesFoldersUser(); + + KeyNavigation.tab: directLibpathDevModEnabled + activeFocusOnTab: true + } + } + + PrefsGroupRect + { + id: editDeveloperFolder + title: qsTr("Development module") + visible: preferencesModel.developerMode + enabled: preferencesModel.developerMode CheckBox { @@ -202,24 +185,70 @@ ScrollView label: qsTr("Enable direct libpath mode") checked: preferencesModel.directLibpathEnabled onCheckedChanged: preferencesModel.directLibpathEnabled = checked - toolTip: qsTr("To use JASP Modules enable this option.") + toolTip: qsTr("Load modules from a binary in an R-library instead of installing it from sources.") visible: preferencesModel.developerMode - KeyNavigation.tab: directLibpathFolder + KeyNavigation.tab: editDeveloperFolder + } + + + Item + { + width: parent.width + height: browseDeveloperFolderButton.height + enabled: preferencesModel.developerMode && !preferencesModel.directLibpathEnabled + visible: preferencesModel.developerMode && !preferencesModel.directLibpathEnabled + + + RectangularButton + { + id: browseDeveloperFolderButton + text: qsTr("Source folder:") + onClicked: preferencesModel.browseDeveloperFolder() + anchors.left: parent.left + anchors.leftMargin: jaspTheme.subOptionOffset + toolTip: qsTr("Browse to your JASP Module folder.") + + KeyNavigation.tab: developerFolderText.textInput + activeFocusOnTab: true + + } + + PrefsTextInput + { + id: developerFolderText + + text: preferencesModel.developerFolder + onEditingFinished: preferencesModel.developerFolder = text + nextEl: directLibPathLabel + + height: browseDeveloperFolderButton.height + anchors + { + left: browseDeveloperFolderButton.right + right: parent.right + margins: jaspTheme.generalAnchorMargin + } + } } Item { id: directLibpath enabled: preferencesModel.directLibpathEnabled + visible: preferencesModel.developerMode && preferencesModel.directLibpathEnabled width: parent.width height: cranRepoUrl.height - visible: preferencesModel.developerMode && preferencesModel.directLibpathEnabled - Label + RectangularButton { - id: directLibPathLabel - text: qsTr("DevModule libpath:") + id: directLibPathLabel + text: qsTr("Libpath:") + width: Math.max(directDevModName.implicitWidth, directLibPathLabel.implicitWidth) + onClicked: preferencesModel.browseDeveloperLibPathFolder() + activeFocusOnTab: true + KeyNavigation.tab: directLibpathFolder.textInput + KeyNavigation.backtab: directLibpathDevModEnabled anchors { @@ -227,6 +256,8 @@ ScrollView verticalCenter: parent.verticalCenter leftMargin: jaspTheme.subOptionOffset } + + } PrefsTextInput @@ -247,21 +278,24 @@ ScrollView } KeyNavigation.tab: moduleName + + toolTip: qsTr("Choose the R library where you installed the development module") } } Item { id: directDevMod - enabled: preferencesModel.directLibpathEnabled + enabled: preferencesModel.developerMode &&preferencesModel.directLibpathEnabled + visible: preferencesModel.developerMode && preferencesModel.directLibpathEnabled width: parent.width height: cranRepoUrl.height - visible: preferencesModel.developerMode && preferencesModel.directLibpathEnabled Label { id: directDevModName - text: qsTr("Developer module name:") + text: qsTr("Module name:") + width: Math.max(directDevModName.implicitWidth, directLibPathLabel.implicitWidth) anchors { @@ -278,7 +312,7 @@ ScrollView text: preferencesModel.directDevModName onEditingFinished: preferencesModel.directDevModName = text - nextEl: cleanModulesFolder + nextEl: logToFile height: browseDeveloperFolderButton.height anchors @@ -288,20 +322,10 @@ ScrollView margins: jaspTheme.generalAnchorMargin } - KeyNavigation.tab: cleanModulesFolder + KeyNavigation.tab: logToFile + toolTip: qsTr("Enter the (package)name of the development module you want to load") } } - - RoundedButton - { - id: cleanModulesFolder - text: qsTr("Clear installed modules and packages") - toolTip: qsTr("This will erase the 'renv' and 'Modules' folders in the appdata.") - onClicked: mainWindow.clearModulesFoldersUser(); - - KeyNavigation.tab: logToFile - activeFocusOnTab: true - } } PrefsGroupRect @@ -339,7 +363,7 @@ ScrollView defaultValue: 10 stepSize: 1 - KeyNavigation.tab: showLogs + KeyNavigation.tab: showLogs text: qsTr("Max logfiles to keep: ") anchors diff --git a/Desktop/components/JASP/Widgets/FileMenu/PrefsTextInput.qml b/Desktop/components/JASP/Widgets/FileMenu/PrefsTextInput.qml index 3d1b395513..89a6bbbad1 100644 --- a/Desktop/components/JASP/Widgets/FileMenu/PrefsTextInput.qml +++ b/Desktop/components/JASP/Widgets/FileMenu/PrefsTextInput.qml @@ -4,6 +4,7 @@ import QtQuick.Controls 2.15 Rectangle { property alias text: textInput.text + property string toolTip: "" property alias textInput: textInput property var nextEl: null @@ -24,6 +25,19 @@ Rectangle onFocusChanged: if(focus) textInput.focus = true; activeFocusOnTab: true + ToolTip.visible: toolTip != "" && toolTipMouseArea.containsMouse + ToolTip.text: toolTip + ToolTip.timeout: 3000 + ToolTip.delay: 500 + + MouseArea + { + id: toolTipMouseArea + hoverEnabled: toolTip != "" + acceptedButtons: Qt.NoButton + anchors.fill: parent + } + TextInput { id: textInput diff --git a/Desktop/gui/preferencesmodel.cpp.in b/Desktop/gui/preferencesmodel.cpp.in index c233a78c85..22ba5f1d8e 100644 --- a/Desktop/gui/preferencesmodel.cpp.in +++ b/Desktop/gui/preferencesmodel.cpp.in @@ -85,10 +85,29 @@ void PreferencesModel::browseDeveloperFolder() QString folder = MessageForwarder::browseOpenFolder(tr("Select a folder..."), defaultfolder); if (!folder.isEmpty()) - setDeveloperFolder(folder); - + setDeveloperFolder(folder); } + +void PreferencesModel::browseDeveloperLibPathFolder() +{ + QString defaultfolder = directLibpathFolder(); + if (defaultfolder.isEmpty()) + { +#ifdef _WIN32 + defaultfolder = "c:\\"; +#else + defaultfolder = "~"; +#endif + } + + QString folder = MessageForwarder::browseOpenFolder(tr("Select a R-library..."), defaultfolder); + + if (!folder.isEmpty()) + setDirectLibpathFolder(folder); +} + + #define GET_PREF_FUNC(TYPE, NAME, SETTING, TO_FUNC) TYPE PreferencesModel::NAME() const { return Settings::value(SETTING).TO_FUNC; } #define GET_PREF_FUNC_BOOL(NAME, SETTING) GET_PREF_FUNC(bool, NAME, SETTING, toBool()) #define GET_PREF_FUNC_INT(NAME, SETTING) GET_PREF_FUNC(int, NAME, SETTING, toInt()) diff --git a/Desktop/gui/preferencesmodel.h b/Desktop/gui/preferencesmodel.h index e85fb4e51b..eefdb4cfe0 100644 --- a/Desktop/gui/preferencesmodel.h +++ b/Desktop/gui/preferencesmodel.h @@ -177,6 +177,7 @@ public slots: void setUseDefaultEditor( bool useDefaultEditor); void browseSpreadsheetEditor(); void browseDeveloperFolder(); + void browseDeveloperLibPathFolder(); void removeEmptyValue( QString value); void addEmptyValue( QString value); void resetEmptyValues(); diff --git a/Desktop/utilities/settings.cpp b/Desktop/utilities/settings.cpp index 6ae6d33e2c..301c4a4b56 100644 --- a/Desktop/utilities/settings.cpp +++ b/Desktop/utilities/settings.cpp @@ -96,7 +96,7 @@ const Settings::Setting Settings::Values[] = { {"maxScaleLevels", 100 }, {"pdfLandscape", false }, {"pdfPageSize", int(pdfPageSize::A4) }, - {"directLibpathEnabled", false }, + {"directLibpathEnabled", true }, {"directLibpathFolder", "" }, {"directDevModName", "" }