Page 1 sur 2

NeoGadgets

Publié : lun. 06/avr./2026 16:34
par MetalOS
Salut les gars,

Après avoir posté un exemple d'interface en canvas je me suis demandé si ce n'était pas plus simple de développer une librairie PureBasic de gadget personnalisé. Il y à quelque années j'avais acheté une lib qui s'appel ProGui et qui permettait d'intégré des gadget style office entre autre dans vos applications purebasic. Et comme la version Gold fournissait de code source de ce projet j'ai pu m'en inspirer. Du moins regarder comment ca fonctionne pour commencer à créer ma propre librairie. J'ai déja quelques gadgets fonctionnel et j'ai essayé de faire en sorte que l'intégration dans le code purebasic soit le plus proche du langage natif purebasic. Voici une première capture de ce que donne le premier prototype.

Image

Et voici comment l'exploiter dans un code

Code : Tout sélectionner

EnableExplicit

XIncludeFile "../include/NeoGadgets.pbi"

Enumeration Windows
  #Window_Main
EndEnumeration

Enumeration Gadgets
  #Canvas_Main
EndEnumeration

Procedure ResizeUI()
  ResizeGadget(#Canvas_Main, #PB_Ignore, #PB_Ignore, WindowWidth(#Window_Main), WindowHeight(#Window_Main))
  NG_Redraw()
EndProcedure

Procedure HandleNeoEvent()
  Select NG_Event()
    Case #NG_Event_Click
      Debug "Click sur gadget : " + Str(NG_EventGadget())

      Select NG_EventGadget()
        Case 1
          NG_SetGadgetState(4, NG_GetGadgetState(4) + 10)

        Case 2
          NG_SetGadgetState(4, NG_GetGadgetState(4) - 10)

        Case 5
          NG_DisableGadget(1, 1 - Bool(NG_GetGadgetState(5)))
          NG_SetGadgetText(5, "Toggle bouton Ajouter")
          NG_SetGadgetState(5, 1 - NG_GetGadgetState(5))

        Case 6
          NG_HideGadget(3, NG_GetGadgetState(6))
          NG_SetGadgetText(6, "Toggle checkbox expert")
          NG_SetGadgetState(6, 1 - NG_GetGadgetState(6))
      EndSelect

    Case #NG_Event_Change
      Debug "Changement sur gadget : " + Str(NG_EventGadget())

      If NG_EventGadget() = 3
        If NG_GetGadgetState(3)
          NG_SetTheme(#NG_Theme_Neon)
        Else
          NG_SetTheme(#NG_Theme_Dark)
        EndIf
      EndIf
  EndSelect
EndProcedure

If OpenWindow(#Window_Main, 0, 0, 900, 600, "NeoGadgets Demo", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(#Canvas_Main, 0, 0, 900, 600, #PB_Canvas_Keyboard)

  NG_Open(#Canvas_Main)
  NG_SetTheme(#NG_Theme_Dark)

  NG_ButtonGadget(1, 20, 20, 140, 36, "Ajouter")
  NG_ButtonGadget(2, 170, 20, 140, 36, "Supprimer")
  NG_CheckBoxGadget(3, 20, 74, 240, 28, "Activer le mode expert")
  NG_ProgressBarGadget(4, 20, 124, 290, 24, 0, 100)
  NG_SetGadgetState(4, 65)

  NG_ButtonGadget(5, 20, 180, 180, 36, "Toggle bouton Ajouter")
  NG_ButtonGadget(6, 210, 180, 180, 36, "Toggle checkbox expert")

  NG_SetGadgetColor(1, #NG_Color_Pressed, RGBA(67, 129, 255, 255))
  NG_Redraw()

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        If EventGadget() = #Canvas_Main
          NG_HandleEvent(#Canvas_Main, EventType())
          HandleNeoEvent()
          NG_Redraw()
        EndIf

      Case #PB_Event_SizeWindow
        ResizeUI()

      Case #PB_Event_CloseWindow
        Break
    EndSelect
  ForEver

  NG_Close()
EndIf
Pour le moment je ne partage pas la librairie car je démarre seulement sont développement et je n'ai que quelques gadget de fonctionnelles mais avec encore plusieurs bugs. Dite moi si vous pensez que ça peut intéresser du monde ou c'est une perte de temps ?

Re: NeoGadgets

Publié : lun. 06/avr./2026 18:14
par venom
Salut MetalOS.

Oui l'idée de créer des interfaces "différentes" de l'OS peut être beau visuellement et mettre un coup de jeune ou encore une "signature" du développeur. Ça permet de faire des interfaces a sa façon.

Après a voir si il est possible pour les dev's de créer leurs "propres styles, skins" ? Car oui une lib toute faite. C'est déjà un gros plus mais toutes les interfaces auront un seul et unique style (ce qui est déjà un plus) :wink:

Perso j'aime bien l'idée, surtout en gardant l syntaxe PureBasic 8) même si ça force les futures codes a embarquer le .pbi dans leurs exemples mais ça rien de grave. Il suffit d'épingler ta lib sur le forum :wink:

Fin tu vois l'idée :oops: :lol:






@++

Re: NeoGadgets

Publié : lun. 06/avr./2026 18:33
par MetalOS
Merci de ton retour venom.

C'est ultra compliqué mais je n'ai pas envie de baisser les bras :D Pour le moment tous les gadgets présent sur la capture sont maintenant fonctionnel. J'attaque les futur gadgets.

Re: NeoGadgets

Publié : lun. 06/avr./2026 19:46
par MetalOS
Image

Le combosBoxGadget et le TexteGadget sont fonctionnel aussi. Je vais travailler gadget par gadget c'est plus simple pour tester et je ferais un exemple par gadget. Prochain gadget l'EditorGadget.

Re: NeoGadgets

Publié : lun. 06/avr./2026 20:23
par MetalOS
Bon l'EditorGadget c'est une autre histoire 8O mais je vient de découvrir la commande ClipOutput() que je n'avais jamais utilisé et ça va être utile pour utiliser une zone restreint d'un gadget dessiné en canvas. Et je vais arrêté la pour aujourd'hui car ça fait 8 heures que je suis sur ce projet et je commence à avoir les yeux qui piques :D :D :D :D

Re: NeoGadgets

Publié : mar. 07/avr./2026 7:04
par MetalOS
Après une bonne nuit et avant l'editorGadget, voici le SeparatorGadget.

Image

Re: NeoGadgets

Publié : mar. 07/avr./2026 8:46
par MetalOS
Voici le FrameGadget. Je viens de me rendre compte que la gestion et création et plus ou moins similaire en fonction de la complexité d'un gadget. Du coup je vais pouvoir créer certain gadget plus rapidement que d'autre en faisant du copier coller de code.

Image

Re: NeoGadgets

Publié : mar. 07/avr./2026 10:55
par Philippe_GEORGES
Merci pour présenter ce projet.

Mais est il possible d'envisager une bibliothèque de gadgets qui seraient compatibles Mac et PC ? Je travaille sur les 2 plateformes. Ca m'arrangerait !

Merci pour ce travail

Phil

Re: NeoGadgets

Publié : mar. 07/avr./2026 17:18
par Mindphazer
Si MetalOS n'utilise pas d'API, comme dans son sujet Interface avec CanvasGadget() (viewtopic.php?t=19521), ça fonctionnera sous MacOS. Il faut juste faire les adaptations au DPI (avec des DesktopScaledX() et DesktopScaledY() et autres), ou compiler sans activer le facteur d'échelle....

Re: NeoGadgets

Publié : mar. 07/avr./2026 19:34
par Kwai chang caine
Dite moi si vous pensez que ça peut intéresser du monde ou c'est une perte de temps ?
Une perte de temps, je ne pense pas si déjà cela t'es utile pour toi :wink:
Quand à intéresser du monde, je pense que oui puisque tu avais déjà investi toi-même dans ProGUI, donc tu avais un besoin, et tu n'as peut être pas été le seul
Beaucoup de nouvelles applis ont des looks d'enfer désormais, surement qu'ils utilisent des librairies dédiées à ce genre de travail pour ne pas perdre trop de temps dans le "paraitre" et se consacrer à "l'utile"
Les grosses entreprises sont intéressées par le factuel, les pages de chiffres, les graphismes (Camenberts, courbes, etc ...) donc avoir du joli rapidement c'est leur truc, une vue d'ensemble au premier coup d’œil.
Quand aux développeurs PB, je ne sais pas si il y a encore beaucoup de nous qui utilisent des librairies non open-source, pour les problèmes que l'on a souvent évoqué d'arrêt net du suivi, des changements de version PB , etc ...et aussi, on est développeurs parce que l'on aime ça, et bien souvent essayer un domaine que l'on ne connait pas est un challenge, au moins pour voir
Quoi qu'il en soit, encore bravo pour tes jolies réalisations 8)

Re: NeoGadgets

Publié : mar. 07/avr./2026 20:23
par MetalOS
@Mindphazer

Je n'utilise pas d'api dans mon exemple, uniquement des commandes purebasic.

@Philippe_GEORGES

Je pense que sa doit être possible mais je ne pourrais le faire car sur mon Macbook pro j'ai viré Mac OS pour installer linux.

@Kwai chang caine

Merci pour ton retour

Sa avance doucement et j'ai bientôt fini l'EditorGadget avec possibilité d'activer ou désactiver la numérotation de ligne.

Re: NeoGadgets

Publié : mar. 07/avr./2026 23:50
par MetalOS
Voici l'EditorGadget. J'ai juste un petit bug de retour à la ligne automatique sinon il est à 99% fini

Image

Re: NeoGadgets

Publié : mer. 08/avr./2026 8:49
par Kwai chang caine
Ouahh l'editor un gros morceau 8O
tu vas lui ajouter des fonctions qu'on a pas avec le natif ?
parce que sans aller faire concurrence à scintilla :mrgreen: (Qui a lui même de gros defauts, je trouve), je trouve que l'éditeur et le listicon, bien que ce soit des bons gadgets, sont vraiment basiques sur PB :|
Après pour le listicon, a rajouter des fonctions, on a vite tendance pour le coup, a vouloir faire concurrence à EXCEL :lol:
Et puis j'ai appris dernièrement encore quelque chose que je ne savais pas, c'est que EXCEL n'est pas un listicon (Pourtant ça lui ressemble je trouve) 8O ... Mais un gridgadget.. Je devrais encore être le seul à ne pas le savoir au bout de 20 ans :oops:

Re: NeoGadgets

Publié : mer. 08/avr./2026 13:46
par falsam
C'est prometteur. Vivement la suite. En particulier les ListIconGadget et LisViewGadget. Bravo 🤩👏

Re: NeoGadgets

Publié : mer. 08/avr./2026 18:58
par MetalOS
Merci les gars,

@ Kwai chang caine , dans l'immédiat je ne pense pas ajouter plus d'option pour le moment mais pourquoi pas par la suite si tu à des idées.

@ falsam, ouais certains gadget sont plus complexe à géré par rapport à d'autre qui reste sur le même modèle que certains. Pour le ListIconGadget ca devrais allé car j'en avais créé un en canvas pour mon logiciel ECA, du coup je vais pouvoir l'adapter pour ce projet. J'ai déjà ajouté quelques nouveaux gadget et je travail sur un GraphiqueGadget pour créer un petit graphique avec des donées.