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.