Gambas 2 (en Gambas 3) op OpenSUSE 12.1

Vooraf: Installeer openSUSE 12.1, bv van een CD/DVD waarvan je de inhoud kan afhalen van http://software.opensuse.org/121/en ( Algemeen: http://www.opensuse.org/ )

Daarna zoek je Gambas voor openSUSE:
http://en.opensuse.org/Gambas; in de rechtse kolom heb je “Download for openSUSE:” en de links naar 12.1, 11.4 en 11.3 (op moment van dit schrijven).

opensuse install gambas
Je komt op een soort Package Search, waar je kan kiezen uit Gambas 2 en 3 voor verschillende versies van openSUSE.

  • Versie 2-2.23 is de (laatste?) stabiele versie van de 2.x tak (voor KDE3), terwijl de huidige distributies aan KDE4 toe zijn. (Bv mijn laatste installatie op openSUSE 11.3 was versie 2-2.21)
  • Versie 3 is net uit: “3.0.0.3″

Bovenaan de lijst met software staat meestal het algemene pakket – de interpreter- (zoek programmeeromgeving of “IDE”, met alles erbij of installeer dat later), eronder de afzonderlijke modules, om enkel te installeren wat je nodig hebt.

Rechts staat de “repository” waar het uitkomt; bv “Education/oepnSUSE_12.1″.

Net daaronder een “1 Click install” link.

Net daaronder krijg je een gedetailleerde tabel met (link naar) i586-, src- (source) en x86_64- (64 bit) versies.

Een klik op “1 Click install” link en Firefox biedt aan om gambas3.ymp te openen met “Yast 1-Click Install”. (ok)

Er worden automatisch een paar repositories (perl, python, Education, non-oss..) toegevoegd. (bevestig: next).

Select the software components you wish to install: [v] gambas3
Alles staat klaar, dus bevestig (next) en bevestig nog eens het overzicht.

Geef het root wacthwoord om te mogen installeren. Ik bevestigde de key van Perl en van python (trust).

Sluit af na: Software installation Installation was successful. (Finish)

Meestal staat na installatie Gambas bij in je menu; ik merk hier in het “traditionele” KDE-menu dat er geen rubriek (programmeren of Educational of zo) is bijgekomen. Evenmin zie ik het verwachte “laatst geïnstalleerd” menu-item. Nee, opnieuw inloggen voegt het niet toe.
De gambas die ik gekozen had was dus de basis Gambas Basic interpreter, niet de volledige IDE! Gelukkig zijn nu wel de juiste repositories aanwezig en is het maar kwestie van de IDE te gaan kiezen in het softwarebeheer:
- Menu, Yast, install/remove software.
- Zoek “gambas”.
- Kies uit de lijst de IDE (automatisch worden een aantal andere mee geselecteerd), en al wat je nog denkt nodig te hebben.
- Bevestig (Accept), bekijk “Automatic changes”, ga verder (continue).

Je ziet dat er nu iets meer gedownload wordt; dat duurt even en je ziet alles voorbijrollen tot het klaar is.

Nu krijg je in het menu wel een “Recently Installed” keuze, met daarin
Gambas3 (Basic Development Environment 3)
Er is ook een menu “Development” bijgekomen (als je dat nog niet had), met daarin dezelfde keuze om Gambas te starten.

Veel plezier!


Update:

Oops!! Gambas3 start niet uit het menu!

(wordt vervolgd) (hopelijk).
- allereerst een update van het hele systeem?

Optie: installeer Gambas2 voorlopig, ook via Yast, Software Management.
Nota: Daar haal je wel een hoop KDE3 mee binnen!
De installatie verloopt vlot (repositories zijn al voorzien, dus enkel kiezen uit de software).
Er komt een menu-item bij onder Development-Integrated Environment: Gambas2…
Gambas 2 start op met het bekende scherm, voorzien van voorbeeldprogramma’s.

Posted in installatie log | Leave a comment

