7 * (C) Copyright 1998 Manuel Lemos.
8 * (C) Copyright 1996-1997 Ian J. Einman.
9 * (C) Copyright 1993-1996 Jaba Development.
10 * (C) Copyright 1993-1996 Jan van den Baard.
11 * All Rights Reserved.
14 * Revision 42.2 2004/06/16 20:16:48 verhaegs
15 * Use METHODPROTO, METHOD_END and REGFUNCPROTOn where needed.
17 * Revision 42.1 2000/05/15 19:27:01 stegerg
18 * another hundreds of REG() macro replacements in func headers/protos.
20 * Revision 42.0 2000/05/09 22:08:53 mlemos
21 * Bumped to revision 42.0 before handing BGUI to AROS team
23 * Revision 41.11 2000/05/09 19:54:14 mlemos
24 * Merged with the branch Manuel_Lemos_fixes.
26 * Revision 41.10.2.1 1999/07/03 15:17:35 mlemos
27 * Replaced the calls to CallHookPkt to BGUI_CallHookPkt.
29 * Revision 41.10 1998/02/25 21:12:00 mlemos
32 * Revision 1.1 1998/02/25 17:08:12 mlemos
38 #include "include/classdefs.h"
40 /// Class definitions.
42 * Object instance data.
45 struct Hook
*fd_MultiHook
; /* Multi-select hook */
46 UBYTE fd_Drawer
[MAX_DRAWER
+ 2]; /* Drawer buffer */
47 UBYTE fd_File
[MAX_FILE
+ 2]; /* Filename buffer */
48 UBYTE fd_Path
[MAX_PATH
+ 2]; /* Full path buffer */
49 UBYTE fd_Pattern
[MAX_PATTERN
+ 2]; /* Pattern buffer */
55 * Create a shiny new object.
57 METHOD(FileReqClassNew
, struct opSet
*, ops
)
62 tags
= DefTagList(BGUI_FILEREQ_OBJECT
, ops
->ops_AttrList
);
65 * First we let the superclass create the object.
67 if ((rc
= NewSuperObject(cl
, obj
, tags
)))
70 * Setup user attributes.
72 if (AsmCoerceMethod(cl
, (Object
*)rc
, OM_SET
, tags
, NULL
) != ASLREQ_OK
)
77 AsmCoerceMethod(cl
, (Object
*)rc
, OM_DISPOSE
);
91 METHOD(FileReqClassDispose
, Msg
, msg
)
94 * The superclass does the rest.
96 return AsmDoSuperMethodA(cl
, obj
, msg
);
100 /// OM_SET, OM_UPDATE
102 * Change one or more of the object
105 METHOD(FileReqClassSetUpdate
, struct opSet
*, ops
)
107 FD
*fd
= INST_DATA(cl
, obj
);
110 struct TagItem
*tstate
= ops
->ops_AttrList
;
111 BOOL path_update
= FALSE
;
114 * First we let the superclass have a go at it.
116 rc
= AsmDoSuperMethodA(cl
, obj
, (Msg
)ops
);
118 while ((tag
= NextTagItem(&tstate
)))
123 case FILEREQ_MultiHook
:
124 fd
->fd_MultiHook
= (struct Hook
*)data
;
126 case ASLFR_InitialFile
:
128 strncpy(fd
->fd_File
, (UBYTE
*)data
, MAX_FILE
);
131 case ASLFR_InitialDrawer
:
133 strncpy(fd
->fd_Drawer
, (UBYTE
*)data
, MAX_DRAWER
);
136 case ASLFR_InitialPattern
:
137 case FILEREQ_Pattern
:
138 strncpy(fd
->fd_Pattern
, (UBYTE
*)data
, MAX_PATTERN
);
143 strncpy(fd
->fd_Path
, fd
->fd_Drawer
, MAX_PATH
);
144 AddPart(fd
->fd_Path
, fd
->fd_File
, MAX_PATH
);
153 * Give one of the attributes.
155 METHOD(FileReqClassGet
, struct opGet
*, opg
)
157 FD
*fd
= INST_DATA(cl
, obj
);
159 IPTR
*store
= opg
->opg_Storage
;
160 Tag attr
= opg
->opg_AttrID
;
164 case ASLFR_InitialDrawer
:
168 case ASLFR_InitialFile
:
172 case ASLFR_InitialPattern
:
173 case FILEREQ_Pattern
:
174 STORE fd
->fd_Pattern
;
179 case FILEREQ_MultiHook
:
180 STORE fd
->fd_MultiHook
;
183 rc
= AsmDoSuperMethodA(cl
, obj
, (Msg
)opg
);
192 * Pop up the filerequester.
194 METHOD(FileReqClassDoRequest
, Msg
, msg
)
196 FD
*fd
= INST_DATA(cl
, obj
);
197 struct FileRequester
*fr
;
198 ULONG rc
= ASLREQ_OK
;
200 DoSuperSetMethodNG(cl
, obj
, ASLFR_InitialFile
, fd
->fd_File
,
201 ASLFR_InitialDrawer
, fd
->fd_Drawer
,
202 ASLFR_InitialPattern
, fd
->fd_Pattern
, TAG_DONE
);
205 * Allocate filerequester structure.
207 if ((fr
= (struct FileRequester
*)AsmDoSuperMethod(cl
, obj
, ASLM_ALLOCREQUEST
)))
210 * Put up the requester.
212 if (AsmDoSuperMethod(cl
, obj
, ASLM_REQUEST
))
215 * Copy drawer, file and pattern strings.
217 DoSetMethodNG(obj
, FILEREQ_File
, fr
->fr_File
,
218 FILEREQ_Drawer
, fr
->fr_Drawer
,
219 FILEREQ_Pattern
, fr
->fr_Pattern
, TAG_DONE
);
222 * Do we have a multi-select hook?
224 if (fd
->fd_MultiHook
)
227 * Any multi-selections made?
230 BGUI_CallHookPkt(fd
->fd_MultiHook
, (VOID
*)obj
, (VOID
*)fr
);
237 * Remember these even if the requester was cancelled.
239 DoSuperSetMethodNG(cl
, obj
, ASLREQ_Bounds
, &fr
->fr_LeftEdge
, TAG_DONE
);
242 * Free the requester structure.
244 AsmDoSuperMethod(cl
, obj
, ASLM_FREEREQUEST
);
246 rc
= ASLREQ_ERROR_NO_REQ
;
253 /// Class initialization.
257 STATIC DPFUNC ClassFunc
[] = {
258 { OM_NEW
, FileReqClassNew
, },
259 { OM_SET
, FileReqClassSetUpdate
, },
260 { OM_UPDATE
, FileReqClassSetUpdate
, },
261 { OM_GET
, FileReqClassGet
, },
262 { OM_DISPOSE
, FileReqClassDispose
, },
263 { ASLM_DOREQUEST
, FileReqClassDoRequest
, },
268 * Simple class initialization.
270 makeproto Class
*InitFileReqClass(void)
272 return BGUI_MakeClass(CLASS_SuperClassBGUI
, BGUI_ASLREQ_OBJECT
,
273 CLASS_ObjectSize
, sizeof(FD
),
274 CLASS_DFTable
, ClassFunc
,