Project stdui: "Simple Type Dialog User-Interface"

|
Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

cevent.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2004 by Serge Lussier                                   *
00003  *   serge.lussier@videotron.ca                                            *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
00019  ***************************************************************************/
00020 #ifndef NCDKNEVENT_H
00021 #define NCDKNEVENT_H
00022 
00023 #include <list>
00024 #include <ncurses.h>
00025 
00026 #include <crect.h>
00027 
00028 
00029 
00030 namespace stdui {
00031 
00032 /*
00033 #define KEY_DOWN  0402      down-arrow key 
00034 #define KEY_UP    0403      up-arrow key 
00035 #define KEY_LEFT  0404      left-arrow key 
00036 #define KEY_RIGHT 0405      right-arrow key 
00037 #define KEY_HOME  0406      home key 
00038 #define KEY_BACKSPACE   0407      backspace key 
00039 #define KEY_F0    0410      Function keys.  Space for 64 
00040 #define KEY_F(n)  (KEY_F0+(n))    Value of function key n 
00041 #define KEY_DL    0510      delete-line key 
00042 #define KEY_IL    0511      insert-line key 
00043 #define KEY_DC    0512      delete-character key 
00044 #define KEY_IC    0513      insert-character key 
00045 #define KEY_EIC      0514      sent by rmir or smr in insert mode 
00046 #define KEY_CLEAR 0515      clear-screen or erase key 
00047 #define KEY_EOS      0516      clear-to-end-of-screen key 
00048 #define KEY_EOL      0517      clear-to-end-of-line key 
00049 #define KEY_SF    0520      scroll-forward key 
00050 #define KEY_SR    0521      scroll-backward key 
00051 #define KEY_NPAGE 0522      next-page key 
00052 #define KEY_PPAGE 0523      previous-page key 
00053 #define KEY_STAB  0524      set-tab key 
00054 #define KEY_CTAB  0525      clear-tab key 
00055 #define KEY_CATAB 0526      clear-all-tabs key 
00056 #define KEY_ENTER 0527      enter/send key 
00057 #define KEY_PRINT 0532      print key 
00058 #define KEY_LL    0533      lower-left key (home down) 
00059 #define KEY_A1    0534      upper left of keypad 
00060 #define KEY_A3    0535      upper right of keypad 
00061 #define KEY_B2    0536      center of keypad 
00062 #define KEY_C1    0537      lower left of keypad 
00063 #define KEY_C3    0540      lower right of keypad 
00064 #define KEY_BTAB  0541      back-tab key 
00065 #define KEY_BEG      0542      begin key 
00066 #define KEY_CANCEL   0543      cancel key 
00067 #define KEY_CLOSE 0544      close key 
00068 #define KEY_COMMAND  0545      command key 
00069 #define KEY_COPY  0546      copy key 
00070 #define KEY_CREATE   0547      create key 
00071 #define KEY_END      0550      end key 
00072 #define KEY_EXIT  0551      exit key 
00073 #define KEY_FIND  0552      find key 
00074 #define KEY_HELP  0553      help key 
00075 #define KEY_MARK  0554      mark key 
00076 #define KEY_MESSAGE  0555      message key 
00077 #define KEY_MOVE  0556      move key 
00078 #define KEY_NEXT  0557      next key 
00079 #define KEY_OPEN  0560      open key 
00080 #define KEY_OPTIONS  0561      options key 
00081 #define KEY_PREVIOUS 0562      previous key 
00082 #define KEY_REDO  0563      redo key 
00083 #define KEY_REFERENCE   0564      reference key 
00084 #define KEY_REFRESH  0565      refresh key 
00085 #define KEY_REPLACE  0566      replace key 
00086 #define KEY_RESTART  0567      restart key 
00087 #define KEY_RESUME   0570      resume key 
00088 #define KEY_SAVE  0571      save key 
00089 #define KEY_SBEG  0572      shifted begin key 
00090 #define KEY_SCANCEL  0573      shifted cancel key 
00091 #define KEY_SCOMMAND 0574      shifted command key 
00092 #define KEY_SCOPY 0575      shifted copy key 
00093 #define KEY_SCREATE  0576      shifted create key 
00094 #define KEY_SDC      0577      shifted delete-character key 
00095 #define KEY_SDL      0600      shifted delete-line key 
00096 #define KEY_SELECT   0601      select key 
00097 #define KEY_SEND  0602      shifted end key 
00098 #define KEY_SEOL  0603      shifted clear-to-end-of-line key 
00099 #define KEY_SEXIT 0604      shifted exit key 
00100 #define KEY_SFIND 0605      shifted find key 
00101 #define KEY_SHELP 0606      shifted help key 
00102 #define KEY_SHOME 0607      shifted home key 
00103 #define KEY_SIC      0610      shifted insert-character key 
00104 #define KEY_SLEFT 0611      shifted left-arrow key 
00105 #define KEY_SMESSAGE 0612      shifted message key 
00106 #define KEY_SMOVE 0613      shifted move key 
00107 #define KEY_SNEXT 0614      shifted next key 
00108 #define KEY_SOPTIONS 0615      shifted optios key 
00109 #define KEY_SPREVIOUS   0616      shifted previous key 
00110 #define KEY_SPRINT   0617      shifted print key 
00111 #define KEY_SREDO 0620      shifted redo key 
00112 #define KEY_SREPLACE 0621      shifted replace key 
00113 #define KEY_SRIGHT   0622      shifted right-arrowkey 
00114 #define KEY_SRSUME   0623      shifted resume key 
00115 #define KEY_SSAVE 0624      shifted save key 
00116 #define KEY_SSUSPEND 0625      shifted suspend key 
00117 #define KEY_SUNDO 0626      shifted undo key 
00118 #define KEY_SUSPEND  0627      suspend key 
00119 #define KEY_UNDO  0630      undo key 
00120 #define KEY_MOUSE 0631      Mouse event has occurred 
00121 #define KEY_RESIZE   0632      Terminal resize event 
00122 #define KEY_EVENT 0633      We were interrupted by an event
00123 */
00124 
00125 struct events{
00126    typedef unsigned long val;
00127 
00128    static const events::val timertic               =1;
00129    static const events::val mousebuttonpress       =2;           // mouse button pressed
00130    static const events::val mousebuttonrelease     =3;         // mouse button released
00131    static const events::val mousebuttonclick       =4;        // mouse button click
00132    static const events::val mousebuttondblclick    =5;        // mouse button double click
00133    static const events::val mousemove              =6;               // mouse move
00134    static const events::val keypress               =7;                // key pressed
00135    static const events::val keyrelease             =8;              // key released
00136    static const events::val focusin                =9;                 // keyboard focus received
00137    static const events::val focusout               =10;                // keyboard focus lost
00138    static const events::val cancel             =11;              // mouse enters widget
00139    //static const events::val mouseleave             =12;              // mouse leaves widget
00140    static const events::val move                   =13;                    // move widget
00141    static const events::val resize=14;                  // resize widget
00142    static const events::val quit=15;                    // request to quit application
00143    static const events::val drop=19;                    // actual drop
00144    static const events::val windowstatechange=21;       // window state has changed
00145    static const events::val tabnextfocus=22;
00146    static const events::val tabrevfocus=23;
00147    static const events::val hide=24;
00148    static const events::val show=25;
00149    static const events::val save=26;
00150    static const events::val open=27;
00151    static const events::val close=28;
00152    static const events::val create=29;
00153    static const events::val update=30;
00154    static const events::val toplevelupdate=31;
00155    static const events::val termresize=32;
00156    static const events::val resizeevent=33;
00157    static const events::val postupdate=34;
00158    static const events::val activatemenu=35;
00159    static const events::val menudone=36;
00160 
00161 }; // struct events
00162 
00163 struct event_type{
00164    typedef unsigned int val;
00165    static const val keyevent =1;
00166    static const val mouseevent =2;
00167    static const val timer =4;
00168    static const val messageevent=8;
00169    static const val user=0x10;
00170 };
00171 
00172 
00173 
00174 class stdwindow;
00175 class stdobject;
00176 
00177 using std::list;
00178 class cevent{
00184 public:
00185 
00186    typedef list<cevent*> list;
00187    typedef list::iterator iterator;
00188 
00189    cevent();
00190    cevent(event_type::val t, events::val v) : __type(t), __e(v), _sender(0l), _target(0l){  }
00191    cevent(int _ncurses_event) : __nce(_ncurses_event), __type(0), __e(0), _sender(0l), _target(0l){  }
00192    cevent(stdobject* s, event_type::val t, events::val v) : __type(t), __e(v), _sender(s), _target(0l){  }
00193    cevent(stdobject* sender, stdobject* target, event_type::val t, events::val v) : __type(t), __e(v), _sender(sender), _target(target){  }
00194    virtual ~cevent();
00195 
00201     template<typename _t> _t*  eventclass()
00202     {
00203        _t* _e = dynamic_cast<_t*>(this);
00204        return _e;
00205     }
00210      events::val event() { return __e; }
00211 
00212 
00217      int ncursesevent() { return __nce; }
00218 
00223     void setevent( events::val e ) { __e = e; }
00224 
00229      void seteventtype( event_type::val t ) { __type = t;  }
00230 
00235      event_type::val type() { return __type; }
00240     stdobject* sender(){ return _sender; }
00241 
00245     void setsender(stdobject* s)    {  _sender = s;    }
00246 
00247     static void clear(cevent::list& l);
00248 private:
00249     events::val __e;           
00250     event_type::val __type;    
00251     int __nce;             
00252     virtual void _translate();
00253 
00254     stdobject* _sender;
00255     stdobject* _target;
00256 };
00257 
00258 class ckeypressevent : public cevent{
00259 public:
00260    ckeypressevent(): cevent(){}
00261 
00262    ckeypressevent(int kv, bool meta):cevent(event_type::keyevent, events::keypress){
00263       key = kv;
00264       bmeta = meta;
00265       _translate();
00266    }
00271     int keyvalue(){ return key; }
00276    bool ismeta()    { return bmeta;  }
00277 
00278 private:
00279    virtual void _translate();
00280    int key;
00281    bool bmeta;
00282 };
00283 
00284 
00285 
00286 class cmouseevent : public cevent{
00287 public:
00288    cmouseevent() : cevent(event_type::mouseevent, 0){}
00289    cmouseevent(MEVENT mev): cevent(event_type::mouseevent, 0 ), _data(mev){ _translate(); }
00290 
00294     int y()
00295     {
00296         return pos.y();
00297     }
00298 
00302     int x()
00303     {
00304         return pos.x();
00305     }
00306     const cxy& position()const  { return pos; }
00307     const cxy& local()const  { return localpos; }
00308 
00309 
00310    int left :1;
00311    int middle: 1;
00312    int right: 1;
00313 
00314     bool isleft();
00315     bool ismiddle();
00316     bool isright();
00317 private:
00318     MEVENT _data;
00319     long mleft, mright, mmiddle;
00320     cxy pos;
00321     cxy localpos;
00322     cxy _oldpos;
00323     virtual void _translate();
00324     bool identify_event();
00325 
00326 };
00327 
00328 
00329 
00330 
00331 class cmessageevent : public cevent{
00332 public:
00333    cmessageevent(): cevent() {}
00334    cmessageevent(events::val ev) : cevent(event_type::messageevent, ev)
00335    {}
00336    cmessageevent(events::val ev, stdobject* sender) : cevent(event_type::messageevent, ev)
00337    {}
00338    cmessageevent(events::val ev, stdobject* sender, stdobject* target) : cevent(sender, target, event_type::messageevent,ev)
00339    {}
00340 
00341 private:
00342 
00343 };
00344 
00345 
00346 
00347 //class nmouse
00348 
00349 
00350 
00351 
00352 template<typename _dt> class cmsgevent : public cevent{
00353    public:
00354    cmsgevent(): cevent() {}
00355    cmsgevent(events::val ev) : cevent(event_type::user, ev){ _sender = 0l;}
00356    cmsgevent(events::val ev, stdwindow* sender) : cevent(event_type::user, ev){ _sender = sender;}
00357 
00358    cmsgevent( events::val ev, stdobject* sender, stdobject* target, _dt data) : cevent(event_type::user, ev, sender, target){
00359       data_priv = data;
00360 
00361    }
00362    _dt data() { return data_priv; }
00363 private:
00364     _dt data_priv;
00365 };
00366 
00367 
00368 class ctimerevent : public cevent{
00369 public:
00370 
00371 };
00372 
00373 
00374 
00375 };
00376 
00377 #endif

API Documentation Generated by:  doxygen 1.4.0
About the author | Site started with trial version of DreamWeaver MX 2004 | Finalizing with  | Contact | ©2005, Serge Lussier ( Bretzel )