/* ========================================================================== * ÆÄ ÀÏ : UINode.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : ±è°¡¶÷ * ÀÛ ¼º ÀÏ : 2006-11-30 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "UIRect.h" #include "UIFontItemKeeper.h" #include "UIManager.h" class cUINodeSkin; class cUIEvent; class cUIImageBase; class cUIRootNode; class cUIContainer; class cUINodeProperty; class cUIManager; typedef tUIRect cUIRect; typedef tUIPos cUIPos; typedef tUISize cUISize; /// ÀÚ¼®±â´É °Å¸® Àû¿ë const int AUTO_MAGNATIC_DIST = 20; /// ¾ÆÀÌÄÜ »çÀÌÁî const int ICON_SIZE = 28; /// UI ³ëµå ŸÀÔ enum eUINodeType { eUINODE_NULL = 0, eUINODE_CONTAINER = (1 << 0), eUINODE_ROOT = (1 << 1) | eUINODE_CONTAINER, eUINODE_WINDOW = (1 << 2) | eUINODE_CONTAINER, eUINODE_BUTTON = (1 << 3), eUINODE_PUSHBUTTON = (1 << 4) | eUINODE_BUTTON, eUINODE_CHECKBOX = (1 << 5), eUINODE_LABEL = (1 << 6), eUINODE_EDITBOX = (1 << 8), eUINODE_LISTBOX = (1 << 9) | eUINODE_WINDOW, eUINODE_SCROLLBAR = (1 << 10) | eUINODE_WINDOW, eUINODE_BARBUTTON = (1 << 11) | eUINODE_BUTTON, eUINODE_COMBOBOX = (1 << 12) | eUINODE_WINDOW, eUINODE_GAUGE = (1 << 13), eUINODE_GAUGETB = (1 << 14), eUINODE_DOUBLEGAUGE = (1 << 15), eUINODE_TEXTBOX = (1 << 16) | eUINODE_WINDOW, eUINODE_MESSAGEBOX = (1 << 17) | eUINODE_WINDOW, eUINODE_TABWINDOW = (1 << 18) | eUINODE_WINDOW, eUINODE_TABBUTTON = (1 << 19) | eUINODE_PUSHBUTTON, eUINODE_SPINBOX = (1 << 20) | eUINODE_WINDOW, eUINODE_ICON = (1 << 21), eUINODE_NUMBEREDIT = (1 << 22) | eUINODE_EDITBOX, eUINODE_RADIOBUTTON = (1 << 23) | eUINODE_BUTTON, eUINODE_MULTIEDITBOX = (1 << 24), eUINODE_OPTIONGAUGE = (1 << 25) | eUINODE_WINDOW, eUINODE_DRAGWINDOW = (1 << 26) | eUINODE_WINDOW, eUINODE_TABSHEET = (1 << 27) | eUINODE_WINDOW, eUINODE_LISTFOLDERBOX = (1 << 28) | eUINODE_WINDOW, eUINODE_FORCE_32BIT = 0x7FFFFFFF }; /// ÅØ½ºÆ® Á¤·Ä enum eText_Align { eALIGN_NONE = 0, eALIGN_LEFT, eALIGN_RIGHT, eALIGN_CENTER, }; /// ±âº» »ö»ó const unsigned long COLOR_BLACK = 0xFF111111; const unsigned long COLOR_WHITE = 0xFFFFFFFF; const unsigned long COLOR_YELLOW = 0xFFFFFC31; const unsigned long COLOR_PINK = 0xFFFF50FF; const unsigned long COLOR_GREEN = 0xFF89F116; const unsigned long COLOR_SKYBLUE = 0xFF00FFEA; const unsigned long COLOR_RED = 0xFFF03719; const unsigned long COLOR_GRAY = 0xFFDCDCDC; const unsigned long COLOR_BLUE = 0xFF00FCFF; const unsigned long COLOR_ORANGE = 0xFFFFA820; const unsigned long COLOR_BRIGHTGREEN = 0xFFFFCF3B; const unsigned long COLOR_DARKGRAY = 0xFF808080; const unsigned long COLOR_BROWN = 0xFF808000; const unsigned long COLOR_DEFAULT = 0xFFE6D8BB; /// ·¹¾îµµ °ü·Ã »ö»ó const unsigned long COLOR_MALL = 0xFFFFCD00; const unsigned long COLOR_EPIC = 0xFFFFA800; const unsigned long COLOR_REGEND = 0xFFD800FF; const unsigned long COLOR_ETC = 0xFF808080; const unsigned long COLOR_UNIQUE = 0xFFFFF600; const unsigned long COLOR_RARE = 0xFF00FFFC; const unsigned long COLOR_MAGIC = 0xFF00FF00; /// äÆÃ »ö»ó const unsigned long COLOR_SYSTEM = 0xFFFACD78; const unsigned long COLOR_PARTY = 0xFF90FF00; const unsigned long COLOR_GUILD = 0xFFFFA300; const unsigned long COLOR_SHOUT = 0xFF6EBDFF; const unsigned long COLOR_TRADE = 0xFFFF7100; const unsigned long COLOR_WHISPER = 0xFFFF564D; const unsigned long COLOR_TIP = 0xFFEEF41E; const unsigned long COLOR_GM = 0xFF32FFC6; const unsigned long COLOR_DICENUM = 0xFFFFFF00; /// ÀÚ¼®±â´É ŸÀÔ enum eSnap_Type { eSNAP_NONE, eSNAP_LEFT, eSNAP_RIGHT, eSNAP_TOP, eSNAP_BOTTOM, eSNAP_TOP_OUT, /// ¹Ù±ùÂÊ TOP À§Ä¡¿¡ ºÙ´Â°æ¿ì eSNAP_BOTTOM_OUT, eSNAP_RIGHT_OUT, eSNAP_LEFT_OUT, }; /// UI ³ëµå /// UI ³ëµå ¿ÀºêÁ§Æ®µéÀÇ ÃÖ»óÀ§ Ãß»ó ±â¹Ý Ŭ·¡½ºÀÌ´Ù. class cUINode { friend class cUIManager; friend class cUIContainer; friend class cImeBase; public: cUINode( eUINodeType type = eUINODE_NULL ); virtual ~cUINode(); ///ÇÁ·ÎÆÛƼ¸¦ ÀÌ¿ëÇÑ »ý¼º ( ÇÁ·ÎÆÛƼ À̸§À» Á÷Á¢ÁØ´Ù - °¢ À©µµ¿ìÀÇ ÃÖ°í ºÎ¸ð»ý¼º½Ã¿¡¸¸ »ç¿ë ) virtual bool CreateByPropertyName( const cString& propertyName, cUIContainer* pparent ){ return true; } ///ÇÁ·ÎÆÛƼ¸¦ ÀÌ¿ëÇÑ »ý¼º ( ÀÚ½ÄÀ©µµ¿ì¸¦ »ý¼ºÇÒ¶§ »ç¿ë ) virtual bool CreateByProperty( cUINodeProperty* pProperty, cUIContainer* pparent ){ return true; } /// ÇÁ·ÎÆÛƼ, id °ª À¸·Î »ý¼º virtual bool CreateByPropertyId( cUINodeProperty* pProperty, cUIContainer* pparent, unsigned long id ){ return true; } /// ½ºÅ² À̸§À» ÁÖ°í ³ëµå »ý¼º½Ã »ç¿ë virtual bool CreateBySkinName( const cString& skinName, cUIContainer* pparent, unsigned long id ){ return true; } /// ¼Ò¸ê virtual void Destroy(){} /// °»½Å virtual void UpdateRect(){} /// ½ºÅ²À» Àû¿ë virtual bool ApplySkin(){ return true; } /// ÇØ»óµµ º¯°æ¿¡ µû¸¥ °´Ã¼ÀÇ ½ºÅ² ÀçÀû¿ë virtual void UpdateSkin(){} /// »ö»ó°ª void SetColor( float r, float g, float b, float a ){} void SetColor( const NiColorA& color ){} /// ¾ËÆÄ°ª void SetAlpha( float a ){} float GetAlpha(){ return 0; } /// À̺¥Æ®¸¦ ó¸® virtual bool HandleEvent( const cUIEvent& event ){ return true; } /// À̵¿ void Move( const cUIPos& value ){} /// »ó´ë ¿µ¿ª virtual void SetRelativeRect( const cUIRect& rect ){} virtual void SetRelativePos( const cUIPos& pos ){} void SetRelativeSize( const cUISize& size ){} const cUIRect& GetRelativeRect() const{} /// Àý´ë ¿µ¿ª virtual bool ContainPoint( const cUIPos& pos ) const{ return true; } const cUIRect& GetAbsoluteRect() const{} /// °¡½Ã ¿©ºÎ ( ÀÚ±âÀڽŸ¸ ¼³Á¤ ) virtual void Show(){} virtual void Hide(){} bool IsVisible() const{}; /// Ȱ¼ºÈ­ ¿©ºÎ ( ÀÚ±âÀڽŸ¸ ¼³Á¤ ) virtual void SetEnabled( bool enabled ){} bool IsEnabled() const{} /// ´­¸² ¿©ºÎ ( ÀÚ±âÀڽŸ¸ ¼³Á¤ ) virtual void SetPress( bool press ){} bool IsPress() const{} /// ¸¶¿ì½º °»½Å void CheckEventNode(){} /// ¸¶¿ì½º ĸó void SetCapture(){} void ReleaseCapture(){} /// Æ÷Ä¿½º virtual void SetFocus(){} void ReleaseFocus(){} /// È£¹ö void ReleaseHover(){} /// ĸÃÄ, È£¹ö ³ëµå Ŭ¸®¾î void ReleaseEventNode(){} /// ŸÀÔ eUINodeType GetType() const; /// ½ºÅ² À̸§ const cString& GetSkinName() const{} /// ºÎ¸ð cUIContainer* GetParent(){ return NULL; } /// ¾ÆÀ̵ð int GetID() const{ return 0; } /// °°Àº Á¾·ùÀÎÁö ¿©ºÎ¸¦ ¸®ÅÏ bool IsKindof( eUINodeType type ) const{ return true; } /// À̺¥Æ® Àü´Þ static bool SendEvent( cUINode* eventHandler, eUIEventType eventType, cUINode* caller, unsigned int id, bool shift = false ){ return true; } /// ¶ô °É±â virtual void NetLock( int lockTry = 0 ){} virtual void NetUnLock( int lockTry = 0 ){} virtual bool IsNetLock() { return mNetLock; } /// ¸ðµç ui ¶ô Ç®±â virtual void NetUnLockAllUI(){} inline void SetExceptEvent( bool set ) { mExceptionEvent = set; } inline bool IsExceptEvent() { return mExceptionEvent; } /// ÇØ´ç Ç÷¡±×°¡ ¼­ÀÖÀ¸¸é, ¸ðµç À̺¥Æ® ó¸®ÈÄ, ¸¶¿ì½º·Î µÇµ¹¸°´Ù inline void SetLClickNotifyStage( bool set ) { mLClickNotifyStage = set; } inline bool IsLClickNotifyStage() { return mLClickNotifyStage; } inline void EnableProcess( bool set ) { mProcessEnable = set; } inline bool IsEnableProcess() { return mProcessEnable; } inline virtual void EnableBoldText( bool set ) { mUseBoldText = set; } inline void SetBackupVisible( bool set ) { mBackupVisible = set; } inline bool IsBackupVisible() { return mBackupVisible; } protected: /// °¢³ëµåÀÇ ³ª¸ÓÁö ºÎºÐµéÀ» ¼¼ÆÃ bool SetupNode( cUIContainer* pparent ); /// ½ºÅ²À» ¼³Á¤ virtual bool SetSkin( const cUINodeSkin* pskin ){ return true; } /// ÀûÇÕ ¿©ºÎ virtual bool IsValid() const { return true; } /// ÄÁÅ×ÀÌ³Ê °¡ ¿òÁ÷À϶§ ÀÚ¼®±â´É ÁÖ±â void ApplySnap(); /// void SetVisible( bool visible ); /// È­¸é Å©±â static unsigned int GetScreenWidth(){ return 0; } static unsigned int GetScreenHeight(){ return 0; } /// ·çÆ® ³ëµå static cUIRootNode* GetRoot(); /// ¸¶¿ì½º ĸó ³ëµå static cUINode* GetCapture(); /// Æ÷Ä¿½º ³ëµå static cUINode* GetFocus(); /// È£¹ö ³ëµå static cUINode* GetHover(); public: virtual void OnProcess( unsigned long deltaTime, unsigned long accumTime ) = 0; virtual void OnRender( cUIFontItemKeeper* pKeeper ) = 0; protected: virtual bool OnCreate( cUINodeProperty* pproperty = 0 ) { return true; } virtual void OnDestroy() {} virtual void OnCaptureLost() {} virtual void OnFocusLost() {} virtual void OnMouseMove( const cUIPos& pos ) {} virtual void OnMouseWheel( const cUIPos& pos, int wheel ) {} virtual void OnLButtonDown( const cUIPos& pos, bool ctrl, bool alt, bool shift ){} virtual void OnRButtonDown( const cUIPos& pos, bool ctrl, bool alt, bool shift ){} virtual void OnLButtonUp( const cUIPos& pos ) {} virtual void OnRButtonUp( const cUIPos& pos ) {} virtual void OnLButtonDoubleClick( const cUIPos& pos ) {} virtual void OnMouseHovered( const cUIPos& pos ){} virtual void OnMouseLeft( const cUIPos& pos ){} /// IME Messages virtual void OnChar( unsigned int wparam ) {} virtual void OnImeNotify( unsigned int wparam ) {} virtual void OnImeComposition( unsigned int wparam, unsigned int lparam ) {} protected: /// ŸÀÔ eUINodeType mType; /// ºÎ¸ð cUIContainer* mpParent; /// ½ºÅ² À̸§ cString mSkinName; /// ¾ÆÀ̵ð unsigned long mID; unsigned long mFrontID; /// unsigned long mHoverTipIndex; /// À̹ÌÁö cUIImageBase* mpImage; /// »ó´ë ¿µ¿ª ( ºÎ¸ðÀÇ ´ëÇÑ »ó´ë ¿µ¿ª ) cUIRect mRelativeRect; /// Àý´ë ¿µ¿ª cUIRect mAbsoluteRect; /// ¹«ºê ¿©ºÎ bool mMove; /// °¡½Ã ¿©ºÎ bool mVisible; /// Ȱ¼ºÈ­ ¿©ºÎ bool mEnabled; /// ´­¸² ¿©ºÎ bool mPressed; /// ¾ËÆÄ°ª float mAlpha; /// ÀÚ¼® Àû¿ë ŸÀÔ eSnap_Type mSnapType; /// ÇØ»óµµ º¯°æÀüÀÇ ÇØ»óµµ ÀúÀå unsigned int mOldScreenWidth; unsigned int mOldScreenHeight; /// ½ºÅ©¸³Æ®ÀÇ ±âº» ÇØ»óµµ ( DEFAULT_SCREENWIDTH * DEFAULT_SCREENHEIGHT ) unsigned int mDefaultWidth; unsigned int mDefaultHeight; /// ±âº» »ö»ó ( ÅØ½ºÆ®·ù ) unsigned long mDefaultColor; /// ³×Æ®¿öÅ© °ü·Ã ¶ô bool mNetLock; int mLockTry; /// À̺¥Æ®Ã³¸®¿¡¼­ Á¦¿ÜÇÑ´Ù. bool mExceptionEvent; /// LButton Ŭ¸¯ À̺¥Æ®¸¦ ½ºÅ×ÀÌÁö¿¡ Àü´ÞÇÑ´Ù. bool mLClickNotifyStage; bool mProcessEnable; bool mUseBoldText; /// npc ´ëÈ­»óÅ¿¡ µé¾î°¡±âÀü visible»óÅ ¹é¾÷ ¿©ºÎ bool mBackupVisible; }; inline eUINodeType cUINode::GetType() const { return mType; }