示例#1
0
文件: Project.cpp 项目: pdrezet/brix
// 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);
	}
}
示例#2
0
文件: Project.cpp 项目: pdrezet/brix
// 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");
	}
}
示例#3
0
文件: Project.cpp 项目: pdrezet/brix
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");	
}
示例#4
0
文件: Project.cpp 项目: pdrezet/brix
// 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");		
}
示例#5
0
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;
}