581 lines
13 KiB
C++
581 lines
13 KiB
C++
#include "stdafx.h"
|
|
#include "KUIControlStatic.h"
|
|
|
|
#include "KResourceManager.h"
|
|
#include "KUIWndManager.h"
|
|
#include "SLog.h"
|
|
|
|
using namespace KUI_MESSAGE;
|
|
|
|
|
|
#ifdef _COUNTRY_ME_
|
|
#define TEXT_PHRASE KTextLayout2
|
|
#else
|
|
#define TEXT_PHRASE KTextPhrase
|
|
#endif
|
|
|
|
std::string StrFormat( const char* szString, ... )
|
|
{
|
|
char szBuf[1024];
|
|
|
|
va_list va;
|
|
va_start( va, szString );
|
|
_vsnprintf( szBuf, _countof(szBuf), szString, va );
|
|
va_end( va );
|
|
|
|
return std::string( szBuf );
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// KUIControlStatic Implement
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace
|
|
{
|
|
KUIWnd* Creator()
|
|
{
|
|
return new KUIControlStatic;
|
|
}
|
|
bool bRegister = KUIFactory::GetInstance()->RegisterCreator( Creator, "static");
|
|
}
|
|
|
|
KUIControlStatic::KUIControlStatic()
|
|
: m_bEnableOption(false)
|
|
{
|
|
}
|
|
|
|
KUIControlStatic::~KUIControlStatic()
|
|
{
|
|
}
|
|
|
|
void KUIControlStatic::Create(KUIWND_CREATE_ARG& CREATE_ARG)
|
|
{
|
|
m_bUseHorizonPiece = !(CREATE_ARG.dwStyle & KSTYLE_STRETCH_VERTICAL);
|
|
KUIControl::Create( CREATE_ARG);
|
|
|
|
// 스태틱은 무조건 NO_GET
|
|
m_dwFlag |= KFLAG_NO_GET_MESSAGE;
|
|
}
|
|
|
|
void KUIControlStatic::Render(KViewportObject * pViewport, bool isFront)
|
|
{
|
|
KUIControl::Render(pViewport, isFront);
|
|
}
|
|
|
|
void KUIControlStatic::OnChangeCaptionNotify()
|
|
{
|
|
if( !IsDisable() && m_bEnableOption )
|
|
{
|
|
size_t cpos = 0;
|
|
while( ( cpos = m_sCaption.find( "<#" ) ) != m_sCaption.npos )
|
|
{
|
|
m_sCaption.erase( cpos, 9 );
|
|
}
|
|
|
|
std::string strNewCaption = m_strEnableColor.c_str();
|
|
strNewCaption += m_sCaption;
|
|
m_sCaption = strNewCaption;
|
|
}
|
|
|
|
KUIControl::OnChangeCaptionNotify();
|
|
}
|
|
|
|
// 2011.09.30 : servantes : 플래그 설정을 바꾸어 메세지를 받는다
|
|
// 기본은 마우스 메세지를 받지 못하지만 특정 컨트롤들만 받을 수 있게끔 하기 위해서 함수 추가
|
|
void KUIControlStatic::SetEnableMouseClickMessage(bool bEnable)
|
|
{
|
|
if(bEnable == true)
|
|
{
|
|
m_dwFlag = 0;
|
|
}
|
|
else
|
|
{
|
|
m_dwFlag |= KFLAG_NO_GET_MESSAGE;
|
|
}
|
|
}
|
|
|
|
// 2011.09.30 : servantes : 스태틱 컨트롤에 왼,오른 클릭 메세지 받게 함수 추가
|
|
DWORD KUIControlStatic::OnMouseMessage(DWORD dwMessage, int x, int y)
|
|
{
|
|
DWORD dwRet = KUIControl::OnMouseMessage(dwMessage,x,y);
|
|
|
|
if(KMR_NO_GET & dwRet)
|
|
return dwRet;
|
|
|
|
if(IsInRect(x,y))
|
|
{
|
|
switch(dwMessage)
|
|
{
|
|
case KLBUTTON_DOWN:
|
|
PumpUpMessage(GetID(), KICON_CLICK, x, y);
|
|
break;
|
|
case KRBUTTON_DOWN:
|
|
PumpUpMessage(GetID(), KICON_RCLICK, x, y);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if ( dwMessage == KLBUTTON_UP )
|
|
{
|
|
m_pManager->ReleaseCapture( this );
|
|
}
|
|
}
|
|
|
|
return dwRet;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// KUIControlIconStatic Implement
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace
|
|
{
|
|
KUIWnd* IconStaticCreator()
|
|
{
|
|
return new KUIControlIconStatic;
|
|
}
|
|
bool bIconStaticRegister = KUIFactory::GetInstance()->RegisterCreator( IconStaticCreator, "iconstatic");
|
|
}
|
|
|
|
|
|
|
|
KUIControlIconStatic::KUIControlIconStatic()
|
|
: m_bReSizeRes(true)
|
|
{
|
|
SetButtonState( KICONBUTTON_NORMAL );
|
|
m_bLeftButton = false;
|
|
|
|
_registerSprite(&m_prIcon);
|
|
}
|
|
|
|
KUIControlIconStatic::~KUIControlIconStatic()
|
|
{
|
|
}
|
|
|
|
void KUIControlIconStatic::SetButtonState( DWORD State )
|
|
{
|
|
m_dwButtonState = State;
|
|
InvalidateWnd();
|
|
}
|
|
|
|
void KUIControlIconStatic::SetIcon( const char* pSprName/* = NULL*/, const char* pAniName /* = NULL */ )
|
|
{
|
|
if( NULL != pAniName )
|
|
{
|
|
//같으면서, 리소스가 설정 되어 있으면 재설정 하지 않는다.
|
|
if( !_stricmp( m_sAniName.c_str(), pAniName ) && m_prIcon.IsUse() )
|
|
return;
|
|
|
|
m_sAniName = pAniName;
|
|
}
|
|
else
|
|
{
|
|
m_sAniName = "";
|
|
}
|
|
|
|
if( m_sAniName.empty() )
|
|
{
|
|
m_rcCaptionArea = m_rcRegion;
|
|
SetShow( false );
|
|
return;
|
|
}
|
|
SetBack(pSprName, pAniName);
|
|
InvalidateWnd();
|
|
}
|
|
|
|
void KUIControlIconStatic::SetIconColor( const KColor& color )
|
|
{
|
|
if( m_prIcon.IsUse() )
|
|
{
|
|
m_prIcon.SetColor( color );
|
|
}
|
|
}
|
|
|
|
DWORD KUIControlIconStatic::OnMouseMessage(DWORD dwMessage, int x, int y)
|
|
{
|
|
DWORD dwRet = KUIControl::OnMouseMessage(dwMessage,x,y);
|
|
|
|
if(KMR_NO_GET & dwRet)
|
|
return dwRet;
|
|
|
|
if( m_dwButtonState == KICONBUTTON_DISABLE )
|
|
return dwRet;
|
|
|
|
if(IsInRect(x,y))
|
|
{
|
|
switch(dwMessage)
|
|
{
|
|
case KMOUSE_MOVE:
|
|
if( m_dwButtonState != KICONBUTTON_DOWN )
|
|
{
|
|
if ( m_bLeftButton )
|
|
SetButtonState( KICONBUTTON_DOWN );
|
|
else SetButtonState( KICONBUTTON_ACTIVATE );
|
|
}
|
|
break;
|
|
case KLBUTTON_DOWN:
|
|
m_bLeftButton = true;
|
|
if( (m_dwFlag & KFLAG_CAN_DRAG) )
|
|
{
|
|
PumpUpMessage(GetID(), KICON_PRESSING, 0,0);
|
|
}
|
|
else
|
|
{
|
|
if( !(GetFlag() & KFLAG_GET_PASS_MESSAGE) )
|
|
m_pManager->SetCapture( this );
|
|
}
|
|
SetButtonState( KICONBUTTON_DOWN );
|
|
break;
|
|
case KLBUTTON_UP:
|
|
m_bLeftButton = false;
|
|
if ( !(m_dwFlag & KFLAG_CAN_DRAG) )
|
|
m_pManager->ReleaseCapture( this );
|
|
if( m_dwButtonState == KICONBUTTON_DOWN )
|
|
PumpUpMessage(GetID(), KICON_CLICK, 0,0);
|
|
|
|
SetButtonState( KICONBUTTON_ACTIVATE );
|
|
|
|
break;
|
|
case KLBUTTON_DBLCLK:
|
|
m_bLeftButton = false;
|
|
PumpUpMessage(GetID(), KICON_DBLCLK, 0,0);
|
|
SetButtonState( KICONBUTTON_ACTIVATE );
|
|
|
|
break;
|
|
|
|
case KRBUTTON_DOWN: //servnates 2011.02.23
|
|
m_bLeftButton = false;
|
|
PumpUpMessage(GetID(), KICON_RCLICK, x, y);
|
|
SetButtonState( KICONBUTTON_ACTIVATE );
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if ( dwMessage == KLBUTTON_UP )
|
|
{
|
|
m_bLeftButton = false;
|
|
m_pManager->ReleaseCapture( this );
|
|
}
|
|
// 마우스 범위를 벗어나면 Normal로 돌린다.
|
|
if(m_dwButtonState == KICONBUTTON_ACTIVATE || m_dwButtonState == KICONBUTTON_DOWN)
|
|
SetButtonState( KICONBUTTON_NORMAL );
|
|
}
|
|
|
|
return dwRet;
|
|
}
|
|
|
|
void KUIControlIconStatic::OnChagneBackNotify()
|
|
{
|
|
KResSprite* pFrame = _getSpriteSet()->GetSpriteRes(m_sAniName.c_str(),m_nFrameIndex);
|
|
|
|
if( !pFrame )
|
|
{
|
|
SDEBUGLOG( "[Function = %s]", __FUNCTION__);
|
|
SDEBUGLOG( "Cannot find sprite : %s / frame index : %d" ,m_sAniName.c_str(),m_nFrameIndex);
|
|
// assert( false && "Cannot find Sprite Res Frame" );
|
|
return;
|
|
}
|
|
|
|
if( m_bReSizeRes )
|
|
{
|
|
m_rcRegion.right = m_rcRegion.left + pFrame->GetSizeX();
|
|
m_rcRegion.bottom = m_rcRegion.top + pFrame->GetSizeY();
|
|
}
|
|
|
|
m_prIcon.SetRes( pFrame );
|
|
m_prIcon.SetPosition( m_rcRegion.left, m_rcRegion.top, m_fZPos );
|
|
|
|
if( !m_bReSizeRes )
|
|
m_prIcon.SetTargetSize( m_rcRegion.GetWidth(), m_rcRegion.GetHeight() );
|
|
|
|
m_rcCaptionArea = m_rcRegion;
|
|
|
|
#ifdef _KUI_INVALIDATION
|
|
//인벨리데이트로 추가된부분 주의요망
|
|
KUIControl::OnChagneBackNotify();
|
|
#endif
|
|
}
|
|
|
|
void KUIControlIconStatic::_initControl()
|
|
{
|
|
SetIcon( m_sSprName.c_str(), m_sAniName.c_str() );
|
|
}
|
|
|
|
|
|
// bintitle. 2010.04.29
|
|
void KUIControlIconStatic::SetResSprite( KResSprite * pRes )
|
|
{
|
|
m_prIcon.SetRes( pRes );
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// KUIControlRankIconStatic Implement
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace
|
|
{
|
|
KUIWnd* RankIconStaticCreator()
|
|
{
|
|
return new KUIControlRankIconStatic;
|
|
}
|
|
bool bRankIconStaticRegister = KUIFactory::GetInstance()->RegisterCreator( RankIconStaticCreator, "rankiconstatic");
|
|
}
|
|
|
|
KUIControlRankIconStatic::KUIControlRankIconStatic()
|
|
{
|
|
|
|
}
|
|
|
|
KUIControlRankIconStatic::~KUIControlRankIconStatic()
|
|
{
|
|
|
|
}
|
|
|
|
void KUIControlRankIconStatic::SetSubIcon( int nCnt, const char* pSprName/* = NULL*/, const char* pAniName/* = NULL*/ )
|
|
{
|
|
|
|
}
|
|
|
|
void KUIControlRankIconStatic::SetSubIconAniName( int nIndex, const char* pAniName/* = NULL*/ )
|
|
{
|
|
|
|
}
|
|
|
|
void KUIControlRankIconStatic::_initControl()
|
|
{
|
|
SetIcon( m_sSprName.c_str(), m_sAniName.c_str() );
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// KUIControlMultiIcon Implement
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace
|
|
{
|
|
KUIWnd* MultiIconCreator()
|
|
{
|
|
return new KUIControlMultiIcon;
|
|
}
|
|
bool bMultiIconRegister = KUIFactory::GetInstance()->RegisterCreator( MultiIconCreator, "multi_icon");
|
|
}
|
|
|
|
KUIControlMultiIcon::KUIControlMultiIcon()
|
|
{
|
|
SetButtonState( KICONBUTTON_NORMAL );
|
|
m_bLeftButton = false;
|
|
|
|
// 기본적으로 Layer 하나는 존재.
|
|
m_vtPrIcon.push_back( new KSpritePrimitive);
|
|
m_vtIconInfo.push_back( ICON_INFO() );
|
|
_registerSprite(m_vtPrIcon[0]);
|
|
}
|
|
KUIControlMultiIcon::~KUIControlMultiIcon()
|
|
{
|
|
SAFE_DELETE_VECTOR(m_vtPrIcon);
|
|
m_vtIconInfo.clear();
|
|
}
|
|
|
|
void KUIControlMultiIcon::SetButtonState( DWORD State )
|
|
{
|
|
m_dwButtonState = State;
|
|
InvalidateWnd();
|
|
}
|
|
|
|
void KUIControlMultiIcon::SetIconLayer(int nCount)
|
|
{
|
|
/// 현재 구조상 SetIconLayer는 한번만 호출되어야 되는데, 여러번 호출 가능하도록 되어 있다.
|
|
/// 이럴경우에 데이타가 꼬여서 이상동작 하는 경우가 생김(ex 윈도우 이동 같은 경우)
|
|
/// 내부 구조를 정확하게 몰라서 예외 처리만 해둠 - prodongi
|
|
if (1 != m_vtPrIcon.size())
|
|
{
|
|
return ;
|
|
}
|
|
|
|
for(int i = 1 ; i < nCount; ++i)
|
|
{
|
|
m_vtPrIcon.push_back(new KSpritePrimitive);
|
|
_registerSprite(m_vtPrIcon[i]);
|
|
}
|
|
|
|
m_vtIconInfo.resize( nCount );
|
|
}
|
|
|
|
int KUIControlMultiIcon::GetIconLayerCount() const // sonador #2.1.2.4.3
|
|
{
|
|
return m_vtPrIcon.size();
|
|
}
|
|
|
|
void KUIControlMultiIcon::SetIcon(int nLayer, const char* pSprName, LPCSTR lpszAniName)
|
|
{
|
|
if(nLayer >= m_vtPrIcon.size() || nLayer < 0)
|
|
{
|
|
assert(false && "Index Error");
|
|
return;
|
|
}
|
|
|
|
m_sAniName = (NULL != lpszAniName) ? lpszAniName : "";
|
|
|
|
m_vtIconInfo[nLayer].sSprName = (NULL != pSprName) ? pSprName : "";
|
|
m_vtIconInfo[nLayer].sAniName = m_sAniName;
|
|
|
|
KSpritePrimitive* pPrimitive = m_vtPrIcon[nLayer];
|
|
|
|
if( m_sAniName.empty() )
|
|
{
|
|
std::string strOutput;
|
|
XStringUtil::Format(strOutput, "[SetIcon debug] m_sAniName is empty; layer: %d; pSprName: %s; lpszAniName: %s\n", nLayer, pSprName, lpszAniName);
|
|
_oprint(strOutput.c_str());
|
|
pPrimitive->SetRenderEnable( false);
|
|
return;
|
|
}
|
|
|
|
if( NULL == pSprName )
|
|
{
|
|
// assert(false && "Spr NULL");
|
|
return;
|
|
}
|
|
|
|
SPRITE_SET * pSprSet = KSpriteManager::GetManager()->GetSpriteSet( pSprName );
|
|
if( pSprSet == NULL )
|
|
{
|
|
std::string strOutput;
|
|
XStringUtil::Format(strOutput, "[SetIcon debug] pSprSet is NULL; layer: %d; pSprName: %s; lpszAniName: %s\n", nLayer, pSprName, lpszAniName);
|
|
_oprint(strOutput.c_str());
|
|
pPrimitive->SetRenderEnable( false);
|
|
return;
|
|
}
|
|
|
|
KResSprite* pFrame = pSprSet->GetSpriteRes(m_sAniName.c_str(),0);
|
|
|
|
if( !pFrame )
|
|
{
|
|
std::string strOutput;
|
|
XStringUtil::Format(strOutput, "[SetIcon debug] Cannot find Sprite Res Frame; layer: %d; pSprName: %s; lpszAniName: %s\n", nLayer, pSprName, lpszAniName);
|
|
_oprint(strOutput.c_str());
|
|
return;
|
|
}
|
|
|
|
m_rcRegion.right = m_rcRegion.left + pFrame->GetSizeX();
|
|
m_rcRegion.bottom = m_rcRegion.top + pFrame->GetSizeY();
|
|
m_rcCaptionArea = m_rcRegion;
|
|
|
|
pPrimitive->SetRes( pFrame );
|
|
pPrimitive->SetPosition( m_rcRegion.left, m_rcRegion.top, m_fZPos );
|
|
pPrimitive->SetRenderEnable( true);
|
|
|
|
InvalidateWnd();
|
|
}
|
|
|
|
void KUIControlMultiIcon::_initControl()
|
|
{
|
|
SetIcon( m_nFrameIndex,m_sSprName.c_str(), m_sAniName.c_str() );
|
|
}
|
|
|
|
const KUIControlMultiIcon::ICON_INFO& KUIControlMultiIcon::GetIconInfoByLayer(int nLayer) const
|
|
{
|
|
if(nLayer >= m_vtIconInfo.size() || nLayer < 0)
|
|
{
|
|
assert(false && "Index Error");
|
|
}
|
|
|
|
return m_vtIconInfo[nLayer];
|
|
}
|
|
|
|
DWORD KUIControlMultiIcon::OnMouseMessage(DWORD dwMessage, int x, int y)
|
|
{
|
|
DWORD dwRet = KUIControl::OnMouseMessage(dwMessage,x,y);
|
|
|
|
if(KMR_NO_GET & dwRet)
|
|
return dwRet;
|
|
|
|
if( m_dwButtonState == KICONBUTTON_DISABLE )
|
|
return dwRet;
|
|
|
|
if(IsInRect(x,y))
|
|
{
|
|
switch(dwMessage)
|
|
{
|
|
case KMOUSE_MOVE:
|
|
if( m_dwButtonState != KICONBUTTON_DOWN )
|
|
{
|
|
if ( m_bLeftButton )
|
|
SetButtonState( KICONBUTTON_DOWN );
|
|
else SetButtonState( KICONBUTTON_ACTIVATE );
|
|
}
|
|
break;
|
|
|
|
case KLBUTTON_DOWN:
|
|
m_bLeftButton = true;
|
|
if( (m_dwFlag & KFLAG_CAN_DRAG) )
|
|
PumpUpMessage(GetID(), KICON_PRESSING, 0,0);
|
|
else
|
|
{
|
|
if( !(GetFlag() & KFLAG_GET_PASS_MESSAGE) )
|
|
m_pManager->SetCapture( this );
|
|
}
|
|
SetButtonState( KICONBUTTON_DOWN );
|
|
break;
|
|
|
|
case KLBUTTON_UP:
|
|
m_bLeftButton = false;
|
|
if ( !(m_dwFlag & KFLAG_CAN_DRAG) )
|
|
m_pManager->ReleaseCapture( this );
|
|
if( m_dwButtonState == KICONBUTTON_DOWN )
|
|
PumpUpMessage(GetID(), KICON_CLICK, 0,0);
|
|
|
|
SetButtonState( KICONBUTTON_ACTIVATE );
|
|
break;
|
|
|
|
case KLBUTTON_DBLCLK:
|
|
m_bLeftButton = false;
|
|
PumpUpMessage(GetID(), KICON_DBLCLK, 0,0);
|
|
SetButtonState( KICONBUTTON_ACTIVATE );
|
|
break;
|
|
|
|
case KRBUTTON_DOWN:
|
|
m_bLeftButton = false;
|
|
PumpUpMessage(GetID(), KICON_RCLICK, x,y);
|
|
SetButtonState( KICONBUTTON_ACTIVATE );
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if ( dwMessage == KLBUTTON_UP )
|
|
{
|
|
m_bLeftButton = false;
|
|
m_pManager->ReleaseCapture( this );
|
|
}
|
|
// 마우스 범위를 벗어나면 Normal로 돌린다.
|
|
if(m_dwButtonState == KICONBUTTON_ACTIVATE || m_dwButtonState == KICONBUTTON_DOWN)
|
|
SetButtonState( KICONBUTTON_NORMAL );
|
|
}
|
|
|
|
return dwRet;
|
|
}
|
|
|
|
void KUIControlMultiIcon::OnChagneBackNotify()
|
|
{
|
|
SetIcon(m_nFrameIndex, 0, m_sAniName.c_str());
|
|
|
|
#ifdef _KUI_INVALIDATION
|
|
//인벨리데이트로 추가된부분 주의요망
|
|
KUIControl::OnChagneBackNotify();
|
|
#endif
|
|
}
|