summaryrefslogtreecommitdiff
path: root/modules/CIAO/examples/Display/NavDisplayGUI_exec/NavDisplayGUI_exec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/examples/Display/NavDisplayGUI_exec/NavDisplayGUI_exec.cpp')
-rw-r--r--modules/CIAO/examples/Display/NavDisplayGUI_exec/NavDisplayGUI_exec.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/modules/CIAO/examples/Display/NavDisplayGUI_exec/NavDisplayGUI_exec.cpp b/modules/CIAO/examples/Display/NavDisplayGUI_exec/NavDisplayGUI_exec.cpp
new file mode 100644
index 00000000000..9a67140671f
--- /dev/null
+++ b/modules/CIAO/examples/Display/NavDisplayGUI_exec/NavDisplayGUI_exec.cpp
@@ -0,0 +1,156 @@
+// $Id$
+
+#include "NavDisplayGUI_exec.h"
+#include <Qt/qapplication.h>
+#include <Qt/qevent.h>
+
+#include "UpdatePositionCmd.h"
+#include "QuitCmd.h"
+#include "AddNavUnitCmd.h"
+#include "Worker.h"
+
+static const char *argv[] =
+{
+ "NavDisplayGUI"
+};
+
+/// Default constructor.
+MyImpl::NavDisplayGUI_exec_impl::NavDisplayGUI_exec_impl (void)
+ : unit_(1, "Model T3+"), loc_(50, 20, 0)
+{
+}
+
+/// Default destructor.
+MyImpl::NavDisplayGUI_exec_impl::~NavDisplayGUI_exec_impl (void)
+{
+}
+
+// Operations from HUDisplay::NavDisplay
+
+void
+MyImpl::NavDisplayGUI_exec_impl::push_Refresh (
+ HUDisplay::tick * /* ev */)
+{
+ //ACE_DEBUG ((LM_DEBUG, "ENTER: MyImpl::NavDisplayGUI_exec_impl::push_Refresh()\n"));
+
+ // Refresh position
+ HUDisplay::position_var loc =
+ this->context_->get_connection_GPSLocation ();
+
+ CORBA::Long lx = loc->posx ();
+
+ CORBA::Long ly = loc->posy ();
+
+ mutex_.acquire ();
+
+ loc_.x_ = lx % 500;
+ loc_.y_ = ly % 300;
+
+ this->unit_.setLocation (loc_);
+
+ mutex_.release ();
+
+ //ACE_DEBUG ((LM_DEBUG, "DISPLAY: Current Location is: %d %d\n", int(attrs.x_), int(attrs.y_)));
+
+ RootPanel *root_pane = worker_->getMainWindow ();
+
+ if (root_pane != 0)
+ {
+ UpdatePositionCmd *cmd = UpdatePositionCmd::create (
+ root_pane,
+ &(this->unit_));
+ QCustomEvent *evt = new QCustomEvent (QEvent::User, cmd);
+ QApplication::postEvent (root_pane, evt);
+ }
+
+ //ACE_DEBUG ((LM_DEBUG, "LEAVE: MyImpl::NavDisplayGUI_exec_impl::push_Refresh()\n"));
+}
+
+// Operations from Components::SessionComponent
+void
+MyImpl::NavDisplayGUI_exec_impl::set_session_context (Components::SessionContext_ptr ctx)
+{
+ this->context_ =
+ HUDisplay::CCM_NavDisplay_Context::_narrow (ctx);
+
+ if (CORBA::is_nil (this->context_.in ()))
+ {
+ throw CORBA::INTERNAL ();
+ }
+ // Urm, we actually discard exceptions thown from this operation.
+}
+
+void
+MyImpl::NavDisplayGUI_exec_impl::configuration_complete (void)
+{
+}
+
+void
+MyImpl::NavDisplayGUI_exec_impl::ccm_activate (void)
+{
+ worker_ = new Worker (sizeof (argv) / sizeof (argv[0]),
+ const_cast<char **> (argv));
+
+ if (worker_->activate (THR_NEW_LWP | THR_JOINABLE, 1) != 0)
+ {
+ ACE_DEBUG((LM_ERROR,
+ "Cannot activate client threads\n"));
+ throw Components::CCMException ();
+ }
+
+ worker_->waitUntillInitialized ();
+
+ AddNavUnitCmd *cmd = AddNavUnitCmd::create (
+ worker_->getMainWindow(),
+ &(this->unit_));
+ QCustomEvent *evt = new QCustomEvent (QEvent::User, cmd);
+ QApplication::postEvent (worker_->getMainWindow (), evt);
+}
+
+void
+MyImpl::NavDisplayGUI_exec_impl::ccm_passivate (void)
+{
+ RootPanel *target = worker_->getMainWindow ();
+
+ if (target != 0)
+ {
+ QuitCmd *cmd = QuitCmd::create( target);
+ QCustomEvent *evt = new QCustomEvent (QEvent::User, cmd);
+ QApplication::postEvent (target, evt);
+ worker_->thr_mgr ()->wait ();
+ }
+
+ delete worker_;
+}
+
+void
+MyImpl::NavDisplayGUI_exec_impl::ccm_remove (void)
+{
+}
+
+/// Default ctor.
+MyImpl::NavDisplayGUIHome_exec_impl::NavDisplayGUIHome_exec_impl (void)
+{
+}
+
+/// Default dtor.
+MyImpl::NavDisplayGUIHome_exec_impl::~NavDisplayGUIHome_exec_impl (void)
+{
+}
+
+// Explicit home operations.
+
+// Implicit home operations.
+
+::Components::EnterpriseComponent_ptr
+MyImpl::NavDisplayGUIHome_exec_impl::create (void)
+{
+ return new MyImpl::NavDisplayGUI_exec_impl;
+}
+
+
+extern "C" NAVDISPLAY_EXEC_Export ::Components::HomeExecutorBase_ptr
+createNavDisplayHome_Impl (void)
+{
+ return new MyImpl::NavDisplayGUIHome_exec_impl;
+}