From 8f7f56f1eae2998b9431e07a3ed0ea7765eb19ba Mon Sep 17 00:00:00 2001 From: Didier 'OdyX' Raboud Date: Wed, 30 Oct 2013 17:27:05 +0100 Subject: On Mac OS X, write colobot.ini and savegames to Application Support directories --- src/CMakeLists.txt | 3 +++ src/app/system.cpp | 4 ++++ src/app/system_macosx.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++++++ src/app/system_macosx.h | 36 ++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+) create mode 100644 src/app/system_macosx.cpp create mode 100644 src/app/system_macosx.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2fab853..9a6dba1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -61,6 +61,9 @@ if(PLATFORM_WINDOWS) set(SYSTEM_CPP_MODULE "system_windows.cpp") elseif(PLATFORM_LINUX) set(SYSTEM_CPP_MODULE "system_linux.cpp") +elseif(PLATFORM_MACOSX) + set(SYSTEM_CPP_MODULE "system_macosx.cpp") + set(SYSTEM_CPP_MODULE ${SYSTEM_CPP_MODULE} "app/system_other.cpp") else() set(SYSTEM_CPP_MODULE "system_other.cpp") endif() diff --git a/src/app/system.cpp b/src/app/system.cpp index 2eb68ba..ce69469 100644 --- a/src/app/system.cpp +++ b/src/app/system.cpp @@ -25,6 +25,8 @@ #include "app/system_windows.h" #elif defined(PLATFORM_LINUX) #include "app/system_linux.h" +#elif defined(PLATFORM_MACOSX) + #include "app/system_macosx.h" #else #include "app/system_other.h" #endif @@ -48,6 +50,8 @@ CSystemUtils* CSystemUtils::Create() m_instance = new CSystemUtilsWindows(); #elif defined(PLATFORM_LINUX) m_instance = new CSystemUtilsLinux(); +#elif defined(PLATFORM_MACOSX) + m_instance = new CSystemUtilsMacOSX(); #else m_instance = new CSystemUtilsOther(); #endif diff --git a/src/app/system_macosx.cpp b/src/app/system_macosx.cpp new file mode 100644 index 0000000..8e9608c --- /dev/null +++ b/src/app/system_macosx.cpp @@ -0,0 +1,60 @@ +// * This file is part of the COLOBOT source code +// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch +// * Copyright (C) 2013, Polish Portal of Colobot (PPC) +// * +// * 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 3 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, see http://www.gnu.org/licenses/. + +#include "app/system_macosx.h" + +#include "common/logger.h" + +#include + +#include + +#include + +void CSystemUtilsMacOSX::Init() +{ + // These functions are a deprecated way to get the 'Application Support' folder, but they do work, in plain C++ + FSRef ref; + OSType folderType = kApplicationSupportFolderType; + char path[PATH_MAX]; + FSFindFolder( kUserDomain, folderType, kCreateFolder, &ref ); + FSRefMakePath( &ref, reinterpret_cast(&path), PATH_MAX ); + + m_ASPath = path; + m_ASPath.append("/colobot/"); + + // Make sure the directory exists + boost::filesystem::create_directories(m_ASPath.c_str()); +} + +std::string CSystemUtilsMacOSX::GetProfileFileLocation() +{ + std::string profileFile = m_ASPath + "/colobot.ini"; + + GetLogger()->Trace("Profile file is %s\n", profileFile.c_str()); + return profileFile; +} + +std::string CSystemUtilsMacOSX::GetSavegameDirectoryLocation() +{ + std::string savegameDir = m_ASPath + "/savegame"; + boost::filesystem::create_directories(savegameDir.c_str()); + GetLogger()->Trace("Saved game files are going to %s\n", savegameDir.c_str()); + + return savegameDir; +} + diff --git a/src/app/system_macosx.h b/src/app/system_macosx.h new file mode 100644 index 0000000..a5c1150 --- /dev/null +++ b/src/app/system_macosx.h @@ -0,0 +1,36 @@ +// * This file is part of the COLOBOT source code +// * Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch +// * Copyright (C) 2012, Polish Portal of Colobot (PPC) +// * +// * 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 3 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, see http://www.gnu.org/licenses/. + +/** + * \file app/system_macosx.h + * \brief MacOSX-specific implementation of system functions + */ + +#include "app/system.h" +#include "app/system_other.h" + +class CSystemUtilsMacOSX : public CSystemUtilsOther +{ +public: + virtual void Init() override; + + virtual std::string GetProfileFileLocation() override; + virtual std::string GetSavegameDirectoryLocation() override; +private: + std::string m_ASPath; +}; + -- cgit v1.2.3-1-g7c22