Esempio n. 1
0
// Callback function called by SHBrowseForFolder's browse control
// after initialization and when selection changes
int __stdcall CDirDialog::BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
    CDirDialog* pDirDialogObj = (CDirDialog*)lpData;
    if (uMsg == BFFM_INITIALIZED )
    {
        if( ! pDirDialogObj->m_strSelDir.IsEmpty() )
            ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)(LPCTSTR)(pDirDialogObj->m_strSelDir));
        if( ! pDirDialogObj->m_strWindowTitle.IsEmpty() )
            ::SetWindowText(hwnd, (LPCTSTR) pDirDialogObj->m_strWindowTitle);
    }
    else if( uMsg == BFFM_SELCHANGED )
    {
        LPITEMIDLIST pidl = (LPITEMIDLIST) lParam;
        char selection[MAX_PATH];
        if( ! ::SHGetPathFromIDListA(pidl, selection) )
            selection[0] = '\0';

        CString csStatusText;
        BOOL bOk = pDirDialogObj->SelChanged(selection, csStatusText);

        if( pDirDialogObj->m_bStatus )
		{
			CString sStatusText = csStatusText;
            ::SendMessage(hwnd, BFFM_SETSTATUSTEXT , 0, (LPARAM)(const TCHAR *)sStatusText );
		}

        ::SendMessage(hwnd, BFFM_ENABLEOK, 0, bOk);
    }
  return 0;
}
Esempio n. 2
0
void CPathCtrl::OnAddButton()
{

	if(m_nEmptyPromptID && !m_path.IsEmpty())
	{
		AfxMessageBox(m_nEmptyPromptID, MB_ICONINFORMATION);
		//AfxMessageBox("In the following box, click 'Cancel' to empty this file path", MB_ICONINFORMATION   );
	}

	//char pszSelectionPrompt[1001];
	CString sSelectionPrompt;
	if(m_nSelectionPromptID)
		sSelectionPrompt.LoadString(m_nSelectionPromptID);
	//AfxLoadString(m_nSelectionPromptID, pszSelectionPrompt, 1000);
	//AfxLoadString
	if(m_nFlags & kSelectFolder)
	{
		CString s;
		//CFolderDialog dlg(m_path.IsEmpty()?m_path.getFullPath():m_path.getDirectory());
		CDirDialog dlg;
		dlg.m_strWindowTitle = _T("Select Folder");
		dlg.m_strSelDir = m_path.getFullPath();
		if(m_nSelectionPromptID)
			dlg.m_strTitle = sSelectionPrompt;
		else
			dlg.m_strTitle = _T(" ");
			//dlg.m_bi.lpszTitle =sSelectionPrompt;
		if(dlg.DoBrowse() == IDOK)
		{
			m_path = dlg.m_strPath +_T("\\"); //dlg.GetPathName() +_T("\\");
		}
		else if(m_nEmptyPromptID)
		{
			m_path=_T("");
		}
	}
	else
	{
		CFileDialog dlg(TRUE, m_sDefaultExt, m_path.getFullPath(),
			OFN_HIDEREADONLY,//|OFN_FILEMUSTEXIST,
			m_sFilter);
		if(m_nSelectionPromptID)
			dlg.m_ofn.lpstrTitle= sSelectionPrompt;
		if(dlg.DoModal() == IDOK)
		{
			m_path = dlg.GetPathName();
		}
		else if(m_nEmptyPromptID)
		{
			m_path=_T("");
		}
	}

	updatePathDisplay();
}
Esempio n. 3
0
void CDlgPicFilePath::OnBnClickedFile()
{
	CDirDialog   dlgDir;   

	dlgDir.m_strTitle = _T("选择抓图文件路径");   
	UpdateData(TRUE);   
	dlgDir.m_strSelDir = "C:\\";
	dlgDir.m_strWindowTitle = _T("目录选择");

	if (dlgDir.DoBrowse(this) == IDOK)
	{
		m_FilePath = dlgDir.m_strPath;
		UpdateData(FALSE);
	}

	TRACE("%s", m_FilePath);
}
Esempio n. 4
0
void CPrefabTrackerDlg::OnButtonGenerate()
{
	CWaitCursor WaitCursor;

	//first off clear out any existing window text, and any old data
	m_Prefabs.SetSize(0);
	ClearText();

	//alright, now we need to get the prefab directory and the world directory
	CDirDialog PrefabDir;
	PrefabDir.m_hwndOwner = m_hWnd;
	PrefabDir.m_strInitDir = GetProject()->m_BaseProjectDir;
	PrefabDir.m_strTitle = "Select Prefab Directory";
	if(!PrefabDir.DoBrowse())
		return;

	CDirDialog WorldDir;
	WorldDir.m_hwndOwner = m_hWnd;
	WorldDir.m_strInitDir = GetProject()->m_BaseProjectDir;
	WorldDir.m_strTitle = "Select World Directory";
	if(!WorldDir.DoBrowse())
		return;

	//alright, we now have both directories. Now build up a list of all the prefabs and worlds under
	//that directory
	CMoArray<CString>	sPrefabs;
	CFileUtils::GetAllWorldFiles(PrefabDir.m_strPath, sPrefabs);

	CMoArray<CString>	sWorlds;
	CFileUtils::GetAllWorldFiles(WorldDir.m_strPath, sWorlds);

	//alright, we now need to convert the prefab file list over to structures we can use
	m_Prefabs.SetSize(sPrefabs.GetSize());

	uint32 nCurrPrefab;
	for(nCurrPrefab = 0; nCurrPrefab < sPrefabs.GetSize(); nCurrPrefab++)
	{
		m_Prefabs[nCurrPrefab].m_sFilename		= RemoveProjectPath(sPrefabs[nCurrPrefab]);
		m_Prefabs[nCurrPrefab].m_nTotalRefCount = 0;

		m_Prefabs[nCurrPrefab].m_References.SetSize(0);
	}

	//alright, now we run through every level, open it, and look for prefabs
	for(uint32 nCurrWorld = 0; nCurrWorld < sWorlds.GetSize(); nCurrWorld++)
	{
		CString sWorld = sWorlds[nCurrWorld];
		CString sRelativeWorld = RemoveProjectPath(sWorld);

		//load up the LTA if it is a world
		CLTALoadOnlyAlloc Allocator(512 * 1024);

		//open up the file
		CLTAReader File;
		if(!File.Open(sWorld, CLTAUtil::IsFileCompressed(sWorld)))
		{
			continue;
		}

		//load up the world node
		CLTANode* pWorld = CLTANodeReader::LoadNode(&File, "world", &Allocator);

		//clean up the file
		File.Close();

		//if there is no world node, then this was not a world
		if(pWorld == NULL)
		{
			Allocator.FreeNode(pWorld);
			Allocator.FreeAllMemory();
			continue;
		}

		//now find any matching prefabs
		CLTANodeIterator Iter(pWorld);
		CLTANode* pPrefabName;

		while((pPrefabName = Iter.FindNextList("prefabfile")) != NULL)
		{
			//sanity checks
			ASSERT(pPrefabName->IsList());
			
			if(pPrefabName->GetNumElements() < 2)
				continue;

			CLTANode* pValue = pPrefabName->GetElement(1);

			if(pValue->IsList())
				continue;

			//valid, now see if we have a match
			for(uint32 nCurrPrefab = 0; nCurrPrefab < m_Prefabs.GetSize(); nCurrPrefab++)
			{
				if(m_Prefabs[nCurrPrefab].m_sFilename.CompareNoCase(pValue->GetValue()) == 0)
				{
					//we have a match, add this reference
					bool bFoundRef = false;
					for(uint32 nCurrRef = 0; nCurrRef < m_Prefabs[nCurrPrefab].m_References.GetSize(); nCurrRef++)
					{
						if(m_Prefabs[nCurrPrefab].m_References[nCurrRef].m_sFile.CompareNoCase(sRelativeWorld) == 0)
						{
							//found a reference
							m_Prefabs[nCurrPrefab].m_References[nCurrRef].m_nRefCount++;
							bFoundRef = true;
							break;
						}
					}

					//no luck finding an existing one, make a new one
					if(!bFoundRef)
					{
						SPrefabInfo::SPrefabRef NewRef;
						NewRef.m_sFile = sRelativeWorld;
						NewRef.m_nRefCount = 1;

						m_Prefabs[nCurrPrefab].m_References.Append(NewRef);
					}

					m_Prefabs[nCurrPrefab].m_nTotalRefCount++;
				}
			}		
		}

		//now clean up the world and the memory
		Allocator.FreeNode(pWorld);
		Allocator.FreeAllMemory();
	}

	FillEditText();
}