diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 |
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 |
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /curses/curseskeyhandler.C | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'curses/curseskeyhandler.C')
| -rw-r--r-- | curses/curseskeyhandler.C | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/curses/curseskeyhandler.C b/curses/curseskeyhandler.C new file mode 100644 index 0000000..3ca30bd --- /dev/null +++ b/curses/curseskeyhandler.C @@ -0,0 +1,75 @@ +/* +** Copyright 2002, Double Precision Inc. +** +** See COPYING for distribution information. +*/ + +#include "curses_config.h" +#include "curseskeyhandler.H" + +#include <functional> +#include <algorithm> + +using namespace std; + +list<CursesKeyHandler *> CursesKeyHandler::handlers; +bool CursesKeyHandler::handlerListModified=true; + +CursesKeyHandler::CursesKeyHandler(int priorityArg) + : priority(priorityArg) +{ + list<CursesKeyHandler *>::iterator b=handlers.begin(), + e=handlers.end(); + + while (b != e) + { + if ( (*b)->priority > priorityArg) + break; + b++; + } + + handlers.insert(b, 1, this); + + handlerListModified=true; +} + +CursesKeyHandler::~CursesKeyHandler() +{ + list<CursesKeyHandler *>::iterator me= + find_if(handlers.begin(), handlers.end(), + bind2nd(equal_to<CursesKeyHandler *>(), this)); + + handlers.erase(me); + handlerListModified=true; +} + +bool CursesKeyHandler::listKeys( vector< pair<string, string> > &list) +{ + return false; +} + +bool CursesKeyHandler::handle(const Curses::Key &key, Curses *focus) +{ + list<CursesKeyHandler *>::iterator b=handlers.begin(), + e=handlers.end(); + + while (b != e) + { + CursesKeyHandler *p= *b++; + + if (p->priority >= 0 && focus) + { + if (focus->processKeyInFocus(key)) + return true; + focus=NULL; + } + + if ( p->processKey(key)) + return true; + } + + if (focus) + if (focus->processKeyInFocus(key)) + return true; + return false; +} |
