This repository has been archived on 2025-03-20. You can view files and clone it, but cannot push or open issues or pull requests.
The-Powder-Toy/src/gui/interface/Window.h
Tamás Bálint Misius 4f0c365e05
Preprocessor purge round 19: Split and minimize usage of Config.h
Also mostly banish it from other headers, and shuffle standard header includes to minimize cross-contamination between headers.
2023-01-27 09:27:32 +01:00

125 lines
3.5 KiB
C++

#pragma once
#include "common/String.h"
#include "gui/interface/Point.h"
#include <vector>
class Graphics;
namespace ui
{
enum ChromeStyle
{
None, Title, Resizable
};
class Engine;
class Component;
class Button;
/* class Window
*
* A UI state. Contains all components.
*/
class Window
{
public:
Point Position;
Point Size;
Window(Point _position, Point _size);
virtual ~Window();
void SetOkayButton(ui::Button * button) { okayButton = button; }
void SetCancelButton(ui::Button * button) { cancelButton = button; }
bool AllowExclusiveDrawing; //false will not call draw on objects outside of bounds
bool DoesTextInput;
// Add Component to window
void AddComponent(Component* c);
// Get the number of components this window has.
unsigned GetComponentCount();
// Get component by index. (See GetComponentCount())
Component* GetComponent(unsigned idx);
// Remove a component from window. NOTE: This DOES NOT free component from memory.
void RemoveComponent(Component* c);
// Remove a component from window. NOTE: This WILL free component from memory.
void RemoveComponent(unsigned idx);
virtual void ToolTip(ui::Point senderPosition, String toolTip) {}
virtual void DoInitialized();
virtual void DoExit();
virtual void DoTick(float dt);
virtual void DoDraw();
virtual void DoFocus();
virtual void DoBlur();
virtual void DoFileDrop(ByteString filename);
virtual void DoMouseMove(int x, int y, int dx, int dy);
virtual void DoMouseDown(int x, int y, unsigned button);
virtual void DoMouseUp(int x, int y, unsigned button);
virtual void DoMouseWheel(int x, int y, int d);
virtual void DoKeyPress(int key, int scan, bool repeat, bool shift, bool ctrl, bool alt);
virtual void DoKeyRelease(int key, int scan, bool repeat, bool shift, bool ctrl, bool alt);
virtual void DoTextInput(String text);
virtual void DoTextEditing(String text);
// Sets halt and destroy, this causes the Windows to stop sending events and remove itself.
void SelfDestruct();
void Halt();
bool IsFocused(const Component* c) const;
void FocusComponent(Component* c);
void* UserData;
enum OkayMethod { Enter, OkayButton };
enum ExitMethod { MouseOutside, Escape, ExitButton };
void MakeActiveWindow();
bool CloseActiveWindow();
Graphics * GetGraphics();
protected:
ui::Button * okayButton;
ui::Button * cancelButton;
virtual void OnInitialized() {}
virtual void OnExit() {}
virtual void OnTick(float dt) {}
virtual void OnDraw() {}
virtual void OnFocus() {}
virtual void OnBlur() {}
virtual void OnFileDrop(ByteString filename) {}
virtual void OnTryExit(ExitMethod);
virtual void OnTryOkay(OkayMethod);
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, int scan, bool repeat, bool shift, bool ctrl, bool alt) {}
virtual void OnKeyRelease(int key, int scan, bool repeat, bool shift, bool ctrl, bool alt) {}
virtual void OnTextInput(String text) {}
virtual void OnTextEditing(String text) {}
std::vector<Component*> Components;
Component *focusedComponent_;
Component *hoverComponent;
ChromeStyle chrome;
bool debugMode;
//These controls allow a component to call the destruction of the Window inside an event (called by the Window)
void finalise();
bool halt;
bool destruct;
bool stop;
};
}