1 /***************************************************************************
3 BetterString.mcc - A better String gadget MUI Custom Class
4 Copyright (C) 1997-2000 Allan Odgaard
5 Copyright (C) 2005-2013 by BetterString.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 BetterString class Support Site: http://www.sf.net/projects/bstring-mcc/
21 ***************************************************************************/
23 #ifndef BETTERSTRING_MCC_PRIV_H
24 #define BETTERSTRING_MCC_PRIV_H
26 #include <dos/exall.h>
27 #include <exec/types.h>
28 #include <proto/intuition.h>
29 #include <intuition/classusr.h>
30 #include <libraries/mui.h>
33 #include <mcc_common.h>
35 #include <mui/BetterString_mcc.h>
41 struct ExAllData buffer
;
46 /* Normal stringgadget info */
48 char *InactiveContents
;
49 char *Original
; /* Amiga-q (toggle) */
50 char *Undo
; /* Amiga-z (toggle) */
53 Object
*ForwardObject
;
54 Object
*Popup
; /* ctrl-p popup object */
63 /* Various system resources and data */
64 struct MUI_EventHandlerNode ehnode
;
65 struct RastPort rport
;
66 struct Locale
*locale
;
72 // the selection pointer Object
74 BOOL activeSelectPointer
;
76 /* Filename completion */
77 struct FNCData
*FNCBuffer
;
82 /* For marking of text */
86 /* For double/triple clicking */
87 ULONG StartSecs
, StartMicros
;
90 /* The hotkey which activates the stringgadget */
94 STRPTR InactiveBackground
;
96 STRPTR ActiveBackground
;
100 ULONG MarkedTextColor
;
104 char InactiveBackgroundBuffer
[128];
105 char ActiveBackgroundBuffer
[128];
108 struct Hook
*EditHook
;
112 STRPTR OwnBackground
;
115 #define FLG_Secret (1L << 0)
116 #define FLG_AdvanceOnCr (1L << 1)
117 #define FLG_BlockEnabled (1L << 2)
118 #define FLG_Active (1L << 3)
119 #define FLG_Ghosted (1L << 4)
120 #define FLG_Shown (1L << 5)
121 #define FLG_Original (1L << 6)
122 #define FLG_RedoAvailable (1L << 7)
123 #define FLG_StayActive (1L << 8)
124 #define FLG_OwnBackground (1L << 11)
125 #define FLG_NoInput (1L << 12)
126 #define FLG_DragOutside (1L << 13)
127 #define FLG_NoShortcuts (1L << 14)
128 #define FLG_ForceSelectOn (1L << 15)
129 #define FLG_ForceSelectOff (1L << 16)
130 #define FLG_FreshActive (1L << 17)
131 #define FLG_MouseButtonDown (1L << 18)
132 #define FLG_NoNotify (1L << 19) // don't trigger notifications immediately but queue them instead
133 #define FLG_NotifyQueued (1L << 20) // there are notifications pending
134 #define FLG_Setup (1L << 21) // successful MUIM_Setup
135 #define FLG_WindowSleepNotifyAdded (1L << 22) // notify for MUIA_Window_Sleep was added
136 #define FLG_DummyNotifyAdded (1L << 23) // dummy notify was added
138 // private attributes
139 #define MUIA_BetterString_InternalSelectOnActive 0xad002000UL
140 #define MUIA_BetterString_Nop 0xad002001UL
142 // proper RAWKEY_ defines were first introduced in OS4 and MorphOS
143 // and unfortunately they are also a bit different, so lets
144 // prepare an alternate table for it
145 #if defined(__amigaos4__)
146 #include <proto/keymap.h>
148 #define RAWKEY_SCRLOCK RAWKEY_MENU
149 #define RAWKEY_NUMLOCK 0x79
151 #elif defined(__MORPHOS__)
152 #include <devices/rawkeycodes.h>
154 #define RAWKEY_CRSRUP RAWKEY_UP
155 #define RAWKEY_CRSRDOWN RAWKEY_DOWN
156 #define RAWKEY_CRSRRIGHT RAWKEY_RIGHT
157 #define RAWKEY_CRSRLEFT RAWKEY_LEFT
158 #define RAWKEY_PRINTSCR RAWKEY_PRTSCREEN
159 #define RAWKEY_BREAK RAWKEY_PAUSE
160 #define RAWKEY_DEL RAWKEY_DELETE
162 #define RAWKEY_AUD_STOP RAWKEY_CDTV_STOP
163 #define RAWKEY_AUD_PLAY_PAUSE RAWKEY_CDTV_PLAY
164 #define RAWKEY_AUD_PREV_TRACK RAWKEY_CDTV_PREV
165 #define RAWKEY_AUD_NEXT_TRACK RAWKEY_CDTV_NEXT
166 #define RAWKEY_AUD_SHUFFLE RAWKEY_CDTV_REW
167 #define RAWKEY_AUD_REPEAT RAWKEY_CDTV_FF
171 #define RAWKEY_BACKSPACE 0x41
172 #define RAWKEY_TAB 0x42
173 #define RAWKEY_DEL 0x46
174 #define RAWKEY_INSERT 0x47 /* Not on classic keyboards */
175 #define RAWKEY_PAGEUP 0x48 /* Not on classic keyboards */
176 #define RAWKEY_PAGEDOWN 0x49 /* Not on classic keyboards */
177 #define RAWKEY_F11 0x4B /* Not on classic keyboards */
178 #define RAWKEY_CRSRUP 0x4C
179 #define RAWKEY_CRSRDOWN 0x4D
180 #define RAWKEY_CRSRRIGHT 0x4E
181 #define RAWKEY_CRSRLEFT 0x4F
182 #define RAWKEY_F1 0x50
183 #define RAWKEY_F2 0x51
184 #define RAWKEY_F3 0x52
185 #define RAWKEY_F4 0x53
186 #define RAWKEY_F5 0x54
187 #define RAWKEY_F6 0x55
188 #define RAWKEY_F7 0x56
189 #define RAWKEY_F8 0x57
190 #define RAWKEY_F9 0x58
191 #define RAWKEY_F10 0x59
192 #define RAWKEY_HELP 0x5F
193 #define RAWKEY_SCRLOCK 0x6B /* Not on classic keyboards */
194 #define RAWKEY_PRINTSCR 0x6D /* Not on classic keyboards */
195 #define RAWKEY_BREAK 0x6E /* Not on classic keyboards */
196 #define RAWKEY_F12 0x6F /* Not on classic keyboards */
197 #define RAWKEY_HOME 0x70 /* Not on classic keyboards */
198 #define RAWKEY_END 0x71 /* Not on classic keyboards */
200 #define RAWKEY_AUD_STOP 0x72
201 #define RAWKEY_AUD_PLAY_PAUSE 0x73
202 #define RAWKEY_AUD_PREV_TRACK 0x74
203 #define RAWKEY_AUD_NEXT_TRACK 0x75
204 #define RAWKEY_AUD_SHUFFLE 0x76
205 #define RAWKEY_AUD_REPEAT 0x77
207 #define RAWKEY_NUMLOCK 0x79
212 VOID
PrintString(struct IClass
*, Object
*);
213 void TriggerNotify(struct IClass
*cl
, Object
*obj
);
214 ULONG
ConvertKey(struct IntuiMessage
*);
215 VOID
DeleteBlock(struct InstData
*);
218 IPTR
mDoAction(struct IClass
*, Object
*, struct MUIP_BetterString_DoAction
*);
219 IPTR
mHandleInput(struct IClass
*, Object
*, struct MUIP_HandleEvent
*);
220 IPTR
mInsert(struct IClass
*cl
, Object
*obj
, struct MUIP_BetterString_Insert
*msg
);
223 IPTR
mGet(struct IClass
*, Object
*, struct opGet
*);
224 IPTR
mSet(struct IClass
*, Object
*, struct opSet
*);
227 BOOL
CreateSharedPool(void);
228 void DeleteSharedPool(void);
229 APTR
SharedPoolAlloc(ULONG
);
230 void SharedPoolFree(APTR
);
231 char *AllocContentString(ULONG size
);
232 void FreeContentString(char *str
);
233 ULONG
ContentStringSize(char *str
);
234 BOOL
ExpandContentString(char **str
, ULONG extra
);
236 BOOL
Overwrite(STRPTR
, UWORD
, UWORD
, struct InstData
*);
237 BOOL
OverwriteA(STRPTR
, UWORD
, UWORD
, UWORD
, struct InstData
*);
238 BOOL
FileNameComplete(Object
*, BOOL
, struct InstData
*);
239 LONG
mFileNameStart(struct MUIP_BetterString_FileNameStart
*msg
);
241 WORD
CmpStrings(REG(a0
, STRPTR
), REG(a1
, STRPTR
));
243 VOID
InitConfig(Object
*, struct InstData
*);
244 VOID
FreeConfig(struct MUI_RenderInfo
*, struct InstData
*);
246 struct BitMap
* SAVEDS ASM
MUIG_AllocBitMap(REG(d0
, LONG
), REG(d1
, LONG
), REG(d2
, LONG
), REG(d3
, LONG flags
), REG(a0
, struct BitMap
*));
247 VOID SAVEDS ASM
MUIG_FreeBitMap(REG(a0
, struct BitMap
*));
250 void AddWindowSleepNotify(struct IClass
*cl
, Object
*obj
);
251 void RemWindowSleepNotify(struct IClass
*cl
, Object
*obj
);
254 void SetupSelectPointer(struct InstData
*data
);
255 void CleanupSelectPointer(struct InstData
*data
);
256 void ShowSelectPointer(Object
*obj
, struct InstData
*data
);
257 void HideSelectPointer(Object
*obj
, struct InstData
*data
);
260 BOOL
StartClipboardServer(void);
261 void ShutdownClipboardServer(void);
262 void StringToClipboard(STRPTR str
, LONG length
);
263 BOOL
ClipboardToString(STRPTR
*str
, LONG
*length
);
265 #define setFlag(mask, flag) (mask) |= (flag)
266 #define clearFlag(mask, flag) (mask) &= ~(flag)
267 #define isAnyFlagSet(mask, flag) (((mask) & (flag)) != 0)
268 #define isFlagSet(mask, flag) (((mask) & (flag)) == (flag))
269 #define isFlagClear(mask, flag) (((mask) & (flag)) == 0)
271 #define LIBVER(lib) ((struct Library *)lib)->lib_Version
272 #define LIBREV(lib) ((struct Library *)lib)->lib_Revision
273 #define VERSION_IS_AT_LEAST(ver, rev, minver, minrev) (((ver) > (minver)) || ((ver) == (minver) && (rev) == (minrev)) || ((ver) == (minver) && (rev) > (minrev)))
274 #define LIB_VERSION_IS_AT_LEAST(lib, minver, minrev) VERSION_IS_AT_LEAST(((struct Library *)(lib))->lib_Version, ((struct Library *)(lib))->lib_Revision, minver, minrev)
276 #if defined(__MORPHOS__)
277 #include <proto/exec.h>
278 #define IS_MORPHOS2 LIB_VERSION_IS_AT_LEAST(SysBase, 51, 0)
281 // some own usefull MUI-style macros to check mouse positions in objects
282 #define _between(a,x,b) ((x)>=(a) && (x)<=(b))
283 #define _isinobject(o,x,y) (_between(_mleft(o),(x),_mright (o)) && _between(_mtop(o) ,(y),_mbottom(o)))
284 #define _isinwholeobject(o,x,y) (_between(_left(o),(x),_right (o)) && _between(_top(o) ,(y),_bottom(o)))
287 // Gets an attribute value from a MUI object
288 IPTR
xget(Object
*obj
, const IPTR attr
);
289 #if defined(__GNUC__)
290 // please note that we do not evaluate the return value of GetAttr()
291 // as some attributes (e.g. MUIA_Selected) always return FALSE, even
292 // when they are supported by the object. But setting b=0 right before
293 // the GetAttr() should catch the case when attr doesn't exist at all
294 #define xget(OBJ, ATTR) ({IPTR b=0; GetAttr(ATTR, OBJ, &b); b;})
299 #define MUIKEY_CUT 22
303 #define MUIKEY_COPY 23
307 #define MUIKEY_PASTE 24
311 #define MUIKEY_UNDO 25
315 #define MUIKEY_REDO 26
318 #ifndef MUIA_String_Popup
319 #define MUIA_String_Popup 0x80420d71
322 #ifndef MUII_StringBack
323 #define MUII_StringBack 49
326 #ifndef MUII_StringActiveBack
327 #define MUII_StringActiveBack 50
330 #endif /* BETTERSTRING_MCC_PRIV_H */