Afgeleide klasse van Listbox, vanuit code het object maken/instantiëren en gebruiken in een VBox

Doel: weergave van de dagen van de week, waarbij iedere dag een reeks waarden bevat (orders). De dagen van een week zijn vertikaal gegroepeerd.

De dag wordt voorgesteld als een soort listbox, met op iedere lijn de weergave van een ordernummer. Maar ik wil niet alle Dag-Listboxen, met steeds dezelfde eigenschappen, op het scherm tekenen.

De orders worden er naartoe “gesleept” (vierkantje op schermafbeelding) en komen in de lijst als je ze loslaat boven de dag (maandag op schermafbeelding).

Als er meer orders in de listbox komen, moet hij “groeien”, dwz de hoogte van de listbox moet groter worden; en omgekeerd moet hij ook kunnen krimpen.

Bovendien: de Dag-Listbox moet meer kunnen dan een listbox, ik maak dus een afgeleide klasse bv myListbox, of zo. Beter: ik noemt die CPlanDay; het geeft de planning voor die dag weer.

VBox ordent een aantal van mijn Listboxes (objecten van CPlanDay) vertikaal tot een week.

Volgende vragen bleven me open toen dat gelukt was:

  • Hoe maak ik een klasse die afgeleid is van een bestaande (Listbox)?
  • Hoe maak ik de objecten van die klasse vanuit code; “on the run”?
  • Hoe kan ik de extra mogelijkheden programmeren?
  • Hoe bereik ik de bestaande mogelijkheden van de ouder-klasse Listbox?

Eerste poging:

De klasse:

' Gambas class file
INHERITS ListBox

STATIC PUBLIC lsbxMinHeight AS Integer = 40
STATIC PUBLIC lsbxMaxHeight AS Integer = 200

STATIC PUBLIC lsbxLineHeight AS Integer = 17
STATIC PUBLIC lsbxFontSize AS Integer = 9

STATIC PUBLIC iMonday AS Integer = 0
STATIC PUBLIC iTuesday AS Integer = 1
STATIC PUBLIC iWednesday AS Integer = 2
STATIC PUBLIC iThursday AS Integer = 3
STATIC PUBLIC iFriday AS Integer = 4
STATIC PUBLIC iSaturday AS Integer = 5
STATIC PUBLIC iSunday AS Integer = 6

PRIVATE iDay AS Integer = iMonday

PUBLIC SUB _new(OPTIONAL iDayNumber AS Integer)

  IF (iDayNumber)
    setDay(iDayNumber)
  ENDIF
  ME.Font.Size = lsbxFontSize
  ME.Add("I just got birth")

END

PUBLIC SUB test()

  Message.Info("hello")

END

PUBLIC SUB Drag()

  ME.Remove(ME.Index)
  ME.Height = ME.lsbxMinHeight + ME.Count * ME.lsbxLineHeight

END 

PUBLIC SUB Drop()

  ME.Add(Drag.Data)
  DEBUG ME.Height & "  " & ME.lsbxMaxHeight
  IF ME.Height < ME.lsbxMaxHeight
    ME.Height = ME.lsbxMinHeight + ME.Count * ME.lsbxLineHeight
  ENDIF 

END 

PUBLIC SUB Mousedrag()

  IF Mouse.Left THEN

    ME.Drag(ME[ME.Index].Text)

  ENDIF 

END

PUBLIC SUB setDay(iDayNumber AS Integer)

  IF iDayNumber >= 0
    IF iDayNumber <= 6
      iDay = iDayNumber
    ENDIF
  ENDIF 

END

PUBLIC SUB getDayNumber() AS Integer

  RETURN iDay

END

PUBLIC SUB getDayName() AS String

  SELECT iDay
    CASE iMonday
      RETURN "Monday"
    CASE iTuesday
      RETURN "Tuesday"
    CASE iWednesday
      RETURN "Wednesday"
    CASE iThursday
      RETURN "Thursday"
    CASE iFriday
      RETURN "Friday"
    CASE iSaturday
      RETURN "Saturday"
    CASE iSunday
      RETURN "Sunday"
  END SELECT 

