begin process at 2010 09 06 12:32:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

GTK+

 > LIBRAIRIE DE CLASSE POUR GTK+

LIBRAIRIE DE CLASSE POUR GTK+


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :GTK+ Niveau :Initié Date de création :01/01/2005 Date de mise à jour :01/01/2005 20:59:26 Vu / téléchargé :5 051 / 185

Auteur : Light Angel

Ecrire un message privé
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 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

  • // 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();
  • }
  • // ----------------------------------------------------------------------------
// 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 ;).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 janvier 2005 20:58:21 :
Mise à jour du 01/01/2005 (20:50) : Ajout de la fonction statique Init à la classe Crystal. Remplace gtk_init(&argc, &argv) par Crystal::Init(&argc, &argv).
01 janvier 2005 20:59:26 :
Mise à jour du code exemple

 Sources du même auteur

Source avec Zip TYPE DE DONNÉE PERSONNALISÉ : STRING
Source avec Zip LA SUITE DE FIBONACCI

 Sources de la même categorie

Source avec Zip Source avec une capture BINARY CLOCK GTK AVEC CONTRÔLE EN TRAY SOUS LINUX par dje_jay
Source avec Zip Source avec une capture [GTK+] FENÊTRE POPUP ANIMÉE EN BAS À DROITE DE L' ÉCRAN par katsankat
Source avec Zip GTK _CALCUL par jabirmed
Source avec Zip DICTIONNER RECHERCHE GTK par jabirmed
Source avec Zip JEU DE PIONS EN RESAUX EN GTK+ par karamimed

Commentaires et avis

Commentaire de Light Angel le 01/01/2005 16:30:23

N'hesitez pas à rajouter des commentaires

Commentaire de Funto66 le 01/01/2005 20:19:04

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?

Commentaire de Light Angel le 01/01/2005 20:27:10

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 ...

Commentaire de Light Angel le 01/01/2005 20:30:07

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.

Commentaire de Funto66 le 01/01/2005 20:42:50

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 ^^

Commentaire de Light Angel le 01/01/2005 20:52:58

Attend, j'essaye, comme j'ai changé d'ordinateur et que j'ai pas encore réinstallé GTK+, je ne pourrai pas tester. Mais normalement, sa devrai marcher...

Commentaire de Funto66 le 01/01/2005 21:14:08

T'as oublié d'implémenter la fonction Form::Close() dans tes sources, je l'ai rajoutée (j'ai mis un gtk_widget_destroy mais je doute que ce soit vraiment ça...si?).
Quoi qu'il en soi il y a pas mal de warnings quand on compile avec Dev-C++ :(
J'essaie d'en virer un max possible (déjà, rien que le fait de ne pas finir un fichier source par un retour à la ligne crée un warning...).

Commentaire de Light Angel le 01/01/2005 21:23:58

Ah ui, en effet, me suis gouré dans le fichier Main.cpp, remplace frmMain->Close() par frmMain->Kill() ou alors, rajoute la fonction Close() à Form. Désolé.

Commentaire de Light Angel le 01/01/2005 21:27:57

voila ce qui devrai normalement être dans la fonction Close :

void Form::Close(void)
{
    gtk_widget_destroy(this->Object());
}

PS : les WARNINGS dans DevC++, je ne suis pas au courant, je n'est pas testé. Quoi qu'il en soit, sous VC++, ya pas de Warnings.

PS2 : Je vien de remarquer une autre erreur dans le fichier Main.cpp, faut pas oublier de détruire cmdExit

void *cmdExit_OnClick(GtkWidget *, void *)
{
    ...
    delete cmdExit;
    ...
}

Commentaire de Funto66 le 02/01/2005 00:27:22

Ouais ben en fait comme je t'ai dit j'ai réglé le pb en implémentant la fonction Close() mais j'ai mis dedans :
gtk_widget_destroy(this->Widget);

Par contre cette histoire de "delete" c'est pas super (même pas super du tout du tout); il doit y avoir moyen de faire comme avec wxWidgets, c'est à dire de faire en sorte que ce soit la librairie, et non le programmeur qui l'utilise, qui détruise les objets alloués (ne serait-ce que dans la fonction Crystal::Exit()...).

Commentaire de Light Angel le 02/01/2005 00:57:16

Bein justement, le delete, c'est pas obligatoire, en haut, au lieu de déclarer :

Form *frmMain;
Button *cmdExit;

On déclare :

Form frmMain("Main");
Button cmdExit("Quitter");

Et on ne s'enmerde pas, si jamais une fonction nécéssite un pointeur vers un Crystal ou vers un dérivé de Crystal, on s'enmerde pas, on passe &lobjet en argument ... Les pointeurs, on est pas obligé de les mettre, c'est même mieu de pas les mettres, mais j'en avais besoin pour les tests ...

Commentaire de Funto66 le 02/01/2005 02:11:32

Ouais c'est pas plus mal comme ça, mais dans ce cas faut adapter main.cpp pour que ça reflète cette procédure :)

Commentaire de psykocrash le 13/07/2005 05:19:03

Voici la réponse à ton problème s'il n'est pas déjà résolu :

void Crystal::Init(void)
{
gtk_init(NULL, NULL);
}

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales