Esempio n. 1
0
CCoreAudioChannelLayout::CCoreAudioChannelLayout(AudioChannelLayout& layout) :
m_pLayout(NULL)
{
  CopyLayout(layout);
}
//------------------------------------------------------------------------------
CIwAttrInstance* CUIEdProjectUI::Add(CIwAttrInstance* inst,CIwAttrInstance* parent,int actionModifer)
{
    if (inst==NULL || parent==NULL) return NULL;

    CUIEdAttrLinkData* link=GetLink(inst);
    if (link==NULL) return NULL;

    if ((actionModifer&ACTIONMODIFIER_TAKEALL)==0)
        link=ResolveAddItem(link);

    CUIEdAttrLinkData* sibling=NULL;
    CUIEdAttrLinkData* parentLink=GetLink(parent);
    CUIEdAttrLinkData* layout=NULL;
    CUIEdAttrLinkData* layoutSibling=NULL;
    if (parentLink==NULL) return NULL;

    if ((actionModifer&ACTIONMODIFIER_INSERT) && parentLink->m_Parent!=NULL)
    {
        sibling=parentLink;
        parentLink=parentLink->m_Parent;
    }

    if (link->m_Type==LAYOUTITEM_FOCUS)
    {
        if (parentLink->m_Type!=LAYOUTITEM_ELEMENT)
            parentLink=parentLink->GetParent(LAYOUTITEM_ELEMENT);

        if (parentLink==NULL)
            return NULL;

        return CopyFocus(link,parentLink);
    }

    if (link->m_Type==LAYOUTITEM_PROPERTYSET)
    {
        if (parentLink->m_Type!=LAYOUTITEM_ELEMENT)
            parentLink=parentLink->GetParent(LAYOUTITEM_ELEMENT,&sibling);

        if (parentLink==NULL)
            return NULL;

        if (parentLink->m_Element->m_Class->GetMember(link->m_Element->m_Parent->m_Member->m_Name)==NULL)
            return NULL;

        link=Copy(link,parentLink,sibling,actionModifer);
        if (link==NULL) return NULL;

        AddToElement(link,parentLink,sibling);
        return link->m_Element;
    }

    if (parentLink->m_Type==LAYOUTITEM_FOCUS || parentLink->m_Type==LAYOUTITEM_PROPERTYSET)
        parentLink=parentLink->GetParent(LAYOUTITEM_ELEMENT,&sibling);

    if (parentLink->m_Type==LAYOUTITEM_LAYOUTITEM)
        parentLink=parentLink->GetParent(LAYOUTITEM_LAYOUT,&sibling);

    if (link->m_Type==LAYOUTITEM_ELEMENT)
    {
        if (parentLink->m_Type==LAYOUTITEM_LAYOUT)
        {
            layout=parentLink;
            layoutSibling=sibling;
            parentLink=layout->GetParent(LAYOUTITEM_ELEMENT,&sibling);
        }
        else if (parentLink->m_Type==LAYOUTITEM_ELEMENT)
            layout=parentLink->GetLayout();

        if (layout!=NULL)
            link=Copy(link,layout,layoutSibling,actionModifer);
        else
            link=Copy(link,parentLink,sibling,actionModifer);

        if (link==NULL) return NULL;

        if ((actionModifer&ACTIONMODIFIER_KEEPNAME)==0)
            SetName(link);

        AddToElement(link,parentLink,sibling);

        if (layout!=NULL)
            AddToLayout(link,layout,layoutSibling);

        return link->m_Element;
    }

    if (link->m_Type==LAYOUTITEM_LAYOUT)
    {
        bool replaceLayout=false;

        if (parentLink->m_Type==LAYOUTITEM_ELEMENT)
        {
            if (parentLink->GetLayout()==NULL)
                replaceLayout=true;
            else
                parentLink=parentLink->GetLayout();

            sibling=NULL;
        }

        layout=link;

        if (replaceLayout)
            link=CopyLayout(link,parentLink);
        else
            link=Copy(link,parentLink,sibling,actionModifer);

        if (link==NULL) return NULL;

        if ((actionModifer&ACTIONMODIFIER_KEEPNAME)==0)
            SetName(link);

        if (!replaceLayout)
        {
            AddToLayout(link,parentLink,sibling);
            Add2(link->m_Element,link->m_LayoutItem);
        }

        CopyLayoutChildren(link,layout,actionModifer);
        return link->m_Element;
    }

    if (link->m_Type==LAYOUTITEM_LAYOUTITEM)
    {
        if (parentLink->m_Type==LAYOUTITEM_ELEMENT)
        {
            if (parentLink->GetLayout()==NULL)
                parentLink=parentLink->GetParent(LAYOUTITEM_LAYOUT,&sibling);
            else
            {
                parentLink=parentLink->GetLayout();
                sibling=NULL;
            }
        }

        if (parentLink==NULL)
            return NULL;

        link=Copy(link,parentLink,sibling,actionModifer);
        if (link==NULL) return NULL;

        if ((actionModifer&ACTIONMODIFIER_KEEPNAME)==0)
            SetName(link);

        AddToLayout(link,parentLink,sibling);
        Add2(link->m_Element,link->m_LayoutItem);

        return link->m_Element;
    }

    return NULL;
}