diff --git a/app/src/main/java/com/itsaky/androidide/preferences/editor.kt b/app/src/main/java/com/itsaky/androidide/preferences/editor.kt
index 0adb2d746..3977c1862 100644
--- a/app/src/main/java/com/itsaky/androidide/preferences/editor.kt
+++ b/app/src/main/java/com/itsaky/androidide/preferences/editor.kt
@@ -33,6 +33,7 @@ import com.itsaky.androidide.preferences.internal.FLAG_PASSWORD
import com.itsaky.androidide.preferences.internal.FONT_LIGATURES
import com.itsaky.androidide.preferences.internal.FONT_SIZE
import com.itsaky.androidide.preferences.internal.HIDE_FILE_TREE_BUTTON
+import com.itsaky.androidide.preferences.internal.PIN_LINE_NUMBERS
import com.itsaky.androidide.preferences.internal.PRINTABLE_CHARS
import com.itsaky.androidide.preferences.internal.STICKY_SCROLL_ENABLED
import com.itsaky.androidide.preferences.internal.TAB_SIZE
@@ -54,6 +55,7 @@ import com.itsaky.androidide.preferences.internal.drawTrailingWs
import com.itsaky.androidide.preferences.internal.fontLigatures
import com.itsaky.androidide.preferences.internal.fontSize
import com.itsaky.androidide.preferences.internal.hideFileTreeButton
+import com.itsaky.androidide.preferences.internal.pinLineNumbers
import com.itsaky.androidide.preferences.internal.stickyScrollEnabled
import com.itsaky.androidide.preferences.internal.tabSize
import com.itsaky.androidide.preferences.internal.useCustomFont
@@ -106,6 +108,7 @@ private class CommonConfigurations(
addPreference(DeleteEmptyLines())
addPreference(DeleteTabs())
addPreference(StickyScrollEnabled())
+ addPreference(PinLineNumbersEnabled())
addPreference(CompletionsMatchLower())
}
}
@@ -349,3 +352,11 @@ private class StickyScrollEnabled(
override val summary: Int? = R.string.idepref_editor_stickyScroll_summary,
override val icon: Int? = drawable.ic_sticky_scroll
) : SwitchPreference(setValue = ::stickyScrollEnabled::set, getValue = ::stickyScrollEnabled::get)
+
+@Parcelize
+private class PinLineNumbersEnabled(
+ override val key: String = PIN_LINE_NUMBERS,
+ override val title: Int = R.string.idepref_editor_pinLineNumbers_title,
+ override val summary: Int? = R.string.idepref_editor_pinLineNumbers_summary,
+ override val icon: Int? = drawable.ic_pin
+) : SwitchPreference(setValue = ::pinLineNumbers::set, getValue = ::pinLineNumbers::get)
diff --git a/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt b/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt
index 77a506fde..e7c2d086d 100644
--- a/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt
+++ b/app/src/main/java/com/itsaky/androidide/ui/CodeEditorView.kt
@@ -51,6 +51,7 @@ import com.itsaky.androidide.preferences.internal.FLAG_WS_LEADING
import com.itsaky.androidide.preferences.internal.FLAG_WS_TRAILING
import com.itsaky.androidide.preferences.internal.FONT_LIGATURES
import com.itsaky.androidide.preferences.internal.FONT_SIZE
+import com.itsaky.androidide.preferences.internal.PIN_LINE_NUMBERS
import com.itsaky.androidide.preferences.internal.STICKY_SCROLL_ENABLED
import com.itsaky.androidide.preferences.internal.USE_CUSTOM_FONT
import com.itsaky.androidide.preferences.internal.USE_ICU
@@ -65,6 +66,7 @@ import com.itsaky.androidide.preferences.internal.drawLineBreak
import com.itsaky.androidide.preferences.internal.drawTrailingWs
import com.itsaky.androidide.preferences.internal.fontLigatures
import com.itsaky.androidide.preferences.internal.fontSize
+import com.itsaky.androidide.preferences.internal.pinLineNumbers
import com.itsaky.androidide.preferences.internal.stickyScrollEnabled
import com.itsaky.androidide.preferences.internal.useCustomFont
import com.itsaky.androidide.preferences.internal.useIcu
@@ -363,6 +365,7 @@ class CodeEditorView(
onDeleteEmptyLinesPrefChanged()
onDeleteTabsPrefChanged()
onStickyScrollEnabeldPrefChanged()
+ onPinLineNumbersPrefChanged()
}
private fun onMagnifierPrefChanged() {
@@ -433,6 +436,10 @@ class CodeEditorView(
binding.editor.props.stickyScroll = stickyScrollEnabled
}
+ private fun onPinLineNumbersPrefChanged() {
+ binding.editor.setPinLineNumber(pinLineNumbers)
+ }
+
/**
* For internal use only!
*
@@ -479,6 +486,7 @@ class CodeEditorView(
DELETE_EMPTY_LINES -> onDeleteEmptyLinesPrefChanged()
DELETE_TABS_ON_BACKSPACE -> onDeleteTabsPrefChanged()
STICKY_SCROLL_ENABLED -> onStickyScrollEnabeldPrefChanged()
+ PIN_LINE_NUMBERS -> onPinLineNumbersPrefChanged()
}
}
diff --git a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/editorPreferences.kt b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/editorPreferences.kt
index b0cb567f1..6672f0b86 100644
--- a/preferences/src/main/java/com/itsaky/androidide/preferences/internal/editorPreferences.kt
+++ b/preferences/src/main/java/com/itsaky/androidide/preferences/internal/editorPreferences.kt
@@ -42,6 +42,7 @@ const val USE_CUSTOM_FONT = "idepref_editor_useCustomFont"
const val DELETE_EMPTY_LINES = "idepref_editor_deleteEmptyLines"
const val DELETE_TABS_ON_BACKSPACE = "idepref_editor_deleteTab"
const val STICKY_SCROLL_ENABLED = "idepref_editor_stickyScrollEnabled"
+const val PIN_LINE_NUMBERS = "idepref_editor_pinLineNumbers"
const val COLOR_SCHEME = "idepref_editor_colorScheme"
const val DEFAULT_COLOR_SCHEME = "default"
@@ -178,3 +179,7 @@ var stickyScrollEnabled : Boolean
set(value) {
prefManager.putBoolean(STICKY_SCROLL_ENABLED, value)
}
+
+var pinLineNumbers: Boolean
+ get() = prefManager.getBoolean(PIN_LINE_NUMBERS, true)
+ set(value) = prefManager.putBoolean(PIN_LINE_NUMBERS, value)
diff --git a/resources/src/main/res/drawable/ic_pin.xml b/resources/src/main/res/drawable/ic_pin.xml
new file mode 100644
index 000000000..76c907506
--- /dev/null
+++ b/resources/src/main/res/drawable/ic_pin.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml
index 02977093b..02aaac7a7 100644
--- a/resources/src/main/res/values/strings.xml
+++ b/resources/src/main/res/values/strings.xml
@@ -614,4 +614,6 @@
You are using 64-bit variant of AndroidIDE on a 32-bit-only device. This configuration is not supported. Please install the 32-bit variant of AndroidIDE.
Configuration Warning
You are using 32-bit variant of AndroidIDE on a 64-bit device. This configuration may work, but it\'ll result in reduced performance and possible security vulnerabilities. Please avoid using this configuration whenever possible.
+ Pin line numbers
+ Whether the editor should pin line number panel when scrolled horizontally.