Files
2026-06-01 12:46:52 +02:00

645 lines
24 KiB
C++

#include "stdafx.h"
// messages...
#include "SGameMessage.h"
//#include "SGameMessageUI.h"
#include "ErrorCode/ErrorCode.h"
// managers...
#include "SGameManager.h"
#include "KUIWndManager.h"
#include "SInventoryMgr.h"
// DBs...
#include "SItemDB.h"
#include "SStringDB.h"
// Utils...
#include <toolkit/XStringUtil.h>
// gui controls...
#include "SUIDisplayInfo.h"
#include "KUITabControl.h"
#include "KUIControlStatic.h"
#include "KUIControlEdit.h"
#include "KUIControlButton.h"
#include "KUIControlList.h"
#include "SUIAuctionWnd.h"
#include "SDebug_Util.h"
namespace auction {
namespace tender {
// column...
const char* column_item = "button_01";
const char* column_limittime = "button_02";
const char* column_tender = "button_03";
const char* column_state = "button_04";
const char* column_purchase = "button_05";
// item list...
const char* list_select = "selectbar_on";
const char* list_back = "selectbar_back_%.2d";
const char* list_icon = "itemslot_%.2d";
const char* list_item_count = "itemslot_count_%.2d";
const char* list_item_s = "static_itemtexts01_%.2d";
const char* list_item_n = "static_itemtextn01_%.2d";
const char* list_item_l = "static_itemtextl01_%.2d";
const char* list_limittime = "static_itemtext03_%.2d";
const char* list_tender = "static_itemtext04_%.2d";
const char* list_state = "static_itemtext06_%.2d";
const char* list_purchase = "static_itemtext05_%.2d";
const char* list_tender_rac = "static_itemtextr04_%.2d";
const char* list_purchase_rac = "static_itemtextr05_%.2d";
// selected...
const char* selected_back = "selected_selectbar_back_%.2d";
const char* selected_icon = "selected_itemslot_%.2d";
const char* selected_item_count = "selected_itemslot_count_%.2d";
const char* selected_item_s = "static_selected_itemtexts01_%.2d";
const char* selected_item_n = "static_selected_itemtextn01_%.2d";
const char* selected_item_l = "static_selected_itemtextl01_%.2d";
const char* selected_limittime = "static_selected_itemtext03_%.2d";
const char* selected_tender = "static_selected_itemtext04_%.2d";
const char* selected_state = "static_selected_itemtext06_%.2d";
const char* selected_purchase = "static_selected_itemtext05_%.2d";
const char* selected_tender_rac = "static_selected_itemtextr04_%.2d";
const char* selected_purchase_rac = "static_selected_itemtextr05_%.2d";
// etc...
const char* list_scrollbar = "static_scrollbar";
const char* bid_edit = "edit_bid";
const char* bid_rupy = "static_cash_02";
const char* retender = "button_common01_01";
const char* purchase = "button_common01_02";
const char* page_now = "static_page_01";
const char* page_max = "static_page_02";
const char* page_left = "button_page_left";
const char* page_right = "button_page_right";
// deco...
const char* deco_list_item_s = "<#ffeab1><vcenter><left><size:10><shadow>+%s";
const char* deco_list_item_n = "<#ffeab1><vcenter><left><size:10><shadow>%s";
//'Lv'을 String DB 9501로 참조하도록 한다 2009.09.25. sfreer
//const char* deco_list_item_l = "<#ffeab1><vcenter><left><size:10><shadow>%s";
char* deco_list_item_l = NULL;//"<#ffeab1><vcenter><left><size:10><shadow>ld%s";
const char* deco_list_state = "<hcenter><vcenter><size:10><shadow>%s";
const char* deco_list_limittime = "<hcenter><vcenter><size:10><shadow>%s";
const char* deco_list_item_count = "<right><vcenter><size:8><font:돋움><shadow>%s";
const char* deco_money = "<right><vcenter><size:10><shadow>%s";
const char* deco_rupy = "<#fec530><vcenter><hcenter><size:10><shadow>%s";
const char* deco_page_now = "<right><vcenter><size:10><shadow>%d /";
const char* deco_page_max = "<right><vcenter><size:10><shadow>%d";
}
}
// 2010.04.22 - prodongi
SUIAuctionTenderWnd::~SUIAuctionTenderWnd()
{
SAFE_DELETE_ARRAY(auction::tender::deco_list_item_l);
}
// tender window ----------------------------------------------------------------------------------
void SUIAuctionTenderWnd::ItemImporter::operator()( item_t& item )
{
// sonador 7.0.23 Mantis 0002812: [경매장] 불필요한 대장장이 Lv 표시 제거 요청
const ItemBaseEx_info* itemBaseInfo = GetItemDB().GetItemData( item.item_info.Code );
if( !itemBaseInfo )
return;
sui::proxy_list::item_t* element = new sui::proxy_list::item_t();
element->add( &( new sui::property( "id" ) )->set_value( item.auction_uid ) );
element->add( &( new sui::property( "icon" ) )->set_resource( &item.item_info ) );
if( GetItemDB().IsJoin( item.item_info.Code, IsInstanceUnstackable( item.item_info.Flag ) ) && item.item_info.count > 0 )
element->add( &( new sui::property( "item_count" ) )->set_value< money_t::value_t >( item.item_info.count ) );
int nEnhance = (int)item.item_info.enhance;
if( nEnhance > 0 )
{
element->add( &( new sui::property( "item_s" ) )->set_value( nEnhance ) );
}
element->add( &( new sui::property( "item_n" ) )->set_value( GetStringDB().GetString( itemBaseInfo->nNameId ) ) );
// sonador 7.0.23 Mantis 0002812: [경매장] 불필요한 대장장이 Lv 표시 제거 요청
// sonador 7.0.28 카오스 스톤 Lv 표시 활성화
if( SUIDisplayInfo::IsEnhanceableItem( item.item_info.Code, itemBaseInfo ) && itemBaseInfo->nGroup != ItemBase::GROUP_SKILLCARD )
{
element->add( &( new sui::property( "item_l" ) )->set_value( (int)item.item_info.level ) );
}
element->add( &( new sui::property( "status" ) )->set_value( item.status ) );
element->add( &( new sui::property( "limittime" ) )->set_value( (int)item.duration_type ) );
element->add( &( new sui::property( "tender_rac" ) )->set_value( S( 6618 ) ) );
if( item.instant_purchase_price > 0 )
element->add( &( new sui::property( "purchase_rac" ) )->set_value( S( 6618 ) ) );
element->add( &( new sui::property( "tender" ) )->set_value< money_t::value_t >( money_t( item.bidded_price ).getAmount() ) );
element->add( &( new sui::property( "purchase" ) )->set_value< money_t::value_t >( money_t( item.instant_purchase_price ).getAmount() ) );
m_target_list.add( element );
}
bool SUIAuctionTenderWnd::InitControls( KPoint kPos )
{
// init controls here...
//'Lv'을 String DB 9501로 참조하도록 한다 2009.09.25. sfreer
if(auction::tender::deco_list_item_l == NULL)
{
std::string str_deco_list_item_l = "<#ffeab1><vcenter><left><size:10><shadow>";
str_deco_list_item_l += GetStringDB().GetString( 9501 );
str_deco_list_item_l += "%s";
auction::tender::deco_list_item_l = new char[str_deco_list_item_l.length()+1];
memset(auction::tender::deco_list_item_l,0,str_deco_list_item_l.length()+1);
strcpy(auction::tender::deco_list_item_l,str_deco_list_item_l.c_str());
}
// bid edit control
m_pEditBid = dynamicCast< KUIControlEdit* >( GetChild( auction::tender::bid_edit ) );
if( m_pEditBid )
{
m_pEditBid->SetOnlyNumber( true );
m_pEditBid->SetLimitation( auction::rule::INPUT_NUMBER_LIMIT );
m_pEditBid->SetFont( "Default" );
m_pEditBid->SetFontSize( 9 );
m_pEditBid->SetText( "" );
m_pEditBid->SetCaptionAlign( KTextRender::KTALIGN_VCENTER | KTextRender::KTALIGN_RIGHT );
}
// item list view
m_ItemList.initialize( auction::tender::list_back, auction::tender::list_select, auction::tender::list_scrollbar );
m_ItemList.add_column( auction::tender::list_icon , new auction::kui_window_item_icon_property( "icon", m_pDisplayInfo, this, m_InventoryMgr ) );
m_ItemList.add_column( auction::tender::list_item_count , new sui::kui_window_caption_property( "item_count", auction::tender::deco_list_item_count ) );
m_ItemList.add_column( auction::tender::list_item_s , new sui::kui_window_caption_property( "item_s", auction::tender::deco_list_item_s ) );
m_ItemList.add_column( auction::tender::list_item_n , new sui::kui_window_caption_property( "item_n", auction::tender::deco_list_item_n ) );
m_ItemList.add_column( auction::tender::list_item_l , new sui::kui_window_caption_property( "item_l", auction::tender::deco_list_item_l ) );//str_deco_list_item_l.c_str() ) );
m_ItemList.add_column( auction::tender::list_limittime , new auction::kui_window_limittime_caption_property( "limittime", auction::tender::deco_list_limittime ) );
m_ItemList.add_column( auction::tender::list_tender_rac , new sui::kui_window_caption_property( "tender_rac", auction::tender::deco_rupy ) );
m_ItemList.add_column( auction::tender::list_purchase_rac , new sui::kui_window_caption_property( "purchase_rac", auction::tender::deco_rupy ) );
m_ItemList.add_column( auction::tender::list_tender , new sui::kui_window_numeric_caption_property( "tender", auction::tender::deco_money ) );
m_ItemList.add_column( auction::tender::list_state , new auction::kui_window_bidded_status_caption_property( "status", auction::tender::deco_list_state ) );
m_ItemList.add_column( auction::tender::list_purchase , new auction::kui_window_purchase_price_caption_property( "purchase", auction::tender::deco_money, S( 993 ) ) );
// selected item view
m_SelectedItem.initialize( auction::tender::selected_back, 0, 0 );
m_SelectedItem.add_column( auction::tender::selected_icon , new auction::kui_window_item_icon_property( "icon", m_pDisplayInfo, this, m_InventoryMgr ) );
m_SelectedItem.add_column( auction::tender::selected_item_count , new sui::kui_window_caption_property( "item_count", auction::tender::deco_list_item_count ) );
m_SelectedItem.add_column( auction::tender::selected_item_s , new sui::kui_window_caption_property( "item_s", auction::tender::deco_list_item_s ) );
m_SelectedItem.add_column( auction::tender::selected_item_n , new sui::kui_window_caption_property( "item_n", auction::tender::deco_list_item_n ) );
m_SelectedItem.add_column( auction::tender::selected_item_l , new sui::kui_window_caption_property( "item_l", auction::tender::deco_list_item_l ) );//str_deco_list_item_l.c_str() ) );
m_SelectedItem.add_column( auction::tender::selected_limittime , new auction::kui_window_limittime_caption_property( "limittime", auction::tender::deco_list_limittime ) );
m_SelectedItem.add_column( auction::tender::selected_tender_rac , new sui::kui_window_caption_property( "tender_rac", auction::tender::deco_rupy ) );
m_SelectedItem.add_column( auction::tender::selected_purchase_rac , new sui::kui_window_caption_property( "purchase_rac", auction::tender::deco_rupy ) );
m_SelectedItem.add_column( auction::tender::selected_tender , new sui::kui_window_numeric_caption_property( "tender", auction::tender::deco_money ) );
m_SelectedItem.add_column( auction::tender::selected_state , new auction::kui_window_bidded_status_caption_property( "status", auction::tender::deco_list_state ) );
m_SelectedItem.add_column( auction::tender::selected_purchase , new auction::kui_window_purchase_price_caption_property( "purchase", auction::tender::deco_money, S( 993 ) ) );
std::string caption;
XStringUtil::Format( caption, auction::tender::deco_rupy, S( 6618 ) );
KUIControlStatic* pRupy = dynamicCast< KUIControlStatic* >( GetChild( auction::tender::bid_rupy ) );
if( pRupy )
pRupy->SetCaption( caption.c_str() );
// pages..
m_pCtrlCurrentPage = dynamicCast< KUIControlStatic* >( GetChild( auction::tender::page_now ) );
m_pCtrlEndPage = dynamicCast< KUIControlStatic* >( GetChild( auction::tender::page_max ) );
// page button
m_pRetenderButton = dynamicCast< KUIControlButton* >( GetChild( auction::tender::retender ) );
m_pPurchaseButton = dynamicCast< KUIControlButton* >( GetChild( auction::tender::purchase ) );
KUIControlSimpleButton* pPrevButton = dynamicCast< KUIControlSimpleButton* >( GetChild( auction::tender::page_left ) ); // 2011.11.24 - servantes : KUIControlButton -> KUIControlSimpleButton 으로 변경
KUIControlSimpleButton* pNextButton = dynamicCast< KUIControlSimpleButton* >( GetChild( auction::tender::page_right ) ); // 2011.11.24 - servantes : KUIControlButton -> KUIControlSimpleButton 으로 변경
m_Page.SetButton( pPrevButton, pNextButton );
// ticking buttons..
m_LazyMsgPoster.AppendAction( new sui::ActionBinder( new sui::ActionDisableControl( m_pRetenderButton ), new sui::ActionEnableControl( m_pRetenderButton ), 0 ) );
m_LazyMsgPoster.AppendAction( new sui::ActionBinder( new sui::ActionDisableControl( m_pPurchaseButton ), new sui::ActionEnableControl( m_pPurchaseButton ), 0 ) );
m_LazyMsgPoster.AppendAction( new sui::ActionBinder( new sui::ActionHideControl( pPrevButton ), new sui::ActionShowControl( pPrevButton ), 0 ) );
m_LazyMsgPoster.AppendAction( new sui::ActionBinder( new sui::ActionHideControl( pNextButton ), new sui::ActionShowControl( pNextButton ), 0 ) );
return SUIWnd::InitControls( kPos );
}
bool SUIAuctionTenderWnd::InitData( bool bReload )
{
// init data here...
return SUIWnd::InitData( bReload );
}
void* SUIAuctionTenderWnd::Perform( KID id, KArg& msg )
{
// process perform message here...
return SUIWnd::Perform( id, msg );
}
void SUIAuctionTenderWnd::PumpUpMessage( LPCTSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam )
{
// process control message here...
m_ItemList.proc_pumpup( lpszControlID, nMessage, lparam, wparam );
switch( nMessage )
{
case KUI_MESSAGE::KBUTTON_CLICK:
{
if( ::_stricmp( lpszControlID, "IDOK" ) == 0 )
{
// 요청한 윈도우로 보내준다.
}
else if( ::stricmp( lpszControlID, auction::tender::column_item ) == 0 )
{
_SortItemListByColumn( COLUMN::ITEM );
m_ItemList.update_data();
m_SelectedItem.clear();
m_SelectedItem.update_data();
}
else if( ::stricmp( lpszControlID, auction::tender::column_state ) == 0 )
{
_SortItemListByColumn( COLUMN::STATE );
m_ItemList.update_data();
m_SelectedItem.clear();
m_SelectedItem.update_data();
}
else if( ::stricmp( lpszControlID, auction::tender::column_limittime ) == 0 )
{
_SortItemListByColumn( COLUMN::LIMITTIME );
m_ItemList.update_data();
m_SelectedItem.clear();
m_SelectedItem.update_data();
}
else if( ::stricmp( lpszControlID, auction::tender::column_tender ) == 0 )
{
_SortItemListByColumn( COLUMN::TENDER );
m_ItemList.update_data();
m_SelectedItem.clear();
m_SelectedItem.update_data();
}
else if( ::stricmp( lpszControlID, auction::tender::column_purchase ) == 0 )
{
_SortItemListByColumn( COLUMN::PURCHASE );
m_ItemList.update_data();
m_SelectedItem.clear();
m_SelectedItem.update_data();
}
else if( ::stricmp( lpszControlID, auction::tender::page_left ) == 0 )
{
_RequestBiddedList( m_Page.Prev() );
m_bMaintainListState = false;
}
else if( ::stricmp( lpszControlID, auction::tender::page_right ) == 0 )
{
_RequestBiddedList( m_Page.Next() );
m_bMaintainListState = false;
}
else if( ::stricmp( lpszControlID, auction::tender::retender ) == 0 )
{
_RequestBid();
}
else if( ::stricmp( lpszControlID, auction::tender::purchase ) == 0 )
{
_RequestInstantPurchase();
}
}
break;
case KUI_MESSAGE::KLIST_ITEM_SELECT:
{
// message from item list...
if( ::stricmp( lpszControlID, "item_list" ) == 0 )
{
int index = static_cast< int >( lparam );
sui::proxy_list::item_t* item = m_ItemList.at( index );
if( item )
{
m_SelectedItem.clear();
m_SelectedItem.add( new sui::proxy_list::item_t( *item ) );
m_SelectedItem.update_data();
//_UpdateBidablePrice( auction::rule::GetBiddablePrice( ( *item )[ "tender" ]->get_int_value() ) );
money_t::value_t tenderMoney;
(*item)[ "tender" ].get_value< money_t::value_t >( tenderMoney );
_UpdateBidablePrice( auction::rule::GetBiddablePrice( money_t( tenderMoney ) ) ); // sonador 7.0.24 경매장 입찰금 자동 입력 오류 수정
}
}
}
break;
case KUI_MESSAGE::KLIST_ITEM_LDBLCLK:
break;
case KUI_MESSAGE::KEDIT_CHANGE:
{
if( ::_stricmp( lpszControlID, auction::tender::bid_edit ) == 0 )
{
_UpdateBidablePrice( auction::rule::GetPriceFrom( m_pEditBid ) );
}
}
break;
/// 2011.05.13 - prodongi
case KUI_MESSAGE::KICON_RCLICK:
{
if( ::stricmp( lpszControlID, "item_list" ) == 0 )
{
int index = static_cast< int >( lparam );
sui::proxy_list::item_t* item = m_ItemList.at( index );
if( item )
{
TS_ITEM_BASE_INFO* info = 0;
item->get( "icon" ).get_resource( info );
if(info && GetItemDB().GetGroup(info->Code) == ItemBase::GROUP_SUMMONCARD )
{
SMSG_SUMMON_CARD_ITEM_INFO msg;
msg.level = info->level;
memcpy(&msg.item_info, info, sizeof (msg.item_info));
m_pGameManager->ProcMsgAtStatic(&msg);
}
}
}
}
break;
}
SUIWnd::PumpUpMessage( lpszControlID, nMessage, lparam, wparam );
}
void SUIAuctionTenderWnd::ProcMsgAtStatic( SGameMessage* pMsg )
{
// process game message here...
switch( pMsg->nType )
{
case IMSG_RES_AUCTION_BIDDED_LIST:
{
SIMSG_RES_AUCTION_BIDDED_LIST* msg = dynamicCast< SIMSG_RES_AUCTION_BIDDED_LIST* >( pMsg );
if( !msg )
break;
// update page
_UpdatePage( msg->page_num, msg->total_page_count );
// import auction items to list
if( m_bMaintainListState )
m_ItemList.save_state();
m_ItemList.clear();
if( msg->auction_info_count > 0 )
{
std::for_each( msg->auction_info, msg->auction_info + msg->auction_info_count, ItemImporter( m_ItemList ) );
_SortItemListByColumn( m_nSavedSortingState, true );
if( m_bMaintainListState )
m_ItemList.load_state();
}
m_bMaintainListState = true;
m_ItemList.update_data();
m_SelectedItem.clear();
m_SelectedItem.update_data();
_UpdateBidablePrice();
}
break;
case MSG_RESULT:
{
SMSG_RESULT* msg = dynamicCast< SMSG_RESULT* >( pMsg );
switch( msg->request_msg_id )
{
case TM_CS_AUCTION_BIDDED_LIST:
if( msg->result == RESULT_NOT_EXIST )
{
m_ItemList.clear();
m_ItemList.update_data();
m_SelectedItem.clear();
m_SelectedItem.update_data();
}
break;
}
}
break;
case IMSG_HOTKEY_EX:
{
SIMSG_HOTKEY_EX* pHotKey = dynamicCast<SIMSG_HOTKEY_EX*>(pMsg);
if( pHotKey->wParam == VK_SHIFT )
m_bShiftKey = (pHotKey->bUp == 0); //servantes 2010.10.15
if( pHotKey->wParam == VK_CONTROL ) //servantes 2010.10.15
m_bControlKey = (pHotKey->bUp == 0);
if( pHotKey->wParam == VK_MENU )
{
bool bPreState = m_bAltKey;
m_bAltKey = (pHotKey->bUp == 0);
if( bPreState != m_bAltKey && IsShow() )
{
m_ItemList.update_data();
m_SelectedItem.update_data();
}
}
}
break;
}
}
void SUIAuctionTenderWnd::OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd )
{
SUIWnd::OnNotifyUIWindowOpen( bOpen, bLimitWnd );
if( bOpen )
{
// temporary import data
RefreshCategory();
_RequestBiddedList();
//m_NoticeBox.AppendUrgent( "입찰한 물품들..." );
}
else
{
m_ItemList.clear();
m_SelectedItem.clear();
}
}
DWORD SUIAuctionTenderWnd::OnMouseMessage( DWORD dwMessage, int x, int y )
{
DWORD dwRet = SUIWnd::OnMouseMessage( dwMessage, x, y );
if( KMR_NO_GET & dwRet )
return dwRet;
m_ItemList.proc_mouse( dwMessage, x, y );
return dwRet;
}
void SUIAuctionTenderWnd::RefreshCategory()
{
m_ItemList.clear();
m_ItemList.update_data();
m_SelectedItem.clear();
m_SelectedItem.update_data();
_UpdatePage();
_UpdateBidablePrice();
m_bMaintainListState = false;
}
void SUIAuctionTenderWnd::_UpdatePage( int nCurrent, int nTotal )
{
std::string strCurrentPage, strEndPage;
m_Page.Update( nCurrent, nTotal );
XStringUtil::Format( strCurrentPage, auction::tender::deco_page_now, m_Page.Current() );
XStringUtil::Format( strEndPage, auction::tender::deco_page_max, m_Page.End() );
m_pCtrlCurrentPage->SetCaption( strCurrentPage.c_str() );
m_pCtrlEndPage->SetCaption( strEndPage.c_str() );
}
void SUIAuctionTenderWnd::_UpdateBidablePrice( money_t nPrice )
{
if( m_pEditBid == 0 )
return;
if( m_SelectedItem.empty() || !m_SelectedItem[ 0 ] )
{
auction::rule::SetPriceTo( m_pEditBid, money_t( 0 ) );
return;
}
item_list_t::item_t& item = *m_SelectedItem[ 0 ];
bool bEditBid = true, bRetender = true, bPurchase = true;
if( item[ "status" ].get_uchar_value() == TS_SC_AUCTION_BIDDED_LIST::BIDDED_AUCTION_LIST::STATUS_MINE )
{
bEditBid = false;
bRetender = false;
}
// normalize the price...
auction::rule::NormalizeBasePrice( nPrice );
auction::rule::SetPriceTo( m_pEditBid, nPrice );
money_t nBidablePrice = auction::rule::GetBiddablePrice( money_t( item[ "tender" ].get_int64_value() ) );
//int nCurrentBidingPrice = auction::rule::GetPriceFrom( m_pEditBid );
money_t nPurchasePrice = money_t( item[ "purchase" ].get_int64_value() );
if( nBidablePrice >= nPurchasePrice && nPurchasePrice > 0 )
{
//m_NoticeBox.AppendUrgent( S( -543 ) ); // 최소 입찰 가능 가격이 즉시 구매 가격보다 높아 즉시 구매만 가능합니다.
bEditBid = false;
bRetender = false;
}
if( nPrice < nBidablePrice )
{
m_NoticeBox.AppendUrgent( S( 984 ) ); // "기존 입찰 가격보다 5% 이상 높은 가격으로만 입찰 할 수 있습니다."
bRetender = false;
}
if( nPrice >= nPurchasePrice && nPurchasePrice > 0 )
{
m_NoticeBox.AppendUrgent( S( 985 ) );
bRetender = false;
}
if( nPurchasePrice <= 0 )
bPurchase = false;
m_pEditBid->SetShow( bEditBid );
m_pRetenderButton->SetShow( bRetender );
m_pPurchaseButton->SetShow( bPurchase );
}
void SUIAuctionTenderWnd::_GetTemporaryListData()
{
}
void SUIAuctionTenderWnd::_RequestBiddedList( int nPage )
{
SIMSG_REQ_AUCTION_BIDDED_LIST* pMsg = new SIMSG_REQ_AUCTION_BIDDED_LIST( nPage );
m_LazyMsgPoster.PostMsgAtDynamic( pMsg );
}
void SUIAuctionTenderWnd::_RequestBid()
{
if( !m_SelectedItem.empty() && m_SelectedItem[ 0 ] )
{
item_list_t::item_t& prop = *m_SelectedItem[ 0 ];
money_t nBiddingPrice = auction::rule::GetPriceFrom( m_pEditBid );
auction::rule::NormalizeBasePrice( nBiddingPrice );
SIMSG_REQ_AUCTION_BID* pMsg = new SIMSG_REQ_AUCTION_BID();
pMsg->auction_uid = prop[ "id" ].get_int_value();
pMsg->bidding_price = nBiddingPrice;
m_pGameManager->PostMsgAtDynamic( pMsg );
// request updated list
_RequestBiddedList( m_Page.Current() );
}
}
void SUIAuctionTenderWnd::_RequestInstantPurchase()
{
if( !m_SelectedItem.empty() && m_SelectedItem[ 0 ] )
{
// request bid
SIMSG_REQ_AUCTION_INSTANT_PURCHASE* pMsg = new SIMSG_REQ_AUCTION_INSTANT_PURCHASE();
item_list_t::item_t& prop = *m_SelectedItem[ 0 ];
pMsg->auction_uid = prop[ "id" ].get_int_value();
m_pGameManager->PostMsgAtDynamic( pMsg );
// request updated list
int nReqPage = m_Page.Current();
if( m_ItemList.size() == 1 && nReqPage == m_Page.End() )
nReqPage = m_Page.Prev();
_RequestBiddedList( nReqPage );
}
}
void SUIAuctionTenderWnd::_SortItemListByColumn( COLUMN id, bool maintain )
{
if( !maintain )
m_bSortButtonState[ id ] = !m_bSortButtonState[ id ];
// default sorting... by auction id
m_ItemList.sort< int >( "id", auction::ColumnCompareLessThen< int >() );
switch( id )
{
case COLUMN::ITEM:
m_ItemList.stable_sort< int >( "item_l", auction::ColumnCompareLessThen< int >() );
if( m_bSortButtonState[ id ] == 0 )
m_ItemList.stable_sort< std::string >( "item_n", auction::ColumnCompareLessThen< std::string >() );
else
m_ItemList.stable_sort< std::string >( "item_n", auction::ColumnCompareMoreThen< std::string >() );
break;
case COLUMN::LIMITTIME:
if( m_bSortButtonState[ id ] == 0 )
m_ItemList.stable_sort< int >( "limittime", auction::ColumnCompareLessThen< int >() );
else
m_ItemList.stable_sort< int >( "limittime", auction::ColumnCompareMoreThen< int >() );
break;
case COLUMN::TENDER:
if( m_bSortButtonState[ id ] == 0 )
m_ItemList.stable_sort< money_t::value_t >( "tender", auction::ColumnCompareLessThen< money_t::value_t >() );
else
m_ItemList.stable_sort< money_t::value_t >( "tender", auction::ColumnCompareMoreThen< money_t::value_t >() );
break;
case COLUMN::STATE:
if( m_bSortButtonState[ id ] == 0 )
m_ItemList.stable_sort< unsigned char >( "status", auction::ColumnCompareLessThen< unsigned char >() );
else
m_ItemList.stable_sort< unsigned char >( "status", auction::ColumnCompareMoreThen< unsigned char >() );
break;
case COLUMN::PURCHASE:
if( m_bSortButtonState[ id ] == 0 )
m_ItemList.stable_sort< money_t::value_t >( "purchase", auction::ColumnCompareLessThen< money_t::value_t >() );
else
m_ItemList.stable_sort< money_t::value_t >( "purchase", auction::ColumnCompareMoreThen< money_t::value_t >() );
break;
default:
return;
}
m_nSavedSortingState = id;
}