summaryrefslogtreecommitdiffstats
path: root/src/ui/control.h
blob: 635ae12a984a90ce4c187acdd1f760e7d37b576a (plain)
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// * This file is part of the COLOBOT source code;
// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch
// * Copyright (C) 2012 Polish Portal of Colobot (PPC)
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program. If not, see  http://www.gnu.org/licenses/.

// control.h

#pragma once

#include <string>

#include "common/event.h"
#include "common/iman.h"
#include "common/misc.h"
#include "common/restext.h"

#include "graphics/core/device.h"
#include "graphics/engine/engine.h"
#include "graphics/engine/particle.h"
#include "graphics/engine/text.h"

#include "object/robotmain.h"

#include "sound/sound.h"



namespace Ui {

    enum ControlState
    {
        STATE_ENABLE    = (1<<0),   // active
        STATE_CHECK     = (1<<1),   // pressed
        STATE_HILIGHT   = (1<<2),   // overflown by mouse
        STATE_PRESS     = (1<<3),   // pressed by mouse
        STATE_VISIBLE   = (1<<4),   // visible
        STATE_DEAD      = (1<<5),   // inaccessible (x)
        STATE_DEFAULT   = (1<<6),   // actuated by RETURN
        STATE_OKAY      = (1<<7),   // green point at the bottom right
        STATE_SHADOW    = (1<<8),   // shadow
        STATE_GLINT     = (1<<9),   // dynamic reflection
        STATE_CARD      = (1<<10),  // tab
        STATE_EXTEND    = (1<<11),  // extended mode
        STATE_SIMPLY    = (1<<12),  // undecorated
        STATE_FRAME     = (1<<13),  // framework highlighting
        STATE_WARNING   = (1<<14),  // framework hatched yellow / black
        STATE_VALUE     = (1<<15),  // displays the value
        STATE_RUN       = (1<<16)   // running program
    };



    class CControl
    {
    public:
        CControl();
        virtual ~CControl();

        virtual bool          Create(Math::Point pos, Math::Point dim, int icon, EventType eventType);

        virtual bool          EventProcess(const Event &event);

        virtual void          SetPos(Math::Point pos);
        virtual Math::Point   GetPos();
        virtual void          SetDim(Math::Point dim);
        virtual Math::Point   GetDim();
        virtual bool          SetState(int state, bool bState);
        virtual bool          SetState(int state);
        virtual bool          ClearState(int state);
        virtual bool          TestState(int state);
        virtual int           GetState();
        virtual void          SetIcon(int icon);
        virtual int           GetIcon();
        virtual void          SetName(std::string name, bool bTooltip=true);
        virtual std::string   GetName();
        virtual void          SetTextAlign(Gfx::TextAlign mode);
        virtual int           GetTextAlign();
        virtual void          SetFontSize(float size);
        virtual float         GetFontSize();
        virtual void          SetFontStretch(float stretch);
        virtual float         GetFontStretch();
        virtual void          SetFontType(Gfx::FontType font);
        virtual Gfx::FontType GetFontType();
        virtual bool          SetTooltip(std::string name);
        virtual bool          GetTooltip(Math::Point pos, std::string &name);
        virtual void          SetFocus(bool bFocus);
        virtual bool          GetFocus();

        virtual EventType     GetEventType();

        virtual void          Draw();

    protected:
                void    GlintDelete();
                void    GlintCreate(Math::Point ref, bool bLeft=true, bool bUp=true);
                void    GlintFrame(const Event &event);
                void    DrawPart(int icon, float zoom, float ex);
                void    DrawIcon(Math::Point pos, Math::Point dim, Math::Point uv1, Math::Point uv2, float ex=0.0f);
                void    DrawIcon(Math::Point pos, Math::Point dim, Math::Point uv1, Math::Point uv2, Math::Point corner, float ex);
                void    DrawWarning(Math::Point pos, Math::Point dim);
                void    DrawShadow(Math::Point pos, Math::Point dim, float deep=1.0f);
       virtual bool    Detect(Math::Point pos);

    protected:
        CInstanceManager* m_iMan;
        Gfx::CEngine*     m_engine;
        Gfx::CParticle*   m_particle;
        CEventQueue*      m_event;
        CRobotMain*       m_main;
        CSoundInterface*  m_sound;

        Math::Point       m_pos;          // corner upper / left
        Math::Point       m_dim;          // dimensions
        int               m_icon;
        EventType         m_eventType;     // message to send when clicking
        int               m_state;        // states (STATE_ *)
        float             m_fontSize;     // size of the button name
        float             m_fontStretch;      // stretch of the font
        Gfx::FontType     m_fontType;     // type of font
        Gfx::TextAlign    m_textAlign;    //type of alignment //comes in the place of m_justif
    //    int           m_justif;       // type of justification (-1,0,1)
        std::string       m_name;        // name of the button
        std::string       m_tooltip;     // name of tooltip
        bool              m_bFocus;
        bool              m_bCapture;

        bool              m_bGlint;
        Math::Point       m_glintCorner1;
        Math::Point       m_glintCorner2;
        float             m_glintProgress;
        Math::Point       m_glintMouse;
    };

}