Librairie de classe pour gtk+

Soyez le premier à donner votre avis sur cette source.

Vue 7 706 fois - Téléchargée 1 147 fois

Description

Voila, c'est un de mes premiers "gros" projets, que j'ai commencé en Octobre. En gros, c'est un pack de classe pour simplifier le développement d'application avec GTK+ 2.x (moi, j'utilise le 2.4). Les classes disponibles pour le moments sont :

- Crystal (la classe de base)
- Form (C'est une classe qui gère les fenêtre ou GtkWindow)
- Label (Gère les Labels ou GtkLabel)
- Button (Gère les bouton ou GtkButton)
- Textbox (Gère les Textbox)
- String (Ma classe de gestion des chaines de caractère personnelle, que j'ai déja publié sur ce site; à part que cette classe à été mise à jour)

Voila. Ensuite, comme tout les editeur de GUI ou de truc comme sa, jai pas résisté à la tentation de montre des typedef de partout ...
Les anciens développeur VB remarqueront que les fonctions membres et les propriétés de mes classes ressemblent étrangement aux noms des propriétés et fonctions membres des classes Visual Basic.

PS : Développé avec Visual C++ 7.0 (.Net 2002) et testé sous Visual C++ 6.0

Source / Exemple :


// Préprocésseur --------------------------------------------------------------
#include "Crystal.hpp"
// Prototypes -----------------------------------------------------------------
void main(int argc, char *argv[]);
void *frmMain_OnDestroy(GtkWidget *, void *);
void *cmdExit_OnClick(GtkWidget *, void *);
// Objets publiques -----------------------------------------------------------
Form *frmMain;
Button *cmdExit;
// Fonction Main --------------------------------------------------------------
void main(int argc, char *argv[])
{
	// Initialise GTK+
	Crystal::Init(&argc, &argv);
	// Crée frmMain
	frmMain = new Form("Main");
	frmMain->ConnectSignal("destroy", &frmMain_OnDestroy);
	// Crée cmdExit
	cmdExit = new Button("Quitter");
	cmdExit->ConnectSignal("clicked", &cmdExit_OnClick);
	// Ajoute cmdExit dans frmMain
	frmMain->Add(cmdExit);
	// Affiche frmMain et frmText
	frmMain->ShowAll();
	// Lance la boucle évenementielle
	Crystal::Run();
}
// ----------------------------------------------------------------------------
void *frmMain_OnDestroy(GtkWidget *Widget, void *Data)
{
	// Supprime les objets
	delete frmMain;
	// Quitte la boucle évenementielle
	Crystal::Exit();
	// Retourne NULL
	return NULL;
}
// ----------------------------------------------------------------------------
void *cmdExit_OnClick(GtkWidget *, void *)
{
	// Détruit frmMain
	frmMain->Close();
}
// ----------------------------------------------------------------------------

Conclusion :


Les bug connus : Bein c'est la 1ère bêta, donc, c'est bourré de bug.
PS : Pour utiliser cette librairie, il faut bien évidement avoir installé GTK+ 2.x
PS2 : SA ne fait pas très longtemps que je code, et encore moins longtemps que je code en C++. Bref, s'il vous plait, ne soyez pas trop cruels en jugeant ce code ;).

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Light Angel
Messages postés
48
Date d'inscription
dimanche 9 mai 2004
Statut
Membre
Dernière intervention
1 janvier 2005
-
N'hesitez pas à rajouter des commentaires
Funto66
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3 -
L'API me plaît bien...bah ça ressemble à du GTK-- (logique...^^).
Ce qui serait sympa serait de faire une version basée sur l'API Win32 sous Win et sur GTK+ sous les UNIXs (voire sous Win aussi pourquoi pas puisque c'est déjà là :p).

Par contre je trouve dommage que certaines parties du code que l'on crée soit relatif à GTK (on utilise des "GtkWidget" et gtk_init()), quitte à avoir une librairie pour masquer ça, autant tout masquer non?
cs_Light Angel
Messages postés
48
Date d'inscription
dimanche 9 mai 2004
Statut
Membre
Dernière intervention
1 janvier 2005
-
Oui, je sais. J'ai fait des fonctions statiques dans la classe Crystal (à savoir, Run et Exit) et j'ai essayé de rajouter la fonction Init, mais sa marché pas. Surtout que gtk_init est une macro, et non ne fonction, donc, pour savoir ce que je dois mettre dans les arguments ...
Qu'est-ce qui peut nécéssité l'adresse d'un tableau de pointeur (char *[]) parce que gtk_init demande l'adresse de argc, sa c'est facile, mais l'adresse de argv, c plus compliqué ... Je pourrait éventuelement le mettre a jour, mais je ne voit pas ce que je doit rajouter ...
cs_Light Angel
Messages postés
48
Date d'inscription
dimanche 9 mai 2004
Statut
Membre
Dernière intervention
1 janvier 2005
-
Ensuite, pour ce qui est de faire la meme librairie pour l'API Win32, j'ai essayé, mais j'arrive po (honte à moi). Enfin, pour les GtkWidget * dans les CallBacks, je vois pas ce que je peut faire à part faire un typedef.
Funto66
Messages postés
1267
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
28 février 2007
3 -
Pour ta fonction gtk_init je ne pense pas que ce soit si compliqué.
En fait, le but de gtk_init() est de s'occuper de paramètres passés à l'application via la ligne de commande (+ l'initialisation de GTK+, bien entendu ^^).
Comme ça, si par exemple il y avait une option "display=" pour spécifier le numéro du Display (pour le système X Window, sous les UNIXs) tu pourrais appeler ton applciation comme ça :
mon_app display=2
Toi tu ne verrais pas la différence au niveau de la prog, vu que GTK+ aura soigneusement modifié argc et argv :)

Bref quoi qu'il en soi essaie ça :

class Crystal
{
// blabla...
public:
static void Init(int* pargc, char*** pargv);
};

void Crystal::Init(int* pargc, char*** pargv)
{
gtk_init(pargc, pargv);
}

Et bien sûr dans le main() :
Crystal::Init(&argc, &argv);

PS : j'avais pas vu, mais mettre main() qui renvoie un int est préférable en général...c'est la norme ^^

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.