From 4a59c243f92c42b1ae7f154774d98fdecd928af7 Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 4 Dec 2015 18:14:36 +0000 Subject: [PATCH] ide: Developing mouse dragging of package files git-svn-id: svn://ultimatepp.org/upp/trunk@9261 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/ide/UppDlg.h | 3 ++ uppsrc/ide/UppWspc.cpp | 89 ++++++++++++++++++++++++++++++------------ 2 files changed, 66 insertions(+), 26 deletions(-) diff --git a/uppsrc/ide/UppDlg.h b/uppsrc/ide/UppDlg.h index ba3900a12..5bf479f58 100644 --- a/uppsrc/ide/UppDlg.h +++ b/uppsrc/ide/UppDlg.h @@ -340,6 +340,9 @@ struct WorkspaceWork { void MoveFile(int d); void Move(Vector& v, FileList& ta, int d); + void DnDInsert(int line, PasteClip& d); + void Drag(); + enum ADDFILE { PACKAGE_FILE, OUTPUT_FILE, HOME_FILE, LOCAL_FILE, CONFIG_FILE, ANY_FILE }; void AddFile(ADDFILE type); void AddItem(const String& name, bool separator, bool readonly); diff --git a/uppsrc/ide/UppWspc.cpp b/uppsrc/ide/UppWspc.cpp index 6f8c38f87..d8cdfb33a 100644 --- a/uppsrc/ide/UppWspc.cpp +++ b/uppsrc/ide/UppWspc.cpp @@ -747,32 +747,6 @@ void WorkspaceWork::RenameFile() SyncWorkspace(); } -void WorkspaceWork::MoveFile(int d) -{ - int fi = filelist.GetCursor(); - int s = filelist.GetSbPos(); - if(fi < 0 || fi >= fileindex.GetCount()) - return; - int a = fileindex[fi]; - int b = fileindex[fi + d]; - ShowFile(a); - ShowFile(b); - if(a < 0 || a >= actual.file.GetCount() || b < 0 || b >= actual.file.GetCount()) - return; - Swap(actual.file[a], actual.file[b]); - ShowFile(a); - ShowFile(b); - SavePackage(); - LoadActualPackage(); - filelist.SetSbPos(s); - for(int i = 0; i < fileindex.GetCount(); i++) - if(fileindex[i] == b) { - filelist.SetCursor(i); - break; - } - filelist.Sync(); -} - WorkspaceWork::Sepfo WorkspaceWork::GetActiveSepfo() { return Sepfo(GetActivePackage(), GetActiveFileName()); @@ -1119,6 +1093,67 @@ void WorkspaceWork::PackageMenu(Bar& menu) } } +void WorkspaceWork::MoveFile(int d) +{ + int fi = filelist.GetCursor(); + int s = filelist.GetSbPos(); + if(fi < 0 || fi >= fileindex.GetCount()) + return; + int a = fileindex[fi]; + int b = fileindex[fi + d]; + if(a < 0 || a >= actual.file.GetCount() || b < 0 || b >= actual.file.GetCount()) + return; + ShowFile(a); + ShowFile(b); + Swap(actual.file[a], actual.file[b]); + ShowFile(a); + ShowFile(b); + SavePackage(); + LoadActualPackage(); + filelist.SetSbPos(s); + for(int i = 0; i < fileindex.GetCount(); i++) + if(fileindex[i] == b) { + filelist.SetCursor(i); + break; + } + filelist.Sync(); +} + +void WorkspaceWork::DnDInsert(int line, PasteClip& d) +{ + if(IsAvailableInternal(d, "package-file") && + &GetInternal(d) == &filelist && d.Accept()) { + int fi = filelist.GetCursor(); + int s = filelist.GetSbPos(); + if(fi < 0 || fi > fileindex.GetCount() || line < 0 || line > fileindex.GetCount()) + return; + int a = fileindex[fi]; + int b = line < fileindex.GetCount() ? fileindex[line] : actual.file.GetCount(); + if(a < 0 || a > actual.file.GetCount() || b < 0 || b > actual.file.GetCount() || a == b) + return; + ShowFile(a); + ShowFile(b); + actual.file.Move(a, b); + ShowFile(a); + ShowFile(b); + SavePackage(); + LoadActualPackage(); + filelist.SetSbPos(s); + for(int i = 0; i < fileindex.GetCount(); i++) + if(fileindex[i] == b) { + filelist.SetCursor(i); + break; + } + filelist.Sync(); + } +} + +void WorkspaceWork::Drag() +{ + filelist.DoDragAndDrop(InternalClip(filelist, "package-file"), + filelist.GetDragSample(), DND_MOVE); +} + WorkspaceWork::WorkspaceWork() { package <<= THISBACK(PackageCursor); @@ -1134,6 +1169,8 @@ WorkspaceWork::WorkspaceWork() organizer = false; package.BackPaintHint(); filelist.BackPaintHint(); + filelist.WhenDrag = THISBACK(Drag); + filelist.WhenDropInsert = THISBACK(DnDInsert); showtime = false; sort = true; svn_dirs = false;