So I have been exploring building my own gadgets. I am bit stumped as to what defines a BOOPSI gadget to be a Reaction gadget. I clearly see distinction with MUI as it has its own messaging and base classes, but for Reaction I don't see any characteristics that clearly define any functional requirements for a Reaction gadget. I do see a lot of selective implementation of base GadgetClass attributes. For example GA_Hidden, does it work or not who knows until you try. Is there a clear helloworld gadget example that shows a skeleton of a gadgetclass derived gadget? Is the answer really only go read autodocs and headers? Half of TextEditor gadget don't work. I have found some decent information and reference materials on Thomas Rapp's site but I find I spend more time writing test programs and reverse engineering how controls work than writing working code and moving my project forward.
Sorry if this sounds whiny I do get the AmigaOS is limited with its user base I am just bit frustrated as this is slogging.
Anyone got any suggested references I might be missing?
Regards
Doug
Actually you cannot make true ReAction gadgets because ReAction has some internal features which are not documented. For example it calls undocumented methods and sets undocumented attributes.
But you can make BOOPSI gadgets which are compatible with ReAction. All you need to do is to implement the GM_DOMAIN and GM_LAYOUT methods beside the other mandatory methods.
And for proper rendering you need to store the backfill hook set by REACTION_BackFill as well as GA_BackFill and set it to the rastport before you start rendering (unless your gadget hasn't transparent parts and you always fill the whole area without calling EraseRect).
The texteditor gadget is the worst example of a BOOPSI class you can find. It seems to be some kind of back-port of a MUI class with all the MUI workings left in it but non-working in a ReAction environment.
I posted on Hyperion's forum and spoke to Steven Solie at AmiWest 2017 about getting a fully functional gadget class source code posted so we could start making our own classes. We need to see all the bells and whistles so we know how things work.
Has this happened? Or course not. Will it? Probably not.
Thank you gentleman I appreciate that I am not alone it the bit of frustration surrounding this.
Regards
DStastny
It can be a bit daunting at first as the information is dotted arround quite a few places, but it's not actually that hard.
There is no such thing as Reaction under AmigaOS 4 just BOOPSI. So don't even worry about this.
MUI is a totally customsystem derived from rootclass, it's various gadgets are not actually gadgets in the intuition sense. What you are wanting to call Reaction gadgets are derived from gadgetclass and thus have intuition gadgets embeded in them.
'gadgetclass' has no caps :-)
GA_Hidden is implmented by gadgetclass and sets the GMORE_HIDDEN flag, when that flag is set the gadget will not recieve input, will not be rendered etc, but it wont just disappear, without somekind of window refresh or rethink. It's not a flag I've ever used to be honest.
http://wiki.amigaos.net/wiki/BOOPSI_Gadgets has a basic gadget. The version of that on the DevCD 2.1 is where I started from when I wrote my first gadgets.
Yes do that. people spent ages writing those thjings and every one just says there no documentation. Then ask questions. No question is too 'silly' fi you need to ask it odds are someone else will too.
Text editor is weird, half it's functionality is only accessable by sending it arexx commands. If you need to display blocks of read only text ot need basic multiline text input functionality then it's fine, anything more don't botther with it. I've wrung just about every drop of functionality out of it with MultiEdit, leaves alot to be desired.
Well thanks for additional support as always. I am pleased I have gotten a basic gadget starting to work that is base "GadgetClass" :)
Not much so far but basic drawing and responding to activation and deactivation. Lots of crashing until i read a blurb about mandatory implementation of GadgetClass in the Autodocs.
I am curious about comment about the backfill hook. I don't think I need to worry about it as I am filling the background of entire gadget area but please let me know if that is not case.
DStastny
@dbstastny
Well done on that! When you get the thing going, and if you feel like sharing your work to help other lost seekers, I'll be happy to include your code as an example in the AmigaOS4 Dev wiki.
AmigaOne X5000-020 / 2GB RAM / Sapphire Pulse Radeon RX 560 / AmigaOS 4.1 Final Edition Update 2
@trixie
I don't know if I will get a full on example as the parts I am developing is a replacement for the the crappy edit control. I will though make it fully open source under a very liberal open source license(non gpl). So that others can learn from and point out my mistakes as I am sure I don't have it fully optimal. But end goal is to support proper syntax highlighting mechanism.
I can mark up and fix the example broadblues linked. I don't know how I missed that. As it seems I have been all over the available wiki and documents. That example does have quite a few bugs in it and is clearly not up to par with proper calling methodologies in OS 4.1 It works but not all that well but enough to get me moving. Time permitting I'll update that source to be more 4.1 compatible and fix the few bugs I noted playing with it. I really wish we had access to source the reaction subsystem as there is stuff just very inconsistent. I don't know if it was merging capability into AmigaOS from ClassAct but some of its half-baked. I know there are those that like MUI but for me there are some design ideas they choose that I don't care for and it always feels foreign and I have no desire to pay money for the OS GUI kit so I can skin it. It just a weird license model.
DStastny
So resurrecting this thread a bit. I am further along in developing my gadget class and I would like to put it into a library. But I can not find example of how to build a gadget library. There is no example of how to implement library that allows the Intuition function OpenClass to work? Anybody point me at example or have fragment of a library. I would just be guessing at how to implement correct entry points.
Thanks as always
Doug
DStastny
For OpenClass to work, your library base needs to be a struct ClassLibrary, which is a struct Library followed by a Class pointer. You need to fill in the Class pointer in your lib_open routine.
To be fully backwards compatible you should also implement a main interface with a GetClass routine, as well as a 68k jump table with the GetClass routine at offset -30.
The GetClass routine just returns the class pointer from the library base.
This is what OpenClass actually does:
Thank you Thomas,
After I posted this last night I was digging in includes and saw the ClassLibrary struct extend a struct Library and you verified my hypothesis. I am hesitant to assume anything.
Regards
Doug
DStastny
@dbstastny
But if you only aim at OS4.1 and newer, you don't need to bother with legacy stuff. GetClass() was deprecated yonks ago.
AmigaOne X5000-020 / 2GB RAM / Sapphire Pulse Radeon RX 560 / AmigaOS 4.1 Final Edition Update 2
The class creation and initialisation of library->cl_Class should be done in the libInit() function, with cleanup happening in the libExit() function.
Only ClassAct/ReAction BOOPSI classes follow this convention as far as I'm aware. Datatype classes have something very similar with their ObtainEngine() vector, but they're a bit special since they have to be able to be opened by datatypes.library and so there needs to be a common way to obtain the class pointer.
Most other BOOPSI classes I've seen create a public class at libInit() time and programs then create instances of it using the public class name (which is often the same as the name of the library file) or use FindClass() to get the class pointer.
Yes, sorry that's what I meant. Lib_init should fill the class pointer.Lib_open only increases the use counter.
The problem is that ClassAct/ReAction was misdesigned from the beginning. The classes didn't have a ClassLibrary base. So a simple back-port of the above OpenClass function to 68k would fail.
Or they can of course obtain the class pointer right away from OpenClass():
AmigaOne X5000-020 / 2GB RAM / Sapphire Pulse Radeon RX 560 / AmigaOS 4.1 Final Edition Update 2