fromXmlList static method

DrawerModel? fromXmlList(
  1. WidgetModel parent,
  2. List<XmlElement> elements
)

Implementation

static DrawerModel? fromXmlList(WidgetModel parent, List<XmlElement> elements)
{
  DrawerModel? model;
  try
  {
    bool handleLeft = false;
    bool handleRight = false;
    bool handleTop = false;
    bool handleBottom = false;
    double? sizeLeft;
    double? sizeRight;
    double? sizeTop;
    double? sizeBottom;
    String? idLeft;
    String? idRight;
    String? idTop;
    String? idBottom;

    XmlElement xml = XmlElement(XmlName.fromString('DRAWER')); // create a single drawer element
    for (var element in elements) {
      XmlElement node = element.copy();

      String? side = Xml.attribute(node: node, tag: 'side')?.trim().toLowerCase();
      if (side != null)
      {
        // build the drawer elements
        XmlElement drawer = XmlElement(XmlName(side.toUpperCase())); // create a sidedrawer from template

        // add attributes
        for (var attribute in node.attributes) {
          var name = attribute.localName.toLowerCase();
          if (name != "width" && name != "height" && name != "side") drawer.attributes.add(XmlAttribute(XmlName(name), attribute.value));
        }

        // Assign ids
        switch (side)
        {
          case 'left':
            idLeft     = Xml.attribute(node: node, tag: 'id');
            handleLeft = S.toBool(Xml.attribute(node: node, tag: 'handle')) == true;
            sizeLeft   = S.toDouble(Xml.attribute(node: node, tag: 'size'));
            break;

          case 'right':
            idRight     = Xml.attribute(node: node, tag: 'id');
            handleRight = S.toBool(Xml.attribute(node: node, tag: 'handle')) == true;
            sizeRight  = S.toDouble(Xml.attribute(node: node, tag: 'size'));
            break;

          case 'top':
            idTop     = Xml.attribute(node: node, tag: 'id');
            handleTop = S.toBool(Xml.attribute(node: node, tag: 'handle')) == true;
            sizeTop   = S.toDouble(Xml.attribute(node: node, tag: 'size'));
            break;

          case 'bottom':
            idBottom     = Xml.attribute(node: node, tag: 'id');
            handleBottom = S.toBool(Xml.attribute(node: node, tag: 'handle')) == true;
            sizeBottom   = S.toDouble(Xml.attribute(node: node, tag: 'size'));
            break;
        }

        List<XmlElement> nodes = [];
        for (var node in node.children) {
          if (node.nodeType == XmlNodeType.ELEMENT) nodes.add(node.copy() as XmlElement);
        }

        drawer.children.addAll(nodes);
        xml.children.add(drawer);
      }

      else {
        Log().error('Unable to parse a drawer attributes', caller: 'drawer.Model => Model.fromXmlList()');
      }
    }

    // Create View Model
    model = DrawerModel(parent, Xml.get(node: xml, tag: 'id'), handleLeft: handleLeft, handleRight: handleRight, handleTop: handleTop, handleBottom: handleBottom, sizeLeft: sizeLeft, sizeRight: sizeRight, sizeTop: sizeTop, sizeBottom: sizeBottom, idLeft: idLeft, idRight: idRight, idTop: idTop, idBottom: idBottom);

    // Deserialize
    model.deserialize(xml);
  }
  catch(e)
  {
    Log().error('Unable to parse a drawer element', caller: 'drawer.Model => Model.fromXmlList()');
    Log().exception(e,  caller: 'drawer.Model');
    model = null;
  }
  return model;
}