1 /* 2 * This file is part of the Colobot: Gold Edition source code 3 * Copyright (C) 2001-2020, Daniel Roux, EPSITEC SA & TerranovaTeam 4 * http://epsitec.ch; http://colobot.info; http://github.com/colobot 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 * See the GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see http://gnu.org/licenses 18 */ 19 20 #pragma once 21 22 #include "common/event.h" 23 24 #include "graphics/engine/text.h" 25 26 #include <string> 27 28 class CRobotMain; 29 class CSoundInterface; 30 class CSettings; 31 32 namespace Gfx 33 { 34 class CEngine; 35 class CParticle; 36 } 37 38 39 namespace Ui 40 { 41 42 enum ControlState 43 { 44 STATE_ENABLE = (1<<0), // active 45 STATE_CHECK = (1<<1), // pressed 46 STATE_HILIGHT = (1<<2), // overflown by mouse 47 STATE_PRESS = (1<<3), // pressed by mouse 48 STATE_VISIBLE = (1<<4), // visible 49 STATE_DEAD = (1<<5), // inaccessible (x) 50 STATE_DEFAULT = (1<<6), // actuated by RETURN 51 STATE_OKAY = (1<<7), // green point at the bottom right 52 STATE_SHADOW = (1<<8), // shadow 53 STATE_GLINT = (1<<9), // dynamic reflection 54 STATE_CARD = (1<<10), // tab 55 STATE_EXTEND = (1<<11), // extended mode 56 STATE_SIMPLY = (1<<12), // undecorated 57 STATE_FRAME = (1<<13), // framework highlighting 58 STATE_WARNING = (1<<14), // framework hatched yellow / black 59 STATE_VALUE = (1<<15), // displays the value 60 STATE_RUN = (1<<16), // running program 61 STATE_DAMAGE = (1<<17) // taking damage 62 }; 63 64 65 66 class CControl 67 { 68 public: 69 CControl(); 70 virtual ~CControl(); 71 72 virtual bool Create(Math::Point pos, Math::Point dim, int icon, EventType eventType); 73 74 virtual bool EventProcess(const Event &event); 75 76 virtual void SetPos(Math::Point pos); 77 virtual Math::Point GetPos(); 78 virtual void SetDim(Math::Point dim); 79 virtual Math::Point GetDim(); 80 virtual bool SetState(int state, bool bState); 81 virtual bool SetState(int state); 82 virtual bool ClearState(int state); 83 virtual bool TestState(int state); 84 virtual int GetState(); 85 virtual void SetIcon(int icon); 86 virtual int GetIcon(); 87 virtual void SetName(std::string name, bool bTooltip=true); 88 virtual std::string GetName(); 89 virtual void SetTextAlign(Gfx::TextAlign mode); 90 virtual int GetTextAlign(); 91 virtual void SetFontSize(float size); 92 virtual float GetFontSize(); 93 virtual void SetFontStretch(float stretch); 94 virtual float GetFontStretch(); 95 virtual void SetFontType(Gfx::FontType font); 96 virtual Gfx::FontType GetFontType(); 97 virtual bool SetTooltip(std::string name); 98 virtual bool GetTooltip(Math::Point pos, std::string &name); 99 virtual void SetFocus(CControl* focusControl); 100 virtual bool GetFocus(); 101 102 virtual EventType GetEventType(); 103 104 virtual void Draw(); 105 106 protected: 107 void GlintDelete(); 108 void GlintCreate(Math::Point ref, bool bLeft=true, bool bUp=true); 109 void GlintFrame(const Event &event); 110 void DrawPart(int icon, float zoom, float ex); 111 void DrawIcon(Math::Point pos, Math::Point dim, Math::Point uv1, Math::Point uv2, float ex=0.0f); 112 void DrawIcon(Math::Point pos, Math::Point dim, Math::Point uv1, Math::Point uv2, Math::Point corner, float ex); 113 void DrawWarning(Math::Point pos, Math::Point dim); 114 void DrawShadow(Math::Point pos, Math::Point dim, float deep=1.0f); 115 virtual bool Detect(Math::Point pos); 116 117 std::string GetResourceName(EventType eventType); 118 119 /** 120 * \brief Set texture in m_engine to correct buttonX.png for given icon 121 * \param icon Icon to draw 122 * \return Index inside the selected texture of the icon to draw 123 */ 124 int SetButtonTextureForIcon(int icon); 125 126 protected: 127 Gfx::CEngine* m_engine; 128 Gfx::CParticle* m_particle; 129 CEventQueue* m_event; 130 CRobotMain* m_main; 131 CSoundInterface* m_sound; 132 CSettings* m_settings; 133 134 Math::Point m_pos; // corner upper / left 135 Math::Point m_dim; // dimensions 136 int m_icon; 137 EventType m_eventType; // message to send when clicking 138 int m_state; // states (STATE_ *) 139 float m_fontSize; // size of the button name 140 float m_fontStretch; // stretch of the font 141 Gfx::FontType m_fontType; // type of font 142 Gfx::TextAlign m_textAlign; //type of alignment //comes in the place of m_justif 143 std::string m_name; // name of the button 144 std::string m_tooltip; // name of tooltip 145 bool m_bFocus; 146 bool m_bCapture; 147 148 bool m_bGlint; 149 Math::Point m_glintCorner1; 150 Math::Point m_glintCorner2; 151 float m_glintProgress; 152 Math::Point m_glintMouse; 153 }; 154 155 } // namespace Ui 156