void SFTPTreeView::OnMenuDelete(wxCommandEvent& event) { wxTreeListItems items; m_treeListCtrl->GetSelections(items); if(items.empty()) return; wxString message; message << _("Are you sure you want to delete the selected items?"); if(::wxMessageBox(message, "Confirm", wxYES_NO | wxCANCEL | wxICON_QUESTION) != wxYES) { return; } try { for(size_t i = 0; i < items.size(); ++i) { MyClientData* cd = GetItemData(items.at(i)); if(cd->IsFolder()) { m_sftp->RemoveDir(cd->GetFullPath()); } else { m_sftp->UnlinkFile(cd->GetFullPath()); } // Remove the selection m_treeListCtrl->DeleteItem(items.at(i)); } } catch(clException& e) { ::wxMessageBox(e.What(), "SFTP", wxICON_ERROR | wxOK | wxCENTER); } }
void SFTPTreeView::OnMenuRename(wxCommandEvent& event) { wxTreeListItems items; m_treeListCtrl->GetSelections(items); if(items.empty()) return; try { for(size_t i = 0; i < items.size(); ++i) { MyClientData* cd = GetItemData(items.at(i)); if(!cd) continue; // ?? wxString new_name = ::wxGetTextFromUser(_("Enter new name:"), _("Rename"), cd->GetFullName()); if(!new_name.IsEmpty()) { wxString old_path = cd->GetFullPath(); cd->SetFullName(new_name); m_sftp->Rename(old_path, cd->GetFullPath()); // Remove the selection m_treeListCtrl->SetItemText(items.at(i), 0, new_name); } } } catch(clException& e) { ::wxMessageBox(e.What(), "SFTP", wxICON_ERROR | wxOK | wxCENTER); } }
bool SFTPTreeView::DoExpandItem(const wxTreeItemId& item) { MyClientData* cd = GetItemData(item); CHECK_PTR_RET_FALSE(cd); // already initialized this folder before? if(cd->IsInitialized()) { return true; } // get list of files and populate the tree SFTPAttribute::List_t attributes; try { attributes = m_sftp->List(cd->GetFullPath(), clSFTP::SFTP_BROWSE_FILES | clSFTP::SFTP_BROWSE_FOLDERS); } catch(clException& e) { ::wxMessageBox(e.What(), "SFTP", wxOK | wxICON_ERROR | wxCENTER, EventNotifier::Get()->TopFrame()); return false; } // Remove the dummy item and replace it with real items wxTreeItemIdValue cookie; wxTreeItemId dummyItem = m_treeCtrl->GetFirstChild(item, cookie); m_treeCtrl->Delete(dummyItem); cd->SetInitialized(true); int nNumOfRealChildren = 0; SFTPAttribute::List_t::iterator iter = attributes.begin(); for(; iter != attributes.end(); ++iter) { SFTPAttribute::Ptr_t attr = (*iter); if(attr->GetName() == "." || attr->GetName() == "..") continue; ++nNumOfRealChildren; // determine the icon index int imgIdx = wxNOT_FOUND; if(attr->IsFolder()) { imgIdx = m_bmpLoader->GetMimeImageId(FileExtManager::TypeFolder); } else { imgIdx = m_bmpLoader->GetMimeImageId(attr->GetName()); } if(imgIdx == wxNOT_FOUND) { imgIdx = m_bmpLoader->GetMimeImageId(FileExtManager::TypeText); } wxString path; path << cd->GetFullPath() << "/" << attr->GetName(); while(path.Replace("//", "/")) {} MyClientData* childClientData = new MyClientData(path); childClientData->SetIsFolder(attr->IsFolder()); wxTreeItemId child = m_treeCtrl->AppendItem(item, attr->GetName(), imgIdx, imgIdx, childClientData); // if its type folder, add a fake child item if(attr->IsFolder()) { m_treeCtrl->AppendItem(child, "<dummy>"); } } return nNumOfRealChildren > 0; }
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 SFTPTreeView::OnSelectionChanged(wxTreeEvent& event) { MyClientDataVect_t items = GetSelectionsItemData(); if(items.size() != 1) return; MyClientData* cd = items.at(0); if(cd->IsFolder()) { m_textCtrlQuickJump->ChangeValue(cd->GetFullPath()); } }
void SFTPTreeView::OnAddBookmark(wxAuiToolBarEvent& event) { if ( event.IsDropDownClicked() ) { // Show the menu const wxArrayString &bookmarks = m_account.GetBookmarks(); wxMenu menu; for(size_t i=0; i<bookmarks.GetCount(); ++i) { menu.Append(ID_SFTP_BOOKMARK_FIRST+i, bookmarks.Item(i)); } menu.AppendSeparator(); menu.Append(ID_SFTP_BOOKMARK_SETTINGS, _("Manage bookmarks...")); wxPoint pt = event.GetItemRect().GetBottomLeft(); pt.y++; int sel = m_auibar->GetPopupMenuSelectionFromUser( menu, pt ); if ( sel >= ID_SFTP_BOOKMARK_FIRST && sel <= ID_SFTP_BOOKMARK_LAST ) { // A bookmark was selected CallAfter( &SFTPTreeView::DoBuildTree, bookmarks.Item(sel - ID_SFTP_BOOKMARK_FIRST) ); } else if ( sel == ID_SFTP_BOOKMARK_SETTINGS ) { // Bookmark settings CallAfter( &SFTPTreeView::ManageBookmarks ); } } else { try { // sanity if ( !m_sftp || !m_sftp->IsConnected() ) { return; } // Get the current selection MyClientDataVect_t selections = GetSelectionsItemData(); if ( selections.size() != 1 ) return; MyClientData* cd = selections.at(0); CHECK_PTR_RET( cd ); if ( !cd->IsFolder() ) return; m_account.AddBookmark( cd->GetFullPath() ); SFTPSettings settings; settings.Load(); settings.UpdateAccount( m_account ); settings.Save(); } catch (clException &e) { ::wxMessageBox(e.What(), "SFTP", wxICON_ERROR|wxOK|wxCENTER); } } }
bool SFTPTreeView::DoOpenFile(const wxTreeItemId& item) { MyClientData* cd = GetItemData(item); if(!cd || cd->IsFolder()) { return false; } RemoteFileInfo remoteFile; remoteFile.SetAccount(m_account); remoteFile.SetRemoteFile(cd->GetFullPath()); SFTPThreadRequet* req = new SFTPThreadRequet(remoteFile); SFTPWorkerThread::Instance()->Add(req); m_plugin->AddRemoteFile(remoteFile); return true; }
void SFTPTreeView::OnItemActivated(wxTreeEvent& event) { event.Skip(); MyClientData* cd = GetItemData(event.GetItem()); CHECK_PTR_RET(cd); if(cd->IsFolder()) { wxTreeItemId item = event.GetItem(); if(m_treeCtrl->IsExpanded(item)) { m_treeCtrl->CallAfter(&wxTreeCtrl::Collapse, item); } else { m_treeCtrl->CallAfter(&wxTreeCtrl::Expand, item); } } else { DoOpenFile(cd->GetFullPath()); } }
void SFTPTreeView::OnMenuOpenContainingFolder(wxCommandEvent& event) { wxArrayTreeItemIds items; m_treeCtrl->GetSelections(items); if(items.empty()) return; for(size_t i = 0; i < items.size(); ++i) { MyClientData* cd = GetItemData(items.Item(i)); if(!cd || cd->IsFolder()) { continue; } RemoteFileInfo remoteFile; remoteFile.SetAccount(m_account); remoteFile.SetRemoteFile(cd->GetFullPath()); SFTPThreadRequet* req = new SFTPThreadRequet(remoteFile); req->SetAction(eSFTPActions::kDownloadAndOpenContainingFolder); SFTPWorkerThread::Instance()->Add(req); } }
void SFTPTreeView::OnMenuNew(wxCommandEvent& event) { wxArrayTreeItemIds items; m_treeCtrl->GetSelections(items); if(items.size() != 1) return; MyClientData* cd = GetItemData(items.Item(0)); CHECK_PTR_RET(cd); if(!cd->IsFolder()) { return; } wxString new_name = ::wxGetTextFromUser(_("Enter the new directory name:"), _("New Directory")); if(!new_name.IsEmpty()) { wxString fullpath = cd->GetFullPath(); fullpath << "/" << new_name; DoAddFolder(items.Item(0), fullpath); } }
void SFTPTreeView::OnItemActivated(wxTreeListEvent& event) { event.Skip(); MyClientData* cd = GetItemData(event.GetItem()); CHECK_PTR_RET(cd); if(cd->IsFolder()) { m_treeListCtrl->Expand(event.GetItem()); } else { RemoteFileInfo remoteFile; remoteFile.SetAccount(m_account); remoteFile.SetRemoteFile(cd->GetFullPath()); SFTPThreadRequet* req = new SFTPThreadRequet(remoteFile); SFTPWorkerThread::Instance()->Add(req); m_plugin->AddRemoteFile(remoteFile); } }
void SFTPTreeView::OnMenuOpenWithDefaultApplication(wxCommandEvent& event) { wxTreeListItems items; m_treeListCtrl->GetSelections(items); if(items.empty()) return; for(size_t i = 0; i < items.size(); ++i) { MyClientData* cd = GetItemData(items.at(i)); if(!cd || cd->IsFolder()) { continue; } RemoteFileInfo remoteFile; remoteFile.SetAccount(m_account); remoteFile.SetRemoteFile(cd->GetFullPath()); SFTPThreadRequet* req = new SFTPThreadRequet(remoteFile); req->SetDirection(SFTPThreadRequet::kDownloadAndOpenWithDefaultApp); SFTPWorkerThread::Instance()->Add(req); } }