Versie van je bibliotheek (Library Version)

De versie van je eigen programma en die van Gambas kennen we al, maar hoe kennen we de versies van de libraries die we gebruiken?
In de programmeeromgeving kan je die vinden in Project, Eigenschappen, Bibliotheken, maar hoe kunnen we in een lopend programma weergeven welke versie van bibliotheken er gebruikt worden?

Library versie
Voor mijn eigen libraries kan ik het oplossen door een functie te maken die het versienummer levert.
In het library project gebruik ik een bestand met de naam VERSION (volledig in hoofdletters).
Dat is ook voorzien in de IDE: vink aan bij project: “Haal uit ‘VERSION’ bestand”.

Dan maak ik een method die ik getVersion() noem en die me de versie uitleest en doorspeelt:

Return File.Load("VERSION")

Tussen de methodes van de klasse zie je nu ook getVersion() staan.

ps: In Gambas kan je die informatie vinden in het verborgen .project bestand.
Library=:supplier/SomeLib:0.2

Gebruikte Libraries
(Upd. 07-2023)

Een Gambas programma (applicatie/project) dat één of meer libraries gebruikt, is voor zijn werking afhankelijk van de versies daarvan; je moet dus te weten kunnen komen welke versies van de libraries je moet installeren om het programma goed te draaien.
Ik standaardiseer daarvoor op een bestand “Libraries.txt”, waarin ik in volgorde de libraries opsom met hun versienummer, 1 per lijn, en in volgorde van afhankelijkheid; bv DataContext gebruikt zelf RunCounter, dan:

RunCounter 0.0.1
DataContext 0.2.9

Als tijdens de ontwikkeling van het programma overgeschakeld wordt naar RunCounter 0.0.2 dan pas je in Libraries.txt deze versie aan, en dan weet je dat het de bedoeling is met die versie te werken.

Demo in je Form

Ik heb een grappige manier gevonden om iets te demonstreren in je Gambas3 programma.
Ik heb in het “Help” menu (of ? menu) naast About, What’s new, Licentie, Help, enz een item bijgemaakt: Demo.
Ik laat daarbij op het scherm, in volgorde, oplichten wat een gebruiker achtereenvolgens moet doen.
Oplichten doe ik door tijdelijk een (achtergrond-)kleurtje te geven, bv geel. Na een kleine wachttijd van 2 seconden (die gemakkelijk kan aangepast worden in de code – misschien moet ik het instelbaar maken voor de gebruiker), krijgt het voorwerp terug de normale kleur.

mniHelpDemo_Click()
'
Dim iWaitABit as integer = 2
'
'...
'
Button1.Background = Color.Yellow
'
Wait iWaitABit
'
Button1.Background = Color.Background
'
Tabstrip1.index=4
'
Tabstrip1.Background = Color.Yellow
'
Wait iWaitABit
'
Tabstrip1.Background = Color.Background
'
Textbox1.Background = Color.Yellow
'
Wait iWaitABit
'
Textbox1.Background = Color.Background
'
'
combobox1.Background = Color.Yellow
'
combobox1.Popup
'
Wait iWaitABit
'
' combobox1.Popdown - doesn't exist? *
'
combobox1.Background = Color.Background
'
' etc...

* Combobox sluiten
Het enige wat niet goed werkt is dat ik een combobox (rolluikje met keuzes) wel kan openen om te tonen wat er allemaal in staat, maar ik kan het niet sluiten zonder een keuze te maken. Dit was niet voorzien in Gambas3, maar zal er aan toegevoegd worden vanaf de volgende versie.
Het is al opgenomen in de broncode, in commit:
https://gitlab.com/gambas/gambas/-/commit/9d08d1371982221fe876fb29ea12d020d2dd264b

Commit 9d08d137
authored 4 days ago by Benoît Minisini’s avatar Benoît Minisini
ComboBox: Close() is a new method that closes the ComboBox popup.

[GB.QT4]
* NEW: ComboBox: Close() is a new method that closes the ComboBox popup.

[GB.QT5]
* NEW: ComboBox: Close() is a new method that closes the ComboBox popup.

Niet voldoende argumenten / Not enough arguments

Situatie: Bij het proces van het integreren van een library die voorheen gemaakte eigen classes moet vervangen, treedt deze fout op.

We krijgen geen regelnummer bij de fout.

1. Klasse
Onderaan zien we aktief:

FMain.@new.0

De hele MMain (opstartklasse) wordt doorlopen zonder probleem (stap voor stap gecheckt met breekpunten).

Vanuit MMain wordt FMain gestart, dan treedt het probleem op. Er zijn wel een aantal variabelen zichtbaar in de foutopsporing, dus een stukje van FMain lijkt te lopen, maar met breekpunten is het niet uit te zoeken: zelfs een breekpunt op de eerste lijn geeft toch al een fout bij het uitvoeren van FMain.

Het probleem leek verdwenen na het verwijderen van de klasse die ook in de library zit.

2. Methode
Deze keer ligt het aan een methode in de gebruikte klasse; die is ooit hermaakt geweest en er moest een methode met de nieuwe naam gebruikt worden: bv “loadConnection” en “makeConnection”.
De oude bestond nog maar werkte niet correct.

3. Declaratie

In een module staat:

Private hDayReq As New CDayReq

“AS NEW” vervangen door aparte declaratie en initialisatie, waardoor je de fout ziet bij de initialisatie (bv daar moest nog een waarde aangeleverd worden als argument).

Private hDayReq As CDayReq
'
hDayReq = New CDayReq("A")

Als de initialisatie niet expliciet gebeurt, maar bij het eerste gebruik van deze module/classe, dan krijg je enkel een summiere foutverwijzing naar de module, maar niet naar de lijn in de module waar de fout vandaankomt.

De impliciete initialisatie met AS NEW gebeurt voor alle gedeclareerde objecten als één ervan gebruikt wordt, niet noodzakelijk hetgene waarvan de initialisatie een fout heeft.

Projecteigenschappen auteurs en beschrijving

Project “Authors” en “Description”

Bij Projecteigenschappen zie je:

