I was close before, just turns out my MEL is rusty and I didn't realize I could have a variable at the end of control declarations for use later on when I want to update the display.
Today's problem:
I want to attach a file browser to my node's string attribute.
Today's solution:
As far as I can tell, the only way to have controls other than simple attribute input/outputs is by using the callCustom command. Here's some code:
The main template function
global proc AEADANodeTemplate( string $nodeName ) { editorTemplate -beginScrollLayout; //File Attributes editorTemplate -beginLayout "File Attributes" -collapse 0; editorTemplate -addControl "input"; editorTemplate -callCustom "AE_file_browse" //create the file browser "AE_file_browse_repeat" //update the file browser "AudioFile"; //file location attribute editorTemplate -addControl "SampW"; editorTemplate -addControl "FrameR"; editorTemplate -addControl "NFrames"; editorTemplate -addControl "NChan"; editorTemplate -endLayout; //Amplitude editorTemplate -beginLayout "Amplitude" -collapse 0; editorTemplate -addControl "amplitudeL"; editorTemplate -addControl "amplitudeR"; editorTemplate -endLayout; AEdependNodeTemplate $nodeName; editorTemplate -addExtraControls; editorTemplate -endScrollLayout; }
The browser functions
global proc AE_file_browse(string $attr){ rowLayout -nc 3; text -label "Audio File"; textField -fileName `getAttr $attr` LocationText; symbolButton -image "navButtonBrowse.xpm" -c ("loadPopup(\"" + $attr + "\")"); setParent ..; } global proc AE_file_browse_repeat(string $attr){ textField -e -fileName `getAttr $attr` LocationText; }
The browser popup function
global proc loadPopup(string $attr){ string $loc = `fileDialog -dm "*.wav"`; if ($loc != ""){ setAttr -type "string" $attr $loc; textField -e -fileName `getAttr $attr` LocationText; } }
And that's all there is to it. I still need to fix up the Python side of things so the file is loaded once the file path has been chosen.
No comments:
Post a Comment