« get me outta code hell

mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ui.js28
1 files changed, 21 insertions, 7 deletions
diff --git a/ui.js b/ui.js
index d6452d9..df8d914 100644
--- a/ui.js
+++ b/ui.js
@@ -109,6 +109,8 @@ const keyBindings = [
   // ['isFocusLabels', 'L', {caseless: false}], // todo: better key? to let isToggleLoop be caseless again
   ['isSelectUp', telc.isShiftUp],
   ['isSelectDown', telc.isShiftDown],
+  ['isNextThemeColor', 'c', {caseless: false}],
+  ['isPreviousThemeColor', 'C', {caseless: false}],
 
   ['isPreviousPlayer', telc.isMetaUp],
   ['isPreviousPlayer', [0x1b, 'p']],
@@ -199,7 +201,7 @@ class AppElement extends FocusElement {
       canControlQueuePlayers: true,
       canProcessMetadata: true,
       canSuspend: true,
-      menubarColor: 4, // blue
+      themeColor: 4, // blue
       seekToStartThreshold: 3,
       showTabberPane: true,
       stopPlayingUponQuit: true
@@ -221,7 +223,8 @@ class AppElement extends FocusElement {
     this.menubar = new Menubar(this.showContextMenu)
     this.addChild(this.menubar)
 
-    this.menubar.color = this.config.menubarColor
+    this.setThemeColor(this.config.themeColor)
+    this.menubar.on('color', color => this.setThemeColor(color))
 
     this.tabberPane = new Pane()
     this.addChild(this.tabberPane)
@@ -2157,6 +2160,11 @@ class AppElement extends FocusElement {
     }
   }
 
+  setThemeColor(color) {
+    this.themeColor = color
+    this.menubar.color = color
+  }
+
   get SQP() {
     // Just a convenient shorthand.
     return this.selectedQueuePlayer
@@ -3684,15 +3692,16 @@ class InteractiveGrouplikeItemElement extends BasicGrouplikeItemElement {
 
   writeStatus(writable) {
     const markStatus = this.app.getMarkStatus(this.item)
+    const color = this.app.themeColor + 30
 
     if (this.isGroup) {
       // The ANSI attributes here will apply to the rest of the line, too.
       // (We don't reset the active attributes until after drawing the rest of
       // the line.)
       if (markStatus === 'marked' || markStatus === 'partial') {
-        writable.write(ansi.setAttributes([ansi.C_BLUE + 10]))
+        writable.write(ansi.setAttributes([color + 10]))
       } else {
-        writable.write(ansi.setAttributes([ansi.C_BLUE, ansi.A_BRIGHT]))
+        writable.write(ansi.setAttributes([color, ansi.A_BRIGHT]))
       }
     } else if (this.isTrack) {
       if (markStatus === 'marked') {
@@ -3803,7 +3812,7 @@ class TimestampGrouplikeItemElement extends BasicGrouplikeItemElement {
   writeStatus(writable) {
     let parts = []
 
-    const color = ansi.setAttributes([ansi.A_BRIGHT, ansi.C_CYAN])
+    const color = ansi.setAttributes([ansi.A_BRIGHT, 30 + this.app.themeColor])
     const reset = ansi.setAttributes([ansi.C_RESET])
 
     if (this.isCurrentTimestamp) {
@@ -5051,9 +5060,14 @@ class Menubar extends ListScrollForm {
 
     if (this.keyboardSelector.keyPressed(keyBuf)) {
       return false
-    } else if (telc.isCaselessLetter(keyBuf, 'c')) {
+    } else if (input.isNextThemeColor(keyBuf)) {
       // For fun :)
-      this.color = (this.color % 8) + 1
+      this.color = (this.color === 8 ? 1 : this.color + 1)
+      this.emit('color', this.color)
+      return false
+    } else if (input.isPreviousThemeColor(keyBuf)) {
+      this.color = (this.color === 1 ? 8 : this.color - 1)
+      this.emit('color', this.color)
       return false
     } else if (telc.isCaselessLetter(keyBuf, 'a')) {
       this.attribute = (this.attribute % 3) + 1