Annotation of Amaya/amaya/templates.c, revision 1.51

1.1       cvs         1: /*
                      2:  *
1.27      vatton      3:  *  COPYRIGHT INRIA and W3C, 1996-2005
1.1       cvs         4:  *  Please first read the full copyright statement in file COPYRIGHT.
                      5:  *
                      6:  */
1.14      cvs         7:  
1.1       cvs         8: /*
1.51    ! francesc    9:  * Authors: Francesc Campoy Flores
1.1       cvs        10:  *
                     11:  */
                     12: 
                     13: #define THOT_EXPORT extern
                     14: #include "amaya.h"
                     15: #include "document.h"
1.46      vatton     16: #ifdef TEMPLATES
                     17: #include "Template.h"
1.51    ! francesc   18: #endif
1.28      tollenae   19: #include "appdialogue_wx.h"
1.29      tollenae   20: #include "init_f.h"
1.46      vatton     21: #include "wxdialogapi_f.h"
1.1       cvs        22: 
                     23: /*----------------------------------------------------------------------
1.51    ! francesc   24:   NewTemplate: Create the "new document from template" dialog
1.1       cvs        25:   ----------------------------------------------------------------------*/
1.18      cvs        26: void NewTemplate (Document doc, View view)
1.1       cvs        27: {
1.51    ! francesc   28: #ifdef TEMPLATES
        !            29:   int window_id  = TtaGetDocumentWindowId( doc, view );
1.47      vatton     30: 
1.51    ! francesc   31:   ThotWindow p_window = (ThotWindow) TtaGetWindowFromId(window_id);
1.28      tollenae   32: 
1.51    ! francesc   33:   char *templateDir = TtaGetEnvString ("TEMPLATES_DIRECTORY");
        !            34:   
1.47      vatton     35:   ThotBool created = CreateNewTemplateDocDlgWX(BaseDialog + OpenTemplate,
1.51    ! francesc   36:        p_window, doc, TtaGetMessage (AMAYA, AM_NEW_TEMPLATE),templateDir);
        !            37:   
1.28      tollenae   38:   if (created)
1.25      vatton     39:     {
1.28      tollenae   40:       TtaSetDialoguePosition ();
                     41:       TtaShowDialogue (BaseDialog + OpenTemplate, TRUE);
1.25      vatton     42:     }
1.51    ! francesc   43: 
        !            44:   if(templateDir) TtaFreeMemory(templateDir);
        !            45: #endif
1.1       cvs        46: }
1.25      vatton     47: 
1.51    ! francesc   48: #ifdef TEMPLATES
        !            49: 
        !            50: #define COMPONENT 0;
        !            51: #define SIMPLE_TYPE 1;
        !            52: #define ELEMENT 2;
        !            53: #define UNION 3;
1.28      tollenae   54: 
1.51    ! francesc   55: struct menuType
1.1       cvs        56: {
1.51    ! francesc   57:        char *label;
        !            58:        int type;
        !            59: };
