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

📄 prefs.c

📁 3D游戏场景编辑器
💻 C
字号:
/****************************************************************************************/
/*  Prefs.c                                                                             */
/*                                                                                      */
/*  Author:       Jim Mischel                                                           */
/*  Description:  Program preferences.                                                  */
/*                                                                                      */
/*  The contents of this file are subject to the Genesis3D Public License               */
/*  Version 1.01 (the "License"); you may not use this file except in                   */
/*  compliance with the License. You may obtain a copy of the License at                */
/*  http://www.genesis3d.com                                                            */
/*                                                                                      */
/*  Software distributed under the License is distributed on an "AS IS"                 */
/*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */
/*  the License for the specific language governing rights and limitations              */
/*  under the License.                                                                  */
/*                                                                                      */
/*  The Original Code is Genesis3D, released March 25, 1999.                            */
/*Genesis3D Version 1.1 released November 15, 1999                            */
/*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */
/*                                                                                      */
/*  Modified by Tom Morris for GenEdit-Classic ver. 0.58, April 23, 2001				*/
/****************************************************************************************/
#include "prefs.h"
#include "ram.h"
#include "util.h"
#include <assert.h>
#pragma warning(disable : 4201 4214 4115 4514)
#include <windows.h>
#pragma warning(default : 4201 4214 4115)
#include <stdlib.h>

static const char GRID_SECTION_NAME[]	= "Grid";
static const char BACKGROUND_KEY[]		= "Background";
static const char GRID_COLOR_KEY[]		= "Color";
static const char SNAPGRID_COLOR_KEY[]	= "SnapColor";

static const int DEFAULT_BACKGROUND_COLOR	= 0x00808080;
static const int DEFAULT_GRID_COLOR			= 0x00646464;
static const int DEFAULT_SNAPGRID_COLOR		= 0x00464646;


static const char PATHS_SECTION_NAME[]	= "Paths";
static const char TXLNAME_KEY[]			= "TxlName";
static const char TXLSEARCH_KEY[]		= "TxlSearchPath";
static const char PREVIEW_KEY[]			= "PreviewPath";
static const char HEADERS_KEY[]			= "Include";	//	post 0.57
static const char OBJECTSDIR_KEY[]		= "ObjectsDir";
static const char PROJECTDIR_KEY[]		= "ProjectDir";

static const char DEFAULT_TXLNAME[]		= "gedit.txl";
static const char DEFAULT_TXLSEARCH[]	= ".\\";
static const char DEFAULT_PREVIEW[]		= "gpreview.exe";
static const char DEFAULT_HEADERS[]		= ".\\Include";	//	post 0.57
static const char DEFAULT_OBJECTSDIR[]	= ".\\Objects";
static const char DEFAULT_PROJECTDIR[]	= ".\\Levels";


/*
#define GenEdit_SECTION_NAME "GEdit"

#define GenEdit_TXLPATH_ENTRY "DefaultTxLib"
#define GenEdit_DEFAULT_TXL "GEdit.Txl"

#define GenEdit_PREVIEWPATH_ENTRY "GPreviewPath"
#define GenEdit_DEFAULT_PREVIEW "GPreview.exe"

#define GenEdit_PROJECTDIR_ENTRY "ProjectDir"
#define GenEdit_DEFAULT_PROJECTDIR ""

#define GenEdit_EXTPATH_ENTRY "ExtensionsPath"
*/

struct tag_PathPrefs
{
	char *TxlName;
	char *TxlSearchPath;
	char *PreviewPath;
	char *HeadersList;
	char *ObjectsDir;
	char *ProjectDir;
};

struct tag_Prefs
{
	int BackgroundColor;
	int GridColor;
	int SnapGridColor;
	PathPrefs Paths;
};

static char *Prefs_GetString
	(
	  const char *Section,
	  const char *Key,
	  const char *Default,
	  const char *IniFilename
	)
{
	DWORD retval;
	char Buffer[1024];

	retval = GetPrivateProfileString (Section, Key, Default, Buffer, sizeof (Buffer), IniFilename);
	if (retval == 0)
	{
		return NULL;
	}

	return Util_Strdup (Buffer);
}

