MUI Morphos et C++
12 sujets de 1 à 12 (sur un total de 12)
-
Salut, je voudrais me lancer dans un Dev C++ pour Mui Mos. Il sera éventuellement portable. Je voudrais utiliser les custom class pour éviter d’avoir une boucle événement sans fin mais je ne sais pas quels include utilisée.
J’ai vu les macros d’Ambient, les SDI ou les API MUI et j’aimerai votre avis.
Merci.
Je suis certainement influencé, mais je dois dire que les macros de vapor utilisées (et étendues) dans Ambient sont vraiment très pratiques.
Les macros vapor permettent de compiler pour gcc 68k/ppc et pour sas/c. Pour OS4, il faudrait adapter.
J’avais déjà jeté un oeil à SDI et dans mes souvenirs, c’était moins focalisé sur MUI.
Enfin, API MUI semble tout à fait similaire à ce que fait Ambient et supporte plus d’architectures.
Après, si tu fais du C++, j’imagine que tu pourras encapsuler ça dans une définition standard de classe, mais il faudra se méfier, car le C++ n’est pas toujours conciliant avec les macros à arguments multiples utilisées dans MUI, par exemple.
Maintenant, un petit exemple d’une classe avec la « méthode ambient » :
Les macros sont pour la plupart définies dans includes/macros/vapor.h
Pour la déclaration et création des classes (classes.h/c)
DEFCLASS(maclasse);
CLASSENT(maclasse);
Pour l’implémentation d’une classe :
// données membres
struct Data
{
blah blah perso
};
// constructeur
DEFNEW
{
APTR obj = DoSuperNew(cl, obj, TAG_DONE);
if(obj)
{
GETDATA;
// initialisation blah blah
doset( obj, data, INITTAGS );
}
return obj;
}
// destructeur
DEFDISP
{
GETDATA;
// nettoyage des ressources allouées
return (DOSUPER);
}
// accesseurs
DEFGET
{
GETDATA;
switch (msg->opg_AttrID)
{
case Attribut_n:
// blah blah
*msg->opg_Storage = blah;
return (TRUE);
}
return DOSUPER;
}
static void doset(APTR obj, struct Data *data, struct TagItem *tags)
{
FORTAG(tags)
{
case Attribut_n:
data->truc = tag->ti_Data;
break;
}
NEXTTAG
}
DEFSET
{
GETDATA;
doset(obj, data, INITTAGS);
return DOSUPER;
}
// Méthodes
DEFSMETHOD(MaMethode)
{
GETDATA;
blahblah
}
// Table des méthodes
BEGINMTABLE
DECNEW
DECDISP
DECSET
DECGET
DECSMETHOD(MaMethode)
ENDMTABLE
DECSUBCLASS_NC(classe_mui_dont_on_hérite, nom_de_ma_classe)
Fab: a peine influence cette reponse….
Bon sinon, n’oubliez jamais ce que font ces macros!
C’est un peu comme les IDE. On n’oublie vite souvent ce que l’on fait.
En faite toutes les methodes sont bonnes pour faire du MUI.
Aucune n’est plus rapide que l’autre… elles ne jouent que sur la vitesse de frappe, la lisibilite et la portabilite, pas sur le resultat.
[PUB]Mon module MUI-Python avance bien [/PUB]
Les macros citées sont très bien mais dans mon cas cela me casse les c****** car le système de « sections » de GoldED AIX n’affiche que des « DEFTMETHOD » « DEFSMETHOD » et autres qui ne sont pas nominatif.
Donc pas d’accés rapide à la methode que l’on checher.
Quand on a plus de 25 methodes dans une classe ce n’est pas un luxe.
Et comme le dis Yomgui, comme les macros cachent le code,
il arrive tôt ou tard un cas particulier où il faut fouttre le nez dans les macros car il y a des erreur de compilations. (je pense en particulier aux tonnes de macro MUI qui peuvent vite devenir un cauchemard quand il y a beaucoup de groupes empilés).
Un autre conseil, utilise toujours la même identation avec décalage pour la conseption des GUI.
/me qui bosse sur PolyGlot et ca avance
Fab1 a écrit :
Je suis certainement influencé, mais je dois dire que les macros de vapor utilisées (et étendues) dans Ambient sont vraiment très pratiques.
Les macros vapor permettent de compiler pour gcc 68k/ppc et pour sas/c. Pour OS4, il faudrait adapter.
Merci des infos mais dis moi, peux tu me conseiller la lecture d’un source d’Ambient pouvant m’aider à comprendre le fonctionnement de ces macros ?
J’avoue ne pas connaitre le fonctionnement des SUBCLASS et leur utilisations sous MUI. Aussi, je cherche tous sources simples qui pourrais m’aider à comprendre. Par exemple, je ne sais pas si une SUBCLASS peut être une fenêtre autonome ou s’il elle doit être contenue dans un CHILD d’une window MUI ?
Bon, je vais déjà essayer de regarder si je trouve.
Merci.
Polymere a écrit :
Donc pas d’accés rapide à la methode que l’on checher.
Quand on a plus de 25 methodes dans une classe ce n’est pas un luxe.
tu parle de méthode, tu travaille en C++ ?
Un autre conseil, utilise toujours la même identation avec décalage pour la conseption des GUI.
c’est en terme de lisibilité du code ou pour autre chose ?
/me qui bosse sur PolyGlot et ca avance
il en faut qui bosse
Merci.
Si tu connais la programmation objet, tu sais ce qu’est l’héritage. C’est exactement ce dont il s’agit avec MUI.
Le modèle de base de MUI est le suivant : toutes les classes héritent d’une classe racine (boopsi). MUIC_Notify (qui implémente des mécanismes de notifications) en hérite. MUIC_Application, MUIC_Window, MUIC_Area héritent de MUIC_Notify. Et tous les gadgets/groups héritent de MUIC_Area, etc… MUIDev.guide montre tout ça très clairement.
Quand tu as besoin de redéfinir un comportement d’une classe, tu la dérives (sous-classes), définis/ajoutes ce dont tu as besoin, et il suffit ensuite d’instancier cette classe et de l’utiliser comme n’importe quelle autre classe.
Par exemple, dans la classe liste (sous mui4), tu peux (à moins d’utiliser des hooks), définir les méthodes d’affichage, de construction et destruction des éléments à insérer. En pratique, tu crées donc une classe qui dérive de MUIC_List, et tu implémentes MUIM_List_Display, MUIM_List_Construct/Destruct.
Dans ambient, tu peux regarder tous les fichiers *class.c qui sont des sous-classes des classes de base de mui.
Et par rapport à ton autre question, oui, une sous-classe de MUIC_*Group peut avoir des objets composites, évidemment, puisqu’elle ne fait qu’étendre le comportement d’une classe groupe normal.
Yomgui a écrit :
Fab: a peine influence cette reponse….
Bon sinon, n’oubliez jamais ce que font ces macros!
C’est un peu comme les IDE. On n’oublie vite souvent ce que l’on fait.
En faite toutes les methodes sont bonnes pour faire du MUI.
Aucune n’est plus rapide que l’autre… elles ne jouent que sur la vitesse de frappe, la lisibilite et la portabilite, pas sur le resultat.
[PUB]Mon module MUI-Python avance bien [/PUB]
C’est vrai que j’aime pas trop les macros très complexes qui rende certainement service mais qui ne facilitent pas toujours la compréhention du code par quelqu’un qui n’en est pas l’auteur.
Salut Vince,
Comme le dis si bien Fab, MUI utilise un consept objet mais dans un environnement de développement C.
Finalement je trouve cela plus clair que le C++.
On a le contrôle total de ce que l’on veux faire.
Quand on programme une classe par .c avec des static pour chaque fonction, seuls les Tags MUIM/MUIA et les structures MUIP sont accessible donc cela force a utiliser uniquement les methodes que l’on a déclaré.
Dans la pratique cela demande beaucoup de réfléxion pour assurer un coerance globale de l’application.
(je parle en connaissance de cause je me suis déjà planté et cela force a recoder beaucoup de choses).
Une classe bien codée peux être réutilisée dans plusieurs programmes si le squelette est le même.
A+
Sinon y a un truc bien, elegant, simple et OO…
… le module MUI pour Python, dont je viens tout juste dans fournir un premier essais (comme par hasard )
Bon sinon Vince, il te reste aussi a galerer a compiler du C++ avec MUI si tu veux…
Enfin moi je dis ca.. je dis rien quoi… je veux pas faire de la pub…
Vince a écrit :
J’avoue ne pas connaitre le fonctionnement des SUBCLASS et leur utilisations sous MUI. Aussi, je cherche tous sources simples qui pourrais m’aider à comprendre. Par exemple, je ne sais pas si une SUBCLASS peut être une fenêtre autonome ou s’il elle doit être contenue dans un CHILD d’une window MUI ?
Si ça peut t’aider, j’avais écrit un tutoriel MUI avec 7 articles et exemples, allant d’un programme simple à l’héritage de classe. A télécharger : tutoriel MUI DisKo sur Aminet
Fab : Les macros ça peut être bien (j’utilise d’ailleurs les macros SDI) mais je trouve que celles que tu indiques portent des noms trop génériques (tout comme par exemple la macro ENTRY des SDI_headers).
12 sujets de 1 à 12 (sur un total de 12)
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › MUI Morphos et C++