Exemplo n.º 1
0
HRESULT AddSearchEngines (IPropertyActionSequence *pISeq)
{
// Key zusammenbauen
string strKey = string(g_cbAppKey) + g_cbDel + g_cbSearchSubKey;

// Registrierte Pages enumerieren
HKEY hKey = NULL;
DWORD i = 0, dwCnt = 0;
char cbEnumKey[_MAX_PATH];
DWORD retCode = RegOpenKeyEx (HKEY_CLASSES_ROOT, strKey.c_str(), 0L, KEY_READ, &hKey);

	if (retCode == ERROR_SUCCESS) {
	// alle registrierten Einträge durchgehen
		while (RegEnumKey (hKey, i, cbEnumKey, _MAX_PATH) == ERROR_SUCCESS) {
			if (SUCCEEDED(LoadSearchEngine (pISeq, cbEnumKey)))	// evtl. Fehler ignorieren
				dwCnt++;
			i++;
		}

	// Schlüssel wieder abschließen
		RegCloseKey (hKey);   // Close the key handle.
	}

	if (0 == dwCnt) {
	// keine registrierten SearchEngines gefunden
		VMessageBox (NULL, FakeTRiASName(IDS_BADREGISTRATION_CAP, g_cbTRiAS).c_str(), 
			ExclamationIcon|OkayButton, IDS_BADREGISTRATION, g_cbTRiAS);
		return E_FAIL;
	}
	return S_OK;
}
Exemplo n.º 2
0
///////////////////////////////////////////////////////////////////////////////
// Open a ShapeDatasource (all shp files in a directory)
HRESULT CShapeDataSource::Open(const char *pszNewName, bool fUpdate, bool fTestOpen)
{
	_ASSERTE(0 == m_Layers.size());
	_ASSERTE(NULL != pszNewName);

struct _stat stat;
	
	m_strName = pszNewName;
	m_fUpdatable = fUpdate;
	
// Is the given path a directory or a regular file?
os_string strPath (pszNewName);		// evtl. abschließendes '\' abschneiden
size_t pos = strPath.find_last_of("\\/");

	if (os_npos != pos && pos == strPath.size()-1) 
		strPath.replace(pos, 1, "");

	if (0 != _stat(strPath.c_str(), &stat) || (!(stat.st_mode & _S_IFDIR) && !(stat.st_mode & _S_IFREG)))
	{
		if (fTestOpen)
			return S_FALSE;
		return TRIASHP_E_BADFILENAME; 
	}
	
// Build a list of filenames we figure are Shape files.
	if (stat.st_mode & _S_IFREG) {
	// given name relates to a file
		if (S_OK != OpenFile(pszNewName, fUpdate, fTestOpen)) {
			if (fTestOpen)
				return S_FALSE;
			return TRIASHP_E_OPENFILE_FAILED;
		}
		return S_OK;
	}
	else {
	vector<os_string> Candidates;
	vector<os_string> Failed;
	os_path dir (pszNewName);

		RETURN_FAILED_HRESULT(ReadDir (pszNewName, Candidates));
		for (vector<os_string>::iterator it = Candidates.begin(); it != Candidates.end(); ++it) {
		os_path path (*it);

			if (stricmp (path.extension().c_str(), g_cbShp))
				continue;

		// vollständigen Dateinamen bauen
			if (dir.has_directory()) 
				path.directory(dir.directory());
			if (dir.has_drive()) 
				path.drive(*dir.drive().c_str());

			if (S_OK != OpenFile (os_string(path).c_str(), fUpdate, fTestOpen) && !fTestOpen) 
				Failed.push_back(os_string(path));
		}

		if (!fTestOpen && 0 == m_Layers.size() && !fUpdate) {
			if (!m_fDeniedToOpen) {
			os_path datasource(strPath);

				VMessageBox(IDS_DBENGINE_DESC, MB_ICONEXCLAMATION|MB_OK, 
					IDS_COULDNOTOPENSHAPE, datasource.base().c_str());
				m_fDeniedToOpen = true;
			}
			return TRIASHP_W_NOFILESFOUND;
		}

	// Fehlerbahandlung
		if (Failed.size() > 0) {
		int iResult = IDNO;

			if (!m_fDeniedToOpen) {
			os_path datasource(strPath);

				if (1 == Failed.size()) {
					iResult = VMessageBox(IDS_DBENGINE_DESC, MB_ICONQUESTION|MB_YESNO, 
						IDS_COULDNOTOPENFILE, Failed[0].c_str(), datasource.base().c_str());
				}
				else {
				os_string failed;

					for (vector<os_string>::iterator it = Failed.begin();
						 it != Failed.end(); ++it)
					{
						failed += "    ";
						failed += *it;
						failed += '\n';
					}
					iResult = VMessageBox(IDS_DBENGINE_DESC, MB_ICONQUESTION|MB_YESNO, 
						IDS_COULDNOTOPENFILES, failed.c_str(), datasource.base().c_str());
				}
				m_fDeniedToOpen = true;
			}
			if (IDNO == iResult) {
				m_Layers.clear();
				return TRIASHP_E_OPENFILE_FAILED;
			}
		}
	}


// Datenbank jetzt geöffnet
	m_fOpened = true;
	return (m_Layers.size() > 0 || fUpdate) ? S_OK : S_FALSE;
}