Ide: DirDiff now can copy files #919

git-svn-id: svn://ultimatepp.org/upp/trunk@7882 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2014-11-10 19:33:16 +00:00
parent 00fe9f80fe
commit b8a2bae848
3 changed files with 60 additions and 16 deletions

View file

@ -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)

View file

@ -39,6 +39,9 @@ void DirDiffDlg::Compare()
Index<String> fs;
GatherFilesDeep(fs, ~dir1, Null);
GatherFilesDeep(fs, ~dir2, Null);
copyleft.Disable();
copyright.Disable();
files.Clear();
Vector<String> 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());
}

View file

@ -199,12 +199,15 @@ class DirDiffDlg : public TopWindow {
Option hidden;
Button compare;
FrameTop<EditString> lfile, rfile;
FrameTop<ParentCtrl> left, right;
EditString lfile, rfile;
Button copyleft, copyright;
void GatherFilesDeep(Index<String>& files, const String& base, const String& path);
void Compare();
void ClearFiles();
void File();
void Copy(bool left);
public:
typedef DirDiffDlg CLASSNAME;