summaryrefslogtreecommitdiffstats
path: root/mutt_menu.h
blob: ed872bcc9a08bf535f25509bf79c3318b11e7760 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * Copyright (C) 1996-2000 Michael R. Elkins <me@mutt.org>
 *
 *     This program is free software; you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation; either version 2 of the License, or
 *     (at your option) any later version.
 *
 *     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, write to the Free Software
 *     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

/*
 * This file is named mutt_menu.h so it doesn't collide with ncurses menu.h
 */

#ifndef _MUTT_MENU_H_
#define _MUTT_MENU_H_ 1

#include "keymap.h"
#include "mutt_regex.h"
#include "mutt_curses.h"

#define REDRAW_INDEX		(1)
#define REDRAW_MOTION		(1<<1)
#define REDRAW_MOTION_RESYNCH	(1<<2)
#define REDRAW_CURRENT		(1<<3)
#define REDRAW_STATUS		(1<<4)
#define REDRAW_FULL		(1<<5)
#define REDRAW_BODY		(1<<6)
#define REDRAW_FLOW		(1<<7)   /* Used by pager to reflow text */
#ifdef USE_SIDEBAR
#define REDRAW_SIDEBAR		(1<<8)
#endif

#define MUTT_MODEFMT "-- Mutt: %s"

typedef struct menu_t
{
  char *title;   /* the title of this menu */
  char *help;    /* quickref for the current menu */
  void *data;    /* extra data for the current menu */
  int current;   /* current entry */
  int max;       /* the number of entries in the menu */
  int redraw;	/* when to redraw the screen */
  int menu;	/* menu definition for keymap entries. */
  int offset;  /* row offset within the window to start the index */
  int pagelen;	/* number of entries per screen */
  int tagprefix;
  mutt_window_t *indexwin;
  mutt_window_t *statuswin;
  mutt_window_t *helpwin;
  mutt_window_t *messagewin;

  /* Setting dialog != NULL overrides normal menu behavior. 
   * In dialog mode menubar is hidden and prompt keys are checked before
   * normal menu movement keys. This can cause problems with scrolling, if 
   * prompt keys override movement keys.
   */
  char **dialog;	/* dialog lines themselves */
  char *prompt;		/* prompt for user, similar to mutt_multi_choice */
  char *keys;		/* keys used in the prompt */
  
  /* callback to generate an index line for the requested element */
  void (*make_entry) (char *, size_t, struct menu_t *, int);
  
  /* how to search the menu */
  int (*search) (struct menu_t *, regex_t *re, int n);

  int (*tag) (struct menu_t *, int i, int m);

  /* these are used for custom redrawing callbacks */
  void (*custom_menu_redraw) (struct menu_t *);
  void *redraw_data;

  /* color pair to be used for the requested element 
   * (default function returns ColorDefs[MT_COLOR_NORMAL])
   */
  int (*color) (int i);
   
  /* the following are used only by mutt_menuLoop() */
  int top;		/* entry that is the top of the current page */
  int oldcurrent;	/* for driver use only. */
  int searchDir;	/* direction of search */
  int tagged;		/* number of tagged entries */
} MUTTMENU;

void mutt_menu_init (void);
void menu_jump (MUTTMENU *);
void menu_redraw_full (MUTTMENU *);
#ifdef USE_SIDEBAR
void menu_redraw_sidebar (MUTTMENU *);
#endif
void menu_redraw_index (MUTTMENU *);
void menu_redraw_status (MUTTMENU *);
void menu_redraw_motion (MUTTMENU *);
void menu_redraw_current (MUTTMENU *);
int  menu_redraw (MUTTMENU *);
void menu_first_entry (MUTTMENU *);
void menu_last_entry (MUTTMENU *);
void menu_top_page (MUTTMENU *);
void menu_bottom_page (MUTTMENU *);
void menu_middle_page (MUTTMENU *);
void menu_next_page (MUTTMENU *);
void menu_prev_page (MUTTMENU *);
void menu_next_line (MUTTMENU *);
void menu_prev_line (MUTTMENU *);
void menu_half_up (MUTTMENU *);
void menu_half_down (MUTTMENU *);
void menu_current_top (MUTTMENU *);
void menu_current_middle (MUTTMENU *);
void menu_current_bottom (MUTTMENU *);
void menu_check_recenter (MUTTMENU *);
void menu_status_line (char *, size_t, MUTTMENU *, const char *);
short mutt_ts_capability (void);
void mutt_ts_status (char *);
void mutt_ts_icon (char *);

MUTTMENU *mutt_new_menu (int);
void mutt_menuDestroy (MUTTMENU **);
void mutt_push_current_menu (MUTTMENU *);
void mutt_pop_current_menu (MUTTMENU *);
void mutt_set_current_menu_redraw (int);
void mutt_set_current_menu_redraw_full ();
void mutt_set_menu_redraw (int, int);
void mutt_set_menu_redraw_full (int);
void mutt_current_menu_redraw (void);
int mutt_menuLoop (MUTTMENU *);

/* used in both the index and pager index to make an entry. */
void index_make_entry (char *, size_t, struct menu_t *, int);
int index_color (int);

#endif /* _MUTT_MENU_H_ */