Gambas3 zelf aanpassen

Na Gambas3 zelf compileren (van broncode) kan je Gambas3 ook zelf gaan aanpassen; dan terug compileren en je hebt je eigen versie van Gambas3.

Waarom zou je dat doen?

  1. Omdat het leerzaam is: je leest de broncode en je verandert kleine dingen om te kijken welk effect dat heeft, waardoor je beter gaat begrijpen hoe je dingen kan doen in Gambas
  2. Omdat er iets ontbreekt. Je kan eigen wensen hebben, en die zelf in de code aanpassen

Je mag een wens doen
Bv: je zit te experimenteren met verschillende versies van een programma, in verschillende mapjes. Je wil dat uitkuisen of bv kiezen welke versie je in git gaat zetten.
Bij het starten van Gambas3 en het openen van recente projecten zien die er allemaal hetzelfde uit; ze hebben dezelfde naam en logo.
Je wil weten welk project in welke directory zit, maar op het eerste zicht(*) kan je dat hier niet te weten komen. Je wil een “mouseover” of die het pad toont, bv
~/Gambas3Prj/test1/mijnproject
of
~/Gambas3Prj/test2/mijnproject

Tooltip
Extra informatie geven over een element doe je in Gambas met een “Tooltip”, dat is een eigenschap waar je een tekst in kan zetten om weer te geven al het pijltje over het object komt.
Zoiets wil ik toevoegen.

Hack
Start de Gambas3 programmeeromgeving en open uit de afgehaalde broncode (hier 3.17.0 master) het project gambas3 zelf (zie ook Gambas3 zelf compileren van broncode).

Er zijn verschillende onderdelen (componenten, libraries), wij willen de IDE aanpassen.
De IDE zit onder “app”: gambas/app/src/gambas3; open.

Je ziet links Project, Bronnen, Verbindingen, Gegevens. Wij willen de broncode aanpassen, dus open Bronnen. Je ziet onder allerlei mapjes een paar objecten, waaronder CRecentProject. Je werpt een blik op die code, en je ziet bovenaan een eigenschap:
Public Path As String
Dat onthouden we.

We zoeken naar het scherm voor het openen van recente projecten. Kijk door de mappen, één ervan heet “Project”, en die bevat een Form FOpenProject. (ondertussen begrijpen we ook veel beter het belang van juiste, duidelijke namen voor alles in je programmeerproject …). Dubbelklik op FOpenProject en je krijgt de Form te zien.

Die bevat een aantal Tab’s: “Open”, “Recent”, “Examples”, “Installed software”. Kies Recent.
In het midden zie je een ScrollView met de naam lstRecent. Maar die is leeg.

Doodlopend pad?

Een beetje spoorzoeken…
lstRecent wordt gebruikt in CProjectList.

Open de code van de class CProjectList.
We zien in de initialisatie onze ScrollView terugkomen:
_new(hList As ScrollView,
Een beetje verder in de code vinden we de methode:
FillWithRecent
waarin:
hProjectItem = New ProjectBox($hList) As "ProjectItem"

Laat ons die ProjectBox eens van dichtbij bekijken…

ProjectBox
Die staat onderaan, dat komt omdat die “ProjectBox” heet in plaats van “CProjectBox”; bij een Class staat er normaal een C vooraan in de naam…

Open de ProjectBox code.
In de initialisatie zie je
$hDrawingArea = New DrawingArea(Me) As "DrawingArea"

Zoek de plaats in de code waar de recente projecten worden weergegeven op het scherm, zoek naar DrawingArea?

Rond lijn 40 vind je
Public Sub DrawingArea_Draw()
Daarin worden de recente projecten op het scherm gezet, met titel, logo, versienummer, beschrijving enz. Het is dat gebied dat een blauw randje krijgt als je er met de muiscursor naartoe komt:

If $hDrawingArea.HasFocus Or If $bHighlight Then

Hier wil ik de tooltip zien; ik voeg alvast toe:

Me.Tooltip = "Test"

Ik “run” het project, en inderdaad, ik zie mijn “Test” als ik met de muis over het projectveld kom.

Eigenlijk willen we de directory van het te openen project zien. We zitten in “with/end with” bewerking van een object:
With $hProjectInfo
… wat een veelbelovende naam is: welke info bevat die? Een eigenschap path! (kan je zien als je $hProjectInfo tikt en daarachter een punt; toont eigenschappen en methodes).

Dus wordt het:

Me.Tooltip = .Path

“Run” en zie: van elke project wordt het “path” getoond!

Nu heb je Gambas3 aangepast aan je eigen noden.

Mailinglist
Je kan ook op de Gambas mailinglist een suggestie doen, en misschien wordt je wijziging wel opgenomen in een volgende versie.

Of ze zullen je zeggen dat het “path” al als tooltip werd getoond als je over het icoon van het project komt…