Files
2022-10-26 12:25:11 +08:00

536 lines
15 KiB
C++

#include "SunClientPrecompiledHeader.h"
#include "uiItemTotalComposite.h"
#include "ItemUnitRenderer.h"
#include "map.h"
//------------------------------------------------------------------------------
/**
*/
uiItemTotalcomposite::uiItemTotalcomposite(InterfaceManager *pUIMan):
uiBase(pUIMan),
m_iMainCategory(0),
m_iSubCategory(0),
m_iCurSelectedItemCode(0),
is_click_Btn_(false),
is_Set_Plus_Min_(eValue_None)
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
,Tree_Controller_Ptr_(NULL)
#endif
{
SCItemSlotContainer::Init(SLOT_SIZE, SI_ITEM_COMPOSE);
m_iMaxScrollValue = 0;
m_iCurScrollValue = 0;
m_iMaxScrollValue2 = 0;
m_iCurScrollValue2 = 0;
m_pTotalItemUnitRenderer = NULL;
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
m_iDropdownMaxScrollValue = 0;
m_iDropdownCurScrollValue = 0;
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
}
//------------------------------------------------------------------------------
/**
*/
uiItemTotalcomposite::~uiItemTotalcomposite()
{
this->Release();
SCItemSlotContainer::Release();
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
if(Tree_Controller_Ptr_)
{
delete Tree_Controller_Ptr_;
Tree_Controller_Ptr_ = NULL;
}
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
}
//------------------------------------------------------------------------------
/**
*/
void uiItemTotalcomposite::Init(CDrawBase* pDrawBase)
{
for(int i = 0 ; i < STATIC_CONTROL_SIZE ; ++i)
{
m_pStatic[i] = static_cast<CCtrlStaticWZ*>( getControl( i + DIALOG_TXT_CAPTION ) );
}
for(i = 0; i < MATERIAL_NAME_SIZE; ++i)
{
m_pMaterialName[i] = static_cast<CCtrlStaticWZ*>(getControl(i + MATERIAL_NAME_BEGIN));
#ifdef _SCJ_LONG_TEXT_REDUCING
m_pMaterialName[i]->SetTextReducing(true);
#endif //_SCJ_LONG_TEXT_REDUCING
}
#ifdef _SCJ_LONG_TEXT_REDUCING
material_name_tooltip_list_.reserve(MATERIAL_NAME_SIZE);
#endif //_SCJ_LONG_TEXT_REDUCING
m_pCreateRate = static_cast<CCtrlStaticWZ*>(getControl(DIALOG_TXT_SLOT7));
m_pList_Each_Category = static_cast<CCtrlListWZ*>(getControl(DIALOG_LIST_EACH_CATEGORY));
m_pList_Category = static_cast<CCtrlListWZ*>(getControl(DIALOG_LIST_CATEGORY));
m_pList_Category->SetStartLineGapTop( 6 );
#ifdef _NA_000000_20130114_RENEWER_UI
m_pImageDrapDown = static_cast<CCtrlPictureWZ*>(getControl(DIALOG_PICTURE_DRAPDOWN));
m_pVScrollDrapDown = static_cast<CCtrlVScrollWZ*>(getControl(DIALOG_SCROLBAR_DRAPDOWN));
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
#ifdef _JAPAN
// 일본의 경우 조합 카테고리 항목이 많아 높이값 줄임
// 일본에 UI리소스가 따로 들어가 있는 상황이으로 일본 디파인에 적용
m_pList_Category->SetSellHeight(16);
#endif
m_pVScroll = static_cast<CCtrlVScrollWZ*>(getControl(DIALOG_SCROLBAR));
m_pList_Category->ShowWindowWZ(WZ_HIDE);
#ifdef _NA_000000_20130114_RENEWER_UI
m_pImageDrapDown->ShowWindowWZ(WZ_HIDE);
m_pVScrollDrapDown->ShowWindowWZ(WZ_HIDE);
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,} ;
g_InterfaceManager.GetInterfaceString(eST_ITEM_COMPOSITE , szMessage , INTERFACE_STRING_LENGTH );
GlobalFunc::SetCaption(m_pStatic[TXT_CAPTION],szMessage);
m_pTotalItemUnitRenderer = new ItemUnitRenderer;
m_pTotalItemUnitRenderer->Init( g_pSunRenderer, SCSlotContainer::GetMaxSlotNum() );
m_iMainCategory = 0;
m_iSubCategory = 0;
m_byCreateRate = 0;
MakeTree();
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
m_pList_Each_Category->SetTextReducing(true);
Tree_Controller_Ptr_ = TreeController::CreateTree(20,20,m_pVScroll,m_pList_Each_Category);
#endif
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
#else
UpdateTree();
#endif
UpdateTree2();
}
//------------------------------------------------------------------------------
/**
*/
void uiItemTotalcomposite::Release()
{
for (int i = 0; i < GetMaxSlotNum(); ++i)
{
if ( !IsEmpty(i) )
DeleteSlot(i, NULL);
}
if ( m_pTotalItemUnitRenderer )
{
this->m_pTotalItemUnitRenderer->Release();
SAFE_DELETE(this->m_pTotalItemUnitRenderer);
}
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
for (int i = 0 ; i < (int)vMainTreeCategory.size() ; ++i)
{
vMainTreeCategory[i]->Release();
delete vMainTreeCategory[i];
vMainTreeCategory[i] = NULL;
}
vMainTreeCategory.clear();
#endif
}
//-------------------------------------------------------------------------------------------
/**
*/
void uiItemTotalcomposite::MakeTree()
{
ComposeCategotyMap& category_map = ItemComposeListParser::Instance()->GetComposeCategotyMap();
ComposeCategotyMap::iterator categoty_iterator = category_map.begin();
ComposeCategotyMap::iterator end_iterator = category_map.end();
for ( ; categoty_iterator != end_iterator; ++categoty_iterator)
{
ComposeCategory(categoty_iterator->second);
}
}
//-------------------------------------------------------------------------------------------
/**
*/
void uiItemTotalcomposite::ComposeCategory(sITEM_COMPOSE_LIST * pItemComposeList)
{
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
//메인카운터
int count = pItemComposeList->m_dCategoryCount;
if(count == 0)
{
return;
}
TreeCategory* Category = NULL;
bool isFine = false;
for (int i = 0 ; i < (int)vMainTreeCategory.size() ; ++i)
{
//해당 아이템의 하위에 들어가야됨.
if(pItemComposeList->m_pCategory[0] == vMainTreeCategory[i]->index)
{
Category = vMainTreeCategory[i];
isFine = true;
break;
}
}
int IncCount = 1;
//최초 셋팅은 아무거도 없으니 다 채우자
if(!isFine)
{
Category = new TreeCategory();
Category->perentidx = -1;
Category->iStringCode = pItemComposeList->m_pCategoryCode[0];
Category->index = pItemComposeList->m_pCategory[0];
Category->type = TreeCategory::eType_Main;
Category->CompositionCode = pItemComposeList->m_Code;
AddSubTreeItem(pItemComposeList,Category,count,IncCount);
vMainTreeCategory.push_back(Category);
}
else
{
AddSubTreeItem(pItemComposeList,Category,count,IncCount);
}
#else
BOOL bMainInsert = TRUE;
int iPendingMain = 0;
BOOL bSubInsert = TRUE;
int iPendingSub = 0 ;
if(vMainCategory.size() == 0) bMainInsert = TRUE;
for(unsigned int i =0; i < vMainCategory.size(); ++i)
{
if(vMainCategory[i].index == pItemComposeList->m_dwCategory1)
{
bMainInsert = FALSE;
iPendingMain = i;
}
}
if(bMainInsert)
{
BaseCategory base;
base.iStringCode = pItemComposeList->m_NCode;
base.iCode = pItemComposeList->m_Code;
memcpy(base.arryMapCode,pItemComposeList->m_MapCode,sizeof(MAPCODE) * MAPCODE_MAX);
SubCategory sub;
sub.index = pItemComposeList->m_dwCategory2;
sub.iStringCode = pItemComposeList->m_Category2NCode;
sub.vec_baseCat.clear();
sub.vec_baseCat.push_back(base);
MainCategory main;
main.index = pItemComposeList->m_dwCategory1;
main.iStringCode = pItemComposeList->m_Category1NCode;
main.vec_subCat.clear();
main.vec_subCat.push_back(sub);
vMainCategory.push_back(main);
}
else
{
if(vMainCategory[iPendingMain].vec_subCat.size() == 0)
bSubInsert = TRUE;
for(unsigned int i = 0; i < vMainCategory[iPendingMain].vec_subCat.size(); ++i)
{
if (vMainCategory[iPendingMain].vec_subCat[i].index == pItemComposeList->m_dwCategory2)
{
bSubInsert = FALSE;
iPendingSub = i;
}
}
if(bSubInsert)
{
BaseCategory base;
base.iStringCode = pItemComposeList->m_NCode;
base.iCode = pItemComposeList->m_Code;
memcpy(base.arryMapCode,pItemComposeList->m_MapCode,sizeof(MAPCODE) * MAPCODE_MAX);
SubCategory sub;
sub.index = pItemComposeList->m_dwCategory2;
sub.iStringCode = pItemComposeList->m_Category2NCode;
sub.vec_baseCat.push_back(base);
vMainCategory[iPendingMain].vec_subCat.push_back(sub);
}
else
{
BaseCategory base;
base.iStringCode = pItemComposeList->m_NCode;
base.iCode = pItemComposeList->m_Code;
memcpy(base.arryMapCode,pItemComposeList->m_MapCode,sizeof(MAPCODE) * MAPCODE_MAX);
vMainCategory[iPendingMain].vec_subCat[iPendingSub].vec_baseCat.push_back(base);
}
}
#endif
}
//-------------------------------------------------------------------------------------------
/**
*/
#ifdef _NA_000000_20130114_RENEWER_UI
void uiItemTotalcomposite::UpdateTree2()
{
m_pList_Category->DeleteItemAll();
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
for(unsigned int i = 0; i < vMainTreeCategory.size(); ++i)
{
g_InterfaceManager.GetInterfaceString(vMainTreeCategory[i]->iStringCode,szMessage,INTERFACE_STRING_LENGTH);
InsertListData(m_pList_Category,szMessage,0,false);
}
#else
for(unsigned int i = 0; i < vMainCategory.size(); ++i)
{
g_InterfaceManager.GetInterfaceString(vMainCategory[i].iStringCode,szMessage,INTERFACE_STRING_LENGTH);
InsertListData(m_pList_Category,szMessage,0,false);
}
#endif
m_pList_Category->SetCurSel(0);
int sizeRow = m_pList_Category->GetListRowCnt() + 1;
m_iDropdownMaxScrollValue = sizeRow - MAX_LIST_DATA;
if(m_iMaxScrollValue < 0 )
{
m_iDropdownCurScrollValue = 0;
m_iDropdownMaxScrollValue = 0;
}
else
{
m_iDropdownCurScrollValue = m_pList_Category->GetCurSel() - MAX_LIST_DATA + 1;
if(m_iDropdownCurScrollValue < 0) m_iDropdownCurScrollValue = 0;
}
m_pVScrollDrapDown->SetScrollRangeWZ(0,m_iDropdownMaxScrollValue);
m_pVScrollDrapDown->SetScrollPosWZ(m_iDropdownCurScrollValue);
m_pList_Category->SetBeginDrawIndex(m_iDropdownCurScrollValue);
}
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
void uiItemTotalcomposite::UpdateTree()
{
int stringNumber;
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
int SelectCategory = m_pList_Category->GetCurSel();
m_pList_Each_Category->DeleteItemAll();
bool bChangeCategory = false;
if ( SelectCategory != m_iMainCategory)
{
m_iMainCategory = SelectCategory;
bChangeCategory = true;
}
if(m_iMainCategory < 0) m_iMainCategory =0; // m_iMainCategory는 무조건 0보다 크다
if((unsigned int)m_iMainCategory >= vMainCategory.size()) m_iMainCategory = 0;
g_InterfaceManager.GetInterfaceString(vMainCategory[m_iMainCategory].iStringCode,
szMessage,INTERFACE_STRING_LENGTH);
m_pStatic[TXT_CUR_CATEGORY]->SetTextWZ(szMessage);
for(unsigned int i =0 ; i <vMainCategory[m_iMainCategory].vec_subCat.size(); ++i)
{
bool bDelSubCategory = TRUE;
stringNumber = vMainCategory[m_iMainCategory].vec_subCat[i].iStringCode;
g_InterfaceManager.GetInterfaceString(stringNumber,szMessage,INTERFACE_STRING_LENGTH);
InsertListData(m_pList_Each_Category,szMessage,0,FALSE);
for(unsigned int k = 0 ; k < vMainCategory[m_iMainCategory].vec_subCat[i].vec_baseCat.size(); ++k)
{
BOOL isValid = CheckItemExistValidMap(i,k);
if(isValid)
{
bDelSubCategory = FALSE;
stringNumber = vMainCategory[m_iMainCategory].vec_subCat[i].vec_baseCat[k].iStringCode;
g_InterfaceManager.GetInterfaceString(stringNumber,szMessage,INTERFACE_STRING_LENGTH);
InsertListData(m_pList_Each_Category,szMessage,
&vMainCategory[m_iMainCategory].vec_subCat[i].vec_baseCat[k].iCode);
}
}
if( bDelSubCategory )
{
int iIndex = max( 0, m_pList_Each_Category->GetListRowCnt() -1);
m_pList_Each_Category->DeleteItem(iIndex);
}
}
m_iMaxScrollValue = m_pList_Each_Category->GetListRowCnt() - MAX_LIST_DATA;
if(m_iMaxScrollValue < 0 )
{
m_iCurScrollValue = 0;
m_iMaxScrollValue = 0;
}
else
{
m_iCurScrollValue = m_pList_Each_Category->GetCurSel() - MAX_LIST_DATA + 1;
if(m_iCurScrollValue < 0) m_iCurScrollValue = 0;
}
m_pVScroll->SetScrollRangeWZ(0,m_iMaxScrollValue);
if (bChangeCategory)
{
m_iCurScrollValue = 0;
m_pList_Each_Category->SetCurSel(-1);
}
m_pVScroll->SetScrollPosWZ(m_iCurScrollValue);
m_pList_Each_Category->SetBeginDrawIndex(m_iCurScrollValue);
}
#ifdef _NA_006448_ITEM_TOTAL_COMPOSITE_REVIEWER
void uiItemTotalcomposite::UpdateTreeReViewer()
{
Tree_Controller_Ptr_->DeleteAllItem();
int stringNumber = 0;
TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,};
int SelectCategory = m_pList_Category->GetCurSel();
bool bChangeCategory = false;
if ( SelectCategory != m_iMainCategory)
{
m_iMainCategory = SelectCategory;
bChangeCategory = true;
}
if(m_iMainCategory < 0) m_iMainCategory =0; // m_iMainCategory는 무조건 0보다 크다
if((unsigned int)m_iMainCategory >= vMainTreeCategory.size()) m_iMainCategory = 0;
g_InterfaceManager.GetInterfaceString(vMainTreeCategory[m_iMainCategory]->iStringCode,
szMessage,INTERFACE_STRING_LENGTH);
m_pStatic[TXT_CUR_CATEGORY]->SetTextWZ(szMessage);
MakeCompoisiteTreeitem(NULL,vMainTreeCategory[m_iMainCategory]);
Tree_Controller_Ptr_->Reflush();
}
void uiItemTotalcomposite::MakeCompoisiteTreeitem( HTREEITEM perentItem,TreeCategory* Item )
{
for (int i = 0 ; i < (int)Item->childTree.size() ; ++i)
{
TCHAR temp_string[INTERFACE_STRING_LENGTH] = {0,};
g_InterfaceManager.GetInterfaceString(Item->childTree[i]->iStringCode, temp_string);
HTREEITEM child_Item =
Tree_Controller_Ptr_->AddTreeItemCheckBox(temp_string,
0,
0,
false,
StrToWzID("st10"),
(void*)Item->childTree[i]
,perentItem);
MakeCompoisiteTreeitem(child_Item,Item->childTree[i]);
}
}
void uiItemTotalcomposite::AddSubTreeItem( sITEM_COMPOSE_LIST * pItemComposeList,TreeCategory* SubTree,int Count,int incCount )
{
if(Count == incCount)
return;
if(TreeCategory* isTree = SubTree->GetTreeCategory(pItemComposeList->m_pCategory[incCount]))
{
AddSubTreeItem(pItemComposeList,isTree,Count,incCount+1);
}
else
{
TreeCategory* Item = new TreeCategory();
Item->perentidx = SubTree->index;
Item->iStringCode = pItemComposeList->m_pCategoryCode[incCount];
Item->index = pItemComposeList->m_pCategory[incCount];
Item->type = TreeCategory::eType_Sun;
Item->CompositionCode = pItemComposeList->m_Code;
memcpy(Item->arryMapCode,pItemComposeList->m_MapCode,sizeof(MAPCODE) * MAPCODE_MAX);
SubTree->AddChild(Item);
AddSubTreeItem(pItemComposeList,Item,Count,incCount+1);
}
}
#endif
//-------------------------------------------------------------------------------------------
/**
*/
void uiItemTotalcomposite::InsertListData(CCtrlListWZ* pList, TCHAR* message,int* pExtraData,BOOL bCenter)
{
DWORD dwOption = DT_LEFT | DT_VCENTER;
DWORD Textcolor = RGBA(0,180,180,255);
if(bCenter)
{
dwOption = DT_VCENTER | DT_CENTER;
Textcolor = RGBA(180,180,180,255);
}
int index = pList->InsertItemBack();
#ifdef _INTERNATIONAL_UI
GlobalFunc::SetItem(pList,index,0,message,StrToWzID("st10"),
#else
GlobalFunc::SetItem(pList,index,0,message,StrToWzID("mn12"),
#endif//_INTERNATIONAL_UI
dwOption,
RGBA(0,0,0,0),
Textcolor,
RGBA(100, 100, 180, 255));
pList->SetItemData(index,pExtraData);
}
BOOL uiItemTotalcomposite::CheckItemExistValidMap(int subID , int baseID)
{
for(int kk =0 ; kk < MAPCODE_MAX; kk++)
{
int val = vMainCategory[m_iMainCategory].vec_subCat[subID].vec_baseCat[baseID].arryMapCode[kk];
if( vMainCategory[m_iMainCategory].vec_subCat[subID].vec_baseCat[baseID].arryMapCode[kk] == g_pMap->GetMapID() )
{
return TRUE;
}
}
return FALSE;
}