Add missing license headers on *.hh files and others
[oweals/cde.git] / cde / programs / dtmail / dtmail / Notifier.hh
1 /*
2  * CDE - Common Desktop Environment
3  *
4  * Copyright (c) 1993-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these libraries and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  */
23 /*
24  *+SNOTICE
25  *
26  *      $XConsortium: Notifier.hh /main/4 1996/04/21 19:42:50 drk $
27  *
28  *      RESTRICTED CONFIDENTIAL INFORMATION:
29  *      
30  *      The information in this document is subject to special
31  *      restrictions in a confidential disclosure agreement between
32  *      HP, IBM, Sun, USL, SCO and Univel.  Do not distribute this
33  *      document outside HP, IBM, Sun, USL, SCO, or Univel without
34  *      Sun's specific written approval.  This document and all copies
35  *      and derivative works thereof must be returned or destroyed at
36  *      Sun's request.
37  *
38  *      Copyright 1993 Sun Microsystems, Inc.  All rights reserved.
39  *
40  *+ENOTICE
41  */
42
43 #ifndef NOTIFIER_HH
44 #define NOTIFIER_HH
45
46 #include <X11/Intrinsic.h>
47
48 #include <DtMail/DtMailTypes.h>
49 #include <DtMail/DtVirtArray.hh>
50 #include <DtMail/HashTable.hh>
51
52 class NotifyEvent {
53   public:
54     NotifyEvent(void);
55     virtual ~NotifyEvent(void);
56
57     virtual void eventTriggered(void); // PURE VIRTUAL
58 };
59
60 class Notifier {
61   public:
62     Notifier(XtAppContext);
63     virtual ~Notifier(void);
64
65     void notify(NotifyEvent & event,
66                 DtMailBoolean fast_path = DTM_FALSE);
67
68     typedef void * IntervalId;
69     IntervalId addInterval(int interval_ms,
70                            DtMailBoolean multi_shot,
71                            NotifyEvent & event);
72     void removeInterval(IntervalId id);
73
74     void signalEvent(int sig, NotifyEvent & event);
75     void removeSignal(int sig);
76
77   private:
78     int                         _event_fds[2];
79     DtVirtArray<NotifyEvent *>  _events;
80
81     struct TimerSearch;
82     friend TimerSearch;
83
84     class EventKey : public ObjectKey {
85       public:
86             EventKey(void * key);
87             ~EventKey(void);
88             
89             virtual int operator==(ObjectKey &);
90             virtual int operator!=(ObjectKey &);
91             virtual int operator<(ObjectKey &);
92             virtual int operator>(ObjectKey &);
93             virtual int operator<=(ObjectKey &);
94             virtual int operator>=(ObjectKey &);
95             
96             virtual HashVal hashValue(void);
97
98             void * keyValue(void) { return _key; }
99           private:
100             void *      _key;
101         };
102
103     struct TimerEvent {
104         NotifyEvent     *event;
105         DtMailBoolean   multi_shot;
106         int             interval;
107         XtIntervalId    id;
108     };
109
110     HashTable<TimerEvent *>     _timer_events;
111
112     XtAppContext                _context;
113     XtInputId                   _id;
114
115     static void eventProc(XtPointer client_data, int * fd, XtInputId *);
116     static void timerProc(XtPointer, XtIntervalId *);
117
118     static int deleteTimerEvent(ObjectKey &, TimerEvent *, void *);
119
120     struct TimerSearch {
121         TimerEvent *    srch_event;
122         EventKey *      key;
123     };
124     static int searchTimer(ObjectKey &, TimerEvent *, void *);
125 };
126
127 #endif