⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setting.cpp

📁 qgo-1.5.4-r3.tar.gz linux下一个很好玩的游戏
💻 CPP
字号:
/* * settings.cpp */#include "setting.h"#include "config.h"#include "defines.h"#include "globals.h"#include "icons.h"#include <qfile.h>#include <qtextstream.h>#include <qdir.h>#include <qfont.h>#include <qcolor.h>#include <qstringlist.h>#include <qstring.h>//#ifdef USE_XPM#include ICON_APPICON//#endif#ifdef Q_OS_MACX#include <CoreFoundation/CFString.h>#include <CoreFoundation/CFBundle.h>#endif //Q_OS_MACX#ifdef Q_WS_WIN#include <windows.h>QString applicationPath;/* * If we are on Windows, read application path from registry, key was set * during installation at HKEY_LOCAL_MACHINE\Software\qGo\Location */QString Setting::getApplicationPath(){	LONG res;	HKEY hkey;	QString s = NULL;	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("Software\\qGo"), NULL,	    KEY_READ, &hkey) == ERROR_SUCCESS)	{		DWORD type = REG_SZ,		size;		char buffer[100];		size = sizeof(buffer);		res = RegQueryValueEx(hkey, TEXT("Location"), NULL, &type, (PBYTE)&buffer, &size);		RegCloseKey(hkey);		s = qt_winQString(buffer);		qDebug("getApplicationPath(): %s", s.latin1());	}	return s;}#endif// parameter list comprising key and txtParameter::Parameter(const QString &key, const QString &txt){ 	k = key;	t = txt;}/* *   Settings */Setting::Setting() : Misc<QString>(){	// list of parameters to be read/saved at start/end	// true -> delete items when they are removed	list.setAutoDelete(true);	clearList();    	// defaults:	writeBoolEntry("USE_NMATCH", true);	writeBoolEntry("NMATCH_BLACK", true);	writeBoolEntry("NMATCH_WHITE", true);	writeBoolEntry("NMATCH_NIGIRI", true);	writeIntEntry("NMATCH_HANDICAP", 9);	writeIntEntry("NMATCH_MAIN_TIME", 100);	writeIntEntry("NMATCH_BYO_TIME", 100);	writeBoolEntry("SIDEBAR", true);	writeBoolEntry("BOARD_COORDS", true);	writeBoolEntry("SGF_BOARD_COORDS", false);	writeBoolEntry("CURSOR", true);	writeBoolEntry("SLIDER", true);	writeBoolEntry("FILEBAR", true);	writeBoolEntry("TOOLBAR", true);	writeBoolEntry("MAINTOOLBAR", true);	writeBoolEntry("EDITBAR", true);	writeBoolEntry("STATUSBAR", true);	writeBoolEntry("MENUBAR", true);	writeEntry("SKIN", "");	writeEntry("SKIN_TABLE", "");	writeBoolEntry("TOOLTIPS", true);	//writeBoolEntry("STONES_SHADOW", true);	//writeBoolEntry("STONES_SHELLS", true);	writeBoolEntry("VAR_FONT", true);	writeBoolEntry("SOUND_STONE", true);	writeBoolEntry("SOUND_AUTOPLAY", true);	writeBoolEntry("SOUND_TALK", true);	writeBoolEntry("SOUND_MATCH", true);	writeBoolEntry("SOUND_GAMEEND", true);	writeBoolEntry("SOUND_PASS", true);	writeBoolEntry("SOUND_TIME", true);	writeBoolEntry("SOUND_SAY", true);	writeBoolEntry("SOUND_ENTER", true);	writeBoolEntry("SOUND_LEAVE", true);	writeBoolEntry("SOUND_DISCONNECT", true);	writeBoolEntry("SOUND_CONNECT", true);	writeIntEntry("TIMER_INTERVAL", 1);	writeBoolEntry("SGF_TIME_TAGS", true);	writeIntEntry("DEFAULT_SIZE", 19);	writeIntEntry("DEFAULT_TIME", 10);	writeIntEntry("DEFAULT_BY", 10);	writeIntEntry("BY_TIMER", 10);	writeIntEntry("COMPUTER_SIZE", 19);	writeEntry("LAST_DIR", QDir::homeDirPath());//#ifdef Q_OS_MACX	writeBoolEntry("REM_DIR", true);	writeIntEntry("STONES_LOOK", 3);//#endif	// Default ASCII import charset	charset = new ASCII_Import();	charset->blackStone = '#';	charset->whiteStone = 'O';	charset->starPoint = ',';	charset->emptyPoint = '.';	charset->hBorder = '|';	charset->vBorder = '-';	addImportAsBrother = false;	fastLoad = false;	language = "Default";	fontStandard = QFont();	fontMarks = QFont();	fontComments = QFont();	fontLists = QFont();	fontClocks = QFont();  	fontConsole= QFont("Fixed");	colorBackground = QColor("white");	colorAltBackground = QColor(242,242,242,QColor::Rgb);		// init	qgo = 0;	cw = 0;	program_dir = QString();	nmatch_settings_modified=false;#ifdef Q_WS_WIN	applicationPath = getApplicationPath();#endif//#ifdef USE_XPM	image0 = QPixmap((const char **)Bowl_xpm);//#else//	image0 = QPixmap(ICON_APPICON);//#endif}Setting::~Setting(){	// write to file//	saveSettings();	delete charset;}void Setting::loadSettings(){	QFile file;	// set under Linux	settingHomeDir = QString(getenv("HOME"));	if (!settingHomeDir)		// set under Windows		settingHomeDir = QString(getenv("USERPROFILE"));	if (!settingHomeDir)	{		// however...		qDebug("HOME and/or USERPROFILE are not set");		settingHomeDir = QDir::homeDirPath();		file.setName(settingHomeDir + "/.qgoclientrc");		if (file.exists())		{			// rename, but use it anyway			QString oldName = ".qgoclientrc";			QString newName = ".qgoclientrc.bak";			QDir::home().rename(oldName, newName);			file.setName(settingHomeDir + "/.qgoclientrc.bak");		}		else			// file may be already renamed			file.setName(settingHomeDir + "/." + PACKAGE + "rc");	}	else		file.setName(settingHomeDir + "/." + PACKAGE + "rc");	if (!file.exists() || !file.open(IO_ReadOnly))	{		qDebug("Failed loading settings: " + file.name());		// maybe old file available		file.setName(QDir::homeDirPath() + "/.qgoclientrc");		if (!file.exists() || !file.open(IO_ReadOnly))		{			qWarning("Failed loading settings: " + file.name());			return;		}	}	qDebug("Use settings: " + file.name());	// read file	QTextStream txt(&file);	QString s;	int pos, pos1, pos2;	while (!txt.eof())	{		s = txt.readLine();		if (s.length() > 2)		{			// ' ' is delitmiter between key and txt			pos = s.find(' ');			// find first '['			pos1 = s.find('[');			// find last ']'			pos2 = s.findRev(']');			writeEntry(s.left(pos), s.mid(pos1 + 1, pos2 - pos1 - 1));		}	}	file.close();	// init fonts and colors	updateFont(fontStandard, "FONT_MAIN");	updateFont(fontMarks, "FONT_MARK");	updateFont(fontComments, "FONT_COMMENT");	updateFont(fontLists, "FONT_LIST");	updateFont(fontClocks, "FONT_CLOCK");	updateFont(fontConsole, "FONT_CONSOLE"); 	s = readEntry("COLOR_BK");	if (s)		colorBackground = QColor(s);	s = readEntry("COLOR_ALT_BK");	if (s)		colorAltBackground = QColor(s);	s=readEntry("CHARSET");	charset->blackStone = s.constref(0);	charset->emptyPoint = s.constref(1);	charset->hBorder = s.constref(2);	charset->starPoint = s.constref(3);	charset->vBorder = s.constref(4);	charset->whiteStone = s.constref(5);  }QString Setting::fontToString(QFont f){#ifdef Q_WS_X11_xxx	return f.rawName();#else	return f.family() + "-" +		QString::number(f.pointSize()) + "-" +		QString::number(f.weight()) + "-" +		QString::number(f.italic()) + "-" +		QString::number(f.underline()) + "-" +		QString::number(f.strikeOut());#endif}void Setting::updateFont(QFont &font, QString entry){	// do font stuff	QString s = readEntry(entry);	if (!s)		return;#ifdef Q_WS_X11_xxx	font.setRawName(s);#else	QString fs = element(s, 0, "-");	font.setFamily(fs);//	qDebug("FAMILY: %s", fs.latin1());	for (int i=1; i<6; i++)	{		int n = element(s, i, "-").toInt();		switch (i)		{			case 1:				font.setPointSize(n);				break;			case 2:				font.setWeight(n);				break;			case 3:				font.setItalic(n);				break;			case 4:				font.setUnderline(n);				break;			case 5:				font.setStrikeOut(n);				break;			default:				qWarning("Unknown font attribut!");		}	}#endif}void Setting::saveSettings(){//	if (readBoolEntry("REM_FONT"))//	{	// add fonts and colors	writeEntry("FONT_MAIN", fontToString(fontStandard));	writeEntry("FONT_MARK", fontToString(fontMarks));	writeEntry("FONT_COMMENT", fontToString(fontComments));	writeEntry("FONT_LIST", fontToString(fontLists));	writeEntry("FONT_CLOCK", fontToString(fontClocks));	writeEntry("FONT_CONSOLE", fontToString(fontConsole));	QString cs = "";	cs += QChar(charset->blackStone);	cs += QChar(charset->emptyPoint);	cs += QChar(charset->hBorder);	cs += QChar(charset->starPoint);	cs += QChar(charset->vBorder);	cs += QChar(charset->whiteStone);    	writeEntry("CHARSET", cs);	writeEntry("COLOR_BK", colorBackground.name());	writeEntry("COLOR_ALT_BK", colorAltBackground.name());	writeIntEntry("VERSION", SETTING_VERSION);	list.sort();	QFile file(settingHomeDir + "/." + PACKAGE + "rc");    	if (file.open(IO_WriteOnly))	{		QTextStream txtfile(&file);		// write list to file: KEY [TXT]		Parameter *par;		for (par = list.first(); par != 0; par = list.next())			if (!par->txt().isEmpty() && !par->txt().isNull())				txtfile << par->key() << " [" << par->txt() << "]" << endl;		file.close();	}}// make list entrybool Setting::writeEntry(const QString &key, const QString &txt){	// seek key	Parameter *par;	for (par = list.first(); par != 0; par = list.next())	{		if (par->key() == key)		{			// if found, insert at current pos, and remove old item			// store type value			par->setPar(key, txt);//			list.insert(list.at(), new Parameter(key, txt, ct));//			list.next();//			list.remove();			// false -> entry already in list			return false;		}	}	list.append(new Parameter(key, txt));	// true -> new entry	return true;}// return a text entry indexed by keyQString Setting::readEntry(const QString &key){	// seek key	Parameter *par;	for (par = list.first(); par != 0; par = list.next())		if (par->key() == key)			return par->txt();	qDebug("Setting::readEntry(): " + key + " == 0");	return NULL;}void Setting::clearList(void){	list.clear();}const QStringList Setting::getAvailableLanguages(){    // This is ugly, but I want those defines in defines.h, so all settings are in that file    const char *available_languages[] = AVAILABLE_LANGUAGES;    const int number_of_available_languages = NUMBER_OF_AVAILABLE_LANGUAGES;    QStringList list;    int i;    for (i=0; i<number_of_available_languages; i++)		list << available_languages[i];	    return list;}QString Setting::convertNumberToLanguage(int n){    const char* language_codes[] = LANGUAGE_CODES;    if (n == 0)		return "Default";        return language_codes[n-1];}int Setting::convertLanguageCodeToNumber(){    const char *language_codes[] = LANGUAGE_CODES;    const int number_of_available_languages = NUMBER_OF_AVAILABLE_LANGUAGES;    int i;    for (i=0; i<number_of_available_languages; i++)    {		if (readEntry("LANG") == QString(language_codes[i]))			return i+1;    }    return 0;}QString Setting::getTranslationsDirectory(){    qDebug("Checking for translations directory...");    QStringList list;		ASSERT(program_dir);#ifdef Q_WS_WIN	ASSERT(applicationPath);	list << applicationPath + "/translations"		<< program_dir + "/translations"		<< "C:/Program Files/qGo/translations"		<< "D:/Program Files/qGo/translations"		<< "E:/Program Files/qGo/translations"		<< "C:/Programme/qGo/translations"		<< "D:/Programme/qGo/translations"		<< "E:/Programme/qGo/translations"		<< "./translations";#elif defined(Q_OS_MACX)	//get the bundle path and find our resources	CFURLRef bundleRef = CFBundleCopyBundleURL(CFBundleGetMainBundle());	CFStringRef bundlePath = CFURLCopyFileSystemPath(bundleRef, kCFURLPOSIXPathStyle);	list << (QString)CFStringGetCStringPtr(bundlePath, CFStringGetSystemEncoding())				+ "/Contents/Resources";#else	list	<< DATADIR "/" PACKAGE "/translations"		<< program_dir + "/translations"		<< "./share/" PACKAGE "/translations"		<< "/usr/share/" PACKAGE "/translations"		<< "/usr/local/share/" PACKAGE "/translations"		<< "./translations";#endif    for (QStringList::Iterator it = list.begin(); it != list.end(); ++it)    {		QDir d(*it);		if (d.exists())		{			qDebug("Translations found in %s", d.absPath().latin1());			return d.absPath();		}    }    return "./translations";  // Hoping for the best...}//const char* Setting::getLanguage()QString Setting::getLanguage(){	QString l =  readEntry("LANG");	QString env = QString(getenv("LANG"));		if (env) 		env = env.left(2);		//const char *hop[2];	//hop[0] = char(12)  ;			if ((l.isEmpty()) || (l == QString("Default")))		return  env ;	else		return readEntry("LANG"); //.latin1();	//return readEntry("LANG") == NULL ? getenv("LANG") : readEntry("LANG").latin1(); }}bool Setting::getNewVersionWarning(){	QString l =  readEntry("NEWVERSIONWARNING");		if (l == QString(VERSION))		return false ;			writeEntry("NEWVERSIONWARNING", VERSION);		return true;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -