nim_duilib/duilib/Core/Placeholder.h

346 lines
6.4 KiB
C
Raw Normal View History

2019-04-19 17:19:57 +08:00
#ifndef UI_CORE_PLACE_HOLDER_H_
#define UI_CORE_PLACE_HOLDER_H_
#pragma once
namespace ui
{
class UILIB_API PlaceHolder : public virtual nbase::SupportWeakCallback
{
public:
PlaceHolder();
PlaceHolder(const PlaceHolder& r);
PlaceHolder& operator=(const PlaceHolder& r) = delete;
virtual ~PlaceHolder();
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Box* GetParent() const { return m_pParent;}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @param[in] strName Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
*/
Box* GetAncestor(const std::wstring& strName);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>Ӧ xml <EFBFBD><EFBFBD> name <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
std::wstring GetName() const;
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD>Ӧ xml <EFBFBD><EFBFBD> name <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>UTF8 <EFBFBD><EFBFBD><EFBFBD>
*/
std::string GetUTF8Name() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD> xml <EFBFBD><EFBFBD>
* @param[in] strName Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetName(const std::wstring& strName);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD> xml <EFBFBD>У<EFBFBD>UTF8 <EFBFBD><EFBFBD><EFBFBD>
* @param[in] strName Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetUTF8Name(const std::string& strName);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ָ<EFBFBD><EFBFBD>
*/
virtual Window* GetWindow() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pManager <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @param[in] pParent <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] bInit <EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Init <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void SetWindow(Window* pManager, Box* pParent, bool bInit = true);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] pManager <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void SetWindow(Window* pManager);
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void Init();
/**
* @brief <EFBFBD><EFBFBD> Init <EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Init <EFBFBD><EFBFBD>ͬ
* @return <EFBFBD><EFBFBD>
*/
virtual void DoInit();
/**
* @brief <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɼ<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true Ϊ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false Ϊ<EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
*/
virtual bool IsVisible() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool IsInternVisible() const;
/**
* @brief <EFBFBD>жϿؼ<EFBFBD><EFBFBD>Ƿ񸡶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ xml <EFBFBD><EFBFBD> float <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> true <EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false Ϊ<EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD>״̬
*/
bool IsFloat() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD>Ƿ񸡶<EFBFBD>
* @param[in] bFloat <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ true Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetFloat(bool bFloat = true);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>Ӧ xml <EFBFBD><EFBFBD> width <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int GetFixedWidth() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD><EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] cx Ҫ<EFBFBD><EFBFBD><EFBFBD>õĿ<EFBFBD><EFBFBD><EFBFBD>
* @param[in] bArrange <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @param[in] bNeedDpiScale <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DPI <EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @return <EFBFBD><EFBFBD>
*/
void SetFixedWidth(int cx, bool bArrange = true, bool bNeedDpiScale = true);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>̶<EFBFBD><EFBFBD>߶<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD>ع̶<EFBFBD><EFBFBD>߶<EFBFBD>
*/
int GetFixedHeight() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ù̶<EFBFBD><EFBFBD>߶<EFBFBD>
* @param[in] cy Ҫ<EFBFBD><EFBFBD><EFBFBD>õĹ̶<EFBFBD><EFBFBD>߶<EFBFBD>
* @param[in] bNeedDpiScale <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DPI <EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @return <EFBFBD><EFBFBD>
*/
void SetFixedHeight(int cy, bool bNeedDpiScale = true);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int GetMinWidth() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] cx Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetMinWidth(int cx);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
int GetMaxWidth() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] cx Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetMaxWidth(int cx);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>С<EFBFBD>߶<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>߶<EFBFBD>
*/
int GetMinHeight() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>߶<EFBFBD>
* @param[in] cy Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>߶<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetMinHeight(int cy);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
*/
int GetMaxHeight() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
* @param[in] cy Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetMaxHeight(int cy);
/**
* @brief <EFBFBD><EFBFBD>ȡʵ<EFBFBD>ʿ<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʿ<EFBFBD><EFBFBD><EFBFBD>
*/
int GetWidth() const;
/**
* @brief <EFBFBD><EFBFBD>ȡʵ<EFBFBD>ʸ߶<EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʸ߶<EFBFBD>
*/
int GetHeight() const;
/**
* @brief <EFBFBD><EFBFBD>ȡˮƽ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮƽ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> HorAlignType ö<EFBFBD><EFBFBD>
*/
HorAlignType GetHorAlignType() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˮƽ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] horAlignType Ҫ<EFBFBD><EFBFBD><EFBFBD>õĶ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> HorAlignType ö<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetHorAlignType(HorAlignType horAlignType);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @return <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> VerAlignType ö<EFBFBD><EFBFBD>
*/
VerAlignType GetVerAlignType() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>ʽ
* @param[in] vorAlignType Ҫ<EFBFBD><EFBFBD><EFBFBD>õĶ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> VerAlignType ö<EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
void SetVerAlignType(VerAlignType verAlignType);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool IsReEstimateSize() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void SetReEstimateSize(bool bReEstimateSize);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
virtual CSize EstimateSize(CSize szAvailable);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ؼ<EFBFBD>λ<EFBFBD><EFBFBD>
* @param[in] bContainShadow <EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱλ<EFBFBD>ã<EFBFBD>Ĭ<EFBFBD><EFBFBD>Ϊ true
* @return <EFBFBD><EFBFBD><EFBFBD>ؿؼ<EFBFBD>λ<EFBFBD><EFBFBD>
*/
virtual UiRect GetPos(bool bContainShadow = true) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ÿؼ<EFBFBD>λ<EFBFBD><EFBFBD>
* @param[in] rc Ҫ<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* @return <EFBFBD><EFBFBD>
*/
virtual void SetPos(UiRect rc);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void Arrange();
/**
* @brief <EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void ArrangeAncestor();
/**
* @brief <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>
* @return true Ϊ<EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD>false Ϊ<EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
bool IsArranged() const;
void SetUseCache(bool cache);
bool IsUseCache() { return m_bUseCache; }
void SetCacheDirty(bool dirty);
bool IsCacheDirty() { return m_bUseCache && m_bCacheDirty; }
/**
* @brief <EFBFBD>ػ<EFBFBD><EFBFBD>ؼ<EFBFBD>
* @return <EFBFBD><EFBFBD>
*/
virtual void Invalidate();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
UiRect GetPosWithScrollOffset() const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
CPoint GetScrollOffset() const;
static bool IsChild(PlaceHolder* pAncestor, PlaceHolder* pChild);
protected:
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
virtual void ArrangeSelf();
protected:
std::wstring m_sName;
Window *m_pWindow;
Box* m_pParent;
CSize m_cxyFixed;
CSize m_cxyMin;
CSize m_cxyMax;
UiRect m_rcItem;
HorAlignType m_horAlignType;
VerAlignType m_verAlignType;
bool m_bFloat;
bool m_bReEstimateSize;
bool m_bVisible;
bool m_bInternVisible;
bool m_bIsArranged;
bool m_bUseCache;
bool m_bCacheDirty;
std::unique_ptr<IRenderContext> m_renderContext;
};
} // namespace ui
#endif // UI_CORE_PLACE_HOLDER_H_