From cf87ca267353855c40cc29c08eb40b646693e3e2 Mon Sep 17 00:00:00 2001 From: zelgadis Date: Sun, 16 Sep 2007 00:46:32 +0000 Subject: In the item selection menu, pressing "." will toggle the next item in the list; you can press "." repeatedly to select/unselect a number of contiguous items. Also, removed the depedancy upon "menu.h" for formatted_string, since that isn't in menu.h anymore. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2101 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/source/chardump.cc | 1 + crawl-ref/source/direct.cc | 1 + crawl-ref/source/menu.cc | 30 +++++++++++++++++++++++++++++- crawl-ref/source/menu.h | 2 ++ crawl-ref/source/mutation.cc | 1 + crawl-ref/source/mutation.h | 2 +- crawl-ref/source/output.h | 2 +- crawl-ref/source/spl-book.cc | 1 + crawl-ref/source/spl-book.h | 3 ++- crawl-ref/source/spl-cast.cc | 1 + crawl-ref/source/tutorial.cc | 1 + crawl-ref/source/tutorial.h | 8 +++++--- crawl-ref/source/view.cc | 1 + 13 files changed, 47 insertions(+), 7 deletions(-) diff --git a/crawl-ref/source/chardump.cc b/crawl-ref/source/chardump.cc index 7092a900d2..d69ce9ce23 100644 --- a/crawl-ref/source/chardump.cc +++ b/crawl-ref/source/chardump.cc @@ -44,6 +44,7 @@ #include "Kills.h" #include "macro.h" #include "message.h" +#include "menu.h" #include "mutation.h" #include "notes.h" #include "output.h" diff --git a/crawl-ref/source/direct.cc b/crawl-ref/source/direct.cc index 8a6074721d..9f246d67a9 100644 --- a/crawl-ref/source/direct.cc +++ b/crawl-ref/source/direct.cc @@ -41,6 +41,7 @@ #include "mapmark.h" #include "message.h" #include "misc.h" +#include "menu.h" #include "monstuff.h" #include "mon-util.h" #include "player.h" diff --git a/crawl-ref/source/menu.cc b/crawl-ref/source/menu.cc index 576b4517ec..c379460d8f 100644 --- a/crawl-ref/source/menu.cc +++ b/crawl-ref/source/menu.cc @@ -32,7 +32,8 @@ Menu::Menu( int _flags ) highlighter(new MenuHighlighter), num(-1), lastch(0), - alive(false) + alive(false), + last_selected(-1) { set_flags(flags); } @@ -242,6 +243,22 @@ bool Menu::process_key( int keyin ) repaint = true; break; } + case '.': + if (last_selected != -1) + { + if ((first_entry + pagesize - last_selected) == 1) + { + page_down(); + nav = true; + } + + select_index(last_selected + 1); + get_selected(&sel); + + repaint = true; + } + break; + default: keyin = post_process(keyin); lastch = keyin; @@ -273,6 +290,14 @@ bool Menu::process_key( int keyin ) break; } + if (last_selected != -1 && + (items.size() == ((unsigned int) last_selected + 1) + || items[last_selected + 1] == NULL + || items[last_selected + 1]->level != MEL_ITEM)) + { + last_selected = -1; + } + if (!isdigit( keyin )) num = -1; @@ -463,6 +488,7 @@ void Menu::select_index( int index, int qty ) continue; if (is_hotkey(i, items[i]->hotkeys[0]) && is_selectable(i)) { + last_selected = i; items[i]->select( qty ); draw_item( i ); } @@ -478,6 +504,7 @@ void Menu::select_index( int index, int qty ) continue; if (is_hotkey(i, items[i]->hotkeys[0])) { + last_selected = i; items[i]->select( qty ); draw_item( i ); } @@ -486,6 +513,7 @@ void Menu::select_index( int index, int qty ) else if (items[si]->level == MEL_ITEM && (flags & (MF_SINGLESELECT | MF_MULTISELECT))) { + last_selected = si; items[si]->select( qty ); draw_item( si ); } diff --git a/crawl-ref/source/menu.h b/crawl-ref/source/menu.h index d4d552eb1d..f169263a98 100644 --- a/crawl-ref/source/menu.h +++ b/crawl-ref/source/menu.h @@ -237,6 +237,8 @@ protected: bool alive; + int last_selected; + protected: void do_menu(); virtual void draw_select_count(int count, bool force = false); diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc index c4db7225a5..3deee3e691 100644 --- a/crawl-ref/source/mutation.cc +++ b/crawl-ref/source/mutation.cc @@ -35,6 +35,7 @@ #include "defines.h" #include "effects.h" +#include "format.h" #include "itemprop.h" #include "macro.h" #include "notes.h" diff --git a/crawl-ref/source/mutation.h b/crawl-ref/source/mutation.h index a50c1c50e8..44e4ba1fde 100644 --- a/crawl-ref/source/mutation.h +++ b/crawl-ref/source/mutation.h @@ -15,7 +15,7 @@ #define MUTATION_H // for formatted_string -#include "menu.h" +class formatted_string; // last updated 12may2000 {dlb} /* *********************************************************************** diff --git a/crawl-ref/source/output.h b/crawl-ref/source/output.h index 189f3eb492..be635602b8 100644 --- a/crawl-ref/source/output.h +++ b/crawl-ref/source/output.h @@ -14,7 +14,7 @@ #ifndef OUTPUT_H #define OUTPUT_H -#include "menu.h" +#include "format.h" enum status_redraw_flag_type { diff --git a/crawl-ref/source/spl-book.cc b/crawl-ref/source/spl-book.cc index c3d52c0451..69a88c8991 100644 --- a/crawl-ref/source/spl-book.cc +++ b/crawl-ref/source/spl-book.cc @@ -29,6 +29,7 @@ #include "debug.h" #include "delay.h" #include "food.h" +#include "format.h" #include "invent.h" #include "itemname.h" #include "itemprop.h" diff --git a/crawl-ref/source/spl-book.h b/crawl-ref/source/spl-book.h index ede00e0aee..29a01280fe 100644 --- a/crawl-ref/source/spl-book.h +++ b/crawl-ref/source/spl-book.h @@ -15,9 +15,10 @@ #define SPL_BOOK_H #include "externs.h" -#include "menu.h" #include "FixVec.h" +class formatted_string; + enum read_book_action_type { RBOOK_USE_STAFF, diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index 9fc260e9d6..fff4aef204 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -35,6 +35,7 @@ #include "itemname.h" #include "itemprop.h" #include "macro.h" +#include "menu.h" #include "message.h" #include "monplace.h" #include "monstuff.h" diff --git a/crawl-ref/source/tutorial.cc b/crawl-ref/source/tutorial.cc index bf3c356482..a0642733cb 100644 --- a/crawl-ref/source/tutorial.cc +++ b/crawl-ref/source/tutorial.cc @@ -10,6 +10,7 @@ #include "command.h" #include "files.h" #include "food.h" +#include "format.h" #include "initfile.h" #include "itemname.h" #include "itemprop.h" diff --git a/crawl-ref/source/tutorial.h b/crawl-ref/source/tutorial.h index a4824ab89b..942086d207 100644 --- a/crawl-ref/source/tutorial.h +++ b/crawl-ref/source/tutorial.h @@ -9,14 +9,16 @@ #ifndef TUTORIAL_H #define TUTORIAL_H -// for formatted_string -#include "menu.h" - #include #include #include #include +#include "AppHdr.h" +#include "externs.h" + +class formatted_string; + void save_tutorial( FILE* fp ); void load_tutorial( FILE* fp ); void init_tutorial_options(void); diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc index ee5dc4c530..c44639b141 100644 --- a/crawl-ref/source/view.cc +++ b/crawl-ref/source/view.cc @@ -45,6 +45,7 @@ #include "delay.h" #include "direct.h" #include "dungeon.h" +#include "format.h" #include "initfile.h" #include "itemprop.h" #include "luadgn.h" -- cgit v1.2.3-54-g00ecf