NeoMutt  2024-03-23-23-gec7045
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
menu.c File Reference

GUI present the user with a selectable list. More...

#include "config.h"
#include <limits.h>
#include <stdio.h>
#include "private.h"
#include "mutt/lib.h"
#include "gui/lib.h"
#include "lib.h"
#include "color/lib.h"
#include "expando/lib.h"
#include "type.h"
+ Include dependency graph for menu.c:

Go to the source code of this file.

Functions

static const struct AttrColordefault_color (struct Menu *menu, int line)
 Get the default colour for a line of the menu - Implements Menu::color() -.
 
static int generic_search (struct Menu *menu, regex_t *rx, int line)
 Search a menu for a item matching a regex - Implements Menu::search() -.
 
void menu_cleanup (void)
 Free the saved Menu searches.
 
void menu_init (void)
 Initialise all the Menus.
 
enum MenuType menu_get_current_type (void)
 Get the type of the current Window.
 
void menu_free (struct Menu **ptr)
 Free a Menu.
 
struct Menumenu_new (enum MenuType type, struct MuttWindow *win, struct ConfigSubset *sub)
 Create a new Menu.
 
int menu_get_index (struct Menu *menu)
 Get the current selection in the Menu.
 
MenuRedrawFlags menu_set_index (struct Menu *menu, int index)
 Set the current selection in the Menu.
 
void menu_queue_redraw (struct Menu *menu, MenuRedrawFlags redraw)
 Queue a request for a redraw.
 

Variables

char * SearchBuffers [MENU_MAX]
 Previous search string, one for each MenuType.
 

Detailed Description

GUI present the user with a selectable list.

Authors
  • Richard Russon
  • R Primus

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file menu.c.

Function Documentation

◆ menu_cleanup()

void menu_cleanup ( void  )

Free the saved Menu searches.

Definition at line 71 of file menu.c.

72{
73 for (int i = 0; i < MENU_MAX; i++)
75}
#define FREE(x)
Definition: memory.h:45
char * SearchBuffers[MENU_MAX]
Previous search string, one for each MenuType.
Definition: menu.c:44
@ MENU_MAX
Definition: type.h:60
+ Here is the caller graph for this function:

◆ menu_init()

void menu_init ( void  )

Initialise all the Menus.

Definition at line 80 of file menu.c.

81{
82 for (int i = 0; i < MENU_MAX; i++)
83 SearchBuffers[i] = NULL;
84}
+ Here is the caller graph for this function:

◆ menu_get_current_type()

enum MenuType menu_get_current_type ( void  )

Get the type of the current Window.

Return values
enumMenu Type, e.g. MENU_PAGER

Definition at line 90 of file menu.c.

91{
92 struct MuttWindow *win = window_get_focus();
93
94 // This should only happen before the first window is created
95 if (!win)
96 return MENU_INDEX;
97
98 if ((win->type == WT_CUSTOM) && (win->parent->type == WT_PAGER))
99 return MENU_PAGER;
100
101 if (win->type != WT_MENU)
102 return MENU_GENERIC;
103
104 struct Menu *menu = win->wdata;
105 if (!menu)
106 return MENU_GENERIC;
107
108 return menu->type;
109}
struct MuttWindow * window_get_focus(void)
Get the currently focused Window.
Definition: mutt_window.c:668
@ WT_CUSTOM
Window with a custom drawing function.
Definition: mutt_window.h:95
@ WT_PAGER
A panel containing the Pager Window.
Definition: mutt_window.h:100
@ WT_MENU
An Window containing a Menu.
Definition: mutt_window.h:98
Definition: lib.h:79
struct MuttWindow * win
Window holding the Menu.
Definition: lib.h:86
enum MenuType type
Menu definition for keymap entries.
Definition: lib.h:83
void * wdata
Private data.
Definition: mutt_window.h:145
struct MuttWindow * parent
Parent Window.
Definition: mutt_window.h:135
enum WindowType type
Window type, e.g. WT_SIDEBAR.
Definition: mutt_window.h:144
@ MENU_INDEX
Index panel (list of emails)
Definition: type.h:51
@ MENU_GENERIC
Generic selection list.
Definition: type.h:46
@ MENU_PAGER
Pager pager (email viewer)
Definition: type.h:55
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ menu_free()

void menu_free ( struct Menu **  ptr)

Free a Menu.

Parameters
ptrMenu to free

Definition at line 115 of file menu.c.