Prefs *Prefs_Create (void)
{
	Prefs *pPrefs;

	pPrefs = GE_RAM_ALLOCATE_STRUCT (Prefs);
	if (pPrefs != NULL)
	{
		pPrefs->BackgroundColor = DEFAULT_BACKGROUND_COLOR;
		pPrefs->GridColor = DEFAULT_GRID_COLOR;
		pPrefs->SnapGridColor = DEFAULT_SNAPGRID_COLOR;
		pPrefs->Paths.TxlName = Util_Strdup (DEFAULT_TXLNAME);
		pPrefs->Paths.TxlSearchPath = Util_Strdup (DEFAULT_TXLSEARCH);
		pPrefs->Paths.PreviewPath = Util_Strdup (DEFAULT_PREVIEW);
		pPrefs->Paths.HeadersList = Util_Strdup (DEFAULT_HEADERS);
		pPrefs->Paths.ObjectsDir = Util_Strdup (DEFAULT_OBJECTSDIR);
		pPrefs->Paths.ProjectDir = Util_Strdup (DEFAULT_PROJECTDIR);
	}
	return pPrefs;
}


void Prefs_Destroy (Prefs **ppPrefs)
{
	Prefs *pPrefs;
	PathPrefs *pPaths;

	assert (ppPrefs != NULL);

	pPrefs = *ppPrefs;
	assert (pPrefs != NULL);

	pPaths = &pPrefs->Paths;
	if (pPaths->TxlName != NULL)		geRam_Free (pPaths->TxlName);
	if (pPaths->TxlSearchPath != NULL)	geRam_Free (pPaths->TxlSearchPath);
	if (pPaths->PreviewPath != NULL)	geRam_Free (pPaths->PreviewPath);
	if (pPaths->HeadersList != NULL)	geRam_Free (pPaths->HeadersList);
	if (pPaths->ObjectsDir != NULL)		geRam_Free (pPaths->ObjectsDir);
	if (pPaths->ProjectDir != NULL)		geRam_Free (pPaths->ProjectDir);

	geRam_Free (*ppPrefs);
}
Prefs *Prefs_Read (const char *IniFilename)
{
	Prefs *pPrefs;

	pPrefs = GE_RAM_ALLOCATE_STRUCT (Prefs);
	if (pPrefs != NULL)
	{
		// read preferences from INI file
		pPrefs->BackgroundColor = GetPrivateProfileInt (GRID_SECTION_NAME, BACKGROUND_KEY, DEFAULT_BACKGROUND_COLOR, IniFilename);
		pPrefs->GridColor = GetPrivateProfileInt (GRID_SECTION_NAME, GRID_COLOR_KEY, DEFAULT_GRID_COLOR, IniFilename);
		pPrefs->SnapGridColor = GetPrivateProfileInt (GRID_SECTION_NAME, SNAPGRID_COLOR_KEY, DEFAULT_SNAPGRID_COLOR, IniFilename);

		pPrefs->Paths.TxlName = Prefs_GetString (PATHS_SECTION_NAME, TXLNAME_KEY, DEFAULT_TXLNAME, IniFilename);
		pPrefs->Paths.TxlSearchPath = Prefs_GetString (PATHS_SECTION_NAME, TXLSEARCH_KEY, DEFAULT_TXLSEARCH, IniFilename);
		pPrefs->Paths.PreviewPath = Prefs_GetString (PATHS_SECTION_NAME, PREVIEW_KEY, DEFAULT_PREVIEW, IniFilename);
		pPrefs->Paths.HeadersList = Prefs_GetString (PATHS_SECTION_NAME, HEADERS_KEY, DEFAULT_HEADERS, IniFilename);
		pPrefs->Paths.ObjectsDir = Prefs_GetString (PATHS_SECTION_NAME, OBJECTSDIR_KEY, DEFAULT_OBJECTSDIR, IniFilename);
		pPrefs->Paths.ProjectDir = Prefs_GetString (PATHS_SECTION_NAME, PROJECTDIR_KEY, DEFAULT_PROJECTDIR, IniFilename);
	}
	return pPrefs;
}

static geBoolean WritePrivateProfileInt
	(
	  const char *Section,
	  const char *Key,
	  int Val,
	  const char *IniFilename
	)
{
	char str[32];

	itoa (Val, str, 10);
	return WritePrivateProfileString (Section, Key, str, IniFilename);
}

