void StApplication::stApplicationInit(const StHandle<StOpenInfo>& theOpenInfo) { if(myResMgr.isNull()) { myResMgr = new StResourceManager(); } #ifdef ST_DEBUG_GL myGlDebug = true; #endif StSettings aGlobalSettings(myResMgr, "sview"); params.ActiveDevice = new StEnumParam(0, "Change device"); params.ActiveDevice->signals.onChanged.connect(this, &StApplication::doChangeDevice); params.VSyncMode = new StEnumParam(0, "VSync mode"); params.VSyncMode->changeValues().add("Off"); params.VSyncMode->changeValues().add("On"); params.VSyncMode->changeValues().add("Mixed"); bool isOutModeAuto = true; // AUTO by default aGlobalSettings.loadBool(ST_SETTING_RENDERER_AUTO, isOutModeAuto); if(!isOutModeAuto) { aGlobalSettings.loadString(ST_SETTING_RENDERER, myRendId); } // add additional paths #ifdef _WIN32 // requires Windows XP with SP1 or higher StStringUtfWide aStCoreFolder = StProcess::getStCoreFolder().toUtfWide(); SetDllDirectoryW(aStCoreFolder.toCString()); #endif myOpenFileInfo = theOpenInfo; if(myOpenFileInfo.isNull()) { myOpenFileInfo = parseProcessArguments(); } if(myOpenFileInfo.isNull()) { myOpenFileInfo = new StOpenInfo(); } const StArgumentsMap anArgs = myOpenFileInfo->getArgumentsMap(); const StString ARGUMENT_PLUGIN_OUT = "out"; const StString ARGUMENT_PLUGIN_OUT_DEVICE = "outDevice"; const StString ARGUMENT_GLDEBUG = "gldebug"; StArgument anArgRenderer = anArgs[ARGUMENT_PLUGIN_OUT]; StArgument anArgDevice = anArgs[ARGUMENT_PLUGIN_OUT_DEVICE]; StArgument anArgGlDebug = anArgs[ARGUMENT_GLDEBUG]; if(anArgRenderer.isValid()) { myRendId = anArgRenderer.getValue(); } //if(anArgDevice.isValid()) { // aDevice = anArgDevice.getValue(); //} if(anArgGlDebug.isValid()) { myGlDebug = true; } }
void StPlayList::loadRecentList(const StString theString) { StMutexAuto anAutoLock(myMutex); StArgumentsMap aMap; aMap.parseString(theString); myRecent.clear(); for(size_t anIter = 0; anIter < myRecentLimit; ++anIter) { const StArgument anArgFile = aMap[StString("file") + anIter]; const StArgument anArgLeft = aMap[StString("left") + anIter]; const StArgument anArgRight = aMap[StString("right") + anIter]; const StArgument anArgTime = aMap[StString("time") + anIter]; StHandle<StRecentItem> aRecent; if(anArgLeft.isValid() && anArgRight.isValid()) { StHandle<StFileNode> aFileNode = new StFileNode(StString()); aFileNode->add(new StFileNode(anArgLeft.getValue(), aFileNode.access())); aFileNode->add(new StFileNode(anArgRight.getValue(), aFileNode.access())); aRecent = addRecentFile(*aFileNode, false); } else if(anArgFile.isValid()) { StHandle<StFileNode> aFileNode = new StFileNode(anArgFile.getValue()); const StArgument anArgPos = aMap[StString("pos") + anIter]; if(anArgPos.isValid()) { aFileNode->add(new StFileNode(anArgPos.getValue(), aFileNode.access())); } aRecent = addRecentFile(*aFileNode, false); } if(aRecent.isNull()) { continue; } if(anArgTime.isValid()) { if(aRecent->Params.isNull()) { aRecent->Params = new StStereoParams(); } std::stringstream aStream; aStream.imbue(std::locale("C")); aStream << anArgTime.getValue().toCString(); aStream >> aRecent->Params->Timestamp; } } }
StHandle<StOpenInfo> StApplication::parseProcessArguments() { StHandle<StOpenInfo> anInfo = new StOpenInfo(); StArrayList<StString> anArguments = StProcess::getArguments(); StArgumentsMap anOpenFileArgs; size_t aFilesCount = 0; bool isFilesSection = false; const StString ARGUMENT_FILES_SECTION = '-'; const StString ARGUMENT_ANY = "--"; const StString ARGUMENT_HELP = "help"; const StString ARGUMENT_FILE = "file"; const StString ARGUMENT_LEFT_VIEW = "left"; const StString ARGUMENT_RIGHT_VIEW = "right"; // parse extra parameters for(size_t aParamIter = 1; aParamIter < anArguments.size(); ++aParamIter) { StString aParam = anArguments[aParamIter]; ///ST_DEBUG_LOG("aParam= '" + aParam + "'"); if(isFilesSection) { // file name StString aFilePath = StProcess::getAbsolutePath(aParam); anOpenFileArgs.add(StArgument(ARGUMENT_FILE + aFilesCount++, aFilePath)); if(!anInfo->hasPath()) { // first file determines MIME type (needed to autoselect Drawer plugin) anInfo->setPath(aFilePath); } } else if(aParam == ARGUMENT_FILES_SECTION) { isFilesSection = true; } else if(aParam.isStartsWith(ARGUMENT_ANY)) { // argument StArgument anArg; anArg.parseString(aParam.subString(2, aParam.getLength())); // cut suffix -- if(anArg.getKey().isEqualsIgnoreCase(ARGUMENT_HELP)) { return NULL; } else if(anArg.getKey().isEqualsIgnoreCase(ARGUMENT_LEFT_VIEW)) { // left view anArg.setValue(StProcess::getAbsolutePath(anArg.getValue())); anOpenFileArgs.add(anArg); anInfo->setPath(anArg.getValue()); // left file always determines MIME type } else if(anArg.getKey().isEqualsIgnoreCase(ARGUMENT_RIGHT_VIEW)) { // right view anArg.setValue(StProcess::getAbsolutePath(anArg.getValue())); anOpenFileArgs.add(anArg); if(!anInfo->hasPath()) { anInfo->setPath(anArg.getValue()); } } else { // pass argument unchanged anOpenFileArgs.add(anArg); } } else { // file name StString aFilePath = StProcess::getAbsolutePath(aParam); anOpenFileArgs.add(StArgument(ARGUMENT_FILE + aFilesCount++, aFilePath)); if(!anInfo->hasPath()) { // first file determines MIME type (needed to autoselect Drawer plugin) anInfo->setPath(aFilePath); } } } anInfo->setArgumentsMap(anOpenFileArgs); return anInfo; }