diff --git a/uppsrc/ide/ide.h b/uppsrc/ide/ide.h index 5c90803b1..3f55c6a26 100644 --- a/uppsrc/ide/ide.h +++ b/uppsrc/ide/ide.h @@ -760,6 +760,7 @@ public: void SwapPackagesFiles(); void Times(); void Statistics(); + void Licenses(); void Exit(); String GetOpposite(); void GoOpposite(); diff --git a/uppsrc/ide/idebar.cpp b/uppsrc/ide/idebar.cpp index 082264cc7..51a0e7e92 100644 --- a/uppsrc/ide/idebar.cpp +++ b/uppsrc/ide/idebar.cpp @@ -101,6 +101,7 @@ void Ide::File(Bar& menu) menu.Add(AK_STATISTICS, THISBACK(Statistics)) .Help("Display various statistics"); + menu.Add("Project licences..", THISBACK(Licenses)); menu.Add("Elapsed times..", THISBACK(Times)); menu.Add(AK_EXIT, THISBACK(Exit)); diff --git a/uppsrc/ide/idetool.cpp b/uppsrc/ide/idetool.cpp index 1d2eeaf1b..8433294f8 100644 --- a/uppsrc/ide/idetool.cpp +++ b/uppsrc/ide/idetool.cpp @@ -182,6 +182,40 @@ void sPut(String& qtf, ArrayMap& pfs, ArrayMap license_package; + 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; + 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)) << "]}}&&"; + } + WithStatLayout dlg; + CtrlLayoutOK(dlg, "Licenses"); + dlg.stat = qtf; + dlg.Sizeable().Zoomable(); + dlg.Run(); +} void Ide::Statistics() {