geBoolean Prefs_Save (const Prefs *pPrefs, const char *IniFilename)
{
	WritePrivateProfileInt (GRID_SECTION_NAME, BACKGROUND_KEY, pPrefs->BackgroundColor, IniFilename);
	WritePrivateProfileInt (GRID_SECTION_NAME, GRID_COLOR_KEY, pPrefs->GridColor, IniFilename);
	WritePrivateProfileInt (GRID_SECTION_NAME, SNAPGRID_COLOR_KEY, pPrefs->SnapGridColor, IniFilename);

	WritePrivateProfileString (PATHS_SECTION_NAME, TXLNAME_KEY, pPrefs->Paths.TxlName, IniFilename);
	WritePrivateProfileString (PATHS_SECTION_NAME, TXLSEARCH_KEY, pPrefs->Paths.TxlSearchPath, IniFilename);
	WritePrivateProfileString (PATHS_SECTION_NAME, PREVIEW_KEY, pPrefs->Paths.PreviewPath, IniFilename);
	WritePrivateProfileString (PATHS_SECTION_NAME, HEADERS_KEY, pPrefs->Paths.HeadersList, IniFilename);
	WritePrivateProfileString (PATHS_SECTION_NAME, OBJECTSDIR_KEY, pPrefs->Paths.ObjectsDir, IniFilename);
	WritePrivateProfileString (PATHS_SECTION_NAME, PROJECTDIR_KEY, pPrefs->Paths.ProjectDir, IniFilename);	

	return GE_TRUE;
}



int Prefs_GetBackgroundColor (const Prefs *pPrefs)
{
	return pPrefs->BackgroundColor;
}

geBoolean Prefs_SetBackgroundColor (Prefs *pPrefs, int Color)
{
	pPrefs->BackgroundColor = Color;
	return GE_TRUE;
}

int Prefs_GetGridColor (const Prefs *pPrefs)
{
	return pPrefs->GridColor;
}

geBoolean Prefs_SetGridColor (Prefs *pPrefs, int Color)
{
	pPrefs->GridColor = Color;
	return GE_TRUE;
}

int Prefs_GetSnapGridColor (const Prefs *pPrefs)
{
	return pPrefs->SnapGridColor;
}

geBoolean Prefs_SetSnapGridColor (Prefs *pPrefs, int Color)
{
	pPrefs->SnapGridColor = Color;
	return GE_TRUE;
}

const char *Prefs_GetTxlName (const Prefs *pPrefs)
{
	return pPrefs->Paths.TxlName;
}

geBoolean Prefs_SetTxlName (Prefs *pPrefs, const char *NewName)
{
	return Util_SetString (&pPrefs->Paths.TxlName, NewName);
}

const char *Prefs_GetTxlSearchPath (const Prefs *pPrefs)
{
	return pPrefs->Paths.TxlSearchPath;
}

geBoolean Prefs_SetTxlSearchPath (Prefs *pPrefs, const char *NewPath)
{
	return Util_SetString (&pPrefs->Paths.TxlSearchPath, NewPath);
}

const char *Prefs_GetPreviewPath (const Prefs *pPrefs)
{
	return pPrefs->Paths.PreviewPath;
}

geBoolean Prefs_SetPreviewPath (Prefs *pPrefs, const char *NewPath)
{
	return Util_SetString (&pPrefs->Paths.PreviewPath, NewPath);
}

const char *Prefs_GetHeadersList (const Prefs *pPrefs)
{
	return pPrefs->Paths.HeadersList;
}

geBoolean Prefs_SetHeadersList (Prefs *pPrefs, const char *NewList)
{
	return Util_SetString (&pPrefs->Paths.HeadersList, NewList);
}

const char *Prefs_GetObjectsDir (const Prefs *pPrefs)
{
	return pPrefs->Paths.ObjectsDir;
}

geBoolean Prefs_SetObjectsDir (Prefs *pPrefs, const char *NewDir)
{
	return Util_SetString (&pPrefs->Paths.ObjectsDir, NewDir);
}

const char *Prefs_GetProjectDir (const Prefs *pPrefs)
{
	return pPrefs->Paths.ProjectDir;
}

geBoolean Prefs_SetProjectDir (Prefs *pPrefs, const char *NewDir)
{
	return Util_SetString (&pPrefs->Paths.ProjectDir, NewDir);
}

⌨️ 快捷键说明

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