// Sets the groupID in all the start ports and internal ports for the specified icon void Project::AddIconToGroup(INXPOSITION selectedIcon, int groupID, DEP* vwDEP) { ConData* blob; INXPOSITION pos; DEP* pChildDEP; CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; HTREEITEM childItem; INXString depPath, csProjectDir; pProjMData->getProjectDir(csProjectDir); blob = (ConData*) vwDEP->condata->GetAt(selectedIcon); if (blob->m_iUserDefined) { // open userdefined block and add all the startports to the group pFrame->m_wndProjectBar.m_cProjTree.openProject = FALSE; childItem = pFrame->m_wndProjectBar.m_cProjTree.GetUserDefChildItem(blob, vwDEP->hItem); depPath = pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(childItem); pFrame->m_wndProjectBar.m_cProjTree.hSelItem = childItem; pChildDEP = (OpenView(csProjectDir + DEPDIR + depPath + blob->description + ".prg"))->pDEP; pFrame->m_wndProjectBar.m_cProjTree.openProject = TRUE; pos = pChildDEP->condata->GetHeadPosition(); while (pos) { AddIconToGroup(pos, groupID, pChildDEP); pChildDEP->condata->GetNext(pos); } pFrame->m_wndProjectBar.m_cProjTree.hSelItem = vwDEP->hItem; CDocument* Subsystem = AfxGetApp( )->OpenDocumentFile(csProjectDir + DEPDIR + pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(vwDEP->hItem) + vwDEP->depFilename + ".prg"); } else { vwDEP->AddIconToGroup(selectedIcon, groupID); } }
// Adds a port to a block and a xport to its child DEP void Project::AddBlockPort(ConData* blob, int iDataType, int iPortType, INXString portLabel, DEP* pDEP) { DEP* pChildDEP; INXString depPath, csProjectDir; CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; HTREEITEM childItem; // get the type and point INXPoint point = blob->CalculateXPortPosition(iPortType); INXString type = blob->BuildXPortString(iPortType,iDataType); pProjMData->getProjectDir(csProjectDir); if (pDEP->AddPort(blob, iDataType, iPortType, portLabel)) { // open subblock so that xport can be added. Doing it this way means don't have to save to // a file. Can cause problems if save to a file and don't save the added port childItem = pFrame->m_wndProjectBar.m_cProjTree.GetUserDefChildItem(blob, pDEP->hItem); depPath = pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(childItem); pFrame->m_wndProjectBar.m_cProjTree.hSelItem = childItem; CDrawProgView* pView = OpenView(csProjectDir + DEPDIR + depPath + blob->description + ".prg"); pChildDEP = pView->pDEP; pChildDEP->AddXPort(type, portLabel, point); // set modified flag in doc //pView->pDoc->SetModifiedFlag(TRUE); pFrame->m_wndProjectBar.m_cProjTree.hSelItem = pDEP->hItem; // save both DEPs so they are consistent pDEP->SaveProg(csProjectDir + DEPDIR + pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(pDEP->hItem) + pDEP->depFilename + ".prg"); pChildDEP->SaveProg(csProjectDir + DEPDIR + depPath + blob->description + ".prg"); // open original DEP in window CDocument* Subsystem = AfxGetApp( )->OpenDocumentFile(csProjectDir + DEPDIR + pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(pDEP->hItem) + pDEP->depFilename + ".prg"); //OpenDEP(projectDir + DEPDIR + pDEP->depFilename + ".prg"); } }
void Project::RenameBlockPort(INXPOSITION blockPos, int iPortNum, int iPortType, DEP* pDEP) { DEP* pChildDEP; ConData *block, *icon; INXString csOldPortLabel, csNewPortLabel, depPath, csProjectDir; INXPOSITION pos, prevPos; CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; HTREEITEM childItem; pProjMData->getProjectDir(csProjectDir); block = (ConData*) pDEP->condata->GetAt(blockPos); if (!block->m_iUserDefined) { AfxMessageBox("Can only rename ports on a user defined block."); return; } csOldPortLabel = pDEP->GetPortLabel(blockPos, iPortNum, iPortType); csNewPortLabel = csOldPortLabel; // Prompt user for new port name CBlockPortLabelDialog dialog(csOldPortLabel, block, pDEP); if (dialog.DoModal() == IDOK) { csNewPortLabel = dialog.GetPortLabel(); csNewPortLabel.MakeLower(); } // Rename block port pDEP->SetPortLabel(blockPos, iPortNum, iPortType, csNewPortLabel); // load child dep in case it doesn't exist childItem = pFrame->m_wndProjectBar.m_cProjTree.GetUserDefChildItem(block, pDEP->hItem); depPath = pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(childItem); pFrame->m_wndProjectBar.m_cProjTree.hSelItem = childItem; CDrawProgView* pView = OpenView(csProjectDir + DEPDIR + depPath + block->description + ".prg"); pChildDEP = pView->pDEP; // get xport to delete pos = pChildDEP->condata->GetHeadPosition(); while (pos) { prevPos = pos; icon = (ConData*) pChildDEP->condata->GetNext(pos); if (icon->description == csOldPortLabel && (icon->m_csIconType.Find("XINPUT") != -1 || icon->m_csIconType.Find("XOUTPUT") != -1 || icon->m_csIconType == "XSTART" || icon->m_csIconType == "XFINISH")) { icon->description = csNewPortLabel; } } // save both DEPs so they are consistent pDEP->SaveProg(csProjectDir + DEPDIR + pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(pDEP->hItem) + pDEP->depFilename + ".prg"); pChildDEP->SaveProg(csProjectDir + DEPDIR + depPath + block->description + ".prg"); // restore original DEP in view pFrame->m_wndProjectBar.m_cProjTree.hSelItem = pDEP->hItem; CDocument* Subsystem = AfxGetApp( )->OpenDocumentFile(csProjectDir + DEPDIR + pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(pDEP->hItem) + pDEP->depFilename + ".prg"); }
// delete the port from the block and delete the xport void Project::DeleteBlockPort(INXPOSITION blockPos, int portNum, int portType, DEP* pDEP) { DEP* pChildDEP; ConData *block, *icon; INXString portLabel, depPath, csProjectDir; INXPOSITION pos, prevPos; CMainFrame* pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd; HTREEITEM childItem; pProjMData->getProjectDir(csProjectDir); block = (ConData*) pDEP->condata->GetAt(blockPos); if (!block->m_iUserDefined) { AfxMessageBox("Can only delete ports on a user defined block."); return; } // Delete block port portLabel = pDEP->DeletePort(block, portNum, portType); // load child dep in case it doesn't exist childItem = pFrame->m_wndProjectBar.m_cProjTree.GetUserDefChildItem(block, pDEP->hItem); depPath = pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(childItem); pFrame->m_wndProjectBar.m_cProjTree.hSelItem = childItem; CDrawProgView* pView = OpenView(csProjectDir + DEPDIR + depPath + block->description + ".prg"); pChildDEP = pView->pDEP; // get xport to delete pos = pChildDEP->condata->GetHeadPosition(); while (pos) { prevPos = pos; icon = (ConData*) pChildDEP->condata->GetNext(pos); if (icon->description == portLabel && (icon->m_csIconType.Find("XINPUT") != -1 || icon->m_csIconType.Find("XOUTPUT") != -1 || icon->m_csIconType == "XSTART" || icon->m_csIconType == "XFINISH")) { pChildDEP->DeleteIcon(prevPos, 1); // set modified flag in doc //pView->pDoc->SetModifiedFlag(TRUE); } } // save both DEPs so they are consistent pDEP->SaveProg(csProjectDir + DEPDIR + pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(pDEP->hItem) + pDEP->depFilename + ".prg"); pChildDEP->SaveProg(csProjectDir + DEPDIR + depPath + block->description + ".prg"); // restore original DEP in view pFrame->m_wndProjectBar.m_cProjTree.hSelItem = pDEP->hItem; CDocument* Subsystem = AfxGetApp( )->OpenDocumentFile(csProjectDir + DEPDIR + pFrame->m_wndProjectBar.m_cProjTree.GetDEPPath(pDEP->hItem) + pDEP->depFilename + ".prg"); }
int OGRCouchDBDataSource::Open( const char * pszFilename, int bUpdateIn) { bool bHTTP = STARTS_WITH(pszFilename, "http://") || STARTS_WITH(pszFilename, "https://"); if( !bHTTP && !STARTS_WITH_CI(pszFilename, "CouchDB:")) return FALSE; bReadWrite = CPL_TO_BOOL(bUpdateIn); pszName = CPLStrdup( pszFilename ); if( bHTTP ) osURL = pszFilename; else osURL = pszFilename + 8; if (!osURL.empty() && osURL.back() == '/') osURL.resize(osURL.size() - 1); const char* pszUserPwd = CPLGetConfigOption("COUCHDB_USERPWD", NULL); if (pszUserPwd) osUserPwd = pszUserPwd; if ((strstr(osURL, "/_design/") && strstr(osURL, "/_view/")) || strstr(osURL, "/_all_docs")) { return OpenView() != NULL; } /* If passed with http://useraccount.knownprovider.com/database, do not */ /* try to issue /all_dbs, but directly open the database */ const char* pszKnowProvider = strstr(osURL, ".iriscouch.com/"); if (pszKnowProvider != NULL && strchr(pszKnowProvider + strlen(".iriscouch.com/"), '/' ) == NULL) { return OpenDatabase() != NULL; } pszKnowProvider = strstr(osURL, ".cloudant.com/"); if (pszKnowProvider != NULL && strchr(pszKnowProvider + strlen(".cloudant.com/"), '/' ) == NULL) { return OpenDatabase() != NULL; } /* Get list of tables */ json_object* poAnswerObj = GET("/_all_dbs"); if (poAnswerObj == NULL) { if (!STARTS_WITH_CI(pszFilename, "CouchDB:")) CPLErrorReset(); return FALSE; } if ( !json_object_is_type(poAnswerObj, json_type_array) ) { if ( json_object_is_type(poAnswerObj, json_type_object) ) { json_object* poError = CPL_json_object_object_get(poAnswerObj, "error"); json_object* poReason = CPL_json_object_object_get(poAnswerObj, "reason"); const char* pszError = json_object_get_string(poError); const char* pszReason = json_object_get_string(poReason); if (pszError && pszReason && strcmp(pszError, "not_found") == 0 && strcmp(pszReason, "missing") == 0) { json_object_put(poAnswerObj); poAnswerObj = NULL; CPLErrorReset(); return OpenDatabase() != NULL; } } if (poAnswerObj) { IsError(poAnswerObj, "Database listing failed"); json_object_put(poAnswerObj); return FALSE; } } int nTables = json_object_array_length(poAnswerObj); for(int i=0;i<nTables;i++) { json_object* poAnswerObjDBName = json_object_array_get_idx(poAnswerObj, i); if ( json_object_is_type(poAnswerObjDBName, json_type_string) ) { const char* pszDBName = json_object_get_string(poAnswerObjDBName); if ( strcmp(pszDBName, "_users") != 0 && strcmp(pszDBName, "_replicator") != 0 ) { papoLayers = (OGRLayer**) CPLRealloc(papoLayers, (nLayers + 1) * sizeof(OGRLayer*)); papoLayers[nLayers ++] = new OGRCouchDBTableLayer(this, pszDBName); } } } json_object_put(poAnswerObj); return TRUE; }