21 August 2023, 14:01 | #21 | ||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,335
|
Quote:
Now what about a prop gadget ? Or some edit box ? I'd like to add copy-paste in them. Quote:
Quote:
Quote:
Simply inheriting from gadgetclass does not provide the wanted behaviour. Quote:
If this is wrong, then MUI is wrong as well. What's wrong is how the OS handles that. It should really have made this feature available for programs. Open some console window and start selecting text on it. This won't block new windows catching the focus. You're obviously playing with something that's not a gadget but perhaps should behave like it was. However, the OS is simply unable to do this, and what if you want to write a console that does ? Quote:
Quote:
Quote:
Again, portable GUI with no care about what RKRM says. Quote:
Quote:
Rendering by hand has even more options. |
||||||||||
21 August 2023, 15:59 | #22 | |
Registered User
Join Date: Aug 2010
Location: Germany
Posts: 532
|
Quote:
Post Kickstart 1.3 work was underway to open up the building blocks of the intuition user interface, removing the limitations baked into them. Among the first changes made were the so-called custom gadgets. They enabled much finer control over how gadget input was processed and how the gadget was rendered. But that was not enough and a more general foundation for Gadgets, Images, etc. was introduced. This brought object-oriented programming to Intuition, which is what the BOOPSI acronym stands for: basic object-oriented programming system for Intuition. With emphasis on the "basic". If the name sounds funny (but nobody's laughing), wait until you have seen how it works. It uses an object model adapted from Smalltalk, which is possibly the most powerful and at the same time least complex and most memory efficient option that works. It is sufficiently powerful to both underpin Intuition data structures and to encapsulate, if so desired, complex user interface controls as well as images, sound, windows, etc. The DataTypes system of Kickstart 3.0 and beyond is built from BOOPSI classes. The colorwheel.gadget and gradientslider.gadget introduced in Kickstart 3.0 are loadable BOOPSI class libraries and gradientslider.gadget even has its own API. This is powerful stuff which enables crazy degrees of control and leverage. If you haven't looked it up and read a bit about how it works and what it delivers, I certainly won't blame you. When this was new, I waited years because there was just so much to digest and put into context, never mind how this could become useful for your own work. You are missing out on something, though, even if you should decide that this is not really a tool you would consider essential or even helpful for your own work. If you never heard about Smalltalk, you are certainly missing out on some major piece of tech which even so far has not gotten its due (Smalltalk is 52 years old by now). That said, it definitely works better if it is integrated with a programming language. In its raw form the API surface, its data structures and its operations tend to be spare and crude. Which is why BOOPSI tends to be wrapped into more comfortable layers of APIs. This is not for everybody, but, as I mentioned, you may just be missing out on something here. |
|
21 August 2023, 16:13 | #23 |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,335
|
And they are together larger than my whole GUI system, which has 11 different control (gadget) kinds.
|
21 August 2023, 18:26 | #24 |
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,796
|
|
21 August 2023, 19:31 | #25 | ||||||
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 3,247
|
Sure, can do. There is this propiclass (sp?) boopsi from which you can derive. It is used as ingredients in several other boopsis as well. IIRC, the colorwheel has a custom prop-type gadget in it. You can look it up there.
Sure, can do. Look at the info box of the workbench "info" menu. That's another boopsi that allows editing, copy & paste. That something is however something completely different. (To quote the Pythons) Quote:
That problem is, however, on your end. Do it properly, and it does work. I just pointed you to one pretty basic example. Quote:
Quote:
Quote:
The reason why that project never became reality was, just to continue another discussion, that the whole thing is in assemler, which makes this an experience that was too tedious to start working on. This said, if I recall correctly, there is now an edit boopsi in 3.2 which you can just use for that. On my end, it is a bit too late, but hey, there is surely progress. Quote:
Quote:
Well, but if you do not care about what the Amiga does, then why ask Amiga specific questions? [QUOTE=meynaf;1637268] The point was that rendering inside a boopsi would perhaps have been better done by providing a rastport limited to the gadget's area. [QUOTE] That is pretty much what you get within your boopsi renderer. You get your own RP to render within, with offsets correctly adjusted. Actually, no. Look, Boopsis can communicate to your main program to set rendering options to whatever you like. In the OM_DRAW (IIRC) method, you get a series of flags what the system provides you as "context" for rendering. Raised-recessed-activated-deactivated, and a couple of more. But, of course, you can create your own methods to deliver any other option into the boopsi (transmogrified - on or off?) and let it draw depending on that state as well. The system is really very flexible. In essense, it is just a "hook" structure with a call-back that goes into your code, and within that code, you dispatch from a delivered activity, and within that, you can do whatever you want with the resources you get. The drawback is that some boopsis do *too much* in that context, and that context is in the intuition input event hook. So, with great power comes great responsibility. |
||||||
21 August 2023, 19:33 | #26 |
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 3,247
|
That's because it already does quite a bit. Remember, it has to find proper rendering with a limited number of palette colors for the color-wheel. I believe it is one of the rare boopsis that requires services from the math libraries for all color-correct rendering.
|
21 August 2023, 20:15 | #27 |
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,796
|
|
21 August 2023, 20:31 | #28 |
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 3,247
|
If I recall correctly, it needs trigonometric functions, but it's been a while since I checked the code. It is mostly for calculating from the "hot spot" location the color to render, not to compute the "nearest possible color in a palette".
|
21 August 2023, 21:23 | #29 | ||||||||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,335
|
Quote:
Quote:
Quote:
Quote:
Quote:
Unreasonable. Quote:
Quote:
So i will have to rewrite everything to get a behaviour... that will not be there at the end ! Quote:
So no, it is not available for programs. Not at all. Quote:
Quote:
Done, actually. But dependent on the order things are displayed. Quote:
Quote:
Actually, yes. Rendering myself can only offer more options. There is nothing boopsi can do that i can not do too. Quote:
Quote:
Quote:
And indeed, using a little bit too much cpu power isn't problematic in the app's context - as with my current solution. So the boopsi will add another problem that i didn't have before. Quote:
|
||||||||||||||||
22 August 2023, 07:13 | #30 |
Registered User
Join Date: Nov 2015
Location: Italy
Posts: 191
|
I wonder if it would not make sense for the OS (or a little patch) to check in openwindow if left mouse button (maybe other buttons, too) is pressed, and if so, force the new window to open in inactive state, even if the guy who made the openwindow call set WFLG_ACTIVATE or WA_Activate,TRUE.
Can anyone think of a case, where this would not be more desirable than Intuition stealing the focus while user is obviously doing something in current active window? |
22 August 2023, 10:06 | #31 | |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,335
|
Quote:
|
|
22 August 2023, 22:32 | #32 | |
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 3,247
|
Quote:
This is the wrong type of test. The right type of test is whether intuition is currently in a state where it is in some interactive feedback from the user, and that is not limited to the mouse buttons. Actually, that is all codified in the intuition internal state machine and as such handled correctly. |
|
22 August 2023, 22:43 | #33 | |||||||
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 3,247
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Which "additional CPU power"? For calling your hook from the intuition input hook? Be serious... |
|||||||
23 August 2023, 08:58 | #34 | |||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,335
|
Let me repeat myself :
"I'd have to rewrite everything so the class would be useless." If you want to make the boopsi look like f.e. a gadtools slider, you have to draw it yourself and ignore the base class rendering completely. And about the events, you'd have to do it too because you do not have access to the base class internal state (or you have to tell me how). Quote:
All two contain the string "gadgetclass" but no other base class name. Quote:
Quote:
Quote:
Perhaps you could help, instead of criticizing. Quote:
Quote:
Quote:
Quote:
I'm drawing with graphics primitives and receiving intuition idcmp messages. If that's washing away AmigaOs in total... Quote:
And boopsis wouldn't fare better. That's complete nonsense. As if drawing inside of a boopsi would have given a different result than drawing outside ! It was you who told me many boopsis could make the system unresponsive... |
|||||||||
24 August 2023, 15:45 | #35 | |||||||||||
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 3,247
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Now, that complexity itself cannot be avoided, but with the current design, the computation is performed in the wrong task, namely as part of the input event handler of intuition and as such as part of the input device. Thus, when the layout is redone, the mouse pointer cannot move because it is done by the task that is responsible for moving the mouse pointer itself, and *that* makes the system irresoponsive. So the design problem is not such much that we have boopsis or hooks, but that their rendering and activation is run as part of the intuition input event handler. This problem would neither go away by having a different or more (or less?) sophisticated calling mechanism for boopsi code. The problem would go away if intuition would dispatch such activitiy to the user code as part of IDCMP handling. Unfortunately, the damage is done at this point, and I would have no clear idea how to resolve that. But I'm not the intuition expert either. Massimo is. Long story short: Boopsis are fine, as long as you don't create huge hierarchies of them and nest them. Complex GUIs are a problem for underpowered machines like the Amiga anyhow, but the boopsi design of "letting intuition do everything" is too simple to address this issue. |
|||||||||||
24 August 2023, 16:46 | #36 | |||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,335
|
The parent class code wouldn't be used, no. At least, not the display part.
Because the base class won't draw the expected result. A boopsi propgadget looks like... well, a boopsi propgadget. Quote:
Quote:
Quote:
Quote:
For making it work, i would have had to alter it in heavy ways - it ended up better to base myself on something of lower level. After all, SDL itself is based on something else - i just did the same. Of course, using SDL on the Amiga itself was just out of question, for performance issues. And, do not confuse the needs here. DX11 was to provide 2D frame buffer, not at all for GUI using gadgets - that part is regular GDI. Quote:
Quote:
(Remember, this is the whole purpose of this thread.) Quote:
Quote:
Therefore Amiga-specific stuff either works for my needs or is thrown away. The current system is weak and it's too late to change it, as the software will have to work ideally down to v36. It does not differentiate between button background color and window background color. Window background is of color 0 and knows nothing else. There is no pen dedicated for a text cursor, or selected text, or even knob colors. Quote:
Quote:
Quote:
Of course it's gonna be complex, but the Amiga will still be up to the job. I'd like to see such a complex GUI btw, to check if my library will be able to reproduce it. |
|||||||||||
27 August 2023, 19:21 | #37 |
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 3,247
|
So, here is a little bit of code. This creates a custom subclass of the image class which is used for rendering the "iconification" gadget of VINCEd. It is used as "intuiImage" drop in for the Gadget "Render" image.
First, the class constructor: Code:
InitIconifyClass: saveregs a2-a3/a6 move.l a6,a3 sub.l a0,a0 ;Klasse ist privat sub.l a2,a2 ;Superklasse ist public move.l vc_IntBase(a4),a6 ;IntuitionBase moveq #0,d0 ;wir brauchen keine privaten Daten moveq #0,d1 ;noch Flags lea ImageClass,a1 ;Superklasse ist imageclass jsr MakeClass(a6) ;erzeuge die Klasse move.l d0,a1 ;sichern tst.l d0 beq.s .exit ;bei Fehler hinaus lea IconifyImageDispatcher(pc),a0 ;den Dispatcher clr.l h_SubEntry(a1) ;weiteren SubHook löschen move.l a0,h_Entry(a1) ;eintragen move.l a3,h_Data(a1) ;Data ist VNCBase .exit: loadregs rts Code:
;************************************************* ;** IconifyImageDispatcher ** ;** ** ;** dies ist der Dispatcher für die Iconify ** ;** Klasse ** ;** a0 = Class ** ;** a2 = Object ** ;** a1 = Message ** ;************************************************* IconifyImageDispatcher: saveregs d2-d7/a2-a6 move.l h_Data(a0),a5 ;hole VNCBase move.l (a1),d0 ;hole die Methode sub.l #IM_DRAW,d0 beq.s .drawobject ;IM_DRAW? subq.l #4,d0 beq.s .drawobject ;IM_DRAWFRAME? ;** ;** hier die Default-Methode: An die Superklasse verweisen ;** move.l cl_Super(a0),a0 ;Super-Methode holen bsr CallHook ;alles andere ist noch ;korrekt initialisiert bra .exit ;** ;** hier OM_DRAW und OM_DRAWFRAME ;** .drawobject: move.l a1,a4 ;sichere die Message move.l vc_GfxBase(a5),a6 move.l impd_DrInfo(a4),d0 ;haben wir eine DrawInfo? beq .nodri movem.w impd_OffsetX(a4),d2-d3 ;X,YOffset aus der Message move.l impd_RPort(a4),a3 ;RastPort holen add.w ig_LeftEdge(a2),d2 ;plus LeftEdge aus der Struktur add.w ig_TopEdge(a2),d3 ;plus TopEdge movem.w ig_Width(a2),d4-d5 ;Breite,Höhe->d4,d5 cmp.l #IM_DRAWFRAME,(a4) ;ist das DRAW_FRAME bne.s .nodrawframe movem.w impd_DimensionsWidth(a4),d4-d5 ;ansonsten von hierher .nodrawframe: add.w d2,d4 add.w d3,d5 subq.w #2,d4 ;wg. TBI-Kollision. subq.w #1,d5 ;rechten unteren Rand berechnen move.l impd_DrInfo(a4),a0 ;DrawInfo->a0 move.l impd_State(a4),d1 ;Draw-State->d0 move.l dri_Pens(a0),a0 ;Pens->a0 movem.w SHINEPEN*2(a0),d6-d7 ;Shine,ShadowPen->d6,d7 move.w FILLPEN*2(a0),d0 ;Fillpen subq.l #IDS_SELECTED,d1 ;Draw-State=1? (Selected) bne.s .nodraw1 exg.l d6,d7 ;ja, so austauschen .nodraw1: subq.l #IDS_INACTIVENORMAL-IDS_SELECTED,d1 ;oder fünf? beq.s .selectbgpen subq.l #IDS_INACTIVEDISABLED-IDS_INACTIVENORMAL,d1 ;oder sechs? bne.s .noselectpen .selectbgpen: move.w BACKGROUNDPEN*2(a0),d0 ;Backgroundpen .noselectpen: move.l a3,a1 jsr SetAPen(a6) ;setze den Hintergrundstift saveregs d2-d3 move.l d2,d0 move.l d3,d1 move.l d4,d2 move.l d5,d3 ;Koordinaten addq.l #1,d1 subq.l #1,d3 move.l a3,a1 jsr RectFill(a6) ;ausfüllen loadregs ;now the upper and lower lines move.l d6,d0 move.l a3,a1 jsr SetAPen(a6) move.l d2,d0 move.l d3,d1 move.l a3,a1 jsr Move(a6) ;upper left move.l d4,d0 move.l d3,d1 jsr Draw(a6) move.l d7,d0 move.l a3,a1 jsr SetAPen(a6) move.l d2,d0 move.l d5,d1 move.l a3,a1 jsr Move(a6) move.l d4,d0 move.l d5,d1 move.l a3,a1 jsr Draw(a6) ;left and right border move.l impd_DrInfo(a4),a0 ;DrawInfo->a0 move.l impd_State(a4),d0 move.l dri_Pens(a0),a0 ;Pens->a0 move.w SHADOWPEN*2(a0),d1 ;Pen für diese linke Kante: Immer Shadow subq.l #IDS_INACTIVENORMAL,d0 ;oder fünf? beq.s .selectfine subq.l #IDS_INACTIVESELECTED-IDS_INACTIVENORMAL,d0 ;oder sechs? (disabled) beq.s .selectfine cmp.w FILLPEN*2(a0),d6 ;==Fillpen? bne.s .selectfine move.w BACKGROUNDPEN*2(a0),d6 ;Backgroundpen move.w FILLPEN*2(a0),d7 .selectfine: move.l d1,d0 move.l a3,a1 ;ShadowPen jsr SetAPen(a6) move.l d2,d0 move.l d3,d1 subq.l #1,d0 addq.l #1,d1 ;links oben move.l a3,a1 jsr Move(a6) move.l d2,d0 move.l d5,d1 subq.l #1,d0 ;schwarz links daneben malen subq.l #1,d1 move.l a3,a1 jsr Draw(a6) ;linke Kante cmp.w d6,d7 beq.s .nodouble move.l d6,d0 move.l a3,a1 ;ShinePen jsr SetAPen(a6) move.l d2,d0 move.l d3,d1 addq.l #1,d1 ;links oben move.l a3,a1 jsr Move(a6) move.l d2,d0 move.l d5,d1 subq.l #1,d1 move.l a3,a1 jsr Draw(a6) ;linke Kante move.l d7,d0 move.l a3,a1 ;ShadowPen jsr SetAPen(a6) move.l d4,d0 move.l d3,d1 addq.l #1,d1 move.l a3,a1 jsr Move(a6) move.l d4,d0 move.l d5,d1 subq.l #1,d1 move.l a3,a1 jsr Draw(a6) .nodouble: move.l impd_DrInfo(a4),a0 ;DrawInfo->a0 move.l impd_State(a4),d6 ;Draw-State->d6 move.l dri_Pens(a0),a0 ;Pens->a0 move.l d6,d1 move.w SHADOWPEN*2(a0),d0 ;Shadowpen subq.l #IDS_INACTIVENORMAL,d1 beq.s .isfine subq.l #IDS_INACTIVESELECTED-IDS_INACTIVENORMAL,d1 ;nonactive? beq.s .isfine cmp.w FILLPEN*2(a0),d0 ;==FillPen? bne.s .isfine move.w BACKGROUNDPEN*2(a0),d0 ;then BGPen .isfine: move.l a3,a1 move.l d0,d7 ;keep it jsr SetAPen(a6) move.l d5,d1 sub.l d3,d1 ;Höhe bestimmen addq.l #2,d1 divu #5,d1 swap d1 clr.w d1 swap d1 ;Randverringerung move.l d6,d0 ;Drawstate->d0 addq.l #4,d2 add.l d1,d3 subq.l #4,d4 sub.l d1,d5 ;shrink box subq.l #1,d0 ;selected? bne.s .isnot move.l d2,d4 ;shrink box further addq.l #7,d4 move.l d5,d3 subq.l #6,d3 .isnot: bsr.s _DrawFrame addq.l #2,d2 move.l d2,d4 addq.l #3,d4 subq.l #2,d5 move.l d5,d3 subq.l #2,d3 bsr.s _DrawFrame addq.l #1,d2 addq.l #1,d3 subq.l #1,d4 subq.l #1,d5 move.l impd_DrInfo(a4),a0 ;DrawInfo->a0 move.l dri_Pens(a0),a0 ;Pens->a0 move.w SHINEPEN*2(a0),d0 ;Shinepen cmp.w d0,d7 bne.s .isok move.w SHADOWPEN*2(a0),d0 ;sonst ShadowPen .isok: subq.l #IDS_INACTIVENORMAL,d6 ;oder fünf? beq.s .selectbgpen2 subq.l #IDS_INACTIVESELECTED-IDS_INACTIVENORMAL,d6 ;oder sechs? bne.s .noselectpen2 .selectbgpen2: move.w BACKGROUNDPEN*2(a0),d0 ;Backgroundpen .noselectpen2: move.l a3,a1 jsr SetAPen(a6) bsr.s _DrawFrame .nodri: moveq #0,d0 .nomsg: .exit: loadregs rts _DrawFrame: move.l d2,d0 move.l d3,d1 move.l a3,a1 jsr Move(a6) move.l d4,d0 move.l d3,d1 move.l a3,a1 jsr Draw(a6) move.l d4,d0 move.l d5,d1 move.l a3,a1 jsr Draw(a6) move.l d2,d0 move.l d5,d1 move.l a3,a1 jsr Draw(a6) move.l d2,d0 move.l d3,d1 move.l a3,a1 jsr Draw(a6) ;frame is drawn. rts Code:
AllocIconify: saveregs a2/a6 moveq #0,d0 ;btstm vc_OldOs,vc_Flags(a6) ;bne .exit move.l vc_IntBase(a6),a6 cmp.w #47,lib_Version(a6) ;sufficiently recent version? blo.s .oldintuition sub.l a0,a0 lea SysIClass,a1 deftag move.w cn_IconicWidth(a5),d1 tag SYSIA_DrawInfo,cn_DrawInfo(a5) addq.w #1,d1 ;+1, muß sein, das Gadget wird dafür verschoben tag IA_Width,d1 move.w cn_IconicHeight(a5),d1 tag IA_Height,d1 moveq #ICONIFYIMAGE,d0 tag SYSIA_Which,d0 ;Which Gadget endtag NewObjectA(a6),a2 move.l d0,cn_IconifyImage(a5) bne .gotdimension .oldintuition: ldbs move.l vc_IntBase(a6),a6 sub.l a0,a0 lea TBIClass,a1 deftag move.w cn_IconicWidth(a5),d1 tag SYSIA_DrawInfo,cn_DrawInfo(a5) addq.w #1,d1 ;+1, muß sein, das Gadget wird dafür verschoben tag IA_Width,d1 move.w cn_IconicHeight(a5),d1 tag IA_Height,d1 moveq #104,d0 tag SYSIA_Which,d0 ;Which Gadget endtag NewObjectA(a6),a2 move.l d0,cn_IconifyImage(a5) bne.s .gotdimension ldbs move.l vc_IconifyClass(a6),d0 beq.s .exit move.l d0,a0 sub.l a1,a1 move.l vc_IntBase(a6),a6 deftag move.w cn_IconicWidth(a5),d1 tag SYSIA_DrawInfo,cn_DrawInfo(a5) addq.w #1,d1 ;+1, muß sein, das Gadget wird dafür verschoben tag IA_Width,d1 move.w cn_IconicHeight(a5),d1 tag IA_Height,d1 moveq #104,d0 tag SYSIA_Which,d0 ;Which Gadget endtag NewObjectA(a6),a2 move.l d0,cn_IconifyImage(a5) beq.s .exit .gotdimension: move.l d0,a0 movem.w ig_Width(a0),d0-d1 subq.w #1,d0 ;wird dafür verschoben movem.w d0-d1,cn_IconicWidth(a5) ;Größe aufheben .exit: tst.l d0 loadregs rts Thus, it is really not that complicated, actually. Just rendering is a bit lengthy, but that's unavoidable. |
27 August 2023, 20:03 | #38 | |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,335
|
Quote:
Perhaps you could factorize the code somehow. Ok, it is not that complicated, but still a magnitude more than my current method. Now, what about a custom gadget showing an icon (whose drawing can be in fastmem), which renders backfilled (like normal buttons do) when selected - of course without having to ask the end user to provide two bitmaps ? And with the option to either behave like normal button or send repeated click events like arrow icons often do ? |
|
27 August 2023, 20:11 | #39 | ||
Registered User
Join Date: Jan 2019
Location: Germany
Posts: 3,247
|
That is mostly because the rendering function is quite long as it needs to pick the pens such that the gadget is recognizable even in 2-color screens.
Quote:
Quote:
I'm not sure how to send repeated events, I would solve that by intuiticks (or at least solved this in the past this way - the arrow buttons in VNC work like this). |
||
27 August 2023, 20:20 | #40 | ||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,335
|
Quote:
Quote:
I also have a special "removed" state, to hide a control without really removing it. It should be able to restore its background. Now, doing that from inside a boopsi should be fun, huh ? |
||
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
How to remove/hide any gadget from window (gadtools) | peceha | Coders. System | 9 | 18 September 2019 08:45 |
How to add an Iconify-Gadget to a Window? | AGS | Coders. System | 5 | 15 January 2014 15:41 |
I am locking for a game | MuffinMan | Looking for a game name ? | 3 | 29 August 2010 03:12 |
Sinbad WHD locking up | Kurtz | project.Killergorilla's WHD packs | 15 | 23 March 2009 12:33 |
Gadget/Layout.gadget V44 | ruliovega | support.Apps | 6 | 02 January 2006 11:50 |
|
|