<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">I wonder if we need a find method that is template based - like the addItemDefinition method in Definition.h ?<div>Then we have one method that will automatically deal with new item definition types</div><div><br></div><div><div>  typedef smtk::attribute::IntItem IntComp;</div><div>  typedef smtk::attribute::DoubleItem DoubleComp;</div><div>  typedef smtk::attribute::StringItem StringComp;</div><div>  typedef smtk::attribute::ValueItem ValueComp;</div><div>  typedef smtk::attribute::Item AttComp;</div></div><div><br></div><div>attribute->find<IntComp>("Specification Mode")->find<DoubleComp>("Height") ?</div><div><br></div><div>Also note that the above would core dump if the first find fails.</div><div><br></div><div><br></div><div><br><div>
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>Robert M. O'Bara, MEng.<br>Assistant Director of Scientific Computing<br><br>Kitware Inc.<br>28 Corporate Drive<br>Suite 101<br>Clifton Park, NY 12065<br><br>Phone: (518) 881- 4931</div><div><br></div></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">
</div>
<br><div><div>On Nov 11, 2014, at 5:53 PM, David Thompson <<a href="mailto:david.thompson@kitware.com">david.thompson@kitware.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><blockquote type="cite">BTW, the UI will display this as a combo box with Enum entries ("Axis aligned", "General"), and when an entry is selected in the combo box, a widget with specified items for that Enum value will be shown under the combo.<br></blockquote><br>Nice. Now I just need an easy way to access the resulting parameters. I had added methods to Attribute to find items of the correct type:<br><br>  DoubleItem findDouble(const std::string& itemName);<br>  IntItem findInt(const std::string& itemName);<br>  // and so on...<br><br>This has been really useful in smtk/model so far; I can write<br><br>  AttributePtr result;<br>  if (result->findInt("outcome")->value() == OPERATOR_SUCCESS)<br>    // ...<br><br>instead of many lines of code to find the number of items, iterate until I find one of the given name, and downcast it to the proper type. Now I need some way to access children the same way. Does anyone have a preferred method for doing this? I could add methods of the same name to ValueItem so that (for Bob's example), one could descend the tree manually:<br><br>   AttributePtr brickOp;<br>   brickOp->findInt("Specification Mode")->findDouble("Width");<br><br>but this doesn't take active vs inactive children into account. An extra parameter might indicate whether findDouble searched all children or just the active children. Also, the above would not find granchildren without a full specification of the "path". It might be preferable to write<br><br>   brickOp->findDouble("Width", ACTIVE_CHILDREN);<br>   // or NO_CHILDREN or ALL_CHILDREN for the 2nd argument<br><br>instead of<br><br>   brickOp->findInt("Specification Mode")->findDouble("Width");<br><br>Any opinions? Does search order (depth-first vs breadth-first) make a big difference to anyone (assuming the first match is returned)?<br><br><span class="Apple-tab-span" style="white-space:pre"> </span>Thanks,<br><span class="Apple-tab-span" style="white-space:pre">   </span>David</blockquote></div><br></div></body></html>