Page 1 sur 1

Projet Editors Factory

Publié : ven. 24/juil./2020 14:36
par Shadow
Bonjour à tous,

Vous l'avez attendu si longtemps, même si certains d'entre vous n'y croyaient pas et se moquaient même du projet !
Il avait des opinions, des critiques etc., il est apparu que ce projet avait environ 0,2% à voir le jour selon certains.
Mais d'autres critiques plus constructives aussi, comme le souhait de rendre le code public !

Nous avons essayé de créer une DLL du projet, mais aussi une librairie, ce fut simplement un échec retentissant !
Pas moyen de savoir comment protéger le code, je ne voulais pas le donner à la base car j'avais peur des abus et de l'appropriation !

Au fil du temps, le projet a été un peu mis de côté mais nous avons un peu
avancer quand même (enfin, quand je dis "nous", c'est surtout "Stargate") :)

Après un certain temps de réflexion et en tenant compte de certaines opinions, et surtout du fait que certaines personnes que je ne connais pas
venait demander à Stargate où en est le projet et qu'elles commençait à presser le bouchon....

Je conclus comme lui que ce projet est intéressant au final, et vous ne serez pas déçus.
mais je crois que je me suis mal exprimé comme je le fais souvent, hélas !

Ce module ne va pas créer votre éditeur les doigts dans le nez hein, c'est à vous de le faire !
C'est un peu comme un logiciel de création de jeu où il faut coder pour faire son jeu !

Ici c'est la même chose mais pour les éditeurs Object !
Tout a été pensé pour le rendre très facile à utiliser, mais il est possible de le rendre encore bien plus simple !

Vos éditeurs, vos Objets, c'est à vous de faire le reste !
La particularité de ce module est de pouvoir personnaliser et manipuler les objets comme vous le souhaitez.

Il ne suffit pas de créer un Objet, il faut aussi lui donner une apparence et des comportements avec des fonctions simplistes !

Créez un Objet où vous voulez sur l'éditeur
Donnez une image à cet objet (Apparence)
Ensuite, pourquoi ne pas lui donner un curseur standard ou personnalisé lorsque la souris passe dessus ?
Et pendant que nous y sommes, donnons des poignées standard ou personnalisées à nos Objets, pour les déplacer ou les redimensionner avec la souris, dans les directions souhaitées.
Et pourquoi ne pas restreindre nos Objets, position X et Y minimum et maximum sur la toile, taille minimum et maximum sur la toile, les redimensionner ou les déplacer par "pas".
Et pourquoi ne pas créer des Objets de type "Conteneur", sous la forme d'une hiérarchie de parents et d'enfants.

Retrouvez toutes les informations des Objets, leur position, leur taille, etc...
Et bien d'autres choses encore (non exhaustif) !
Et beaucoup d'autres choses encore plus folles, qui viendront plus tard !

Avec cet outil très puissant en cours de développement, vous pourrez créer votre propre éditeur !
Pourquoi pas un éditeur de dessin, un éditeur vectoriel, etc...
Ou même un éditeur de jeux, soyons fous !
Ou encore plus fou, un éditeur visuel !

Cet outil vous permettra de créer vos propres éditeurs, mais il ne fera pas le travail pour vous !
N'attendez pas que les choses vous arrivent, il faut les provoquer ! (Citation du film : La championne d'échecs sur YT)

Nous avons trouvé une licence appropriée pour le module.
Si je ne me trompe pas : https://creativecommons.org/licenses/by-nc/4.0/

Mais nous verrons comment le mettre en œuvre.

Editors Factory vient directement chez vous le week-end prochain si tous se passe bien.
Alors bavé un max et préparer les pop corn car ça va décoiffé !

Re: Projet Editors Factory

Publié : dim. 17/janv./2021 17:01
par Shadow
Salut à tous,

Editors Factory est disponible en open source.

Le plus ressent est le 29/11/2021 sur ce lien ici, c'est un peu le Bazard car en chantier:
https://drive.google.com/file/d/1y_6TAE ... sp=sharing

J'ai commencer le fichier d'aide mais reste beaucoup à faire !
https://drive.google.com/file/d/13OkWo7 ... sp=sharing