1.24      vatton     60: 
1.51    ! francesc   61: static inline bool isEOSorWhiteSpace(char c)
1.1       cvs        62: {
1.51    ! francesc   63:        return c==' ' || c=='\t' || c=='\n' || c=='\0';
1.1       cvs        64: }
1.28      tollenae   65: 
1.51    ! francesc   66: void giveItems(char* text, int size, struct menuType* &items, int &nbitems) {
        !            67:        bool inElement = true;
        !            68:        nbitems = 1;
1.28      tollenae   69: 
1.51    ! francesc   70:        for(int i=0; i<size; i++) {
        !            71:                if(isEOSorWhiteSpace(text[i])) {
        !            72:                        if(inElement)
        !            73:                                inElement = false;
        !            74:                } else if(!inElement) {
        !            75:                                inElement = true;
        !            76:                                ++nbitems;
        !            77:                        }
        !            78:        }
        !            79: 
        !            80:        items = (struct menuType*) TtaGetMemory(sizeof(struct menuType)*nbitems);
        !            81:        
        !            82:        char* iter = text;
        !            83: 
        !            84:        char temp[128];
        !            85:        int labelSize;
        !            86: 
        !            87:        for(i=0; i<nbitems; i++) {              
        !            88:                labelSize = 0;
        !            89:                
        !            90:                while(isEOSorWhiteSpace(*iter)) ++iter;
        !            91: 
        !            92:                while(!isEOSorWhiteSpace(*iter))
        !            93:                        temp[labelSize++]=*iter++;
1.28      tollenae   94: 
1.51    ! francesc   95:                temp[labelSize]='\0';
1.28      tollenae   96: 
1.51    ! francesc   97:                items[i].label = (char *) TtaStrdup(temp);
        !            98:                items[i].type = SIMPLE_TYPE;            
        !            99:        }
1.28      tollenae  100: }
1.37      tollenae  101: 
1.51    ! francesc  102: char *createMenuString(const struct menuType* items, const int nbItems)
        !           103: {              
        !           104:        int size = 0;
        !           105:        for(int i=0; i<nbItems; i++)
        !           106:                size += 2+strlen(items[i].label);
1.42      tollenae  107: 
1.51    ! francesc  108:        char* result = (char *) TtaGetMemory(size);
        !           109:        char* iter = result;
        !           110:        
        !           111:        for(i=0; i<nbItems; i++) {
        !           112:                *iter = 'B';
        !           113:                ++iter;
        !           114:                
        !           115:                strcpy(iter, items[i].label);
        !           116:                iter += strlen(items[i].label)+1;
        !           117:        }
        !           118:        return result;
1.36      tollenae  119: }
1.29      tollenae  120: 
1.51    ! francesc  121: #endif
1.29      tollenae  122: 
1.46      vatton    123: /*----------------------------------------------------------------------
1.51    ! francesc  124:   ThotBool ShowUseTypes (Document doc) 
        !           125:   Shows a menu with all the types that can be used in a use element.
1.46      vatton    126:   ----------------------------------------------------------------------*/
1.51    ! francesc  127: ThotBool ShowUseTypes (NotifyElement *event)
1.39      tollenae  128: {
1.43      tollenae  129: #ifdef TEMPLATES
1.51    ! francesc  130:        Document doc = event->document;
        !           131:        Element el = TtaGetParent(event->element);
        !           132:        ElementType elt = TtaGetElementType(el);
        !           133: 
        !           134:        Attribute at;
        !           135: 
        !           136:        AttributeType att;
        !           137:        
        !           138:        att.AttrSSchema = elt.ElSSchema;
        !           139:        att.AttrTypeNum = Template_ATTR_types;
        !           140: 
        !           141:        at = TtaGetAttribute(el, att);
1.39      tollenae  142: 
                    143: 
1.51    ! francesc  144:        int size = TtaGetTextAttributeLength(at);
        !           145:        char *types = (char *) TtaGetMemory (size+1);   
        !           146:        TtaGiveTextAttributeValue(at, types, &size);
        !           147:        
        !           148:        int nbitems;
        !           149:        struct menuType *items;
1.29      tollenae  150: 
1.51    ! francesc  151:        giveItems(types, size, items, nbitems);
1.29      tollenae  152: 
1.51    ! francesc  153:        char* menuString = createMenuString(items, nbitems);
1.46      vatton    154: 
1.51    ! francesc  155:        TtaNewScrollPopup (BaseDialog + OptionMenu, TtaGetViewFrame (doc, 1), NULL, 
        !           156:                               nbitems, menuString , NULL, false, 'L');
1.46      vatton    157: 
1.51    ! francesc  158:        TtaFreeMemory (menuString);
        !           159:        TtaFreeMemory (types);
1.29      tollenae  160: 
1.51    ! francesc  161:        TtaShowDialogue (BaseDialog + OptionMenu, FALSE);
        !           162:        TtaWaitShowProcDialogue();
        !           163:        TtaDestroyDialogue (BaseDialog + OptionMenu);
1.42      tollenae  164: 
1.51    ! francesc  165:        //ReturnOption
1.42      tollenae  166: 
1.51    ! francesc  167:        return true;
        !           168: #endif
1.42      tollenae  169: }
1.51    ! francesc  170: 

Webmaster