END

De form waarin het gebruikt wordt:

...

 DIM lsbxItem AS ListBox
  DIM i AS Integer

  aLine2 = NEW Variant[5]

  FOR i = 0 TO 4
    aLine2[i] = NEW CPlanDay(i, VBox2)
    'aLine2[i].Test()
  NEXT
...

Dat werkt echter nog niet: de dagen worden wel getekend, maar de drag en drop werkt niet (of enkel van de dag weg).

  • Drop is een eigenschap die aangezet moet worden.
  • De hierarchie moet juist aangesproken worden: SUPER keyword voor de parentklasse
  • STATIC moet juist gebruikt worden (zonder "ME" prefix)

Hieronder een uitbreiding:

De klasse CPlanDay:

' Gambas class file
INHERITS ListBox

STATIC PUBLIC lsbxMinHeight AS Integer = 40
STATIC PUBLIC lsbxMaxHeight AS Integer = 200

STATIC PUBLIC lsbxLineHeight AS Integer = 17
STATIC PUBLIC lsbxFontSize AS Integer = 9

STATIC PUBLIC iMonday AS Integer = 0
STATIC PUBLIC iTuesday AS Integer = 1
STATIC PUBLIC iWednesday AS Integer = 2
STATIC PUBLIC iThursday AS Integer = 3
STATIC PUBLIC iFriday AS Integer = 4
STATIC PUBLIC iSaturday AS Integer = 5
STATIC PUBLIC iSunday AS Integer = 6

PRIVATE iDay AS Integer = iMonday
PRIVATE $hObserver AS Observer
PRIVATE $hDropObserver AS Observer

PUBLIC SUB _new(OPTIONAL iDayNumber AS Integer)

  $hObserver = NEW Observer(ME) AS "Observer"
  $hDropObserver = NEW Observer(ME) AS "Dropserver"

  IF (iDayNumber)
    setDay(iDayNumber)
  ENDIF
  ME.Font.Size = lsbxFontSize
  ME.Drop = TRUE
  ME.Height = lsbxMinHeight
'  ME.Add(" - - - - " & ME.getDayName() & " - - - - - ")

END

PUBLIC SUB test()

  Message.Info("hello")

END

PUBLIC SUB Observer_Drag()

  ME.Remove(ME.Index)
  SUPER.Height = lsbxMinHeight + SUPER.Count * lsbxLineHeight

END 

PUBLIC SUB Observer_Drop()

  SUPER.Add(Drag.Data)
  DEBUG SUPER.Height & "  " & lsbxMaxHeight
  IF SUPER.Height < lsbxMaxHeight
    SUPER.Height = lsbxMinHeight + (ME.Count * lsbxLineHeight)
  ENDIF 

END 

PUBLIC SUB Observer_Mousedrag()

    ME.Drag(ME[ME.Index].Text)
    ME.Remove(ME.Index)

END

PUBLIC SUB setDay(iDayNumber AS Integer)

  IF iDayNumber >= 0
    IF iDayNumber <= 6
      iDay = iDayNumber
    ENDIF
  ENDIF 

END

PUBLIC SUB getDayNumber() AS Integer

  RETURN iDay

END

PUBLIC SUB getDayName() AS String

  SELECT iDay
    CASE iMonday
      RETURN ("Monday")
    CASE iTuesday
      RETURN ("Tuesday")
    CASE iWednesday
      RETURN ("Wednesday")
    CASE iThursday
      RETURN ("Thursday")
    CASE iFriday
      RETURN ("Friday")
    CASE iSaturday
      RETURN ("Saturday")
    CASE iSunday
      RETURN ("Sunday")
  END SELECT 

END

De implementatie in gebruik:

...
PUBLIC SUB Form_Open()

  DIM lsbxItem AS ListBox
  DIM i AS Integer
  DIM iWorkingDays AS Integer = 5

  aLine2 = NEW Variant[iWorkingDays]

  FOR i = 0 TO (iWorkingDays - 1)

    aLine2[i] = NEW CPlanDay(i, VBox2)

  NEXT 

