support for storing/recovering settings for the server in GUI mode
This commit is contained in:
parent
886251367b
commit
328dbd2b1c
6 changed files with 886 additions and 784 deletions
575
src/global.h
575
src/global.h
|
@ -1,287 +1,288 @@
|
|||
/******************************************************************************\
|
||||
* Copyright (c) 2004-2011
|
||||
*
|
||||
* Author(s):
|
||||
* Volker Fischer
|
||||
*
|
||||
******************************************************************************
|
||||
*
|
||||
* 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
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
\******************************************************************************/
|
||||
|
||||
#if !defined ( GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_ )
|
||||
#define GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_
|
||||
|
||||
#include <qstring.h>
|
||||
#include <qevent.h>
|
||||
#include <qdebug.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <string>
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Definitions ****************************************************************/
|
||||
// define this macro to get debug output
|
||||
//#define _DEBUG_
|
||||
#undef _DEBUG_
|
||||
|
||||
// version and application name (always use this version)
|
||||
#undef VERSION
|
||||
#define VERSION "3.1.3cvs"
|
||||
#define APP_NAME "llcon"
|
||||
|
||||
// default name of the ini-file
|
||||
#define DEFAULT_INI_FILE_NAME "llcon.ini"
|
||||
|
||||
// file name for logging file
|
||||
#define DEFAULT_LOG_FILE_NAME "llconsrvlog.txt"
|
||||
|
||||
// default server address
|
||||
#define DEFAULT_SERVER_ADDRESS "llcon.dyndns.org"
|
||||
|
||||
// download URL
|
||||
#define LLCON_DOWNLOAD_URL "http://sourceforge.net/projects/llcon/files"
|
||||
|
||||
// defined port number for client and server
|
||||
#define LLCON_DEFAULT_PORT_NUMBER 22124
|
||||
|
||||
// system sample rate (the sound card and audio coder works on this sample rate)
|
||||
#define SYSTEM_SAMPLE_RATE_HZ 48000 // Hz
|
||||
|
||||
// System block size, this is the block size on which the audio coder works.
|
||||
// All other block sizes must be a multiple of this size
|
||||
#define SYSTEM_FRAME_SIZE_SAMPLES 128
|
||||
|
||||
#define SYSTEM_BLOCK_DURATION_MS_FLOAT \
|
||||
( static_cast<double> ( SYSTEM_FRAME_SIZE_SAMPLES ) / \
|
||||
SYSTEM_SAMPLE_RATE_HZ * 1000 )
|
||||
|
||||
// define the allowed audio frame size factors (since the
|
||||
// "SYSTEM_FRAME_SIZE_SAMPLES" is quite small, it may be that on some
|
||||
// computers a larger value is required)
|
||||
#define FRAME_SIZE_FACTOR_PREFERRED 1 // 128 (for frame size 128)
|
||||
#define FRAME_SIZE_FACTOR_DEFAULT 2 // 256 (for frame size 128)
|
||||
#define FRAME_SIZE_FACTOR_SAFE 4 // 512 (for frame size 128)
|
||||
|
||||
// low complexity CELT encoder (if defined)
|
||||
#define USE_LOW_COMPLEXITY_CELT_ENC
|
||||
|
||||
// define the maximum mono audio buffer size at a sample rate
|
||||
// of 48 kHz, this is important for defining the maximum number
|
||||
// of bytes to be expected from the network interface
|
||||
#define MAX_MONO_AUD_BUFF_SIZE_AT_48KHZ 4096
|
||||
|
||||
// Maximum block size for network input buffer. Consider a maximum sample rate
|
||||
// of 48 kHz and two audio channels and two bytes per sample.
|
||||
#define MAX_SIZE_BYTES_NETW_BUF ( MAX_MONO_AUD_BUFF_SIZE_AT_48KHZ * 4 )
|
||||
|
||||
// minimum/maximum network buffer size (which can be chosen by slider)
|
||||
#define MIN_NET_BUF_SIZE_NUM_BL 1 // number of blocks
|
||||
#define MAX_NET_BUF_SIZE_NUM_BL 20 // number of blocks
|
||||
|
||||
// default network buffer size
|
||||
#define DEF_NET_BUF_SIZE_NUM_BL 10 // number of blocks
|
||||
|
||||
// maximum number of recognized sound cards installed in the system,
|
||||
// definition for "no device"
|
||||
#define MAX_NUMBER_SOUND_CARDS 10
|
||||
#define INVALID_SNC_CARD_DEVICE -1
|
||||
|
||||
// define the maximum number of audio channel for input/output we can store
|
||||
// channel infos for (and therefore this is the maximum number of entries in
|
||||
// the channel selection combo box regardless of the actual available number
|
||||
// of channels by the audio device)
|
||||
#define MAX_NUM_IN_OUT_CHANNELS 32
|
||||
|
||||
// maximum number of elemts in the server address combo box
|
||||
#define MAX_NUM_SERVER_ADDR_ITEMS 6
|
||||
|
||||
// defines for LED input level meter
|
||||
#define NUM_STEPS_INP_LEV_METER 8
|
||||
#define RED_BOUND_INP_LEV_METER 7
|
||||
#define YELLOW_BOUND_INP_LEV_METER 5
|
||||
|
||||
// maximum number of internet connections (channels)
|
||||
// if you want to change this paramter, there has to be done code modifications
|
||||
// on other places, too! The code tag "MAX_NUM_CHANNELS_TAG" shows these places
|
||||
// (just search for the tag in the entire code)
|
||||
#define MAX_NUM_CHANNELS 12 // max number channels for server
|
||||
|
||||
// actual number of used channels in the server
|
||||
// this parameter can safely be changed from 1 to MAX_NUM_CHANNELS
|
||||
// without any other changes in the code
|
||||
#define USED_NUM_CHANNELS 6 // used number channels for server
|
||||
|
||||
// maximum number of servers registered in the server list
|
||||
#define MAX_NUM_SERVERS_IN_SERVER_LIST 100
|
||||
|
||||
// defines the time interval at which the ping time is updated in the GUI
|
||||
#define PING_UPDATE_TIME_MS 500 // ms
|
||||
|
||||
// defines the time interval at which the ping time is updated for the server
|
||||
// list
|
||||
#define PING_UPDATE_TIME_SERVER_LIST_MS 2000 // ms
|
||||
|
||||
// time-out until a registered server is deleted from the server list if no
|
||||
// new registering was made in minutes
|
||||
#define SERVLIST_TIME_OUT_MINUTES 60 // minutes
|
||||
|
||||
// poll time for server list (to check if entries are time-out)
|
||||
#define SERVLIST_POLL_TIME_MINUTES 1 // minute
|
||||
|
||||
// time until a slave server registers in the server list
|
||||
#define SERVLIST_REGIST_INTERV_MINUTES 30 // minutes
|
||||
|
||||
|
||||
// length of the moving average buffer for response time measurement
|
||||
#define TIME_MOV_AV_RESPONSE_SECONDS 30 // seconds
|
||||
|
||||
|
||||
// Maximum length of fader tag and text message strings (Since for chat messages
|
||||
// some HTML code is added, we also have to define a second length which includes
|
||||
// this additionl HTML code. Right now the length of the HTML code is approx. 66
|
||||
// character. Here, we add some headroom to this number)
|
||||
#define MAX_LEN_FADER_TAG 16
|
||||
#define MAX_LEN_CHAT_TEXT 1600
|
||||
#define MAX_LEN_CHAT_TEXT_PLUS_HTML 1800
|
||||
#define MAX_LEN_SERVER_NAME 20
|
||||
#define MAX_LEN_SERVER_TOPIC 32
|
||||
#define MAX_LEN_SERVER_CITY 20
|
||||
|
||||
// common tool tip bottom line text
|
||||
#define TOOLTIP_COM_END_TEXT tr ( \
|
||||
"<br><div align=right><font size=-1><i>" \
|
||||
"For more information use the ""What's " \
|
||||
"This"" help (? menu, right mouse button or Shift+F1)" \
|
||||
"</i></font></div>" )
|
||||
|
||||
#define _MAXSHORT 32767
|
||||
#define _MAXBYTE 255 // binary: 11111111
|
||||
#define _MINSHORT ( -32768 )
|
||||
|
||||
#if HAVE_STDINT_H
|
||||
# include <stdint.h>
|
||||
#elif HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
#elif defined ( _WIN32 )
|
||||
typedef __int64 int64_t;
|
||||
typedef __int32 int32_t;
|
||||
typedef __int16 int16_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
typedef unsigned __int8 uint8_t;
|
||||
#else
|
||||
typedef long long int64_t;
|
||||
typedef int int32_t;
|
||||
typedef short int16_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
typedef unsigned int uint32_t;
|
||||
typedef unsigned short uint16_t;
|
||||
typedef unsigned char uint8_t;
|
||||
#endif
|
||||
|
||||
|
||||
/* Definitions for window message system ------------------------------------ */
|
||||
typedef unsigned int _MESSAGE_IDENT;
|
||||
#define MS_RESET_ALL 0 // MS: Message
|
||||
#define MS_SOUND_IN 1
|
||||
#define MS_SOUND_OUT 2
|
||||
#define MS_JIT_BUF_PUT 3
|
||||
#define MS_JIT_BUF_GET 4
|
||||
#define MS_PACKET_RECEIVED 5
|
||||
#define MS_ERROR_IN_THREAD 6
|
||||
#define MS_SET_JIT_BUF_SIZE 7
|
||||
|
||||
#define MUL_COL_LED_RED 0
|
||||
#define MUL_COL_LED_YELLOW 1
|
||||
#define MUL_COL_LED_GREEN 2
|
||||
|
||||
|
||||
/* Classes ********************************************************************/
|
||||
class CGenErr
|
||||
{
|
||||
public:
|
||||
CGenErr ( QString strNewErrorMsg, QString strNewErrorType = "" ) :
|
||||
strErrorMsg ( strNewErrorMsg ), strErrorType ( strNewErrorType ) {}
|
||||
|
||||
QString GetErrorText()
|
||||
{
|
||||
// return formatted error text
|
||||
if ( strErrorType.isEmpty() )
|
||||
{
|
||||
return strErrorMsg;
|
||||
}
|
||||
else
|
||||
{
|
||||
return strErrorType + ": " + strErrorMsg;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
QString strErrorMsg;
|
||||
QString strErrorType;
|
||||
};
|
||||
|
||||
class CLlconEvent : public QEvent
|
||||
{
|
||||
public:
|
||||
CLlconEvent ( int iNewMeTy, int iNewSt, int iNewChN = 0 ) :
|
||||
QEvent ( QEvent::Type ( QEvent::User + 11 ) ), iMessType ( iNewMeTy ), iStatus ( iNewSt ),
|
||||
iChanNum ( iNewChN ) {}
|
||||
|
||||
int iMessType;
|
||||
int iStatus;
|
||||
int iChanNum;
|
||||
};
|
||||
|
||||
|
||||
/* Prototypes for global functions ********************************************/
|
||||
// command line parsing, TODO do not declare functions globally but in a class
|
||||
QString UsageArguments ( char** argv );
|
||||
|
||||
bool GetFlagArgument ( char** argv,
|
||||
int& i,
|
||||
QString strShortOpt,
|
||||
QString strLongOpt );
|
||||
|
||||
bool GetStringArgument ( QTextStream& tsConsole,
|
||||
int argc,
|
||||
char** argv,
|
||||
int& i,
|
||||
QString strShortOpt,
|
||||
QString strLongOpt,
|
||||
QString& strArg );
|
||||
|
||||
bool GetNumericArgument ( QTextStream& tsConsole,
|
||||
int argc,
|
||||
char** argv,
|
||||
int& i,
|
||||
QString strShortOpt,
|
||||
QString strLongOpt,
|
||||
double rRangeStart,
|
||||
double rRangeStop,
|
||||
double& rValue);
|
||||
|
||||
// posting a window message
|
||||
void PostWinMessage ( const _MESSAGE_IDENT MessID,
|
||||
const int iMessageParam = 0,
|
||||
const int iChanNum = 0 );
|
||||
|
||||
#endif /* !defined ( GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_ ) */
|
||||
/******************************************************************************\
|
||||
* Copyright (c) 2004-2011
|
||||
*
|
||||
* Author(s):
|
||||
* Volker Fischer
|
||||
*
|
||||
******************************************************************************
|
||||
*
|
||||
* 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
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
\******************************************************************************/
|
||||
|
||||
#if !defined ( GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_ )
|
||||
#define GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_
|
||||
|
||||
#include <qstring.h>
|
||||
#include <qevent.h>
|
||||
#include <qdebug.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <string>
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Definitions ****************************************************************/
|
||||
// define this macro to get debug output
|
||||
//#define _DEBUG_
|
||||
#undef _DEBUG_
|
||||
|
||||
// version and application name (always use this version)
|
||||
#undef VERSION
|
||||
#define VERSION "3.1.3cvs"
|
||||
#define APP_NAME "llcon"
|
||||
|
||||
// default names of the ini-file for client and server
|
||||
#define DEFAULT_INI_FILE_NAME "llcon.ini"
|
||||
#define DEFAULT_INI_FILE_NAME_SERVER "llconserver.ini"
|
||||
|
||||
// file name for logging file
|
||||
#define DEFAULT_LOG_FILE_NAME "llconsrvlog.txt"
|
||||
|
||||
// default server address
|
||||
#define DEFAULT_SERVER_ADDRESS "llcon.dyndns.org"
|
||||
|
||||
// download URL
|
||||
#define LLCON_DOWNLOAD_URL "http://sourceforge.net/projects/llcon/files"
|
||||
|
||||
// defined port number for client and server
|
||||
#define LLCON_DEFAULT_PORT_NUMBER 22124
|
||||
|
||||
// system sample rate (the sound card and audio coder works on this sample rate)
|
||||
#define SYSTEM_SAMPLE_RATE_HZ 48000 // Hz
|
||||
|
||||
// System block size, this is the block size on which the audio coder works.
|
||||
// All other block sizes must be a multiple of this size
|
||||
#define SYSTEM_FRAME_SIZE_SAMPLES 128
|
||||
|
||||
#define SYSTEM_BLOCK_DURATION_MS_FLOAT \
|
||||
( static_cast<double> ( SYSTEM_FRAME_SIZE_SAMPLES ) / \
|
||||
SYSTEM_SAMPLE_RATE_HZ * 1000 )
|
||||
|
||||
// define the allowed audio frame size factors (since the
|
||||
// "SYSTEM_FRAME_SIZE_SAMPLES" is quite small, it may be that on some
|
||||
// computers a larger value is required)
|
||||
#define FRAME_SIZE_FACTOR_PREFERRED 1 // 128 (for frame size 128)
|
||||
#define FRAME_SIZE_FACTOR_DEFAULT 2 // 256 (for frame size 128)
|
||||
#define FRAME_SIZE_FACTOR_SAFE 4 // 512 (for frame size 128)
|
||||
|
||||
// low complexity CELT encoder (if defined)
|
||||
#define USE_LOW_COMPLEXITY_CELT_ENC
|
||||
|
||||
// define the maximum mono audio buffer size at a sample rate
|
||||
// of 48 kHz, this is important for defining the maximum number
|
||||
// of bytes to be expected from the network interface
|
||||
#define MAX_MONO_AUD_BUFF_SIZE_AT_48KHZ 4096
|
||||
|
||||
// Maximum block size for network input buffer. Consider a maximum sample rate
|
||||
// of 48 kHz and two audio channels and two bytes per sample.
|
||||
#define MAX_SIZE_BYTES_NETW_BUF ( MAX_MONO_AUD_BUFF_SIZE_AT_48KHZ * 4 )
|
||||
|
||||
// minimum/maximum network buffer size (which can be chosen by slider)
|
||||
#define MIN_NET_BUF_SIZE_NUM_BL 1 // number of blocks
|
||||
#define MAX_NET_BUF_SIZE_NUM_BL 20 // number of blocks
|
||||
|
||||
// default network buffer size
|
||||
#define DEF_NET_BUF_SIZE_NUM_BL 10 // number of blocks
|
||||
|
||||
// maximum number of recognized sound cards installed in the system,
|
||||
// definition for "no device"
|
||||
#define MAX_NUMBER_SOUND_CARDS 10
|
||||
#define INVALID_SNC_CARD_DEVICE -1
|
||||
|
||||
// define the maximum number of audio channel for input/output we can store
|
||||
// channel infos for (and therefore this is the maximum number of entries in
|
||||
// the channel selection combo box regardless of the actual available number
|
||||
// of channels by the audio device)
|
||||
#define MAX_NUM_IN_OUT_CHANNELS 32
|
||||
|
||||
// maximum number of elemts in the server address combo box
|
||||
#define MAX_NUM_SERVER_ADDR_ITEMS 6
|
||||
|
||||
// defines for LED input level meter
|
||||
#define NUM_STEPS_INP_LEV_METER 8
|
||||
#define RED_BOUND_INP_LEV_METER 7
|
||||
#define YELLOW_BOUND_INP_LEV_METER 5
|
||||
|
||||
// maximum number of internet connections (channels)
|
||||
// if you want to change this paramter, there has to be done code modifications
|
||||
// on other places, too! The code tag "MAX_NUM_CHANNELS_TAG" shows these places
|
||||
// (just search for the tag in the entire code)
|
||||
#define MAX_NUM_CHANNELS 12 // max number channels for server
|
||||
|
||||
// actual number of used channels in the server
|
||||
// this parameter can safely be changed from 1 to MAX_NUM_CHANNELS
|
||||
// without any other changes in the code
|
||||
#define USED_NUM_CHANNELS 6 // used number channels for server
|
||||
|
||||
// maximum number of servers registered in the server list
|
||||
#define MAX_NUM_SERVERS_IN_SERVER_LIST 100
|
||||
|
||||
// defines the time interval at which the ping time is updated in the GUI
|
||||
#define PING_UPDATE_TIME_MS 500 // ms
|
||||
|
||||
// defines the time interval at which the ping time is updated for the server
|
||||
// list
|
||||
#define PING_UPDATE_TIME_SERVER_LIST_MS 2000 // ms
|
||||
|
||||
// time-out until a registered server is deleted from the server list if no
|
||||
// new registering was made in minutes
|
||||
#define SERVLIST_TIME_OUT_MINUTES 60 // minutes
|
||||
|
||||
// poll time for server list (to check if entries are time-out)
|
||||
#define SERVLIST_POLL_TIME_MINUTES 1 // minute
|
||||
|
||||
// time until a slave server registers in the server list
|
||||
#define SERVLIST_REGIST_INTERV_MINUTES 30 // minutes
|
||||
|
||||
|
||||
// length of the moving average buffer for response time measurement
|
||||
#define TIME_MOV_AV_RESPONSE_SECONDS 30 // seconds
|
||||
|
||||
|
||||
// Maximum length of fader tag and text message strings (Since for chat messages
|
||||
// some HTML code is added, we also have to define a second length which includes
|
||||
// this additionl HTML code. Right now the length of the HTML code is approx. 66
|
||||
// character. Here, we add some headroom to this number)
|
||||
#define MAX_LEN_FADER_TAG 16
|
||||
#define MAX_LEN_CHAT_TEXT 1600
|
||||
#define MAX_LEN_CHAT_TEXT_PLUS_HTML 1800
|
||||
#define MAX_LEN_SERVER_NAME 20
|
||||
#define MAX_LEN_SERVER_TOPIC 32
|
||||
#define MAX_LEN_SERVER_CITY 20
|
||||
|
||||
// common tool tip bottom line text
|
||||
#define TOOLTIP_COM_END_TEXT tr ( \
|
||||
"<br><div align=right><font size=-1><i>" \
|
||||
"For more information use the ""What's " \
|
||||
"This"" help (? menu, right mouse button or Shift+F1)" \
|
||||
"</i></font></div>" )
|
||||
|
||||
#define _MAXSHORT 32767
|
||||
#define _MAXBYTE 255 // binary: 11111111
|
||||
#define _MINSHORT ( -32768 )
|
||||
|
||||
#if HAVE_STDINT_H
|
||||
# include <stdint.h>
|
||||
#elif HAVE_INTTYPES_H
|
||||
# include <inttypes.h>
|
||||
#elif defined ( _WIN32 )
|
||||
typedef __int64 int64_t;
|
||||
typedef __int32 int32_t;
|
||||
typedef __int16 int16_t;
|
||||
typedef unsigned __int64 uint64_t;
|
||||
typedef unsigned __int32 uint32_t;
|
||||
typedef unsigned __int16 uint16_t;
|
||||
typedef unsigned __int8 uint8_t;
|
||||
#else
|
||||
typedef long long int64_t;
|
||||
typedef int int32_t;
|
||||
typedef short int16_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
typedef unsigned int uint32_t;
|
||||
typedef unsigned short uint16_t;
|
||||
typedef unsigned char uint8_t;
|
||||
#endif
|
||||
|
||||
|
||||
/* Definitions for window message system ------------------------------------ */
|
||||
typedef unsigned int _MESSAGE_IDENT;
|
||||
#define MS_RESET_ALL 0 // MS: Message
|
||||
#define MS_SOUND_IN 1
|
||||
#define MS_SOUND_OUT 2
|
||||
#define MS_JIT_BUF_PUT 3
|
||||
#define MS_JIT_BUF_GET 4
|
||||
#define MS_PACKET_RECEIVED 5
|
||||
#define MS_ERROR_IN_THREAD 6
|
||||
#define MS_SET_JIT_BUF_SIZE 7
|
||||
|
||||
#define MUL_COL_LED_RED 0
|
||||
#define MUL_COL_LED_YELLOW 1
|
||||
#define MUL_COL_LED_GREEN 2
|
||||
|
||||
|
||||
/* Classes ********************************************************************/
|
||||
class CGenErr
|
||||
{
|
||||
public:
|
||||
CGenErr ( QString strNewErrorMsg, QString strNewErrorType = "" ) :
|
||||
strErrorMsg ( strNewErrorMsg ), strErrorType ( strNewErrorType ) {}
|
||||
|
||||
QString GetErrorText()
|
||||
{
|
||||
// return formatted error text
|
||||
if ( strErrorType.isEmpty() )
|
||||
{
|
||||
return strErrorMsg;
|
||||
}
|
||||
else
|
||||
{
|
||||
return strErrorType + ": " + strErrorMsg;
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
QString strErrorMsg;
|
||||
QString strErrorType;
|
||||
};
|
||||
|
||||
class CLlconEvent : public QEvent
|
||||
{
|
||||
public:
|
||||
CLlconEvent ( int iNewMeTy, int iNewSt, int iNewChN = 0 ) :
|
||||
QEvent ( QEvent::Type ( QEvent::User + 11 ) ), iMessType ( iNewMeTy ), iStatus ( iNewSt ),
|
||||
iChanNum ( iNewChN ) {}
|
||||
|
||||
int iMessType;
|
||||
int iStatus;
|
||||
int iChanNum;
|
||||
};
|
||||
|
||||
|
||||
/* Prototypes for global functions ********************************************/
|
||||
// command line parsing, TODO do not declare functions globally but in a class
|
||||
QString UsageArguments ( char** argv );
|
||||
|
||||
bool GetFlagArgument ( char** argv,
|
||||
int& i,
|
||||
QString strShortOpt,
|
||||
QString strLongOpt );
|
||||
|
||||
bool GetStringArgument ( QTextStream& tsConsole,
|
||||
int argc,
|
||||
char** argv,
|
||||
int& i,
|
||||
QString strShortOpt,
|
||||
QString strLongOpt,
|
||||
QString& strArg );
|
||||
|
||||
bool GetNumericArgument ( QTextStream& tsConsole,
|
||||
int argc,
|
||||
char** argv,
|
||||
int& i,
|
||||
QString strShortOpt,
|
||||
QString strLongOpt,
|
||||
double rRangeStart,
|
||||
double rRangeStop,
|
||||
double& rValue);
|
||||
|
||||
// posting a window message
|
||||
void PostWinMessage ( const _MESSAGE_IDENT MessID,
|
||||
const int iMessageParam = 0,
|
||||
const int iChanNum = 0 );
|
||||
|
||||
#endif /* !defined ( GLOBAL_H__3B123453_4344_BB2B_23E7A0D31912__INCLUDED_ ) */
|
||||
|
|
|
@ -349,6 +349,10 @@ int main ( int argc, char** argv )
|
|||
|
||||
if ( bUseGUI )
|
||||
{
|
||||
// load settings from init-file
|
||||
CSettings Settings ( &Server );
|
||||
Settings.Load ( strIniFileName );
|
||||
|
||||
// GUI object for the server
|
||||
CLlconServerDlg ServerDlg ( &Server, 0 );
|
||||
|
||||
|
@ -359,6 +363,9 @@ int main ( int argc, char** argv )
|
|||
// show dialog
|
||||
ServerDlg.show();
|
||||
app.exec();
|
||||
|
||||
// save settings to init-file
|
||||
Settings.Save ( strIniFileName );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
16
src/server.h
16
src/server.h
|
@ -126,6 +126,22 @@ public:
|
|||
CVector<int>& veciJitBufNumFrames,
|
||||
CVector<int>& veciNetwFrameSizeFact );
|
||||
|
||||
void SetServerName ( const QString& strNewName )
|
||||
{ ServerListManager.SetServerName ( strNewName ); }
|
||||
|
||||
QString GetServerName() { return ServerListManager.GetServerName(); }
|
||||
|
||||
void SetServerCity ( const QString& strNewCity )
|
||||
{ ServerListManager.SetServerCity ( strNewCity ); }
|
||||
|
||||
QString GetServerCity() { return ServerListManager.GetServerCity(); }
|
||||
|
||||
void SetServerCountry ( const QLocale::Country eNewCountry )
|
||||
{ ServerListManager.SetServerCountry ( eNewCountry ); }
|
||||
|
||||
QLocale::Country GetServerCountry()
|
||||
{ return ServerListManager.GetServerCountry(); }
|
||||
|
||||
protected:
|
||||
// access functions for actual channels
|
||||
bool IsConnected ( const int iChanNum )
|
||||
|
|
|
@ -127,6 +127,7 @@ public:
|
|||
|
||||
void SetEnabled ( const bool bState );
|
||||
bool GetEnabled() const { return bEnabled; }
|
||||
|
||||
bool GetIsCentralServer() const { return bIsCentralServer; }
|
||||
|
||||
void RegisterServer ( const CHostAddress& InetAddr,
|
||||
|
@ -134,6 +135,25 @@ public:
|
|||
|
||||
void QueryServerList ( const CHostAddress& InetAddr );
|
||||
|
||||
|
||||
// set server infos -> per definition the server info of this server is
|
||||
// stored in the first entry of the list, we assume here that the first
|
||||
// entry is correctly created in the constructor of the class
|
||||
void SetServerName ( const QString& strNewName )
|
||||
{ ServerList[0].strName = strNewName; }
|
||||
|
||||
QString GetServerName() { return ServerList[0].strName; }
|
||||
|
||||
void SetServerCity ( const QString& strNewCity )
|
||||
{ ServerList[0].strCity = strNewCity; }
|
||||
|
||||
QString GetServerCity() { return ServerList[0].strCity; }
|
||||
|
||||
void SetServerCountry ( const QLocale::Country eNewCountry )
|
||||
{ ServerList[0].eCountry = eNewCountry; }
|
||||
|
||||
QLocale::Country GetServerCountry() { return ServerList[0].eCountry; }
|
||||
|
||||
protected:
|
||||
QTimer TimerPollList;
|
||||
QTimer TimerRegistering;
|
||||
|
|
901
src/settings.cpp
901
src/settings.cpp
|
@ -1,424 +1,477 @@
|
|||
/******************************************************************************\
|
||||
* Copyright (c) 2004-2011
|
||||
*
|
||||
* Author(s):
|
||||
* Volker Fischer
|
||||
*
|
||||
******************************************************************************
|
||||
*
|
||||
* 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
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
\******************************************************************************/
|
||||
|
||||
#include "settings.h"
|
||||
|
||||
|
||||
/* Implementation *************************************************************/
|
||||
void CSettings::ReadIniFile ( const QString& sFileName )
|
||||
{
|
||||
int iValue;
|
||||
bool bValue;
|
||||
QDomDocument IniXMLDocument;
|
||||
|
||||
// prepare file name for loading initialization data from XML file and read
|
||||
// data from file if possible
|
||||
QFile file ( GetIniFileNameWithPath ( sFileName ) );
|
||||
if ( file.open ( QIODevice::ReadOnly ) )
|
||||
{
|
||||
QTextStream in ( &file );
|
||||
IniXMLDocument.setContent ( in.readAll(), false );
|
||||
|
||||
file.close();
|
||||
}
|
||||
|
||||
|
||||
// Actual settings data ---------------------------------------------------
|
||||
// IP addresses
|
||||
for ( int iIPAddrIdx = 0; iIPAddrIdx < MAX_NUM_SERVER_ADDR_ITEMS; iIPAddrIdx++ )
|
||||
{
|
||||
QString sDefaultIP = "";
|
||||
|
||||
// use default only for first entry
|
||||
if ( iIPAddrIdx == 0 )
|
||||
{
|
||||
sDefaultIP = DEFAULT_SERVER_ADDRESS;
|
||||
}
|
||||
|
||||
pClient->vstrIPAddress[iIPAddrIdx] =
|
||||
GetIniSetting ( IniXMLDocument, "client",
|
||||
QString ( "ipaddress%1" ).arg ( iIPAddrIdx ), sDefaultIP );
|
||||
}
|
||||
|
||||
// name
|
||||
pClient->strName = GetIniSetting ( IniXMLDocument, "client", "name" );
|
||||
|
||||
// audio fader
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "audfad",
|
||||
AUD_FADER_IN_MIN, AUD_FADER_IN_MAX, iValue ) )
|
||||
{
|
||||
pClient->SetAudioInFader ( iValue );
|
||||
}
|
||||
|
||||
// reverberation level
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "revlev",
|
||||
0, AUD_REVERB_MAX, iValue ) )
|
||||
{
|
||||
pClient->SetReverbLevel ( iValue );
|
||||
}
|
||||
|
||||
// reverberation channel assignment
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "reverblchan", bValue ) )
|
||||
{
|
||||
pClient->SetReverbOnLeftChan ( bValue );
|
||||
}
|
||||
|
||||
// sound card selection
|
||||
// special case with this setting: the sound card initialization depends on this setting
|
||||
// call, therefore, if no setting file parameter could be retrieved, the sound card is
|
||||
// initialized with a default setting defined here
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "auddevidx",
|
||||
1, MAX_NUMBER_SOUND_CARDS, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdDev ( iValue );
|
||||
}
|
||||
else
|
||||
{
|
||||
// use "INVALID_SNC_CARD_DEVICE" to tell the sound card driver that no
|
||||
// device selection was done previously
|
||||
pClient->SetSndCrdDev ( INVALID_SNC_CARD_DEVICE );
|
||||
}
|
||||
|
||||
// sound card channel mapping settings: make sure these settings are
|
||||
// set AFTER the sound card device is set, otherwise the settings are
|
||||
// overwritten by the defaults
|
||||
//
|
||||
// sound card left input channel mapping
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "sndcrdinlch",
|
||||
0, MAX_NUM_IN_OUT_CHANNELS - 1, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdLeftInputChannel ( iValue );
|
||||
}
|
||||
|
||||
// sound card right input channel mapping
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "sndcrdinrch",
|
||||
0, MAX_NUM_IN_OUT_CHANNELS - 1, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdRightInputChannel ( iValue );
|
||||
}
|
||||
|
||||
// sound card left output channel mapping
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "sndcrdoutlch",
|
||||
0, MAX_NUM_IN_OUT_CHANNELS - 1, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdLeftOutputChannel ( iValue );
|
||||
}
|
||||
|
||||
// sound card right output channel mapping
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "sndcrdoutrch",
|
||||
0, MAX_NUM_IN_OUT_CHANNELS - 1, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdRightOutputChannel ( iValue );
|
||||
}
|
||||
|
||||
// sound card preferred buffer size index
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "prefsndcrdbufidx",
|
||||
FRAME_SIZE_FACTOR_PREFERRED, FRAME_SIZE_FACTOR_SAFE, iValue ) )
|
||||
{
|
||||
// additional check required since only a subset of factors are
|
||||
// defined
|
||||
if ( ( iValue == FRAME_SIZE_FACTOR_PREFERRED ) ||
|
||||
( iValue == FRAME_SIZE_FACTOR_DEFAULT ) ||
|
||||
( iValue == FRAME_SIZE_FACTOR_SAFE ) )
|
||||
{
|
||||
pClient->SetSndCrdPrefFrameSizeFactor ( iValue );
|
||||
}
|
||||
}
|
||||
|
||||
// automatic network jitter buffer size setting
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "autojitbuf", bValue ) )
|
||||
{
|
||||
pClient->SetDoAutoSockBufSize ( bValue );
|
||||
}
|
||||
|
||||
// network jitter buffer size
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "jitbuf",
|
||||
MIN_NET_BUF_SIZE_NUM_BL, MAX_NET_BUF_SIZE_NUM_BL, iValue ) )
|
||||
{
|
||||
pClient->SetSockBufNumFrames ( iValue );
|
||||
}
|
||||
|
||||
// flag whether the chat window shall be opened on a new chat message
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "openchatonnewmessage", bValue ) )
|
||||
{
|
||||
pClient->SetOpenChatOnNewMessage ( bValue );
|
||||
}
|
||||
|
||||
// GUI design
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "guidesign",
|
||||
0, 1 /* GD_ORIGINAL */, iValue ) )
|
||||
{
|
||||
pClient->SetGUIDesign ( static_cast<EGUIDesign> ( iValue ) );
|
||||
}
|
||||
|
||||
// flag whether using high quality audio or not
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "highqualityaudio", bValue ) )
|
||||
{
|
||||
pClient->SetCELTHighQuality ( bValue );
|
||||
}
|
||||
|
||||
// flag whether stereo mode is used
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "stereoaudio", bValue ) )
|
||||
{
|
||||
pClient->SetUseStereo ( bValue );
|
||||
}
|
||||
}
|
||||
|
||||
void CSettings::WriteIniFile ( const QString& sFileName )
|
||||
{
|
||||
// create XML document for storing initialization parameters
|
||||
QDomDocument IniXMLDocument;
|
||||
|
||||
|
||||
// Actual settings data ---------------------------------------------------
|
||||
// IP addresses
|
||||
for ( int iIPAddrIdx = 0; iIPAddrIdx < MAX_NUM_SERVER_ADDR_ITEMS; iIPAddrIdx++ )
|
||||
{
|
||||
PutIniSetting ( IniXMLDocument, "client",
|
||||
QString ( "ipaddress%1" ).arg ( iIPAddrIdx ),
|
||||
pClient->vstrIPAddress[iIPAddrIdx] );
|
||||
}
|
||||
|
||||
// name
|
||||
PutIniSetting ( IniXMLDocument, "client", "name",
|
||||
pClient->strName );
|
||||
|
||||
// audio fader
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "audfad",
|
||||
pClient->GetAudioInFader() );
|
||||
|
||||
// reverberation level
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "revlev",
|
||||
pClient->GetReverbLevel() );
|
||||
|
||||
// reverberation channel assignment
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "reverblchan",
|
||||
pClient->IsReverbOnLeftChan() );
|
||||
|
||||
// sound card selection
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "auddevidx",
|
||||
pClient->GetSndCrdDev() );
|
||||
|
||||
// sound card left input channel mapping
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "sndcrdinlch",
|
||||
pClient->GetSndCrdLeftInputChannel() );
|
||||
|
||||
// sound card right input channel mapping
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "sndcrdinrch",
|
||||
pClient->GetSndCrdRightInputChannel() );
|
||||
|
||||
// sound card left output channel mapping
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "sndcrdoutlch",
|
||||
pClient->GetSndCrdLeftOutputChannel() );
|
||||
|
||||
// sound card right output channel mapping
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "sndcrdoutrch",
|
||||
pClient->GetSndCrdRightOutputChannel() );
|
||||
|
||||
// sound card preferred buffer size index
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "prefsndcrdbufidx",
|
||||
pClient->GetSndCrdPrefFrameSizeFactor() );
|
||||
|
||||
// automatic network jitter buffer size setting
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "autojitbuf",
|
||||
pClient->GetDoAutoSockBufSize() );
|
||||
|
||||
// network jitter buffer size
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "jitbuf",
|
||||
pClient->GetSockBufNumFrames() );
|
||||
|
||||
// flag whether the chat window shall be opened on a new chat message
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "openchatonnewmessage",
|
||||
pClient->GetOpenChatOnNewMessage() );
|
||||
|
||||
// GUI design
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "guidesign",
|
||||
static_cast<int> ( pClient->GetGUIDesign() ) );
|
||||
|
||||
// flag whether using high quality audio or not
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "highqualityaudio",
|
||||
pClient->GetCELTHighQuality() );
|
||||
|
||||
// flag whether stereo mode is used
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "stereoaudio",
|
||||
pClient->GetUseStereo() );
|
||||
|
||||
// prepare file name for storing initialization data in XML file and store
|
||||
// XML data in file
|
||||
QFile file ( GetIniFileNameWithPath ( sFileName ) );
|
||||
if ( file.open ( QIODevice::WriteOnly ) )
|
||||
{
|
||||
QTextStream out ( &file );
|
||||
out << IniXMLDocument.toString();
|
||||
}
|
||||
}
|
||||
|
||||
QString CSettings::GetIniFileNameWithPath ( const QString& sFileName )
|
||||
{
|
||||
// return the file name with complete path, take care if given file name is
|
||||
// empty
|
||||
QString sCurFileName = sFileName;
|
||||
if ( sCurFileName.isEmpty() )
|
||||
{
|
||||
// we use the Qt default setting file paths for the different OSs by
|
||||
// utilizing the QSettings class
|
||||
const QSettings TempSettingsObject (
|
||||
QSettings::IniFormat, QSettings::UserScope, APP_NAME, APP_NAME );
|
||||
|
||||
const QString sConfigDir =
|
||||
QFileInfo ( TempSettingsObject.fileName() ).absolutePath();
|
||||
|
||||
// make sure the directory exists
|
||||
if ( !QFile::exists ( sConfigDir ) )
|
||||
{
|
||||
QDir TempDirectoryObject;
|
||||
TempDirectoryObject.mkpath ( sConfigDir );
|
||||
}
|
||||
|
||||
// append the actual file name
|
||||
sCurFileName = sConfigDir + "/" + DEFAULT_INI_FILE_NAME;
|
||||
}
|
||||
|
||||
return sCurFileName;
|
||||
}
|
||||
|
||||
void CSettings::SetNumericIniSet ( QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const int iValue )
|
||||
{
|
||||
// convert input parameter which is an integer to string and store
|
||||
PutIniSetting ( xmlFile, strSection, strKey, QString("%1").arg(iValue) );
|
||||
}
|
||||
|
||||
bool CSettings::GetNumericIniSet ( const QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const int iRangeStart,
|
||||
const int iRangeStop, int& iValue )
|
||||
{
|
||||
// init return value
|
||||
bool bReturn = false;
|
||||
|
||||
const QString strGetIni = GetIniSetting ( xmlFile, strSection, strKey );
|
||||
|
||||
// check if it is a valid parameter
|
||||
if ( !strGetIni.isEmpty() )
|
||||
{
|
||||
// convert string from init file to integer
|
||||
iValue = strGetIni.toInt();
|
||||
|
||||
// check range
|
||||
if ( ( iValue >= iRangeStart ) && ( iValue <= iRangeStop ) )
|
||||
{
|
||||
bReturn = true;
|
||||
}
|
||||
}
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
void CSettings::SetFlagIniSet ( QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const bool bValue )
|
||||
{
|
||||
// we encode true -> "1" and false -> "0"
|
||||
if ( bValue == true )
|
||||
{
|
||||
PutIniSetting ( xmlFile, strSection, strKey, "1" );
|
||||
}
|
||||
else
|
||||
{
|
||||
PutIniSetting ( xmlFile, strSection, strKey, "0" );
|
||||
}
|
||||
}
|
||||
|
||||
bool CSettings::GetFlagIniSet ( const QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, bool& bValue )
|
||||
{
|
||||
// init return value
|
||||
bool bReturn = false;
|
||||
|
||||
const QString strGetIni = GetIniSetting ( xmlFile, strSection, strKey );
|
||||
|
||||
if ( !strGetIni.isEmpty() )
|
||||
{
|
||||
if ( strGetIni.toInt() )
|
||||
{
|
||||
bValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
bValue = false;
|
||||
}
|
||||
|
||||
bReturn = true;
|
||||
}
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
|
||||
// Init-file routines using XML ***********************************************
|
||||
QString CSettings::GetIniSetting ( const QDomDocument& xmlFile, const QString& sSection,
|
||||
const QString& sKey, const QString& sDefaultVal )
|
||||
{
|
||||
// init return parameter with default value
|
||||
QString sResult ( sDefaultVal );
|
||||
|
||||
// get section
|
||||
QDomElement xmlSection = xmlFile.firstChildElement ( sSection );
|
||||
if ( !xmlSection.isNull() )
|
||||
{
|
||||
// get key
|
||||
QDomElement xmlKey = xmlSection.firstChildElement ( sKey );
|
||||
if ( !xmlKey.isNull() )
|
||||
{
|
||||
// get value
|
||||
sResult = xmlKey.text();
|
||||
}
|
||||
}
|
||||
|
||||
return sResult;
|
||||
}
|
||||
|
||||
void CSettings::PutIniSetting ( QDomDocument& xmlFile, const QString& sSection,
|
||||
const QString& sKey, const QString& sValue )
|
||||
{
|
||||
// check if section is already there, if not then create it
|
||||
QDomElement xmlSection = xmlFile.firstChildElement ( sSection );
|
||||
if ( xmlSection.isNull() )
|
||||
{
|
||||
// create new root element and add to document
|
||||
xmlSection = xmlFile.createElement ( sSection );
|
||||
xmlFile.appendChild ( xmlSection );
|
||||
}
|
||||
|
||||
// check if key is already there, if not then create it
|
||||
QDomElement xmlKey = xmlSection.firstChildElement ( sKey );
|
||||
if ( xmlKey.isNull() )
|
||||
{
|
||||
xmlKey = xmlFile.createElement ( sKey );
|
||||
xmlSection.appendChild ( xmlKey );
|
||||
}
|
||||
|
||||
// add actual data to the key
|
||||
QDomText currentValue = xmlFile.createTextNode ( sValue );
|
||||
xmlKey.appendChild ( currentValue );
|
||||
}
|
||||
/******************************************************************************\
|
||||
* Copyright (c) 2004-2011
|
||||
*
|
||||
* Author(s):
|
||||
* Volker Fischer
|
||||
*
|
||||
******************************************************************************
|
||||
*
|
||||
* 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
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
\******************************************************************************/
|
||||
|
||||
#include "settings.h"
|
||||
|
||||
|
||||
/* Implementation *************************************************************/
|
||||
void CSettings::ReadIniFile ( const QString& sFileName )
|
||||
{
|
||||
int iValue;
|
||||
bool bValue;
|
||||
QDomDocument IniXMLDocument;
|
||||
|
||||
// prepare file name for loading initialization data from XML file and read
|
||||
// data from file if possible
|
||||
QFile file ( GetIniFileNameWithPath ( sFileName ) );
|
||||
if ( file.open ( QIODevice::ReadOnly ) )
|
||||
{
|
||||
QTextStream in ( &file );
|
||||
IniXMLDocument.setContent ( in.readAll(), false );
|
||||
|
||||
file.close();
|
||||
}
|
||||
|
||||
|
||||
// Actual settings data ---------------------------------------------------
|
||||
if ( bIsClient )
|
||||
{
|
||||
// client:
|
||||
|
||||
// IP addresses
|
||||
for ( int iIPAddrIdx = 0; iIPAddrIdx < MAX_NUM_SERVER_ADDR_ITEMS; iIPAddrIdx++ )
|
||||
{
|
||||
QString sDefaultIP = "";
|
||||
|
||||
// use default only for first entry
|
||||
if ( iIPAddrIdx == 0 )
|
||||
{
|
||||
sDefaultIP = DEFAULT_SERVER_ADDRESS;
|
||||
}
|
||||
|
||||
pClient->vstrIPAddress[iIPAddrIdx] =
|
||||
GetIniSetting ( IniXMLDocument, "client",
|
||||
QString ( "ipaddress%1" ).arg ( iIPAddrIdx ), sDefaultIP );
|
||||
}
|
||||
|
||||
// name
|
||||
pClient->strName = GetIniSetting ( IniXMLDocument, "client", "name" );
|
||||
|
||||
// audio fader
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "audfad",
|
||||
AUD_FADER_IN_MIN, AUD_FADER_IN_MAX, iValue ) )
|
||||
{
|
||||
pClient->SetAudioInFader ( iValue );
|
||||
}
|
||||
|
||||
// reverberation level
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "revlev",
|
||||
0, AUD_REVERB_MAX, iValue ) )
|
||||
{
|
||||
pClient->SetReverbLevel ( iValue );
|
||||
}
|
||||
|
||||
// reverberation channel assignment
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "reverblchan", bValue ) )
|
||||
{
|
||||
pClient->SetReverbOnLeftChan ( bValue );
|
||||
}
|
||||
|
||||
// sound card selection
|
||||
// special case with this setting: the sound card initialization depends
|
||||
// on this setting call, therefore, if no setting file parameter could
|
||||
// be retrieved, the sound card is initialized with a default setting
|
||||
// defined here
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "auddevidx",
|
||||
1, MAX_NUMBER_SOUND_CARDS, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdDev ( iValue );
|
||||
}
|
||||
else
|
||||
{
|
||||
// use "INVALID_SNC_CARD_DEVICE" to tell the sound card driver that
|
||||
// no device selection was done previously
|
||||
pClient->SetSndCrdDev ( INVALID_SNC_CARD_DEVICE );
|
||||
}
|
||||
|
||||
// sound card channel mapping settings: make sure these settings are
|
||||
// set AFTER the sound card device is set, otherwise the settings are
|
||||
// overwritten by the defaults
|
||||
//
|
||||
// sound card left input channel mapping
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "sndcrdinlch",
|
||||
0, MAX_NUM_IN_OUT_CHANNELS - 1, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdLeftInputChannel ( iValue );
|
||||
}
|
||||
|
||||
// sound card right input channel mapping
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "sndcrdinrch",
|
||||
0, MAX_NUM_IN_OUT_CHANNELS - 1, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdRightInputChannel ( iValue );
|
||||
}
|
||||
|
||||
// sound card left output channel mapping
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "sndcrdoutlch",
|
||||
0, MAX_NUM_IN_OUT_CHANNELS - 1, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdLeftOutputChannel ( iValue );
|
||||
}
|
||||
|
||||
// sound card right output channel mapping
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "sndcrdoutrch",
|
||||
0, MAX_NUM_IN_OUT_CHANNELS - 1, iValue ) )
|
||||
{
|
||||
pClient->SetSndCrdRightOutputChannel ( iValue );
|
||||
}
|
||||
|
||||
// sound card preferred buffer size index
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "prefsndcrdbufidx",
|
||||
FRAME_SIZE_FACTOR_PREFERRED, FRAME_SIZE_FACTOR_SAFE, iValue ) )
|
||||
{
|
||||
// additional check required since only a subset of factors are
|
||||
// defined
|
||||
if ( ( iValue == FRAME_SIZE_FACTOR_PREFERRED ) ||
|
||||
( iValue == FRAME_SIZE_FACTOR_DEFAULT ) ||
|
||||
( iValue == FRAME_SIZE_FACTOR_SAFE ) )
|
||||
{
|
||||
pClient->SetSndCrdPrefFrameSizeFactor ( iValue );
|
||||
}
|
||||
}
|
||||
|
||||
// automatic network jitter buffer size setting
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "autojitbuf", bValue ) )
|
||||
{
|
||||
pClient->SetDoAutoSockBufSize ( bValue );
|
||||
}
|
||||
|
||||
// network jitter buffer size
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "jitbuf",
|
||||
MIN_NET_BUF_SIZE_NUM_BL, MAX_NET_BUF_SIZE_NUM_BL, iValue ) )
|
||||
{
|
||||
pClient->SetSockBufNumFrames ( iValue );
|
||||
}
|
||||
|
||||
// flag whether the chat window shall be opened on a new chat message
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "openchatonnewmessage", bValue ) )
|
||||
{
|
||||
pClient->SetOpenChatOnNewMessage ( bValue );
|
||||
}
|
||||
|
||||
// GUI design
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "guidesign",
|
||||
0, 1 /* GD_ORIGINAL */, iValue ) )
|
||||
{
|
||||
pClient->SetGUIDesign ( static_cast<EGUIDesign> ( iValue ) );
|
||||
}
|
||||
|
||||
// flag whether using high quality audio or not
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "highqualityaudio", bValue ) )
|
||||
{
|
||||
pClient->SetCELTHighQuality ( bValue );
|
||||
}
|
||||
|
||||
// flag whether stereo mode is used
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "stereoaudio", bValue ) )
|
||||
{
|
||||
pClient->SetUseStereo ( bValue );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// server:
|
||||
|
||||
// name
|
||||
pServer->SetServerName ( GetIniSetting ( IniXMLDocument, "server", "name" ) );
|
||||
|
||||
// city
|
||||
pServer->SetServerCity ( GetIniSetting ( IniXMLDocument, "server", "name" ) );
|
||||
|
||||
// country
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "server", "country",
|
||||
0, static_cast<int> ( QLocale::LastCountry ), iValue ) )
|
||||
{
|
||||
pServer->SetServerCountry ( static_cast<QLocale::Country> ( iValue ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CSettings::WriteIniFile ( const QString& sFileName )
|
||||
{
|
||||
// create XML document for storing initialization parameters
|
||||
QDomDocument IniXMLDocument;
|
||||
|
||||
|
||||
// Actual settings data ---------------------------------------------------
|
||||
if ( bIsClient )
|
||||
{
|
||||
// client:
|
||||
|
||||
// IP addresses
|
||||
for ( int iIPAddrIdx = 0; iIPAddrIdx < MAX_NUM_SERVER_ADDR_ITEMS; iIPAddrIdx++ )
|
||||
{
|
||||
PutIniSetting ( IniXMLDocument, "client",
|
||||
QString ( "ipaddress%1" ).arg ( iIPAddrIdx ),
|
||||
pClient->vstrIPAddress[iIPAddrIdx] );
|
||||
}
|
||||
|
||||
// name
|
||||
PutIniSetting ( IniXMLDocument, "client", "name",
|
||||
pClient->strName );
|
||||
|
||||
// audio fader
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "audfad",
|
||||
pClient->GetAudioInFader() );
|
||||
|
||||
// reverberation level
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "revlev",
|
||||
pClient->GetReverbLevel() );
|
||||
|
||||
// reverberation channel assignment
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "reverblchan",
|
||||
pClient->IsReverbOnLeftChan() );
|
||||
|
||||
// sound card selection
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "auddevidx",
|
||||
pClient->GetSndCrdDev() );
|
||||
|
||||
// sound card left input channel mapping
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "sndcrdinlch",
|
||||
pClient->GetSndCrdLeftInputChannel() );
|
||||
|
||||
// sound card right input channel mapping
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "sndcrdinrch",
|
||||
pClient->GetSndCrdRightInputChannel() );
|
||||
|
||||
// sound card left output channel mapping
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "sndcrdoutlch",
|
||||
pClient->GetSndCrdLeftOutputChannel() );
|
||||
|
||||
// sound card right output channel mapping
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "sndcrdoutrch",
|
||||
pClient->GetSndCrdRightOutputChannel() );
|
||||
|
||||
// sound card preferred buffer size index
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "prefsndcrdbufidx",
|
||||
pClient->GetSndCrdPrefFrameSizeFactor() );
|
||||
|
||||
// automatic network jitter buffer size setting
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "autojitbuf",
|
||||
pClient->GetDoAutoSockBufSize() );
|
||||
|
||||
// network jitter buffer size
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "jitbuf",
|
||||
pClient->GetSockBufNumFrames() );
|
||||
|
||||
// flag whether the chat window shall be opened on a new chat message
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "openchatonnewmessage",
|
||||
pClient->GetOpenChatOnNewMessage() );
|
||||
|
||||
// GUI design
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "guidesign",
|
||||
static_cast<int> ( pClient->GetGUIDesign() ) );
|
||||
|
||||
// flag whether using high quality audio or not
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "highqualityaudio",
|
||||
pClient->GetCELTHighQuality() );
|
||||
|
||||
// flag whether stereo mode is used
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "stereoaudio",
|
||||
pClient->GetUseStereo() );
|
||||
}
|
||||
else
|
||||
{
|
||||
// server:
|
||||
|
||||
// name
|
||||
PutIniSetting ( IniXMLDocument, "server", "name",
|
||||
pServer->GetServerName() );
|
||||
|
||||
// city
|
||||
PutIniSetting ( IniXMLDocument, "server", "city",
|
||||
pServer->GetServerCity() );
|
||||
|
||||
// country
|
||||
SetNumericIniSet ( IniXMLDocument, "server", "country",
|
||||
static_cast<int> ( pServer->GetServerCountry() ) );
|
||||
}
|
||||
|
||||
// prepare file name for storing initialization data in XML file and store
|
||||
// XML data in file
|
||||
QFile file ( GetIniFileNameWithPath ( sFileName ) );
|
||||
if ( file.open ( QIODevice::WriteOnly ) )
|
||||
{
|
||||
QTextStream out ( &file );
|
||||
out << IniXMLDocument.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Help functions **************************************************************
|
||||
QString CSettings::GetIniFileNameWithPath ( const QString& sFileName )
|
||||
{
|
||||
// return the file name with complete path, take care if given file name is
|
||||
// empty
|
||||
QString sCurFileName = sFileName;
|
||||
if ( sCurFileName.isEmpty() )
|
||||
{
|
||||
// we use the Qt default setting file paths for the different OSs by
|
||||
// utilizing the QSettings class
|
||||
const QSettings TempSettingsObject (
|
||||
QSettings::IniFormat, QSettings::UserScope, APP_NAME, APP_NAME );
|
||||
|
||||
const QString sConfigDir =
|
||||
QFileInfo ( TempSettingsObject.fileName() ).absolutePath();
|
||||
|
||||
// make sure the directory exists
|
||||
if ( !QFile::exists ( sConfigDir ) )
|
||||
{
|
||||
QDir TempDirectoryObject;
|
||||
TempDirectoryObject.mkpath ( sConfigDir );
|
||||
}
|
||||
|
||||
// append the actual file name
|
||||
if ( bIsClient )
|
||||
{
|
||||
sCurFileName = sConfigDir + "/" + DEFAULT_INI_FILE_NAME;
|
||||
}
|
||||
else
|
||||
{
|
||||
sCurFileName = sConfigDir + "/" + DEFAULT_INI_FILE_NAME_SERVER;
|
||||
}
|
||||
}
|
||||
|
||||
return sCurFileName;
|
||||
}
|
||||
|
||||
void CSettings::SetNumericIniSet ( QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const int iValue )
|
||||
{
|
||||
// convert input parameter which is an integer to string and store
|
||||
PutIniSetting ( xmlFile, strSection, strKey, QString("%1").arg(iValue) );
|
||||
}
|
||||
|
||||
bool CSettings::GetNumericIniSet ( const QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const int iRangeStart,
|
||||
const int iRangeStop, int& iValue )
|
||||
{
|
||||
// init return value
|
||||
bool bReturn = false;
|
||||
|
||||
const QString strGetIni = GetIniSetting ( xmlFile, strSection, strKey );
|
||||
|
||||
// check if it is a valid parameter
|
||||
if ( !strGetIni.isEmpty() )
|
||||
{
|
||||
// convert string from init file to integer
|
||||
iValue = strGetIni.toInt();
|
||||
|
||||
// check range
|
||||
if ( ( iValue >= iRangeStart ) && ( iValue <= iRangeStop ) )
|
||||
{
|
||||
bReturn = true;
|
||||
}
|
||||
}
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
void CSettings::SetFlagIniSet ( QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const bool bValue )
|
||||
{
|
||||
// we encode true -> "1" and false -> "0"
|
||||
if ( bValue == true )
|
||||
{
|
||||
PutIniSetting ( xmlFile, strSection, strKey, "1" );
|
||||
}
|
||||
else
|
||||
{
|
||||
PutIniSetting ( xmlFile, strSection, strKey, "0" );
|
||||
}
|
||||
}
|
||||
|
||||
bool CSettings::GetFlagIniSet ( const QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, bool& bValue )
|
||||
{
|
||||
// init return value
|
||||
bool bReturn = false;
|
||||
|
||||
const QString strGetIni = GetIniSetting ( xmlFile, strSection, strKey );
|
||||
|
||||
if ( !strGetIni.isEmpty() )
|
||||
{
|
||||
if ( strGetIni.toInt() )
|
||||
{
|
||||
bValue = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
bValue = false;
|
||||
}
|
||||
|
||||
bReturn = true;
|
||||
}
|
||||
|
||||
return bReturn;
|
||||
}
|
||||
|
||||
|
||||
// Init-file routines using XML ***********************************************
|
||||
QString CSettings::GetIniSetting ( const QDomDocument& xmlFile, const QString& sSection,
|
||||
const QString& sKey, const QString& sDefaultVal )
|
||||
{
|
||||
// init return parameter with default value
|
||||
QString sResult ( sDefaultVal );
|
||||
|
||||
// get section
|
||||
QDomElement xmlSection = xmlFile.firstChildElement ( sSection );
|
||||
if ( !xmlSection.isNull() )
|
||||
{
|
||||
// get key
|
||||
QDomElement xmlKey = xmlSection.firstChildElement ( sKey );
|
||||
if ( !xmlKey.isNull() )
|
||||
{
|
||||
// get value
|
||||
sResult = xmlKey.text();
|
||||
}
|
||||
}
|
||||
|
||||
return sResult;
|
||||
}
|
||||
|
||||
void CSettings::PutIniSetting ( QDomDocument& xmlFile, const QString& sSection,
|
||||
const QString& sKey, const QString& sValue )
|
||||
{
|
||||
// check if section is already there, if not then create it
|
||||
QDomElement xmlSection = xmlFile.firstChildElement ( sSection );
|
||||
if ( xmlSection.isNull() )
|
||||
{
|
||||
// create new root element and add to document
|
||||
xmlSection = xmlFile.createElement ( sSection );
|
||||
xmlFile.appendChild ( xmlSection );
|
||||
}
|
||||
|
||||
// check if key is already there, if not then create it
|
||||
QDomElement xmlKey = xmlSection.firstChildElement ( sKey );
|
||||
if ( xmlKey.isNull() )
|
||||
{
|
||||
xmlKey = xmlFile.createElement ( sKey );
|
||||
xmlSection.appendChild ( xmlKey );
|
||||
}
|
||||
|
||||
// add actual data to the key
|
||||
QDomText currentValue = xmlFile.createTextNode ( sValue );
|
||||
xmlKey.appendChild ( currentValue );
|
||||
}
|
||||
|
|
151
src/settings.h
151
src/settings.h
|
@ -1,73 +1,78 @@
|
|||
/******************************************************************************\
|
||||
* Copyright (c) 2004-2007
|
||||
*
|
||||
* Author(s):
|
||||
* Volker Fischer
|
||||
*
|
||||
******************************************************************************
|
||||
*
|
||||
* 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
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
\******************************************************************************/
|
||||
|
||||
#if !defined ( SETTINGS_H__3B0BA660_DGEG56G456G9876D31912__INCLUDED_ )
|
||||
#define SETTINGS_H__3B0BA660_DGEG56G456G9876D31912__INCLUDED_
|
||||
|
||||
#include <qdom.h>
|
||||
#include <qfile.h>
|
||||
#include <qsettings.h>
|
||||
#include <qdir.h>
|
||||
#include <qtextstream.h>
|
||||
#include "global.h"
|
||||
#include "client.h"
|
||||
|
||||
|
||||
/* Classes ********************************************************************/
|
||||
class CSettings
|
||||
{
|
||||
public:
|
||||
CSettings ( CClient* pNCliP ) : pClient ( pNCliP ) {}
|
||||
|
||||
void Load ( const QString& sFileName = "" ) { ReadIniFile ( sFileName ); }
|
||||
void Save ( const QString& sFileName = "" ) { WriteIniFile ( sFileName ); }
|
||||
|
||||
protected:
|
||||
void ReadIniFile ( const QString& sFileName );
|
||||
void WriteIniFile ( const QString& sFileName );
|
||||
|
||||
QString GetIniFileNameWithPath ( const QString& sFileName );
|
||||
|
||||
// init file access function for read/write
|
||||
void SetNumericIniSet ( QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const int iValue = 0 );
|
||||
bool GetNumericIniSet ( const QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const int iRangeStart,
|
||||
const int iRangeStop, int& iValue );
|
||||
void SetFlagIniSet ( QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const bool bValue = false );
|
||||
bool GetFlagIniSet ( const QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, bool& bValue );
|
||||
|
||||
// actual working function for init-file access
|
||||
QString GetIniSetting( const QDomDocument& xmlFile, const QString& sSection,
|
||||
const QString& sKey, const QString& sDefaultVal = "" );
|
||||
void PutIniSetting ( QDomDocument& xmlFile, const QString& sSection,
|
||||
const QString& sKey, const QString& sValue = "" );
|
||||
|
||||
// pointer to the client object needed for the various settings
|
||||
CClient* pClient;
|
||||
};
|
||||
|
||||
#endif // !defined ( SETTINGS_H__3B0BA660_DGEG56G456G9876D31912__INCLUDED_ )
|
||||
/******************************************************************************\
|
||||
* Copyright (c) 2004-2007
|
||||
*
|
||||
* Author(s):
|
||||
* Volker Fischer
|
||||
*
|
||||
******************************************************************************
|
||||
*
|
||||
* 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
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* 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
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details.
|
||||
*
|
||||
* 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.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
\******************************************************************************/
|
||||
|
||||
#if !defined ( SETTINGS_H__3B0BA660_DGEG56G456G9876D31912__INCLUDED_ )
|
||||
#define SETTINGS_H__3B0BA660_DGEG56G456G9876D31912__INCLUDED_
|
||||
|
||||
#include <qdom.h>
|
||||
#include <qfile.h>
|
||||
#include <qsettings.h>
|
||||
#include <qdir.h>
|
||||
#include <qtextstream.h>
|
||||
#include "global.h"
|
||||
#include "client.h"
|
||||
#include "server.h"
|
||||
|
||||
|
||||
/* Classes ********************************************************************/
|
||||
class CSettings
|
||||
{
|
||||
public:
|
||||
CSettings ( CClient* pNCliP ) : pClient ( pNCliP ), bIsClient ( true ) {}
|
||||
CSettings ( CServer* pNSerP ) : pServer ( pNSerP ), bIsClient ( false ) {}
|
||||
|
||||
void Load ( const QString& sFileName = "" ) { ReadIniFile ( sFileName ); }
|
||||
void Save ( const QString& sFileName = "" ) { WriteIniFile ( sFileName ); }
|
||||
|
||||
protected:
|
||||
void ReadIniFile ( const QString& sFileName );
|
||||
void WriteIniFile ( const QString& sFileName );
|
||||
|
||||
QString GetIniFileNameWithPath ( const QString& sFileName );
|
||||
|
||||
// init file access function for read/write
|
||||
void SetNumericIniSet ( QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const int iValue = 0 );
|
||||
bool GetNumericIniSet ( const QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const int iRangeStart,
|
||||
const int iRangeStop, int& iValue );
|
||||
void SetFlagIniSet ( QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, const bool bValue = false );
|
||||
bool GetFlagIniSet ( const QDomDocument& xmlFile, const QString& strSection,
|
||||
const QString& strKey, bool& bValue );
|
||||
|
||||
// actual working function for init-file access
|
||||
QString GetIniSetting( const QDomDocument& xmlFile, const QString& sSection,
|
||||
const QString& sKey, const QString& sDefaultVal = "" );
|
||||
void PutIniSetting ( QDomDocument& xmlFile, const QString& sSection,
|
||||
const QString& sKey, const QString& sValue = "" );
|
||||
|
||||
// pointer to the client/server object which stores the various settings
|
||||
CClient* pClient; // for client
|
||||
CServer* pServer; // for server
|
||||
|
||||
bool bIsClient;
|
||||
};
|
||||
|
||||
#endif // !defined ( SETTINGS_H__3B0BA660_DGEG56G456G9876D31912__INCLUDED_ )
|
||||
|
|
Loading…
Reference in a new issue