Diff for /Amaya/amaya/templates.c between versions 1.111 and 1.112

version 1.111, 2007/02/01 15:15:40 version 1.112, 2007/02/02 08:41:36
Line 123  static void CopyTemplateRepositoryList ( Line 123  static void CopyTemplateRepositoryList (
 {  {
   Prop_Templates_Path *element=NULL, *current=NULL;    Prop_Templates_Path *element=NULL, *current=NULL;
       
   if(*src!=NULL)    if (*src!=NULL)
   {    {
     *dst = (Prop_Templates_Path*) TtaGetMemory (sizeof(Prop_Templates_Path));      *dst = (Prop_Templates_Path*) TtaGetMemory (sizeof(Prop_Templates_Path));
     (*dst)->NextPath = NULL;      (*dst)->NextPath = NULL;
Line 345  void PreventReloadingTemplate(char* temp Line 345  void PreventReloadingTemplate(char* temp
 {  {
 #ifdef TEMPLATES  #ifdef TEMPLATES
   XTigerTemplate t = (XTigerTemplate) Dictionary_Get (Templates_Dic, template_url);    XTigerTemplate t = (XTigerTemplate) Dictionary_Get (Templates_Dic, template_url);
   if(t)    if (t)
     t->users++;      t->users++;
 #endif /* TEMPLATES */  #endif /* TEMPLATES */
 }  }
Line 359  void AllowReloadingTemplate(char* templa Line 359  void AllowReloadingTemplate(char* templa
 {  {
 #ifdef TEMPLATES  #ifdef TEMPLATES
   XTigerTemplate t = (XTigerTemplate) Dictionary_Get (Templates_Dic, template_url);    XTigerTemplate t = (XTigerTemplate) Dictionary_Get (Templates_Dic, template_url);
   if(t)    if (t)
     t->users--;        t->users--;  
 #endif /* TEMPLATES */    #endif /* TEMPLATES */  
 }  }
Line 483  void UseCreated (NotifyElement *event) Line 483  void UseCreated (NotifyElement *event)
         Element          el = event->element;          Element          el = event->element;
   XTigerTemplate   t;    XTigerTemplate   t;
   
   if(!TtaGetDocumentAccessMode(doc))    if (!TtaGetDocumentAccessMode(doc))
     return;      return;
   
   if (TtaGetFirstChild (el))    if (TtaGetFirstChild (el))
Line 511  void Template_IncrementRepeatOccurNumber Line 511  void Template_IncrementRepeatOccurNumber
   int curVal;    int curVal;
       
   current = GetAttributeStringValueFromNum(el, Template_ATTR_currentOccurs, NULL);    current = GetAttributeStringValueFromNum(el, Template_ATTR_currentOccurs, NULL);
   if(current)    if (current)
   {    {
     curVal = atoi(current);      curVal = atoi(current);
     curVal++;      curVal++;
Line 535  void Template_DecrementRepeatOccurNumber Line 535  void Template_DecrementRepeatOccurNumber
   int curVal;    int curVal;
       
   current = GetAttributeStringValueFromNum(el, Template_ATTR_currentOccurs, NULL);    current = GetAttributeStringValueFromNum(el, Template_ATTR_currentOccurs, NULL);
   if(current)    if (current)
   {    {
     curVal = atoi(current);      curVal = atoi(current);
     curVal--;      curVal--;
Line 564  ThotBool Template_CanInsertRepeatChild(E Line 564  ThotBool Template_CanInsertRepeatChild(E
   max = GetAttributeStringValueFromNum(el, Template_ATTR_maxOccurs, NULL);    max = GetAttributeStringValueFromNum(el, Template_ATTR_maxOccurs, NULL);
   if (max)    if (max)
   {    {
     if(!strcmp(max, "*"))      if (!strcmp(max, "*"))
       {        {
         TtaFreeMemory(max);          TtaFreeMemory(max);
         return TRUE;          return TRUE;
Line 613  Element Template_InsertRepeatChildAfter( Line 613  Element Template_InsertRepeatChildAfter(
   Element use;      /* xt:use to insert.*/    Element use;      /* xt:use to insert.*/
   ElementType useType;  /* type of xt:use.*/    ElementType useType;  /* type of xt:use.*/
       
   if(!TtaGetDocumentAccessMode(doc))    if (!TtaGetDocumentAccessMode(doc))
     return NULL;      return NULL;
   
   /* Copy xt:use with xt:types param */    /* Copy xt:use with xt:types param */
Line 624  Element Template_InsertRepeatChildAfter( Line 624  Element Template_InsertRepeatChildAfter(
   Template_InsertUseChildren(doc, use, decl);    Template_InsertUseChildren(doc, use, decl);
   
   /* insert it */    /* insert it */
   if(elPrev)    if (elPrev)
   {    {
     TtaInsertSibling(use, elPrev, FALSE, doc);      TtaInsertSibling(use, elPrev, FALSE, doc);
   }    }
Line 656  Element Template_InsertRepeatChildAfter( Line 656  Element Template_InsertRepeatChildAfter(
   ----------------------------------------------------------------------*/    ----------------------------------------------------------------------*/
 Element Template_InsertRepeatChild(Document doc, Element el, Declaration decl, int pos)  Element Template_InsertRepeatChild(Document doc, Element el, Declaration decl, int pos)
 {  {
   if(!TtaGetDocumentAccessMode(doc))    if (!TtaGetDocumentAccessMode(doc))
     return NULL;      return NULL;
       
   if(pos==0)    if (pos==0)
   {    {
     return Template_InsertRepeatChildAfter(doc, el, decl, NULL);      return Template_InsertRepeatChildAfter(doc, el, decl, NULL);
   }    }
   else if(pos==-1)    else if (pos==-1)
   {    {
     return Template_InsertRepeatChildAfter(doc, el, decl, TtaGetLastChild(el));      return Template_InsertRepeatChildAfter(doc, el, decl, TtaGetLastChild(el));
   }    }
Line 671  Element Template_InsertRepeatChild(Docum Line 671  Element Template_InsertRepeatChild(Docum
   {    {
     Element elem = TtaGetFirstChild(el);      Element elem = TtaGetFirstChild(el);
     pos--;      pos--;
     while(pos>0)      while (pos>0)
     {      {
       TtaNextSibling(&elem);        TtaNextSibling(&elem);
       pos--;        pos--;
Line 693  static int QueryMenu(Document doc, char* Line 693  static int QueryMenu(Document doc, char*
   struct menuType *itemlist;    struct menuType *itemlist;
   char *menuString;    char *menuString;
       
   if(!TtaGetDocumentAccessMode(doc))    if (!TtaGetDocumentAccessMode(doc))
     return -1;      return -1;
       
   size = strlen(items);    size = strlen(items);
Line 723  static char* QueryStringFromMenu(Documen Line 723  static char* QueryStringFromMenu(Documen
   char *menuString;    char *menuString;
   char *result = NULL;    char *result = NULL;
       
   if(!TtaGetDocumentAccessMode(doc))    if (!TtaGetDocumentAccessMode(doc))
       return NULL;
     if (items == NULL)
     return NULL;      return NULL;
     
   size = strlen(items);    size = strlen(items);
   giveItems (items, size, &itemlist, &nbitems);    giveItems (items, size, &itemlist, &nbitems);
   menuString = createMenuString (itemlist, nbitems);    menuString = createMenuString (itemlist, nbitems);
Line 737  static char* QueryStringFromMenu(Documen Line 738  static char* QueryStringFromMenu(Documen
   TtaWaitShowProcDialogue ();    TtaWaitShowProcDialogue ();
   TtaDestroyDialogue (BaseDialog + OptionMenu);    TtaDestroyDialogue (BaseDialog + OptionMenu);
       
   if(ReturnOption!=-1)    if (ReturnOption!=-1)
   {    {
     result = TtaStrdup(itemlist[ReturnOption].label);      result = TtaStrdup(itemlist[ReturnOption].label);
   }    }
Line 773  ThotBool RepeatButtonClicked (NotifyElem Line 774  ThotBool RepeatButtonClicked (NotifyElem
   char*           listtypes;    char*           listtypes;
   char*           result;    char*           result;
   
   if(!TtaGetDocumentAccessMode(doc))    if (!TtaGetDocumentAccessMode(doc))
     return TRUE;      return TRUE;
       
   TtaGetActiveView (&doc, &view);    TtaGetActiveView (&doc, &view);
   if (view != 1)    if (view != 1)
     return FALSE; /* let Thot perform normal operation */      return FALSE; /* let Thot perform normal operation */
   
   #ifdef AMAYA_DEBUG
   printf("Template url : %s\n", DocumentMeta[doc]->template_url);    printf("Template url : %s\n", DocumentMeta[doc]->template_url);
   #endif/* AMAYA_DEBUG */
   
   TtaCancelSelection(doc);    TtaCancelSelection(doc);
       
   t = (XTigerTemplate) Dictionary_Get (Templates_Dic, DocumentMeta[doc]->template_url);    t = (XTigerTemplate) Dictionary_Get (Templates_Dic, DocumentMeta[doc]->template_url);
   elType = TtaGetElementType(el);    elType = TtaGetElementType(el);
   while(elType.ElTypeNum!=Template_EL_repeat)    while (elType.ElTypeNum!=Template_EL_repeat)
   {    {
     repeatEl = TtaGetParent(repeatEl);      repeatEl = TtaGetParent(repeatEl);
     if(repeatEl==NULL)      if (repeatEl==NULL)
       break;        break;
     elType = TtaGetElementType(repeatEl);      elType = TtaGetElementType(repeatEl);
   }    }
   if(repeatEl)    if (repeatEl)
   {    {
     if(Template_CanInsertRepeatChild(repeatEl))      if (Template_CanInsertRepeatChild(repeatEl))
     {      {
       firstEl = TtaGetFirstChild(repeatEl);        firstEl = TtaGetFirstChild(repeatEl);
       types = GetAttributeStringValueFromNum(firstEl, Template_ATTR_types, NULL);        types = GetAttributeStringValueFromNum(firstEl, Template_ATTR_types, NULL);
       if(types)        if (types)
       {        {
         listtypes = Template_ExpandTypes(t, types);          listtypes = Template_ExpandTypes(t, types);
         result = QueryStringFromMenu(doc, listtypes);          result = QueryStringFromMenu(doc, listtypes);
         if(result)          if (result)
         {          {
           decl = Template_GetDeclaration(t, result);            decl = Template_GetDeclaration(t, result);
           if(decl)            if (decl)
           {            {
             /* Prepare insertion.*/                        /* Prepare insertion.*/          
             oldStructureChecking = TtaGetStructureChecking (doc);              oldStructureChecking = TtaGetStructureChecking (doc);
Line 816  ThotBool RepeatButtonClicked (NotifyElem Line 817  ThotBool RepeatButtonClicked (NotifyElem
             TtaOpenUndoSequence(doc, NULL, NULL, 0, 0);              TtaOpenUndoSequence(doc, NULL, NULL, 0, 0);
                           
             /* Insert. */              /* Insert. */
             if(el==repeatEl)              if (el==repeatEl)
               newEl = Template_InsertRepeatChildAfter(doc, repeatEl, decl, NULL);                newEl = Template_InsertRepeatChildAfter(doc, repeatEl, decl, NULL);
             else              else
               newEl = Template_InsertRepeatChildAfter(doc, repeatEl, decl, el);                newEl = Template_InsertRepeatChildAfter(doc, repeatEl, decl, el);
Line 826  ThotBool RepeatButtonClicked (NotifyElem Line 827  ThotBool RepeatButtonClicked (NotifyElem
             TtaSetStructureChecking (oldStructureChecking, doc);              TtaSetStructureChecking (oldStructureChecking, doc);
                           
             firstEl = GetFirstEditableElement(newEl);              firstEl = GetFirstEditableElement(newEl);
             if(firstEl)              if (firstEl)
             {              {
               TtaSelectElement (doc, firstEl);                TtaSelectElement (doc, firstEl);
               TtaSetStatusSelectedElement(doc, view, firstEl);                TtaSetStatusSelectedElement(doc, view, firstEl);
Line 843  ThotBool RepeatButtonClicked (NotifyElem Line 844  ThotBool RepeatButtonClicked (NotifyElem
       TtaFreeMemory(listtypes);        TtaFreeMemory(listtypes);
       TtaFreeMemory(result);        TtaFreeMemory(result);
     }      }
     else /* if(Template_CanInsertRepeatChild(repeatEl)) */      else /* if (Template_CanInsertRepeatChild(repeatEl)) */
     {      {
       TtaSetStatus(doc, view, TtaGetMessage (AMAYA, AM_NUMBER_OCCUR_HAVE_MAX), NULL);        TtaSetStatus(doc, view, TtaGetMessage (AMAYA, AM_NUMBER_OCCUR_HAVE_MAX), NULL);
     }      }
Line 874  ThotBool UseButtonClicked (NotifyElement Line 875  ThotBool UseButtonClicked (NotifyElement
   char*           listtypes;    char*           listtypes;
   char*           result;    char*           result;
   
   if(!TtaGetDocumentAccessMode(doc))    if (!TtaGetDocumentAccessMode(doc))
     return TRUE;      return TRUE;
           
   TtaGetActiveView (&doc, &view);    TtaGetActiveView (&doc, &view);
Line 889  ThotBool UseButtonClicked (NotifyElement Line 890  ThotBool UseButtonClicked (NotifyElement
   elType = TtaGetElementType(el);    elType = TtaGetElementType(el);
   
   firstEl = TtaGetFirstChild(el);    firstEl = TtaGetFirstChild(el);
   if(firstEl)    if (firstEl)
   {    {
     RepeatButtonClicked(event);      RepeatButtonClicked(event);
   }    }
   else    else
   {    {
     types = GetAttributeStringValueFromNum(el, Template_ATTR_types, NULL);      types = GetAttributeStringValueFromNum(el, Template_ATTR_types, NULL);
     if(types)      if (types)
     {      {
       listtypes = Template_ExpandTypes(t, types);        listtypes = Template_ExpandTypes(t, types);
       result = QueryStringFromMenu(doc, listtypes);        result = QueryStringFromMenu(doc, listtypes);
       if(result)        if (result)
       {        {
         decl = Template_GetDeclaration(t, result);          decl = Template_GetDeclaration(t, result);
         if(decl)          if (decl)
         {          {
           /* Prepare insertion.*/            /* Prepare insertion.*/
           oldStructureChecking = TtaGetStructureChecking (doc);            oldStructureChecking = TtaGetStructureChecking (doc);
Line 926  ThotBool UseButtonClicked (NotifyElement Line 927  ThotBool UseButtonClicked (NotifyElement
           TtaSetStructureChecking (oldStructureChecking, doc);            TtaSetStructureChecking (oldStructureChecking, doc);
                       
           firstEl = GetFirstEditableElement(newEl);            firstEl = GetFirstEditableElement(newEl);
           if(firstEl)            if (firstEl)
           {            {
             TtaSelectElement (doc, firstEl);              TtaSelectElement (doc, firstEl);
             TtaSetStatusSelectedElement(doc, view, firstEl);              TtaSetStatusSelectedElement(doc, view, firstEl);
Line 956  ThotBool UseButtonClicked (NotifyElement Line 957  ThotBool UseButtonClicked (NotifyElement
 ThotBool UseSimpleButtonClicked (NotifyElement *event)  ThotBool UseSimpleButtonClicked (NotifyElement *event)
 {  {
 #ifdef TEMPLATES  #ifdef TEMPLATES
   if(!TtaGetDocumentAccessMode(event->document))    if (!TtaGetDocumentAccessMode(event->document))
     return TRUE;      return TRUE;
   
   ElementType parentType = TtaGetElementType(TtaGetParent(event->element));    ElementType parentType = TtaGetElementType(TtaGetParent(event->element));
   if(parentType.ElTypeNum == Template_EL_repeat)    if (parentType.ElTypeNum == Template_EL_repeat)
     return RepeatButtonClicked(event);      return RepeatButtonClicked(event);
 #endif /* TEMPLATES */    #endif /* TEMPLATES */  
   return FALSE;    return FALSE;
Line 978  ThotBool OptionButtonClicked (NotifyElem Line 979  ThotBool OptionButtonClicked (NotifyElem
   XTigerTemplate  t;    XTigerTemplate  t;
   View            view;    View            view;
   
   if(!TtaGetDocumentAccessMode(event->document))    if (!TtaGetDocumentAccessMode(event->document))
     return TRUE;      return TRUE;
   
   TtaGetActiveView (&doc, &view);    TtaGetActiveView (&doc, &view);
Line 1034  void CheckTemplate (Document doc) Line 1035  void CheckTemplate (Document doc)
       !Dictionary_Get (Templates_Dic, DocumentMeta[doc]->template_url))        !Dictionary_Get (Templates_Dic, DocumentMeta[doc]->template_url))
     {      {
       // the template cannot be loaded        // the template cannot be loaded
       TtaDisplaySimpleMessage (CONFIRM, AMAYA, AM_READONLY);        InitConfirm (doc, 1, TtaGetMessage (AMAYA, AM_BAD_TEMPLATE));
       TtaSetDocumentAccessMode (doc, 1);  
       TtaSetAccessRight (TtaGetRootElement (doc), ReadOnly, doc);        TtaSetAccessRight (TtaGetRootElement (doc), ReadOnly, doc);
         TtaSetDocumentAccessMode (doc, 0); // document readonly
     }      }
 #endif /* TEMPLATES */  #endif /* TEMPLATES */
 }  }
Line 1064  void OpeningInstance (char *fileName, Do Line 1065  void OpeningInstance (char *fileName, Do
           buffer[res] = EOS;            buffer[res] = EOS;
           begin = strstr (buffer, "<?xtiger");            begin = strstr (buffer, "<?xtiger");
                       
           if(begin)            if (begin)
           {            {
             // Search for template version              // Search for template version
             ptr = strstr (begin, "templateVersion");              ptr = strstr (begin, "templateVersion");
Line 1142  ThotBool ClosingInstance(NotifyDialog* d Line 1143  ThotBool ClosingInstance(NotifyDialog* d
     DocumentMeta[dialog->document]->template_url = NULL;      DocumentMeta[dialog->document]->template_url = NULL;
   }    }
       
   if(DocumentMeta[dialog->document]->template_version)    if (DocumentMeta[dialog->document]->template_version)
   {    {
     TtaFreeMemory(DocumentMeta[dialog->document]->template_version);      TtaFreeMemory(DocumentMeta[dialog->document]->template_version);
     DocumentMeta[dialog->document]->template_version = NULL;      DocumentMeta[dialog->document]->template_version = NULL;
Line 1175  Element GetFirstTemplateParentElement(El Line 1176  Element GetFirstTemplateParentElement(El
 {  {
 #ifdef TEMPLATES  #ifdef TEMPLATES
   elem = TtaGetParent(elem);    elem = TtaGetParent(elem);
   while(elem!=NULL && strcmp(TtaGetSSchemaName(TtaGetElementType(elem).ElSSchema)    while (elem!=NULL && strcmp(TtaGetSSchemaName(TtaGetElementType(elem).ElSSchema)
                                                     , TEMPLATE_SSHEMA_NAME)!=0)                                                      , TEMPLATE_SSHEMA_NAME)!=0)
   {    {
     elem = TtaGetParent(elem);      elem = TtaGetParent(elem);
Line 1202  ThotBool TemplateElementWillBeCreated (N Line 1203  ThotBool TemplateElementWillBeCreated (N
   
   SSchema     templateSSchema = TtaGetSSchema ("Template", event->document);    SSchema     templateSSchema = TtaGetSSchema ("Template", event->document);
   
   if(!TtaGetDocumentAccessMode(event->document))    if (!TtaGetDocumentAccessMode(event->document))
     return TRUE;      return TRUE;
   
   if (templateSSchema == NULL)    if (templateSSchema == NULL)
Line 1216  ThotBool TemplateElementWillBeCreated (N Line 1217  ThotBool TemplateElementWillBeCreated (N
   
 //  //
 //  // A xt:use within a xt:repeat  //  // A xt:use within a xt:repeat
 //  if((elType.ElTypeNum==Template_EL_useSimple || elType.ElTypeNum==Template_EL_useEl) && parentType.ElTypeNum==Template_EL_repeat)  //  if ((elType.ElTypeNum==Template_EL_useSimple || elType.ElTypeNum==Template_EL_useEl) && parentType.ElTypeNum==Template_EL_repeat)
 //  {  //  {
 //      printf("    Intend to insert xt:repeat element\n");  //      printf("    Intend to insert xt:repeat element\n");
 //      return !Template_CanInsertRepeatChild(parent);  //      return !Template_CanInsertRepeatChild(parent);
Line 1261  ThotBool TemplateElementWillBeDeleted (N Line 1262  ThotBool TemplateElementWillBeDeleted (N
   SSchema        templateSSchema = TtaGetSSchema ("Template", event->document);    SSchema        templateSSchema = TtaGetSSchema ("Template", event->document);
   XTigerTemplate t;    XTigerTemplate t;
   
   if(!TtaGetDocumentAccessMode(event->document))    if (!TtaGetDocumentAccessMode(event->document))
     return TRUE;      return TRUE;
   
   printf("TemplateElementWillBeDeleted : %s\n", TtaGetElementTypeName(TtaGetElementType(elem)));    printf("TemplateElementWillBeDeleted : %s\n", TtaGetElementTypeName(TtaGetElementType(elem)));
Line 1271  ThotBool TemplateElementWillBeDeleted (N Line 1272  ThotBool TemplateElementWillBeDeleted (N
       
       
   xtElem = GetFirstTemplateParentElement(elem);    xtElem = GetFirstTemplateParentElement(elem);
   if(xtElem)    if (xtElem)
   {    {
     xtType = TtaGetElementType(xtElem);      xtType = TtaGetElementType(xtElem);
     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.        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);        type = GetAttributeStringValueFromNum(xtElem, Template_ATTR_currentType, NULL);
       dec = Template_GetDeclaration(t, type);        dec = Template_GetDeclaration(t, type);
       TtaFreeMemory(type);        TtaFreeMemory(type);
       if(dec->nature == XmlElementNat)        if (dec->nature == XmlElementNat)
         return FALSE; // Can remove element only if in xt:use current type is base language element.           return FALSE; // Can remove element only if in xt:use current type is base language element. 
       else        else
         return TRUE;          return TRUE;
       }        }
     }      }
     else if(xtType.ElTypeNum==Template_EL_repeat)      else if (xtType.ElTypeNum==Template_EL_repeat)
     {      {
       sibling = TtaGetSuccessor(elem);        sibling = TtaGetSuccessor(elem);
       TtaRegisterElementDelete(elem, doc);        TtaRegisterElementDelete(elem, doc);
Line 1320  ThotBool CurrentTypeWillBeExported (Noti Line 1321  ThotBool CurrentTypeWillBeExported (Noti
 {  {
 #ifdef TEMPLATES  #ifdef TEMPLATES
   
   if(!TtaGetDocumentAccessMode(event->document))    if (!TtaGetDocumentAccessMode(event->document))
     return TRUE;      return TRUE;
   
   if(IsTemplateDocument(event->document))    if (IsTemplateDocument(event->document))
     return TRUE;      return TRUE;
 #endif /* TEMPLATES */  #endif /* TEMPLATES */
   return FALSE;    return FALSE;

Removed from v.1.111  
changed lines
  Added in v.1.112


Webmaster