{"id":16985853,"url":"https://github.com/as400jplpc/nim_designer","last_synced_at":"2025-10-07T15:55:55.090Z","repository":{"id":45551437,"uuid":"472290188","full_name":"AS400JPLPC/nim_designer","owner":"AS400JPLPC","description":"designer TUI nim-lang","archived":false,"fork":false,"pushed_at":"2022-04-10T07:47:57.000Z","size":8404,"stargazers_count":20,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-01T09:44:39.376Z","etag":null,"topics":["design","nim","nim-lang","programming-language","squelettes","tui","tui-editor"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AS400JPLPC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-21T10:36:17.000Z","updated_at":"2024-10-23T13:36:24.000Z","dependencies_parsed_at":"2022-08-02T23:45:34.300Z","dependency_job_id":null,"html_url":"https://github.com/AS400JPLPC/nim_designer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AS400JPLPC/nim_designer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_designer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_designer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_designer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_designer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AS400JPLPC","download_url":"https://codeload.github.com/AS400JPLPC/nim_designer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AS400JPLPC%2Fnim_designer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278802799,"owners_count":26048566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design","nim","nim-lang","programming-language","squelettes","tui","tui-editor"],"created_at":"2024-10-14T02:44:18.246Z","updated_at":"2025-10-07T15:55:55.047Z","avatar_url":"https://github.com/AS400JPLPC.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Designer TUI\n\ndépendance : **Termkey Termcurs**\n\n# Testing 2022-04-09   12h15\n\n* change FULL 2022-03-30 23h15  voir \"Issues\" du 2022-03-30\n* change Remove GRID 2022-03-31 2h44\n* change position posx posy rown grig 2022-04-05 16h27\n* change procurs setPageGrid calcul nbr page  and isPanelkey test button actif 202-04-07 15h40\n* **update TERMCURS 2022-04-08 TERMKEY 2022-04-08**\n* **update TERMCURS 2022-04-09**\n* refonte du \"**projet**\" prise en compte de la fonction ioFMT(PANEL,GRIDSFL,select,pos(index grid) ) et plus\n\n---\n\n# but:\n\nSoulager la compréhention par la visualisation des Formulaires puis de générer le code.\n\nCréer des programmes en pure NIM,sans lib externe et occupant peu de place mémoire.\n\nl'utilisation de **Termvte** , crée une fenêtre terminale, beaucoup plus souple à gérer que xterm etc...\n\nelle peut fonctionner dans un terminal que vous paramétrez.\n\n# vidéo\n\ntutoreil vidéo\n\n# utilisation du logiciel:\n\nUtiliser la souris pour naviguer, sélectionner, positionner...\n\n![](assets/20220315_030352_ecr01.png)\n\n# New permet de créer un formulaire\n\n![](assets/20220315_031539_ecr01_02.png)\n\ntitleTerm.: Nom étendu du fichier comprenant l'ensemble des panels\n\nfileTerm..: Nom du fichier  (exemple.dspf)\n\n\u003e F9  enregistre\n\n\u003e F12 abandon\n\n# Recovery\n\nRecharge le display file en mémoire. Apporter toutes les modifications jugées nécéssaires.\n\n![](assets/20220315_031510_ecr01_01.png)\n\n---\n\n# création du panel\n\n![](assets/20220315_032120_ecr01_03.png)\n\n* [X] choix : créer = \"999 add panel\" sinon cliquer sur une ligne\n\n![](assets/20220315_032658_ecr01_04.png)\n\n# Saisie de la structure du panel\n\nfonction saisie clavier:\nup / down -- tab / tabs -- enter, pour valider la zone de saisie et passer à la zone suivante.\n\nsi il y a une erreur de saisie appuyez sur la touche \"Escape\" pour corriger\n\n![](assets/20220315_033532_ecr02_01.png)\n\n\n| field       | fonction                                                                          |\n| ------------- | ----------------------------------------------------------------------------------- |\n| Name        | Obligatoire, le référencement et le panel sont lier voir exemple dans le source |\n| PosX,Y      | récupération du positionement de la souris                                      |\n| Heights     | nombre de lignes verticales                                                       |\n| Width       | nombre de caractères horizontals                                                 |\n| Cadre       | appuyer sur une touche, le choix apparaît ---- combo: ligne = 1 ligne =2         |\n| Title       | Titre du panel                                                                    |\n| F1..F24     | appuyer sur la bar d'espacemant pour activé la fonction                          |\n| Check Field | associer le controle par défault des zones comprise dans le panel                |\n\n![](assets/20220315_033957_ecr02_02.png)\n\n\u003e *F3* n'a pas besoin de crontôle ex: = exit programe\n\u003e\n\u003e *F9 F11* on besoin de faire le contrôle car les données ont des conséquences\n\u003e\n\u003e vous pouvez dans le source affecter à la main d'autre valeur  ex CtrlV\n\u003e\n\u003e leurs donner un text plus explicite ex F9 = F9 Enrg.\n\u003e\n\u003e si vous ne mettez pas de text la fonction n'est pas visible à l'écran mais active\n\u003e\n\u003e ne pas ce servir CrtlH qui est réserver à la saisie.\n\u003e\n\u003e ex:`defButton(TKey.F3,\"F3 Exit.\",false)` `defButton(TKey.F9,\"F9 Enrg.\",true)` `defButton(TKey.CtrlV,\"\",true)`\n\n---\n\n# paneaux de définition des labels Fields Menus Combo/Grid\n\n![](assets/20220315_133712_ecr03_01.png)\n\npointer la souris pour positioner l'objet que vous voulez décrire.\n\n\n| key   | Fonction                                            |\n| ------- | ----------------------------------------------------- |\n| AltL  | Label  puis tapez votre label CtrlV valide le label |\n| AltT  | Titre  idem label                                   |\n| AltF  | Field                                               |\n| AltM  | Menu                                                |\n| AltP  | display de tous les  menus                          |\n| AltG  | Combo/Grid                                          |\n| AltD  | affichage des objet Label Field Menu                |\n| AltO  | réordonner les objet Label Field                   |\n| AltR  | remove les objet Label Field Menu Combo/Grid        |\n| AltS  | réaffichage du terminal                            |\n| CtrlQ | fermeture du panel retour au menu principal         |\n|       |                                                     |\n| CtrlH | réserver à la saisie pour Help field              |\n\n---\n\n# AltT -\u003e Titre\n\n![](assets/20220315_135205_ecr03_11.png)\n\n# CtrlV -\u003e validation\n\n![](assets/20220315_135328_ecr03_12.png)\n\n# AltL -\u003e Label Idem Titre ex nom....:\n\n![](assets/20220315_143234_ecr03_13.png)\n\n---\n\n# AltF -\u003e définition FIELD\n\nchoix ajouter ou modifier\n\n![](assets/20220315_143608_ecr03_21png)\n\n*veuillez valider chaque zone*\n\n\n| field    | fonction                                    |\n| ---------- | --------------------------------------------- |\n| Name     | nom du buffer                               |\n| PosX,Y   | défini au moment du clique de la souris    |\n| Ref.Type | combo: détermine le mode de sasie          |\n| With     | nombre d'entier                             |\n| Scal     | Nombre de décimal après la virgule        |\n| Empty    | on -\u003e Vide   off -\u003e la zone est obligatoire |\n| Error    | message ce rapportant à la zone de saisie  |\n| Help     | aide avec la touche CtrlH                   |\n| Edt.Char | code par exemple : € $ ¥ ₪ £ %          |\n| Protect  | falg interdisant la saisie ou modification  |\n\n![](assets/20220315_144050_ecr03_22png)\n\n![](assets/20220315_144139_ecr03_23png)\n\n# Field Hiden\n\n```pnlF1.hiden.add(defStringH(\"zone3\",TEXT_FULL, \"12101951\"))                  # full String n° client\npnlF1.hiden.add(defStringH(\"zone10\",DATE_ISO, \"2020-04-24\"))                # full String\npnlF1.hiden.add(defSwitchH(\"zone15\", SWITCH,true))                          # specifique switch\npnlF1.hiden.add(defStringH(\"zone8\",DECIMAL, \"256.05\"))                      # full String\n```\n\nexemple : Decimal\n\n![](assets/20220320_214852_ecr03_25.png)\n\nexemple : appel process\nappel automatiquement la procédure ex: un combo ou calcul avec retour de donnés...\n\n![](assets/20220320_215300_ecr03_26.png)\n\n# AltG - \u003e Définition du Combo/Grid\n\n\n| field      | fonction                                 |\n| ------------ | ------------------------------------------ |\n| Form       | Combo / Grid                             |\n| Name       | nom du process                           |\n| PosX,Y     | défini au moment du clique de la souris |\n| Rows       | Nombre de ligne horizontale              |\n| Separateur | combo: sepStyle noStyle                  |\n\npensez à l'association de la zone process et name.combo\n\n![](assets/20220320_232730_ecr03_31.png)\n\n# AltC -\u003e Définiton des titres des  colonnes\n\n\n| field  | fonction                                 |\n| -------- | ------------------------------------------ |\n| text   | titre de la colonne                      |\n| long   | nombre de caractères                    |\n| PosX,Y | défini au moment du clique de la souris |\n| Type   | combo TEXT_FREE DIGIT ....               |\n| Color  | combo color                              |\n| Car    | code par exemple : € $ ¥ ₪ £ %       |\n\n![](assets/20220320_221032_ecr03_32.png)\n\n# AltI-\u003e Item\n\nenregistrement data des colonnes\n\n![](assets/20220320_221222_ecr03_33.png)\n\n\n| key   | Fonction                                          |\n| ------- | --------------------------------------------------- |\n| AltC  | Header Colonne                                    |\n| AltI  | Item uniquement combo                             |\n| AltP  | liste colonne                                     |\n| AltR  | remove colonne                                    |\n| AltD  | display combo/grid                                |\n| AltS  | recharge à la Définition du Combo/Grid          |\n| CtrlV | sauvegarde le combo/grid                          |\n| AltQ  | quitter l'envirronement de définition combo/grid |\n\nRésultat :\n\n![](assets/20220320_221446_ecr03_40.png)\n\n---\n\n# AltM -\u003e Menu:\n\n\n| key   | Fonction            |\n| ------- | --------------------- |\n| CtrlV | validation          |\n| CtrlP | display menu        |\n| AltP  | display full menu   |\n| AltS  | refresh saisie menu |\n\n\u003e F9 enregistrement\n\n\u003e F12 return\n\n\n| field  | fonction                                 |\n| -------- | ------------------------------------------ |\n| Name   | nom du menu                              |\n| PosX,Y | défini au moment du clique de la souris |\n| ....   | Item                                     |\n| cadre  | combo: 1 ligne  2 lignes                 |\n| ....   | combo: Vertical ou Horizontal            |\n\n![](assets/20220323_035654_ecr04_01.png)\n\nexemple:\n\n![](assets/20220323_040650_ecr04_02.png)\n\n---\n\n# sauvegarde:\n\n![](assets/20220320_233406_ecr03_50png)\n\ndans la sous directorie ./dspf\n\n\"name.dspf\" Génère un fichier json\n\ndans la directorie du programme TermSDA  \"Source.nim\" que vous pouvez compiler\n\n---\n\nenvirronement de travail\n\nTermSDA et Tsource son des executables des terminaux fait avec C++ GTK libvte\nex: Tsource vous permez d'excuter Source dans une fenêtre terminal\n\n![](assets/20220323_190448_ecr10_01.png)\n\nParticularité:\n\n1. le proc faisant appel à la fonction  FCALL  n'est pas defini\n2. la gestion du grid vous est laissé à faire à la main un exemple complet dans exemple\n3. 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\n4. creer un dossier placer le programme TermSDA et le programme procSDA dans ce dossier Idem pour TSource\n5. creer un sous dossier dspf et obj-\u003e(pour compiler TermSDA.ccp fenêtre window)\n6. les dossiers:\n   .vscode -les procedures et envirronement VSCODE\n   exemple -programme nim\n   src     -programme terminal ccp\n   proc...\n\n\n| programme | Text                     |\n| ----------- | -------------------------- |\n| procCurs  | interne(termcurs)        |\n| procField | definition Field         |\n| procLabel | definition Label         |\n| procGrid  | definition Grid/Combo    |\n| procMenu  | definition Menu          |\n| procPanel | definition Panel         |\n| procInit  | ouveture programme SDA   |\n| callqry   | combo commun             |\n| procJson  | lecture / écriture JSON |\n| procSDA   | programme Principal      |\n| makefile  | outil pour compiler ccp  |\n\nVSCODE :\n\n**Task Manager** extension\n--------------------------\n\nexemple source généré:\n\n```\nimport termkey\nimport termcurs\nimport tables\n\n\nvar callQuery: Table[string, proc(fld : var FIELD)]\n\n\ntype\n  FIELD_Fcli00a {.pure.}= enum\n    cliNom,\n    decimal,\n    tproc\nconst P1: array[FIELD_Fcli00a, int] = [0,1,2]\n\n\n# MENU -\u003e TEST\nvar Table = new(MENU)\nTable = newMenu(\"Table\", 10, 44, vertical, @[\"Définition\", \"Visualisation\", \"Liste\"], line1)\n\n\n# Panel Fcli00a\n\nvar Fcli00a= new(PANEL)\n\n# description\nproc dscFcli00a() =\n  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\")\n\n  # LABEL  -\u003e Fcli00a\n\n  Fcli00a.label.add(defTitle(\"L02002\", 2, 2, \"Fiche Client\"))\n  Fcli00a.label.add(deflabel(\"L04002\", 4, 2, \"Nom.......:\"))\n  Fcli00a.label.add(deflabel(\"L06002\", 6, 2, \"Décimal...:\"))\n  Fcli00a.label.add(deflabel(\"L09002\", 9, 2, \"Proc......:\"))\n\n  # FIELD -\u003e Fcli00a\n\n  Fcli00a.field.add(defString(\"cliNom\", 4, 14, ALPHA_UPPER,30,\"\", FILL, \"Obligatoire\",\"Nom du client\"))\n  Fcli00a.field.add(defNumeric(\"decimal\", 6, 14, DECIMAL,9,2,\"\", EMPTY,\"\", \"\"))\n  setEdtCar(Fcli00a.field[P1[decimal]], \"€\")\n  Fcli00a.field.add(defString(\"tproc\", 9, 14, FPROC,10,\"\", EMPTY, \"\",\"appel procedure\"))\n  setProcess(Fcli00a.field[P1[tproc]],\"myproc\")\n\n\n#===================================================\nproc myproc(fld : var FIELD) =\n  var Cell_pos : int = -1\n  var Xcombo  = newGRID(\"myproc\",9,14,14,sepStyle)\n  var Cell_Pays = defCell(\"Pays\",10,TEXT_FREE,\"Cyan\")\n  setHeaders(Xcombo, @[Cell_Pays])\n  addRows(Xcombo, @[ \"France\" ])\n  addRows(Xcombo, @[ \"Espagne\" ])\n  addRows(Xcombo, @[ \"Italie\" ])\n\n  printGridHeader(Xcombo)\n  case fld.text\n    of \"France\"   : Cell_pos = 0\n    of \"Espagne\"   : Cell_pos = 1\n    of \"Italie\"   : Cell_pos = 2\n    else : discard\n\n  while true :\n    let (keys, val) = ioGrid(Xcombo,Cell_pos)\n    case keys\n      of TKey.Enter :\n        restorePanel(Fcli00a,Xcombo)\n        fld.text  = $val[0]\n        break\n      else: discard\n\ncallQuery[\"myproc\"] = myproc\n#===================================================\n\n\n\n\nproc main() =\n  initTerm(32,132)\n\n  dscFcli00a()\n  printPanel(Fcli00a)\n  displayPanel(Fcli00a)\n\n  # ONLY -\u003e FOR TEST\n  dspMenuItem(Fcli00a,Table,0)\n  let nTest = ioMenu(Fcli00a,Table,0)\n\n\n  #Exemple ------\n\n  while true:\n    let  key = ioPanel(Fcli00a)\n    case key\n      of TKey.PROC :  # for field Process\n        if isProcess(Fcli00a,Index(Fcli00a)):\n          callQuery[getProcess(Fcli00a,Index(Fcli00a))](Fcli00a.field[Index(Fcli00a)])\n      of TKey.F3:\n        break\n      of TKey.F9:\n        break\n      of TKey.F10:\n        break\n      else : discard\n\n  closeTerm()\n\n\n\nmain()\n\n```\n\nProjet Contact: exemple\n\n![](assets/20220407_160644_prrojetExemple.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fas400jplpc%2Fnim_designer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fas400jplpc%2Fnim_designer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fas400jplpc%2Fnim_designer/lists"}