Return to templates.c CVS log | Up to [Public] / Amaya / amaya |
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: