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

            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            3 : void status_row_init(StatusRow *sr) {
      14            3 :     if (!sr) return;
      15            3 :     memset(sr, 0, sizeof(*sr));
      16              : }
      17              : 
      18            0 : void status_row_set_message(StatusRow *sr, const char *msg) {
      19            0 :     if (!sr) return;
      20            0 :     if (!msg) { sr->message[0] = '\0'; return; }
      21            0 :     strncpy(sr->message, msg, STATUS_ROW_MSG_MAX - 1);
      22            0 :     sr->message[STATUS_ROW_MSG_MAX - 1] = '\0';
      23              : }
      24              : 
      25            3 : static const char *hint_for(StatusMode m) {
      26            3 :     switch (m) {
      27            2 :     case STATUS_MODE_DIALOGS:
      28            2 :         return "[dialogs] j/k move  Enter open  Tab history  q quit";
      29            1 :     case STATUS_MODE_HISTORY:
      30            1 :         return "[history] j/k scroll  Tab dialogs  q quit";
      31              :     }
      32            0 :     return "";
      33              : }
      34              : 
      35            3 : void status_row_render(const StatusRow *sr,
      36              :                         const Pane *pane, Screen *screen) {
      37            3 :     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            3 :     pane_fill(pane, screen, 0, 0, pane->cols, SCREEN_ATTR_REVERSE);
      41            3 :     const char *hint = hint_for(sr->mode);
      42            3 :     pane_put_str(pane, screen, 0, 0, hint, SCREEN_ATTR_REVERSE);
      43            3 :     if (sr->message[0]) {
      44            0 :         int mlen = (int)strlen(sr->message);
      45            0 :         int col = pane->cols - mlen - 1;
      46            0 :         if (col < 1) col = 1;
      47            0 :         pane_put_str(pane, screen, 0, col, sr->message, SCREEN_ATTR_REVERSE);
      48              :     }
      49              : }
        

Generated by: LCOV version 2.0-1