Historique des modifications - Message

Message #10588

Sujet: C++ GUI Box retractables


Type Date Auteur Contenu
Dernière modification 05-07-2012 11:44:48 johnplayer
Voilà j'ai codé ça cet après-midi donc je partage.

C'est un nouveau GUIElement qui se presente sous forme de boite avec une barre de titre et qui a la particularité de pouvoir se rétracter et prendre une forme compacte (seule la barre de titre reste visible). Elle possède aussi le nécessaire pour chainer plusieurs boites les une aux autres afin que lorsque qu'une boite se rétracte elle tire la boite qui lui est associée qui elle-même tire la boite qui lui est associée...
Pour les avantages, inconvénients et l'utilisation, j'ai mis ce qu'il faut dans le .h. Si quelqu'un a des idées pour améliorer, ou si quelqu'un l'améliore de son côté qu'il poste ça, on pourrait avoir quelque chose de sympa.

Voici des screenshots :






GUI_BoxRetractable.hGUI_BoxRetractable.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef GUI_BOXRETRACTABLE_H_INCLUDED
#define GUI_BOXRETRACTABLE_H_INCLUDED

#include "IGUIElement.h"
#include "IGUICheckBox.h"
#include "IGUIImage.h"
#include "IGUIStaticText.h"
#include "ITexture.h"

using namespace irr;
using namespace gui;
using namespace core;
using namespace video;

/**
Avantages :

    - Ces boxs peuvent être une alternative au scrollbars.
    - Il est possible de les chainées, ainsi une box rétractée attire les box suivantes vers elle.
    - Il est possible d'insérer les boxs à taille fixe (dans la chaine ou séparement).

Inconvénients :

    - La taille ne doit pas être changé après la création.

Utilisation :

    #include "GUI_BoxRetractable.h"
    /// création
    BoxRetractable* BoxEssai = new BoxRetractable(recti(10,10,290,110), L"Box retractable", mGUI, "../include/GUI_BoxRetractable/", element_parent);
    BoxRetractable* BoxEssaiSuivant = new BoxRetractable(recti(10,115,290,265), L"Box retractable Suivante", mGUI, "../include/GUI_BoxRetractable/", element_parent);
    /// insertion d'une box fixe
    BoxRetractable* BoxEssaiTailleFixe = new BoxRetractable(recti(10,270,290,320), L"Box non retractable", mGUI, "../include/GUI_BoxRetractable/", element_parent, NULL, false);
    BoxRetractable* BoxEssaiSuivant2 = new BoxRetractable(recti(10,325,290,525), L"Box retractable Suivante2", mGUI, "../include/GUI_BoxRetractable/", element_parent);
    /// liaison des boxs (chainage)
    BoxEssai->setSuivant(BoxEssaiSuivant);
    BoxEssaiSuivant->setSuivant(BoxEssaiTailleFixe);
    BoxEssaiTailleFixe->setSuivant(BoxEssaiSuivant2);

    /// destruction
    BoxEssai->remove();
    BoxEssaiSuivant->remove();
    BoxEssaiTailleFixe->remove();
    BoxEssaiSuivant2->remove();


**/

class BoxRetractable : public IGUIElement
{
    public :
        BoxRetractable(rect<s32> rectangle, stringw titre, IGUIEnvironment* environment, stringw pathImage="../include/GUI_BoxRetractable/", IGUIElement* parent=0, BoxRetractable* suivant=NULL, bool retractable=true, s32 id=-1);
        ~BoxRetractable();

        bool OnEvent(const SEvent& event);
        void moveRequest(s32 decalageY);

        void setSuivant(BoxRetractable* suivant);

    protected :
        IGUIEnvironment* mGUI;
        ///
        BoxRetractable* Suivant; // pointeur vers la BoxRetractable suivante
        void setExtend(bool extend);
        void moveSuivant(s32 decalage);
        s32 mDecalage;
        ///
        bool mRetractable;
        recti mExtendSize;
        recti mRetractSize;
        position2di ExtendSize, RetractSize;
        IGUICheckBox* CBExtend; IGUIStaticText* STExtend;
        IGUIImage* ICaption;
        IGUIImage *IDroite, *IGauche, *IBasse;

    private :
        static int compteurInstance;
        static ITexture *TCaption;
        static ITexture *TBordure;

};

#endif // GUI_BOXRETRACTABLE_H_INCLUDED

