fix for issue with selection change in server list be up/down arrow keys
This commit is contained in:
parent
44ff64cc48
commit
99432273c8
2 changed files with 382 additions and 377 deletions
|
@ -1,382 +1,387 @@
|
||||||
/******************************************************************************\
|
/******************************************************************************\
|
||||||
* Copyright (c) 2004-2011
|
* Copyright (c) 2004-2011
|
||||||
*
|
*
|
||||||
* Author(s):
|
* Author(s):
|
||||||
* Volker Fischer
|
* Volker Fischer
|
||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it under
|
* This program is free software; you can redistribute it and/or modify it under
|
||||||
* the terms of the GNU General Public License as published by the Free Software
|
* the terms of the GNU General Public License as published by the Free Software
|
||||||
* Foundation; either version 2 of the License, or (at your option) any later
|
* Foundation; either version 2 of the License, or (at your option) any later
|
||||||
* version.
|
* version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||||
* details.
|
* details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License along with
|
* You should have received a copy of the GNU General Public License along with
|
||||||
* this program; if not, write to the Free Software Foundation, Inc.,
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*
|
*
|
||||||
\******************************************************************************/
|
\******************************************************************************/
|
||||||
|
|
||||||
#include "connectdlg.h"
|
#include "connectdlg.h"
|
||||||
|
|
||||||
|
|
||||||
/* Implementation *************************************************************/
|
/* Implementation *************************************************************/
|
||||||
CConnectDlg::CConnectDlg ( QWidget* parent, Qt::WindowFlags f )
|
CConnectDlg::CConnectDlg ( QWidget* parent, Qt::WindowFlags f )
|
||||||
: QDialog ( parent, f ),
|
: QDialog ( parent, f ),
|
||||||
strSelectedAddress ( "" ),
|
strSelectedAddress ( "" ),
|
||||||
bServerListReceived ( false ),
|
bServerListReceived ( false ),
|
||||||
bStateOK ( false ),
|
bStateOK ( false ),
|
||||||
bServerListItemWasChosen ( false )
|
bServerListItemWasChosen ( false )
|
||||||
{
|
{
|
||||||
setupUi ( this );
|
setupUi ( this );
|
||||||
|
|
||||||
|
|
||||||
// Add help text to controls -----------------------------------------------
|
// Add help text to controls -----------------------------------------------
|
||||||
// server address
|
// server address
|
||||||
QString strServAddrH = tr ( "<b>Server Address:</b> The IP address or URL "
|
QString strServAddrH = tr ( "<b>Server Address:</b> The IP address or URL "
|
||||||
"of the server running the llcon server software must be set here. "
|
"of the server running the llcon server software must be set here. "
|
||||||
"A list of the most recent used server URLs is available for "
|
"A list of the most recent used server URLs is available for "
|
||||||
"selection." );
|
"selection." );
|
||||||
|
|
||||||
TextLabelServerAddr->setWhatsThis ( strServAddrH );
|
TextLabelServerAddr->setWhatsThis ( strServAddrH );
|
||||||
LineEditServerAddr->setWhatsThis ( strServAddrH );
|
LineEditServerAddr->setWhatsThis ( strServAddrH );
|
||||||
|
|
||||||
LineEditServerAddr->setAccessibleName ( tr ( "Server address edit box" ) );
|
LineEditServerAddr->setAccessibleName ( tr ( "Server address edit box" ) );
|
||||||
LineEditServerAddr->setAccessibleDescription ( tr ( "Holds the current server "
|
LineEditServerAddr->setAccessibleDescription ( tr ( "Holds the current server "
|
||||||
"URL. It also stores old URLs in the combo box list." ) );
|
"URL. It also stores old URLs in the combo box list." ) );
|
||||||
|
|
||||||
|
|
||||||
// init server address combo box (max MAX_NUM_SERVER_ADDR_ITEMS entries)
|
// init server address combo box (max MAX_NUM_SERVER_ADDR_ITEMS entries)
|
||||||
LineEditServerAddr->setMaxCount ( MAX_NUM_SERVER_ADDR_ITEMS );
|
LineEditServerAddr->setMaxCount ( MAX_NUM_SERVER_ADDR_ITEMS );
|
||||||
LineEditServerAddr->setInsertPolicy ( QComboBox::NoInsert );
|
LineEditServerAddr->setInsertPolicy ( QComboBox::NoInsert );
|
||||||
|
|
||||||
// set up list view for connected clients
|
// set up list view for connected clients
|
||||||
ListViewServers->setColumnWidth ( 0, 170 );
|
ListViewServers->setColumnWidth ( 0, 170 );
|
||||||
ListViewServers->setColumnWidth ( 1, 65 );
|
ListViewServers->setColumnWidth ( 1, 65 );
|
||||||
ListViewServers->setColumnWidth ( 2, 55 );
|
ListViewServers->setColumnWidth ( 2, 55 );
|
||||||
ListViewServers->setColumnWidth ( 3, 130 );
|
ListViewServers->setColumnWidth ( 3, 130 );
|
||||||
ListViewServers->clear();
|
ListViewServers->clear();
|
||||||
|
|
||||||
|
|
||||||
// Connections -------------------------------------------------------------
|
// Connections -------------------------------------------------------------
|
||||||
// list view
|
// list view
|
||||||
QObject::connect ( ListViewServers,
|
QObject::connect ( ListViewServers,
|
||||||
SIGNAL ( itemClicked ( QTreeWidgetItem*, int ) ),
|
SIGNAL ( itemSelectionChanged() ),
|
||||||
this, SLOT ( OnServerListItemClicked ( QTreeWidgetItem*, int ) ) );
|
this, SLOT ( OnServerListItemSelectionChanged() ) );
|
||||||
|
|
||||||
QObject::connect ( ListViewServers,
|
QObject::connect ( ListViewServers,
|
||||||
SIGNAL ( itemDoubleClicked ( QTreeWidgetItem*, int ) ),
|
SIGNAL ( itemDoubleClicked ( QTreeWidgetItem*, int ) ),
|
||||||
this, SLOT ( OnServerListItemDoubleClicked ( QTreeWidgetItem*, int ) ) );
|
this, SLOT ( OnServerListItemDoubleClicked ( QTreeWidgetItem*, int ) ) );
|
||||||
|
|
||||||
// combo boxes
|
// combo boxes
|
||||||
QObject::connect ( LineEditServerAddr,
|
QObject::connect ( LineEditServerAddr,
|
||||||
SIGNAL ( editTextChanged ( const QString& ) ),
|
SIGNAL ( editTextChanged ( const QString& ) ),
|
||||||
this, SLOT ( OnLineEditServerAddrEditTextChanged ( const QString& ) ) );
|
this, SLOT ( OnLineEditServerAddrEditTextChanged ( const QString& ) ) );
|
||||||
|
|
||||||
// buttons
|
// buttons
|
||||||
QObject::connect ( CancelButton, SIGNAL ( clicked() ),
|
QObject::connect ( CancelButton, SIGNAL ( clicked() ),
|
||||||
this, SLOT ( close() ) );
|
this, SLOT ( close() ) );
|
||||||
|
|
||||||
QObject::connect ( ConnectButton, SIGNAL ( clicked() ),
|
QObject::connect ( ConnectButton, SIGNAL ( clicked() ),
|
||||||
this, SLOT ( OnConnectButtonClicked() ) );
|
this, SLOT ( OnConnectButtonClicked() ) );
|
||||||
|
|
||||||
// timers
|
// timers
|
||||||
QObject::connect ( &TimerPing, SIGNAL ( timeout() ),
|
QObject::connect ( &TimerPing, SIGNAL ( timeout() ),
|
||||||
this, SLOT ( OnTimerPing() ) );
|
this, SLOT ( OnTimerPing() ) );
|
||||||
|
|
||||||
QObject::connect ( &TimerReRequestServList, SIGNAL ( timeout() ),
|
QObject::connect ( &TimerReRequestServList, SIGNAL ( timeout() ),
|
||||||
this, SLOT ( OnTimerReRequestServList() ) );
|
this, SLOT ( OnTimerReRequestServList() ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::LoadStoredServers ( const CVector<QString>& vstrIPAddresses )
|
void CConnectDlg::LoadStoredServers ( const CVector<QString>& vstrIPAddresses )
|
||||||
{
|
{
|
||||||
// load stored IP addresses in combo box
|
// load stored IP addresses in combo box
|
||||||
LineEditServerAddr->clear();
|
LineEditServerAddr->clear();
|
||||||
for ( int iLEIdx = 0; iLEIdx < MAX_NUM_SERVER_ADDR_ITEMS; iLEIdx++ )
|
for ( int iLEIdx = 0; iLEIdx < MAX_NUM_SERVER_ADDR_ITEMS; iLEIdx++ )
|
||||||
{
|
{
|
||||||
if ( !vstrIPAddresses[iLEIdx].isEmpty() )
|
if ( !vstrIPAddresses[iLEIdx].isEmpty() )
|
||||||
{
|
{
|
||||||
LineEditServerAddr->addItem ( vstrIPAddresses[iLEIdx] );
|
LineEditServerAddr->addItem ( vstrIPAddresses[iLEIdx] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::showEvent ( QShowEvent* )
|
void CConnectDlg::showEvent ( QShowEvent* )
|
||||||
{
|
{
|
||||||
// reset flags (on opening the connect dialg, we always want to request a
|
// reset flags (on opening the connect dialg, we always want to request a
|
||||||
// new updated server list per definition)
|
// new updated server list per definition)
|
||||||
bServerListReceived = false;
|
bServerListReceived = false;
|
||||||
bStateOK = false;
|
bStateOK = false;
|
||||||
bServerListItemWasChosen = false;
|
bServerListItemWasChosen = false;
|
||||||
|
|
||||||
// clear current address
|
// clear current address
|
||||||
strSelectedAddress = "";
|
strSelectedAddress = "";
|
||||||
|
|
||||||
// clear server list view
|
// clear server list view
|
||||||
ListViewServers->clear();
|
ListViewServers->clear();
|
||||||
|
|
||||||
|
|
||||||
// TEST
|
// TEST
|
||||||
QString strNAddr = "llcon.dyndns.org:22122";
|
QString strNAddr = "llcon.dyndns.org:22122";
|
||||||
|
|
||||||
|
|
||||||
// get the IP address of the central server (using the ParseNetworAddress
|
// get the IP address of the central server (using the ParseNetworAddress
|
||||||
// function) when the connect dialog is opened, this seems to be the correct
|
// function) when the connect dialog is opened, this seems to be the correct
|
||||||
// time to do it
|
// time to do it
|
||||||
if ( LlconNetwUtil().ParseNetworkAddress ( strNAddr,
|
if ( LlconNetwUtil().ParseNetworkAddress ( strNAddr,
|
||||||
CentralServerAddress ) )
|
CentralServerAddress ) )
|
||||||
{
|
{
|
||||||
// send the request for the server list
|
// send the request for the server list
|
||||||
emit ReqServerListQuery ( CentralServerAddress );
|
emit ReqServerListQuery ( CentralServerAddress );
|
||||||
|
|
||||||
// start timer, if this message did not get any respond to retransmit
|
// start timer, if this message did not get any respond to retransmit
|
||||||
// the server list request message
|
// the server list request message
|
||||||
TimerReRequestServList.start ( SERV_LIST_REQ_UPDATE_TIME_MS );
|
TimerReRequestServList.start ( SERV_LIST_REQ_UPDATE_TIME_MS );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::hideEvent ( QHideEvent* )
|
void CConnectDlg::hideEvent ( QHideEvent* )
|
||||||
{
|
{
|
||||||
// get the IP address to be used according to the following definitions:
|
// get the IP address to be used according to the following definitions:
|
||||||
// - if the list has focus and a line is selected, use this line
|
// - if the list has focus and a line is selected, use this line
|
||||||
// - if the list has no focus, use the current combo box text
|
// - if the list has no focus, use the current combo box text
|
||||||
QList<QTreeWidgetItem*> CurSelListItemList =
|
QList<QTreeWidgetItem*> CurSelListItemList =
|
||||||
ListViewServers->selectedItems();
|
ListViewServers->selectedItems();
|
||||||
|
|
||||||
if ( CurSelListItemList.count() > 0 )
|
if ( CurSelListItemList.count() > 0 )
|
||||||
{
|
{
|
||||||
// get host address from selected list view item as a string
|
// get host address from selected list view item as a string
|
||||||
strSelectedAddress =
|
strSelectedAddress =
|
||||||
CurSelListItemList[0]->data ( 0, Qt::UserRole ).toString();
|
CurSelListItemList[0]->data ( 0, Qt::UserRole ).toString();
|
||||||
|
|
||||||
// set flag that a server list item was chosen to connect
|
// set flag that a server list item was chosen to connect
|
||||||
bServerListItemWasChosen = true;
|
bServerListItemWasChosen = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strSelectedAddress = LineEditServerAddr->currentText();
|
strSelectedAddress = LineEditServerAddr->currentText();
|
||||||
}
|
}
|
||||||
|
|
||||||
// if window is closed, stop timers
|
// if window is closed, stop timers
|
||||||
TimerPing.stop();
|
TimerPing.stop();
|
||||||
TimerReRequestServList.stop();
|
TimerReRequestServList.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::OnTimerReRequestServList()
|
void CConnectDlg::OnTimerReRequestServList()
|
||||||
{
|
{
|
||||||
// if the server list is not yet received, retransmit the request for the
|
// if the server list is not yet received, retransmit the request for the
|
||||||
// server list
|
// server list
|
||||||
if ( !bServerListReceived )
|
if ( !bServerListReceived )
|
||||||
{
|
{
|
||||||
emit ReqServerListQuery ( CentralServerAddress );
|
emit ReqServerListQuery ( CentralServerAddress );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::SetServerList ( const CHostAddress& InetAddr,
|
void CConnectDlg::SetServerList ( const CHostAddress& InetAddr,
|
||||||
const CVector<CServerInfo>& vecServerInfo )
|
const CVector<CServerInfo>& vecServerInfo )
|
||||||
{
|
{
|
||||||
// set flag and disable timer for resend server list request
|
// set flag and disable timer for resend server list request
|
||||||
bServerListReceived = true;
|
bServerListReceived = true;
|
||||||
TimerReRequestServList.stop();
|
TimerReRequestServList.stop();
|
||||||
|
|
||||||
// first clear list
|
// first clear list
|
||||||
ListViewServers->clear();
|
ListViewServers->clear();
|
||||||
|
|
||||||
// add list item for each server in the server list
|
// add list item for each server in the server list
|
||||||
const int iServerInfoLen = vecServerInfo.Size();
|
const int iServerInfoLen = vecServerInfo.Size();
|
||||||
|
|
||||||
for ( int iIdx = 0; iIdx < iServerInfoLen; iIdx++ )
|
for ( int iIdx = 0; iIdx < iServerInfoLen; iIdx++ )
|
||||||
{
|
{
|
||||||
// get the host address, note that for the very first entry which is
|
// get the host address, note that for the very first entry which is
|
||||||
// the central server, we have to use the receive host address
|
// the central server, we have to use the receive host address
|
||||||
// instead
|
// instead
|
||||||
CHostAddress CurHostAddress;
|
CHostAddress CurHostAddress;
|
||||||
if ( iIdx > 0 )
|
if ( iIdx > 0 )
|
||||||
{
|
{
|
||||||
CurHostAddress = vecServerInfo[iIdx].HostAddr;
|
CurHostAddress = vecServerInfo[iIdx].HostAddr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// substitude the receive host address for central server
|
// substitude the receive host address for central server
|
||||||
CurHostAddress = InetAddr;
|
CurHostAddress = InetAddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// create new list view item
|
// create new list view item
|
||||||
QTreeWidgetItem* pNewListViewItem =
|
QTreeWidgetItem* pNewListViewItem =
|
||||||
new QTreeWidgetItem ( ListViewServers );
|
new QTreeWidgetItem ( ListViewServers );
|
||||||
|
|
||||||
// make the entry invisible (will be set to visible on successful ping
|
// make the entry invisible (will be set to visible on successful ping
|
||||||
// result)
|
// result)
|
||||||
pNewListViewItem->setHidden ( true );
|
pNewListViewItem->setHidden ( true );
|
||||||
|
|
||||||
// server name (if empty, show host address instead)
|
// server name (if empty, show host address instead)
|
||||||
if ( !vecServerInfo[iIdx].strName.isEmpty() )
|
if ( !vecServerInfo[iIdx].strName.isEmpty() )
|
||||||
{
|
{
|
||||||
pNewListViewItem->setText ( 0, vecServerInfo[iIdx].strName );
|
pNewListViewItem->setText ( 0, vecServerInfo[iIdx].strName );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// IP address and port (use IP number without last byte)
|
// IP address and port (use IP number without last byte)
|
||||||
// Definition: If the port number is the default port number, we do
|
// Definition: If the port number is the default port number, we do
|
||||||
// not show it.
|
// not show it.
|
||||||
if ( vecServerInfo[iIdx].HostAddr.iPort == LLCON_DEFAULT_PORT_NUMBER )
|
if ( vecServerInfo[iIdx].HostAddr.iPort == LLCON_DEFAULT_PORT_NUMBER )
|
||||||
{
|
{
|
||||||
// only show IP number, no port number
|
// only show IP number, no port number
|
||||||
pNewListViewItem->setText ( 0, CurHostAddress.
|
pNewListViewItem->setText ( 0, CurHostAddress.
|
||||||
toString ( CHostAddress::SM_IP_NO_LAST_BYTE ) );
|
toString ( CHostAddress::SM_IP_NO_LAST_BYTE ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// show IP number and port
|
// show IP number and port
|
||||||
pNewListViewItem->setText ( 0, CurHostAddress.
|
pNewListViewItem->setText ( 0, CurHostAddress.
|
||||||
toString ( CHostAddress::SM_IP_NO_LAST_BYTE_PORT ) );
|
toString ( CHostAddress::SM_IP_NO_LAST_BYTE_PORT ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// the ping time shall be shown in bold font
|
// the ping time shall be shown in bold font
|
||||||
QFont CurPingTimeFont = pNewListViewItem->font( 3 );
|
QFont CurPingTimeFont = pNewListViewItem->font( 3 );
|
||||||
CurPingTimeFont.setBold ( true );
|
CurPingTimeFont.setBold ( true );
|
||||||
pNewListViewItem->setFont ( 1, CurPingTimeFont );
|
pNewListViewItem->setFont ( 1, CurPingTimeFont );
|
||||||
|
|
||||||
// server location (city and country)
|
// server location (city and country)
|
||||||
QString strLocation = vecServerInfo[iIdx].strCity;
|
QString strLocation = vecServerInfo[iIdx].strCity;
|
||||||
if ( !strLocation.isEmpty() )
|
if ( !strLocation.isEmpty() )
|
||||||
{
|
{
|
||||||
strLocation += ", ";
|
strLocation += ", ";
|
||||||
}
|
}
|
||||||
if ( vecServerInfo[iIdx].eCountry != QLocale::AnyCountry )
|
if ( vecServerInfo[iIdx].eCountry != QLocale::AnyCountry )
|
||||||
{
|
{
|
||||||
strLocation +=
|
strLocation +=
|
||||||
QLocale::countryToString ( vecServerInfo[iIdx].eCountry );
|
QLocale::countryToString ( vecServerInfo[iIdx].eCountry );
|
||||||
}
|
}
|
||||||
|
|
||||||
pNewListViewItem->setText ( 3, strLocation );
|
pNewListViewItem->setText ( 3, strLocation );
|
||||||
|
|
||||||
// store host address
|
// store host address
|
||||||
pNewListViewItem->setData ( 0, Qt::UserRole,
|
pNewListViewItem->setData ( 0, Qt::UserRole,
|
||||||
CurHostAddress.toString() );
|
CurHostAddress.toString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
// immediately issue the ping measurements and start the ping timer since
|
// immediately issue the ping measurements and start the ping timer since
|
||||||
// the server list is filled now
|
// the server list is filled now
|
||||||
OnTimerPing();
|
OnTimerPing();
|
||||||
TimerPing.start ( PING_UPDATE_TIME_SERVER_LIST_MS );
|
TimerPing.start ( PING_UPDATE_TIME_SERVER_LIST_MS );
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::OnServerListItemClicked ( QTreeWidgetItem* Item,
|
void CConnectDlg::OnServerListItemSelectionChanged()
|
||||||
int )
|
{
|
||||||
{
|
// get current selected item (we are only interested in the first selcted
|
||||||
// if an item is clicked, copy the server name to the combo box
|
// item)
|
||||||
if ( Item != 0 )
|
QList<QTreeWidgetItem*> CurSelListItemList =
|
||||||
{
|
ListViewServers->selectedItems();
|
||||||
// make sure no signals are send when we change the text
|
|
||||||
|
// if an item is clicked/selected, copy the server name to the combo box
|
||||||
|
if ( CurSelListItemList.count() > 0 )
|
||||||
|
{
|
||||||
|
// make sure no signals are send when we change the text
|
||||||
LineEditServerAddr->blockSignals ( true );
|
LineEditServerAddr->blockSignals ( true );
|
||||||
{
|
{
|
||||||
LineEditServerAddr->setEditText ( Item->text ( 0 ) );
|
LineEditServerAddr->setEditText (
|
||||||
|
CurSelListItemList[0]->text ( 0 ) );
|
||||||
}
|
}
|
||||||
LineEditServerAddr->blockSignals ( false );
|
LineEditServerAddr->blockSignals ( false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::OnServerListItemDoubleClicked ( QTreeWidgetItem* Item,
|
void CConnectDlg::OnServerListItemDoubleClicked ( QTreeWidgetItem* Item,
|
||||||
int )
|
int )
|
||||||
{
|
{
|
||||||
// if a server list item was double clicked, it is the same as if the
|
// if a server list item was double clicked, it is the same as if the
|
||||||
// connect button was clicked
|
// connect button was clicked
|
||||||
if ( Item != 0 )
|
if ( Item != 0 )
|
||||||
{
|
{
|
||||||
OnConnectButtonClicked();
|
OnConnectButtonClicked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::OnLineEditServerAddrEditTextChanged ( const QString& )
|
void CConnectDlg::OnLineEditServerAddrEditTextChanged ( const QString& )
|
||||||
{
|
{
|
||||||
// in the server address combo box, a text was changed, remove selection
|
// in the server address combo box, a text was changed, remove selection
|
||||||
// in the server list (if any)
|
// in the server list (if any)
|
||||||
ListViewServers->clearSelection();
|
ListViewServers->clearSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::OnConnectButtonClicked()
|
void CConnectDlg::OnConnectButtonClicked()
|
||||||
{
|
{
|
||||||
// set state OK flag
|
// set state OK flag
|
||||||
bStateOK = true;
|
bStateOK = true;
|
||||||
|
|
||||||
// close dialog
|
// close dialog
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::OnTimerPing()
|
void CConnectDlg::OnTimerPing()
|
||||||
{
|
{
|
||||||
// send ping messages to the servers in the list
|
// send ping messages to the servers in the list
|
||||||
const int iServerListLen = ListViewServers->topLevelItemCount();
|
const int iServerListLen = ListViewServers->topLevelItemCount();
|
||||||
|
|
||||||
for ( int iIdx = 0; iIdx < iServerListLen; iIdx++ )
|
for ( int iIdx = 0; iIdx < iServerListLen; iIdx++ )
|
||||||
{
|
{
|
||||||
CHostAddress CurServerAddress;
|
CHostAddress CurServerAddress;
|
||||||
|
|
||||||
// try to parse host address string which is stored as user data
|
// try to parse host address string which is stored as user data
|
||||||
// in the server list item GUI control element
|
// in the server list item GUI control element
|
||||||
if ( LlconNetwUtil().ParseNetworkAddress (
|
if ( LlconNetwUtil().ParseNetworkAddress (
|
||||||
ListViewServers->topLevelItem ( iIdx )->
|
ListViewServers->topLevelItem ( iIdx )->
|
||||||
data ( 0, Qt::UserRole ).toString(),
|
data ( 0, Qt::UserRole ).toString(),
|
||||||
CurServerAddress ) )
|
CurServerAddress ) )
|
||||||
{
|
{
|
||||||
// if address is valid, send ping
|
// if address is valid, send ping
|
||||||
emit CreateCLPingMes ( CurServerAddress );
|
emit CreateCLPingMes ( CurServerAddress );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConnectDlg::SetPingTimeAndNumClientsResult ( CHostAddress& InetAddr,
|
void CConnectDlg::SetPingTimeAndNumClientsResult ( CHostAddress& InetAddr,
|
||||||
const int iPingTime,
|
const int iPingTime,
|
||||||
const int iPingTimeLEDColor,
|
const int iPingTimeLEDColor,
|
||||||
const int iNumClients )
|
const int iNumClients )
|
||||||
{
|
{
|
||||||
// apply the received ping time to the correct server list entry
|
// apply the received ping time to the correct server list entry
|
||||||
const int iServerListLen = ListViewServers->topLevelItemCount();
|
const int iServerListLen = ListViewServers->topLevelItemCount();
|
||||||
|
|
||||||
for ( int iIdx = 0; iIdx < iServerListLen; iIdx++ )
|
for ( int iIdx = 0; iIdx < iServerListLen; iIdx++ )
|
||||||
{
|
{
|
||||||
// compare the received address with the user data string of the
|
// compare the received address with the user data string of the
|
||||||
// host address by a string compare
|
// host address by a string compare
|
||||||
if ( !ListViewServers->topLevelItem ( iIdx )->
|
if ( !ListViewServers->topLevelItem ( iIdx )->
|
||||||
data ( 0, Qt::UserRole ).toString().
|
data ( 0, Qt::UserRole ).toString().
|
||||||
compare ( InetAddr.toString() ) )
|
compare ( InetAddr.toString() ) )
|
||||||
{
|
{
|
||||||
// update the color of the ping time font
|
// update the color of the ping time font
|
||||||
switch ( iPingTimeLEDColor )
|
switch ( iPingTimeLEDColor )
|
||||||
{
|
{
|
||||||
case MUL_COL_LED_GREEN:
|
case MUL_COL_LED_GREEN:
|
||||||
ListViewServers->
|
ListViewServers->
|
||||||
topLevelItem ( iIdx )->setTextColor ( 1, Qt::darkGreen );
|
topLevelItem ( iIdx )->setTextColor ( 1, Qt::darkGreen );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MUL_COL_LED_YELLOW:
|
case MUL_COL_LED_YELLOW:
|
||||||
ListViewServers->
|
ListViewServers->
|
||||||
topLevelItem ( iIdx )->setTextColor ( 1, Qt::darkYellow );
|
topLevelItem ( iIdx )->setTextColor ( 1, Qt::darkYellow );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MUL_COL_LED_RED:
|
case MUL_COL_LED_RED:
|
||||||
ListViewServers->
|
ListViewServers->
|
||||||
topLevelItem ( iIdx )->setTextColor ( 1, Qt::red );
|
topLevelItem ( iIdx )->setTextColor ( 1, Qt::red );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update ping text
|
// update ping text
|
||||||
ListViewServers->topLevelItem ( iIdx )->
|
ListViewServers->topLevelItem ( iIdx )->
|
||||||
setText ( 1, QString().setNum ( iPingTime ) + " ms" );
|
setText ( 1, QString().setNum ( iPingTime ) + " ms" );
|
||||||
|
|
||||||
// update number of clients text
|
// update number of clients text
|
||||||
ListViewServers->topLevelItem ( iIdx )->
|
ListViewServers->topLevelItem ( iIdx )->
|
||||||
setText ( 2, QString().setNum ( iNumClients ) );
|
setText ( 2, QString().setNum ( iNumClients ) );
|
||||||
|
|
||||||
// a ping time was received, set item to visible
|
// a ping time was received, set item to visible
|
||||||
ListViewServers->topLevelItem ( iIdx )->setHidden ( false );
|
ListViewServers->topLevelItem ( iIdx )->setHidden ( false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ protected:
|
||||||
bool bServerListItemWasChosen;
|
bool bServerListItemWasChosen;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void OnServerListItemClicked ( QTreeWidgetItem* Item, int );
|
void OnServerListItemSelectionChanged();
|
||||||
void OnServerListItemDoubleClicked ( QTreeWidgetItem* Item, int );
|
void OnServerListItemDoubleClicked ( QTreeWidgetItem* Item, int );
|
||||||
void OnLineEditServerAddrEditTextChanged ( const QString& );
|
void OnLineEditServerAddrEditTextChanged ( const QString& );
|
||||||
void OnConnectButtonClicked();
|
void OnConnectButtonClicked();
|
||||||
|
|
Loading…
Add table
Reference in a new issue