mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
ide: Developing mouse dragging of package files
git-svn-id: svn://ultimatepp.org/upp/trunk@9261 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
691e130e9f
commit
e536feef6a
2 changed files with 66 additions and 26 deletions
|
|
@ -340,6 +340,9 @@ struct WorkspaceWork {
|
|||
void MoveFile(int d);
|
||||
void Move(Vector<String>& 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);
|
||||
|
|
|
|||
|
|
@ -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<UppList>(d, "package-file") &&
|
||||
&GetInternal<UppList>(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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue