Organisatie mappen gebruiker en programmeur

Twee voorbeelden voor het organiseren van de directories: één voor de “user” (gebruiker), die de software afhaalt, en één voor de “developer” (programmeur):

Gebruiker
Gebruiker van de software;
– Heeft icoon op desktop om programma te starten
– Heeft lokaal een script (dat door support wordt gebruikt):
– haalt de broncode ergens af.
– pakt die uit (indien nodig)
– compileert en maakt uitvoerbaar programma met icoon+link desktop
– zet afgehaalde versie in archief

Daarvoor is een vaste directory structuur nodig, gemaakt met een script, bv makeGbUserDirs.sh
(bv geïnstalleerd en uitgevoerd door de admin, programmeur, ..)

#/bin/bash
echo "prepare local software directories"
mkdir ~/.systemPrograms
mkdir ~/.systemPrograms/log
mkdir ~/.systemPrograms/gb3src
mkdir ~/.systemPrograms/gb3src/old
mkdir ~/.systemPrograms/gb3prj
mkdir ~/.systemPrograms/gb3lib
mkdir ~/.systemPrograms/gb3run
mkdir ~/.systemPrograms/gb3run/previous
ls ~/.systemPrograms > ~/.systemPrograms/directoryCreated.txt

Nb: De programmeur kan op zijn eigen computer dezelfde struktuur gebruiken* om te testen, eventueel voor het gemak niet onzichtbaar gezet.
Dus ~/systemPrograms ipv ~/.systemPrograms), met punt kan hij dezelfde scripts als user gebruiken en vermijdt verwarring waar kans het grootst is.
* hoewel er gevaar is voor conflicten met instellingen (Settings) en libraries.

Vorige versie (met git directories etc):

#/bin/bash
echo "prepare local software directories"
mkdir ~/.systemPrograms
touch ~/.systemPrograms/directoryCreated.txt
#mkdir ~/.systemPrograms/gb3Git
#touch ~/.systemPrograms/gb3Git/Applications.txt
mkdir ~/.systemPrograms/gb3src
mkdir ~/.systemPrograms/gb3prj
mkdir ~/.systemPrograms/gb3run
#mkdir ~/.systemPrograms/gb3testrun
ls ~/.systemPrograms > ~/.systemPrograms/directoryCreated.txt

In Applications.txt houdt de admin bij over welke apps het gaat

In de bin directory van de gebruiker wordt het script gezet om een nieuwe software/versie te downloaden en te installeren voor gebruik.

Gebruiken van de software

  • afhalen
  • installeren/compileren
  • log installatie/versies

Afhalen
Eerste stap: afhalen van een server of in dit geval een NextCloud share:

bv: GetFromNextcloud.sh