Project type (normaal/bibliotheek/component)
Verkoper ("vendor")
Versie ("version)
Titel ("title")
Beschrijving ("Description")
Auteurs ("Authors")

Deze twee laatse leken me handig om te gebruiken voor, bv, het About scherm. Maar ik vond nergens een manier om ze op te roepen. Ze worden bewaard in het bestand .project, maar kunnen niet opgevraagd worden met Application.Description of Application.Authors.
Volgens Benoît Minisini komen ze alleen voor in de broncodeversie van het project, in de “project configuration file”. Ze worden niet meegenomen naar het uitvoerbare .gambas programma. (mailinglist 09-2021)

Dan lijkt het dus eerder bedoeld voor de programmeurs, niet voor de gebruikers van het afgewerkte programma. Ik vraag me nog af of het een goed idee is om hier dan programmeurs commentaren in te zetten, of moeten we rekening houden met een toekomstige update waarbij dit de standaardvelden worden voor auteurs en beschrijving?

Het mysterieuze uitroepteken in library of bibliotheek beschrijving

Bij Project, Eigenschappen, Bibliotheken: selecteer een bibliotheek (of voeg één toe).

Eigenschappen onder bibliotheeknaam zijn:

– Locatie: /home/loginname/.locql/share/gambas3/lib/vendorname/libname:0.0.gambas
– Voorziet in: CContract, CEmp!, CReqProc, CReqState!, ...

Vanwaar die uitroeptekens achter de naam van sommige klasse/modules?

(in de Engelstalige versie is het Project, Properties, Libraries, provides:…)

Antwoord (van gambas mailing list)

  • ! betekent dat de klasse statische symbolen heeft (“An exclamation mark means that the class
    has static symbols.”)
  • ? betekent dat (ipv Export) “Export Optional” is gebruikt. (“There is also a question mark suffix for classes declared with “Export Optional”)

Concreet: als je in een klasse het volgende zet:

STATIC sStaticString AS String = "Statische variabele"
of
PUBLIC CONST cConstString AS String = "Constante"

.. krijg je dus dat uitroepteken achter de naam van de klasse.

ps
Library versie verandert niet
Als je uittest met twee gambas IDE’s naast elkaar open, met een waar je de library maakt, en een ander waarin je die gebruikt, moet je de omgeving van die laatste afsluiten en terug openen om de juiste library gegevens te zien in oudere Gambas v. 3.7.1.
Zoniet blijf je daar altijd het library versienummer zien van toen je de IDE opende in Project, Libraries (zelfs als je de library verwijdert en terug toevoegt, houdt ze oud nummer en Provides gegevens).
De programma’s die je in de IDE start gebruiken echter wel de ondertussen ge-update library!

Incorrect overschreven in klasse

De foutmelding die in Gambas3 kan optreden als je een module of klasse hebt gemaakt met een methode die al voorkomt, bv in een bibliotheek die je opgenomen hebt in het project (eigenschahppen):

ModuleData.AddRecord” is incorrect overschreven in klasse “ModuleData

Engels: … is incorrectly overridden in class …

Hier is
– “ModuleData” een module in het geopende project; kan ook een klasse Class zijn ipv Module.
– AddRecord: een voorbeeld van een methode in die klasse, en die blijkt een probleem te geven (dubbel voorkomen).

Soms kan de oorzaak zijn dat je eerst klassen in je programma had die je nadien in een bibliohteek (library) hebt ondergebracht, en je hebt de klasse nog niet verwijderd. Check de library (in project eigenschappen, Bibliotheken; als je op de bibliohteek (leverancier, naam, versienummer) klikt, zie je onderaan de locatie en een opsomming van waarin die library voorziet).

Of omgekeerd, dat je een klasse bijmaakt die al bestaat in een geïmporteerde library.

Gambas3 op Tumbleweed

Op software.opensuse.org in “Zoek”: “gambas”. Dat biedt verschillende gambas3 paketten; kies IDE voor de volledige programmeeromgeving.

De officiële gambas3 is verkrijgbaar voor Leap 15.2, voor Tumbleweed is de keuze verborgen achter “experimental” en “community packages”.

  • Bij Experimental staat versie 3.14.3, en dat is exact dezelfde als in Leap 15.2, dus zo experimenteel zal die niet zijn (misschien eerder de combinatie met tumbleweed kan ik me voorstellen).
  • Bij community kanje kiezen tussen 3.15.2 op home:munix9 en 3.15.90+git.20210318… op home:munix9:unstable. Die laatste lijkt me pas experimenteel 🙂

Ik kies 3.15.2 van munix9 community, zodat ik toch een nieuwere versie heb dan de stable van openSUSE Leap 15.2, wat nu de gewone openSUSE is.
Er worden 143 packages gedownload voor gambas3.

Er komt een menu bij: Development, met daarin Gambas3.

Updates
24/05/2024
Toestand nu is:
Education (Experimental) : 3.14.3
home:Henry15ea (Community) : 3.18.1
home:munix9 (Community) : 3.19.1
1-click install, gambas.ymp, klik om te installeren.. gambas 3.19.1 is geïnstalleerd in menu Development.

23/04/2022
Ik weet niet of ik hier op hetzelfde toestel zit als bovenbeschrven installatie, maar in ieder geval, bij een update van Tumbleweed krijg ik een melding ivm Gambas:

Problem: problem with the installed gambas3-3.16.1-4.2.x86_64
Solution 1: install gambas3-3.14.3-62.14.x86_64 from vendor openSUSE-Education
replacing gambas3-3.16.1-4.2.x86_64 from vendor obs://build.opensuse.org/home:munix9
Solution 2: keep obsolete gambas3-3.16.1-4.2.x86_64

Ik wil liever de voorheen geïnstalleerde versie 3.16 behouden dan terug te gaan naar 3.14; dus ik kies voor “keep obsolete gambas3-3.16.1-4.2.x86_64″. Het probleem is dat die vraag voor alle gambas onderdelen herhaald wordt, en je dus 100 keer oplossing 2 moet kiezen, maar dat lukt dan wel.
Misschien is er iets in te stellen in het pakketbeheer, om deze gambas te behouden in ieder geval.

Gambas3 na update opensuse 15.2

Vanuit Leap 42.3 – vanuit Leap 15.1

Vanuit Leap 42.3

Een werkend systeem op openSUSE Leap 42.3 is na een reeks upgrades tot openSUSE Leap 15.2 gekomen. Helaas lijkt gambas3 nu niet meer te werken. Op de desktop merk je gewoon dat de IDE niet start. Bestaande programma’s, gemaakt in gambas, blijven wel werken.

Op de commandolijn starten:
gambas3
gbx3: unable to find startup file

Dit verschijnsel zagen we vroeger al eens:
http://gambas.copyleft.be/blog/archives/1290

De oplossing is gelijkaardig; gambas3-gb-jit ontbreekt en moet bij-geïnstalleerd worden (of/ook gambas-ide).

Dat duurt maar een paar seconden… en de Gambas3 (IDE) start weer.
Continue reading

Gambas 3 openSUSE Leap 15.2

Bv via software.opensuse.
https://software.opensuse.org/package/gambas3

Dit (3.14) is een relatief nieuwe versie van Gambas3, in vorige versies van Leap was 3.10 de officiële versie. (Zie “Unsupported distributions”)
Je kan ook een nog nieuwere 3.15 installeren uit
home:munix9 Community: 3.15.2

(Wil je ook de IDE om zelf te programmeren? Dan moet je specifiek gambas3-IDE zoeken, ofwel nadien bij softwarebeheer de IDE bij-installeren; daarbij worden dan alle andere nodige gambas3 onderdelen afgehaald.)

Een klik op Direct install opent

Yast2 – 1 Click Install – ruby.ruby2.5

gambas3 installation
“gambas3”
BASIC interpreter under Linux

Gambas is a development environment based on a BASIC interpreter with
object extensions, similar to Visual Basic. With Gambas, you can
design program GUIs, access MySQL or PostgreSQL databases, control
KDE applications, translate your program into many languages, create
network applications, build RPMs of your apps automatically.

Bevestigen..

“Proposal”

If you continue, the following changes will be made to your system:
Repositories to be added:
http://download.opensuse.org/distribution/leap/15.2/repo/oss/ (openSUSE:Leap:15.2)
Note:

You will remain subscribed to these repositories after installation.
Software to be installed:
gambas3

Next..

“Perform Installation…”

Software installation
Installation was successful

Klaar.

Of niet?
In het KDE menu, onder development zie je nu gambas3 staan.
Als je er op klikt, en er gebeurt niets, dan heb je waarschijnlijk niet de IDE geînstalleerd, maar enkel de runtime om gemaakte gambas programma’s te kunnen draaien.

In softwarebeheer zoeken naar gambas3-ide uitkiezen en bevetigen, en alle bijhorende gambas3 onderdelen, en andere extra paketten nodig voor softwareontwikkeling bevestigen en installeren. Dat kan oplopen tot bv 133 paketten in totaal.

Packages
Installed Packages: 133
akonadi-server-sqlite, bison, bison-lang, dpkg, dpkg-lang, gambas3-devel, gambas3-gb-args, gambas3-gb-cairo… (more)
Statistics
Elapsed Time: 01:47
Total Installed Size: 239.86 MiB
Total Downloaded Size: 65.86 MiB

Veel programmeerplezier.

Venster met invoer (vraag en antwoord)

Situatie: je hebt een form FMain, en je wil een vraag stellen waarbij je een antwoord verwacht van de gebruiker, dat je nodig hebt voor het verdere verloop van het programma.

Als dat een eenvoudig Ja/Neen of iets dergelijks is, kan je gewoon Message.Question(...) gebruiken; daarbij kan je detecteren welke knop gedrukt is (de waarde komt uit de Message return waarde);

If Message.Question("Really delete from database?", "Yes", "No-Cancel") = 1

– er wordt geteld vanaf 1 (bv 1=”ok” 2=”ok+save”, 3=”cancel”)
– laatste keuze is altijd de “cancel” keuze, is ook default
Antwoord dus bv 1, en daarop reageren via bv SELECT.
Maar als je echt invoer van een woord of tekst hebt, hoe dan?

Ik weet niet of het “de” juiste manier is in Gambas, maar ik loste het zo op:

Ik maak een Form FGetText met enkel
– een tekst voor de vraag (TextLabel)
– een tekstveld voor de invoer (TextBox)
– een sluiten-knop (Button)
En een procedure die public is om de vraag op te geven: setQuestion(s as string) en die in de form die vraag in een TextLabel steekt.

Deze form wordt aangeroepen

Dim sNewFile As String
'
MMain.sGetText = ""
FGetText.setQuestion("New text title or enter for default.txt ")
FGetText.Show
Wait 0.1
While Not FGetText.Closed
' this is where the form works...
Wait 0.1 ' until it is closed
Wend
If (MMain.sGetText) ' this is where the answer is found
' etc.

Als de Form gesloten wordt, geeft die eerst de waarde die ingevuld is door aan een public variabele in MMain. Deze procedure wordt aangeroepen na een “enter of return”, of de textbox nu leeg of gevuld is.

Het programmaverloop kan daar dan de waarde ophalen nadat het venster gesloten is; indien leeg kan een voorgedefinieerde standaardwaarde gebruikt worden.

Ik heb lang gewacht om dit uit te zoeken omdat ik dacht dat er toch een Gambas manier moest zijn om dat anders te doen, en misschien vind ik die ooit nog… maar toch..

Veel plezier..