OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Michael Schloh
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-src Date: 17-Jan-2003 17:44:10
Branch: HEAD Handle: 2003011716440900
Added files:
openpkg-src/mico qtmico.cc
Log:
Add source from 2.3.9 snapshot to merge with 2.3.7 code for OpenPKG
1.2.
Summary:
Revision Changes Path
1.1 +214 -0 openpkg-src/mico/qtmico.cc
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-src/mico/qtmico.cc
============================================================================
$ cvs diff -u -r0 -r1.1 qtmico.cc
--- /dev/null 2003-01-17 17:44:10.000000000 +0100
+++ qtmico.cc 2003-01-17 17:44:10.000000000 +0100
@@ -0,0 +1,214 @@
+/*
+ * Qt support for MICO
+ * Copyright (C) 1997 Lars Doelle
+ *
+ * Rewritten by Karel Gardas, <[EMAIL PROTECTED]>
+ * Copyright (C) 2002 ObjectSecurity Ltd.
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Send comments and/or bug reports to:
+ * [EMAIL PROTECTED]
+ */
+
+#define MICO_CONF_IMR
+#include <CORBA-SMALL.h>
+#include <mico/template_impl.h>
+#include <mico/qtmico.h>
+#include <algorithm>
+
+//
+// CApp
+//
+CApp::CApp(int argc, char *argv[])
+ : QApplication (argc,argv)
+{
+ qtd_ = new QTDispatcher (this);
+ connect(this, SIGNAL(aboutToQuit()), this, SLOT(shutdown()));
+ connect(this, SIGNAL(lastWindowClosed()), this, SLOT(shutdown()));
+ finished_ = FALSE;
+}
+
+//
+// FileEvent
+//
+FileEvent::~FileEvent()
+{
+ delete xid_;
+}
+
+FileEvent::FileEvent()
+{
+}
+
+FileEvent::FileEvent
+(QTDispatcher* disp,
+ CORBA::DispatcherCallback* cb,
+ int fd,
+ QSocketNotifier::Type evq,
+ CORBA::Dispatcher::Event evc)
+ : disp_(disp), xid_(new QSocketNotifier(fd, evq)), cb_(cb), ev_(evc)
+{
+ QObject::connect(xid_, SIGNAL (activated(int)),
+ this, SLOT (activated(int)));
+}
+
+void
+FileEvent::activated(int /*fd*/)
+{
+ cb_->callback(disp_, ev_);
+}
+//
+// TimerEvent
+//
+TimerEvent::~TimerEvent()
+{
+ delete xid_;
+}
+
+TimerEvent::TimerEvent()
+{
+}
+
+TimerEvent::TimerEvent
+(QTDispatcher* disp,
+ CORBA::DispatcherCallback* cb,
+ long tmout)
+ : xid_(new QTimer()), cb_(cb), disp_(disp)
+{
+ QObject::connect(xid_, SIGNAL (timeout()), this, SLOT (timeout()));
+ xid_->start(tmout, TRUE);
+}
+
+void
+TimerEvent::timeout()
+{
+ disp_->remove(this);
+ cb_->callback(disp_, CORBA::Dispatcher::Timer);
+ delete this;
+}
+//
+// create & destroy
+//
+QTDispatcher::QTDispatcher(CApp* ctx)
+ : ctx_(ctx)
+{
+}
+
+QTDispatcher::~QTDispatcher()
+{
+ list<FileEvent*>::iterator i;
+ for (i = fevents_.begin(); i != fevents_.end(); ++i) {
+ (*i)->cb_->callback(this, Remove);
+ delete *i;
+ }
+
+ list<TimerEvent*>::iterator j;
+ for (j = tevents_.begin(); j != tevents_.end(); ++j) {
+ (*j)->cb_->callback(this, Remove);
+ delete *j;
+ }
+}
+//
+// adding events
+//
+void
+QTDispatcher::rd_event(CORBA::DispatcherCallback* cb, CORBA::Long fd)
+{
+ fevents_.push_back(new FileEvent(this, cb, fd, QSocketNotifier::Read,
+ CORBA::Dispatcher::Read));
+}
+
+void
+QTDispatcher::wr_event(CORBA::DispatcherCallback* cb, CORBA::Long fd)
+{
+ fevents_.push_back(new FileEvent(this, cb, fd, QSocketNotifier::Write,
+ CORBA::Dispatcher::Write));
+}
+
+void
+QTDispatcher::ex_event(CORBA::DispatcherCallback* cb, CORBA::Long fd)
+{
+ fevents_.push_back(new FileEvent(this, cb, fd, QSocketNotifier::Exception,
+ CORBA::Dispatcher::Except));
+}
+
+void
+QTDispatcher::tm_event(CORBA::DispatcherCallback* cb, CORBA::ULong tmout)
+{
+ // both Qt and MICO timeouts are millisecs
+ tevents_.push_back(new TimerEvent(this, cb, tmout));
+}
+
+void
+QTDispatcher::remove(CORBA::DispatcherCallback* cb, CORBA::Dispatcher::Event e)
+{
+ if (e == All || e == Timer) {
+ list<TimerEvent*>::iterator i, next;
+ for (i = tevents_.begin(); i != tevents_.end(); i = next) {
+ next = i;
+ ++next;
+ if ((*i)->cb_ == cb) {
+ delete *i;
+ tevents_.erase (i);
+ }
+ }
+ }
+ if (e == All || e == Read || e == Write || e == Except) {
+ list<FileEvent*>::iterator i, next;
+ for (i = fevents_.begin(); i != fevents_.end(); i = next) {
+ next = i;
+ ++next;
+ if ((*i)->cb_ == cb && (e == All || e == (*i)->ev_)) {
+ delete *i;
+ fevents_.erase(i);
+ }
+ }
+ }
+}
+
+void
+QTDispatcher::remove(TimerEvent *t)
+{
+ list<TimerEvent*>::iterator i
+ = find(tevents_.begin(), tevents_.end(), t);
+ assert(i != tevents_.end());
+ tevents_.erase(i);
+}
+//
+// misc
+//
+void
+QTDispatcher::run(CORBA::Boolean infinite)
+{
+ do {
+ ctx_->processOneEvent();
+ } while (infinite);
+}
+
+void
+QTDispatcher::move(CORBA::Dispatcher*)
+{
+ assert (0);
+}
+
+CORBA::Boolean
+QTDispatcher::idle() const
+{
+ return fevents_.size() + tevents_.size() == 0;
+}
+
+#include "qtmico.moc"
+
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]