Information et mise à jour sur le forum anglophone !

https://www.purebasic.fr/english/viewto ... 12&t=76588
Quelques autres Exemples ici: https://drive.google.com/file/d/1x9olBI ... sp=sharing

Si vous avez des question posez les ici svp
mais regarder avant si votre réponses n'est pas là bas :)

Re: Projet Editors Factory

Publié : dim. 17/janv./2021 18:23
par Mindphazer
Shadow a écrit : Si vous avez des question posez les ici svp
mais regarder avant si votre réponses n'est pas là bas :)
Donc autant poser les questions là-bas :mrgreen:

Re: Projet Editors Factory

Publié : dim. 17/janv./2021 18:37
par Shadow
Mindphazer a écrit :
Shadow a écrit : Si vous avez des question posez les ici svp
mais regarder avant si votre réponses n'est pas là bas :)
Donc autant poser les questions là-bas :mrgreen:
Ouais, t'as raison :lol:

Re: Projet Editors Factory

Publié : lun. 18/janv./2021 9:41
par microdevweb
Bravo tu a tenu ton pari, bonne continuation pour la suite. Pour ma part le n'ai pas d'utilité d'un tel module.

Re: Projet Editors Factory

Publié : lun. 18/janv./2021 13:57
par Ar-S
J'ai testé les exemples. Ils fonctionnent. Bravo.
LE truc qui me questionne. Vous n'étiez pas censé faire un IDE pour créer l'interface ? Parce qu'en l'état, on a des exemples fonctionnels mais si faut décortiquer les exemples pour pouvoir l'utiliser l'intérêt est moindre.

Re: Projet Editors Factory

Publié : lun. 18/janv./2021 17:17
par Shadow
Ar-S a écrit :J'ai testé les exemples. Ils fonctionnent. Bravo.
LE truc qui me questionne. Vous n'étiez pas censé faire un IDE pour créer l'interface ? Parce qu'en l'état, on a des exemples fonctionnels mais si faut décortiquer les exemples pour pouvoir l'utiliser l'intérêt est moindre.
Salut Ar-S,

Je t'invite à relire mon message, le premier tout y est me semble !
" Vous n'étiez pas censé faire un IDE pour créer l'interface ?"
Non, c'est mieux que ça, c'est c'est à toi de le créer ton Ide !
L'intérêt du module c'est de créer toi même ton éditeur !
Et ce, en manipulant les objets comme tu le souhaite !
on a des exemples fonctionnels mais si faut décortiquer les exemples pour pouvoir l'utiliser l'intérêt est moindre.
Je suis d'accord avec toi, mais nous y ajouterons du contenu plus tard, au moins le code est disponible c'est le plus important !

Et puis si tu as des question je suis là pour y répondre aussi et sur le forum anglais aussi ya Stargate mais il est assez pris.
Note: le lien sur le forum anglais est moins complet en exemple !

Les démo par exemple n'y sont pas et ne sont pas traduite en anglais !

@microdevweb merci à toi :)

Re: Projet Editors Factory

Publié : lun. 29/nov./2021 16:57
par blendman
salut

j'ai retesté aujourd'hui, et il manque des exemples qui pourraient permettre de mieux comprendre ce qu'on peut faire, donc, en voici 2 :

ellipse et curve, basé sur l'exemple 1 (bases) :

Ellipse :

Code : Tout sélectionner

; Example01_Basics_ellipse.pb

; Includes the program file
XIncludeFile "EditorFactory.pbi"

; Initializes the Module
UseModule EditorFactory


; --------- Example ---------


; Program constants
Enumeration 1
	#Window
	#Canvas
EndEnumeration

; Object constants starting from 1
Enumeration 1
	#Object1
EndEnumeration

; ----------------------------------------------

