bool wxGxTreeViewBase::Activate(IApplication* const pApplication, wxXmlNode* const pConf) { if(!wxGxView::Activate(pApplication, pConf)) return false; wxGxApplicationBase* pGxApp = dynamic_cast<wxGxApplicationBase*>(pApplication); if(NULL == pGxApp) return false; m_pSelection = pGxApp->GetGxSelection(); m_pApp = dynamic_cast<wxGISApplicationBase*>(pApplication); if(NULL == m_pApp) return false; if(!GetGxCatalog()) return false; m_pCatalog = wxDynamicCast(GetGxCatalog(), wxGxCatalogUI); //delete m_pDeleteCmd = m_pApp->GetCommand(wxT("wxGISCatalogMainCmd"), 4); //new m_pNewMenu = dynamic_cast<wxGISNewMenu*>(m_pApp->GetCommandBar(NEWMENUNAME)); AddRoot(m_pCatalog); m_ConnectionPointCatalogCookie = m_pCatalog->Advise(this); if(m_pSelection) m_ConnectionPointSelectionCookie = m_pSelection->Advise(this); return true; };
bool wxGxContentView::Activate(IApplication* const pApplication, wxXmlNode* const pConf) { if(!wxGxView::Activate(pApplication, pConf)) return false; wxGxApplicationBase* pGxApp = dynamic_cast<wxGxApplicationBase*>(pApplication); if(NULL == pGxApp) return false; m_pSelection = pGxApp->GetGxSelection(); m_pApp = dynamic_cast<wxGISApplicationBase*>(pApplication); if(NULL == m_pApp) return false; m_pGxApp = dynamic_cast<wxGxApplication*>(pApplication); if(!GetGxCatalog()) return false; m_pCatalog = wxDynamicCast(GetGxCatalog(), wxGxCatalogUI); //delete m_pDeleteCmd = m_pApp->GetCommand(wxT("wxGISCatalogMainCmd"), 4); m_ConnectionPointCatalogCookie = m_pCatalog->Advise(this); InitColumns(); Serialize(m_pXmlConf, false); 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 wxGISCatalogMainCmd::OnDropDownCommand(int nID) { wxCHECK_RET(m_pGxApp, wxT("Application pointer is null")); wxGxSelection* pSel = m_pGxApp->GetGxSelection(); wxGxCatalogBase* pCat = GetGxCatalog(); if(pSel && pCat && GetEnabled()) { int nPos = pSel->GetDoPos(); int nNewPos = nID - ID_MENUCMD; long nSelId = wxNOT_FOUND; if(nNewPos > nPos) { if(pSel->CanRedo()) { nSelId = pSel->Redo(nNewPos); } } else { if(pSel->CanUndo()) { nSelId = pSel->Undo(nNewPos); } } if(pCat->GetRegisterObject(nSelId)) { pSel->Select(nSelId, false, wxGxSelection::INIT_ALL); } } }
WXDLLIMPEXP_GIS_GPU int wxCALLBACK GxTaskCompareFunction(wxIntPtr item1, wxIntPtr item2, wxIntPtr sortData) { wxGxCatalogBase* pCatalog = GetGxCatalog(); if(!pCatalog) return 0; // LPSORTDATA psortdata = (LPSORTDATA)sortData; IGxTask* pGxTask1 = dynamic_cast<IGxTask*>(pCatalog->GetRegisterObject(item1)); IGxTask* pGxTask2 = dynamic_cast<IGxTask*>(pCatalog->GetRegisterObject(item2)); if(pGxTask1 && !pGxTask2) return 1;//psortdata->bSortAsc == 0 ? 1 : -1; if(!pGxTask1 && pGxTask2) return -1;//psortdata->bSortAsc == 0 ? -1 : 1; if(!pGxTask1 && !pGxTask2) return 0; if(pGxTask1->GetState() == enumGISTaskDone && pGxTask2->GetState() == enumGISTaskDone) return 0; if(pGxTask1->GetState() != enumGISTaskDone && pGxTask2->GetState() == enumGISTaskDone) return -1; if(pGxTask1->GetState() == enumGISTaskDone && pGxTask2->GetState() != enumGISTaskDone) return 1; return pGxTask1->GetPriority() - pGxTask2->GetPriority(); }
void wxGISTaskCmd::OnClick(void) { wxGxSelection* pSel = m_pApp->GetGxSelection(); wxGxCatalogBase* pCat = GetGxCatalog(); switch(m_subtype) { case 0: if(pCat && pSel) { //for(size_t i = 0; i < pSel->GetCount(); ++i) //{ // wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); // IGxTask* pGxTask = dynamic_cast<IGxTask*>(pGxObject); // if(pGxTask) // pGxTask->ShowToolConfig(dynamic_cast<wxWindow*>(m_pApp)); //} } break; case 1: if(pCat && pSel) { //for(size_t i = 0; i < pSel->GetCount(); ++i) //{ // wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); // IGxTask* pGxTask = dynamic_cast<IGxTask*>(pGxObject); // if(pGxTask) // pGxTask->ShowProcess(dynamic_cast<wxWindow*>(m_pApp)); //} } break; case 2: if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxTask* pGxTask = dynamic_cast<IGxTask*>(pGxObject); if(pGxTask) pGxTask->StartTask(); } } break; case 3: if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxTask* pGxTask = dynamic_cast<IGxTask*>(pGxObject); if(pGxTask) pGxTask->StopTask(); } } break; default: return; } }
void wxGxArchiveFolder::LoadChildren(void) { if(m_bIsChildrenLoaded) return; char **papszItems = CPLReadDir(m_sPath); if(papszItems == NULL) return; char **papszFileList = NULL; //remove unused items for(int i = CSLCount(papszItems) - 1; i >= 0; i-- ) { if( wxGISEQUAL(papszItems[i],".") || wxGISEQUAL(papszItems[i],"..") ) continue; CPLString szFileName = m_sPath; szFileName += "/"; szFileName += papszItems[i]; VSIStatBufL BufL; int ret = VSIStatL(szFileName, &BufL); if(ret == 0) { if(VSI_ISDIR(BufL.st_mode)) { wxString sCharset(wxT("cp-866")); wxGISAppConfig oConfig = GetConfig(); if(oConfig.IsOk()) sCharset = oConfig.Read(enumGISHKCU, wxString(wxT("wxGISCommon/zip/charset")), sCharset); wxString sFileName(papszItems[i], wxCSConv(sCharset)); GetArchiveFolder(this, sFileName, szFileName); } else { papszFileList = CSLAddString( papszFileList, szFileName ); } } } CSLDestroy( papszItems ); //load names wxGxCatalog *pCatalog = wxDynamicCast(GetGxCatalog(), wxGxCatalog); if(pCatalog) { wxArrayLong ChildrenIds; pCatalog->CreateChildren(this, papszFileList, ChildrenIds); for(size_t i = 0; i < ChildrenIds.GetCount(); ++i) pCatalog->ObjectAdded(ChildrenIds[i]); } CSLDestroy( papszFileList ); m_bIsChildrenLoaded = true; }
wxGxDiscConnection::wxGxDiscConnection(void) : wxGxFolder() { m_pWatcher = new wxFileSystemWatcher(); m_pWatcher->SetOwner(this); m_pCatalog = wxDynamicCast(GetGxCatalog(), wxGxCatalog); #ifdef __WXGTK__ m_ConnectionPointCatalogCookie = wxNOT_FOUND; if(m_pCatalog) { m_ConnectionPointCatalogCookie = m_pCatalog->Advise(this); } #endif }
void wxGxMLDatasetUI::LoadChildren(void) { if(m_bIsChildrenLoaded) return; wxGxCatalogUI* pCat = wxDynamicCast(GetGxCatalog(), wxGxCatalogUI); if(pCat) { m_nPendUId = pCat->AddPending(GetId()); } CreateAndRunCheckThread(); m_bIsChildrenLoaded = true; }
wxGxDiscConnection::wxGxDiscConnection(wxGxObject *oParent, const wxString &soXmlConfPath, int nXmlId, const wxString &soName, const CPLString &soPath) : wxGxFolder(oParent, soName, soPath) { m_nXmlId = nXmlId; m_soXmlConfPath = soXmlConfPath; m_pWatcher = new wxFileSystemWatcher(); m_pWatcher->SetOwner(this); m_pCatalog = wxDynamicCast(GetGxCatalog(), wxGxCatalog); #ifdef __WXGTK__ m_ConnectionPointCatalogCookie = wxNOT_FOUND; if(m_pCatalog) { m_ConnectionPointCatalogCookie = m_pCatalog->Advise(this); } #endif }
bool wxGxWebConnectionFactory::GetChildren(wxGxObject* pParent, char** &pFileNames, wxArrayLong & pChildrenIds) { wxGxCatalogBase* pCatalog = GetGxCatalog(); for(int i = CSLCount(pFileNames) - 1; i >= 0; i-- ) { CPLString szExt = CPLGetExtension(pFileNames[i]); if(wxGISEQUAL(szExt, "wconn")) { if( m_bHasDriver ) { wxGxObject* pObj = GetGxObject(pParent, GetConvName(pFileNames[i]), pFileNames[i]); if(pObj) pChildrenIds.Add(pObj->GetId()); } pFileNames = CSLRemoveStrings( pFileNames, i, 1, NULL ); } } return true; }
bool wxGxLocalDBFactory::GetChildren(wxGxObject* pParent, char** &pFileNames, wxArrayLong & pChildrenIds) { wxGxCatalogBase* pCatalog = GetGxCatalog(); bool bCheckNames = CSLCount(pFileNames) < CHECK_DUBLES_MAX_COUNT; for(int i = CSLCount(pFileNames) - 1; i >= 0; i-- ) { VSIStatBufL BufL; int ret = VSIStatL(pFileNames[i], &BufL); if(ret == 0) { if (VSI_ISDIR(BufL.st_mode) && wxGISEQUAL(CPLGetExtension(pFileNames[i]), "gdb")) { wxGxObject* pObj = GetGxObject(pParent, wxString(CPLGetFilename(pFileNames[i]), wxConvUTF8), pFileNames[i], enumContGDBFolder, bCheckNames); if(pObj) pChildrenIds.Add(pObj->GetId()); pFileNames = CSLRemoveStrings( pFileNames, i, 1, NULL ); } //TODO: mdb, sqlite, db extensions } } return true; }
void wxGxTreeViewBase::RefreshAll(void) { DeleteAllItems(); AddRoot(GetGxCatalog()); }
int wxCALLBACK GxObjectCVCompareFunction(wxIntPtr item1, wxIntPtr item2, wxIntPtr sortData) { wxGxCatalogBase* pCatalog = GetGxCatalog(); if(!pCatalog) return 0; wxGxContentView::LPITEMDATA pItem1 = (wxGxContentView::LPITEMDATA)item1; wxGxContentView::LPITEMDATA pItem2 = (wxGxContentView::LPITEMDATA)item2; LPSORTDATA psortdata = (LPSORTDATA)sortData; wxGxObject* pGxObject1 = pCatalog->GetRegisterObject(pItem1->nObjectID); wxGxObject* pGxObject2 = pCatalog->GetRegisterObject(pItem2->nObjectID); if(psortdata->currentSortCol == 0) return GxObjectCompareFunction(pGxObject1, pGxObject2, psortdata->bSortAsc); else { IGxObjectSort* pGxObjectSort1 = dynamic_cast<IGxObjectSort*>(pGxObject1); IGxObjectSort* pGxObjectSort2 = dynamic_cast<IGxObjectSort*>(pGxObject2); if(pGxObjectSort1 && !pGxObjectSort2) return psortdata->bSortAsc == 0 ? 1 : -1; if(!pGxObjectSort1 && pGxObjectSort2) return psortdata->bSortAsc == 0 ? -1 : 1; if(pGxObjectSort1 && pGxObjectSort2) { bool bAlwaysTop1 = pGxObjectSort1->IsAlwaysTop(); bool bAlwaysTop2 = pGxObjectSort2->IsAlwaysTop(); if(bAlwaysTop1 && !bAlwaysTop2) return psortdata->bSortAsc == 0 ? 1 : -1; if(!bAlwaysTop1 && bAlwaysTop2) return psortdata->bSortAsc == 0 ? -1 : 1; bool bSortEnables1 = pGxObjectSort1->IsSortEnabled(); bool bSortEnables2 = pGxObjectSort2->IsSortEnabled(); if(!bSortEnables1 || !bSortEnables1) return 0; } bool bContainerDst1 = pGxObject1->IsKindOf(wxCLASSINFO(wxGxDataset)) || pGxObject1->IsKindOf(wxCLASSINFO(wxGxDatasetContainer)); bool bContainerDst2 = pGxObject2->IsKindOf(wxCLASSINFO(wxGxDataset)) || pGxObject2->IsKindOf(wxCLASSINFO(wxGxDatasetContainer)); bool bContainer1 = pGxObject1->IsKindOf(wxCLASSINFO(wxGxObjectContainer)); bool bContainer2 = pGxObject2->IsKindOf(wxCLASSINFO(wxGxObjectContainer)); if(bContainer1 && !bContainerDst1 && bContainerDst2) return psortdata->bSortAsc == 0 ? 1 : -1; if(bContainer2 && !bContainerDst2 && bContainerDst1) return psortdata->bSortAsc == 0 ? -1 : 1; if(bContainer1 && !bContainer2) return psortdata->bSortAsc == 0 ? 1 : -1; if(!bContainer1 && bContainer2) return psortdata->bSortAsc == 0 ? -1 : 1; if(psortdata->currentSortCol == 1) { return pGxObject1->GetCategory().CmpNoCase(pGxObject2->GetCategory()) * (psortdata->bSortAsc == 0 ? -1 : 1); } else if(psortdata->currentSortCol == 2) { if(!bContainerDst1 && bContainerDst2) return psortdata->bSortAsc == 0 ? -1 : 1; else if(bContainerDst1 && !bContainerDst2) return psortdata->bSortAsc == 0 ? 1 : -1; else if(!bContainerDst1 && !bContainerDst2) return 0; else { IGxDataset* pDSt1 = dynamic_cast<IGxDataset*>(pGxObject1); IGxDataset* pDSt2 = dynamic_cast<IGxDataset*>(pGxObject2); long diff = long(pDSt1->GetSize().ToULong()) - long(pDSt2->GetSize().ToULong()); return diff * (psortdata->bSortAsc == 0 ? -1 : 1); } } else if(psortdata->currentSortCol == 3) { if(!bContainerDst1 && bContainerDst2) return psortdata->bSortAsc == 0 ? 1 : -1; else if(bContainerDst1 && !bContainerDst2) return psortdata->bSortAsc == 0 ? -1 : 1; else if(!bContainerDst1 && !bContainerDst2) return 0; else { IGxDataset* pDSt1 = dynamic_cast<IGxDataset*>(pGxObject1); IGxDataset* pDSt2 = dynamic_cast<IGxDataset*>(pGxObject2); return (pDSt1->GetModificationDate() - pDSt2->GetModificationDate()).GetSeconds().ToLong() * (psortdata->bSortAsc == 0 ? -1 : 1); } } } return 0; }
wxMenu* wxGISCatalogMainCmd::GetDropDownMenu(void) { wxCHECK_MSG(m_pGxApp, NULL, wxT("Application pointer is null")); wxGxSelection* pSel = m_pGxApp->GetGxSelection(); wxGxCatalogBase* pCat = GetGxCatalog(); switch(m_subtype) { case 5: if(pSel && pCat) { int nPos = pSel->GetDoPos(); wxMenu* pMenu = new wxMenu(); for(size_t i = nPos > m_nPrevNextSelCount ? nPos - m_nPrevNextSelCount : 0; i < nPos; ++i)// last x steps { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetDoId(i)); if(pGxObject) { wxString sPath = pGxObject->GetFullName(); if(!sPath.IsEmpty()) pMenu->Append(ID_MENUCMD + i, sPath); else { sPath = pGxObject->GetName(); if(!sPath.IsEmpty()) pMenu->Append(ID_MENUCMD + i, sPath); } } } return pMenu; } return NULL; case 6: if(pSel && pCat) { int nPos = pSel->GetDoPos(); wxMenu* pMenu = new wxMenu(); for(size_t i = nPos + 1; i < pSel->GetDoSize(); ++i) { if(i > nPos + m_nPrevNextSelCount)// last x steps break; wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetDoId(i)); if(pGxObject) { wxString sPath = pGxObject->GetFullName(); if(!sPath.IsEmpty()) pMenu->Append(ID_MENUCMD + i, sPath); else { sPath = pGxObject->GetName(); if(!sPath.IsEmpty()) pMenu->Append(ID_MENUCMD + i, sPath); } } } return pMenu; } return NULL; default: return NULL; } }
wxString wxGISCatalogMainCmd::GetTooltip(void) { wxCHECK_MSG(m_pGxApp, wxEmptyString, wxT("Application pointer is null")); wxGxSelection* pSel = m_pGxApp->GetGxSelection(); wxGxCatalogBase* pCat = GetGxCatalog(); switch(m_subtype) { case 0: return wxString(_("Up One Level")); case 1: return wxString(_("Connect folder")); case 2: return wxString(_("Disconnect folder")); case 3: return wxString(_("Set or get location")); case 4: return wxString(_("Delete selected item")); case 5: if(pSel && pCat && GetEnabled()) { int nPos = pSel->GetDoPos(); wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetDoId(nPos - 1)); if(pGxObject) { wxString sPath = pGxObject->GetFullName(); if(!sPath.IsEmpty()) return sPath; } } return wxString(_("Go to previous location")); case 6: if(pSel && pCat && GetEnabled()) { int nPos = pSel->GetDoPos(); wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetDoId(nPos - 1)); if(pGxObject) { wxString sPath = pGxObject->GetFullName(); if(!sPath.IsEmpty()) return sPath; } } return wxString(_("Go to next location")); case 7: return wxString(_("Create new folder")); case 8: return wxString(_("Rename selected item")); case 9: return wxString(_("Refresh selected item")); case 10: return wxString(_("Show properties of selected item")); case 11: return wxString(_("Copy selected item(s)")); case 12: return wxString(_("Cut selected item(s)")); case 13: return wxString(_("Paste selected item(s)")); default: return wxEmptyString; } }
void wxGISCatalogMainCmd::OnClick(void) { wxCHECK_RET(m_pGxApp && m_pApp, wxT("Application pointer is null")); wxGxSelection* pSel = m_pGxApp->GetGxSelection(); wxGxCatalogBase* pCat = GetGxCatalog(); switch(m_subtype) { case 0: if(pSel && pCat) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId()); if(!pGxObject) return; wxGxObject* pParentGxObject = pGxObject->GetParent(); if(pParentGxObject) { pSel->Select(pParentGxObject->GetId(), false, wxGxSelection::INIT_ALL); } /* if(wxIsKindOf(pParentGxObject, wxGxObjectContainer)) { pSel->Select(pParentGxObject->GetId(), false, wxGxSelection::INIT_ALL); } else { wxGxObject* pGrandParentGxObject = pParentGxObject->GetParent(); pSel->Select(pGrandParentGxObject->GetId(), false, wxGxSelection::INIT_ALL); } */ } break; case 1:// 1 Connect Folder { wxDirDialog dlg(dynamic_cast<wxWindow*>(m_pApp), wxString(_("Choose a folder to connect"))); if(pSel && pCat && dlg.ShowModal() == wxID_OK) { wxGxCatalog* pGxCatalog = wxDynamicCast(pCat, wxGxCatalog); if(pGxCatalog) { wxGxDiscConnections* pGxDiscConnections = wxDynamicCast(pGxCatalog->GetRootItemByType(wxCLASSINFO(wxGxDiscConnections)), wxGxDiscConnections); if(pGxDiscConnections && pGxDiscConnections->ConnectFolder(dlg.GetPath())) return; else wxMessageBox(_("Cannot connect folder"), _("Error"), wxOK | wxICON_ERROR); } } return; } case 2:// 2 Disconnect Folder - duplicate Delete command { if(pSel && pCat) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId()); wxGxDiscConnection* pGxDiscConnection = wxDynamicCast(pGxObject, wxGxDiscConnection); if(pGxDiscConnection && pGxDiscConnection->Delete()) return; else wxMessageBox(_("Cannot disconnect folder"), _("Error"), wxOK | wxICON_ERROR); } return; } case 8: if(pSel && pCat) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetLastSelectedObjectId()); wxGxView* pGxView = dynamic_cast<wxGxView*>(wxWindow::FindFocus()); if(pGxView && pGxObject) pGxView->BeginRename(pGxObject->GetId()); } break; case 4: if(pSel && pCat) { bool bAskToDelete(true); wxGISAppConfig oConfig = GetConfig(); bAskToDelete = oConfig.ReadBool(enumGISHKCU, m_pApp->GetAppName() + wxString(wxT("/catalog/ask_delete")), bAskToDelete); if(bAskToDelete) { //show ask dialog wxWindow* pWnd = dynamic_cast<wxWindow*>(m_pApp); wxRichMessageDialog dlg(pWnd, wxString::Format(_("Do you really want to delete %d item(s)"), pSel->GetCount()), wxString(_("Delete confirm")), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION | wxSTAY_ON_TOP | wxCENTRE); dlg.SetExtendedMessage(wxString(_("The result of operation cannot be undone!\nThe deleted items will remove from disk and will not put to the recycled bin."))); dlg.ShowCheckBox("Use my choice and do not show this dialog in future"); int nRes = dlg.ShowModal(); if(oConfig.IsOk()) oConfig.Write(enumGISHKCU, m_pApp->GetAppName() + wxString(wxT("/catalog/ask_delete")), !dlg.IsCheckBoxChecked()); if(nRes == wxID_NO) return; } for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanDelete()) { if(!pGxObjectEdit->Delete()) { wxWindow* pWnd = dynamic_cast<wxWindow*>(m_pApp); if(i == pSel->GetCount() - 1) { wxMessageBox(wxString::Format(_("Delete '%s'failed"), pGxObject->GetName().c_str()), _("Error"), wxOK | wxICON_ERROR, pWnd); return; } int nRes = wxMessageBox(wxString::Format(_("Cannot delete '%s'\nContinue?"), pGxObject->GetName().c_str()), _("Error"), wxYES_NO | wxICON_QUESTION, pWnd); if(nRes == wxNO) return; } } } } return; case 5: if(pSel && pCat) { long nSelId = wxNOT_FOUND; if(pSel->CanUndo()) { nSelId = pSel->Undo(wxNOT_FOUND); } if(pCat->GetRegisterObject(nSelId)) { pSel->Select(nSelId, false, wxGxSelection::INIT_ALL); } } return; case 6: if(pSel && pCat) { long nSelId = wxNOT_FOUND; if(pSel->CanRedo()) { nSelId = pSel->Redo(wxNOT_FOUND); } if(pCat->GetRegisterObject(nSelId)) { pSel->Select(nSelId, false, wxGxSelection::INIT_ALL); } } return; case 9: if(pSel && pCat) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); if(pGxObject) pGxObject->Refresh(); } } return; case 10: if(pSel && pCat) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetLastSelectedObjectId()); IGxObjectEditUI* pGxObjectEdit = dynamic_cast<IGxObjectEditUI*>(pGxObject); if(pGxObjectEdit) pGxObjectEdit->EditProperties(dynamic_cast<wxWindow*>(m_pApp)); } return; case 11://copy if(pSel && pCat) { wxDataObjectComposite *pDragData = new wxDataObjectComposite(); wxGISStringDataObject *pNamesData = new wxGISStringDataObject(wxDataFormat(wxT("application/x-vnd.wxgis.gxobject-name"))); pDragData->Add(pNamesData, true); wxFileDataObject *pFileData = new wxFileDataObject(); pDragData->Add(pFileData, false); for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); if(pGxObject) { wxString sSystemPath(pGxObject->GetPath(), wxConvUTF8); pFileData->AddFile(sSystemPath); pNamesData->AddString(pGxObject->GetFullName()); } } //! Lock clipboard wxClipboardLocker locker; if(!locker) wxMessageBox(_("Can't open clipboard"), _("Error"), wxOK | wxICON_ERROR); else { //! Put data to clipboard if(!wxTheClipboard->AddData(pDragData)) wxMessageBox(_("Can't copy file(s) to the clipboard"), _("Error"), wxOK | wxICON_ERROR); } } return; case 12://cut if(pSel && pCat) { wxDataObjectComposite *pDragData = new wxDataObjectComposite(); wxGISStringDataObject *pNamesData = new wxGISStringDataObject(wxDataFormat(wxT("application/x-vnd.wxgis.gxobject-name"))); pDragData->Add(pNamesData, true); wxFileDataObject *pFileData = new wxFileDataObject(); pDragData->Add(pFileData, false); pDragData->Add(new wxTextDataObject(wxT("cut"))); for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); if(pGxObject) { wxString sSystemPath(pGxObject->GetPath(), wxConvUTF8); pFileData->AddFile(sSystemPath); pNamesData->AddString(pGxObject->GetFullName()); } } //! Lock clipboard wxClipboardLocker locker; if(!locker) wxMessageBox(_("Can't open clipboard"), _("Error"), wxOK | wxICON_ERROR); else { //! Put data to clipboard if(!wxTheClipboard->AddData(pDragData)) wxMessageBox(_("Can't copy file(s) to the clipboard"), _("Error"), wxOK | wxICON_ERROR); } } return; case 13://paste if(pSel && pCat) { IGxDropTarget* pTarget = dynamic_cast<IGxDropTarget*>(pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId())); if(!pTarget) return; wxClipboardLocker locker; if(!locker) wxMessageBox(_("Can't open clipboard"), _("Error"), wxOK | wxICON_ERROR); else { wxTextDataObject data; bool bMove(false); if(wxTheClipboard->GetData( data )) { if(data.GetText() == wxString(wxT("cut"))) bMove = true; } wxGISStringDataObject data_names(wxDataFormat(wxT("application/x-vnd.wxgis.gxobject-name"))); if(wxTheClipboard->GetData( data_names )) { pTarget->Drop(data_names.GetStrings(), bMove); return; } wxFileDataObject filedata; if( wxTheClipboard->GetData( filedata ) ) { pTarget->Drop(wxGISDropTarget::PathsToNames(filedata.GetFilenames()), bMove); return; } } } return; case 7: if(pSel && pCat) { //create folder long nSelId = pSel->GetFirstSelectedObjectId(); wxGxObject* pGxObject = pCat->GetRegisterObject(nSelId); wxGxAutoRenamer* pGxFolder = dynamic_cast<wxGxAutoRenamer*>(pGxObject); if(!pGxFolder) return; wxGxView* pGxView = dynamic_cast<wxGxView*>(wxWindow::FindFocus()); CPLString sFolderPath = CheckUniqPath(pGxObject->GetPath(), CPLString(wxString(_("New folder")).mb_str(wxConvUTF8)), true, " "); pGxFolder->BeginRenameOnAdd(pGxView, sFolderPath); if(!CreateDir(sFolderPath)) { wxMessageBox(_("Create folder error!"), _("Error"), wxICON_ERROR | wxOK ); pGxFolder->BeginRenameOnAdd(NULL, ""); return; } } return; case 3: default: return; } }
bool wxGISCatalogMainCmd::GetEnabled(void) { wxCHECK_MSG(m_pGxApp, false, wxT("Application pointer is null")); wxGxSelection* pSel = m_pGxApp->GetGxSelection(); wxGxCatalogBase* pCat = GetGxCatalog(); switch(m_subtype) { case 0://Up One Level if(pCat && pSel) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId()); return pGxObject != NULL && pGxObject->GetParent(); } return false; case 1: return true; case 2: //check if wxGxDiscConnection if(pCat && pSel) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId()); return pGxObject != NULL && pGxObject->IsKindOf(wxCLASSINFO(wxGxDiscConnection)); } return false; case 3: return true; case 4://delete if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanDelete()) return true; } } return false; case 5: if(pSel) return pSel->CanUndo(); return false; case 6: if(pSel) return pSel->CanRedo(); return false; case 7: if(pCat && pSel) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetFirstSelectedObjectId()); wxGxObjectContainer* pCont = wxDynamicCast(pGxObject, wxGxObjectContainer); if(pCont) return pCont->CanCreate(enumGISContainer, enumContFolder); } return false; case 8://Rename if(pCat && pSel) { size_t nCounter(0); for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanRename()) nCounter++; } return nCounter == 1 ? true : false; } return false; case 9://Refresh if(pSel) return pSel->GetCount() > 0; return false; case 10://Properties //check if IGxObjectEditUI if(pCat && pSel) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetLastSelectedObjectId()); return dynamic_cast<IGxObjectEditUI*>(pGxObject); } return false; case 11://Copy if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanCopy("")) return true; } } return false; case 12://Cut if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxObjectEdit* pGxObjectEdit = dynamic_cast<IGxObjectEdit*>(pGxObject); if(pGxObjectEdit && pGxObjectEdit->CanMove("")) return true; } } return false; case 13://Paste { IViewDropTarget* pViewDropTarget = dynamic_cast<IViewDropTarget*>(wxWindow::FindFocus()); if(pViewDropTarget) { if( pViewDropTarget->CanPaste() ) { wxClipboardLocker locker; bool bMove(false); if(!locker) { // } else { wxTextDataObject data; if(wxTheClipboard->GetData( data )) { if(data.GetText() == wxString(wxT("cut"))) bMove = true; } } for(size_t i = 0; i < pSel->GetCount(); ++i) { IGxDropTarget* pGxDropTarget = dynamic_cast<IGxDropTarget*>(pCat->GetRegisterObject(pSel->GetSelectedObjectId(i))); if(pGxDropTarget && wxIsDragResultOk(pGxDropTarget->CanDrop(bMove == true ? wxDragMove : wxDragCopy))) return true; } } } } return false; default: return false; } }
bool wxGISTaskCmd::GetEnabled(void) { wxGxSelection* pSel = m_pApp->GetGxSelection(); wxGxCatalogBase* pCat = GetGxCatalog(); switch(m_subtype) { case 0: //Show task config dialog if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxTask* pGxTask = dynamic_cast<IGxTask*>(pGxObject); if(!pGxTask) return false; if(pGxTask->GetState() != enumGISTaskWork) return true; } } return false; case 1: //Show task execution dialog if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxTask* pGxTask = dynamic_cast<IGxTask*>(pGxObject); if(!pGxTask) return false; if(pGxTask->GetState() == enumGISTaskWork || pGxTask->GetState() == enumGISTaskDone || pGxTask->GetState() == enumGISTaskError) return true; } } return false; case 2: //Start task if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxTask* pGxTask = dynamic_cast<IGxTask*>(pGxObject); if(!pGxTask) return false; return !(pGxTask->GetState() == enumGISTaskQuered || pGxTask->GetState() == enumGISTaskWork); //if(pGxTask->GetState() != enumGISTaskQuered && pGxTask->GetState() != enumGISTaskWork) // return true; } } return false; case 3: //Stop task if(pCat && pSel) { for(size_t i = 0; i < pSel->GetCount(); ++i) { wxGxObject* pGxObject = pCat->GetRegisterObject(pSel->GetSelectedObjectId(i)); IGxTask* pGxTask = dynamic_cast<IGxTask*>(pGxObject); if(!pGxTask) return false; return !(pGxTask->GetState() == enumGISTaskPaused || pGxTask->GetState() == enumGISTaskError || pGxTask->GetState() == enumGISTaskDone); //if(pGxTask->GetState() != enumGISTaskPaused) // return true; } } return false; default: return false; } }
wxGxObjectDialog::wxGxObjectDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ), wxGISApplicationBase(), wxGxApplicationBase() { //this->SetSizeHints( wxSize( 400,300 ), wxDefaultSize ); m_pDropDownCommand = NULL; m_bAllowMultiSelect = false; m_bOverwritePrompt = false; m_nDefaultFilter = 0; m_pwxGxContentView = NULL; m_PopupCtrl = NULL; m_bAllFilters = true; m_bOwnFilter = true; m_pCatalog = wxDynamicCast(GetGxCatalog(), wxGxCatalogUI); bMainSizer = new wxBoxSizer( wxVERTICAL ); bHeaderSizer = new wxBoxSizer( wxHORIZONTAL ); m_staticText1 = new wxStaticText( this, wxID_ANY, _("Look in: "), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); m_staticText1->Wrap( -1 ); bHeaderSizer->Add( m_staticText1, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_TreeCombo = new wxComboCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxCB_READONLY); #ifdef __WXMSW__ m_TreeCombo->UseAltPopupWindow(true); #else m_TreeCombo->UseAltPopupWindow(false); #endif m_PopupCtrl = new wxTreeViewComboPopup(); m_TreeCombo->SetPopupControl(m_PopupCtrl); m_TreeCombo->EnablePopupAnimation(true); //m_PopupCtrl->Connect( wxEVT_LEFT_UP, wxMouseEventHandler( wxTreeViewComboPopup::OnMouseClick ), NULL, m_PopupCtrl ); m_PopupCtrl->Activate(this, NULL);//TODO: bHeaderSizer->Add( m_TreeCombo, 1, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_toolBar = new wxAuiToolBar( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxAUI_TB_HORZ_LAYOUT|wxBORDER_NONE); m_toolBar->SetToolBitmapSize( wxSize( 16,16 ) ); m_toolBar->SetArtProvider(new wxGxToolBarArt()); // 0 Up One Level // 1 Connect Folder // 2 Disconnect Folder // 3 Location // 4 Delete Item // 5 Back // 6 Forward // 7 Create Folder int IDs[8] = {5,0,wxNOT_FOUND,1,2,wxNOT_FOUND,4,7}; wxGISCatalogMainCmd* pwxGISCatalogMainCmd(NULL); int nCmdCounter(0); for(size_t i = 0; i < 8; ++i) { if(IDs[i] == wxNOT_FOUND) { m_toolBar->AddSeparator(); continue; } pwxGISCatalogMainCmd = new wxGISCatalogMainCmd(); pwxGISCatalogMainCmd->OnCreate(this); pwxGISCatalogMainCmd->SetSubType(IDs[i]); pwxGISCatalogMainCmd->SetId(ID_PLUGINCMD + nCmdCounter); nCmdCounter++; m_CommandArray.push_back(pwxGISCatalogMainCmd); wxGISEnumCommandKind kind = pwxGISCatalogMainCmd->GetKind(); if (kind == enumGISCommandDropDown) kind = enumGISCommandNormal; m_toolBar->AddTool( pwxGISCatalogMainCmd->GetId(), pwxGISCatalogMainCmd->GetCaption(), pwxGISCatalogMainCmd->GetBitmap(), wxNullBitmap, (wxItemKind)kind, pwxGISCatalogMainCmd->GetTooltip(), pwxGISCatalogMainCmd->GetMessage(), NULL ); if(pwxGISCatalogMainCmd->GetKind() == enumGISCommandDropDown) m_toolBar->SetToolDropDown(pwxGISCatalogMainCmd->GetId(), true); } wxGISCatalogViewsCmd* pwxGISCatalogViewsCmd = new wxGISCatalogViewsCmd(); pwxGISCatalogViewsCmd->OnCreate(this); pwxGISCatalogViewsCmd->SetSubType(0); pwxGISCatalogViewsCmd->SetId(ID_PLUGINCMD + nCmdCounter); nCmdCounter++; //pwxGISCatalogViewsCmd->SetID(ID_PLUGINCMD + 9); m_CommandArray.push_back(pwxGISCatalogViewsCmd); wxGISEnumCommandKind kind = pwxGISCatalogViewsCmd->GetKind(); if(pwxGISCatalogViewsCmd->GetKind() == enumGISCommandDropDown) kind = enumGISCommandNormal; m_toolBar->AddTool( pwxGISCatalogViewsCmd->GetId(), pwxGISCatalogViewsCmd->GetCaption(), pwxGISCatalogViewsCmd->GetBitmap(), wxNullBitmap, (wxItemKind)kind, pwxGISCatalogViewsCmd->GetTooltip(), pwxGISCatalogViewsCmd->GetMessage(), NULL ); if(pwxGISCatalogViewsCmd->GetKind() == enumGISCommandDropDown) m_toolBar->SetToolDropDown(pwxGISCatalogViewsCmd->GetId(), true); m_toolBar->Realize(); //rename pwxGISCatalogMainCmd = new wxGISCatalogMainCmd(); pwxGISCatalogMainCmd->OnCreate(this); pwxGISCatalogMainCmd->SetId(ID_PLUGINCMD + nCmdCounter); pwxGISCatalogMainCmd->SetSubType(8); m_CommandArray.push_back(pwxGISCatalogMainCmd); nCmdCounter++; //refresh pwxGISCatalogMainCmd = new wxGISCatalogMainCmd(); pwxGISCatalogMainCmd->OnCreate(this); pwxGISCatalogMainCmd->SetId(ID_PLUGINCMD + nCmdCounter); pwxGISCatalogMainCmd->SetSubType(9); m_CommandArray.push_back(pwxGISCatalogMainCmd); nCmdCounter++; //load accelerators m_pGISAcceleratorTable = new wxGISAcceleratorTable(this); bHeaderSizer->Add( m_toolBar, 0, wxALIGN_CENTER_VERTICAL, 5 ); m_staticText2 = new wxStaticText( this, wxID_ANY, wxT(" "), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); m_staticText2->Wrap( -1 ); bHeaderSizer->Add( m_staticText2, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); bMainSizer->Add( bHeaderSizer, 0, wxEXPAND, 5 ); // // fgCeilSizer = new wxFlexGridSizer( 2, 3, 0, 0 ); fgCeilSizer->AddGrowableCol( 1 ); fgCeilSizer->SetFlexibleDirection( wxBOTH ); fgCeilSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); m_staticText4 = new wxStaticText( this, wxID_ANY, _("Name:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); m_staticText4->Wrap( -1 ); fgCeilSizer->Add( m_staticText4, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_NameTextCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_NO_VSCROLL, wxGenericValidator(&m_sName) ); fgCeilSizer->Add( m_NameTextCtrl, 1, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); m_OkButton = new wxButton( this, wxID_OK , _("Activate"), wxDefaultPosition, wxDefaultSize, 0 ); m_OkButton->SetDefault(); fgCeilSizer->Add( m_OkButton, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_staticText6 = new wxStaticText( this, wxID_ANY, _("Show of type:"), wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); m_staticText6->Wrap( -1 ); fgCeilSizer->Add( m_staticText6, 0, wxALL|wxALIGN_RIGHT, 5 ); m_WildcardCombo = new wxComboBox( this, FILTERCOMBO, _("Combo!"), wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_DROPDOWN|wxCB_READONLY );//|wxCB_SORT fgCeilSizer->Add( m_WildcardCombo, 0, wxALL|wxEXPAND, 5 ); m_CancelButton = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); fgCeilSizer->Add( m_CancelButton, 0, wxALL, 5 ); bMainSizer->Add( fgCeilSizer, 0, wxEXPAND, 5 ); this->SetSizerAndFit(bMainSizer); this->Layout(); }