void Ide::Preprocess(bool asmout) { if(editfile.IsEmpty()) return; int pi = GetPackageIndex(); if(pi < 0) return; SwitchHeader(); String pfn = ConfigFile(GetFileTitle(editfile) + ".i.tmp"); DeleteFile(pfn); const Workspace& wspc = IdeWorkspace(); if(pi >= wspc.GetCount()) return; One<Host> host = CreateHost(true); One<Builder> b = CreateBuilder(~host); Vector<String> linkfile; String linkopt; b->config = PackageConfig(wspc, pi, GetMethodVars(method), mainconfigparam, *host, *b); console.Clear(); PutConsole((asmout ? "Compiling " : "Preprocessing ") + editfile); b->Preprocess(wspc[pi], editfile, pfn, asmout); HideBottom(); if(FileExists(pfn)) { EditFile(pfn); if(!editor.IsReadOnly()) ToggleReadOnly(); } }
void Ide::MainConfig() { package.SetCursor(0); if(package.GetCursor() != 0) return; MainConfigDlg dlg(IdeWorkspace()); for(int i = 0; i < actual.config.GetCount(); i++) { const Package::Config& f = actual.config[i]; dlg.list.Add(f.param, f.name); } if(!dlg.Perform(mainconfigname)) return; actual.config.Clear(); for(int i = 0; i < dlg.list.GetCount(); i++) { Package::Config& f = actual.config.Add(); f.param = dlg.list.Get(i, 0); f.name = dlg.list.Get(i, 1); } SavePackage(); if(dlg.list.IsCursor()) { mainconfigparam = dlg.list.Get(0); mainconfigname = Nvl((String)dlg.list.Get(1), mainconfigparam); MakeTitle(); } SyncMainConfigList(); SetHdependDirs(); MakeTitle(); }
void Ide::Licenses() { Progress pi; const Workspace& wspc = IdeWorkspace(); pi.SetTotal(wspc.GetCount()); VectorMap<String, String> license_package; for(int i = 0; i < wspc.GetCount(); i++) { String n = wspc[i]; pi.SetText(n); if(pi.StepCanceled()) return; String l = LoadFile(SourcePath(n, "Copying")); if(l.GetCount()) MergeWith(license_package.GetAdd(l), ", ", n); } if(license_package.GetCount() == 0) { Exclamation("No license files ('Copying') have been found."); return; } String qtf; for(int i = 0; i < license_package.GetCount(); i++) { bool m = license_package[i].Find(',') >= 0; qtf << (m ? "Packages [* \1" : "Package [* \1") << license_package[i] << (m ? "\1] have" : "\1] has") << " following licence notice:&" << "{{@Y [C1 " << DeQtf(license_package.GetKey(i)) << "]}}&&"; } ShowQTF(qtf, "Licenses"); }
int Ide::GetPackageIndex() { const Workspace& wspc = IdeWorkspace(); for(int i = 0; i < wspc.GetCount(); i++) if(wspc[i] == package.GetCurrentName()) return i; return -1; }
void Ide::PackageClean() { const Workspace& wspc = IdeWorkspace(); int pi = GetPackageIndex(); if(pi >= 0 && pi < wspc.GetCount()) { console.Clear(); CleanPackage(wspc, pi); } }
void Ide::BuildAndDebug(bool runto) { VectorMap<String, String> bm = GetMethodVars(method); String builder = bm.Get("BUILDER", ""); if(!Build()) return; if(!FileExists(target)) return; if(designer) EditAsText(); One<Host> host = CreateHostRunDir(); host->ChDir(Nvl(rundir, GetFileFolder(target))); HideBottom(); editor.Disable(); #ifdef COMPILER_MSC if(builder == "GCC") if(gdbSelector) debugger = Gdb_MI2Create(host, target, runarg); else debugger = GdbCreate(host, target, runarg); else debugger = PdbCreate(host, target, runarg); #else if(gdbSelector) debugger = Gdb_MI2Create(host, target, runarg); else debugger = GdbCreate(host, target, runarg); #endif if(!debugger) return; debuglock = 0; const Workspace& wspc = IdeWorkspace(); for(int i = 0; i < wspc.GetCount(); i++) { const Package& pk = wspc.GetPackage(i); String n = wspc[i]; for(int i = 0; i < pk.file.GetCount(); i++) { String file = SourcePath(n, pk.file[i]); LineInfo& ln = Filedata(file).lineinfo; for(int i = 0; i < ln.GetCount(); i++) { LineInfoRecord& lr = ln[i]; if(!lr.breakpoint.IsEmpty()) if(!debugger->SetBreakpoint(file, lr.lineno, lr.breakpoint)) { lr.breakpoint = "\xe"; if(PathIsEqual(file, editfile)) editor.SetBreakpoint(lr.lineno, "\xe"); } } } } SetBar(); editor.Enable(); if(runto) { if(!debugger->RunTo()) IdeEndDebug(); } else debugger->Run(); }
void Ide::SyncMainConfigList() { mainconfiglist.Clear(); const Workspace& wspc = IdeWorkspace(); if(wspc.GetCount() <= 0) return; const Array<Package::Config>& f = wspc.GetPackage(0).config; for(int i = 0; i < f.GetCount(); i++) mainconfiglist.Add(f[i].param, Nvl(f[i].name, f[i].param)); SetMainConfigList(); }
String Ide::GetFirstFile() { const Workspace& wspc = IdeWorkspace(); for(int i = 0; i < wspc.GetCount(); i++) { const Package& p = wspc.GetPackage(i); for(int j = 0; j < p.GetCount(); j++) if(!p[j].separator) return SourcePath(wspc[i], p[j]); } return Null; }
void Ide::PackageBuild() { InitBlitz(); BeginBuilding(true, true); const Workspace& wspc = IdeWorkspace(); int pi = GetPackageIndex(); if(pi >= 0 && pi <= wspc.GetCount()) { Vector<String> linkfile, immfile; String linkopt; bool ok = BuildPackage(wspc, pi, 0, 1, mainconfigparam, Null, linkfile, immfile, linkopt); EndBuilding(ok); } }
void Ide::AddPackage(const String& p) { const Workspace& wspc = IdeWorkspace(); for(int i = 0; i < wspc.GetCount(); i++){ if(wspc[i] == p) return; } if(!PromptOKCancel("Package [* " + p + "] is not yet in the workspace.&Do you want to add it?")) return; OptItem& m = actual.uses.Add(); m.text = p; SaveLoadPackage(); }
void Ide::CreateMakefile() { const Workspace& wspc = IdeWorkspace(); if(wspc.GetCount() == 0) { PutConsole("Project is empty!"); return; } FileSel mfout; mfout.AllFilesType(); mfout <<= AppendFileName(GetFileDirectory(PackagePath(wspc[0])), "Makefile"); if(!mfout.ExecuteSaveAs("Save makefile as")) return; SaveMakeFile(~mfout, true); }
void Ide::Statistics() { Vector< ArrayMap<String, FileStat> > stat; Progress pi; const Workspace& wspc = IdeWorkspace(); pi.SetTotal(wspc.GetCount()); Date now = GetSysDate(); for(int i = 0; i < wspc.GetCount(); i++) { const Package& pk = wspc.GetPackage(i); String n = wspc[i]; pi.SetText(n); if(pi.StepCanceled()) return; ArrayMap<String, FileStat>& pfs = stat.Add(); for(int i = 0; i < pk.GetCount(); i++) if(!pk[i].separator) { String file = SourcePath(n, pk[i]); if(FileExists(file)) { FileStat& fs = pfs.GetAdd(GetFileExt(file)); int d = minmax(now - FileGetTime(file), 0, 9999); fs.oldest = max(d, fs.oldest); fs.newest = min(d, fs.newest); String data = LoadFile(file); for(const char *s = data; *s; s++) if(*s == '\n') fs.lines++; fs.len += data.GetCount(); fs.days += d; fs.count++; } } } String qtf = "[1 "; ArrayMap<String, FileStat> all; String tab = "{{45:20:25:20:35:30:30:30:30@L [* "; String hdr = "]:: [= Files:: Lines:: - avg.:: Length:: - avg.:: Oldest:: Newest:: Avg. age]"; for(int i = 0; i < wspc.GetCount(); i++) { qtf << tab << DeQtf(wspc[i]) << hdr; sPut(qtf, stat[i], all); } qtf << tab << "All packages" << hdr; sPut(qtf, all, all); WithStatLayout<TopWindow> dlg; CtrlLayoutOK(dlg, "Statistics"); dlg.stat = qtf; dlg.Sizeable().Zoomable(); dlg.Run(); }
void Ide::AdjustMainConfig() { const Workspace& wspc = IdeWorkspace(); if(!wspc.GetCount()) return; const Array<Package::Config>& f = wspc.GetPackage(0).config; for(int i = 0; i < f.GetCount(); i++) if(f[i].param == mainconfigparam) return; if(f.GetCount()) { mainconfigparam = f[0].param; mainconfigname = f[0].name; SetMainConfigList(); } }
void Ide::FileCompile() { if(editfile.IsEmpty()) return; ClearErrorEditor(editfile); SwitchHeader(); BeginBuilding(true, true); const Workspace& wspc = IdeWorkspace(); bool ok = true; onefile = editfile; if(wspc.GetCount()) { Vector<String> linkfile, immfile; String linkopt; for(int i = 0; i < wspc.GetCount(); i++) BuildPackage(wspc, i, 1, wspc.GetCount(), mainconfigparam, Null, linkfile, immfile, linkopt, false); } onefile.Clear(); EndBuilding(ok); SetErrorEditor(); }
void Ide::DebugClearBreakpoints() { const Workspace& wspc = IdeWorkspace(); for(int i = 0; i < wspc.GetCount(); i++) { const Package& pk = wspc.GetPackage(i); String n = wspc[i]; for(int i = 0; i < pk.file.GetCount(); i++) { String file = SourcePath(n, pk.file[i]); LineInfo& ln = Filedata(file).lineinfo; if(debugger) for(int i = 0; i < ln.GetCount(); i++) { const LineInfoRecord& lr = ln[i]; if(!lr.breakpoint.IsEmpty()) debugger->SetBreakpoint(file, lr.lineno, ""); } ClearBreakpoints(ln); } } editor.ClearBreakpoints(); }
void Ide::ConditionalBreak() { if(editfile.IsEmpty() || designer) return; int ln = editor.GetCursorLine(); String brk = editor.GetBreakpoint(ln); if(brk == "\xe") brk = "1"; Index<String> cfg = PackageConfig(IdeWorkspace(), 0, GetMethodVars(method), mainconfigparam, *CreateHost(true), *CreateBuilder(~CreateHostRunDir())); #ifdef COMPILER_MSC if(cfg.Find("MSC") >= 0) { if(EditPDBExpression("Conditional breakpoint", brk, NULL)) editor.SetBreakpoint(ln, brk); } else #endif if(EditText(brk, "Conditional breakpoint", "Condition")) editor.SetBreakpoint(ln, brk); editor.RefreshFrame(); }