Files
Leviathan/Client/Game/engine/Ui/KUIGenWnd.h
T
2026-06-01 12:46:52 +02:00

190 lines
5.1 KiB
C++

#pragma once
#include "KUIWnd.h"
class KUIControl;
class KUIControlSimpleButton;
class KUIControlButton;
class KUIControlStatic;
class KUIControlTitleBar;
class KUIControlStatusBar;
class KUITipControl;
namespace
{
enum KUIGENWND_ANIMATION
{
GENWND_TITLE = 0,
GENWND_CLOSE,
GENWND_MINIMIZE,
GENWND_RESIZE,
GENWND_STATUSBAR,
GENWND_FRAME,
GENWND_TOPFRAME,
GENWND_BACKGROUND,
GENWND_STATUSBAR_BTN,
TOTAL_GENWND_ANINAME,
};
}
class KUIDragAndDropNormalIconRenderer;
class KUIGenWnd : public KUIWnd
{
public:
KUIGenWnd();
virtual ~KUIGenWnd();
virtual void Create(KUIWND_CREATE_ARG& CREATE_ARG);
virtual void Render( KViewportObject *pViewport, bool isFront = false );
//#ifdef _KUI_INVALIDATION
// virtual void RenderPopup( KViewportObject *pViewport, bool isFront = false );
// virtual void RenderToolTip( KViewportObject *pViewport, bool isFront = false );
//#endif
virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam );
virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y);
virtual DWORD OnKeyMessage(DWORD dwMessage, DWORD dwKeyCode);
virtual void *Perform( KID id, KArg& msg );
virtual void OnSizeChangeNofity(const KRect& rcRect);
virtual void OnParentSizeChangeNotify(const KRect& rcNewRect,int nXMove, int nYMove,int nResizeStyle);
virtual void OnPosChangeNofity(int nLeft, int Top);
virtual void OnParentPosChangeNotify(int XOffset, int YOffset);
virtual void OnClipChangeNotify( const KRect& rcClipRect);
virtual void OnParentClipChangeNotify(const KRect& rcClipRect);
virtual void OnAlphaChangeNotify(float fAlpha);
virtual void OnChangeCaptionNotify();
#ifdef _KUI_INVALIDATION
virtual void OnShowNotify( bool bShowFlag );
virtual void ActivateImageCache( bool bActive );
virtual void OnDeviceLost();
#endif
bool IsMoving() { return m_bMoving; }
void SetMoving(bool b = true) { m_bMoving = b; }
// MJ 2004/09/15
void Create(KStream& stream, KUIWndManager* pManager);
void AddButton( const char *_id, const char *_caption, const char* _toolTip = "");
void SetStatusText( const char *text );
void SetResizeUnit(int nXUnit, int nYUnit, KSize minSize, KSize maxSize);
void SetGenWndAniName(LPCSTR lpszAniNAme, int nType);
void SetCustomMovingRect(const KRect& rcMovingRect);
void AddCustomRect(const KRect& rcCustom);
void ChangeCustomRect(const KRect& rcMovingRect, int nIndex);
KRect& GetCustomRect(int nIndex);
int GetCustomRectSize() const;
void RemoveCustomRectAll();
bool RemoveCustomRect(DWORD dwIndex);
void SwapControl( const char* szID, const char* szSwapID );
bool IsAbleMoveWin() { return m_bWinMove; }
static void AbleMoveWin( bool bWinMove ) { m_bWinMove = bWinMove; }
enum GENWND_DROP_STATE
{
STATE_NORMAL = 0,
STATE_CAN_DROP,
STATE_CANNOT_DROP,
TOTAL_STATE,
};
protected:
KRect _calculateCorrectionRect(const KRect& rcRect);
const KRect& _calculateChildRect(const KRect & rcWindowRect);
void _refreshStatusBar();
void _reArrangeFrame();
void _reArrangeBackground();
void _makeSpriteFrame();
void _makeBackgroundFrame();
void _makeTopFrame();
void _updateTopFrameRect();
#ifdef _KUI_INVALIDATION
// { [sonador]
void AddPopupControl( KUIControl* pControl );
void RemovePopupControl( KUIControl* pControl );
void RemoveAllPopupControl();
void _render( KViewportObject* pViewport, bool isFront );
void _renderPopupControl( KViewportObject *pViewport, bool isFront = false );
void _renderToolTip( KViewportObject *pViewport, bool isFront );
bool _initImageCache();
void _releaseImageCache();
bool _prepareImageCache( bool isFront );
bool _isTopWindow() const { return GetParent() == 0; }
// }
#endif
protected:
KUIControlSimpleButton* m_pMinimize;
KUIControlSimpleButton* m_pClose;
KUIControlSimpleButton* m_pResize;
KUIControlTitleBar* m_pTitleBar;
KUIControlStatusBar* m_pStatusBar;
KRect m_rcTopFrame;
KRect m_rcMinimize;
KRect m_rcClose;
KRect m_rcTitleBar;
KRect m_rcStatusBar;
KRect m_rcResize;
std::string m_sTotalAniName[TOTAL_GENWND_ANINAME];
// minimize, Close, Resize, Titlebar, StatusBar 등
std::vector<KUIControl*> m_vtGenWndControls;
std::vector<KUIControlButton*> m_VtButtons;
#ifdef _KUI_INVALIDATION
std::vector<KUIControl*> m_vtPopupControl;
#endif
KRect m_rcChildRect;
std::string m_sStatusBarCaption;
std::string m_sFrameAniName;
int m_nResizeXUnit;
int m_nResizeYUnit;
KSize m_minSize;
KSize m_maxSize;
bool m_bResizing;
bool m_bMoving;
KPoint m_ptMovingOffset;
std::vector<KRect> m_vtCustomRect;
KRect m_rcPieceArea[9];
int m_nPieceCount;
KSpritePrimitive* m_pSpriteList;
KRect* m_pBackgroundArea;
int m_nBackgroundCount;
KSpritePrimitive* m_pBackgroundList;
KSpritePrimitive* m_pTopFrame;
KUIDragAndDropNormalIconRenderer* m_pDragAndDropIcon;
// { [sonador]
#ifdef _KUI_INVALIDATION
K3DRenderTargetSPtr m_spImageCache;
KSpritePrimitive* m_pImageCachePrimitive;
bool m_bActivateImageCache;
bool m_bNeedToCheckCached;
#endif
// }
bool m_bRightDown;
static bool m_bWinMove;
};