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.52 vatton 16: 1.46 vatton 17: #ifdef TEMPLATES 18: #include "Template.h" 1.52 vatton 19: #include "templateDeclarations.h" 1.61 francesc 20: #include "templateLoad.h" 21: #include "templateInstanciation.h" 1.52 vatton 22: 23: struct menuType 24: { 25: char *label; 26: int type; 27: }; 28: 1.28 tollenae 29: #include "appdialogue_wx.h" 1.29 tollenae 30: #include "init_f.h" 1.46 vatton 31: #include "wxdialogapi_f.h" 1.60 francesc 32: #include "AHTURLTools_f.h" 33: 1.52 vatton 34: #endif /* TEMPLATES */ 1.1 cvs 35: 36: /*---------------------------------------------------------------------- 1.51 francesc 37: NewTemplate: Create the "new document from template" dialog 1.1 cvs 38: ----------------------------------------------------------------------*/ 1.18 cvs 39: void NewTemplate (Document doc, View view) 1.1 cvs 40: { 1.51 francesc 41: #ifdef TEMPLATES 1.52 vatton 42: char *templateDir = TtaGetEnvString ("TEMPLATES_DIRECTORY"); 43: ThotBool created; 1.28 tollenae 44: 1.52 vatton 45: if (templates == NULL) 1.58 francesc 46: InitializeTemplateEnvironment(); 1.52 vatton 47: created = CreateNewTemplateDocDlgWX(BaseDialog + OpenTemplate, 1.61 francesc 48: /*TtaGetViewFrame (doc, view)*/NULL, doc, 1.52 vatton 49: TtaGetMessage (AMAYA, AM_NEW_TEMPLATE),templateDir); 1.51 francesc 50: 1.28 tollenae 51: if (created) 1.25 vatton 52: { 1.28 tollenae 53: TtaSetDialoguePosition (); 54: TtaShowDialogue (BaseDialog + OpenTemplate, TRUE); 1.25 vatton 55: } 1.51 francesc 56: 1.52 vatton 57: #endif /* TEMPLATES */ 1.1 cvs 58: } 1.25 vatton 59: 1.53 vatton 60: /*---------------------------------------------------------------------- 61: Load a template and create the instance file - update images and 62: stylesheets related to the template. 63: ----------------------------------------------------------------------*/ 1.61 francesc 64: void CreateInstanceOfTemplate (Document doc, char *templatename, char *docname) 1.53 vatton 65: { 66: #ifdef TEMPLATES 67: 1.60 francesc 68: char *s; 1.61 francesc 69: ThotBool dontRemplace = DontReplaceOldDoc; 1.60 francesc 70: 71: if (!IsW3Path (docname) && TtaFileExist (docname)) 72: { 73: s = (char *)TtaGetMemory (strlen (docname) + 74: strlen (TtaGetMessage (AMAYA, AM_OVERWRITE_CHECK)) + 2); 75: sprintf (s, TtaGetMessage (AMAYA, AM_OVERWRITE_CHECK), docname); 76: InitConfirm (0, 0, s); 1.61 francesc 77: TtaFreeMemory (s); 1.62 francesc 78: if (!UserAnswer) 79: return; 80: } 81: 82: LoadTemplate(doc, templatename); 83: DontReplaceOldDoc = dontRemplace; 84: CreateInstance(templatename, docname); 85: 1.53 vatton 86: #endif /* TEMPLATES */ 87: } 88: 1.51 francesc 89: #ifdef TEMPLATES 1.52 vatton 90: /*---------------------------------------------------------------------- 91: ----------------------------------------------------------------------*/ 92: static void giveItems(char *text, int size, struct menuType **items, int *nbitems) 1.1 cvs 93: { 1.52 vatton 94: ThotBool inElement = TRUE; 95: struct menuType *menu; 96: char *iter; 97: char temp[128]; 98: int i; 99: int labelSize; 1.28 tollenae 100: 1.52 vatton 101: *nbitems = 1; 102: for (i = 0; i < size; i++) 103: { 104: if (isEOSorWhiteSpace (text[i])) 105: { 106: if (inElement) 107: inElement = FALSE; 108: } 109: else if (!inElement) 110: { 111: inElement = TRUE; 112: (*nbitems)++; 113: } 114: } 1.51 francesc 115: 1.52 vatton 116: menu = (struct menuType*) TtaGetMemory(sizeof(struct menuType)* *nbitems); 117: iter = text; 118: for (i = 0; i < *nbitems; i++) 119: { 120: labelSize = 0; 121: while (isEOSorWhiteSpace (*iter)) 122: iter++; 123: 124: while (!isEOSorWhiteSpace (*iter)) 125: { 126: temp[labelSize++] = *iter; 127: iter++; 128: } 129: 130: temp[labelSize] = EOS; 131: menu[i].label = (char *) TtaStrdup(temp); 132: menu[i].type = SIMPLE_TYPE; 133: *items = menu; 134: } 1.28 tollenae 135: } 1.37 tollenae 136: 1.52 vatton 137: /*---------------------------------------------------------------------- 138: ----------------------------------------------------------------------*/ 139: static char *createMenuString (const struct menuType* items, const int nbItems) 140: { 141: char *result, *iter; 142: int size = 0; 143: int i; 144: 145: for (i=0; i < nbItems; i++) 146: size += 2 + strlen (items[i].label); 147: 148: result = (char *) TtaGetMemory(size); 149: iter = result; 150: for (i=0; i < nbItems; i++) 151: { 152: *iter = 'B'; 153: ++iter; 1.51 francesc 154: 1.52 vatton 155: strcpy (iter, items[i].label); 156: iter += strlen (items[i].label)+1; 157: } 1.51 francesc 158: return result; 1.36 tollenae 159: } 1.29 tollenae 160: 1.52 vatton 161: #endif /* TEMPLATES */ 1.29 tollenae 162: 1.46 vatton 163: /*---------------------------------------------------------------------- 1.63 ! vatton 164: UseMenuClicked 1.51 francesc 165: Shows a menu with all the types that can be used in a use element. 1.46 vatton 166: ----------------------------------------------------------------------*/ 1.56 francesc 167: ThotBool UseMenuClicked (NotifyElement *event) 1.39 tollenae 168: { 1.43 tollenae 169: #ifdef TEMPLATES 1.52 vatton 170: Document doc = event->document; 1.63 ! vatton 171: Element el = event->element; 1.52 vatton 172: ElementType elt = TtaGetElementType(el); 173: Attribute at; 174: AttributeType att; 175: int nbitems, size; 176: struct menuType *items; 177: char *types, *menuString; 1.51 francesc 178: 179: att.AttrSSchema = elt.ElSSchema; 180: att.AttrTypeNum = Template_ATTR_types; 1.52 vatton 181: at = TtaGetAttribute (el, att); 1.51 francesc 182: 1.52 vatton 183: size = TtaGetTextAttributeLength (at); 184: types = (char *) TtaGetMemory (size+1); 185: TtaGiveTextAttributeValue (at, types, &size); 1.39 tollenae 186: 1.52 vatton 187: giveItems (types, size, &items, &nbitems); 188: menuString = createMenuString (items, nbitems); 1.51 francesc 189: TtaNewScrollPopup (BaseDialog + OptionMenu, TtaGetViewFrame (doc, 1), NULL, 1.52 vatton 190: nbitems, menuString , NULL, false, 'L'); 1.46 vatton 191: 1.51 francesc 192: TtaFreeMemory (menuString); 193: TtaFreeMemory (types); 1.29 tollenae 194: 1.51 francesc 195: TtaShowDialogue (BaseDialog + OptionMenu, FALSE); 196: TtaWaitShowProcDialogue(); 197: TtaDestroyDialogue (BaseDialog + OptionMenu); 1.63 ! vatton 198: return FALSE; ! 199: #endif /* TEMPLATES */ ! 200: //ReturnOption ! 201: return TRUE; ! 202: } 1.42 tollenae 203: 1.63 ! vatton 204: /*---------------------------------------------------------------------- ! 205: OptionMenuClicked ! 206: ----------------------------------------------------------------------*/ ! 207: ThotBool OptionMenuClicked (NotifyElement *event) ! 208: { ! 209: #ifdef TEMPLATES ! 210: return FALSE; 1.57 francesc 211: #endif /* TEMPLATES */ 1.52 vatton 212: return TRUE; 1.42 tollenae 213: } 1.51 francesc 214: 1.56 francesc 215: /*---------------------------------------------------------------------- 1.63 ! vatton 216: RepeatMenuClicked 1.56 francesc 217: Shows a menu with all the types that can be used in a use element. 218: ----------------------------------------------------------------------*/ 1.63 ! vatton 219: ThotBool RepeatMenuClicked (NotifyElement *event) 1.56 francesc 220: { 221: #ifdef TEMPLATES 1.63 ! vatton 222: Document doc = event->document; ! 223: int nbitems, size; ! 224: struct menuType *items; ! 225: char *types, *menuString; ! 226: ! 227: types = "top end"; ! 228: size = strlen (types); ! 229: giveItems (types, size, &items, &nbitems); ! 230: menuString = createMenuString (items, nbitems); ! 231: TtaNewScrollPopup (BaseDialog + OptionMenu, TtaGetViewFrame (doc, 1), NULL, ! 232: nbitems, menuString , NULL, false, 'L'); ! 233: TtaFreeMemory (menuString); ! 234: TtaShowDialogue (BaseDialog + OptionMenu, FALSE); ! 235: TtaWaitShowProcDialogue(); ! 236: TtaDestroyDialogue (BaseDialog + OptionMenu); ! 237: return FALSE; 1.57 francesc 238: #endif /* TEMPLATES */ 1.56 francesc 239: return TRUE; 240: }