Historique des modifications - Message

Message #10590

Sujet: C++ GUI Box retractables


Type Date Auteur Contenu
Création du message 05-07-2012 11:44:13 johnplayer
Voilà la v2, elle permet un chaînage contrôlé et mais plus de fonctions à disposition.
On créé une box , cette box sera la box maîtresse. Puis on peut ajouter des box enfants, en insérer, en retirer, cacher une partie ou la totalité de la chaîne... Pour détruire la chaîne, il suffit de faire un remove() sur la box maîtresse.



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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#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 d'une chaîne de box
    BoxEssai = new BoxRetractable(recti(10,10,290,110), L"Box retractable 1", mGUI, "../MEDIAS/Systeme/GUI/", mTab1);
    BoxRetractable *BoxSuivante1 = BoxEssai->addBoxSuivante(50, L"Box retractable 2", 10, true);
    BoxRetractable *BoxSuivante2 = BoxSuivante1->addBoxSuivante(100, L"Box taille fixe 1", 10, false);
    BoxRetractable *BoxSuivante3 = BoxSuivante2->addBoxSuivante(200, L"Box retractable 3", 10, true);

    /// insertion d'une box au millieu de la chaîne (note : on pourrait aussi utiliser BoxSuivante2->addBoxSuivante(...); )
    BoxRetractable *BoxSuivante2bis = BoxSuivante2->insertBox(40, L"Box retractable 2 bis", 20, true);

    /// destruction : ne detruire que la première box d'une chaîne
    BoxEssai->remove();
**/

class BoxRetractable : public IGUIElement
{
    public :
        BoxRetractable(rect<s32> rectangle, stringw titre, IGUIEnvironment* environment, stringw pathImage, IGUIElement* parent=0, bool retractable=true, s32 id=-1);
        ~BoxRetractable();
        bool OnEvent(const SEvent& event);

        //! ajoute une box "enfant" (chaînage)
        //! A noter que s'il existe déjà une box "enfant", la nouvelle box sera insérée avant "l'enfant" déjà présent.
        BoxRetractable* addBoxSuivante(u32 hauteurBox, stringw titre, u32 espace=5, bool retractable=true);
        //! renvoie le pointeur sur la box "enfant"
        BoxRetractable* getBoxSuivante();
        //! retire la box suivante de la chaîne sans la brisée
        void deleteSuivant();
        //! retire toutes les boxs suivantes de la chaîne
        void deleteAllSuivant();
        //! insère une box dans la chaîne, elle sera "l'enfant" de la box qui sert à l'insertion
        BoxRetractable* insertBox(u32 hauteurBox, stringw titre, u32 espace=5, bool retractable=true);
        //! renvoie true si la boite est dépliée et false si la boite est en mode compact
        bool isExtend();
        //! se détache de son parent et se détruit
        void remove();
        //! affiche ou cache la chaîne
        void setVisible(bool visible);

    protected :
        //! bascule l'élément en mode compact ou complet suivant la demande
        void setExtend(bool extend);
        //! decale "l'enfant" de cette box suivant Y
        void moveSuivant(s32 decalage);
        //! decale cette box suivant Y (qui elle, décale son "enfant")
        void moveRequest(s32 decalage);

        /// MEMBRES ///
        IGUIEnvironment* mGUI;
        /// Suivant
        BoxRetractable* Suivant; // pointeur vers la BoxRetractable suivante
        s32 mDecalage;
        s32 mTrou;
        /// Instances
        bool mExtend;
        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

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
112 invités en ligne
membre en ligne: -
RSS Feed