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 ); } } } }
void ScriptNode::copy( const Node *parent, const Set *filter ) { ApplicationRoot *app = applicationRoot(); if( !app ) { throw( "ScriptNode has no ApplicationRoot" ); } std::string s = serialise( parent, filter ); app->setClipboardContents( new IECore::StringData( s ) ); }
static IECore::ObjectPtr getClipboardContents( ApplicationRoot &a ) { IECore::ConstObjectPtr o = a.getClipboardContents(); if( o ) { return o->copy(); } return 0; }