#include "Config.h" #include #include #include #include Config *Config::instance = 0; //==================================================================== Config::Config() { fileHist = 10; flipFPS = MainWindow::F30; loadFrames = 100; mpegExec = "/usr/local/bin/mpeg_encode"; mpegPattern = "IBBPBBPBBPBB"; mpegPSearch = 0; mpegBSearch = 1; mpegIQScale = 4; mpegPQScale = 8; mpegBQScale = 25; mpegFrameRate = 4; } Config::~Config() { } //---------------------------------------------------------- Config *Config::getInstance() { if(!instance) { instance = new Config(); } return instance; } //---------------------------------------------------------- bool Config::init() { Config *cfg = Config::getInstance(); return cfg->readFile(); } //---------------------------------------------------------- bool Config::commit() { Config *cfg = Config::getInstance(); return cfg->writeFile(); } //---------------------------------------------------------- bool Config::readFile() { int i; int status; bool retVal = false; char *homeDir = getenv("HOME"); QString tmpString; QString cfgFilename; QFile cfgFile; Config tmpConfig; if(homeDir) { cfgFilename = homeDir; cfgFilename += "/.ReptileLabour/Init/flip.init"; cfgFile.setName(cfgFilename); if(cfgFile.exists()) { cfgFile.open(IO_ReadOnly); i = 0; retVal = true; while( (status=cfgFile.readLine(tmpString,512)) > 0) { tmpString = tmpString.simplifyWhiteSpace(); if(tmpString[0] == '#') { tmpString.remove(0,1); double ver = tmpString.toDouble(); if(ver < CONFIG_VERSION) { fprintf(stderr, "Config mismatch: old = %g, current = %g. Defaults set...\n", ver, CONFIG_VERSION); retVal = false; break; } else continue; } if(status < 0) { retVal = false; break; } switch(i) { case 0: tmpConfig.fileHist = tmpString.toInt(); break; case 1: tmpConfig.flipFPS = (MainWindow::FPS)tmpString.toInt(); break; case 2: tmpConfig.loadFrames = tmpString.toInt(); break; case 3: tmpConfig.mpegExec = tmpString; break; case 4: tmpConfig.mpegPattern = tmpString; break; case 5: tmpConfig.mpegPSearch = tmpString.toInt(); break; case 6: tmpConfig.mpegBSearch = tmpString.toInt(); break; case 7: tmpConfig.mpegIQScale = tmpString.toInt(); break; case 8: tmpConfig.mpegPQScale = tmpString.toInt(); break; case 9: tmpConfig.mpegBQScale = tmpString.toInt(); break; case 10: tmpConfig.mpegFrameRate = tmpString.toInt(); break; default: retVal = false; break; } i++; } cfgFile.close(); } } if(retVal) { fileHist = tmpConfig.fileHist; flipFPS = tmpConfig.flipFPS; loadFrames = tmpConfig.loadFrames; mpegExec = tmpConfig.mpegExec; mpegPattern = tmpConfig.mpegPattern; mpegPSearch = tmpConfig.mpegPSearch; mpegBSearch = tmpConfig.mpegBSearch; mpegIQScale = tmpConfig.mpegIQScale; mpegPQScale = tmpConfig.mpegPQScale; mpegBQScale = tmpConfig.mpegBQScale; mpegFrameRate = tmpConfig.mpegFrameRate; } return retVal; } //---------------------------------------------------------- bool Config::writeFile() { bool retVal = false; char *homeDir = getenv("HOME"); QString tmpString; QString cfgFilename; QFile cfgFile; Config tmpConfig; if(homeDir) { FILE *outfile; cfgFilename = homeDir; cfgFilename += "/.ReptileLabour/Init/flip.init"; cfgFile.setName(cfgFilename); if(!cfgFile.exists()) createDirs(); outfile = fopen(cfgFilename, "w"); if(outfile) { fprintf(outfile, "# 1.0\n"); fprintf(outfile, "%d\n", fileHist ); fprintf(outfile, "%d\n", (int)flipFPS ); fprintf(outfile, "%d\n", loadFrames ); fprintf(outfile, "%s\n", (const char*)mpegExec); fprintf(outfile, "%s\n", (const char*)mpegPattern); fprintf(outfile, "%d\n", mpegPSearch ); fprintf(outfile, "%d\n", mpegBSearch ); fprintf(outfile, "%d\n", mpegIQScale ); fprintf(outfile, "%d\n", mpegPQScale ); fprintf(outfile, "%d\n", mpegBQScale ); fprintf(outfile, "%d\n", mpegFrameRate); fclose(outfile); retVal = true; } } return retVal; } //---------------------------------------------------------- void Config::createDirs() { char *homeDir = getenv("HOME"); QString tmpString; if(homeDir) { tmpString = homeDir; tmpString += "/.ReptileLabour"; mkdir((const char*)tmpString, 0xFFFFFF); tmpString += "/Init"; mkdir((const char*)tmpString, 0xFFFFFF); } } //---------------------------------------------------------- bool Config::hasMpeg() { Config *cfg = Config::getInstance(); bool retVal = false; QFileInfo fi(cfg->mpegExec); if(fi.isReadable() && fi.isExecutable()) retVal = true; return retVal; }