« get me outta code hell

mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
path: root/ui.js
diff options
context:
space:
mode:
Diffstat (limited to 'ui.js')
-rw-r--r--ui.js44
1 files changed, 42 insertions, 2 deletions
diff --git a/ui.js b/ui.js
index f9f8e5f..05e359e 100644
--- a/ui.js
+++ b/ui.js
@@ -55,7 +55,7 @@ import {
 } from './serialized-backend.js'
 
 /* text editor features disabled because theyre very much incomplete and havent
- * gotten much use from me or anyonea afaik!
+ * gotten much use from me or anyone afaik!
 const TuiTextEditor = require('tui-text-editor')
 */
 
@@ -239,6 +239,12 @@ export default class AppElement extends FocusElement {
     })
     */
 
+    this.logPane = new Pane()
+    this.addChild(this.logPane)
+
+    this.log = new Log()
+    this.logPane.addChild(this.log)
+
     if (!this.config.showTabberPane) {
       this.tabberPane.visible = false
     }
@@ -465,7 +471,8 @@ export default class AppElement extends FocusElement {
       'handleQueueUpdated',
       'handleAddedQueuePlayer',
       'handleRemovedQueuePlayer',
-      'handleSetLoopQueueAtEnd'
+      'handleSetLoopQueueAtEnd',
+      'handleLogMessage'
     ]) {
       this[key] = this[key].bind(this)
     }
@@ -537,6 +544,7 @@ export default class AppElement extends FocusElement {
     this.backend.on('added queue player', this.handleAddedQueuePlayer)
     this.backend.on('removed queue player', this.handleRemovedQueuePlayer)
     this.backend.on('set-loop-queue-at-end', this.handleSetLoopQueueAtEnd)
+    this.backend.on('log message', this.handleLogMessage)
   }
 
   removeBackendListeners() {
@@ -544,6 +552,7 @@ export default class AppElement extends FocusElement {
     this.backend.removeListener('added queue player', this.handleAddedQueuePlayer)
     this.backend.removeListener('removed queue player', this.handleRemovedQueuePlayer)
     this.backend.removeListener('set-loop-queue-at-end', this.handleSetLoopQueueAtEnd)
+    this.backend.removeListener('log message', this.handleLogMessage)
   }
 
   handleAddedQueuePlayer(queuePlayer) {
@@ -561,6 +570,10 @@ export default class AppElement extends FocusElement {
     this.updateQueueLengthLabel()
   }
 
+  handleLogMessage(text) {
+    this.log.newLogMessage(text)
+  }
+
   async handlePlayingDetails(track, oldTrack, startTime, queuePlayer) {
     const PIE = this.getPlaybackInfoElementForQueuePlayer(queuePlayer)
     if (PIE) {
@@ -1711,10 +1724,21 @@ export default class AppElement extends FocusElement {
     }
     */
 
+    if (this.logPane.visible) {
+      this.logPane.w = leftWidth
+      this.logPane.h = 6
+      this.log.fillParent()
+      this.log.fixLayout()
+    }
+
     if (this.tabberPane.visible) {
       this.tabberPane.w = leftWidth
       this.tabberPane.y = bottomY
       this.tabberPane.h = topY - this.tabberPane.y
+      if (this.logPane.visible) {
+        this.tabberPane.h -= this.logPane.h
+        this.logPane.y = this.tabberPane.bottom
+      }
       /*
       if (this.textInfoPane.visible) {
         this.tabberPane.h -= this.textInfoPane.h
@@ -5499,3 +5523,19 @@ class NotesTextEditor extends TuiTextEditor {
   }
 }
 */
+
+class Log extends ListScrollForm {
+  constructor() {
+    super('vertical')
+  }
+
+  newLogMessage(text) {
+    const logMessage = new LogMessage(text)
+    this.addInput(logMessage)
+    this.fixLayout()
+    this.scrollToEnd()
+    return logMessage
+  }
+}
+
+class LogMessage extends Button {}