...
Posted in Gamblog, Hoe - in Gambas, vraag-me-af | Leave a comment

Gambas 1 + 2 + 3 op Fedora 16

Proficiat voor Fedora 16: Bij deze distributie is in het package management (install/remove software, zoekveld “gambas”) een uitgebreide keuze aanwezig:

  • Gambas 3 (2.99.5) 2.99.6 na een online update op 6/1/2012
  • Gambas 2 (2.23.1)
  • Gambas 1 (1.0.19)

Je kan zowel kiezen voor de individuele paketten als voor de hele programmeeromgeving als voor de runtime.

Bij installatie van de programmeeromgeving krijg ik nadien een foutmelding in verband met KDE.

Bij het opstarten blijken de “Examples” niet mee geïnstalleerd te zijn.

Ook de “Help Files” zijn niet automatisch geïnstalleerd, maar kunnen eenvoudig na-geïnstalleerd worden: klik op optie-box en “Apply”! Voor Gambas2 is dat gelukt, gambas 3 blijven de voorbeelden leeg maar ik weet niet of dat aan de pre-release versie ligt (2.9 ipv 3.0)

Posted in installatie log | Leave a comment

Gordijn: Een HSplit om twee GridViews te schalen zoals in een spreadsheet

Doel:
Het scherm is in twee verdeeld: links en rechts een rooster met gegevens, ongeveer er uitziend als een rekenblad/spreadsheet.

De gegevens aan de linkse kant wil je altijd zien omdat ze vaste titels en gegevens van de rij bevatten, bv de naam van een persoon (naam, voornaam, geb.datum, in dienst datum), waarvan in de volgende kolommen gegevens te zien zijn, bv aanwezigheden in een maand.

Van het linkse rooster is de eerste kolom meestal genoeg, de andere gegevens zijn “verborgen” achter de data van het rechtse rooster. Maar af en toe wil je toch de andere gegevens raadplegen, bv even naar de geboortedatum kijken, en wil je het rooster wat breder maken. Het lijkt alsof je een gordijn opzijschuift.

Er zijn meer kolommen met gegevens dan het scherm breed is, dus het rechtse rooster kan horizontaal scrollen. Er zijn ook meer rijen dan het scherm kan weergeven, dus beide roosters scrollen ook vertikaal.

Je hebt dus twee gridviews nodig: GridView1 links en GridView2 rechts.
Met de HSplit kan je horizontaal een “schuiver” krijgen om twee elementen met een middengrip groter/kleiner te maken, horizontaal in dit geval. Maar om dat te kunnen is er een “hoger” element nodig, dat de twee gridviews omvat, en van waaruit de Split kan werken, hier een HBox.

Gebruik van HSplit met GridViews

In de IDE rechts bij eigenschappen (properties), tabblad “hierarchy” krijg je dan deze structuur (zie afbeelding).

Het vervelende is dat de twee grids hun eigen scrolbars hebben, en niet alleen horizontaal maar ook vertikaal afzonderlijk scrollen. Dan klopt de horizontale lijn van de gegevens niet meer.

Daar kan je wel manueel en mouw aan passen; bv het weergeven van log gegevens, linkse grid de titel of naam van een logitem, rechtse grid de gegevens of data die gelogd en weergegeven worden.

Als je in het linkse “names” grid naar beneden scrolt moet het rechtse data-grid meescrollen:

PUBLIC SUB grvwLogNames_Scroll()

  grvwLogData.ScrollY = grvwLogNames.ScrollY

END

En omgekeeerd ook natuurlijk; als je in de data scrolt moeten de namen meescrollen:

PUBLIC SUB grvwLogData_Scroll()

  grvwLogDataNames.ScrollY = grvwLogData.ScrollY

END

