void DisassemblyDlg::OnSave(cb_unused wxCommandEvent& event) { wxFileDialog dlg(this, _("Save as text file"), _T("assembly_dump.txt"), wxEmptyString, FileFilters::GetFilterAll(), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); PlaceWindow(&dlg); if (dlg.ShowModal() != wxID_OK) return; wxString output; cbProject* prj = Manager::Get()->GetProjectManager()->GetActiveProject(); if (prj) { output << _("Project title : ") << prj->GetTitle() << _T('\n'); output << _("Project path : ") << prj->GetBasePath() << _T('\n') << _T('\n'); } output << _("Frame function: ") << m_FrameFunction << _T('\n'); output << _("Frame address : ") << m_FrameAddress << _T('\n'); output << wxString(_T('-'), 80) << _T('\n'); output << m_pCode->GetText(); if (!cbSaveToFile(dlg.GetPath(), output)) cbMessageBox(_("Could not save file..."), _("Error"), wxICON_ERROR); }
bool cbDiffEditor::SaveAsUnifiedDiff() { ConfigManager* mgr = Manager::Get()->GetConfigManager(_T("app")); wxString Path = wxGetCwd(); wxString Filter; if(mgr && Path.IsEmpty()) Path = mgr->Read(_T("/file_dialogs/save_file_as/directory"), Path); wxFileDialog dlg(Manager::Get()->GetAppWindow(), _("Save file"), Path, wxEmptyString, _("Diff files (*.diff)|*.diff"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); PlaceWindow(&dlg); if (dlg.ShowModal() != wxID_OK) // cancelled out return false; wxString Filename = dlg.GetPath(); // store the last used directory if(mgr) { wxString Test = dlg.GetDirectory(); mgr->Write(_T("/file_dialogs/save_file_as/directory"), dlg.GetDirectory()); } if(!cbSaveToFile(Filename, diff_)) { wxString msg; msg.Printf(_("File %s could not be saved..."), GetFilename().c_str()); cbMessageBox(msg, _("Error saving file"), wxICON_ERROR); return false; } return true; }
inline void CrashHandlerSaveEditorFiles(wxString& buf) { wxString path; //get the "My Files" folder HRESULT result = SHGetFolderPath(NULL, CSIDL_PERSONAL, NULL, 0, wxStringBuffer(path, MAX_PATH)); if (FAILED(result)) { //get at least the profiles folder path = ConfigManager::GetHomeFolder(); } path << _T("\\cb-crash-recover"); if (!wxDirExists(path)) wxMkdir(path); //make a sub-directory of the current date & time wxDateTime now = wxDateTime::Now(); path << now.Format(_T("\\%Y%m%d-%H%M%S")); EditorManager* em = Manager::Get()->GetEditorManager(); if (em) { bool AnyFileSaved = false; if (wxMkdir(path) && wxDirExists(path)) { for (int i = 0; i < em->GetEditorsCount(); ++i) { cbEditor* ed = em->GetBuiltinEditor(em->GetEditor(i)); if (ed) { wxFileName fn(ed->GetFilename()); wxString fnpath = path + _T("/") + fn.GetFullName(); wxString newfnpath = fnpath; // add number if filename already exists e.g. main.cpp.001, main.cpp.002, ... int j = 1; while (wxFileExists(newfnpath)) newfnpath = fnpath + wxString::Format(wxT(".%03d"),j); if (cbSaveToFile(newfnpath, ed->GetControl()->GetText(), ed->GetEncoding(), ed->GetUseBom() ) ) { AnyFileSaved = true; } } } if (AnyFileSaved) { buf << _("The currently opened files have been saved to the directory\n"); buf << path; buf << _("\nHopefully, this will prevent you from losing recent modifications.\n\n"); } else wxRmdir(path); } } }
void wxsCoder::PutFullCode(const wxString& FileName,const wxString& Code,wxFontEncoding Encoding,bool UseBOM) { wxMutexLocker Lock(DataMutex); wxString FixedFileName = NormalizeFileName(FileName); int Index = CodeChangesFiles.Index(FixedFileName); if ( Index != wxNOT_FOUND ) { for ( CodeChange* Change=CodeChanges[Index]; Change; ) { CodeChange* Next = Change->Next; delete Change; Change = Next; } CodeChanges[Index] = 0; } // Searching for file in opened file list EditorManager* EM = Manager::Get()->GetEditorManager(); assert ( EM != 0 ); cbEditor* Editor = EM->GetBuiltinEditor(FixedFileName); if ( Editor ) { Editor->GetControl()->SetText(Code); } else { if ( !cbSaveToFile(FixedFileName,Code,Encoding,UseBOM) ) { #if wxCHECK_VERSION(2, 9, 0) Manager::Get()->GetLogManager()->Log(F(_("wxSmith: Couldn't write file '%s'"),FixedFileName.wx_str())); #else Manager::Get()->GetLogManager()->Log(F(_("wxSmith: Couldn't write file '%s'"),FixedFileName.c_str())); #endif } } }
void Autosave::OnTimer(wxTimerEvent& e) { if(e.GetId() == 10000) { int method = Manager::Get()->GetConfigManager(_T("autosave"))->ReadInt(_T("method")); bool allProjects = Manager::Get()->GetConfigManager(_T("autosave"))->ReadBool(_T("all_projects"), true); bool doWorkspace = Manager::Get()->GetConfigManager(_T("autosave"))->ReadBool(_T("do_workspace"), true); ProjectManager *pm = Manager::Get()->GetProjectManager(); if(pm)// && pm->GetActiveProject()) { if (allProjects) { ProjectsArray *projects = pm->GetProjects(); for (size_t ii = 0; ii < projects->GetCount(); ++ii) SaveProject((*projects)[ii], method); } else if(cbProject *p = pm->GetActiveProject()) SaveProject(p, method); cbWorkspace *workspace = pm->GetWorkspace(); if (doWorkspace && workspace && workspace->GetModified()) { switch(method) { case 0: if(::wxRenameFile(workspace->GetFilename(), workspace->GetFilename() + _T(".bak"))) workspace->Save(); break; case 1: workspace->Save(); break; case 2: case 3: { WorkspaceLoader loader; loader.Save(workspace->GetTitle(), workspace->GetFilename() + wxT(".save")); workspace->SetModified(true); break; } default: break; } } } } else if(e.GetId() == 20000) { int method = Manager::Get()->GetConfigManager(_T("autosave"))->ReadInt(_T("method")); EditorManager* em = Manager::Get()->GetEditorManager(); if(em) { for(int i = 0; i < em->GetEditorsCount(); ++i) { cbEditor* ed = em->GetBuiltinEditor(em->GetEditor(i)); if(ed && ed->GetModified()) { wxFileName fn(ed->GetFilename()); switch(method) { case 0: { if(::wxRenameFile(fn.GetFullPath(), fn.GetFullPath() + _T(".bak"))) cbSaveToFile(fn.GetFullPath(), ed->GetControl()->GetText(), ed->GetEncoding(), ed->GetUseBom()); break; } case 1: { ed->Save(); break; } case 2: { cbSaveToFile(fn.GetFullPath() + _T(".save"), ed->GetControl()->GetText(), ed->GetEncoding(), ed->GetUseBom()); ed->SetModified(); // the "real" file has not been saved! break; } case 3: { wxString tmp1; wxString tmp2; for(unsigned int revisions = 8; revisions; --revisions) { tmp1.Printf(_T("%s/%s.%u.%s"), fn.GetPath().c_str(), fn.GetName().c_str(), revisions, fn.GetExt().c_str()); tmp2.Printf(_T("%s/%s.%u.%s"), fn.GetPath().c_str(), fn.GetName().c_str(), revisions+1, fn.GetExt().c_str()); if(::wxFileExists(tmp2)) ::wxRemoveFile(tmp2); if(::wxFileExists(tmp1)) ::wxRenameFile(tmp1, tmp2); } tmp1.Printf(_T("%s/%s.1.%s"), fn.GetPath().c_str(), fn.GetName().c_str(), fn.GetExt().c_str()); cbSaveToFile(tmp1, ed->GetControl()->GetText(), ed->GetEncoding(), ed->GetUseBom()); ed->SetModified(); // the "real" file has not been saved! break; } default: break; } } } } } }
void Autosave::OnTimer(wxTimerEvent& e) { if(e.GetId() == 10000) { PluginManager *plm = Manager::Get()->GetPluginManager(); int method = Manager::Get()->GetConfigManager(_T("autosave"))->ReadInt(_T("method")); ProjectManager *pm = Manager::Get()->GetProjectManager(); if(pm && pm->GetActiveProject()) { if(cbProject * p = pm->GetActiveProject()) { switch(method) { case 0: { if(p->GetModified()) { if(::wxRenameFile(p->GetFilename(), p->GetFilename() + _T(".bak"))) if(p->Save()) { CodeBlocksEvent e(cbEVT_PROJECT_SAVE, 0, p); plm->NotifyPlugins(e); } } wxFileName file = p->GetFilename(); file.SetExt(_T("layout")); wxString filename = file.GetFullPath(); if(::wxRenameFile(filename, filename + _T(".bak"))) p->SaveLayout(); break; } case 1: { if(p->GetModified() && p->Save()) { CodeBlocksEvent e(cbEVT_PROJECT_SAVE, 0, p); plm->NotifyPlugins(e); } p->SaveLayout(); break; } case 2: case 3: // doesn't really make sense to keep so many versions of a project file { if (p->IsLoaded() == false) return; if(p->GetModified()) { ProjectLoader loader(p); if(loader.Save(p->GetFilename() + _T(".save"))) { CodeBlocksEvent e(cbEVT_PROJECT_SAVE, 0, p); plm->NotifyPlugins(e); } p->SetModified(); // the actual project file is still not updated! } wxFileName file = wxFileName(p->GetFilename()); file.SetExt(_T("layout")); wxString filename = file.GetFullPath(); wxString temp = filename + _T(".temp"); wxString save = filename + _T(".save"); if(::wxFileExists(filename) && ::wxCopyFile(filename, temp)) { p->SaveLayout(); ::wxRenameFile(filename, save); ::wxRenameFile(temp, filename); } break; } } } } } else if(e.GetId() == 20000) { int method = Manager::Get()->GetConfigManager(_T("autosave"))->ReadInt(_T("method")); EditorManager* em = Manager::Get()->GetEditorManager(); if(em) { for(int i = 0; i < em->GetEditorsCount(); ++i) { cbEditor* ed = em->GetBuiltinEditor(em->GetEditor(i)); if(ed && ed->GetModified()) { wxFileName fn(ed->GetFilename()); switch(method) { case 0: { if(::wxRenameFile(fn.GetFullPath(), fn.GetFullPath() + _T(".bak"))) cbSaveToFile(fn.GetFullPath(), ed->GetControl()->GetText(), ed->GetEncoding(), ed->GetUseBom()); break; } case 1: { ed->Save(); break; } case 2: { cbSaveToFile(fn.GetFullPath() + _T(".save"), ed->GetControl()->GetText(), ed->GetEncoding(), ed->GetUseBom()); ed->SetModified(); // the "real" file has not been saved! break; } case 3: { wxString tmp1; wxString tmp2; for(unsigned int i = 8; i; --i) { tmp1.Printf(_T("%s/%s.%u.%s"), fn.GetPath().c_str(), fn.GetName().c_str(), i, fn.GetExt().c_str()); tmp2.Printf(_T("%s/%s.%u.%s"), fn.GetPath().c_str(), fn.GetName().c_str(), i+1, fn.GetExt().c_str()); if(::wxFileExists(tmp2)) ::wxRemoveFile(tmp2); if(::wxFileExists(tmp1)) ::wxRenameFile(tmp1, tmp2); } tmp1.Printf(_T("%s/%s.1.%s"), fn.GetPath().c_str(), fn.GetName().c_str(), fn.GetExt().c_str()); cbSaveToFile(tmp1, ed->GetControl()->GetText(), ed->GetEncoding(), ed->GetUseBom()); ed->SetModified(); // the "real" file has not been saved! break; } } } } } } }
void wxsCoder::FlushFile(const wxString& FileName) { int Index = CodeChangesFiles.Index(FileName); if ( Index == wxNOT_FOUND ) return; CodeChange* Changes = CodeChanges[Index]; if ( !Changes ) return; // Searching for file in opened file list EditorManager* EM = Manager::Get()->GetEditorManager(); assert ( EM != 0 ); cbEditor* Editor = EM->GetBuiltinEditor(FileName); if ( Editor ) { wxString EOL; while ( Changes ) { CodeChange* Next = Changes->Next; ApplyChangesEditor(Editor,Changes->Header,Changes->End,Changes->Code,Changes->CodeHasHeader,Changes->CodeHasEnd,EOL); delete Changes; Changes = Next; } } else { // Reading file content wxString EOL; bool HasChanged = false; //wxStopWatch SW; EncodingDetector Detector(FileName); if ( !Detector.IsOK() ) { #if wxCHECK_VERSION(2, 9, 0) Manager::Get()->GetLogManager()->Log(F(_("wxSmith: Couldn't open and properly read file '%s'"),FileName.wx_str())); #else Manager::Get()->GetLogManager()->Log(F(_("wxSmith: Couldn't open and properly read file '%s'"),FileName.c_str())); #endif return; } //Manager::Get()->GetLogManager()->DebugLog(F(_T("File read time: %d ms"),SW.Time())); wxString Content = Detector.GetWxStr(); while ( Changes ) { CodeChange* Next = Changes->Next; ApplyChangesString(Content,Changes->Header,Changes->End,Changes->Code,Changes->CodeHasHeader,Changes->CodeHasEnd,HasChanged,EOL); delete Changes; Changes = Next; } if ( HasChanged ) { // Storing the result //wxStopWatch SW; if ( !cbSaveToFile(FileName,Content,Detector.GetFontEncoding(),Detector.GetBOMSizeInBytes()>0) ) { #if wxCHECK_VERSION(2, 9, 0) Manager::Get()->GetLogManager()->Log(F(_("wxSmith: Couldn't write data to file '%s'"),FileName.wx_str())); #else Manager::Get()->GetLogManager()->Log(F(_("wxSmith: Couldn't write data to file '%s'"),FileName.c_str())); #endif } else { CodeBlocksEvent event(cbEVT_PROJECT_FILE_CHANGED); event.SetString(FileName); Manager::Get()->GetPluginManager()->NotifyPlugins(event); } //Manager::Get()->GetLogManager()->DebugLog(F(_T("File write time: %d ms"),SW.Time())); } } CodeChanges[Index] = 0; }