diff options
| author | Nippy <nippy@rp1.hu> | 2026-05-08 19:50:49 +0200 |
|---|---|---|
| committer | Nippy <nippy@rp1.hu> | 2026-05-08 19:50:49 +0200 |
| commit | 3462bcc46ecf74f576ea4397f16492c16bd75b10 (patch) | |
| tree | c5ab7aef4498647e057bda8d49c11e5f9dda74c9 /raveos-hyprland-theme/theme-data/dms/Modules/Notepad/NotepadSettings.qml | |
| parent | 56616f693b4f263cbf0d47da43b67424efa6022d (diff) | |
| download | RaveOS-PKGBUILD-3462bcc46ecf74f576ea4397f16492c16bd75b10.tar.gz RaveOS-PKGBUILD-3462bcc46ecf74f576ea4397f16492c16bd75b10.zip | |
raveos update
Diffstat (limited to 'raveos-hyprland-theme/theme-data/dms/Modules/Notepad/NotepadSettings.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/dms/Modules/Notepad/NotepadSettings.qml | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/raveos-hyprland-theme/theme-data/dms/Modules/Notepad/NotepadSettings.qml b/raveos-hyprland-theme/theme-data/dms/Modules/Notepad/NotepadSettings.qml new file mode 100644 index 0000000..9265ddf --- /dev/null +++ b/raveos-hyprland-theme/theme-data/dms/Modules/Notepad/NotepadSettings.qml @@ -0,0 +1,367 @@ +pragma ComponentBehavior: Bound +import QtQuick +import qs.Common +import qs.Widgets + +Item { + id: root + + property bool isVisible: false + property var cachedFontFamilies: [] + property var cachedMonoFamilies: [] + property bool fontsEnumerated: false + + signal settingsRequested + signal findRequested + + function enumerateFonts() { + var fonts = ["Default"]; + var availableFonts = Qt.fontFamilies(); + var rootFamilies = []; + var seenFamilies = new Set(); + for (var i = 0; i < availableFonts.length; i++) { + var fontName = availableFonts[i]; + if (fontName.startsWith(".")) + continue; + if (fontName === Theme.defaultFontFamily) + continue; + var rootName = fontName.replace(/ (Thin|Extra Light|Light|Regular|Medium|Semi Bold|Demi Bold|Bold|Extra Bold|Black|Heavy)$/i, "").replace(/ (Italic|Oblique|Condensed|Extended|Narrow|Wide)$/i, "").replace(/ (UI|Display|Text|Mono|Sans|Serif)$/i, function (match, suffix) { + return match; + }).trim(); + if (!seenFamilies.has(rootName) && rootName !== "") { + seenFamilies.add(rootName); + rootFamilies.push(rootName); + } + } + cachedFontFamilies = fonts.concat(rootFamilies.sort()); + var monoFonts = ["Default"]; + var monoFamilies = []; + var seenMonoFamilies = new Set(); + for (var j = 0; j < availableFonts.length; j++) { + var fontName2 = availableFonts[j]; + if (fontName2.startsWith(".")) + continue; + if (fontName2 === SettingsData.defaultMonoFontFamily) + continue; + var lowerName = fontName2.toLowerCase(); + if (lowerName.includes("mono") || lowerName.includes("code") || lowerName.includes("console") || lowerName.includes("terminal") || lowerName.includes("courier") || lowerName.includes("dejavu sans mono") || lowerName.includes("jetbrains") || lowerName.includes("fira") || lowerName.includes("hack") || lowerName.includes("source code") || lowerName.includes("ubuntu mono") || lowerName.includes("cascadia")) { + var rootName2 = fontName2.replace(/ (Thin|Extra Light|Light|Regular|Medium|Semi Bold|Demi Bold|Bold|Extra Bold|Black|Heavy)$/i, "").replace(/ (Italic|Oblique|Condensed|Extended|Narrow|Wide)$/i, "").trim(); + if (!seenMonoFamilies.has(rootName2) && rootName2 !== "") { + seenMonoFamilies.add(rootName2); + monoFamilies.push(rootName2); + } + } + } + cachedMonoFamilies = monoFonts.concat(monoFamilies.sort()); + fontsEnumerated = true; + } + + Component.onCompleted: { + if (!fontsEnumerated) { + enumerateFonts(); + } + } + + MouseArea { + anchors.fill: parent + visible: root.isVisible + onClicked: root.settingsRequested() + z: 50 + } + + Rectangle { + id: settingsMenu + visible: root.isVisible + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + width: 360 + height: settingsColumn.implicitHeight + Theme.spacingXL * 2 + radius: Theme.cornerRadius + color: Qt.rgba(Theme.surfaceContainer.r, Theme.surfaceContainer.g, Theme.surfaceContainer.b, Theme.notepadTransparency) + border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.08) + border.width: 1 + z: 100 + + Rectangle { + anchors.fill: parent + anchors.topMargin: 4 + anchors.leftMargin: 2 + anchors.rightMargin: -2 + anchors.bottomMargin: -4 + radius: parent.radius + color: Qt.rgba(0, 0, 0, 0.15) + z: parent.z - 1 + } + + Column { + id: settingsColumn + width: parent.width - Theme.spacingXL * 2 + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: Theme.spacingXL + spacing: Theme.spacingS + + Rectangle { + width: parent.width + height: 36 + color: "transparent" + + StyledText { + anchors.left: parent.left + anchors.leftMargin: -Theme.spacingXS + anchors.verticalCenter: parent.verticalCenter + text: I18n.tr("Notepad Font Settings") + font.pixelSize: Theme.fontSizeMedium + font.weight: Font.Medium + color: Theme.surfaceText + } + } + + Rectangle { + width: parent.width + height: 1 + color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) + } + + DankToggle { + anchors.left: parent.left + anchors.leftMargin: -Theme.spacingM + width: parent.width + Theme.spacingM + text: I18n.tr("Use Monospace Font") + description: "Toggle fonts" + checked: SettingsData.notepadUseMonospace + onToggled: checked => { + SettingsData.notepadUseMonospace = checked; + } + } + + DankToggle { + anchors.left: parent.left + anchors.leftMargin: -Theme.spacingM + width: parent.width + Theme.spacingM + text: I18n.tr("Show Line Numbers") + description: "Display line numbers in editor" + checked: SettingsData.notepadShowLineNumbers + onToggled: checked => { + SettingsData.notepadShowLineNumbers = checked; + } + } + + StyledRect { + width: parent.width + height: 60 + radius: Theme.cornerRadius + color: "transparent" + + StateLayer { + anchors.fill: parent + anchors.leftMargin: -Theme.spacingM + width: parent.width + Theme.spacingM + stateColor: Theme.primary + cornerRadius: parent.radius + onClicked: root.findRequested() + } + + Row { + anchors.left: parent.left + anchors.leftMargin: -Theme.spacingM + anchors.right: parent.right + anchors.rightMargin: Theme.spacingM + anchors.verticalCenter: parent.verticalCenter + spacing: Theme.spacingM + + DankIcon { + name: "search" + size: Theme.iconSize - 2 + color: Theme.primary + anchors.verticalCenter: parent.verticalCenter + } + + Column { + anchors.verticalCenter: parent.verticalCenter + spacing: Theme.spacingXS + + StyledText { + text: I18n.tr("Find in Text") + font.pixelSize: Theme.fontSizeMedium + font.weight: Font.Medium + color: Theme.surfaceText + } + + StyledText { + text: I18n.tr("Open search bar to find text") + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + } + } + } + } + + Rectangle { + width: parent.width + height: visible ? (fontDropdown.height + Theme.spacingS) : 0 + color: "transparent" + visible: !SettingsData.notepadUseMonospace + + DankDropdown { + id: fontDropdown + anchors.left: parent.left + anchors.leftMargin: -Theme.spacingM + width: parent.width + Theme.spacingM + text: I18n.tr("Font Family") + options: cachedFontFamilies + currentValue: { + if (!SettingsData.notepadFontFamily || SettingsData.notepadFontFamily === "") + return "Default (Global)"; + else + return SettingsData.notepadFontFamily; + } + enableFuzzySearch: true + onValueChanged: value => { + if (value && (value.startsWith("Default") || value === "Default (Global)")) { + SettingsData.notepadFontFamily = ""; + } else { + SettingsData.notepadFontFamily = value; + } + } + } + } + + Rectangle { + width: parent.width + height: fontSizeRow.height + Theme.spacingS + color: "transparent" + + Row { + id: fontSizeRow + width: parent.width + spacing: Theme.spacingS + + Column { + width: parent.width - fontSizeControls.width - Theme.spacingM + spacing: Theme.spacingXS + + StyledText { + text: I18n.tr("Font Size") + font.pixelSize: Theme.fontSizeSmall + font.weight: Font.Medium + color: Theme.surfaceText + } + + StyledText { + text: SettingsData.notepadFontSize + "px" + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceVariantText + width: parent.width + } + } + + Row { + id: fontSizeControls + spacing: Theme.spacingS + anchors.verticalCenter: parent.verticalCenter + + DankActionButton { + buttonSize: 32 + iconName: "remove" + iconSize: Theme.iconSizeSmall + enabled: SettingsData.notepadFontSize > 8 + backgroundColor: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.5) + iconColor: Theme.surfaceText + onClicked: { + var newSize = Math.max(8, SettingsData.notepadFontSize - 1); + SettingsData.notepadFontSize = newSize; + } + } + + Rectangle { + width: 60 + height: 32 + radius: Theme.cornerRadius + color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.3) + border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.2) + border.width: 1 + + StyledText { + anchors.centerIn: parent + text: SettingsData.notepadFontSize + "px" + font.pixelSize: Theme.fontSizeSmall + font.weight: Font.Medium + color: Theme.surfaceText + } + } + + DankActionButton { + buttonSize: 32 + iconName: "add" + iconSize: Theme.iconSizeSmall + enabled: SettingsData.notepadFontSize < 48 + backgroundColor: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.5) + iconColor: Theme.surfaceText + onClicked: { + var newSize = Math.min(48, SettingsData.notepadFontSize + 1); + SettingsData.notepadFontSize = newSize; + } + } + } + } + } + + Rectangle { + width: parent.width + height: transparencySliderColumn.height + Theme.spacingS + color: "transparent" + + Column { + id: transparencySliderColumn + width: parent.width + spacing: Theme.spacingS + + DankToggle { + anchors.left: parent.left + anchors.leftMargin: -Theme.spacingM + width: parent.width + Theme.spacingM + text: I18n.tr("Custom Transparency") + description: "Override global transparency for Notepad" + checked: SettingsData.notepadTransparencyOverride >= 0 + onToggled: checked => { + if (checked) { + SettingsData.notepadTransparencyOverride = SettingsData.notepadLastCustomTransparency; + } else { + SettingsData.notepadTransparencyOverride = -1; + } + } + } + + DankSlider { + anchors.left: parent.left + anchors.leftMargin: -Theme.spacingM + width: parent.width + Theme.spacingM + height: 24 + visible: SettingsData.notepadTransparencyOverride >= 0 + value: Math.round((SettingsData.notepadTransparencyOverride >= 0 ? SettingsData.notepadTransparencyOverride : SettingsData.popupTransparency) * 100) + minimum: 0 + maximum: 100 + unit: "" + showValue: true + wheelEnabled: false + onSliderValueChanged: newValue => { + if (SettingsData.notepadTransparencyOverride >= 0) { + SettingsData.notepadTransparencyOverride = newValue / 100; + } + } + } + } + } + + StyledText { + width: parent.width + text: SettingsData.notepadUseMonospace ? "Using global monospace font from Settings → Personalization" : "Global fonts can be configured in Settings → Personalization" + font.pixelSize: Theme.fontSizeSmall + color: Theme.surfaceTextMedium + wrapMode: Text.WordWrap + opacity: 0.8 + } + } + } +} |