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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
/* -*- c++ -*-
* dselect - selection of Debian packages
* dselect.h - external definitions for this program
*
* Copyright © 1994,1995 Ian Jackson <ian@chiark.greenend.org.uk>
* Copyright © 2001 Wichert Akkerman <wakkerma@debian.org>
*
* This 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 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/>.
*/
#ifndef DSELECT_H
#define DSELECT_H
#include <signal.h>
#include <algorithm>
using std::min;
using std::max;
#include "dselect-curses.h"
#define DSELECT "dselect"
#define TOTAL_LIST_WIDTH 180
#define MAX_DISPLAY_INFO 120
struct helpmenuentry {
char key;
const struct helpmessage *msg;
};
struct keybindings;
class baselist {
protected:
// Screen dimensions &c.
int xmax, ymax;
int title_height, colheads_height, list_height;
int thisstate_height, info_height, whatinfo_height;
int colheads_row, thisstate_row, info_row, whatinfo_row, list_row;
int list_attr, listsel_attr, title_attr, colheads_attr, info_attr;
int info_headattr, whatinfo_attr;
int thisstate_attr, query_attr;
int selstate_attr, selstatesel_attr;
int helpscreen_attr;
int total_width;
// (n)curses stuff
WINDOW *listpad, *infopad, *colheadspad, *thisstatepad;
WINDOW *titlewin, *whatinfowin, *querywin;
// If listpad is null, then we have not started to display yet, and
// so none of the auto-displaying update routines need to display.
// SIGWINCH handling
struct sigaction *osigactp, nsigact;
sigset_t *oblockedp, sigwinchset;
void setupsigwinch();
static baselist *signallist;
static void sigwinchhandler(int);
int nitems, ldrawnstart, ldrawnend, showinfo;
int topofscreen, leftofscreen, cursorline;
int infotopofscreen, infolines;
varbuf whatinfovb;
char searchstring[128];
virtual void setheights();
void unsizes();
void dosearch();
void displayhelp(const struct helpmenuentry *menu, int key);
void displayerror(const char* str);
void redrawall();
void redrawitemsrange(int start /*inclusive*/, int end /*exclusive*/);
void redraw1item(int index);
void refreshlist();
void refreshinfo();
void refreshcolheads();
void setcursor(int index);
void itd_keys();
virtual void redraw1itemsel(int index, int selected) =0;
virtual void redrawcolheads() =0;
virtual void redrawthisstate() =0;
virtual void redrawinfo() =0;
virtual void redrawtitle() =0;
virtual void setwidths() =0;
virtual const char *itemname(int index) =0;
virtual const struct helpmenuentry *helpmenulist() =0;
virtual bool checksearch(char *str);
virtual bool matchsearch(int index);
void wordwrapinfo(int offset, const char *string);
public:
keybindings *bindings;
void kd_up();
void kd_down();
void kd_redraw();
void kd_scrollon();
void kd_scrollback();
void kd_scrollon1();
void kd_scrollback1();
void kd_panon();
void kd_panback();
void kd_panon1();
void kd_panback1();
void kd_top();
void kd_bottom();
void kd_iscrollon();
void kd_iscrollback();
void kd_iscrollon1();
void kd_iscrollback1();
void kd_search();
void kd_searchagain();
void kd_help();
void startdisplay();
void enddisplay();
baselist(keybindings*);
virtual ~baselist();
};
void displayhelp(const struct helpmenuentry *menu, int key);
void mywerase(WINDOW *win);
void curseson();
void cursesoff();
extern const char *admindir;
extern FILE *debug;
extern int expertmode;
enum screenparts {
background,
list,
listsel,
title,
thisstate,
selstate,
selstatesel,
colheads,
query,
info,
info_head,
whatinfo,
helpscreen,
numscreenparts,
};
struct colordata {
int fore;
int back;
int attr;
};
extern colordata color[];
/* Evil recommends flag variable. */
extern int manual_install;
enum urqresult { urqr_normal, urqr_fail, urqr_quitmenu };
enum quitaction { qa_noquit, qa_quitchecksave, qa_quitnochecksave };
typedef urqresult urqfunction(void);
urqfunction urq_list, urq_quit, urq_menu;
urqfunction urq_setup, urq_update, urq_install, urq_config, urq_remove;
#endif /* DSELECT_H */
|