www.pudn.com > Five_QT_by_CT.rar > hall.cpp


#include "stdio.h"
#include "hall.h"



Hall::Hall(QWidget *parent , char *name)
	:QWidget(parent , name)
	
{


	mHallMaster=new HallMaster(this, 0);	
	mLoginButton =new QPushButton(this , 0 );
	mQuitButton=new QPushButton(this , 0 ) ;
	mWhiteButton=new QPushButton(this, 0 );
	mBlackButton=new QPushButton(this, 0 );
	mPlayerListView=new QListView(this);
	mDeskListView = new QListView(this);
	mPlayerInfoLabel= new QLabel ( this,  0,  0 );
	mDeskInfoLabel= new QLabel ( this,  0,  0 );
	mMyIDLabel=new QLabel ( this,  0,  0 ); 
	mMyDeskLabel=new QLabel ( this,  0,  0 );
	mAddrLineEdit=new QLineEdit( this, 0 );
	mAddrLabel= new QLabel (QString ("Set Server IP:"), this, 0, 0);
	mAddrInfoLabel=new QLabel (QString ("Current Server IP:"), this, 0, 0);
	mMain=new Main(0,0);

	mPlayerInfoLabel->setGeometry(10,20,200,30);
	mDeskInfoLabel->setGeometry(250,20,200,30);
	mMyIDLabel->setGeometry(10,10,170,40);
	mMyDeskLabel->setGeometry(250,10,200,40);
	mPlayerListView->setGeometry(10,60,200,320);
	mDeskListView->setGeometry(250,60,200,320);
	mLoginButton->setGeometry(10,390,100,30);
	mQuitButton->setGeometry(110,390,100,30);
	mWhiteButton->setGeometry(250,390,100,30);
	mBlackButton->setGeometry(350,390,100,30);
	mAddrLineEdit->setGeometry(110,440,100,20);
	mAddrLabel->setGeometry(10,440,100,20);
	mAddrInfoLabel->setGeometry(10,460,200,20);

	mLoginButton->setText("Login");
	mQuitButton->setText("Quit");
	mWhiteButton->setText("White");
	mBlackButton->setText("Black");
	//setBackgroundPixmap(QPixmap("chessboard6_xmp"));
	mPlayerInfoLabel->setText(QString("Players:"));
	mDeskInfoLabel->setText(QString("Desks:"));
	mMyIDLabel->setText(QString("Your ID:"));
	mMyDeskLabel->setText(QString("Your desk num:"));
	mPlayerInfoLabel->setFont( QFont( "Helvetica", 14 ) );
	mDeskInfoLabel->setFont( QFont( "Helvetica", 14 ) );
	mMyIDLabel->setFont( QFont( "Helvetica", 16 ) );
	mMyDeskLabel->setFont( QFont( "Helvetica", 16 ) );


	setMaximumSize(QSize(500,490));
	setMinimumSize(QSize(500,490));
	
	mPlayerListView->addColumn( "PlayerID" );
    	//mPlayerListView->addColumn( "State" );
    	//mPlayerListView->addColumn( "OpID" );
	mPlayerListView->setAllColumnsShowFocus( TRUE );
    	mPlayerListView->setSelectionMode( QListView::Single );

	mDeskListView->addColumn( "TableNum" );
    	mDeskListView->addColumn( "WhiteID" );
    	mDeskListView->addColumn( "BlackID" );
	mDeskListView->setAllColumnsShowFocus( TRUE );
    	mDeskListView->setSelectionMode( QListView::Single );


	connect( mLoginButton, SIGNAL(clicked()), this, SLOT(sLogin()) );
	connect( mQuitButton, SIGNAL(clicked()), mHallMaster, SLOT(sonquit()) );
	connect( mWhiteButton, SIGNAL(clicked()), this, SLOT(sSitdownWhite()) );
	connect( mBlackButton, SIGNAL(clicked()), this, SLOT(sSitdownBlack()) );

	connect( mMain, SIGNAL(sendmsgtohall(Message )), mHallMaster, SLOT(sdisposemsg(Message)));
	connect( mHallMaster, SIGNAL(sendmsgtomain(Message)), mMain, SLOT(sdisposemsg(Message)));
	connect( this, SIGNAL(sendmsgtohallmstr(Message)), mHallMaster, SLOT(sdisposemsg(Message)));
	
	connect( mHallMaster, SIGNAL(updatehall()), this, SLOT(sUpDateHall()));
	connect( mHallMaster, SIGNAL(showgameface()), this, SLOT(sShowMain()));
	connect( mHallMaster, SIGNAL(quithall()), qApp, SLOT(quit()) );
	connect( mAddrLineEdit, SIGNAL(returnPressed()), this, SLOT(sSetServeraddr()) );
	
	
	
}

