LCOV - code coverage report
Current view: top level - src/tui - status_row.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 96.0 % 25 24
Test Date: 2026-04-20 19:54:22 Functions: 100.0 % 4 4

            Line data    Source code
       1              : /* SPDX-License-Identifier: GPL-3.0-or-later */
       2              : /* Copyright 2026 Peter Csaszar */
       3              : 
       4              : /**
       5              :  * @file tui/status_row.c
       6              :  * @brief Status-row rendering implementation (US-11 v2).
       7              :  */
       8              : 
       9              : #include "tui/status_row.h"
      10              : 
      11              : #include <string.h>
      12              : 
      13           30 : void status_row_init(StatusRow *sr) {
      14           30 :     if (!sr) return;
      15           30 :     memset(sr, 0, sizeof(*sr));
      16              : }
      17              : 
      18            3 : void status_row_set_message(StatusRow *sr, const char *msg) {
      19            3 :     if (!sr) return;
      20            3 :     if (!msg) { sr->message[0] = '\0'; return; }
      21            2 :     strncpy(sr->message, msg, STATUS_ROW_MSG_MAX - 1);
      22            2 :     sr->message[STATUS_ROW_MSG_MAX - 1] = '\0';
      23              : }
      24              : 
      25           17 : static const char *hint_for(StatusMode m) {
      26           17 :     switch (m) {
      27           14 :     case STATUS_MODE_DIALOGS:
      28           14 :         return "[dialogs] j/k move  Enter open  Tab history  q quit";
      29            3 :     case STATUS_MODE_HISTORY:
      30            3 :         return "[history] j/k scroll  Tab dialogs  q quit";
      31              :     }
      32            0 :     return "";
      33              : }
      34              : 
      35           20 : void status_row_render(const StatusRow *sr,
      36              :                         const Pane *pane, Screen *screen) {
      37           20 :     if (!sr || !pane || !screen || !pane_is_valid(pane)) return;
      38              :     /* The row is always one line; ignore extra pane rows so callers can pass
      39              :      * a taller pane without getting extra blanks. */
      40           17 :     pane_fill(pane, screen, 0, 0, pane->cols, SCREEN_ATTR_REVERSE);
      41           17 :     const char *hint = hint_for(sr->mode);
      42           17 :     pane_put_str(pane, screen, 0, 0, hint, SCREEN_ATTR_REVERSE);
      43           17 :     if (sr->message[0]) {
      44            1 :         int mlen = (int)strlen(sr->message);
      45            1 :         int col = pane->cols - mlen - 1;
      46            1 :         if (col < 1) col = 1;
      47            1 :         pane_put_str(pane, screen, 0, col, sr->message, SCREEN_ATTR_REVERSE);
      48              :     }
      49              : }
        

Generated by: LCOV version 2.0-1