Diff for /Amaya/amaya/templates.c between versions 1.116 and 1.117

version 1.116, 2007/02/02 15:51:19 version 1.117, 2007/02/05 12:23:13
Line 465  ThotBool UseToBeCreated (NotifyElement * Line 465  ThotBool UseToBeCreated (NotifyElement *
   printf("UseToBeCreated\n");    printf("UseToBeCreated\n");
 #endif /* AMAYA_DEBUG */  #endif /* AMAYA_DEBUG */
       
   /* is there a limit to the number of elements in the xt:repeat ? */    /** TODO is there a limit to the number of elements in the xt:repeat ? */
   /* @@@@@ */  
 #endif /* TEMPLATES */  #endif /* TEMPLATES */
   return FALSE; /* let Thot perform normal operation */    return FALSE; /* let Thot perform normal operation */
 }  }
Line 479  ThotBool UseToBeCreated (NotifyElement * Line 479  ThotBool UseToBeCreated (NotifyElement *
 void UseCreated (NotifyElement *event)  void UseCreated (NotifyElement *event)
 {  {
 #ifdef TEMPLATES  #ifdef TEMPLATES
         Document         doc = event->document;          Document        doc = event->document;
         Element          el = event->element;          Element         el = event->element;
   XTigerTemplate   t;    Element         parent;
     Element         first;
     ElementType     parentType;
     XTigerTemplate  t;
     SSchema         templateSSchema;
     char*           types;
     
   if (!TtaGetDocumentAccessMode(doc))    if (!TtaGetDocumentAccessMode(doc))
     return;      return;
   
Line 490  void UseCreated (NotifyElement *event) Line 495  void UseCreated (NotifyElement *event)
     /* this Use element has already some content. It has already been      /* this Use element has already some content. It has already been
        instanciated */         instanciated */
     return;      return;
   
   t = (XTigerTemplate) Dictionary_Get (Templates_Dic, DocumentMeta[doc]->template_url);    t = (XTigerTemplate) Dictionary_Get (Templates_Dic, DocumentMeta[doc]->template_url);
   if (!t)    if (!t)
     return; // no template ?!?!      return; // no template ?!?!
   
     templateSSchema = TtaGetSSchema (TEMPLATE_SSHEMA_NAME, doc);
     parent = TtaGetParent(el);
     parentType = TtaGetElementType(parent);
     
     if(parentType.ElSSchema==templateSSchema && parentType.ElTypeNum==Template_EL_repeat)
     {
       first = TtaGetFirstChild(parent);
       if(first)
       {
         types = GetAttributeStringValueFromNum(first, Template_ATTR_types, NULL);
         if(types)
         {
           SetAttributeStringValueWithUndo(el, Template_ATTR_types, types);
           TtaFreeMemory(types);
         }
       }
     }
   
   InstantiateUse (t, el, doc, TRUE);    InstantiateUse (t, el, doc, TRUE);
 #endif /* TEMPLATES */  #endif /* TEMPLATES */
 }  }
Line 693  Element Template_InsertRepeatChild(Docum Line 717  Element Template_InsertRepeatChild(Docum
   @param decl Template declaration of the element to insert    @param decl Template declaration of the element to insert
   @return The inserted element    @return The inserted element
   ----------------------------------------------------------------------*/    ----------------------------------------------------------------------*/
 void Template_InsertBagChild(Document doc, Element el, Declaration decl)  Element Template_InsertBagChild(Document doc, Element el, Declaration decl)
 {  {
 #ifdef TEMPLATES  #ifdef TEMPLATES
   Element sel;    Element sel;
Line 701  void Template_InsertBagChild(Document do Line 725  void Template_InsertBagChild(Document do
   int start, end;    int start, end;
   
   if (!TtaGetDocumentAccessMode(doc) || !decl)    if (!TtaGetDocumentAccessMode(doc) || !decl)
     return;      return NULL;
       
   TtaGiveFirstSelectedElement(doc, &sel, &start, &end);    TtaGiveFirstSelectedElement(doc, &sel, &start, &end);
       
     
   if (TtaIsAncestor(sel, el))    if (TtaIsAncestor(sel, el))
   {    {
     newElType.ElSSchema = TtaGetSSchema (TEMPLATE_SSHEMA_NAME, doc);      newElType.ElSSchema = TtaGetSSchema (TEMPLATE_SSHEMA_NAME, doc);
Line 715  void Template_InsertBagChild(Document do Line 738  void Template_InsertBagChild(Document do
       newElType.ElTypeNum = Template_EL_useSimple;        newElType.ElTypeNum = Template_EL_useSimple;
           
     TtaInsertElement(newElType, doc);      TtaInsertElement(newElType, doc);
       
     TtaGiveFirstSelectedElement(doc, &sel, &start, &end);      TtaGiveFirstSelectedElement(doc, &sel, &start, &end);
     if(sel)      if(sel)
     {      {
       selType = TtaGetElementType(sel);        selType = TtaGetElementType(sel);
         
         TtaUnselect(doc);
         
       if(selType.ElSSchema==newElType.ElSSchema && selType.ElTypeNum==Template_EL_useSimple)        if(selType.ElSSchema==newElType.ElSSchema && selType.ElTypeNum==Template_EL_useSimple)
       {        {
           SetAttributeStringValueWithUndo(sel, Template_ATTR_types, decl->name);
           SetAttributeStringValueWithUndo(sel, Template_ATTR_title, decl->name);
         Template_InsertUseChildren(doc, sel, decl);          Template_InsertUseChildren(doc, sel, decl);
       }        }
         
         return sel;
     }      }
     // TODO : here here here      
   
   }    }
 #endif /* TEMPLATES */  #endif /* TEMPLATES */
     return NULL;
 }  }
   
   
Line 888  ThotBool UseButtonClicked (NotifyElement Line 917  ThotBool UseButtonClicked (NotifyElement
   Element         el = event->element;    Element         el = event->element;
   Element         child;    Element         child;
   ElementType     elType;    ElementType     elType;
     Attribute       attr;
   XTigerTemplate  t;    XTigerTemplate  t;
   Declaration     decl;    Declaration     decl;
   Element         firstEl;    Element         firstEl;
Line 945  ThotBool UseButtonClicked (NotifyElement Line 975  ThotBool UseButtonClicked (NotifyElement
           TtaChangeTypeOfElement(el, doc, Template_EL_useSimple);            TtaChangeTypeOfElement(el, doc, Template_EL_useSimple);
           TtaRegisterElementTypeChange(el, Template_EL_useEl, doc);            TtaRegisterElementTypeChange(el, Template_EL_useEl, doc);
                       
             /* xt:currentType attribute.*/
             SetAttributeStringValueWithUndo(el, Template_ATTR_currentType, result);
             
           /* Finish insertion. */            /* Finish insertion. */
           TtaCloseUndoSequence(doc);            TtaCloseUndoSequence(doc);
           TtaSetDocumentModified (doc);            TtaSetDocumentModified (doc);
Line 1300  ThotBool TemplateElementWillBeDeleted (N Line 1333  ThotBool TemplateElementWillBeDeleted (N
   Element        elem = event->element;    Element        elem = event->element;
   Element        xtElem, parent;    Element        xtElem, parent;
   Element        sibling;    Element        sibling;
   ElementType    xtType;    ElementType    xtType, elType;
   char*          type;    char*          type;
   Declaration    dec;    Declaration    dec;
   SSchema        templateSSchema;    SSchema        templateSSchema;
Line 1312  ThotBool TemplateElementWillBeDeleted (N Line 1345  ThotBool TemplateElementWillBeDeleted (N
   if (!TtaGetDocumentAccessMode(event->document))    if (!TtaGetDocumentAccessMode(event->document))
     return TRUE;      return TRUE;
   
   templateSSchema = TtaGetSSchema ("Template", event->document);    templateSSchema = TtaGetSSchema (TEMPLATE_SSHEMA_NAME, event->document);
   if (templateSSchema == NULL)    if (templateSSchema == NULL)
     return FALSE; // let Thot do the job      return FALSE; // let Thot do the job
       
   #ifdef AMAYA_DEBUG 
     elType = TtaGetElementType(elem);
     printf("TemplateElementWillBeDeleted %s:%s:%d\n", TtaGetSSchemaName(elType.ElSSchema), TtaGetElementTypeName(elType), elType.ElTypeNum);
   #endif /* AMAYA_DEBUG */
       
   xtElem = GetFirstTemplateParentElement(elem);    xtElem = GetFirstTemplateParentElement(elem);
   if (xtElem)    if (xtElem)
   {    {
     xtType = TtaGetElementType(xtElem);      xtType = TtaGetElementType(xtElem);
       
   #ifdef AMAYA_DEBUG
     printf("  xt: %s:%s:%d\n", TtaGetSSchemaName(xtType.ElSSchema), TtaGetElementTypeName(xtType), xtType.ElTypeNum);
   #endif /* AMAYA_DEBUG */
   
     t = (XTigerTemplate) Dictionary_Get (Templates_Dic, DocumentMeta[doc]->template_url);      t = (XTigerTemplate) Dictionary_Get (Templates_Dic, DocumentMeta[doc]->template_url);
   
     if (xtType.ElTypeNum==Template_EL_bag)      if (xtType.ElTypeNum==Template_EL_bag)
       return FALSE; // xt:bag always allow remove children.      {
         elType = TtaGetElementType(elem);
         if(elType.ElSSchema==templateSSchema &&
           (elType.ElTypeNum==Template_EL_useSimple || elType.ElTypeNum==Template_EL_useEl))
         {
           // Remove element manually.
           TtaOpenUndoSequence(doc, elem, elem, 0, 0);
           TtaRegisterElementDelete(elem, doc);
           TtaDeleteTree(elem, doc);
           TtaCloseUndoSequence(doc);
           return TRUE;
         }
         else
           return FALSE; // xt:bag always allow remove children.
       }
     else if (xtType.ElTypeNum==Template_EL_useSimple || xtType.ElTypeNum==Template_EL_useEl)      else if (xtType.ElTypeNum==Template_EL_useSimple || xtType.ElTypeNum==Template_EL_useEl)
     {      {
       parent = TtaGetParent(elem);        parent = TtaGetParent(elem);
       if (xtElem!=parent){        if (xtElem!=parent)
       type = GetAttributeStringValueFromNum(xtElem, Template_ATTR_currentType, NULL);        {
       dec = Template_GetDeclaration(t, type);          type = GetAttributeStringValueFromNum(xtElem, Template_ATTR_currentType, NULL);
       TtaFreeMemory(type);          dec = Template_GetDeclaration(t, type);
       if (dec->nature == XmlElementNat)          TtaFreeMemory(type);
         return FALSE; // Can remove element only if in xt:use current type is base language element.           
       else          if (dec && dec->nature == XmlElementNat)
         return TRUE;            return FALSE; // Can remove element only if in xt:use current type is base language element. 
           else
             return TRUE;
       }        }
     }      }
     else if (xtType.ElTypeNum==Template_EL_repeat)      else if (xtType.ElTypeNum==Template_EL_repeat)

Removed from v.1.116  
changed lines
  Added in v.1.117


Webmaster