[Smtk-developers] View (Continued)

Robert Michael O'Bara bob.obara at kitware.com
Thu Apr 23 11:17:49 EDT 2015


Hi All,

In the new design for Views I had failed to take into consideration the fact that Views might be defined within a C++ piece of code and not just through XML.  In order to avoid developers having to create XML document strings in their code to create a View I modified the proposed View class to no longer just contain a XML string.  Instead it now looks like the following structure which can capture the information in the XML description without forcing XML to spread in the code base.  I also included examples as to how Views could be constructed in C++.

Let me know what you think.

Bob

#include <map>
#include <vector>
#include <string>

class View
{
public:
  class Component
  {
  public:
    Component(const std::string &myName) : m_name(myName)
    {}

    ~Component()
    {
      for(std::size_t i = 0; i < this->m_children.size(); ++i)
        {
        delete this->m_children[i];
        }
    }
    
    const std::string &name() const
    {return this->m_name;}
    
    const std::string &contents() const
    {return this->m_contents;}
    void setContents(const std::string &c)
    {this->m_contents = c;}

    void setAttribute(const std::string &name, const std::string &value)
    {this->m_attributes[name] = value;}

    const std::string &attribute(const std::string &name)
    {return this->m_attributes[name];} // YES I know we need to see if the name is there first
      
    Component *addChild(const std::string &childName)
    {
      Component *c = new Component(childName);
      this->m_children.push_back(c);
      return c;
    }
    std::size_t numberOfChildren() const
    { return this->m_children.size();}
    Component *child(std::size_t i) const
    {return this->m_children[i];}
    
  protected:
    std::string m_name;
    std::string m_contents;
    std::map<std::string, std::string> m_attributes;
    std::vector<Component *> m_children;
  };

  View(const std::string &myType, const std::string &myTitle) : m_type(myType), m_title(myTitle)
  { this->m_details = new Component("Details");}

  ~View()
  {delete this->m_details;}

  const std::string &title() const
  {return this->m_title;}

  const std::string &type() const
  {return this->m_type;}

  Component *details() const
  {return this->m_details;}
  
protected:
  std::string m_title;
  std::string m_type;
  Component *m_details;
};

int main()
{
  View::Component *c;
  View sview("SimpleExpression", "Functions");
  sview.details()->setContents("PolyLinearFunction");

  View aview("Attribute", "BoundaryConditions");
  aview.details()->setAttribute("ModelEntityFilter", "f");
  aview.details()->addChild("SpecifiedHead");
  aview.details()->addChild("SpecifiedFlux");
  aview.details()->addChild("FlowInjectionWell");
  aview.details()->addChild("METData");
  aview.details()->addChild("GroundSurfaceHeatFlux");
  aview.details()->addChild("UseMETData");
  aview.details()->addChild("RayCaster");
  aview.details()->addChild("BottomBoundaryTemp");

  View iview("Instanced", "Time");
  c = iview.details()->addChild("Instance");
  c->setAttribute("Type", "Time");
  c->setContents("Time");

  View rview("Root", "SimBuilder");
  c = rview.details()->addChild("DefaultColor");
  c->setContents("1., 1., 0.5, 1.");
  c = rview.details()->addChild("InvalidColor");
  c->setContents("1., 0.5, 0.5, 1.");
  c = rview.details()->addChild("Views");
  c->addChild("Functions");
  c->addChild("BoundaryConditions");
  c->addChild("Time");
}

Robert M. O'Bara, MEng.
Assistant Director of Scientific Computing

Kitware Inc.
28 Corporate Drive
Suite 101
Clifton Park, NY 12065

Phone: (518) 881- 4931




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/smtk-developers/attachments/20150423/eafe4bb9/attachment.html>


More information about the Smtk-developers mailing list