« get me outta code hell

Show which item in a listing is selected, even if the listing isn't selected - mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorrie <towerofnix@gmail.com>2018-09-13 17:36:56 -0300
committerFlorrie <towerofnix@gmail.com>2018-09-13 17:38:38 -0300
commit7000c1109f66b7591e6056a82f270f57bf8ae6b5 (patch)
tree010590ef77cb773e664877ed5da404d03de8675a
parent936bed812be431e831a9139fe48b4f8c76011a38 (diff)
Show which item in a listing is selected, even if the listing isn't selected
This is foundation for actively highlighting the result of a jump-to
while typing. (Since your focus is on the ListingJumpElement, there
needs to be some way to see which item would be selected in the
GrouplikeListing. That's what this commit implements.)

This also looks pretty nifty when you press M to open the context menu,
if I do say so myself.
-rw-r--r--todo.txt5
-rw-r--r--ui.js11
2 files changed, 15 insertions, 1 deletions
diff --git a/todo.txt b/todo.txt
index 36eeb05..869b051 100644
--- a/todo.txt
+++ b/todo.txt
@@ -125,3 +125,8 @@ TODO: Entering more than one key "at once" into a text input element will only
       text. (This is an issue when pasting or spamming the keyboard.) Should be
       fixed in tui-lib.
       (Done!)
+
+TODO: Pressing space while an "Up (to <group>)" button is selected both
+      activates the button and pauses music (because the app detects that the
+      space key is pressed). This is definitely wrong (it should do one or the
+      other - I'm not too sure which, yet, but probably the latter).
diff --git a/ui.js b/ui.js
index 1d8d2da..73a9732 100644
--- a/ui.js
+++ b/ui.js
@@ -949,8 +949,17 @@ class GrouplikeItemElement extends Button {
   }
 
   drawTo(writable) {
-    if (this.isSelected) {
+    const isCurrentInput = this.parent.inputs[this.parent.curIndex] === this
+    // This line's commented out for now, so it'll show as selected (but
+    // dimmed) even if you don't have the listing selected. To change that,
+    // uncomment this and add it to the isCurrentInput line.
+    // const isListingSelected = this.parent.parent.isSelected
+    const isSelfSelected = this.isSelected
+
+    if (isSelfSelected) {
       writable.write(ansi.invert())
+    } else if (isCurrentInput) {
+      writable.write(ansi.setAttributes([ansi.A_INVERT, ansi.A_DIM]))
     }
 
     writable.write(ansi.moveCursor(this.absTop, this.absLeft))