bool wxGxDiscConnections::IsObjectExist(wxGxObject* const pObj, const wxXmlNode* pNode) { int nXmlId = GetDecimalValue(pNode, wxT("id"), wxNOT_FOUND); wxGxDiscConnection* pConn = wxDynamicCast(pObj, wxGxDiscConnection); if(!pConn) return false; if(pConn->GetXmlId() != nXmlId) return false; //if exist control name and path wxString sName = pNode->GetAttribute(wxT("name"), NONAME); wxString sPath = pNode->GetAttribute(wxT("path"), NONAME); CPLString szPath(sPath.mb_str(wxConvUTF8)); if(pObj->GetPath() != szPath) { pObj->SetPath(szPath); //ObjectChanged event wxGIS_GXCATALOG_EVENT_ID(ObjectRefreshed, pObj->GetId()); } if(!pObj->GetName().IsSameAs( sName, false)) { pObj->SetName(sName); //ObjectChanged event wxGIS_GXCATALOG_EVENT_ID(ObjectChanged, pObj->GetId()); } return true; }
wxThread::ExitCode wxGxMLDatasetUI::Entry() { //ITrackCancel trackcancel; wxGISDataset* pDSet = GetDataset(false); wxGxCatalogUI* pCat = wxDynamicCast(GetGxCatalog(), wxGxCatalogUI); if(pDSet) { for(size_t i = 0; i < pDSet->GetSubsetsCount(); ++i) { wxGISDataset* pwxGISFeatureSuDataset = m_pwxGISDataset->GetSubset(i); wxString sSubsetName = pwxGISFeatureSuDataset->GetName(); wxGxMLSubDatasetUI* pGxMLSubDatasetUI = new wxGxMLSubDatasetUI((wxGISEnumVectorDatasetType)GetSubType(), pwxGISFeatureSuDataset, wxStaticCast(this, wxGxObject), sSubsetName, wxGxObjectContainer::GetPath(), m_LargeSubIcon, m_SmallSubIcon); wxGIS_GXCATALOG_EVENT_ID(ObjectAdded, pGxMLSubDatasetUI->GetId()); } wsDELETE(pDSet); } if(m_nPendUId != wxNOT_FOUND && pCat) { pCat->RemovePending(m_nPendUId); m_nPendUId = wxNOT_FOUND; } //wxGIS_GXCATALOG_EVENT(ObjectChanged); return (wxThread::ExitCode)wxTHREAD_NO_ERROR; }
void wxGxDiscConnection::OnFileSystemEvent(wxFileSystemWatcherEvent& event) { wxLogDebug(wxT("*** %s ***"), event.ToString().c_str()); switch(event.GetChangeType()) { case wxFSW_EVENT_CREATE: { //get object parent wxFileName oName = event.GetPath(); wxGxObjectContainer *parent = wxDynamicCast(FindGxObjectByPath(oName.GetPath()), wxGxObjectContainer); if(!parent) return; //check doubles if(parent->IsNameExist(event.GetPath().GetFullName())) return; CPLString szPath(event.GetPath().GetFullPath().mb_str(wxConvUTF8)); char **papszFileList = NULL; papszFileList = CSLAddString( papszFileList, szPath ); if(m_pCatalog) { wxArrayLong ChildrenIds; m_pCatalog->CreateChildren(parent, papszFileList, ChildrenIds); for(size_t i = 0; i < ChildrenIds.GetCount(); ++i) m_pCatalog->ObjectAdded(ChildrenIds[i]); } CSLDestroy( papszFileList ); } break; case wxFSW_EVENT_DELETE: { //search gxobject wxGxObject *current = FindGxObjectByPath(event.GetPath().GetFullPath()); if(current) { current->Destroy(); return; } } break; case wxFSW_EVENT_RENAME: { wxGxObject *current = FindGxObjectByPath(event.GetPath().GetFullPath()); if(current) { current->SetName(event.GetNewPath().GetFullName()); current->SetPath( CPLString( event.GetNewPath().GetFullPath().mb_str(wxConvUTF8) ) ); wxGIS_GXCATALOG_EVENT_ID(ObjectChanged, current->GetId()); #ifdef __WXGTK__ m_pWatcher->Remove(event.GetPath()); if(!IsPathWatched(event.GetNewPath().GetFullPath())) { m_pWatcher->Add(event.GetNewPath()); } #endif return; } } break; case wxFSW_EVENT_MODIFY: break; default: case wxFSW_EVENT_ACCESS: case wxFSW_EVENT_WARNING: case wxFSW_EVENT_ERROR: break; }; }