void Hall::sLogin()
{
	mHallMaster->Runner();
	
}


//界面"White"按钮被按下时驱动本函数
void Hall:: sSitdownWhite()
{	
	
	//找到桌号
	
	if(mDeskListView->selectedItem ()==0)
		return;
	QListViewItem * item=mDeskListView->selectedItem ();
	
	//调用HallMaster发送Sitdown()请求
	Message msg;
	msg.mRequest=QString("hallsitdown");
	msg.mContent=item->text(0);
	msg.mContent2=QString("white");
	emit sendmsgtohallmstr(msg);
}


//界面"Black"按钮被按下时驱动本函数
void Hall:: sSitdownBlack()
{	
	//找到桌号
	
	if(mDeskListView->selectedItem ()==0)
		return;
	
	QListViewItem * item=mDeskListView->selectedItem ();

	//调用HallMaster发送Sitdown()请求

	Message msg;
	msg.mRequest=QString("hallsitdown");
	msg.mContent=item->text(0);
	msg.mContent2=QString("black");
	emit sendmsgtohallmstr(msg);	
}


//显示mMain
void Hall::sShowMain()
{
	mMain->show();
}



void Hall::sSetServeraddr()
{
	QString addr=mAddrLineEdit->text();

	Message msg;
	msg.mRequest="hallsetserveraddr";
	msg.mContent=addr;
	emit sendmsgtohallmstr( msg );
	mAddrInfoLabel->setText(QString("Current Server IP: ")+addr);
	mAddrLineEdit->clear();
}



//QListView的更新比较特殊,单独用一个函数来加条目
void Hall::AddPlayerListItem(int i)
{
		QListViewItem *item ;
		item = new QListViewItem( mPlayerListView );
		item->setText( 0, mHallMaster->getPlayerID(i) );
        	item->setText( 1, mHallMaster->getPlayerDesknumber(i));	
		mPlayerListView->insertItem ( item );
}



void Hall::AddDeskTableItem(int i)
{
		//转换i为QString
		char tempt[10];
		sprintf(tempt,"%d",i);
		QString num=QString(tempt);

		//添加条目,直接访问到HallMaster 的DeskTable成员
		QListViewItem *item ;
		item = new QListViewItem( mDeskListView );
		item->setText( 0, num );

		QString id=mHallMaster->getDeskWhiteside(i);
		if(id.compare("-1")!=0&&id.compare("0")!=0)
        		item->setText( 1, id );
		
		id=mHallMaster->getDeskBlackside(i);
		if(id.compare("-1")!=0&&id.compare("0")!=0)
        		item->setText( 2, id );
		
		mDeskListView->insertItem ( item );		
}



void Hall::sUpDateHall()
{
	
	int i=1;
	QString id;
	printf("Hall:: updateHall\n");
	
	mPlayerListView->clear();	
	
	//逐条更新playertable
	while(igetPlayerID(i).compare("-1")!=0)
			AddPlayerListItem(i);
        	i++;
	}
	


	//更新桌位信息
	mDeskListView->clear();	
	i=1;
	while(isetText(QString("Your ID:")+mHallMaster->getMyID());
	mMyDeskLabel->setText(QString("Your desk num:")+mHallMaster->getMyDesknumber());
}