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

75 lines
2.0 KiB
C++

#pragma once
class KUIControlSimpleButton;
class KUIControlStatic;
class KUIControlVScroll;
class KUIControlCombo : public KUIControl
{
public:
KUIControlCombo();
virtual void Render( KViewportObject *pViewport, bool isFront = false );
virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam );
virtual DWORD OnMouseMessage(DWORD dwMessage,int x, int y);
virtual void OnChangeCaptionNotify();
bool AddItem(LPCSTR itemName);
bool InsertItem(int index, LPCSTR lpszItem);
bool RemoveItem(int index);
int FindItemIndex(LPCSTR itemName);
void ClearItem();
/// Combo Item의 정렬
void SetItemAlign(DWORD align);
/// Comobo Item의 최고 넒이
void SetItemWidth(DWORD itemWidth);
/// 스크롤 없이 한번에 보여지는 Item의 갯수
void SetMaxViewItem(DWORD maxViewItemCount);
int GetCount();
/// 현재 선택된 Item을 알려줌 (선택된게 없으면 - 1을 리턴)
int GetCurSel();
bool SetCurSel(int index);
protected:
virtual void _initControl();
private:
void _InitComboPhrase();
void _SetFold(bool bFold);
/// Add,Insert,Remove,Clear 등을 했을때 불림.
void _UpdateComboItem();
int _GetUnfoldBackHeight();
/// Combo box가 펼쳐졌을때 마우스 위치에 따라서 처리해줌.
void _SetPreSelectItem(int x, int y);
void _SetPreSelectItem(int nIndex);
/// 스크롤 컨트롤을 보여줘야 하나?
bool _IsScrollEnable();
void _SetScrollMaxRange();
/// 한번에 보여지는 Item들의 수직 높이
DWORD _GetMaxViewLineHeight();
private:
DWORD m_itemWidth;
DWORD m_maxViewItemCount;
int m_selectItem;
int m_preSelectItem;
bool m_bFold;
bool m_bUpdate;
std::string m_sNotSelectedItem; ///< 아무것도 선택되지 않았을때 보여줘야 하는 글씨 (uii 에서 caption을 통해서 셋팅)
KUIControlSimpleButton* m_pDownButton;
KUIControlStatic* m_pUnfoldBack;
KUIControlStatic* m_pUnfoldSelectBack;
KTextPhrase m_ComboPhrase;
std::vector<std::string> m_vtComboItems;
};