/** * Instantiate StApplication. */ ST_LOCAL virtual void createApplication() override { StMutexAuto aLock(myFetchLock); const StString aFileExtension = StFileNode::getExtension(myCreatePath); StHandle<StOpenInfo> anInfo = new StOpenInfo(); anInfo->setPath(myDndPath); myDndPath.clear(); StHandle<StResourceManager> aResMgr = new StResourceManager(myActivity->assetManager); //StHandle<StResourceManager> aResMgr = new StResourceManager(myActivity->assetManager"com.sview.cad"); aResMgr->setFolder(StResourceManager::FolderId_SdCard, getStoragePath(myThJniEnv, "sdcard")); aResMgr->setFolder(StResourceManager::FolderId_Downloads, getStoragePath(myThJniEnv, "Download")); aResMgr->setFolder(StResourceManager::FolderId_Pictures, getStoragePath(myThJniEnv, "Pictures")); aResMgr->setFolder(StResourceManager::FolderId_Photos, getStoragePath(myThJniEnv, "DCIM")); StString anOcctResFolder = aResMgr->getUserDataFolder(); copyResource(aResMgr, "lang", anOcctResFolder, "IGES.us"); copyResource(aResMgr, "lang", anOcctResFolder, "IGES.fr"); copyResource(aResMgr, "lang", anOcctResFolder, "SHAPE.us"); copyResource(aResMgr, "lang", anOcctResFolder, "SHAPE.fr"); copyResource(aResMgr, "lang", anOcctResFolder, "XSTEP.us"); copyResource(aResMgr, "lang", anOcctResFolder, "XSTEP.fr"); copyResource(aResMgr, "lang", anOcctResFolder, "TObj.msg"); copyResource(aResMgr, "res", anOcctResFolder, "Units.dat"); copyResource(aResMgr, "res", anOcctResFolder, "Lexi_Expr.dat"); copyResource(aResMgr, "res", anOcctResFolder, "IGES"); copyResource(aResMgr, "res", anOcctResFolder, "STEP"); //copyResource(aResMgr, "res", anOcctResFolder, "TObj"); //copyResource(aResMgr, "res", anOcctResFolder, "XCAF"); //copyResource(aResMgr, "res", anOcctResFolder, "Plugin"); //copyResource(aResMgr, "res", anOcctResFolder, "Standard"); //copyResource(aResMgr, "res", anOcctResFolder, "StandardLite"); copyResource(aResMgr, "shaders/occt", anOcctResFolder, "Declarations.glsl"); copyResource(aResMgr, "shaders/occt", anOcctResFolder, "DeclarationsImpl.glsl"); StProcess::setEnv("CSF_UnitsLexicon", anOcctResFolder + "/Lexi_Expr.dat"); StProcess::setEnv("CSF_UnitsDefinition", anOcctResFolder + "/Units.dat"); StProcess::setEnv("CSF_ShadersDirectory", anOcctResFolder); StProcess::setEnv("CSF_SHMessage", anOcctResFolder); if(myStAppClass.isEmpty()) { myStAppClass = "cad"; } if(anInfo->isEmpty()) { // open recent file by default StArgumentsMap anArgs = anInfo->getArgumentsMap(); anArgs.set(StDictEntry("last", "true")); anArgs.set(StDictEntry("toSaveRecent","true")); anInfo->setArgumentsMap(anArgs); } myApp = new StCADViewer(aResMgr, this, anInfo); }
void StCADViewerGUI::doAboutProgram(const size_t ) { const StGLVec3 THE_WHITE(1.0f, 1.0f, 1.0f); const StString anAbout = tr(ABOUT_DPLUGIN_NAME) + '\n' + tr(ABOUT_VERSION) + " " + StVersionInfo::getSDKVersionString() + "\n \n" + tr(ABOUT_DESCRIPTION).format("2011-2019", "*****@*****.**", "www.sview.ru"); StArgumentsMap anInfo; anInfo.add(StDictEntry("CPU cores", StString(StThread::countLogicalProcessors()) + StString(" logical processor(s)"))); getContext().stglFullInfo(anInfo); StGLMessageBox* aDialog = new StGLMessageBox(this, tr(MENU_HELP_ABOUT), "", scale(512), scale(300)); StGLTable* aTable = new StGLTable(aDialog->getContent(), 0, 0, StGLCorner(ST_VCORNER_TOP, ST_HCORNER_CENTER)); aTable->setupTable((int )anInfo.size() + 1, 2); const int aTextMaxWidth = aDialog->getContent()->getRectPx().width() - 2 * (aTable->getItemMargins().left + aTable->getItemMargins().right); StGLTableItem& anAboutItem = aTable->changeElement(0, 0); anAboutItem.setColSpan(2); StGLTextArea* anAboutLab = new StGLTextArea(&anAboutItem, 0, 0, StGLCorner(ST_VCORNER_CENTER, ST_HCORNER_CENTER)); anAboutLab->setupAlignment(StGLTextFormatter::ST_ALIGN_X_CENTER, StGLTextFormatter::ST_ALIGN_Y_TOP); anAboutLab->setText(anAbout + "\n\n<b><i>" + tr(ABOUT_SYSTEM) + "</i></b>\n"); anAboutLab->setTextColor(THE_WHITE); anAboutLab->stglInitAutoHeightWidth(aTextMaxWidth); aTable->fillFromMap(anInfo, THE_WHITE, aDialog->getContent()->getRectPx().width(), aDialog->getContent()->getRectPx().width() / 2, 1); aDialog->addButton(tr(BUTTON_CLOSE)); aDialog->stglInit(); setModalDialog(aDialog); }
int StActiveXCtrl::OnCreate(LPCREATESTRUCT theCreateStruct) { myBackBrush.CreateSolidBrush(RGB(0, 0, 0)); if(COleControl::OnCreate(theCreateStruct) == -1) { return -1; } const StString ST_ASTERIX = '*'; StMIME aMime(StString(myMimeType), ST_ASTERIX, ST_ASTERIX); myOpenInfo.setMIME(aMime); StArgumentsMap aDrawerArgs; const StString ST_SETTING_SRCFORMAT = stCString("srcFormat"); const StString ST_SETTING_COMPRESS = stCString("toCompress"); const StString ST_SETTING_ESCAPENOQUIT = stCString("escNoQuit"); const StMIME ST_MIME_X_JPS("image/x-jps", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_JPS ("image/jps", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_X_PNS("image/x-pns", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_PNS ("image/pns", ST_ASTERIX, ST_ASTERIX); StArgument anArgSrcFormat = aDrawerArgs[ST_SETTING_SRCFORMAT]; if(!anArgSrcFormat.isValid()) { anArgSrcFormat.setKey(ST_SETTING_SRCFORMAT); if(aMime == ST_MIME_X_JPS || aMime == ST_MIME_JPS || aMime == ST_MIME_X_PNS || aMime == ST_MIME_PNS) { anArgSrcFormat.setValue(st::formatToString(StFormat_SideBySide_RL)); aDrawerArgs.add(anArgSrcFormat); } } aDrawerArgs.add(StArgument(ST_SETTING_COMPRESS, "true")); // optimize memory usage aDrawerArgs.add(StArgument(ST_SETTING_ESCAPENOQUIT, "true")); // do not close plugin instance by Escape key myOpenInfo.setArgumentsMap(aDrawerArgs); // set window myParentWin = m_hWnd; // starts out plugin main loop in another thread myThread = new StThread(stThreadFunction, (void* )this, "StActiveXCtrl"); // load URL StString aFilePath = loadURL(myHasPreview ? myUrlPreview : myUrlFull); if(aFilePath.isEmpty()) { if(!myHasPreview) { return 0; } if(myHasPreview) { // if we have 2 URLs - try to load another one aFilePath = loadURL(myUrlFull); if(aFilePath.isEmpty()) { return 0; } myHasPreview = false; } } myOpenInfo.setPath(aFilePath); myOpenEvent.set(); return 0; }
StBrowserPlugin::StBrowserPlugin(NSPluginCreateData* theCreateDataStruct) : nppInstance(theCreateDataStruct->instance), myResMgr(new StResourceManager()), myParentWin((StNativeWin_t )NULL), #ifdef _WIN32 myProcOrig(NULL), myBackBrush(CreateSolidBrush(RGB(0, 0, 0))), #endif myToLoadFull(false), myIsActive(false), myToQuit(false) { if(ST_PLUGIN_INSTANCES.increment() == 1) { StSearchMonitors aMonitors; aMonitors.init(true); // force update of cached state } StArgumentsMap aDrawerArgs; for(int aParamId = 0; aParamId < theCreateDataStruct->argc; ++aParamId) { StString aParamName = StString(theCreateDataStruct->argn[aParamId]); StString aParamValue = StString(theCreateDataStruct->argv[aParamId]); StArgument stArg(aParamName, aParamValue); aDrawerArgs.add(stArg); if(aParamName.isEqualsIgnoreCase(stCString("data-prv-url"))) { myPreviewUrl = aParamValue; myPreviewUrlUtf8.fromUrl(aParamValue); } } const StString ST_ASTERIX = '*'; StMIME stMIME(StString(theCreateDataStruct->type), ST_ASTERIX, ST_ASTERIX); myOpenInfo.setMIME(stMIME); const StString ST_SETTING_SRCFORMAT = stCString("srcFormat"); const StString ST_SETTING_COMPRESS = stCString("toCompress"); const StString ST_SETTING_ESCAPENOQUIT = stCString("escNoQuit"); const StMIME ST_MIME_X_JPS("image/x-jps", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_JPS ("image/jps", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_X_PNS("image/x-pns", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_PNS ("image/pns", ST_ASTERIX, ST_ASTERIX); StArgument anArgSrcFormat = aDrawerArgs[ST_SETTING_SRCFORMAT]; if(!anArgSrcFormat.isValid()) { anArgSrcFormat.setKey(ST_SETTING_SRCFORMAT); if(stMIME == ST_MIME_X_JPS || stMIME == ST_MIME_JPS || stMIME == ST_MIME_X_PNS || stMIME == ST_MIME_PNS) { anArgSrcFormat.setValue(st::formatToString(StFormat_SideBySide_RL)); aDrawerArgs.add(anArgSrcFormat); } } aDrawerArgs.add(StArgument(ST_SETTING_COMPRESS, "true")); // optimize memory usage aDrawerArgs.add(StArgument(ST_SETTING_ESCAPENOQUIT, "true")); // do not close plugin instance by Escape key myOpenInfo.setArgumentsMap(aDrawerArgs); }
StString StPlayList::dumpRecentList() const { StMutexAuto anAutoLock(myMutex); StArgumentsMap aMap; for(size_t anIter = 0; anIter < myRecent.size(); ++anIter) { const StHandle<StRecentItem>& aRecent = myRecent[anIter]; const StHandle<StFileNode>& aFile = aRecent->File; const StHandle<StStereoParams>& aParams = aRecent->Params; if(!myPlsFile.isNull() && aFile == myPlsFile->File && myCurrent != NULL) { StArgument anArgFile(StString("file") + anIter, aFile->getPath()); StArgument anArgPos (StString("pos") + anIter, myCurrent->getPath()); aMap.add(anArgFile); aMap.add(anArgPos); } else if(aFile->isEmpty()) { StArgument anArgFile(StString("file") + anIter, aFile->getPath()); aMap.add(anArgFile); } else if(aFile->size() == 1) { StArgument anArgFile(StString("file") + anIter, aFile->getPath()); StArgument anArgPos (StString("pos") + anIter, aFile->getValue(0)->getSubPath()); aMap.add(anArgFile); aMap.add(anArgPos); } else if(aFile->size() == 2) { StArgument anArgLeft (StString("left") + anIter, aFile->getValue(0)->getPath()); StArgument anArgRight(StString("right") + anIter, aFile->getValue(1)->getPath()); aMap.add(anArgLeft); aMap.add(anArgRight); } if(!aParams.isNull()) { if(aParams->Timestamp > 360.0) { std::stringstream aStream; aStream.imbue(std::locale("C")); aStream << aParams->Timestamp; const StString aStrValue = aStream.str().c_str(); StArgument anArgTime(StString("time") + anIter, aStrValue); aMap.add(anArgTime); } } } return aMap.toString(); }
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; }