void SFTPTreeView::OnMenuNewFile(wxCommandEvent& event) { wxTreeListItems items; m_treeListCtrl->GetSelections(items); if(items.size() != 1) return; MyClientData* cd = GetItemData(items.at(0)); CHECK_PTR_RET(cd); if(!cd->IsFolder()) { return; } wxString defaultValue; static size_t s_untitledCounter = 0; defaultValue << "Untitled" << ++s_untitledCounter; wxString new_name = ::wxGetTextFromUser(_("Enter the new file name:"), _("New File"), defaultValue); if(!new_name.IsEmpty()) { wxString fullpath = cd->GetFullPath(); fullpath << "/" << new_name; wxTreeListItem fileItem = DoAddFile(items.at(0), fullpath); if(fileItem.IsOk()) { DoOpenFile(fileItem); } } }
void SFTPTreeView::OnFileDropped(clCommandEvent& event) { wxArrayTreeItemIds items; m_treeCtrl->GetSelections(items); wxTreeItemId parenItem; wxString defaultPath = m_textCtrlQuickJump->GetValue(); if(items.size() == 1) { // Use the selected folder as the default path MyClientData* cd = GetItemData(items.Item(0)); if(cd && cd->IsFolder()) { defaultPath = cd->GetFullPath(); parenItem = items.Item(0); } } SFTPUploadDialog dlg(EventNotifier::Get()->TopFrame()); dlg.GetTextCtrlRemoteFolder()->ChangeValue(defaultPath); if(dlg.ShowModal() != wxID_OK) return; const wxString targetFolder = dlg.GetTextCtrlRemoteFolder()->GetValue(); const wxArrayString& files = event.GetStrings(); for(size_t i = 0; i < files.size(); ++i) { wxFileName localFile(files.Item(i)); wxString remotePath; remotePath << targetFolder << "/" << localFile.GetFullName(); if(parenItem.IsOk()) { wxTreeItemId fileItem = DoAddFile(parenItem, remotePath); if(!fileItem.IsOk()) continue; } SFTPWorkerThread::Instance()->Add(new SFTPThreadRequet(m_account, remotePath, localFile.GetFullPath(), 0)); } }
void clTreeCtrlPanel::DoExpandItem(const wxTreeItemId& parent, bool expand) { clTreeCtrlData* cd = GetItemData(parent); CHECK_PTR_RET(cd); // we only know how to expand folders... if(!cd->IsFolder()) return; wxString folderPath = cd->GetPath(); if(!m_treeCtrl->ItemHasChildren(parent)) return; // Test the first item for dummy wxTreeItemIdValue cookie; wxTreeItemId child = m_treeCtrl->GetFirstChild(parent, cookie); CHECK_ITEM_RET(child); cd = GetItemData(child); CHECK_PTR_RET(cd); // If not dummy - already expanded do nothing here if(!cd->IsDummy()) return; m_treeCtrl->Delete(child); cd = NULL; // Get the top level folders wxDir dir(folderPath); if(!dir.IsOpened()) return; wxBusyCursor bc; wxString filename; bool cont = dir.GetFirst(&filename, wxEmptyString); while(cont) { wxFileName fullpath(folderPath, filename); if(wxFileName::DirExists(fullpath.GetFullPath())) { // a folder if(!(m_options & kShowHiddenFolders) && FileUtils::IsHidden(fullpath)) { cont = dir.GetNext(&filename); continue; } DoAddFolder(parent, fullpath.GetFullPath()); } else { if(!(m_options & kShowHiddenFiles) && FileUtils::IsHidden(fullpath)) { cont = dir.GetNext(&filename); continue; } DoAddFile(parent, fullpath.GetFullPath()); } cont = dir.GetNext(&filename); } // Sort the parent if(GetTreeCtrl()->ItemHasChildren(parent)) { GetTreeCtrl()->SortChildren(parent); if(expand) { GetTreeCtrl()->Expand(parent); } SelectItem(parent); } }
void clTreeCtrlPanel::OnNewFile(wxCommandEvent& event) { wxTreeItemId item = GetTreeCtrl()->GetFocusedItem(); clTreeCtrlData* cd = GetItemData(item); CHECK_PTR_RET(cd); CHECK_COND_RET(cd->IsFolder()); wxString filename = ::clGetTextFromUser(_("New File"), _("Set the file name:"), "Untitled.txt", wxStrlen("Untitled")); if(filename.IsEmpty()) return; // user cancelled wxFileName file(cd->GetPath(), filename); // Write the file content if(!FileUtils::WriteFileContent(file, "")) return; wxTreeItemId newFile = DoAddFile(item, file.GetFullPath()); GetTreeCtrl()->SortChildren(item); CallAfter(&clTreeCtrlPanel::SelectItem, newFile); }