Bovendien is het handig dat een klik op het rechtse grid ook “werkt”, dwz eigenlijk hetzelfde doet als een klik op het linkse grid.

PUBLIC SUB grvwLogData_Click()

  grvwLogNames.Row = grvwLogData.Row
  grvwLogNames_Click

END
Posted in Hoe - in Gambas, Uncategorized | Leave a comment

Gambas2 en Gambas3 op Fedora 15 – KDE

Ik gebruik een vers van DVD geïnstalleerde Fedora 15 (zonder updates) in KDE uitvoering.

In principe* kunnen Gambas2 en Gambas3 perfect naast elkaar draaien (* gelezen op de gambas mailinglist).

Als test selecteer ik de Gambas3 development environment met alle beschikbare onderdelen; ik klikte ze allemaal individueel aan om zeker alles te hebben.

Er werden automatisch een aantal bijkomende compenenten geselecteerd, bevestigd.

Ik installeer daarna ook Gambas2 bij, om eens te kijken of het conflicten geeft. Ook hier een aantal bijkomende packages voorgesteld, die ik bevestig (waaronder kde3 libs).

Na een paar keer net te lang wachten was ik toch eens op tijd voor het wachtwoord maar liep de installatie toch niet verder, dus ik sloot software installatie en startte het terug op.

Ik zoek op gambas2, krijg een lijst met alle gambas2 componenten. Zoals gezegd werkt CTRL-A niet (select all), en moet ieder pakket afzonderlijk aangeklikt worden. Ik zoek naar een verwijzing naar het complete pakket, of de IDE, dan wordt zoveel mogelijk mee geïnstalleerd: Gambas IDE, the complete gambas development environment.
Ik krijg een foutmelding dat een component dezelfde functionaliteit levert als een eerder geinstalleerde (nl bij Gambas3), en ik kan niet “skip” of “ignore” doen, alleen “ok”, wat eenvoudigweg afbreekt.

Ik verwijder de gambas3 scripter (die verdacht werd oorzaak te zijn van het overlappend pakket), en installeer daarna de gambas2 IDE (complete).

Gambas2 Examples en Gambas2 help worden niet automatisch mee-geïnstalleerd, selecteer apart en installeer.

Dan is het tijd voor een poging om de scripter van gambas3 terug te installeren: dat lukt niet (dezelfde foutmelding van overlapping). Misschien bestaat er nog een command-line manier om de installatie alsnog te forceren… mijn mijn experimentijd was om.

In het menu, onder “development” zijn nu zowel Gambas 2 (versie 2.23) als versie 3 (3.0 alfa; versienummer 2.99.5 – use at your own risk!) te starten.

Posted in installatie log | Leave a comment

Mail sturen vanuit Gambas

MailFromGambas Kies component “gb.net.smtp” in Project/Properties/Components.
Je krijgt dan beschikking over een smtp opject met volgende eigenschappen en methodes:

gb.net.smtp
 SmtpClient
   Add
   Alternative
   Bcc
   Cc
   From
   Host
   Port
   Send
   Subject
   To

De meeste eigenschappen kan je gewoon een tekstwaarde toewijzen, bv .Host = "..."
De lijst van de bestemmelingen wordt gegeven door de string .To.
Om een bestemmeling toe te voegen moet je To.Add("..") gebruiken, bv in een loop per adres dat je wil toevoegen.
Voor de inhoud van de mail .Add("..")
Attachments zijn halvelings voorzien maar lijken in 2.x versies (<2.21) niet altijd te werken (alleen te werken voor pure tekst).
Attachments hebben een type: IANN
Zie ook de documentatie van de gb.net.smtp module.

Een voorbeeld van code (die bij het schermvoorbeeld hoort):
Continue reading

Posted in Gamblog, Hoe - in Gambas, Uncategorized | Leave a comment

DEBUG “Hello Gambas-world!”

Welkom op de nieuwe locatie van deze blog over Gambas, een vrije programmeeromgeving voor de Linux Desktop.

DEBUG "Hello Gambas-world!"

