From 42995d7bf396933ee60c5f89c354ea89cf13df0d Mon Sep 17 00:00:00 2001 From: tpearson Date: Tue, 5 Jan 2010 00:01:18 +0000 Subject: Copy of aRts for Trinity modifications git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/dependencies/arts@1070145 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- gmcop/giomanager.h | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 gmcop/giomanager.h (limited to 'gmcop/giomanager.h') diff --git a/gmcop/giomanager.h b/gmcop/giomanager.h new file mode 100644 index 0000000..4a398f8 --- /dev/null +++ b/gmcop/giomanager.h @@ -0,0 +1,128 @@ + /* + + Copyright (C) 2001 Stefan Westerfeld + stefan@space.twc.de + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + */ + +#ifndef ARTS_GIOMANAGER_H +#define ARTS_GIOMANAGER_H + +#include +#include +#include +#include +#include +#include "arts_export.h" +/* + * BC - Status (2002-03-08): GIOManager + * + * This class will be kept binary compatible (d ptr for extensions). + */ + +namespace Arts { + +class GIOWatch; +class GIOManagerPrivate; +struct GIOManagerSource; +class GIOTimeWatch; +class GIOManagerBlocking; + +/** + * GIOManager performs MCOP I/O inside the Glib event loop. This way, you will + * be able to receive requests and notifications inside Glib application. The + * usual way to set it up is: + * + *
+ * GMainLoop *main_loop = g_main_new(FALSE);  // as usual
+ *
+ * Arts::GIOManager iomanager;
+ * Arts::Dispatcher dispatcher(&iomanager);
+ *
+ * g_main_run(main_loop);                     // as usual
+ * 
+ */ +class ARTS_EXPORT GIOManager : public IOManager { +private: + GIOManagerPrivate *d; + +protected: + std::list fdList; + std::list timeList; + int level; + bool _blocking; + bool fileDescriptorsNeedRecheck; + GMainContext *context; + GIOManagerSource *source; + GIOManagerBlocking *gioManagerBlocking; + +public: + GIOManager(GMainContext *context = 0); + ~GIOManager(); + + void processOneEvent(bool blocking); + void run(); + void terminate(); + void watchFD(int fd, int types, IONotify *notify); + void remove(IONotify *notify, int types); + void addTimer(int milliseconds, TimeNotify *notify); + void removeTimer(TimeNotify *notify); + + /** + * This controls what GIOManager will do while waiting for the result + * of an MCOP request, the possibilities are: + * + * @li block until the request is completed (true) + * @li open a local event loop (false) + * + * It is much easier to write working and reliable code with blocking + * enabled, so this is the default. If you disable blocking, you have + * to deal with the fact that timers, user interaction and similar + * "unpredictable" things will possibly influence your code in all + * places where you make a remote MCOP call (which is quite often in + * MCOP applications). + */ + void setBlocking(bool blocking); + + /* GSource stuff: */ + + /** + * - internal - + * + * (implements the GSource prepare) + */ + gboolean prepare(gint *timeout); + + /** + * - internal - + * + * (implements the GSource check) + */ + gboolean check(); + + /** + * - internal - + * + * (implements the GSource dispatch) + */ + gboolean dispatch(GSourceFunc callback, gpointer user_data); +}; + +} + +#endif /* ARTS_GIOMANAGER_H */ -- cgit v1.2.3