+
+void SALOME_Session_i::emitMessage(const char* theMessage)
+{
+ class TEvent: public SALOME_Event {
+ public:
+ TEvent(const char * msg) {
+ _msg = msg;
+ }
+ virtual void Execute() {
+ SUIT_Session::session()->activeApplication()->desktop()->emitMessage(_msg);
+ }
+ private:
+ const char* _msg;
+ };
+ if ( SUIT_Session::session() ) {
+ if ( SUIT_Session::session()->activeApplication() ) {
+ if ( SUIT_Session::session()->activeApplication()->desktop() ) {
+ ProcessVoidEvent( new TEvent(theMessage) );
+ }
+ else {
+ MESSAGE("try to emit message '"<<theMessage<<"' but there is no desktop");
+ }
+ }
+ else {
+ MESSAGE("try to emit message '"<<theMessage<<"' but there is no application");
+ }
+ }
+ else {
+ MESSAGE("try to emit message '"<<theMessage<<"' but there is no session");
+ }
+}
+
+void SALOME_Session_i::emitMessageOneWay(const char* theMessage)
+{
+ emitMessage(theMessage);
+}
+
+SALOME::StringSeq* SALOME_Session_i::getSelection()
+{
+ SALOME::StringSeq_var selection = new SALOME::StringSeq;
+ _GUIMutex->lock();
+ if ( SUIT_Session::session() ) {
+ LightApp_Application* app = dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() );
+ if ( app ) {
+ LightApp_SelectionMgr* selMgr = dynamic_cast<LightApp_SelectionMgr*>( app->selectionMgr() );
+ SALOME_ListIO selected;
+ selMgr->selectedObjects( selected );
+ selection->length( selected.Extent() );
+ int nbSel = 0;
+ for ( SALOME_ListIteratorOfListIO it( selected ); it.More(); it.Next() ) {
+ Handle( SALOME_InteractiveObject ) io = it.Value();
+ if ( io->hasEntry() )
+ selection[nbSel++] = CORBA::string_dup( io->getEntry() );
+ }
+ selection->length( nbSel );
+ }
+ }
+ _GUIMutex->unlock();
+ return selection._retn();
+}