Les 2 fichiers images qui servent de shin à la box : (ces fichiers sont nécessaires et il faut donner le chemin d'accès à la création de la box)
Pour les enregistrer "clic droit" sur le lien, "enregistrer la cible sous" car les fichiers sont tout petits.
BoxRetractable_bord.jpg
BoxRetractable_caption.jpg

Voilà!

Màj 1 : chargement unique des textures et destruction automatique grace à un compteur d'instance.

Prochaines fonctionnalités à implémenter :
  • ajout et chainage avec des positions relatives entre les maillons; FAIT dans la v2
Création du message 04-07-2012 19:07:16 johnplayer
Voilà j'ai codé ça cet après-midi donc je partage.

C'est un nouveau GUIElement qui se presente sous forme de boite avec une barre de titre et qui a la particularité de pouvoir se rétracter et prendre une forme compacte (seule la barre de titre reste visible). Elle possède aussi le nécessaire pour chainer plusieurs boites les une aux autres afin que lorsque qu'une boite se rétracte elle tire la boite qui lui est associée qui elle-même tire la boite qui lui est associée...
Pour les avantages, inconvénients et l'utilisation, j'ai mis ce qu'il faut dans le .h. Si quelqu'un a des idées pour améliorer, ou si quelqu'un l'améliore de son côté qu'il poste ça, on pourrait avoir quelque chose de sympa.

Voici des screenshots :






GUI_BoxRetractable.hGUI_BoxRetractable.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef GUI_BOXRETRACTABLE_H_INCLUDED
#define GUI_BOXRETRACTABLE_H_INCLUDED

#include "IGUIElement.h"
#include "IGUICheckBox.h"
#include "IGUIImage.h"
#include "IGUIStaticText.h"
#include "ITexture.h"

using namespace irr;
using namespace gui;
using namespace core;
using namespace video;

/**
Avantages :

    - Ces boxs peuvent être une alternative au scrollbars.
    - Il est possible de les chainées, ainsi une box rétractée attire les box suivantes vers elle.
    - Il est possible d'insérer les boxs à taille fixe (dans la chaine ou séparement).

Inconvénients :

    - La taille ne doit pas être changé après la création.

Utilisation :

    #include "GUI_BoxRetractable.h"
    /// création
    BoxRetractable* BoxEssai = new BoxRetractable(recti(10,10,290,110), L"Box retractable", mGUI, "../include/GUI_BoxRetractable/", element_parent);
    BoxRetractable* BoxEssaiSuivant = new BoxRetractable(recti(10,115,290,265), L"Box retractable Suivante", mGUI, "../include/GUI_BoxRetractable/", element_parent);
    /// insertion d'une box fixe
    BoxRetractable* BoxEssaiTailleFixe = new BoxRetractable(recti(10,270,290,320), L"Box non retractable", mGUI, "../include/GUI_BoxRetractable/", element_parent, NULL, false);
    BoxRetractable* BoxEssaiSuivant2 = new BoxRetractable(recti(10,325,290,525), L"Box retractable Suivante2", mGUI, "../include/GUI_BoxRetractable/", element_parent);
    /// liaison des boxs (chainage)
    BoxEssai->setSuivant(BoxEssaiSuivant);
    BoxEssaiSuivant->setSuivant(BoxEssaiTailleFixe);
    BoxEssaiTailleFixe->setSuivant(BoxEssaiSuivant2);

    /// destruction
    BoxEssai->remove();
    BoxEssaiSuivant->remove();
    BoxEssaiTailleFixe->remove();
    BoxEssaiSuivant2->remove();


**/

class BoxRetractable : public IGUIElement
{
    public :
        BoxRetractable(rect<s32> rectangle, stringw titre, IGUIEnvironment* environment, stringw pathImage="../include/GUI_BoxRetractable/", IGUIElement* parent=0, BoxRetractable* suivant=NULL, bool retractable=true, s32 id=-1);
        ~BoxRetractable();

        bool OnEvent(const SEvent& event);
        void moveRequest(s32 decalageY);

        void setSuivant(BoxRetractable* suivant);

    protected :
        IGUIEnvironment* mGUI;
        ///
        BoxRetractable* Suivant; // pointeur vers la BoxRetractable suivante
        void setExtend(bool extend);
        void moveSuivant(s32 decalage);
        s32 mDecalage;
        ///
        bool mRetractable;
        recti mExtendSize;
        recti mRetractSize;
        position2di ExtendSize, RetractSize;
        IGUICheckBox* CBExtend; IGUIStaticText* STExtend;
        IGUIImage* ICaption;
        IGUIImage *IDroite, *IGauche, *IBasse;

    private :
        static int compteurInstance;
        static ITexture *TCaption;
        static ITexture *TBordure;

};

#endif // GUI_BOXRETRACTABLE_H_INCLUDED

Les 2 fichiers images qui servent de shin à la box : (ces fichiers sont nécessaires et il faut donner le chemin d'accès à la création de la box)
Pour les enregistrer "clic droit" sur le lien, "enregistrer la cible sous" car les fichiers sont tout petits.
BoxRetractable_bord.jpg
BoxRetractable_caption.jpg

Voilà!

Màj 1 : chargement unique des textures et destruction automatique grace à un compteur d'instance.

Prochaines fonctionnalités à implémenter :
  • ajout et chainage avec des positions relatives entre les maillons; FAIT dans la v2

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
168 invités en ligne
membre en ligne: -
RSS Feed