namespace EE::UI

namespace UI {

// namespaces

namespace EE::UI::Abstract;
namespace EE::UI::CSS;
namespace EE::UI::Doc;
namespace EE::UI::Models;
namespace EE::UI::Tools;

// typedefs

typedef std::map<Uint64, std::string> ShortcutMap;
typedef std::pair<Int64, Int64> DocumentLineRange;
typedef std::pair<VisibleIndex, VisibleIndex> DocumentViewLineRange;
typedef std::function<void(const TextRanges&, const Color&, bool)> DrawTextRangesFn;

// enums

enum BorderType;
enum CharacterAlignment;
enum ClipType;
enum ColorSchemePreference;
enum HintDisplay;
enum InnerWidgetOrientation;
enum PositionPolicy;
enum ScrollBarMode;
enum SizePolicy;
enum UIFlag;
enum UINodeType;
enum UIOrientation;
enum UIScaleType;
enum UIWindowFlags;

// structs

struct Border;
struct BorderRadiuseStr;
struct BorderRadiuses;
struct BorderStr;
struct Borders;

// classes

class ContextMenuEvent;
class DocChangedEvent;
class DocEvent;
class DocSyntaxDefEvent;
class KeyBindings;
class TabEvent;
class UIAnchor;
class UIApplication;
class UIBackgroundDrawable;
class UIBorderDrawable;
class UICheckBox;
class UIClip;
class UICodeEditor;
class UICodeEditorPlugin;
class UIComboBox;
class UIConsole;

template <typename T>
class UIDataBind;

class UIDataBindBool;

template <typename... Ts>
class UIDataBindHolder;

template <typename... Ts>
class UIDataBindHolderKV;

class UIDataBindString;
class UIDropDownList;
class UIEventDispatcher;
class UIFileDialog;
class UIFontStyleConfig;
class UIGlyphIcon;
class UIGridLayout;
class UIIcon;
class UIIconTheme;
class UIIconThemeManager;
class UIImage;

template <class TContainer>
class UIItemContainer;

class UILayout;
class UILinearLayout;
class UIListBox;
class UIListBoxItem;
class UIListView;
class UILoader;
class UIMenu;
class UIMenuBar;
class UIMenuCheckBox;
class UIMenuItem;
class UIMenuRadioButton;
class UIMenuSeparator;
class UIMenuSubMenu;
class UIMessageBox;
class UIMultiModelView;
class UINode;
class UINodeDrawable;
class UIPopUpMenu;
class UIProgressBar;
class UIPushButton;
class UIRadioButton;
class UIRelativeLayout;
class UIRoot;
class UISVGIcon;
class UISceneNode;
class UIScrollBar;
class UIScrollView;
class UIScrollableWidget;
class UISelectButton;
class UISkin;
class UISkinState;
class UISlider;
class UISpinBox;
class UISplitter;
class UISprite;
class UIStackLayout;
class UIStackWidget;
class UIState;
class UIStyle;
class UITab;
class UITabWidget;
class UITableCell;
class UITableHeaderColumn;
class UITableRow;
class UITableView;
class UITextEdit;
class UITextInput;
class UITextInputPassword;
class UITextView;
class UITextureRegion;
class UITheme;
class UIThemeManager;
class UITooltip;
class UITouchDraggableWidget;
class UITreeView;
class UITreeViewCell;
class UIViewPager;
class UIWidget;
class UIWidgetCreator;
class UIWidgetTable;
class UIWidgetTableRow;
class UIWindow;
class UndoCommand;
class UndoStack;
class WidgetCommandExecuter;

// global variables

static const Uint32 UI_NODE_DEFAULT_ALIGN = UI_HALIGN_LEFT | UI_VALIGN_CENTER;
static const Uint32 UI_NODE_ALIGN_CENTER = UI_HALIGN_CENTER | UI_VALIGN_CENTER;
static const Uint32 UI_NODE_DEFAULT_ANCHOR = UI_ANCHOR_LEFT | UI_ANCHOR_TOP;
static const Uint32 UI_NODE_DEFAULT_DRAG = UI_DRAG_VERTICAL | UI_DRAG_HORIZONTAL;
static const Uint32 UI_NODE_DEFAULT_FLAGS =    UI_NODE_DEFAULT_ANCHOR | UI_NODE_DEFAULT_ALIGN | UI_NODE_DEFAULT_DRAG;
static const Uint32 UI_NODE_DEFAULT_FLAGS_CENTERED =   UI_ANCHOR_LEFT | UI_ANCHOR_TOP | UI_HALIGN_CENTER | UI_VALIGN_CENTER;
static const Uint32 UI_WIN_DEFAULT_FLAGS = UI_WIN_CLOSE_BUTTON |                                          UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS | UI_WIN_RESIZEABLE |                                            UI_WIN_SHARE_ALPHA_WITH_CHILDS;

} // namespace UI