Changeset 7616 in orxonox.OLD for branches/qt_gui/src/lib
- Timestamp:
- May 15, 2006, 2:41:51 PM (19 years ago)
- Location:
- branches/qt_gui/src/lib
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/qt_gui/src/lib/gui/gtk_gui/gui_exec.cc
r7221 r7616 26 26 #include "gui_exec.h" 27 27 28 #include "file.h" 28 29 #include "util/loading/resource_manager.h" 29 30 #include "parser/ini_parser/ini_parser.h" … … 33 34 #include <sys/stat.h> 34 35 #include <sys/types.h> 36 35 37 36 38 … … 147 149 void GuiExec::setConfDir(const char* confDir) 148 150 { 149 this->confDir = ResourceManager::homeDirCheck(confDir);151 this->confDir = File(confDir).name(); 150 152 151 153 PRINTF(5)("Config Directory is: %s.\n", this->confDir); … … 199 201 IniParser iniParser; 200 202 this->writeFileText(widget, &iniParser, 0); 201 std::string fileName = ResourceManager::homeDirCheck(confFile); 202 iniParser.writeFile(fileName); 203 iniParser.writeFile(File(confFile).name()); 203 204 } 204 205 … … 253 254 void GuiExec::readFromFile(Widget* widget) 254 255 { 255 std::string fileName = ResourceManager::homeDirCheck(confFile);256 std::string fileName = File(confFile).name(); 256 257 IniParser iniParser(fileName); 257 258 if (!iniParser.isOpen()) -
branches/qt_gui/src/lib/shell/shell_completion_plugin.cc
r7610 r7616 136 136 printf("%s\n", (ResourceManager::getInstance()->getDataDir() + fileName).c_str()); 137 137 if (!nocaseCmp(completionBegin, fileName, completionBegin.size()) && 138 ResourceManager::is Dir(ResourceManager::getInstance()->getDataDir() +fileName))138 ResourceManager::isInDataDir(fileName)) 139 139 { 140 140 printf("Dir %s\n", fileName.c_str()); -
branches/qt_gui/src/lib/util/file.cc
r7615 r7616 18 18 #include <sys/types.h> 19 19 #include <sys/stat.h> 20 #include <stdio.h> 21 22 #include <iostream> 23 #include <fstream> 20 24 21 25 #ifdef __unix__ … … 27 31 #endif 28 32 29 30 31 File::File() 33 #include <cassert> 34 35 36 File::File(const std::string& fileName) 37 { 38 this->_name = fileName; 39 File::homeDirCheck(this->_name); 40 this->init(); 41 } 42 43 File::File(const File& file) 44 { 45 this->_name = file._name; 46 } 47 48 File::~File() 49 { 50 if (this->_status) 51 delete this->_status; 52 if (this->_handle) 53 assert(0); 54 } 55 56 /** 57 * @brief initializes the File 58 * 59 * Stats the File, looks if it exists and sets the hadle to 0 60 */ 61 void File::init() 62 { 63 this->_handle = 0; 64 65 this->_status = new struct stat; 66 if (stat(this->_name.c_str(), this->_status)) 67 { 68 delete this->_status; 69 this->_status = NULL; 70 } 71 } 72 73 bool File::open(OpenMode mode) 32 74 { 33 75 #warning implement 34 76 } 35 77 36 File::File(const std::string& fileName)78 bool File::close() 37 79 { 38 80 #warning implement 39 81 } 40 82 41 File::File(const File& file)42 {43 #warning implement44 }45 46 File::~File()47 {48 #warning implement49 }50 51 bool File::open(OpenMode mode)52 {53 #warning implement54 }55 56 bool File::close()57 {58 #warning implement59 }60 61 83 int File::handle() 62 84 { 63 #warning implement 85 return this->_handle; 64 86 } 65 87 66 88 bool File::exists() 67 89 { 68 #warning implement 90 return (this->_status != NULL); 69 91 } 70 92 71 93 bool File::isLink() 72 94 { 73 #warning implement 95 #ifndef __WIN32__ 96 return (this->_status != NULL && this->_status->st_mode & (S_IFLNK)); 97 #else 98 return false; 99 #endif 74 100 } 75 101 // only on UNIX 102 76 103 bool File::isFile() 77 104 { 78 #warning implement 79 } 80 105 return (this->_status != NULL && this->_status->st_mode & (S_IFREG)); 106 } 107 108 /** 109 * @brief Checks if it is a Directory 110 * @param directoryName the Directory to check for 111 * @returns true if it is a directory/symlink false otherwise 112 */ 81 113 bool File::isDirectory() 82 114 { 83 std::string tmpDirName = this->_name;84 struct stat status;85 86 115 // checking for the termination of the string given. If there is a "/" at the end cut it away 87 if (this->_name[this->_name.size()-1] == '/' || 88 this->_name[this->_name.size()-1] == '\\') 89 { 90 tmpDirName.erase(tmpDirName.size()-1); 91 } 92 93 if(!stat(tmpDirName.c_str(), &status)) 94 { 95 if (status.st_mode & (S_IFDIR 96 #ifndef __WIN32__ 97 | S_IFLNK 98 #endif 99 )) 100 { 101 return true; 102 } 103 else 104 return false; 105 } 106 else 116 //if (this->_name[this->_name.size()-1] == '/' || 117 // this->_name[this->_name.size()-1] == '\\') 118 //{ 119 // tmpDirName.erase(tmpDirName.size()-1); 120 //} 121 return (this->_status != NULL && this->_status->st_mode & (S_IFDIR)); 122 } 123 124 125 /// FIXME NEXT THREE FUNCTIONS 126 bool File::isReadeable() 127 { 128 #ifndef __WIN32__ 129 return (this->_status != NULL && this->_status->st_mode & (S_IRUSR)); 130 #else 131 return (this->_status != NULL); 132 #endif 133 } 134 135 bool File::isWriteable() 136 { 137 #ifndef __WIN32__ 138 return (this->_status != NULL && this->_status->st_mode & (S_IWUSR)); 139 #else 140 return (this->_status != NULL); 141 #endif 142 } 143 bool File::isExecutable() 144 { 145 #ifndef __WIN32__ 146 return (this->_status != NULL && this->_status->st_mode & (S_IXUSR)); 147 #else 148 return (this->_status != NULL); 149 #endif 150 } 151 152 153 bool File::copy(const File& destination) 154 { 155 char ch; 156 std::ifstream iFile(this->_name.c_str()); 157 std::ofstream oFile(destination.name().c_str()); 158 while (iFile.get(ch)) 159 { 160 oFile.put(ch); 161 } 162 } 163 164 bool File::rename(const File& destination) 165 { 166 if (!std::rename(this->_name.c_str(), destination.name().c_str())) 167 { 168 this->close(); 169 delete this->_status; 170 this->_status = NULL; 171 this->_name = destination.name(); 172 this->init(); 173 174 return true; 175 } 176 return false; 177 } 178 179 bool File::touch() 180 { 181 FILE* stream; 182 if( (stream = fopen (this->_name.c_str(), "w")) == NULL) 183 { 184 std::cout << "could not touch '" << this->_name << "' for writing\n"; 107 185 return false; 108 } 109 110 bool File::isReadeable() 111 { 112 113 #warning implement 114 } 115 116 bool File::isWriteable() 117 { 118 #warning implement 119 } 120 bool File::isExecutable() 121 { 122 #warning implement 123 } 124 125 126 bool File::copy(const File& destination) 127 { 128 #warning implement 129 } 130 bool File::rename(const File& destination) 131 { 132 #warning implement 133 } 134 bool File::touch() 135 { 136 #warning implement 137 } 186 } 187 fclose(stream); 188 return true; 189 } 190 138 191 bool File::remove() 139 192 { 140 #warning implement 193 unlink(this->_name.c_str()); 194 delete this->_status; 195 this->_status = NULL; 196 /// FIXME HANDLE 141 197 } 142 198 143 199 void File::relToAbs(std::string& fileName) 144 200 { 145 #warning implement 146 } 201 if (fileName.empty()) 202 return ; 203 if (fileName[0] != '/') 204 { 205 if (fileName[0] == '.' && fileName[1] != '.') 206 fileName.erase(0); 207 fileName = File::cwd() + fileName; 208 } 209 } 210 147 211 void File::absToRel(std::string& fileName) 148 212 { 149 #warning implement 213 if (fileName.find(cwd()) == 0) 214 fileName.replace(0, File::cwd().size(), "."); 150 215 } 151 216 … … 173 238 174 239 240 void File::homeDirCheck(std::string& fileName) 241 { 242 if (fileName.size() < 2 || fileName[0] != '~' || fileName[1] != '/') 243 return; 244 std::string homeDir; 245 #ifdef __WIN32__ 246 homeDir = getenv("USERPROFILE"); 247 #else 248 homeDir = getenv("HOME"); 249 #endif 250 fileName = homeDir + fileName.substr(1); 251 } 252 175 253 176 254 #include "file.h" -
branches/qt_gui/src/lib/util/file.h
r7612 r7616 9 9 10 10 #include <string> 11 typedef struct stat; 11 12 12 13 class File … … 22 23 23 24 public: 24 File();25 25 File(const std::string& fileName); 26 26 File(const File& file); … … 30 30 virtual bool close(); 31 31 int handle(); 32 33 /** @returns the FileName of this File */ 34 const std::string& name() const { return this->_name; }; 32 35 33 36 bool exists(); … … 50 53 51 54 private: 55 void init(); 56 bool statFile; 52 57 void homeDirCheck(std::string& fileName); 53 58 54 59 private: 55 60 int _handle; //!< The FileHandle (if set). 56 std::string _name; //!< The Name of the File. 61 std::string _name; //!< The Name of the File. 62 stat* _status; //!< The Stat of the File. 57 63 58 64 static std::string _cwd; //!< The currend Working directory. 65 59 66 }; 60 67 -
branches/qt_gui/src/lib/util/loading/resource_manager.cc
r7611 r7616 86 86 bool ResourceManager::setDataDir(const std::string& dataDir) 87 87 { 88 std::string realDir = ResourceManager::homeDirCheck(dataDir); 89 if (isDir(realDir)) 90 { 91 if (dataDir[dataDir.size()-1] == '/' || dataDir[dataDir.size()-1] == '\\') 88 File dataDirectory(dataDir); 89 if (dataDirectory.isDirectory()) 90 { 91 this->dataDir = dataDirectory.name(); 92 93 if (dataDir[dataDir.size()-1] != '/' && dataDir[dataDir.size()-1] != '\\') 92 94 { 93 this->dataDir = realDir;94 }95 else96 {97 this->dataDir = realDir;98 95 this->dataDir += '/'; 99 96 } … … 102 99 else 103 100 { 104 PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", realDir.c_str(), this->dataDir.c_str());101 PRINTF(1)("%s is not a Directory, and can not be the Data Directory, leaving as %s \n", dataDir.c_str(), this->dataDir.c_str()); 105 102 return false; 106 103 } … … 115 112 bool ResourceManager::tryDataDir(const std::string& dataDir) 116 113 { 117 std::string realDir = ResourceManager::homeDirCheck(dataDir); 118 if (isDir(realDir)) 119 { 120 if (dataDir[dataDir.size()-1] == '/' || dataDir[dataDir.size()-1] == '\\') 114 File dataDirectory(dataDir); 115 if (dataDirectory.isDirectory()) 116 { 117 this->dataDir = dataDirectory.name(); 118 119 if (dataDir[dataDir.size()-1] != '/' && dataDir[dataDir.size()-1] != '\\') 121 120 { 122 this->dataDir = realDir;123 }124 else125 {126 this->dataDir = realDir;127 121 this->dataDir += '/'; 128 122 } … … 139 133 bool ResourceManager::verifyDataDir(const std::string& fileInside) 140 134 { 141 bool retVal;142 if (! isDir(this->dataDir))143 { 144 PRINTF(1)(" %sis not a directory\n", this->dataDir.c_str());135 File dataDirectory(this->dataDir); 136 if (!dataDirectory.isDirectory()) 137 { 138 PRINTF(1)("'%s' is not a directory\n", this->dataDir.c_str()); 145 139 return false; 146 140 } 147 141 148 std::string testFile = this->dataDir + fileInside; 149 retVal = isFile(testFile); 150 return retVal; 142 File testFile(this->dataDir + fileInside); 143 return testFile.isFile(); 151 144 } 152 145 … … 160 153 bool ResourceManager::addImageDir(const std::string& imageDir) 161 154 { 162 std::string newDir; 163 if (imageDir[imageDir.size()-1] == '/' || imageDir[imageDir.size()-1] == '\\') 164 { 165 newDir = imageDir; 166 } 167 else 168 { 169 newDir = imageDir; 155 std::string newDir = imageDir; 156 if (imageDir[imageDir.size()-1] != '/' && imageDir[imageDir.size()-1] != '\\') 157 { 170 158 newDir += '/'; 171 159 } 172 160 // check if the param is a Directory 173 if ( isDir(newDir))161 if (File(newDir).isDirectory()) 174 162 { 175 163 // check if the Directory has been added before … … 380 368 tmpResource->param[0] = 1.0f; 381 369 382 if( ResourceManager::isFile(fullName))370 if(File(fullName).isFile()) 383 371 tmpResource->pointer = new OBJModel(fullName, tmpResource->param[0].getFloat()); 384 372 else … … 406 394 break; 407 395 case MD2: 408 if( ResourceManager::isFile(fullName))396 if(File(fullName).isFile()) 409 397 { 410 398 tmpResource->param[0] = param0; … … 424 412 tmpResource->param[0] = FONT_DEFAULT_RENDER_SIZE; 425 413 426 if( isFile(fullName))414 if(File(fullName).isFile()) 427 415 tmpResource->pointer = new Font(fullName, (unsigned int) tmpResource->param[0].getInt()); 428 416 else … … 432 420 #ifndef NO_AUDIO 433 421 case WAV: 434 if( isFile(fullName))422 if(File(fullName).isFile()) 435 423 tmpResource->pointer = new OrxSound::SoundBuffer(fullName); 436 424 break; 437 425 case OGG: 438 if ( isFile(fullName))426 if (File(fullName).isFile()) 439 427 tmpResource->pointer = new OrxSound::OggPlayer(fullName); 440 428 break; … … 446 434 else 447 435 tmpResource->param[0] = GL_TEXTURE_2D; 448 if( isFile(fullName))436 if(File(fullName).isFile()) 449 437 { 450 438 PRINTF(4)("Image %s resides to %s\n", fileName, fullName); … … 457 445 { 458 446 std::string imgName = *imageDir + fileName; 459 if( isFile(imgName))447 if(File(imgName).isFile()) 460 448 { 461 449 PRINTF(4)("Image %s resides to %s\n", fileName, imgName); … … 471 459 #ifndef NO_SHADERS 472 460 case SHADER: 473 if( ResourceManager::isFile(fullName))461 if(File(fullName).isFile()) 474 462 { 475 463 if (param0 != MT_NULL) … … 477 465 MultiType param = param0; /// HACK 478 466 std::string secFullName = ResourceManager::getFullName(param.getCString()); 479 if ( ResourceManager::isFile(secFullName))467 if (File(secFullName).isFile()) 480 468 { 481 469 tmpResource->param[0] = secFullName; … … 749 737 750 738 /** 751 * @brief Checks if it is a Directory752 * @param directoryName the Directory to check for753 * @returns true if it is a directory/symlink false otherwise754 */755 bool ResourceManager::isDir(const std::string& directoryName)756 {757 std::string tmpDirName = directoryName;758 struct stat status;759 760 // checking for the termination of the string given. If there is a "/" at the end cut it away761 if (directoryName[directoryName.size()-1] == '/' ||762 directoryName[directoryName.size()-1] == '\\')763 {764 tmpDirName.erase(tmpDirName.size()-1);765 }766 767 if(!stat(tmpDirName.c_str(), &status))768 {769 if (status.st_mode & (S_IFDIR770 #ifndef __WIN32__771 | S_IFLNK772 #endif773 ))774 {775 return true;776 }777 else778 return false;779 }780 else781 return false;782 }783 784 /**785 * @brief Checks if the file is either a Regular file or a Symlink786 * @param fileName the File to check for787 * @returns true if it is a regular file/symlink, false otherwise788 */789 bool ResourceManager::isFile(const std::string& fileName)790 {791 if (fileName.empty())792 return false;793 std::string tmpFileName = ResourceManager::homeDirCheck(fileName);794 // actually checks the File795 struct stat status;796 if (!stat(tmpFileName.c_str(), &status))797 {798 if (status.st_mode & (S_IFREG799 #ifndef __WIN32__800 | S_IFLNK801 #endif802 ))803 {804 return true;805 }806 else807 return false;808 }809 else810 return false;811 }812 813 /**814 * @brief touches a File on the disk (thereby creating it)815 * @param fileName The file to touch816 */817 bool ResourceManager::touchFile(const std::string& fileName)818 {819 std::string tmpName = ResourceManager::homeDirCheck(fileName);820 if (tmpName.empty())821 return false;822 FILE* stream;823 if( (stream = fopen (tmpName.c_str(), "w")) == NULL)824 {825 PRINTF(1)("could not open %s fro writing\n", fileName.c_str());826 return false;827 }828 fclose(stream);829 }830 831 /**832 * @brief deletes a File from disk833 * @param fileName the File to delete834 */835 bool ResourceManager::deleteFile(const std::string& fileName)836 {837 std::string tmpName = ResourceManager::homeDirCheck(fileName);838 unlink(tmpName.c_str());839 }840 841 /**842 * @param name the Name of the file to check843 * @returns The name of the file, including the HomeDir844 */845 std::string ResourceManager::homeDirCheck(const std::string& name)846 {847 if (name.size() >= 2 && name[0] == '~' && name[1] == '/')848 {849 std::string homeDir;850 std::string newName = name.substr(1);851 #ifdef __WIN32__852 homeDir = getenv("USERPROFILE");853 #else854 homeDir = getenv("HOME");855 #endif856 return homeDir + newName;857 }858 else859 return name;860 }861 862 /**863 * @param name the relative name of the File/Directory.864 * @returns a new std::string with the name in abs-dir-format865 */866 std::string ResourceManager::getAbsDir(const std::string& name)867 {868 if (name.empty())869 return "";870 std::string retName = name;871 if (strncmp(name.c_str(), "/", 1))872 {873 if (name[0] == '.' && name[1] != '.')874 retName.erase(0);875 const std::string& absDir = File::cwd();876 retName = absDir + retName;877 }878 return retName;879 }880 881 882 /**883 739 * @param fileName the Name of the File to check 884 740 * @returns The full name of the file, including the DataDir, and NULL if the file does not exist … … 891 747 892 748 std::string retName = ResourceManager::getInstance()->getDataDir() +fileName; 893 if ( ResourceManager::isFile(retName) || ResourceManager::isDir(retName))749 if (File(retName).isFile() || File(retName).isDirectory()) 894 750 return retName; 895 751 else … … 911 767 std::string checkFile = ResourceManager::getInstance()->getDataDir() + fileName; 912 768 913 if ( ResourceManager::isFile(checkFile) || ResourceManager::isDir(checkFile))769 if (File(checkFile).exists()) 914 770 retVal = true; 915 771 else -
branches/qt_gui/src/lib/util/loading/resource_manager.h
r7611 r7616 21 21 22 22 #include "base_object.h" 23 #include "file.h" 24 23 25 #include "multi_type.h" 24 25 26 #include <vector> 26 27 … … 130 131 131 132 // utility functions for handling files in and around the data-directory 132 static bool isDir(const std::string& directory);133 static bool isFile(const std::string& fileName);134 static bool touchFile(const std::string& fileName);135 static bool deleteFile(const std::string& fileName);136 static std::string homeDirCheck(const std::string& fileName);137 133 static std::string getFullName(const std::string& fileName); 138 134 static bool isInDataDir(const std::string& fileName); 139 static std::string getAbsDir(const std::string& fileName);140 135 141 136 static const char* ResourceTypeToChar(ResourceType type);
Note: See TracChangeset
for help on using the changeset viewer.