nim_designer
nim_designer copied to clipboard
designer TUI nim-lang
Designer TUI
dépendance : Termkey Termcurs
Testing 2022-04-09 12h15
- change FULL 2022-03-30 23h15 voir "Issues" du 2022-03-30
- change Remove GRID 2022-03-31 2h44
- change position posx posy rown grig 2022-04-05 16h27
- change procurs setPageGrid calcul nbr page and isPanelkey test button actif 202-04-07 15h40
- update TERMCURS 2022-04-08 TERMKEY 2022-04-08
- update TERMCURS 2022-04-09
- refonte du "projet" prise en compte de la fonction ioFMT(PANEL,GRIDSFL,select,pos(index grid) ) et plus
but:
Soulager la compréhention par la visualisation des Formulaires puis de générer le code.
Créer des programmes en pure NIM,sans lib externe et occupant peu de place mémoire.
l'utilisation de Termvte , crée une fenêtre terminale, beaucoup plus souple à gérer que xterm etc...
elle peut fonctionner dans un terminal que vous paramétrez.
vidéo
tutoreil vidéo
utilisation du logiciel:
Utiliser la souris pour naviguer, sélectionner, positionner...
New permet de créer un formulaire
titleTerm.: Nom étendu du fichier comprenant l'ensemble des panels
fileTerm..: Nom du fichier (exemple.dspf)
F9 enregistre
F12 abandon
Recovery
Recharge le display file en mémoire. Apporter toutes les modifications jugées nécéssaires.
création du panel
- [X] choix : créer = "999 add panel" sinon cliquer sur une ligne
Saisie de la structure du panel
fonction saisie clavier: up / down -- tab / tabs -- enter, pour valider la zone de saisie et passer à la zone suivante.
si il y a une erreur de saisie appuyez sur la touche "Escape" pour corriger
field | fonction |
---|---|
Name | Obligatoire, le référencement et le panel sont lier voir exemple dans le source |
PosX,Y | récupération du positionement de la souris |
Heights | nombre de lignes verticales |
Width | nombre de caractères horizontals |
Cadre | appuyer sur une touche, le choix apparaît ---- combo: ligne = 1 ligne =2 |
Title | Titre du panel |
F1..F24 | appuyer sur la bar d'espacemant pour activé la fonction |
Check Field | associer le controle par défault des zones comprise dans le panel |
F3 n'a pas besoin de crontôle ex: = exit programe
F9 F11 on besoin de faire le contrôle car les données ont des conséquences
vous pouvez dans le source affecter à la main d'autre valeur ex CtrlV
leurs donner un text plus explicite ex F9 = F9 Enrg.
si vous ne mettez pas de text la fonction n'est pas visible à l'écran mais active
ne pas ce servir CrtlH qui est réserver à la saisie.
ex:
defButton(TKey.F3,"F3 Exit.",false)
defButton(TKey.F9,"F9 Enrg.",true)
defButton(TKey.CtrlV,"",true)
paneaux de définition des labels Fields Menus Combo/Grid
pointer la souris pour positioner l'objet que vous voulez décrire.
key | Fonction |
---|---|
AltL | Label puis tapez votre label CtrlV valide le label |
AltT | Titre idem label |
AltF | Field |
AltM | Menu |
AltP | display de tous les menus |
AltG | Combo/Grid |
AltD | affichage des objet Label Field Menu |
AltO | réordonner les objet Label Field |
AltR | remove les objet Label Field Menu Combo/Grid |
AltS | réaffichage du terminal |
CtrlQ | fermeture du panel retour au menu principal |
CtrlH | réserver à la saisie pour Help field |
AltT -> Titre
CtrlV -> validation
AltL -> Label Idem Titre ex nom....:
AltF -> définition FIELD
choix ajouter ou modifier
veuillez valider chaque zone
field | fonction |
---|---|
Name | nom du buffer |
PosX,Y | défini au moment du clique de la souris |
Ref.Type | combo: détermine le mode de sasie |
With | nombre d'entier |
Scal | Nombre de décimal après la virgule |
Empty | on -> Vide off -> la zone est obligatoire |
Error | message ce rapportant à la zone de saisie |
Help | aide avec la touche CtrlH |
Edt.Char | code par exemple : € $ ¥ ₪ £ % |
Protect | falg interdisant la saisie ou modification |
Field Hiden
pnlF1.hiden.add(defStringH("zone10",DATE_ISO, "2020-04-24")) # full String
pnlF1.hiden.add(defSwitchH("zone15", SWITCH,true)) # specifique switch
pnlF1.hiden.add(defStringH("zone8",DECIMAL, "256.05")) # full String
exemple : Decimal
exemple : appel process appel automatiquement la procédure ex: un combo ou calcul avec retour de donnés...
AltG - > Définition du Combo/Grid
field | fonction |
---|---|
Form | Combo / Grid |
Name | nom du process |
PosX,Y | défini au moment du clique de la souris |
Rows | Nombre de ligne horizontale |
Separateur | combo: sepStyle noStyle |
pensez à l'association de la zone process et name.combo
AltC -> Définiton des titres des colonnes
field | fonction |
---|---|
text | titre de la colonne |
long | nombre de caractères |
PosX,Y | défini au moment du clique de la souris |
Type | combo TEXT_FREE DIGIT .... |
Color | combo color |
Car | code par exemple : € $ ¥ ₪ £ % |
AltI-> Item
enregistrement data des colonnes
key | Fonction |
---|---|
AltC | Header Colonne |
AltI | Item uniquement combo |
AltP | liste colonne |
AltR | remove colonne |
AltD | display combo/grid |
AltS | recharge à la Définition du Combo/Grid |
CtrlV | sauvegarde le combo/grid |
AltQ | quitter l'envirronement de définition combo/grid |
Résultat :
AltM -> Menu:
key | Fonction |
---|---|
CtrlV | validation |
CtrlP | display menu |
AltP | display full menu |
AltS | refresh saisie menu |
F9 enregistrement
F12 return
field | fonction |
---|---|
Name | nom du menu |
PosX,Y | défini au moment du clique de la souris |
.... | Item |
cadre | combo: 1 ligne 2 lignes |
.... | combo: Vertical ou Horizontal |
exemple:
sauvegarde:
dans la sous directorie ./dspf
"name.dspf" Génère un fichier json
dans la directorie du programme TermSDA "Source.nim" que vous pouvez compiler
envirronement de travail
TermSDA et Tsource son des executables des terminaux fait avec C++ GTK libvte ex: Tsource vous permez d'excuter Source dans une fenêtre terminal
Particularité:
- le proc faisant appel à la fonction FCALL n'est pas defini
- la gestion du grid vous est laissé à faire à la main un exemple complet dans exemple
- nim c -f --gc:orc -d:useMalloc --passc:-flto --passC:-fno-builtin-memcpy --verbosity:0 --hints:off --threads:on -d:release -o:procSDA procSDA.nim
- creer un dossier placer le programme TermSDA et le programme procSDA dans ce dossier Idem pour TSource
- creer un sous dossier dspf et obj->(pour compiler TermSDA.ccp fenêtre window)
- les dossiers: .vscode -les procedures et envirronement VSCODE exemple -programme nim src -programme terminal ccp proc...
programme | Text |
---|---|
procCurs | interne(termcurs) |
procField | definition Field |
procLabel | definition Label |
procGrid | definition Grid/Combo |
procMenu | definition Menu |
procPanel | definition Panel |
procInit | ouveture programme SDA |
callqry | combo commun |
procJson | lecture / écriture JSON |
procSDA | programme Principal |
makefile | outil pour compiler ccp |
VSCODE :
Task Manager extension
exemple source généré:
import termkey
import termcurs
import tables
var callQuery: Table[string, proc(fld : var FIELD)]
type
FIELD_Fcli00a {.pure.}= enum
cliNom,
decimal,
tproc
const P1: array[FIELD_Fcli00a, int] = [0,1,2]
# MENU -> TEST
var Table = new(MENU)
Table = newMenu("Table", 10, 44, vertical, @["Définition", "Visualisation", "Liste"], line1)
# Panel Fcli00a
var Fcli00a= new(PANEL)
# description
proc dscFcli00a() =
Fcli00a = newPanel("Fcli00a",1,1,32,132,@[defButton(TKey.F3,"F3",false,true), defButton(TKey.F9,"F9",true,true), defButton(TKey.F10,"F10",true,true)],line1,"Fiche Client")
# LABEL -> Fcli00a
Fcli00a.label.add(defTitle("L02002", 2, 2, "Fiche Client"))
Fcli00a.label.add(deflabel("L04002", 4, 2, "Nom.......:"))
Fcli00a.label.add(deflabel("L06002", 6, 2, "Décimal...:"))
Fcli00a.label.add(deflabel("L09002", 9, 2, "Proc......:"))
# FIELD -> Fcli00a
Fcli00a.field.add(defString("cliNom", 4, 14, ALPHA_UPPER,30,"", FILL, "Obligatoire","Nom du client"))
Fcli00a.field.add(defNumeric("decimal", 6, 14, DECIMAL,9,2,"", EMPTY,"", ""))
setEdtCar(Fcli00a.field[P1[decimal]], "€")
Fcli00a.field.add(defString("tproc", 9, 14, FPROC,10,"", EMPTY, "","appel procedure"))
setProcess(Fcli00a.field[P1[tproc]],"myproc")
#===================================================
proc myproc(fld : var FIELD) =
var Cell_pos : int = -1
var Xcombo = newGRID("myproc",9,14,14,sepStyle)
var Cell_Pays = defCell("Pays",10,TEXT_FREE,"Cyan")
setHeaders(Xcombo, @[Cell_Pays])
addRows(Xcombo, @[ "France" ])
addRows(Xcombo, @[ "Espagne" ])
addRows(Xcombo, @[ "Italie" ])
printGridHeader(Xcombo)
case fld.text
of "France" : Cell_pos = 0
of "Espagne" : Cell_pos = 1
of "Italie" : Cell_pos = 2
else : discard
while true :
let (keys, val) = ioGrid(Xcombo,Cell_pos)
case keys
of TKey.Enter :
restorePanel(Fcli00a,Xcombo)
fld.text = $val[0]
break
else: discard
callQuery["myproc"] = myproc
#===================================================
proc main() =
initTerm(32,132)
dscFcli00a()
printPanel(Fcli00a)
displayPanel(Fcli00a)
# ONLY -> FOR TEST
dspMenuItem(Fcli00a,Table,0)
let nTest = ioMenu(Fcli00a,Table,0)
#Exemple ------
while true:
let key = ioPanel(Fcli00a)
case key
of TKey.PROC : # for field Process
if isProcess(Fcli00a,Index(Fcli00a)):
callQuery[getProcess(Fcli00a,Index(Fcli00a))](Fcli00a.field[Index(Fcli00a)])
of TKey.F3:
break
of TKey.F9:
break
of TKey.F10:
break
else : discard
closeTerm()
main()
Projet Contact: exemple