diff --git a/idl/gepetto/viewer/graphical-interface.idl b/idl/gepetto/viewer/graphical-interface.idl index 1e5de671a9262b1adbdcf92748ed61f9c62c6cce..ea054219ae559ab9b8753d7be1bd86a839bc7ee8 100644 --- a/idl/gepetto/viewer/graphical-interface.idl +++ b/idl/gepetto/viewer/graphical-interface.idl @@ -36,6 +36,7 @@ typedef double Color [4]; /// \param input name : name of the new window. /// return the ID of the newly create window. unsigned long createWindow(in string name) raises (Error); + unsigned long getWindowID (in string name) raises (Error); /// Print names of nodes on the SceneViewer-corbaserver terminal. diff --git a/src/graphical-interface.impl.cpp b/src/graphical-interface.impl.cpp index 4b42c2eb98a9d61928e89861bfd8a4894bdeecf5..5d3bcfcc756b06c7baf693506b44a68ad551e575 100644 --- a/src/graphical-interface.impl.cpp +++ b/src/graphical-interface.impl.cpp @@ -180,6 +180,7 @@ namespace graphics { std::string windowName (windowNameCorba); WindowManagerPtr_t newWindow = WindowManager::create (); WindowID windowId = windowManagers_.size (); + windowIDmap_ [windowNameCorba] = windowId; windowManagers_.push_back (newWindow); boost::thread refreshThread (boost::bind (&GraphicalInterface::threadRefreshing, @@ -190,6 +191,20 @@ namespace graphics { } } + GraphicalInterface::WindowID GraphicalInterface::getWindowID (const char* windowNameCorba) + throw (Error) + { + try { + std::string windowName (windowNameCorba); + WindowIDMap_t::iterator it = windowIDmap_.find (windowName); + if (it == windowIDmap_.end ()) + throw Error ("There is no windows with that name"); + return it->second; + } catch (const std::exception& exc) { + throw Error (exc.what ()); + } + } + void GraphicalInterface::refresh () throw (Error) { try { diff --git a/src/graphical-interface.impl.hh b/src/graphical-interface.impl.hh index 628b1e007a96de871c609123a21562ed2c8b2794..d754acff3bfb8698d664629a3f75037e44f0d7e8 100644 --- a/src/graphical-interface.impl.hh +++ b/src/graphical-interface.impl.hh @@ -49,7 +49,9 @@ private: typedef gepetto::Error Error; typedef CORBA::ULong WindowID; typedef std::vector <WindowManagerPtr_t> WindowManagers_t; + typedef std::map <std::string, WindowID> WindowIDMap_t; WindowManagers_t windowManagers_; + WindowIDMap_t windowIDmap_; std::map<std::string, NodePtr_t> nodes_; std::map<std::string, GroupNodePtr_t> groupNodes_; corbaServer::Server* server_; @@ -85,6 +87,7 @@ public: virtual void refresh() throw (Error); virtual WindowID createWindow(const char* windowNameCorba) throw (Error); + virtual WindowID getWindowID (const char* windowNameCorba) throw (Error); virtual void createScene(const char* sceneNameCorba) throw (Error); virtual void createSceneWithFloor(const char* sceneNameCorba) throw (Error);