Message.info("Hello Gambas-world!")

Hoofdsite: gambas.copyleft.be
(nog in opbouw 5/10/2011; daar moeten de meer uitgeschreven teksten komen die kunnen onstaan als blog-artikel. Ideaal wordt het een hele handleiding…)

Onderdeel van www.copyleft.be

Posted in Uncategorized | Leave a comment

Gambas IDE verknoeid / Screwed my Gambas IDE

Door het installeren en compileren van een programma is mijn hele Gambas IDE in de problemen gekomen.
Het programma had als voorwaarden Gambas met een versienummer hoger dan de gebruikte versie 2.8 op OpenSUSE 11.0 (maar dat wist ik toen nog niet).
Het geïnstalleerde pakket was DBReport (Report-Designer and Printer); en ik heb het stap voor stap gecompileerd zoals beschreven in de handleiding. Daarbij kreeg ik foutmeldingen die me uiteindelijk tot het inzicht van de hogere versie-vereisten brachten.

Nadien kon in Gambas niet meer gebruiken; foutmeldingen zoals hieronder:

Screwed my Gambas IDE

Due to installing and compiling the application DBReport (Report-Designer and Printer), I screwed up my Gambas IDE version 2.8 that runs on an (old-ok) openSuse 11.0

This is the log of what happened when I tried to use the IDE afterwards:

Continue reading

Posted in Uncategorized | Comments Off

Rekenen met tijd in Gambas (uren, dagen)

Om tijd vast te leggen op het moment zelf: Now() geeft de huidige datum+tijd. Bekijk:

DEBUG Now()

Toekennen aan een variabele:

PRIVATE dStartuptime AS Date
dStartuptime = Now()
DEBUG Format$(dStartuptime, “hh:nn:ss”)

De debug regelt toont de variabele weergegeven in opgegeven patroon, waarbij “n” staat voor minuten (omdat de m al staat voor maand in het dagpatroon: yy-mm-dd).

Rekenen met tijd of opgeslagen tijd gaat niet zo:
DEBUG Now() – dStartuptime
Dat geeft immers ofwel direct 0, ofwel na acht seconden 9.055575355887E-5 en waarschijnlijk wil je een leesbaar getal, als een aantal minuten.

Hiervoor gebruik je de functie DateDiff met parameters oude tijd, nieuwe tijd, gecombineerd met uitvoerpatroon:

DEBUG DateDiff(dStartuptime, Now(), gb.Minute)
DEBUG DateDiff(dStartuptime, Now(), gb.Minute)
DEBUG DateDiff(dStartuptime, Now(), gb.Minute)

Bij start is het resultaat:

0
0
0

Na 8 seconden is het resultaat:

8
0
0

En na 121 seconden is het:

121
2
0

Dus je hoeft niet zelf (het aantal minuten x 60 ) plus de seconden te doen; de seconden tellen door en kunnen gebruikt worden, of als je slechts de nauwkeurigheid van minuten nodig hebt kan je rechtstreeks met minuten werken.
Na meer dan een hele dag wordt het, uitgedrukt in gb.Minute, gb.Hour, gb.Day:

1547
25
2

De eerste twee, minuten in uren:
Van minuten naar uren: 1547/60 is 25.7833.. dus de uren worden “afgekapt”
Maar de laatste in “dagen” telt een begonnen dag als een dag: hoewel het maar goed 25 uren zijn wordt 2 dagen aangegeven!

Posted in Hoe - in Gambas, Uncategorized | Comments Off

Automatisch uitlijnen van schermobjecten met HBox, VBox, HPanel, VPanel

De keuze in de bouwdoos:

gambascontainershvboxhvpanel.png

Een aantal op het scherm gezet en gevuld met een eenvouidig text veld:

gambashvboxhvpanel.png

Ziet er zo uit als programma draait:

gambashvboxhvpanelrun.png

Volledige beelden onder elkaar: Continue reading

Posted in Hoe - in Gambas, Uncategorized | Comments Off