diff options
Diffstat (limited to '')
-rw-r--r-- | dselect/dselect.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/dselect/dselect.h b/dselect/dselect.h new file mode 100644 index 0000000..383fb95 --- /dev/null +++ b/dselect/dselect.h @@ -0,0 +1,200 @@ +/* + * dselect - Debian package maintenance user interface + * dselect.h - external definitions for this program + * + * Copyright © 1994,1995 Ian Jackson <ijackson@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 <https://www.gnu.org/licenses/>. + */ + +#ifndef DSELECT_H +#define DSELECT_H + +#include <signal.h> + +#include <algorithm> + +using std::min; +using std::max; + +#include <dpkg/debug.h> + +#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; + +enum screenparts { + background, + list, + listsel, + title, + thisstate, + selstate, + selstatesel, + colheads, + query, + info_body, + info_head, + whatinfo, + helpscreen, + numscreenparts, +}; + +struct column { + column(): title(nullptr), x(0), width(0) {}; + void blank() { title = nullptr; x = 0; width = 0; }; + + const char *title; + int x; + int width; +}; + +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 part_attr[numscreenparts]; + + int gap_width; + int col_cur_x; + int total_width; + + void add_column(column &col, const char *title, int width); + void end_column(column &col, const char *title); + void draw_column_head(column &col); + void draw_column_sep(column &col, int y); + void draw_column_item(column &col, int y, const char *item); + + // (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 + void sigwinch_mask(int how); + 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 bool expertmode; + +struct colordata { + int fore; + int back; + int attr; +}; +extern colordata color[]; + +/* Evil recommends flag variable. */ +extern bool 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 */ |