116{
117 if (!ptr || !*ptr)
118 return;
119
120 struct Menu *menu = *ptr;
121
122 notify_free(&menu->notify);
123
124 if (menu->mdata_free && menu->mdata)
125 menu->mdata_free(menu, &menu->mdata); // Custom function to free private data
126
127 FREE(ptr);
128}
void notify_free(struct Notify **ptr)
Free a notification handler.
Definition: notify.c:75
void(* mdata_free)(struct Menu *menu, void **ptr)
Definition: lib.h:161
struct Notify * notify
Notifications.
Definition: lib.h:145
void * mdata
Private data.
Definition: lib.h:147
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ menu_new()

struct Menu * menu_new ( enum MenuType  type,
struct MuttWindow win,
struct ConfigSubset sub 
)

Create a new Menu.

Parameters
typeMenu type, e.g. MENU_ALIAS
winParent Window
subConfig items
Return values
ptrNew Menu

Definition at line 137 of file menu.c.

138{
139 struct Menu *menu = mutt_mem_calloc(1, sizeof(struct Menu));
140
141 menu->type = type;
142 menu->redraw = MENU_REDRAW_FULL;
143 menu->color = default_color;
144 menu->search = generic_search;
145 menu->notify = notify_new();
146 menu->win = win;
147 menu->page_len = win->state.rows;
148 menu->sub = sub;
149
151 menu_add_observers(menu);
152
153 return menu;
154}
static const struct AttrColor * default_color(struct Menu *menu, int line)
Get the default colour for a line of the menu - Implements Menu::color() -.
Definition: menu.c:49
static int generic_search(struct Menu *menu, regex_t *rx, int line)
Search a menu for a item matching a regex - Implements Menu::search() -.
Definition: menu.c:57
void * mutt_mem_calloc(size_t nmemb, size_t size)
Allocate zeroed memory on the heap.
Definition: memory.c:50
#define MENU_REDRAW_FULL
Redraw everything.
Definition: lib.h:59
void menu_add_observers(struct Menu *menu)
Add the notification observers.
Definition: observer.c:134
struct Notify * notify_new(void)
Create a new notifications handler.
Definition: notify.c:62
void notify_set_parent(struct Notify *notify, struct Notify *parent)
Set the parent notification handler.
Definition: notify.c:95
const struct AttrColor *(* color)(struct Menu *menu, int line)
Definition: lib.h:143
MenuRedrawFlags redraw
When to redraw the screen.
Definition: lib.h:82
int(* search)(struct Menu *menu, regex_t *rx, int line)
Definition: lib.h:119
struct ConfigSubset * sub
Inherited config items.
Definition: lib.h:87
int page_len
Number of entries per screen.
Definition: lib.h:84
struct WindowState state
Current state of the Window.
Definition: mutt_window.h:127
struct Notify * notify
Notifications: NotifyWindow, EventWindow.
Definition: mutt_window.h:138
short rows
Number of rows, can be MUTT_WIN_SIZE_UNLIMITED.
Definition: mutt_window.h:61
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ menu_get_index()

int menu_get_index ( struct Menu menu)

Get the current selection in the Menu.

Parameters
menuMenu
Return values
numIndex of selection

Definition at line 161 of file menu.c.

162{
163 if (!menu)
164 return -1;
165
166 return menu->current;
167}
int current
Current entry.
Definition: lib.h:80

◆ menu_set_index()

MenuRedrawFlags menu_set_index ( struct Menu menu,
int  index 
)

Set the current selection in the Menu.

Parameters
menuMenu
indexItem to select
Return values
enumMenuRedrawFlags, e.g. MENU_REDRAW_INDEX

Definition at line 175 of file menu.c.

176{
177 return menu_move_selection(menu, index);
178}
MenuRedrawFlags menu_move_selection(struct Menu *menu, int index)
Move the selection, keeping within between [0, menu->max].
Definition: move.c:236
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ menu_queue_redraw()

void menu_queue_redraw ( struct Menu menu,
MenuRedrawFlags  redraw 
)

Queue a request for a redraw.

Parameters
menuMenu
redrawItem to redraw, e.g. MENU_REDRAW_CURRENT

Definition at line 185 of file menu.c.

186{
187 if (!menu)
188 return;
189
190 menu->redraw |= redraw;
191 menu->win->actions |= WA_RECALC;
192}
#define WA_RECALC
Recalculate the contents of the Window.
Definition: mutt_window.h:110
WindowActionFlags actions
Actions to be performed, e.g. WA_RECALC.
Definition: mutt_window.h:132

Variable Documentation

◆ SearchBuffers

char* SearchBuffers[MENU_MAX]

Previous search string, one for each MenuType.

Definition at line 44 of file menu.c.