mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-05-31 02:26:29 +03:00
Fixed Android build. ecode: Added Help -> Check for Updates. Added "Rosé Pine" terminal color scheme.
304 lines
6.6 KiB
C++
304 lines
6.6 KiB
C++
#ifndef EE_UICUIWINDOW_HPP
|
|
#define EE_UICUIWINDOW_HPP
|
|
|
|
#include <eepp/ui/keyboardshortcut.hpp>
|
|
#include <eepp/ui/uipushbutton.hpp>
|
|
#include <eepp/ui/uitextview.hpp>
|
|
#include <eepp/ui/uiwidget.hpp>
|
|
|
|
namespace EE { namespace Graphics {
|
|
class FrameBuffer;
|
|
}} // namespace EE::Graphics
|
|
|
|
namespace EE { namespace UI {
|
|
|
|
class UISceneNode;
|
|
|
|
enum UIWindowFlags {
|
|
UI_WIN_NO_DECORATION = ( 1 << 0 ),
|
|
UI_WIN_CLOSE_BUTTON = ( 1 << 1 ),
|
|
UI_WIN_MINIMIZE_BUTTON = ( 1 << 2 ),
|
|
UI_WIN_MAXIMIZE_BUTTON = ( 1 << 3 ),
|
|
UI_WIN_USE_DEFAULT_BUTTONS_ACTIONS = ( 1 << 4 ),
|
|
UI_WIN_RESIZEABLE = ( 1 << 5 ),
|
|
UI_WIN_DRAGABLE_CONTAINER = ( 1 << 6 ),
|
|
UI_WIN_SHARE_ALPHA_WITH_CHILDS = ( 1 << 7 ),
|
|
UI_WIN_MODAL = ( 1 << 8 ),
|
|
UI_WIN_SHADOW = ( 1 << 9 ),
|
|
UI_WIN_FRAME_BUFFER = ( 1 << 10 ),
|
|
UI_WIN_COLOR_BUFFER = ( 1 << 11 )
|
|
};
|
|
|
|
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;
|
|
|
|
class EE_API UIWindow : public UIWidget {
|
|
public:
|
|
class StyleConfig {
|
|
public:
|
|
StyleConfig() {}
|
|
|
|
StyleConfig( Uint32 winFlags ) : WinFlags( winFlags ) {}
|
|
|
|
Uint32 WinFlags = UI_WIN_DEFAULT_FLAGS;
|
|
Sizei TitlebarSize;
|
|
Sizei BorderSize;
|
|
Sizef MinWindowSize;
|
|
Vector2i ButtonsOffset;
|
|
Uint32 ButtonsSeparation = 4;
|
|
Int32 MinCornerDistance = 24;
|
|
Uint8 BaseAlpha = 255;
|
|
bool TitlebarAutoSize = true;
|
|
bool BorderAutoSize = true;
|
|
};
|
|
|
|
enum WindowBaseContainerType { SIMPLE_LAYOUT, LINEAR_LAYOUT, RELATIVE_LAYOUT };
|
|
|
|
static UIWindow* NewOpt( WindowBaseContainerType type,
|
|
const StyleConfig& windowStyleConfig = StyleConfig() );
|
|
|
|
static UIWindow* New();
|
|
|
|
explicit UIWindow( WindowBaseContainerType type, const StyleConfig& windowStyleConfig );
|
|
|
|
explicit UIWindow( WindowBaseContainerType type = SIMPLE_LAYOUT );
|
|
|
|
virtual ~UIWindow();
|
|
|
|
virtual Uint32 getType() const;
|
|
|
|
virtual bool isType( const Uint32& type ) const;
|
|
|
|
virtual UINode* setSize( const Sizef& size );
|
|
|
|
UINode* setSize( const Float& Width, const Float& Height );
|
|
|
|
UIWindow* setSizeWithDecoration( const Float& Width, const Float& Height );
|
|
|
|
UIWindow* setSizeWithDecoration( const Sizef& size );
|
|
|
|
const Sizef& getSize() const;
|
|
|
|
virtual void setTheme( UITheme* Theme );
|
|
|
|
virtual Uint32 onMessage( const NodeMessage* Msg );
|
|
|
|
UIWidget* getContainer() const;
|
|
|
|
UINode* getButtonClose() const;
|
|
|
|
UINode* getButtonMaximize() const;
|
|
|
|
UINode* getButtonMinimize() const;
|
|
|
|
virtual bool show();
|
|
|
|
virtual bool hide();
|
|
|
|
void showWhenReady();
|
|
|
|
virtual void scheduledUpdate( const Time& time );
|
|
|
|
virtual void closeWindow();
|
|
|
|
virtual void close();
|
|
|
|
void setWindowOpacity( const Uint8& alpha );
|
|
|
|
const Uint8& getBaseAlpha() const;
|
|
|
|
void setTitle( const String& Text );
|
|
|
|
String getTitle() const;
|
|
|
|
UITextView* getTitleTextBox() const;
|
|
|
|
bool isModal();
|
|
|
|
UIWidget* getModalWidget() const;
|
|
|
|
void maximize();
|
|
|
|
bool isMaximizable();
|
|
|
|
bool isResizeable();
|
|
|
|
Uint32 getWinFlags() const;
|
|
|
|
UIWindow* setWindowFlags( const Uint32& winFlags );
|
|
|
|
const StyleConfig& getStyleConfig() const;
|
|
|
|
UIWindow* setStyleConfig( const StyleConfig& styleConfig );
|
|
|
|
UIWindow* setMinWindowSize( Sizef size );
|
|
|
|
UIWindow* setMinWindowSize( const Float& width, const Float& height );
|
|
|
|
const Sizef& getMinWindowSize();
|
|
|
|
bool ownsFrameBuffer();
|
|
|
|
virtual void loadFromXmlNode( const pugi::xml_node& node );
|
|
|
|
virtual bool applyProperty( const StyleSheetProperty& attribute );
|
|
|
|
virtual void nodeDraw();
|
|
|
|
void invalidate( Node* invalidator );
|
|
|
|
bool invalidated();
|
|
|
|
FrameBuffer* getFrameBuffer() const;
|
|
|
|
virtual bool isDrawInvalidator() const;
|
|
|
|
virtual std::string getPropertyString( const PropertyDefinition* propertyDef,
|
|
const Uint32& propertyIndex = 0 ) const;
|
|
|
|
virtual std::vector<PropertyId> getPropertiesImplemented() const;
|
|
|
|
std::string getWindowFlagsString() const;
|
|
|
|
Sizef getMinWindowSizeWithDecoration();
|
|
|
|
Sizef getSizeWithoutDecoration();
|
|
|
|
Sizef getMinWindowTitleSizeRequired();
|
|
|
|
typedef std::function<void()> KeyBindingCommand;
|
|
|
|
KeyBindings& getKeyBindings();
|
|
|
|
void setKeyBindings( const KeyBindings& keyBindings );
|
|
|
|
void addKeyBindingString( const std::string& shortcut, const std::string& command );
|
|
|
|
void addKeyBinding( const KeyBindings::Shortcut& shortcut, const std::string& command );
|
|
|
|
void replaceKeyBindingString( const std::string& shortcut, const std::string& command );
|
|
|
|
void replaceKeyBinding( const KeyBindings::Shortcut& shortcut, const std::string& command );
|
|
|
|
void addKeyBindsString( const std::map<std::string, std::string>& binds );
|
|
|
|
void addKeyBinds( const std::map<KeyBindings::Shortcut, std::string>& binds );
|
|
|
|
void setKeyBindingCommand( const std::string& command, KeyBindingCommand func );
|
|
|
|
void executeKeyBindingCommand( const std::string& command );
|
|
|
|
protected:
|
|
enum UI_RESIZE_TYPE {
|
|
RESIZE_NONE,
|
|
RESIZE_LEFT,
|
|
RESIZE_RIGHT,
|
|
RESIZE_TOP,
|
|
RESIZE_BOTTOM,
|
|
RESIZE_LEFTBOTTOM,
|
|
RESIZE_RIGHTBOTTOM,
|
|
RESIZE_TOPLEFT,
|
|
RESIZE_TOPRIGHT
|
|
};
|
|
|
|
FrameBuffer* mFrameBuffer;
|
|
StyleConfig mStyleConfig;
|
|
UIWidget* mWindowDecoration;
|
|
UIWidget* mBorderLeft;
|
|
UIWidget* mBorderRight;
|
|
UIWidget* mBorderBottom;
|
|
UIWidget* mContainer;
|
|
|
|
UIWidget* mButtonClose;
|
|
UIWidget* mButtonMinimize;
|
|
UIWidget* mButtonMaximize;
|
|
UITextView* mTitle;
|
|
|
|
UIWidget* mModalNode;
|
|
|
|
Vector2f mNonMaxPos;
|
|
Sizef mNonMaxSize;
|
|
UI_RESIZE_TYPE mResizeType;
|
|
Vector2f mResizePos;
|
|
|
|
bool mFrameBufferBound;
|
|
bool mWindowReady{ false };
|
|
bool mShowWhenReady{ false };
|
|
|
|
KeyBindings mKeyBindings;
|
|
std::map<std::string, KeyBindingCommand> mKeyBindingCommands;
|
|
|
|
virtual void onSizeChange();
|
|
|
|
virtual void onAlphaChange();
|
|
|
|
virtual void onChildCountChange( Node* child, const bool& removed );
|
|
|
|
virtual void onPositionChange();
|
|
|
|
virtual Uint32 onKeyDown( const KeyEvent& Event );
|
|
|
|
virtual void matrixSet();
|
|
|
|
virtual void matrixUnset();
|
|
|
|
void fixChildsSize();
|
|
|
|
void doResize( const NodeMessage* Msg );
|
|
|
|
void decideResizeType( Node* node );
|
|
|
|
void tryResize( const UI_RESIZE_TYPE& getType );
|
|
|
|
void endResize();
|
|
|
|
void updateResize();
|
|
|
|
void internalSize( Sizef size );
|
|
|
|
void internalSize( const Float& w, const Float& h );
|
|
|
|
void calcMinWinSize();
|
|
|
|
void fixTitleSize();
|
|
|
|
Uint32 onMouseDoubleClick( const Vector2i& position, const Uint32& flags );
|
|
|
|
void createModalNode();
|
|
|
|
void resizeCursor();
|
|
|
|
void applyMinWinSize();
|
|
|
|
void updateWinFlags();
|
|
|
|
void createFrameBuffer();
|
|
|
|
void drawFrameBuffer();
|
|
|
|
void drawHighlightInvalidation();
|
|
|
|
virtual void drawShadow();
|
|
|
|
virtual void onPaddingChange();
|
|
|
|
virtual void preDraw();
|
|
|
|
virtual void postDraw();
|
|
|
|
Sizei getFrameBufferSize();
|
|
|
|
virtual void onWindowReady();
|
|
|
|
void onContainerPositionChange( const Event* Event );
|
|
|
|
void setupModal();
|
|
|
|
void forcedApplyStyle();
|
|
};
|
|
|
|
}} // namespace EE::UI
|
|
|
|
#endif
|