From 1eb4c3f2004fc11ef5bc7534ed5b7d191db6580d Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Tue, 30 Sep 2025 13:39:47 +0200 Subject: [PATCH] ide: Dir Diff extension selection --- uppsrc/TextDiffCtrl/DirDiff.cpp | 26 ++++++++++++++++++++------ uppsrc/TextDiffCtrl/PatchDiff.cpp | 1 + uppsrc/TextDiffCtrl/TextDiffCtrl.h | 1 + uppsrc/ide/DirRepoDiff.cpp | 3 +++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/uppsrc/TextDiffCtrl/DirDiff.cpp b/uppsrc/TextDiffCtrl/DirDiff.cpp index d7164e388..612e497d1 100644 --- a/uppsrc/TextDiffCtrl/DirDiff.cpp +++ b/uppsrc/TextDiffCtrl/DirDiff.cpp @@ -32,10 +32,11 @@ DirDiffDlg::DirDiffDlg() files_pane.Add(hidden.TopPos(2 * cy + 2 * div, bcy).LeftPos(0, bcx)); files_pane.Add(split_lines.TopPos(2 * cy + 2 * div, bcy).LeftPosZ(52, 100)); - files_pane.Add( added.TopPos(3 * cy + 3 * div, bcy).LeftPosZ(2, 60)); + files_pane.Add(added.TopPos(3 * cy + 3 * div, bcy).LeftPosZ(2, 60)); files_pane.Add(modified.TopPos(3 * cy + 3 * div, bcy).LeftPosZ(52, 70)); - files_pane.Add( removed.TopPos(3 * cy + 3 * div, bcy).LeftPosZ(128, 80)); - files_pane.Add( recent.TopPos(3 * cy + 3 * div, bcy).RightPos(0, bcx)); + files_pane.Add(removed.TopPos(3 * cy + 3 * div, bcy).LeftPosZ(128, 80)); + files_pane.Add(recent.TopPos(3 * cy + 3 * div, bcy).RightPos(0, bcx)); + files_pane.Add(extension.TopPos(3 * cy + 3 * div, bcy).RightPos(bcx + DPI(8), bcx)); removed = 1; added = 1; @@ -70,6 +71,7 @@ DirDiffDlg::DirDiffDlg() removed << [=] { ShowResult(); }; added << [=] { ShowResult(); }; find << [=] { ShowResult(); }; + extension << [=] { ShowResult(); }; clearFind << [=] { find.Clear(); ShowResult();}; files.WhenSel = THISBACK(File); @@ -211,6 +213,7 @@ void DirDiffDlg::Compare() Date dlim = IsNull(recent) ? Null : GetSysDate() - (int)~recent; list.Clear(); + Index exts; for(int i = 0; i < f.GetCount(); i++) { if(pi.StepCanceled()) break; @@ -221,10 +224,18 @@ void DirDiffDlg::Compare() return path.Find("/.git/") >= 0 || path.Find("\\.git/") >= 0 || path.Find("\\.git\\") >= 0 || path.Find("/.git\\") >= 0; }; if((IsNull(dlim) || FileGetTime(p1) >= dlim || FileGetTime(p2) >= dlim) && !FileEqual(p1, p2, n) && - !IsGit(p1) && !IsGit(p2)) + !IsGit(p1) && !IsGit(p2)) { + exts.FindAdd(GetFileExt(p1)); list.Add(MakeTuple(f[i], p1, p2, n)); + } } + extension.Clear(); + extension.Add(Null, "*.*"); + for(int ii : GetSortOrder(exts)) + extension.Add(exts[ii], "*" + exts[ii]); + extension.Enable(); + ShowResult(); } @@ -256,13 +267,16 @@ FileList::File DirDiffDlg::MakeFile(int i) void DirDiffDlg::ShowResult() { files.Clear(); - String sFind = ToLower((String)~find); + String sFind = ToLower(~~find); + String ext = ToLower(~~extension); for(int i = 0; i < list.GetCount(); i++) { int n = list[i].d; + String fn = ToLower(list[i].a); if((n == NORMAL_FILE && modified || n == DELETED_FILE && removed || n == NEW_FILE && added || n == FAILED_FILE || n == PATCHED_FILE) - && ToLower(list[i].a).Find(sFind) >= 0) + && fn.Find(sFind) >= 0 + && fn.EndsWith(ext)) files.Add(MakeFile(i)); } Title(AsString(files.GetCount()) + " files"); diff --git a/uppsrc/TextDiffCtrl/PatchDiff.cpp b/uppsrc/TextDiffCtrl/PatchDiff.cpp index 07db4e7b8..2f29a2ca1 100644 --- a/uppsrc/TextDiffCtrl/PatchDiff.cpp +++ b/uppsrc/TextDiffCtrl/PatchDiff.cpp @@ -13,6 +13,7 @@ PatchDiff::PatchDiff() revertright.Remove(); recent.Hide(); + extension.Hide(); left.Height(EditField::GetStdHeight()); left.Add(lfile.HSizePosZ(0, 148)); diff --git a/uppsrc/TextDiffCtrl/TextDiffCtrl.h b/uppsrc/TextDiffCtrl/TextDiffCtrl.h index 95f407c45..d3cdd18e1 100644 --- a/uppsrc/TextDiffCtrl/TextDiffCtrl.h +++ b/uppsrc/TextDiffCtrl/TextDiffCtrl.h @@ -282,6 +282,7 @@ protected: ParentCtrl files_pane; FileList files; DropList recent; + DropList extension; SelectDirButton seldir1; WithDropChoice dir1; diff --git a/uppsrc/ide/DirRepoDiff.cpp b/uppsrc/ide/DirRepoDiff.cpp index 40eb2188d..aea3ab429 100644 --- a/uppsrc/ide/DirRepoDiff.cpp +++ b/uppsrc/ide/DirRepoDiff.cpp @@ -58,10 +58,13 @@ DirRepoDiffDlg::DirRepoDiffDlg() files_pane.Add(modified.TopPos(y, bcy).LeftPosZ(52, 70)); files_pane.Add(removed.TopPos(y, bcy).LeftPosZ(128, 80)); files_pane.Add(recent.TopPos(y, bcy).RightPos(0, bcx)); + files_pane.Add(extension.TopPos(y, bcy).RightPos(bcx + DPI(8), bcx)); y += bcy + div; files_pane.Add(files.VSizePos(y, Zy(24)).HSizePos()); files_pane.Add(find.BottomPosZ(6, 19).HSizePosZ()); + + extension.Disable(); Mode(0); Mode(1);