summaryrefslogtreecommitdiff
path: root/includes/interface/State.h
blob: 75e969d8281f098fa536b6b15028ca331812c8db (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
#pragma once

#include <vector>

#include "Engine.h"
#include "Component.h"
#include "Platform.h"

namespace ui
{
	class Engine;
	class Component;
	
	/* class State
	 * 
	 * A UI state. Contains all components.
	 */
	class State
	{
	public:
		State();
		virtual ~State();

		bool AllowExclusiveDrawing; //false will not call draw on objects outside of bounds

		// Add Component to state
		void AddComponent(Component* c);
		
		// Get the number of components this state has.
		unsigned GetComponentCount();
		
		// Get component by index. (See GetComponentCount())
		Component* GetComponent(unsigned idx);
		
		// Remove a component from state. NOTE: This DOES NOT free component from memory.
		void RemoveComponent(Component* c);
		
		// Remove a component from state. NOTE: This WILL free component from memory.
		void RemoveComponent(unsigned idx);
		
		void DoInitialized();
		void DoExit();
		void DoTick(float dt);
		void DoDraw();

		void DoMouseMove(int x, int y, int dx, int dy);
		void DoMouseDown(int x, int y, unsigned button);
		void DoMouseUp(int x, int y, unsigned button);
		void DoMouseWheel(int x, int y, int d);
		void DoKeyPress(int key, bool shift, bool ctrl, bool alt);
		void DoKeyRelease(int key, bool shift, bool ctrl, bool alt);

		bool IsFocused(const Component* c) const;
		void FocusComponent(Component* c);

		void* UserData;

	protected:
		virtual void OnInitialized() {}
		virtual void OnExit() {}
		virtual void OnTick(float dt) {}
		virtual void OnDraw() {}

		virtual void OnMouseMove(int x, int y, int dx, int dy) {}
		virtual void OnMouseDown(int x, int y, unsigned button) {}
		virtual void OnMouseUp(int x, int y, unsigned button) {}
		virtual void OnMouseWheel(int x, int y, int d) {}
		virtual void OnKeyPress(int key, bool shift, bool ctrl, bool alt) {}
		virtual void OnKeyRelease(int key, bool shift, bool ctrl, bool alt) {}

	private:
		std::vector<Component*> Components;
		Component* focusedComponent_;

	};

}