summaryrefslogtreecommitdiffstats
path: root/src/ui/interface.h
blob: 7123c05f037a2bc6c13d9be48dac3c6e08169143 (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
// * 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/.

// interface.h

#pragma once

#include <string>

#include <common/event.h>
#include <common/struct.h>
#include <common/misc.h>
#include <common/iman.h>

#include <math/point.h>

#include <graphics/engine/camera.h>
#include <graphics/engine/engine.h>

#include <ui/control.h>
#include <ui/button.h>
#include <ui/color.h>
#include <ui/check.h>
#include <ui/key.h>
#include <ui/group.h>
#include <ui/image.h>
#include <ui/label.h>
#include <ui/edit.h>
#include <ui/editvalue.h>
#include <ui/scroll.h>
#include <ui/slider.h>
#include <ui/list.h>
#include <ui/shortcut.h>
#include <ui/compass.h>
#include <ui/target.h>
#include <ui/map.h>
#include <ui/window.h>

namespace Ui {

const int MAXCONTROL = 100;


class CInterface
{
    public:
        CInterface();
        ~CInterface();

        bool        EventProcess(const Event &event);
        bool        GetTooltip(Math::Point pos, std::string &name);

        void        Flush();
        CButton*    CreateButton(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CColor*     CreateColor(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CCheck*     CreateCheck(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CKey*       CreateKey(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CGroup*     CreateGroup(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CImage*     CreateImage(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CEdit*      CreateEdit(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CEditValue* CreateEditValue(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CScroll*    CreateScroll(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CSlider*    CreateSlider(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CShortcut*  CreateShortcut(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CCompass*   CreateCompass(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CTarget*    CreateTarget(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CMap*       CreateMap(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);

        CWindow*    CreateWindows(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);
        CList*      CreateList(Math::Point pos, Math::Point dim, int icon, EventType eventMsg, float expand=1.2f);
        CLabel*     CreateLabel(Math::Point pos, Math::Point dim, int icon, EventType eventMsg, std::string name);

        bool        DeleteControl(EventType eventMsg);
        CControl*   SearchControl(EventType eventMsg);

        void        Draw();

    protected:
        int GetNextFreeControl();
        template <typename T> inline T* CreateControl(Math::Point pos, Math::Point dim, int icon, EventType eventMsg);

        CInstanceManager* m_iMan;
        CEventQueue* m_event;
        Gfx::CEngine* m_engine;
        Gfx::CCamera* m_camera;

        CControl* m_table[MAXCONTROL];
};


}