void ScriptNode::paste( Node *parent ) { ApplicationRoot *app = applicationRoot(); if( !app ) { throw( "ScriptNode has no ApplicationRoot" ); } IECore::ConstStringDataPtr s = IECore::runTimeCast<const IECore::StringData>( app->getClipboardContents() ); if( s ) { parent = parent ? parent : this; // set up something to catch all the newly created nodes StandardSetPtr newNodes = new StandardSet; parent->childAddedSignal().connect( boost::bind( (bool (StandardSet::*)( IECore::RunTimeTypedPtr ) )&StandardSet::add, newNodes.get(), ::_2 ) ); // do the paste execute( s->readable(), parent ); // transfer the newly created nodes into the selection selection()->clear(); for( size_t i = 0, e = newNodes->size(); i < e; i++ ) { StandardSet::Member *member = newNodes->member( i ); if( member->isInstanceOf( Node::staticTypeId() ) ) { selection()->add( member ); } } } }
static IECore::ObjectPtr getClipboardContents( ApplicationRoot &a ) { IECore::ConstObjectPtr o = a.getClipboardContents(); if( o ) { return o->copy(); } return 0; }