ide: Dir Diff extension selection

This commit is contained in:
Mirek Fidler 2025-09-30 13:39:47 +02:00
parent e53f0b3035
commit 1eb4c3f200
4 changed files with 25 additions and 6 deletions

View file

@ -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<String> 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");