mutt_menu.h 3.84 KB
Newer Older
Thomas Roessler's avatar
Thomas Roessler committed
1
/*
2
 * Copyright (C) 1996-2000 Michael R. Elkins <me@cs.hmc.edu>
Thomas Roessler's avatar
Thomas Roessler committed
3 4 5 6 7 8 9 10 11 12 13 14 15
 *
 *     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
16
 *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
Thomas Roessler's avatar
Thomas Roessler committed
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
 */

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

#include "keymap.h"
#include "mutt_regex.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)
33
#define REDRAW_SIGWINCH		(1<<7)
Thomas Roessler's avatar
Thomas Roessler committed
34

Thomas Roessler's avatar
Thomas Roessler committed
35 36
#define M_MODEFMT "-- Mutt: %s"

Thomas Roessler's avatar
Thomas Roessler committed
37 38 39 40 41 42 43 44 45 46 47 48
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;	/* which screen row to start the index */
  int pagelen;	/* number of entries per screen */
  int tagprefix;
49 50 51 52 53 54 55 56 57

  /* Setting dialog != NULL overrides normal menu behaviour. 
   * 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 */
Thomas Roessler's avatar
Thomas Roessler committed
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
  
  /* 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);

  /* 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. */
  char *searchBuf;	/* last search pattern */
  int searchDir;	/* direction of search */
  int tagged;		/* number of tagged entries */
} MUTTMENU;

void menu_jump (MUTTMENU *);
void menu_redraw_full (MUTTMENU *);
void menu_redraw_index (MUTTMENU *);
83
void menu_redraw_status (MUTTMENU *);
Thomas Roessler's avatar
Thomas Roessler committed
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
void menu_redraw_motion (MUTTMENU *);
void menu_redraw_current (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 *);

MUTTMENU *mutt_new_menu (void);
void mutt_menuDestroy (MUTTMENU **);
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);