From b8a2bae8486fc4bd1279fe98177b8b91c75968ef Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 10 Nov 2014 19:33:16 +0000 Subject: [PATCH] Ide: DirDiff now can copy files #919 git-svn-id: svn://ultimatepp.org/upp/trunk@7882 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/TextDiffCtrl/Diff.iml | 25 +++++++++------- uppsrc/TextDiffCtrl/DirDiff.cpp | 46 ++++++++++++++++++++++++++---- uppsrc/TextDiffCtrl/TextDiffCtrl.h | 5 +++- 3 files changed, 60 insertions(+), 16 deletions(-) diff --git a/uppsrc/TextDiffCtrl/Diff.iml b/uppsrc/TextDiffCtrl/Diff.iml index 4cdc98b2e..04c5de5cf 100644 --- a/uppsrc/TextDiffCtrl/Diff.iml +++ b/uppsrc/TextDiffCtrl/Diff.iml @@ -1,15 +1,20 @@ PREMULTIPLIED IMAGE_ID(Diff) IMAGE_ID(DirDiff) +IMAGE_ID(CopyLeft) +IMAGE_ID(CopyRight) IMAGE_BEGIN_DATA -IMAGE_DATA(120,156,205,148,49,14,130,48,20,134,187,194,196,226,33,224,16,192,226,226,238,37,156,117,46,23,48,49,225,0,92,162) -IMAGE_DATA(14,46,148,217,83,16,111,224,9,158,62,16,105,105,95,145,8,209,151,252,1,90,190,191,125,229,15,44,96,1,251,163) -IMAGE_DATA(2,183,178,17,49,168,235,218,170,142,63,158,164,85,75,240,234,179,202,227,253,24,111,243,82,215,31,122,168,252,248,57) -IMAGE_DATA(246,90,98,253,57,250,55,215,166,207,191,207,134,201,227,88,85,85,36,143,227,231,203,157,220,63,178,20,223,177,42,255) -IMAGE_DATA(101,126,127,91,115,254,12,162,40,218,10,33,64,74,9,121,158,223,124,223,95,77,225,147,36,225,82,114,40,203,178,241) -IMAGE_DATA(232,36,196,1,208,123,140,79,211,148,3,236,1,128,105,186,94,25,224,220,243,21,244,128,215,149,224,185,193,75,249,230) -IMAGE_DATA(213,143,107,120,180,252,206,197,171,235,27,30,216,99,81,108,32,203,82,77,156,175,109,253,59,123,249,176,58,143,97,77) -IMAGE_DATA(9,38,197,27,251,10,195,80,203,135,231,121,84,62,172,189,197,113,76,230,3,189,29,30,205,21,243,69,229,3,231,28) -IMAGE_DATA(251,104,212,242,246,124,16,188,182,143,150,183,231,195,193,107,231,71,229,195,210,255,228,122,0,51,144,153,68,0,0,0) -IMAGE_END_DATA(288, 2) +IMAGE_DATA(120,156,237,150,49,110,131,48,20,134,189,194,80,101,233,214,11,192,33,128,165,75,247,158,160,91,183,74,237,108,46,80) +IMAGE_DATA(169,18,7,200,37,220,161,11,102,234,144,83,160,220,160,39,120,237,131,210,24,236,103,7,155,168,12,252,210,19,9,240) +IMAGE_DATA(253,246,115,126,76,216,142,237,216,138,4,246,42,29,197,160,109,91,99,13,252,235,155,52,214,37,120,245,187,202,227,103) +IMAGE_DATA(23,111,242,82,199,159,122,168,188,123,29,79,117,137,241,151,232,95,31,155,94,255,83,54,116,30,207,53,77,67,242,120) +IMAGE_DATA(254,253,227,139,156,63,178,20,63,176,42,31,152,223,255,213,146,155,65,154,166,247,66,8,144,82,66,85,85,199,56,142) +IMAGE_DATA(175,231,240,121,158,115,41,57,212,117,221,121,12,37,196,11,160,183,139,47,138,130,3,60,3,0,27,213,225,192,0,175) +IMAGE_DATA(253,220,130,30,240,123,36,120,174,241,82,254,241,234,143,171,121,244,252,163,141,87,199,215,60,176,199,253,254,14,202,178) +IMAGE_DATA(24,21,231,183,166,254,173,189,156,169,193,99,170,57,193,164,120,109,94,73,146,140,242,17,69,17,149,15,99,111,89,150) +IMAGE_DATA(145,249,64,111,139,71,119,196,124,81,249,192,107,150,121,116,213,243,230,124,16,252,104,30,61,111,206,135,133,31,173,31) +IMAGE_DATA(149,15,67,255,243,181,178,127,6,43,210,213,13,99,79,199,48,214,103,183,87,89,31,254,225,211,253,6,178,189,145,66) +IMAGE_DATA(199,159,122,248,42,100,253,55,121,105,219,12,124,133,65,197,192,250,10,31,148,16,143,225,97,53,121,204,221,12,112,3) +IMAGE_DATA(89,114,252,115,249,144,254,67,215,127,211,84,223,220,219,227,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +IMAGE_END_DATA(384, 4) diff --git a/uppsrc/TextDiffCtrl/DirDiff.cpp b/uppsrc/TextDiffCtrl/DirDiff.cpp index d4bd322bd..a27feece0 100644 --- a/uppsrc/TextDiffCtrl/DirDiff.cpp +++ b/uppsrc/TextDiffCtrl/DirDiff.cpp @@ -39,6 +39,9 @@ void DirDiffDlg::Compare() Index fs; GatherFilesDeep(fs, ~dir1, Null); GatherFilesDeep(fs, ~dir2, Null); + + copyleft.Disable(); + copyright.Disable(); files.Clear(); Vector f = fs.PickKeys(); @@ -71,6 +74,23 @@ void DirDiffDlg::File() diff.Set(LoadFile(p1), LoadFile(p2)); lfile <<= p1; rfile <<= p2; + copyleft.Enable(); + copyright.Enable(); +} + +void DirDiffDlg::Copy(bool left) +{ + String src = ~lfile; + String dst = ~rfile; + if(left) + Swap(src, dst); + if(PromptYesNo("Copy [* \1" + src + "\1]&to [* \1" + dst + "\1] ?")) { + FileIn in(src); + FileOut out(dst); + CopyStream(out, in); + out.Close(); + File(); + } } DirDiffDlg::DirDiffDlg() @@ -104,13 +124,29 @@ DirDiffDlg::DirDiffDlg() files.WhenSel = THISBACK(File); - lfile.Height(EditField::GetStdHeight()); - lfile.SetReadOnly(); - diff.InsertFrameLeft(lfile); + diff.InsertFrameLeft(left); + diff.InsertFrameRight(right); - rfile.Height(EditField::GetStdHeight()); + bcx = GetTextSize(t_("Copy"), StdFont()).cx + HorzLayoutZoom(40); + + left.Height(EditField::GetStdHeight()); + lfile.SetReadOnly(); + left.Add(lfile.VSizePos().HSizePos(0, bcx)); + left.Add(copyright.VSizePos().RightPos(0, bcx)); + copyright.SetImage(DiffImg::CopyRight()); + copyright.SetLabel("Copy"); + copyright <<= THISBACK1(Copy, false); + + right.Height(EditField::GetStdHeight()); rfile.SetReadOnly(); - diff.InsertFrameRight(rfile); + right.Add(rfile.VSizePos().HSizePos(bcx, 0)); + right.Add(copyleft.VSizePos().LeftPos(0, bcx)); + copyleft.SetImage(DiffImg::CopyLeft()); + copyleft.SetLabel("Copy"); + copyleft <<= THISBACK1(Copy, true); + + copyleft.Disable(); + copyright.Disable(); Icon(DiffImg::DirDiff()); } diff --git a/uppsrc/TextDiffCtrl/TextDiffCtrl.h b/uppsrc/TextDiffCtrl/TextDiffCtrl.h index a6ff18cb6..ba08645b7 100644 --- a/uppsrc/TextDiffCtrl/TextDiffCtrl.h +++ b/uppsrc/TextDiffCtrl/TextDiffCtrl.h @@ -199,12 +199,15 @@ class DirDiffDlg : public TopWindow { Option hidden; Button compare; - FrameTop lfile, rfile; + FrameTop left, right; + EditString lfile, rfile; + Button copyleft, copyright; void GatherFilesDeep(Index& files, const String& base, const String& path); void Compare(); void ClearFiles(); void File(); + void Copy(bool left); public: typedef DirDiffDlg CLASSNAME;