; Callback procedure to draw on the object
;   Object.i is the number of the object, you can use it to get properties of the currently drawn object
;   Width.i is the current width of the object
;   Height.i is the current height of the object
;   iData.i is a custom data value set in SetObjectDrawingCallback, here it is used as the color
; This procedure will automatically called during the draw of the Object
Procedure MyDrawing(Object.i, Width.i, Height.i, iData.i)
  AddPathEllipse(Width*0.5,Height*0.5,Width*0.5,Height*0.5)
	VectorSourceColor(iData|$80000000)
	FillPath(#PB_Path_Preserve)
	VectorSourceColor(iData|$FF000000)
	StrokePath(1)
EndProcedure

; ----------------------------------------------

; Create a window
OpenWindow(#Window, 0, 0, 800, 450, "Example 1: Creation of a basic objects.", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

; Create a canvas gadget
CanvasGadget(#Canvas, 0, 0, WindowWidth(#Window), WindowHeight(#Window), #PB_Canvas_Keyboard)

; Initializes the object management for the canvas gadget
If Not InitializeCanvasObjects(#Canvas, #Window)
	Debug "Unable to initialize the object manager !"    
EndIf

; Creates and adds an object to the specified canvas object. By default it is grey and hase no handles
CreateObject(#Canvas, #Object1, 20, 20, 200, 100)
Define Object.i = CreateObject(#Canvas, #PB_Any, 320, 20, 200, 100)

; Sets a custom drawing procedure (as defined above) to the specified object. The last parameter is used as a color
SetObjectDrawingCallback(#Object1, @MyDrawing(), RGB(128, 192, 64))
SetObjectDrawingCallback(Object, @MyDrawing(), RGB(192, 64, 128))

; Add handles for resize and movement
AddObjectHandle(#Object1, #Handle_Size | #Handle_Position)
AddObjectHandle(Object, #Handle_Size | #Handle_Position)


; The window's event loop
Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow ; Exit the program.
			Break
			
	EndSelect
	
ForEver

End
Curve :

Code : Tout sélectionner

; Example01_Basics_curve.pb

; Includes the program file
XIncludeFile "EditorFactory.pbi"

; Initializes the Module
UseModule EditorFactory


; --------- Example ---------


; Program constants
Enumeration 1
	#Window
	#Canvas
EndEnumeration

; Object constants starting from 1
Enumeration 1
	#Object1
EndEnumeration

; ----------------------------------------------

; Callback procedure to draw on the object
;   Object.i is the number of the object, you can use it to get properties of the currently drawn object
;   Width.i is the current width of the object
;   Height.i is the current height of the object
;   iData.i is a custom data value set in SetObjectDrawingCallback, here it is used as the color
; This procedure will automatically called during the draw of the Object
Procedure MyDrawing(Object.i, Width.i, Height.i, iData.i)
  MovePathCursor(0,0)
  AddPathCurve(0.5*Width,0.5,Width*0.5,height*0.5,Width,Height)
	VectorSourceColor(iData|$80000000)
	FillPath(#PB_Path_Preserve)
	VectorSourceColor(iData|$FF000000)
	StrokePath(1)
EndProcedure

; ----------------------------------------------

; Create a window
OpenWindow(#Window, 0, 0, 800, 450, "Example 1: Creation of a basic objects.", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

; Create a canvas gadget
CanvasGadget(#Canvas, 0, 0, WindowWidth(#Window), WindowHeight(#Window), #PB_Canvas_Keyboard)

; Initializes the object management for the canvas gadget
If Not InitializeCanvasObjects(#Canvas, #Window)
	Debug "Unable to initialize the object manager !"    
EndIf

; Creates and adds an object to the specified canvas object. By default it is grey and hase no handles
CreateObject(#Canvas, #Object1, 20, 20, 200, 100)
Define Object.i = CreateObject(#Canvas, #PB_Any, 320, 20, 200, 100)

; Sets a custom drawing procedure (as defined above) to the specified object. The last parameter is used as a color
SetObjectDrawingCallback(#Object1, @MyDrawing(), RGB(128, 192, 64))
SetObjectDrawingCallback(Object, @MyDrawing(), RGB(192, 64, 128))

; Add handles for resize and movement
AddObjectHandle(#Object1, #Handle_Size | #Handle_Position)
AddObjectHandle(Object, #Handle_Size | #Handle_Position)


; The window's event loop
Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow ; Exit the program.
			Break
			
	EndSelect
	
ForEver

End
Ce sont des exemples tout bêtes, mais essentiels à mon avis pour qu'on puisse avoir une idée globale ;).

Re: Projet Editors Factory

Publié : lun. 29/nov./2021 18:05
par Shadow
Shadow a écrit : dim. 17/janv./2021 17:01 Salut à tous,

Editors Factory est disponible en open source.

Le plus ressent est le 29/11/2021 sur ce lien ici, c'est un peu le Bazard car en chantier:
https://drive.google.com/file/d/1y_6TAE ... sp=sharing

Information et mise à jour sur le forum anglophone !

https://www.purebasic.fr/english/viewto ... 12&t=76588
Quelques autres Exemples ici: https://drive.google.com/file/d/1x9olBI ... sp=sharing

Si vous avez des question posez les ici svp
mais regarder avant si votre réponses n'est pas là bas :)

Re: Projet Editors Factory

Publié : lun. 29/nov./2021 18:06
par Shadow
Le deuxième message à été mis à jour avec le lien vers l'archive dernière en date.

Re: Projet Editors Factory

Publié : mar. 30/nov./2021 15:13
par Shadow
@blendman, et les autres.

Dans les exemples en français ou ils sont les plus nombreux, tu peu déjà voir quelques exemples pas trop mal.
Et tu as aussi 2 ou3 démo aussi je crois.

Dis moi ce que tu en pense, faut pas hésiter, si tu as des questions etc...

Re: Projet Editors Factory

Publié : mer. 01/déc./2021 6:45
par Shadow
J'ai mis dans le deuxième message le fichier d'aide en court de construction.
Peut être que cela vous aidera à un peu mieux comprendre ?

Re: Projet Editors Factory

Publié : jeu. 20/nov./2025 6:39
par Shadow
Qu'est ce que c'est que "Editors Factory" ?

Introduction

Le projet Editors Factory est un module développé en PureBasic par les contributeurs du forum STARGÅTE et ShadowStorm [3]. Il ne s'agit pas d'une application autonome, mais d'une bibliothèque de fonctions (module) conçue pour faciliter la création d'éditeurs graphiques sophistiqués au sein de l'environnement PureBasic [3].

Ce module vise à abstraire la complexité de la gestion des objets dans un gadget Canvas (zone de dessin), permettant aux développeurs de se concentrer sur la logique métier de leur éditeur (par exemple, un éditeur de formulaires, un éditeur de jeux, ou tout autre éditeur basé sur des objets) [3].

Fonctionnalités et Rôle du Module

Le module Editors Factory fournit une surcouche de gestion d'objets pour le gadget Canvas de PureBasic. Il offre un ensemble de fonctionnalités avancées qui ne sont pas disponibles nativement dans le langage, notamment en matière de manipulation interactive d'éléments graphiques [3].

Le tableau ci-dessous synthétise les principales fonctionnalités offertes par le module :

Gestion des Objets
Création, suppression, et attachement d'objets dans un Canvas initialisé. Chaque objet est géré par un identifiant numérique [3].

Dessin Personnalisé
Utilisation de callbacks de dessin SetObjectDrawingCallback pour permettre au développeur de définir le rendu visuel de chaque objet, offrant une flexibilité totale sur l'apparence [3].

Manipulation Interactive
Ajout et personnalisation de poignées handles aux coins et bords des objets pour les opérations de déplacement, de redimensionnement, et l'ajout d'événements personnalisés [3].

Système de Conteneurs
Implémentation d'un système d'attachement et de conteneurs d'objets, permettant d'intégrer plusieurs cadres Frames à l'intérieur des objets, simulant le comportement d'un gadget Panel [3].

Gestion des Événements
Gestion fine des événements de curseur et de clavier spécifiques aux objets et à leurs poignées, incluant des événements pour le maintien du bouton de la souris #EventType_LeftMouseButtonHold [3].

Opérations d'Édition
Implémentation de mécanismes non natifs tels que Couper, Copier, Coller et des fonctions Annuler, Rétablir pour les objets [1] [3].

Persistance des Données
Fonctions LoadObject et SaveObject pour la sauvegarde et le chargement de l'état des objets [3].

Contrôle des États
Utilisation de drapeaux pour contrôler l'état des objets (Afficher, Masquer, Désactiver, Activer, Sélectionner, Désélectionner) et définition des limites Boundaries pour leur position et leur taille [3].

Principe de Fonctionnement Technique

Le module Editors Factory est utilisé en incluant le fichier Editors Factory.Pbi grâce à XIncludeFile et en déclarant son utilisation via UseModule EditorFactory

Le fonctionnement repose sur les étapes suivantes :

1. Initialisation du Module : Le module est rendu disponible dans le code via l'instruction [font=Courier New]UseModule[/font].
2. Création du Canvas : Un gadget Canevas est créé, servant de zone de dessin pour les objets.
3. Création des Objets : Les objets sont ajoutés au Canevas via les procédures du module.
4. Gestion des Événements : Le module intercepte les événements générés par le Canevas (mouvements de souris, clics, touches) et les traduit en actions sur les objets (sélection, déplacement, redimensionnement) [3].
5. Rendu : À chaque mise à jour, le module appelle les callbacks de dessin définis par le développeur pour redessiner les objets et leurs poignées [3].

Ce mécanisme permet de gérer des interactions complexes, comme la sélection multiple, le déplacement d'objets attachés, et la gestion des poignées de redimensionnement, sans que le développeur ait à coder lui-même toute cette logique de bas niveau [1].

Licence et Implications

Le module est distribué sous la licence CC BY-NC 4.0 (Creative Commons Attribution - Pas d'Utilisation Commerciale 4.0 International) [3].

Cette licence a fait l'objet de discussions sur le forum, car elle impose une restriction significative :
NonCommercial — Vous n'êtes pas autorisé à faire un usage commercial de cette œuvre [3].
Cela signifie que, bien que le code soit librement accessible, partageable et modifiable, il ne peut être intégré à un projet destiné à être vendu ou monétisé. Cette restriction limite son utilisation aux projets personnels, éducatifs ou non-commerciaux [1].

Conclusion

Le projet Editors Factory est une contribution majeure à la communauté PureBasic, offrant une solution élégante et puissante pour la création d'éditeurs graphiques. Il fournit une boîte à outils complète pour la gestion des objets dans un Canevas, incluant des fonctionnalités avancées de manipulation, de conteneurs, et de persistance des données. Son rôle est de simplifier le développement d'interfaces d'édition complexes en fournissant une abstraction solide de la gestion des interactions graphiques.

Note: Cette présentation a été réalisé par une IA à ma demande.


Références

[1] ShadowStorm. (2025, 17 novembre). Re: EditorFactory - Module for object management in a Canvas. PureBasic Forums - English. https://www.purebasic.fr/english/viewtopic.php?p=647960
[2] Shadow. (2020, 26 septembre). Re: Problème avec Bibliothèque (Librairie). PureBasic Forums - French. viewtopic.php?t=18182
[3] STARGÅTE. (2021, 16 janvier). EditorFactory - Module for object management in a Canvas. PureBasic Forums - English. https://www.purebasic.fr/english/viewtopic.php?t=76588

Dernière mise à jour le: 20/11/2025 (Réarrangements, ajouts d'exemples, ...)
Télécharger: https://drive.google.com/file/d/1gaH8AI ... sp=sharing

Re: Projet Editors Factory

Publié : ven. 21/nov./2025 12:05
par Philippe_GEORGES
Merci à toi pour ce beau projet, c'est de la belle programmation, bien propre et bien structurée.

A moi maintenant d'en voir les applications possibles !

Grand merci !!

Phil

Re: Projet Editors Factory

Publié : ven. 21/nov./2025 13:46
par Shadow
Salut Phil,

Je t'en pris.

Pour info c'est STARGÅTE qui à tous codé pour moi, moi je suis à l'origine du projet et ma contribution est:
idées, tests, exemples diverses et varier, aide FR, traduction FR...

C'est un projet qui me tien beaucoup à cœur, malheureusement il a été stopper pour certaines raisons.

Si tu as besoin d'aide hésite pas.
Cordialement.