add menu
authorLaurent Mazet <mazet@softndesign.org>
Mon, 6 Jan 2025 22:17:33 +0000 (23:17 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Mon, 6 Jan 2025 22:17:33 +0000 (23:17 +0100)
display.c
display.h
fm.c

index 348723fe43dff7af1b269bda39bbbd2dea3dcdd8..bfab30bb9cad551c905c33656c1c010bff691fbc 100644 (file)
--- a/display.c
+++ b/display.c
@@ -16,6 +16,12 @@ typedef enum {
     cyan,
     magenta,
     yellow,
+    ired,
+    igreen,
+    iblue,
+    icyan,
+    imagenta,
+    iyellow,
     bred,
     bgreen,
     bblue,
@@ -43,6 +49,12 @@ void set_color (color_t color)
         init_pair (magenta, COLOR_MAGENTA, COLOR_BLACK);
         init_pair (yellow, COLOR_YELLOW, COLOR_BLACK);
         init_pair (cyan, COLOR_CYAN, COLOR_BLACK);
+        init_pair (ired, COLOR_RED, COLOR_WHITE);
+        init_pair (igreen, COLOR_GREEN, COLOR_WHITE);
+        init_pair (iblue, COLOR_BLUE, COLOR_WHITE);
+        init_pair (imagenta, COLOR_MAGENTA, COLOR_WHITE);
+        init_pair (iyellow, COLOR_YELLOW, COLOR_WHITE);
+        init_pair (icyan, COLOR_CYAN, COLOR_WHITE);
         init_pair (bred, COLOR_BLACK, COLOR_RED);
         init_pair (bgreen, COLOR_BLACK, COLOR_GREEN);
         init_pair (bblue, COLOR_BLACK, COLOR_BLUE);
@@ -131,6 +143,40 @@ int helpwindow (char *msg, int xoffset, int yoffset)
     return j;
 }
 
+void menuwindow (window_t *win, char *menu, int *index)
+{
+    int i;
+    set_color (black);
+    for (i = 0; i < win->xsize; i++) {
+        mvaddch (win->yoffset, win->xoffset + i, ' ');
+    }
+
+    if (*index < 0) {
+        *index = 0;
+    }
+    if ((int)strlen (menu) - *index < win->xsize) {
+        *index = strlen (menu) - win->xsize;
+    }
+    if (*index < 0) {
+        *index = 0;
+    }
+
+    for (i = 0; (i < win->xsize) && (menu[*index + i] != 0); i++) {
+        set_color (((menu[*index + i] >= 'A') && (menu[*index + i] <= 'Z')) ? iblue : black);
+        mvaddch (win->yoffset, win->xoffset + i, menu[*index + i]);
+    }
+    set_color (white);
+
+    set_color (blue);
+    if (*index > 0) {
+        mvaddch (win->yoffset, win->xoffset, ACS_LARROW);
+    }
+    if ((int)strlen (menu) - *index > win->xsize) {
+        mvaddch (win->yoffset, win->xoffset + win->xsize - 1, ACS_RARROW);
+    }
+    set_color (white);
+}
+
 void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y)
 {
     int i, j;
index d113f3b7fdbc10600246fd074b80e4c3b654fde2..12831c5b571b6633bde7a52a89ced0f8e9977240 100644 (file)
--- a/display.h
+++ b/display.h
@@ -8,6 +8,8 @@
 
 int helpwindow (char *msg, int xoffset, int yoffset);
 
+void menuwindow (window_t *win, char *status, int *index);
+
 void displaywindow (window_t *win, list_t *list, int page, int *index_x, int *index_y);
 
 void elementwindow (window_t *win, char *status, int *index);
diff --git a/fm.c b/fm.c
index 9e213d27f080fb97cac6135ce708bd6a9c8bfbc5..cdcedea806fc98d433ad29e77b178a39c3b9512b 100644 (file)
--- a/fm.c
+++ b/fm.c
@@ -45,6 +45,8 @@ char *help =
     "<u> Status left\n"
     ;
 
+char *menu = "Help View Edit Copy Move Rename Newdir Select Filter chmOd Quit";
+
 int usage (int ret)
 {
     FILE *fd = ret ? stderr : stdout;
@@ -145,6 +147,13 @@ int main (int argc, char *argv[])
         width = COLS;
     }
 
+    /* init menu window */
+    window_t *winmenu = allocwindow ();
+    winmenu->xoffset = 0;
+    winmenu->xsize = width;
+    winmenu->yoffset = 0;
+    winmenu->ysize = 1;
+
     /* init pane windows */
     window_t *windir[MAXPANES] = {0};
     for (i = 0; i < MAXPANES; i++) {
@@ -166,6 +175,7 @@ int main (int argc, char *argv[])
         winelem[i]->ysize = 1;
     }
 
+    int index_menu = 0;
     int index[MAXPANES] = {0};
     int index_x[MAXPANES] = {0};
     int index_y[MAXPANES] = {0};
@@ -176,6 +186,8 @@ int main (int argc, char *argv[])
     int stop = 0;
     while (!stop) {
 
+        menuwindow (winmenu, menu, &index_menu);
+
         /* display panes */
         for (i = 0; i < MAXPANES; i++) {
             if (list[i] == NULL) {