1 /***************************************************************************
3 TextEditor.mcc - Textediting MUI Custom Class
4 Copyright (C) 1997-2000 Allan Odgaard
5 Copyright (C) 2005-2014 TextEditor.mcc Open Source Team
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 TextEditor class Support Site: http://www.sf.net/projects/texteditor-mcc
21 ***************************************************************************/
26 #include <clib/alib_protos.h>
28 #include <exec/tasks.h>
29 #include <libraries/mui.h>
31 #include <proto/dos.h>
32 #include <proto/exec.h>
33 #include <proto/muimaster.h>
34 #include <proto/intuition.h>
35 #include <proto/utility.h>
36 #if defined(__amigaos4__)
37 #include <dos/obsolete.h>
41 #define DEBUG_USE_MALLOC_REDEFINE
48 Object
*editorgad
= NULL
;
51 HOOKPROTONHNO(URLHookCode
, LONG
, struct ClickMessage
*cm
)
53 ULONG pos
= cm
->ClickPosition
;
55 while(pos
&& *(cm
->LineContents
+pos
-1) != ' ' && *(cm
->LineContents
+pos
-1) != '<')
60 if(strncmp(cm
->LineContents
+pos
, "http:", 5))
67 MakeStaticHook(URLHook
, URLHookCode
);
69 HOOKPROTONHNONP(PosHookCode
, void)
71 unsigned int x
, y
, sx
, sy
;
72 struct Rectangle
*crsr
;
74 if(DoMethod(editorgad
, MUIM_TextEditor_BlockInfo
, &x
, &y
, &sx
, &sy
))
75 printf("%d, %d, %d, %d\n", x
, y
, sx
, sy
);
77 if((crsr
= (APTR
)xget(editorgad
, MUIA_TextEditor_CursorPosition
)))
78 printf("Cursor: (%d, %d) - (%d, %d)\n", crsr
->MinX
, crsr
->MinY
, crsr
->MaxX
, crsr
->MaxY
);
80 MakeStaticHook(PosHook
, PosHookCode
);
82 HOOKPROTONHNONP(ExportBlockCode
, void)
86 CallHookPkt(&PosHook
, NULL
, NULL
);
88 if((text
= (STRPTR
)DoMethod(editorgad
, MUIM_TextEditor_ExportBlock
, MUIF_TextEditor_ExportBlock_FullLines
)))
90 printf("[%s]\n", text
);
95 MakeStaticHook(ExportBlockHook
, ExportBlockCode
);
97 HOOKPROTONH(ARexxHookCode
, LONG
, Object
*app
, struct RexxMsg
*rexxmsg
)
101 result
= DoMethod(editorgad
, MUIM_TextEditor_ARexxCmd
, rexxmsg
->rm_Args
[0]);
107 printf("rexx result: '%s'\n", (char *)result
);
109 set(app
, MUIA_Application_RexxString
, result
);
111 // if the ARexxCmd returns a string we have to free
113 FreeVec((APTR
)result
);
119 MakeStaticHook(ARexxHook
, ARexxHookCode
);
121 #if defined(__amigaos4__)
122 struct Library
*DiskfontBase
= NULL
;
123 struct Library
*GfxBase
= NULL
;
124 struct Library
*IntuitionBase
= NULL
;
125 struct Library
*KeymapBase
= NULL
;
126 struct Library
*LayersBase
= NULL
;
127 struct Library
*LocaleBase
= NULL
;
128 struct Library
*MUIMasterBase
= NULL
;
129 struct Library
*RexxSysBase
= NULL
;
130 struct Library
*UtilityBase
= NULL
;
131 struct Library
*WorkbenchBase
= NULL
;
132 #elif defined(__MORPHOS__)
133 struct Library
*DiskfontBase
= NULL
;
134 struct GfxBase
*GfxBase
= NULL
;
135 struct IntuitionBase
*IntuitionBase
= NULL
;
136 struct Library
*KeymapBase
= NULL
;
137 struct Library
*LayersBase
= NULL
;
138 struct Library
*LocaleBase
= NULL
;
139 struct Library
*MUIMasterBase
= NULL
;
140 struct Library
*RexxSysBase
= NULL
;
141 struct Library
*UtilityBase
= NULL
;
142 struct Library
*WorkbenchBase
= NULL
;
144 struct Library
*DiskfontBase
= NULL
;
145 struct GfxBase
*GfxBase
= NULL
;
146 struct IntuitionBase
*IntuitionBase
= NULL
;
147 struct Library
*KeymapBase
= NULL
;
148 struct Library
*LayersBase
= NULL
;
149 struct Library
*LocaleBase
= NULL
;
150 struct Library
*MUIMasterBase
= NULL
;
151 struct Library
*RexxSysBase
= NULL
;
152 #if defined(__AROS__)
153 struct UtilityBase
*UtilityBase
= NULL
;
155 struct Library
*UtilityBase
= NULL
;
157 struct Library
*WorkbenchBase
= NULL
;
160 #if defined(__amigaos4__)
161 struct DiskfontIFace
*IDiskfont
= NULL
;
162 struct GraphicsIFace
*IGraphics
= NULL
;
163 struct IntuitionIFace
*IIntuition
= NULL
;
164 struct KeymapIFace
*IKeymap
= NULL
;
165 struct LayersIFace
*ILayers
= NULL
;
166 struct LocaleIFace
*ILocale
= NULL
;
167 struct MUIMasterIFace
*IMUIMaster
= NULL
;
168 struct RexxSysIFace
*IRexxSys
= NULL
;
169 struct UtilityIFace
*IUtility
= NULL
;
170 struct WorkbenchIFace
*IWorkbench
= NULL
;
173 DISPATCHERPROTO(_Dispatcher
);
175 static const char *page_titles
[] = { "Shown", "Hidden", NULL
};
180 long argarray
[6] = {0,0,0,0,0,0};
181 struct MUI_CustomClass
*mcc
;
184 if((DiskfontBase
= OpenLibrary("diskfont.library", 38)) &&
185 GETINTERFACE(IDiskfont
, DiskfontBase
))
186 if((GfxBase
= (APTR
)OpenLibrary("graphics.library", 38)) &&
187 GETINTERFACE(IGraphics
, GfxBase
))
188 if((IntuitionBase
= (APTR
)OpenLibrary("intuition.library", 38)) &&
189 GETINTERFACE(IIntuition
, IntuitionBase
))
190 if((KeymapBase
= OpenLibrary("keymap.library", 38)) &&
191 GETINTERFACE(IKeymap
, KeymapBase
))
192 if((LayersBase
= OpenLibrary("layers.library", 38)) &&
193 GETINTERFACE(ILayers
, LayersBase
))
194 if((LocaleBase
= OpenLibrary("locale.library", 38)) &&
195 GETINTERFACE(ILocale
, LocaleBase
))
196 if((RexxSysBase
= OpenLibrary("rexxsyslib.library", 36)) &&
197 GETINTERFACE(IRexxSys
, RexxSysBase
))
198 if((UtilityBase
= (APTR
)OpenLibrary("utility.library", 38)) &&
199 GETINTERFACE(IUtility
, UtilityBase
))
201 /* Open workbench.library (optional) */
202 if ((WorkbenchBase
= OpenLibrary("workbench.library",0)))
204 if (!(GETINTERFACE(IWorkbench
, WorkbenchBase
)))
206 CloseLibrary(WorkbenchBase
);
207 WorkbenchBase
= NULL
;
215 if(StartClipboardServer())
217 if((args
= ReadArgs("FILENAME,MIME/S,MIMEQUOTED/S,SKIPHEADER/S,FIXED/S,EMAIL/S", argarray
, NULL
)))
219 if((MUIMasterBase
= OpenLibrary("muimaster.library", MUIMASTER_VMIN
)) &&
220 GETINTERFACE(IMUIMaster
, MUIMasterBase
))
222 Object
*app
, *window
, *clear
, *cut
, *copy
, *paste
, *erase
,
223 *bold
, *italic
, *underline
, *ischanged
, *undo
, *redo
, *string
,
224 *xslider
, *yslider
, *flow
, *search
, *replace
, *wrapmode
, *wrapborder
,
225 *rgroup
, *isdisabled
, *isreadonly
, *converttabs
, *wrapwords
;
226 Object
*lower
,*upper
;
229 const char *flow_text
[] = { "Left", "Center", "Right", NULL
};
230 const char *wrap_modes
[] = { "NoWrap", "SoftWrap", "HardWrap", NULL
};
231 const char *classes
[] = { "TextEditor.mcc", NULL
};
232 int wrap_border
= 76;
234 mcc
= MUI_CreateCustomClass(NULL
, "Area.mui", NULL
, sizeof(struct InstData
), ENTRY(_Dispatcher
));
236 app
= MUI_NewObject("Application.mui",
237 MUIA_Application_Author
, "TextEditor.mcc Open Source Team",
238 MUIA_Application_Base
, "TextEditor-Test",
239 MUIA_Application_Copyright
, LIB_COPYRIGHT
,
240 MUIA_Application_Description
, "TextEditor.mcc test program",
241 MUIA_Application_Title
, "TextEditor-Test",
242 MUIA_Application_Version
, "$VER: TextEditor-Test (" __DATE__
")",
243 MUIA_Application_RexxHook
, &ARexxHook
,
244 MUIA_Application_UsedClasses
, classes
,
246 MUIA_Application_Window
,
247 window
= WindowObject
,
248 MUIA_Window_Title
, "TextEditor-Test",
249 MUIA_Window_ID
, MAKE_ID('M','A','I','N'),
250 MUIA_Window_RootObject
, VGroup
,
254 Child
, clear
= MUI_MakeObject(MUIO_Button
, "Clear"),
255 Child
, cut
= MUI_MakeObject(MUIO_Button
, "Cut"),
256 Child
, copy
= MUI_MakeObject(MUIO_Button
, "Copy"),
257 Child
, paste
= MUI_MakeObject(MUIO_Button
, "_Paste"),
258 Child
, erase
= MUI_MakeObject(MUIO_Button
, "Erase"),
259 Child
, undo
= MUI_MakeObject(MUIO_Button
, "_Undo"),
260 Child
, redo
= MUI_MakeObject(MUIO_Button
, "_Redo"),
261 Child
, search
= MUI_MakeObject(MUIO_Button
, "Search"),
262 Child
, replace
= MUI_MakeObject(MUIO_Button
, "Replace"),
263 Child
, lower
= MUI_MakeObject(MUIO_Button
, "lower"),
264 Child
, upper
= MUI_MakeObject(MUIO_Button
, "upper"),
270 Child
, bold
= TextObject
,
271 MUIA_Background
, MUII_ButtonBack
,
272 MUIA_Frame
, MUIV_Frame_Button
,
273 MUIA_Text_PreParse
, "\33c",
274 MUIA_Text_Contents
, "Bold",
277 MUIA_InputMode
, MUIV_InputMode_Toggle
,
278 MUIA_CycleChain
, TRUE
,
281 Child
, italic
= TextObject
,
282 MUIA_Background
, MUII_ButtonBack
,
283 MUIA_Frame
, MUIV_Frame_Button
,
284 MUIA_Text_PreParse
, "\33c",
285 MUIA_Text_Contents
, "Italic",
288 MUIA_InputMode
, MUIV_InputMode_Toggle
,
289 MUIA_CycleChain
, TRUE
,
292 Child
, underline
= TextObject
,
293 MUIA_Background
, MUII_ButtonBack
,
294 MUIA_Frame
, MUIV_Frame_Button
,
295 MUIA_Text_PreParse
, "\33c",
296 MUIA_Text_Contents
, "Underline",
299 MUIA_InputMode
, MUIV_InputMode_Toggle
,
300 MUIA_CycleChain
, TRUE
,
303 Child
, ischanged
= MUI_MakeObject(MUIO_Checkmark
, "Is changed?"),
304 Child
, isdisabled
= MUI_MakeObject(MUIO_Checkmark
, "Is disabled?"),
305 Child
, isreadonly
= MUI_MakeObject(MUIO_Checkmark
, "Is read-only?"),
306 Child
, flow
= MUI_MakeObject(MUIO_Cycle
, NULL
, flow_text
),
307 Child
, wrapmode
= MUI_MakeObject(MUIO_Cycle
, NULL
, wrap_modes
),
308 Child
, wrapborder
= MUI_MakeObject(MUIO_Slider
, NULL
, 0, 10000),
309 Child
, converttabs
= TextObject
,
310 MUIA_Background
, MUII_ButtonBack
,
311 MUIA_Frame
, MUIV_Frame_Button
,
312 MUIA_Text_PreParse
, "\33c",
313 MUIA_Text_Contents
, "Tabs2Spaces",
316 MUIA_InputMode
, MUIV_InputMode_Toggle
,
317 MUIA_CycleChain
, TRUE
,
319 Child
, wrapwords
= TextObject
,
320 MUIA_Background
, MUII_ButtonBack
,
321 MUIA_Frame
, MUIV_Frame_Button
,
322 MUIA_Text_PreParse
, "\33c",
323 MUIA_Text_Contents
, "Wrap words",
326 MUIA_InputMode
, MUIV_InputMode_Toggle
,
327 MUIA_CycleChain
, TRUE
,
334 /* Child, NewObject(mcc->mcc_Class, NULL,
336 // MUIA_TextEditor_InVirtualGroup, TRUE,
337 MUIA_TextEditor_Contents, "Jeg er en dulle!",
340 /* Child, ScrollgroupObject,
341 MUIA_Scrollgroup_Contents, VirtgroupObject,
344 /* Child, RegisterGroup(titles),
347 /* Child, ColGroup(5),
348 Child, NewObject(mcc->mcc_Class, NULL, End,
349 Child, NewObject(mcc->mcc_Class, NULL, End,
350 Child, NewObject(mcc->mcc_Class, NULL, End,
351 Child, NewObject(mcc->mcc_Class, NULL, End,
352 Child, NewObject(mcc->mcc_Class, NULL, End,
353 Child, NewObject(mcc->mcc_Class, NULL, End,
354 Child, NewObject(mcc->mcc_Class, NULL, End,
355 Child, NewObject(mcc->mcc_Class, NULL, End,
356 Child, NewObject(mcc->mcc_Class, NULL, End,
357 Child, NewObject(mcc->mcc_Class, NULL, End,
360 Child
, rgroup
= RegisterGroup(page_titles
),
361 MUIA_Register_Frame
, TRUE
,
363 MUIA_Group_Spacing
, 0,
364 Child
, editorgad
= NewObject(mcc
->mcc_Class
, NULL
,
365 // MUIA_Frame, "602211",
367 // MUIA_Background, MUII_GroupBack,
368 // MUIA_TextEditor_FixedFont, TRUE,
369 MUIA_TextEditor_AutoClip
, FALSE
,
370 // MUIA_TextEditor_ReadOnly, TRUE,
371 // MUIA_TextEditor_ActiveObjectOnClick, TRUE,
372 MUIA_TextEditor_DoubleClickHook
, &URLHook
,
373 // MUIA_TextEditor_HorizontalScroll, TRUE,
374 MUIA_TextEditor_ImportWrap
, 10023,
375 // MUIA_TextEditor_WrapBorder, wrap_border,
376 // MUIA_TextEditor_ExportWrap, 80,
377 MUIA_TextEditor_WrapMode
, MUIV_TextEditor_WrapMode_NoWrap
,
378 MUIA_TextEditor_ConvertTabs
, FALSE
,
379 MUIA_TextEditor_WrapWords
, FALSE
,
381 MUIA_TextEditor_ExportHook
, MUIV_TextEditor_ExportHook_NoStyle
,
382 // MUIA_TextEditor_ImportHook, MUIV_TextEditor_ImportHook_EMail,
383 MUIA_CycleChain
, TRUE
,
384 // MUIA_TextEditor_ReadOnly, TRUE,
385 // MUIA_TextEditor_InVirtualGroup, TRUE,
386 // MUIA_Disabled, TRUE,
387 // MUIA_TextEditor_Columns, 40,
388 // MUIA_TextEditor_CursorX, 30,
389 // MUIA_TextEditor_CursorY, 7,
390 MUIA_ControlChar
, 'a',
391 MUIA_TextEditor_Contents
,
394 "a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line a very long line\n"
396 "\33r\33b" __DATE__
"\33n\n"
397 "\n\33cTextEditor.mcc " LIB_REV_STRING
" test program\n"
398 "Copyright (C) 1997 by Allan Odgaard\n"
401 "For feedback write to: Duff@DIKU.DK\n"
402 "\33b\33p[1]1\33p[2]2\33p[3]3\33p[4]4\33p[5]5\33p[6]6\33p[7]7\33p[8]8 Testtext\33n\n"
403 "For the latest version, try: \33p[7]\33uhttp://www.DIKU.dk/students/duff/texteditor/\33n\n"
405 "\33hThis gadget is not \33ifreeware\33n. You may not use it in your own programs without a licence. A licence can be obtained thru the author.\n"
406 "\nColor test: \33b\33p[1]SHINE, \33p[2]HALFSHINE, \33p[3]BACKGROUND, \33p[4]HALFSHADOW, \33p[5]SHADOW, \33p[6]TEXT, \33p[7]FILL, \33p[8]MARK\33n\n"
407 "\nStyle test: \33bBOLD\33n, \33iITALIC\33n, \33uUNDERLINE\33n, \33b\33iBOLD & ITALIC\33n, \33b\33uBOLD & UNDERLINE\33n, \33i\33uITALIC & UNDERLINE\33n, \33b\33i\33uBOLD & ITALIC & UNDERLINE\33n, PLAIN\n"
409 "\33[s:2]\33c\33u\33b Usage: \33n\n"
411 "You can doubleclick a word to select it, if you hold LMB after a doubleclick, then it will only mark \33bcomplete\33n words. Tripleclicking has the same effect, but for lines.\n"
412 "You can extend your block by holding down shift while you press LMB where you want the block to end.\n"
413 "While you drag to scroll, the farther away from the gadget your mouse pointer is, the faster the gadget will scroll.\n"
415 "\33c\33[s:2]\33u\33b Keybindings \33n\n\33l"
417 "Hold down shift and press a navigation key to mark. When something is marked you can use: LAmiga x, c to cut or copy. Delete or Backspace to erase. Or any other key to overwrite.\n"
418 "LAmiga + z, Z, v = Undo, Redo, Paste.\n"
419 "TAB will insert 3 spaces.\n"
421 " \33u Navigation combinations: \33n\n"
422 "Ctrl + left, right, up, down = BOL, EOF, Top, Bottm.\n"
423 "Alt + left, right, up, down = BOW(PrevWord), NextWord, StartOfPage(PrevPage), EndOfPage(NextPage).\n"
424 "Ctrl-Alt + left, right, up, down = PrevSentence, NextSentence, PrevParagraph, NextParagraph.\n"
426 " \33u Delete combinations: \33n\n"
427 "Ctrl + Backspace, Delete = \"Delele To BOL\", \"Delele To EOL\".\n"
428 "Alt + Backspace, Delete = \"Delele To BOW\", \"Delete To NextWord\".\n",
430 Child
, slider
= MUI_NewObject("Scrollbar.mui", End
,
434 MUIA_Text_Contents
, "TextEditor object is now hidden!!!",
442 /* Child, RectangleObject, End,
449 Child
, xslider
= MUI_MakeObject(MUIO_Slider
, NULL
, 0, 10000),
450 Child
, yslider
= MUI_MakeObject(MUIO_Slider
, NULL
, 0, 1000),
452 Child
, undoslider
= MUI_MakeObject(MUIO_Slider
, NULL
, 0, 1000),
453 Child
, string
= StringObject
,
455 MUIA_CycleChain
, TRUE
,
456 MUIA_String_MaxLen
, 256,
467 unsigned long running
= 1;
470 set(clear
, MUIA_CycleChain
, TRUE
);
471 set(cut
, MUIA_CycleChain
, TRUE
);
472 set(copy
, MUIA_CycleChain
, TRUE
);
473 set(paste
, MUIA_CycleChain
, TRUE
);
474 set(erase
, MUIA_CycleChain
, TRUE
);
475 set(undo
, MUIA_CycleChain
, TRUE
);
476 set(redo
, MUIA_CycleChain
, TRUE
);
477 set(search
, MUIA_CycleChain
, TRUE
);
478 set(replace
, MUIA_CycleChain
, TRUE
);
479 set(lower
, MUIA_CycleChain
, TRUE
);
480 set(upper
, MUIA_CycleChain
, TRUE
);
481 set(ischanged
, MUIA_CycleChain
, TRUE
);
482 set(isdisabled
, MUIA_CycleChain
, TRUE
);
483 set(isreadonly
, MUIA_CycleChain
, TRUE
);
484 set(flow
, MUIA_CycleChain
, TRUE
);
485 set(wrapmode
, MUIA_CycleChain
, TRUE
);
486 set(wrapborder
, MUIA_CycleChain
, TRUE
);
487 set(editorgad
, MUIA_TextEditor_Slider
, slider
);
488 set(xslider
, MUIA_CycleChain
, TRUE
);
489 set(yslider
, MUIA_CycleChain
, TRUE
);
493 set(editorgad
, MUIA_TextEditor_FixedFont
, TRUE
);
498 if((fh
= Open((char *)argarray
[0], MODE_OLDFILE
)))
500 char *text
= AllocVec(50*1024, 0L);
504 size
= Read(fh
, text
, (50*1024)-2);
510 while(*buffer
!= '\n' && buffer
< &text
[size
])
512 while(*buffer
++ != '\n');
517 set(editorgad
, MUIA_TextEditor_ImportHook
, MUIV_TextEditor_ImportHook_MIMEQuoted
);
520 set(editorgad
, MUIA_TextEditor_ImportHook
, MUIV_TextEditor_ImportHook_MIME
);
523 set(editorgad
, MUIA_TextEditor_ImportHook
, MUIV_TextEditor_ImportHook_EMail
);
525 SetAttrs(editorgad
, MUIA_TextEditor_Contents
, buffer
,
531 DoMethod(window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, app
, 2, MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
);
533 DoMethod(flow
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_Flow
, MUIV_TriggerValue
);
534 DoMethod(wrapmode
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_WrapMode
, MUIV_TriggerValue
);
535 DoMethod(wrapborder
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_WrapBorder
, MUIV_TriggerValue
);
536 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_Flow
, MUIV_EveryTime
, flow
, 3, MUIM_NoNotifySet
, MUIA_Cycle_Active
, MUIV_TriggerValue
);
538 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_CursorX
, MUIV_EveryTime
, xslider
, 3, MUIM_NoNotifySet
, MUIA_Numeric_Value
, MUIV_TriggerValue
);
539 // DoMethod(xslider, MUIM_Notify, MUIA_Numeric_Value, MUIV_EveryTime, editorgad, 3, MUIM_NoNotifySet, MUIA_TextEditor_Position, MUIV_TriggerValue);
540 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_CursorY
, MUIV_EveryTime
, yslider
, 3, MUIM_NoNotifySet
, MUIA_Numeric_Value
, MUIV_TriggerValue
);
541 DoMethod(yslider
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_CursorY
, MUIV_TriggerValue
);
543 DoMethod(undoslider
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, editorgad
, 3, MUIM_Set
, MUIA_TextEditor_UndoLevels
, MUIV_TriggerValue
);
545 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_AreaMarked
, MUIV_EveryTime
, MUIV_Notify_Self
, 7, MUIM_MultiSet
, MUIA_Disabled
, MUIV_NotTriggerValue
, cut
, copy
, erase
, NULL
);
546 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_UndoAvailable
, MUIV_EveryTime
, undo
, 3, MUIM_Set
, MUIA_Disabled
, MUIV_NotTriggerValue
);
547 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_RedoAvailable
, MUIV_EveryTime
, redo
, 3, MUIM_Set
, MUIA_Disabled
, MUIV_NotTriggerValue
);
548 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_StyleBold
, MUIV_EveryTime
, bold
, 3, MUIM_NoNotifySet
, MUIA_Selected
, MUIV_TriggerValue
);
549 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_StyleItalic
, MUIV_EveryTime
, italic
, 3, MUIM_NoNotifySet
, MUIA_Selected
, MUIV_TriggerValue
);
550 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_StyleUnderline
, MUIV_EveryTime
, underline
, 3, MUIM_NoNotifySet
, MUIA_Selected
, MUIV_TriggerValue
);
552 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_HasChanged
, MUIV_EveryTime
, ischanged
, 3, MUIM_NoNotifySet
, MUIA_Selected
, MUIV_TriggerValue
);
553 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_HasChanged
, MUIV_EveryTime
, ischanged
, 3, MUIM_NoNotifySet
, MUIA_Image_State
, MUIV_TriggerValue
);
554 DoMethod(ischanged
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_HasChanged
, MUIV_TriggerValue
);
556 DoMethod(isdisabled
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, editorgad
, 3, MUIM_Set
, MUIA_Disabled
, MUIV_TriggerValue
);
557 DoMethod(isreadonly
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, editorgad
, 3, MUIM_Set
, MUIA_TextEditor_ReadOnly
, MUIV_TriggerValue
);
559 DoMethod(clear
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "Clear");
560 // DoMethod(clear, MUIM_Notify, MUIA_Pressed, FALSE, editorgad, 2, MUIM_CallHook, &ExportBlockHook);
561 // DoMethod(clear, MUIM_Notify, MUIA_Pressed, FALSE, editorgad, 3, MUIM_NoNotifySet, MUIA_TextEditor_HasChanged, FALSE);
563 DoMethod(cut
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "Cut");
564 DoMethod(copy
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "Copy");
565 DoMethod(paste
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "Paste");
566 DoMethod(erase
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "Erase");
567 // DoMethod(undo, MUIM_Notify, MUIA_Pressed, FALSE, editorgad, 3, MUIM_Set, MUIA_TextEditor_Prop_First, 13*15);
568 DoMethod(undo
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "Undo");
569 DoMethod(redo
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "Redo");
570 DoMethod(search
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 3, MUIM_TextEditor_Search
, "is not", 0);//MUIF_TextEditor_Search_CaseSensitive);
571 DoMethod(replace
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 3, MUIM_TextEditor_Replace
, "replaced", 0);
572 DoMethod(lower
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "ToLower");
573 DoMethod(upper
, MUIM_Notify
, MUIA_Pressed
, FALSE
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, "ToUpper");
575 DoMethod(bold
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_StyleBold
, MUIV_TriggerValue
);
576 DoMethod(italic
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_StyleItalic
, MUIV_TriggerValue
);
577 DoMethod(underline
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_StyleUnderline
, MUIV_TriggerValue
);
579 DoMethod(string
, MUIM_Notify
, MUIA_String_Acknowledge
, MUIV_EveryTime
, editorgad
, 2, MUIM_TextEditor_ARexxCmd
, MUIV_TriggerValue
);
580 // DoMethod(string, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, window, 3, MUIM_Set, MUIA_Window_ActiveObject, string);
581 // DoMethod(string, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, editorgad, 3, MUIM_TextEditor_Search, MUIV_TriggerValue, 0L);//MUIF_TextEditor_Search_FromTop);
582 // DoMethod(string, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, editorgad, 3, MUIM_TextEditor_Replace, MUIV_TriggerValue, 0L);//MUIF_TextEditor_Search_FromTop);
584 DoMethod(window
, MUIM_Notify
, MUIA_Window_InputEvent
, "f1", rgroup
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 0);
585 DoMethod(window
, MUIM_Notify
, MUIA_Window_InputEvent
, "f2", rgroup
, 3, MUIM_Set
, MUIA_Group_ActivePage
, 1);
587 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_ConvertTabs
, MUIV_EveryTime
, converttabs
, 3, MUIM_NoNotifySet
, MUIA_Selected
, MUIV_TriggerValue
);
588 DoMethod(converttabs
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_ConvertTabs
, MUIV_TriggerValue
);
589 DoMethod(editorgad
, MUIM_Notify
, MUIA_TextEditor_WrapWords
, MUIV_EveryTime
, converttabs
, 3, MUIM_NoNotifySet
, MUIA_Selected
, MUIV_TriggerValue
);
590 DoMethod(wrapwords
, MUIM_Notify
, MUIA_Selected
, MUIV_EveryTime
, editorgad
, 3, MUIM_NoNotifySet
, MUIA_TextEditor_WrapWords
, MUIV_TriggerValue
);
592 set(window
, MUIA_Window_ActiveObject
, editorgad
);
593 set(window
, MUIA_Window_Open
, TRUE
);
594 set(wrapmode
, MUIA_Cycle_Active
, MUIV_TextEditor_WrapMode_NoWrap
);
595 // set(wrapmode, MUIA_Cycle_Active, MUIV_TextEditor_WrapMode_HardWrap);
596 // set(wrapmode, MUIA_Cycle_Active, MUIV_TextEditor_WrapMode_SoftWrap);
597 set(wrapborder
, MUIA_Numeric_Value
, wrap_border
);
598 nnset(undoslider
, MUIA_Numeric_Value
, xget(editorgad
, MUIA_TextEditor_UndoLevels
));
602 ULONG delta = xget(editorgad, MUIA_TextEditor_Prop_DeltaFactor);
603 printf("Delta: %d\n", delta);
608 struct MUIP_TextEditor_Keybinding *key;
610 key = (struct MUIP_TextEditor_Keybinding *)DoMethod(editorgad, MUIM_TextEditor_QueryKeyAction, MUIV_TextEditor_KeyAction_Copy);
612 printf("code: %d, qualifier: %ld, action: %d\n", key->code, key->qualifier, key->action);
615 // DoMethod(editorgad, MUIM_TextEditor_MarkText, 0x000a000f, 0x0030000f);
620 while((LONG
)DoMethod(app
, MUIM_Application_NewInput
, &sigs
) != (LONG
)MUIV_Application_ReturnID_Quit
)
624 sigs
= Wait(sigs
| SIGBREAKF_CTRL_C
);
625 if(sigs
& SIGBREAKF_CTRL_C
)
630 changed
= xget(editorgad
, MUIA_TextEditor_HasChanged
);
631 if(argarray
[0] && changed
&& !(sigs
& SIGBREAKF_CTRL_C
))
632 running
= MUI_Request(app
, window
, 0L, "Warning", "*_Proceed|_Save|_Cancel", "\33cText '%s'\n is modified. Save it?", argarray
[0]);
639 void *text
= (void *)DoMethod(editorgad
, MUIM_TextEditor_ExportText
);
641 if(argarray
[0] && (fh
= Open((char *)argarray
[0], MODE_NEWFILE
)))
643 Write(fh
, text
, strlen(text
));
648 MUI_DisposeObject(app
);
652 MUI_DeleteCustomClass(mcc
);
655 else printf("Failed to create application\n");
657 DROPINTERFACE(IMUIMaster
);
658 CloseLibrary(MUIMasterBase
);
659 MUIMasterBase
= NULL
;
667 long error
= IoErr();
669 GetProgramName(prgname
, 32);
670 PrintFault(error
, prgname
);
673 ShutdownClipboardServer();
683 DROPINTERFACE(IWorkbench
);
684 WorkbenchBase
= NULL
;
689 DROPINTERFACE(IUtility
);
690 CloseLibrary((struct Library
*)UtilityBase
);
695 DROPINTERFACE(IRexxSys
);
696 CloseLibrary(RexxSysBase
);
701 DROPINTERFACE(ILocale
);
702 CloseLibrary(LocaleBase
);
707 DROPINTERFACE(ILayers
);
708 CloseLibrary(LayersBase
);
713 DROPINTERFACE(IKeymap
);
714 CloseLibrary(KeymapBase
);
719 DROPINTERFACE(IIntuition
);
720 CloseLibrary((struct Library
*)IntuitionBase
);
725 DROPINTERFACE(IGraphics
);
726 CloseLibrary((struct Library
*)GfxBase
);
731 DROPINTERFACE(IDiskfont
);
732 CloseLibrary(DiskfontBase
);