implementation of a musician profile dialog

This commit is contained in:
Volker Fischer 2015-01-30 20:58:49 +00:00
parent a62ca5d064
commit 88eed0d627
2 changed files with 287 additions and 2 deletions

View File

@ -23,6 +23,7 @@
\******************************************************************************/
#include "util.h"
#include "client.h"
/* Implementation *************************************************************/
@ -454,7 +455,7 @@ CLicenceDlg::CLicenceDlg ( QWidget* parent ) : QDialog ( parent )
setWindowIcon ( QIcon ( QString::fromUtf8 ( ":/png/main/res/mainicon.png" ) ) );
resize ( 700, 450 );
QVBoxLayout* pLayout = new QVBoxLayout;
QVBoxLayout* pLayout = new QVBoxLayout ( this );
QHBoxLayout* pSubLayout = new QHBoxLayout;
QTextBrowser* txvLicence = new QTextBrowser ( this );
QCheckBox* chbAgree = new QCheckBox ( "I &agree to the above licence terms", this );
@ -467,7 +468,6 @@ CLicenceDlg::CLicenceDlg ( QWidget* parent ) : QDialog ( parent )
pSubLayout->addWidget ( butDecline );
pLayout->addWidget ( txvLicence );
pLayout->addLayout ( pSubLayout );
setLayout ( pLayout );
// set some properties
butAccept->setEnabled ( false );
@ -520,6 +520,257 @@ CLicenceDlg::CLicenceDlg ( QWidget* parent ) : QDialog ( parent )
}
// Musician profile dialog -----------------------------------------------------
CMusProfDlg::CMusProfDlg ( CClient* pNCliP,
QWidget* parent ) :
QDialog ( parent ),
pClient ( pNCliP )
{
/*
The musician profile dialog is structured as follows:
- label with edit box for alias/name
- label with combo box for instrument
- label with combo box for country flag
- label with edit box for city
- label with combo box for skill level
- OK button
*/
setWindowTitle ( "Musician Profile" );
setWindowIcon ( QIcon ( QString::fromUtf8 ( ":/png/main/res/mainicon.png" ) ) );
QVBoxLayout* pLayout = new QVBoxLayout ( this );
QHBoxLayout* pMainSubLayout = new QHBoxLayout;
QHBoxLayout* pButSubLayout = new QHBoxLayout;
QVBoxLayout* pMLeftSubLayout = new QVBoxLayout;
QVBoxLayout* pMRightSubLayout = new QVBoxLayout;
QLabel* plblAlias = new QLabel ( "Alias/Name", this );
pedtAlias = new QLineEdit ( this );
QLabel* plblInstrument = new QLabel ( "Instrument", this );
pcbxInstrument = new QComboBox ( this );
QLabel* plblCountry = new QLabel ( "Country", this );
pcbxCountry = new QComboBox ( this );
QLabel* plblCity = new QLabel ( "City", this );
pedtCity = new QLineEdit ( this );
QLabel* plblSkill = new QLabel ( "Skill", this );
pcbxSkill = new QComboBox ( this );
QPushButton* butOK = new QPushButton ( "&OK", this );
pMLeftSubLayout->addWidget ( plblAlias );
pMLeftSubLayout->addWidget ( plblInstrument );
pMLeftSubLayout->addWidget ( plblCountry );
pMLeftSubLayout->addWidget ( plblCity );
pMLeftSubLayout->addWidget ( plblSkill );
pMRightSubLayout->addWidget ( pedtAlias );
pMRightSubLayout->addWidget ( pcbxInstrument );
pMRightSubLayout->addWidget ( pcbxCountry );
pMRightSubLayout->addWidget ( pedtCity );
pMRightSubLayout->addWidget ( pcbxSkill );
pMainSubLayout->addLayout ( pMLeftSubLayout );
pMainSubLayout->addLayout ( pMRightSubLayout );
pButSubLayout->addStretch();
pButSubLayout->addWidget ( butOK );
pLayout->addLayout ( pMainSubLayout );
pLayout->addLayout ( pButSubLayout );
// set some properties
butOK->setDefault ( true );
// Instrument pictures combo box -------------------------------------------
// add an entry for all known instruments
for ( int iCurInst = 0; iCurInst < CInstPictures::GetNumAvailableInst(); iCurInst++ )
{
// create a combo box item with text and image
pcbxInstrument->addItem (
QIcon ( CInstPictures::GetResourceReference ( iCurInst ) ),
CInstPictures::GetName ( iCurInst ),
iCurInst );
}
// Country flag icons combo box --------------------------------------------
// add an entry for all known country flags
for ( int iCurCntry = static_cast<int> ( QLocale::AnyCountry );
iCurCntry < static_cast<int> ( QLocale::LastCountry ); iCurCntry++ )
{
// exclude the "None" entry since it is added after the sorting
if ( static_cast<QLocale::Country> ( iCurCntry ) != QLocale::AnyCountry )
{
// get current country enum
QLocale::Country eCountry =
static_cast<QLocale::Country> ( iCurCntry );
// try to load icon from resource file name
QIcon CurFlagIcon;
CurFlagIcon.addFile ( CCountyFlagIcons::GetResourceReference ( eCountry ) );
// only add the entry if a flag is available
if ( !CurFlagIcon.isNull() )
{
// create a combo box item with text and image
pcbxCountry->addItem ( QIcon ( CurFlagIcon ),
QLocale::countryToString ( eCountry ),
iCurCntry );
}
}
}
// sort country combo box items in alphabetical order
pcbxCountry->model()->sort ( 0, Qt::AscendingOrder );
// the "None" country gets a special icon and is the very first item
QIcon FlagNoneIcon;
FlagNoneIcon.addFile ( ":/png/flags/res/flags/flagnone.png" );
pcbxCountry->insertItem ( 0,
FlagNoneIcon,
"None",
static_cast<int> ( QLocale::AnyCountry ) );
// Skill level combo box ---------------------------------------------------
pcbxSkill->addItem ( "Not Set", SL_NOT_SET );
pcbxSkill->addItem ( "Beginner", SL_BEGINNER );
pcbxSkill->addItem ( "Intermediate", SL_INTERMEDIATE );
pcbxSkill->addItem ( "Expert", SL_PROFESSIONAL );
// Add help text to controls -----------------------------------------------
// fader tag
QString strFaderTag = tr ( "<b>Musician Profile:</b> Set your name "
"or an alias here so that the other musicians you want to play with "
"know who you are. Additionally you may set an instrument picture of "
"the instrument you play and a flag of the country you are living. "
"The city you live in and the skill level of playing your instrument "
"may also be added.\n"
"What you set here will appear at your fader on the mixer board when "
"you are connected to a " ) + APP_NAME + tr ( " server. This tag will "
"also show up at each client which is connected to the same server as "
"you. If the name is left empty, the IP address is shown instead." );
pedtAlias->setWhatsThis ( strFaderTag );
pedtAlias->setAccessibleName ( tr ( "Alias or name edit box" ) );
pcbxInstrument->setWhatsThis ( strFaderTag );
pcbxInstrument->setAccessibleName ( tr ( "Instrument picture button" ) );
pcbxCountry->setWhatsThis ( strFaderTag );
pcbxCountry->setAccessibleName ( tr ( "Country flag button" ) );
pedtCity->setWhatsThis ( strFaderTag );
pedtCity->setAccessibleName ( tr ( "City edit box" ) );
pcbxSkill->setWhatsThis ( strFaderTag );
pcbxSkill->setAccessibleName ( tr ( "Skill level combo box" ) );
// Connections -------------------------------------------------------------
QObject::connect ( pedtAlias, SIGNAL ( textChanged ( const QString& ) ),
this, SLOT ( OnAliasTextChanged ( const QString& ) ) );
QObject::connect ( pcbxInstrument, SIGNAL ( activated ( int ) ),
this, SLOT ( OnInstrumentActivated ( int ) ) );
QObject::connect ( pcbxCountry, SIGNAL ( activated ( int ) ),
this, SLOT ( OnCountryActivated ( int ) ) );
QObject::connect ( pedtCity, SIGNAL ( textChanged ( const QString& ) ),
this, SLOT ( OnCityTextChanged ( const QString& ) ) );
QObject::connect ( pcbxSkill, SIGNAL ( activated ( int ) ),
this, SLOT ( OnSkillActivated ( int ) ) );
QObject::connect ( butOK, SIGNAL ( clicked() ),
this, SLOT ( accept() ) );
}
void CMusProfDlg::showEvent ( QShowEvent* )
{
// Update the controls with the current client settings --------------------
// set the name
pedtAlias->setText ( pClient->ChannelInfo.strName );
// select current instrument
pcbxInstrument->setCurrentIndex (
pcbxInstrument->findData ( pClient->ChannelInfo.iInstrument ) );
// select current country
pcbxCountry->setCurrentIndex (
pcbxCountry->findData (
static_cast<int> ( pClient->ChannelInfo.eCountry ) ) );
// set the city
pedtCity->setText ( pClient->ChannelInfo.strCity );
// select the skill level
pcbxSkill->setCurrentIndex (
pcbxSkill->findData (
static_cast<int> ( pClient->ChannelInfo.eSkillLevel ) ) );
}
void CMusProfDlg::OnAliasTextChanged ( const QString& strNewName )
{
// check length
if ( strNewName.length() <= MAX_LEN_FADER_TAG )
{
// refresh internal name parameter
pClient->ChannelInfo.strName = strNewName;
// update channel info at the server
pClient->SetRemoteInfo();
}
else
{
// text is too long, update control with shortend text
pedtAlias->setText ( strNewName.left ( MAX_LEN_FADER_TAG ) );
}
}
void CMusProfDlg::OnInstrumentActivated ( int iCntryListItem )
{
// set the new value in the data base
pClient->ChannelInfo.iInstrument =
pcbxInstrument->itemData ( iCntryListItem ).toInt();
// update channel info at the server
pClient->SetRemoteInfo();
}
void CMusProfDlg::OnCountryActivated ( int iCntryListItem )
{
// set the new value in the data base
pClient->ChannelInfo.eCountry = static_cast<QLocale::Country> (
pcbxCountry->itemData ( iCntryListItem ).toInt() );
// update channel info at the server
pClient->SetRemoteInfo();
}
void CMusProfDlg::OnCityTextChanged ( const QString& strNewCity )
{
// check length
if ( strNewCity.length() <= MAX_LEN_SERVER_CITY )
{
// refresh internal name parameter
pClient->ChannelInfo.strCity = strNewCity;
// update channel info at the server
pClient->SetRemoteInfo();
}
else
{
// text is too long, update control with shortend text
pedtCity->setText ( strNewCity.left ( MAX_LEN_SERVER_CITY ) );
}
}
void CMusProfDlg::OnSkillActivated ( int iCntryListItem )
{
// set the new value in the data base
pClient->ChannelInfo.eSkillLevel = static_cast<ESkillLevel> (
pcbxSkill->itemData ( iCntryListItem ).toInt() );
// update channel info at the server
pClient->SetRemoteInfo();
}
// Help menu -------------------------------------------------------------------
CHelpMenu::CHelpMenu ( QWidget* parent ) : QMenu ( "&?", parent )
{

View File

@ -32,6 +32,8 @@
#include <QTextBrowser>
#include <QLabel>
#include <QCheckBox>
#include <QComboBox>
#include <QLineEdit>
#include <QDateTime>
#include <QFile>
#include <QDesktopServices>
@ -54,6 +56,9 @@ using namespace std; // because of the library: "vector"
#include "ui_aboutdlgbase.h"
class CClient; // forward declaration of CClient
/* Definitions ****************************************************************/
#define METER_FLY_BACK 2
@ -425,6 +430,35 @@ public slots:
};
// Musician profile dialog -----------------------------------------------------
class CMusProfDlg : public QDialog
{
Q_OBJECT
public:
CMusProfDlg ( CClient* pNCliP,
QWidget* parent = 0 );
protected:
virtual void showEvent ( QShowEvent* );
QLineEdit* pedtAlias;
QComboBox* pcbxInstrument;
QComboBox* pcbxCountry;
QLineEdit* pedtCity;
QComboBox* pcbxSkill;
CClient* pClient;
public slots:
void OnAliasTextChanged ( const QString& strNewName );
void OnInstrumentActivated ( int iCntryListItem );
void OnCountryActivated ( int iCntryListItem );
void OnCityTextChanged ( const QString& strNewName );
void OnSkillActivated ( int iCntryListItem );
};
// Help menu -------------------------------------------------------------------
class CHelpMenu : public QMenu
{