#!/bin/bash
releasedir = ~/NextCloud/Shared/ShareKantoor/SwUpdates/release
myapp = $1-$2.tar.gz
echo "Get from nextcloud: " 
if [ $# -eq 0 ]; then
  echo "- No arguments provided; choose from: "
  ls -lFAh $releasedir/*.tar.gz
  echo "or download (manually if no fixed link) from shared nextcloud folder sharekantoor/swupdates/release or other source"
  exit 1
fi
# check right download dir name:
cp $releasedir/$myapp ~/Downloads/
ls ~/Downloads/$1*
echo "when all went well, ready to use install script instfromdownload.sh"

Gebruik: parameters voor naam programma en versie:

GetFromNextcloud mijnProgramma 0.3.12

Installeren
Tweede stap: installeren voor gebruik:

bv: InstallFromDownload.sh

#!/bin/bash
# install gambasapp.tar.gz from downloads directory
# upd 25/10/2022: define softsource as download dir
softsource="~/Downloads/Software"
echo "Use: $0 [myGb3App] (name, no extention) to install myGb3App.tar.gz from $softsource"
if [ $# -eq 0 ]; then
  echo "- No arguments provided; choose from: "
  ls -lFAh $softsource/*.tar.gz
  echo "or download (manually if no fixed link) from shared nextcloud folder sharekantoor/swupdates/release or other source"
  exit 1
fi
cd $softsource
ls -lFAh $1*
myapp = $1.tar.gz
echo "move and unpack $myapp"
cp myapp ~/.systemPrograms/gb3prj/
cd ~/.systemPrograms/gb3prj
tar -xzvf myapp
echo "compile install $myapp"
cd myapp
gb3c -a
gba3 -o ./../gb3run/$myapp.gambas
echo "cleanup .. "
mv ~/.systemPrograms/gb3src/$myapp /.systemPrograms/gb3src/previous/
mv /.systemPrograms/gb3prj/$myapp /.systemPrograms/gb3src/
ls -lFAh /.systemPrograms/gb3src/$myapp
ls -lFAh /.systemPrograms/gb3src/$myapp
rm ~/Downloads/Software/$myapp
ls ~/Downloads/Software/$myapp
echo "End install, ready to run $myapp"

Log
Derde stap (optioneel): laat ergens log achter
– minstens bv een touch log/myapp-date.txt

Andere versie, 22/11/2022:

#/bin/bash
sleeptime=5
releasedir=~/Nextcloud/Shared/ShareKantoor/SwUpdates/release
targetdir=~/.systemPrograms
echo "Script to install gambas3 app ($1) with version ($2) in $targetdir .." 
cd $targetdir/gb3prj
if [ -z "$1" ]
then
  echo "No application name to install"
  ls -lF $releasedir
  echo "Gambas3 app name? (basename eg: myLog) - exists in remote?"
  read targetbase
  if [ -z "$targetbase" ];
  then
    echo "no app name given - exit"
    exit 0
  fi
else
  targetbase=$1
fi
echo "target base is $targetbase"
if [ -z "$2" ]
then
  echo "Check previous $targetbase versions: "
  ls -lFAh $targetdir/gb3src/$targetbase*
  echo "Version? (eg 0.0.4) version no of $targetbase to download;"
  read targetversion
  if [ -z "$targetversion" ]
  then
    echo "no $targetbase version given - exit"
    exit 0
  fi 
else
  targetversion=$2
fi
echo "try to move older versions to old/ " 
mv $targetdir/gb3src/$targetbase* $targetdir/gb3src/old/
ls $targetdir/gb3src/old/
echo "target version is $targetversion"
targetsoft="$targetbase-$targetversion"
targetsource="$targetsoft.tar.gz"
echo "Get $targetsource to unpack, compile/install $targetsoft in ~$targetdir (or ctrl-c)....." 
#exit1
sleep 1
echo "copy .. "
cp $releasedir/$targetsource $targetdir/gb3prj
cd $targetdir/gb3prj
ls -lFAh $targetbase*
sleep $sleeptime
if [ ! -f $targetdir/gb3prj/$targetsource ]
then
    echo "Download not succeeded - exit"
    exit 0
fi
echo "unpacking.."
#exit 1
sleep $sleeptime
tar -xzvf $targetsource
cd $targetbase
ls -lFAh
sleep $sleeptime
echo "cleanup to source dir $targetdir/gb3src"
mv $targetdir/gb3prj/$targetsource $targetdir/gb3src
rm $targetdir/gb3run/$targetbase.log
echo "compile $targetsoft.. "
#sleep $sleeptime
gbc3 -a 2> $targetdir/gb3run/$targetbase.log
gba3 -o $targetdir/gb3run/$targetbase.gambas
cd ..
echo "done $targetbase"
ls -lFAh $targetdir/gb3run/$targetbase*
echo "Changes: (top) "
head -5 $targetdir/gb3prj/$targetbase/Changes.txt
echo "Errors: " 
cat $targetdir/gb3run/$targetbase.log

Programmeur

We gaan er van uit dat gewerkt wordt met git. Ook de programmeur heeft vaste directories, misschien op verschillende locaties (werk/huis/..)
Als hij vanop verschillende locaties werkt is ook hier een script handig, bv makeGbDevDirs.sh

mkdir ~/dev
mkdir ~/dev/gb3prj
mkdir ~/dev/gb3run
mkdir ~/dev/gb3src

cd ~
ls dev/

ps: In omgeving (op pc) waar ook development gebeurt in andere context kan een extra laagje nodig zijn:
mkdir /home/user/dev/context/gb3prj
(context, groupname voor projectgroep zoals in gitlab, bedrijfsnaam/organisatie/klant, of..)

src
Als voor de start van een git project vertrokken wordt van een source pakket (.tar.gz), kan dat in gb3src gezet worden.
Bij het afhalen van een nieuwe src shuift de vorige op naar src/previous, en die src/previous kan af en toe leeggemaakt worden.

prj
hieronder zitten alle projectdirectories, met daarin de git repository van het project; eigenlijk dus de Gambas projecten waaraan vanuit de IDE gewerkt wordt.
De stappen van de ontwikkeling vinden binnen git plaats; bv een “dev” tak, een “test” tak, en eens goedgekeurd, een “main” tak met de release versie.
De broncode wordt bijgehouden op de git server en op alle ontwikkelstations.

run
Bij compileren wordt het uitvoerbaar bestand hier gezet.
Bij het omschakelen tussen verschillende ontwikkeltakken (branches) kan het nodig zijn een extra run directory te hebben, bv run/dev en run/test en/of run/main.

Software publiceren
De programmeur kan een script hebben om een “release” te doen; een afgewerkte versie van zijn applicatie in de Nextcloud directory klaarzetten voor de gebruikers. Of nog eenvoudiger: hij kan van in de Gambas3 IDE (programmeeromgeving) een “make source file” maken met als bestemming de gemeenschappelijke Nextcloud map.

Settings probleem crasht programma

Mijn FMain crasht op het ophalen van settings (Projecteigenschappen component Settings: gb.settings).

Gambas 3.14.3 en Gambas 1.17.3.

Eigenaardig genoeg werken de settings wel in MMain en FAbout, enkel niet in FMain.

Foutmelding:

“Geen reeks in FMain:2288”

Vervelend dat de foutmeldingen vertaald zijn als je daarop wil zoeken op het web.

Ik veronderstel dat de Engelstalige iet zou zijn als “Not an array (23) “?

Wat verklaard wordt als:

You try to use the array operator [] on something that does not accept it.

Ik heb de schrijfwijze van de code gecheckt, die is ok en werkt elders wel.

Settings["Report/TitlesOn"] = mniReportTitles.Checked

Ik zoek nog uit wanneer het juist begonnen is, want vorige versies van het programma werkten wel en gebruikten ook de settings.
Ik heb ondertussen een nieuwe versie van een library gebruikt, en menu’s bijgemaakt waarvan ik de checked toestand in settings bewaar/eruit ophaal, en settings code gegenereerd met een ander programma, allemaal dingen om te checken dus.

Oplossing
Kies in plaats van “Run” (F5) voor “Compile” (F7), dan zie je de waarschuwingen (warnings).

Daar zie je:

Klasse FMain, Lijn 9, Klassenaam verborgen door globale declaratie: Settings

Dat is niet erg behulpzaam, maar in FMain.Form op lijn 22 gebeurt het:
{ Settings Menu
}

Er is dus in een menu iets dat de naam “Settings” heeft… en dat geeft een conflict met de Settings component.

In de IDE terug te vinden met de menu editor (form, rechtsklik, menu-editor) of CTRL-e
Daar blijkt het een spacer te zijn, een leeg menu item dat enkel dient om een onderverdeling te maken. Waarschijnlijk heeft die per vergissing de naam Settings gekregen, bv door per vergissing op een toetsencombinatie voor plakken te drukken als er nog “Settings” in de buffer zat.

Verander “Settings” in een meer menu-geralateerde naam, bv mniSpacer.

Hieraan zie je weer het belang van de naamgeving. Ik gebruik voor menu’s een verschillende naam voor de hoofd en de sublijnen:
mnuFile : voor het hoofdmenu, zichtbaar in de menubalk.
mniFileOpen : voor het submenu, onder File.

Raadsel opgelost, klaar.

Checklist nieuw project, hulpmiddelen

update van gambas.copyleft.be/blog/checklist-project van 2014/2017

Start een nieuw project: commandolijn, lib, grafisch, databank, …
Algemeen: gebruik settings, foutbeheer, log, versienummer, ..

commandolijn

  • ook te gebruiken als shell script. Let op met locatie van bestanden/de applicatie zelf.

commandolijn, lib, grafisch, databank

lib

  • hergebruik in diverse projecten. Opgelet voor versie-verschillen…
  • locatie: gecompileerde library komt bv terecht in /home/username/.local/share/gambas3/lib/

commandolijn, lib, grafisch, databank

databank:

  • Begin met emptydb project sjabloon
  • Gebruik settings om databankgegevens op te slaan; gebruik een “switch” om tussen test en productiedatabank te wisselen (DataContext).
  • Gebruik een applicatie-log (errorlog) bv myLog
  • Veldnamen conventies
  • meta-informatie; bv in databank met aparte tabel (zie dbinfocode)
  • db struktuur opnemen in project (dump zonder data); opvolging van wijzigingen aan databank struktuur: schrijf telkens een stukje code alvorens/om die wijziging uit te voeren zodat je die kan meenemen.
  • persistence, schermcode genereren, …?

commandolijn, lib, grafisch, databank

Desktop (grafische gebruikers-bediening):

  • Begin met empty project sjabloon.
  • ! desktop-eigen bibliotheken (kde-qt/gtk)
    • worden soms niet meer ondersteund in een volgende versie; bv qt upgrades enz.
    • maken het moeilijker over te zetten naar een andere desktop/distributie..
  • Log: Gebruik een applicatie-log (errorlog) bv myLog
  • Gebruik settings om gebruikersinstellingen op te slaan, bv met GbSettingsTool kan je die vullen/lezen
  • Gebruiksteller of RunCounter: bewaren in settings
  • Venster-titel: Geef nuttige/relevante venstertitels, zodat je ziet welke vensters bij deze applicatie horen; met applicatienaam-vensternaam(functie)-versie.nr, … Bv door procedure in mmain of MForm die je voor elk venster aanroept, met een bDeveloper switch kan je als developer de form naam krijgen, gebruiker krijgt functietitel
  • Venster-icoon: zetten in de form Me.Icon of neem dat eventueel mee op in de procedure van de venstertitel. Je kan het icoon laten evolueren (kleur, scherpte, vorm) om de graad van de hiërarchie van het venster te tonen; bv hoofdvenster, 1e sub, sub-van-1e-sub… Iconen in mapje met namen voor level; iconL0.png ,iconL1.png, iconL2.png, …
  • Menu Help/About met Help, About, License, Changes, WhatsNew,
  • Menu File met Quit die afsluitprocedure oproept. Eventueel per vergissen sluiten met venster [x] opvangen.
  • Feedback naar gebruiker: eventueel te sluiten, of met bDeveloper switch te aktiveren
  • Versienummer: je moet kiezen om die door Gambas te laten tellen of uit een “VERSION” bestand in te lezen. Je kan dat versienummer ook bij verhogen van de gebruiksteller opslaan als laatstgebruikte versie in het settingsbestand.
  • Weergaveconventies: stel op en gebruik, integreer in een voorbeeldscherm. Kleur/vorm voor vaste tekst, ingaveveld, ingavevoorbeeld, reaktie, foutmelding, enz.
  • Dubbelstartcontrole (als dat belangrijk is voor je app – bv omdat die naar een bestand schrijft, ..)

commandolijn, lib, grafisch, databank

Gambas 3 op openSUSE 15.4

Na installatie is er geen Gambas aanwezig in de software beheerder van Yast.
(openSUSE Leap 15.2 had een officiële 3.14.3)
(openSUSE Leap 15.3 had een officiële 3.14.3 bp153.1.25 ondertussen)

Zoek dan op software.opensuse.org:

https://software.opensuse.org/package/gambas3-ide

Show community packages, daar heb je keuze uit:

  • home:munix9 Community
    3.17.2
  • home:munix9:unstable Community
    3.17.90+git.20220519….

3.17.2 [1 click install]
Open with yast, install

Kreeg wat foutmeldingen:

An error occurred while initializing the software repository.
Details:
https-download.opensuse.org-e5b4b647: [https-download.opensuse.org-e5b4b647|https://download.opensuse.org/repositories/SUSE:/SLE-15-SP1:/GA/pool/] Valid metadata not found at specified URL
History:
– [https-download.opensuse.org-e5b4b647|https://download.opensuse.org/repositories/SUSE:/SLE-15-SP1:/GA/pool/] Repository type can’t be determined.

Try again?


Eerst ja, maar dat werkte niet, dus op den duur nee gezegd bij opnieuw proberen, en dan ging de isntallatie verder met de volgende onderdelen, weet niet wat er mist of mis zal gaan…

Gambas IDE komt niet voor in menu, dus ik ga terug naar yast en check de individuele paketten..

Repo is wel toegevoegd, ik kan nu gambas vinden bij software.
Ik selecteer en installeer verder van hieruit “gambas3-ide”, wat alle andere paketten automatisch selecteert (behalve de de debuginfo en nog een paar andere als gambas3-gb-web-form).

Installed Packages: 146
autoconf, automake, bison, bison-lang, dwz, gambas3, gambas3-dev-tools, gambas3-gb-args… (more)

Ok nu:
Menu Development, Gambas3: 3.17.2

Taalinstelling desktop: invloed op gambas programma

Een eigenaardig verschijnsel: een gambas3 applicatie werkt op sommige desktops goed, en op andere niet; opvragen van gegevens uit de databank gaat wel, maar bij het bewaren van wijzigingen treedt een fout op.
Allen zijn OpenSUSE/KDE/Plasma5. De versies van de gebruikte libraries moet ik nog controleren. Maar het enige verschil lijkt voorlopig de taalinstelling; op de Nederlandstalige desktops werkt de applicatie niet, op de Engelstalige wel.
Als ik op dezelfde computer waar het bij een [Be/nl] gebruiker niet werkt, een gebruiker aanmaak met als desktopinstelling Engelse als taal, werkt het daar wel.

Heeft de taalinstelling van een desktop invloed op het uitvoeren van Gambas programma’s?

Bv de manier hoe een datum wordt weergegeven/gelezen uit database/geschreven naar database..?

Soms zie ik bij het uitvoeren van een programma vanuit de IDE een melding in de console:

gbx3: warning: cannot switch to language 'en_BE.UTF-8': No such file or directory. Did you install the corresponding locale packages?

Deze treedt op bij een Engelstalig (US) geïnstalleere KDE desktop, met een programma waarbij de optie vertaling afstaat.

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…

Gambas3 zelf compileren

Van broncode
Als je de laatste nieuwe versie van gambas wil, kan je de broncode afhalen en zelf compileren; dat wordt op gambaswiki.org/wiki/install beschreven. In mijn geval had ik voordien al een werkende Gambas3 uit de distributis openSUSE 15.3, en vervolgde het zo (ik volg de bovenstaande handleiding):

Software te installeren:
– automake (gnu): 1.11.1 (OpenSuse: Ok; 1.15.1-4.10.2)
– autoconf (gnu): 2.68 (OpenSuse: Ok; 2.69-1.445)
– libtool (gnu): 2.4 (OpenSuse: Te installen: 2.4.6-3.4.1)
Deed ik via Yast, Software management.

Niet vermeld maar ook nodig: git
zypper in git

Dan zie ik onderaan nog een commando waarin veel meer dan dit geïnstalleerd wordt:

zypper update -y && zypper install -y libtool gcc glew-devel gmime-devel gtk2-devel gtk3-devel libqt5-qtx11extras-devel libqt5-qtwebengine-devel libQt5Xml-devel libQt5Sql-devel libqt5-qtsvg-devel libQt5Gui-devel libQt5Core-devel libQt5Sql5-postgresql libQt5Sql5-unixODBC libQt5Sql5-mysql libQt5Sql5-sqlite webkit2gtk3-devel libICE-devel libSM-devel unixODBC-devel libzip-devel libzstd-devel libmariadb-devel gsl-devel libopenssl-devel alure-devel postgresql-devel libcurl-devel libSDL_ttf-devel libSDL_mixer-devel libSDL-devel libSDL2_ttf-devel libSDL2_mixer-devel libSDL2_image-devel libSDL2-devel libxslt-devel libv4l-devel librsvg-devel gtkglext-devel libgnome-keyring-devel libjpeg62-devel libpoppler-devel libpoppler-glib-devel imlib2-devel gmp-devel gstreamermm-devel

Ik heb eerst wat “backports” repo’s moeten afzetten alvorens bovenstaande uit te kunnen voeren.
Ok.

Directory gemaakt om gambas in te compileren:
mkdir gambasfromsource
cd gambasfromsource

Afhalen van de gambas code (zonder history –depth=1):

$ git clone --depth=1 https://gitlab.com/gambas/gambas.git

Cloning into ‘gambas’…
remote: Enumerating objects: 7648, done.
remote: Counting objects: 100% (7648/7648), done.
remote: Compressing objects: 100% (6718/6718), done.
remote: Total 7648 (delta 1155), reused 5252 (delta 493), pack-reused 0
Receiving objects: 100% (7648/7648), 14.88 MiB | 13.98 MiB/s, done.
Resolving deltas: 100% (1155/1155), done.

Versie controleren:
cd ~/gambasfromsource/gambas>
cat VERSION

3.17.0

(latere versies waren bv 3.19, 3.19.90, ..)

Om te updaten naar weer laatste versie: git pull

git pull

Already up to date.

(omdat ik de code net afgehaald had).

Drie stappen:

Om te “compileren”; opeenvolgende commando’s van in de gambas dir:

./reconf-all
(cpu naar 65% en duurt ong 5 min)

./configure -C -q
(cpu naar 70% en duurt ong 2 min.)

Output: een heleboel “configure: WARNING: Unable to met … requirement: Qt.. ”
en eindigend:

|| THESE COMPONENTS ARE DISABLED:
|| – gb.db.sqlite2
|| – gb.qt4
|| – gb.qt4.ext
|| – gb.qt4.opengl
|| – gb.qt4.webkit
|| – gb.qt4.webview
|| – gb.qt5.webkit
||

Om te “maken” :

make -j $(nproc)

cpu: 100%, duurt ong. 15 min.

Om te “installeren”:
(moet als root)

sudo make install
Password:

cpu 50% duurt 4 min.

Daarna kan je gambas starten, en ik zie als versie nu 3.17 ipv 3.14.
In de titelbalk staat een waarschuwing:

ONTWIKKELVERSIE GEBRUIK OP EIGEN RISICO!

Nu ben je ook klaar om Gambas zelf aan te passen

Lees een letter: j/n

Soms is het meest eenvoudige moeilijk te vinden als je altijd in een grafische GUI omgeving bezig bent…

commandline programma (CLI):

'gambas module file
Public Sub Main()
  Dim s As String
  Print "Verdergaan? j/n"
  Input s
  Print "Je antwoord was " & s
End

ValueBox.Allowed is not a property

Het programma dat werd geïmporteerd uit gambas2 naar gambas3 3.14 (op KDE/openSUSE 15.3) crasht of (gedraaid vanuit de IDE) stopt met de melding:

ValueBox.Allowed is not a property

Een zoek op “ValueBox.Allowed” in de broncode van het scherm waarin het gebeurt levert niets op.
Een zoek op “ValueBox.Allowed” in de broncode van het hele project levert ook niets op.

Langzaam begin ik te vermoeden dat de foutmelding te maken heeft met het venster (Form) dat een beetje verder in de code geopend wordt.

In dat scherm worden een aantal waarden geïnitialiseerd, en daarbij worden valueboxen zo behandeld:

vlbxSomeValue.Clear()

Die heb ik er uit gehaald;
(eventueel vervangen door:
vlbxSomeValue.Value = 0?)

Het volgende probleem is:
vlbxAmounthh.Select()