mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-07-11 22:03:01 -06:00
ide: Layout designer D&D on layouts, items
git-svn-id: svn://ultimatepp.org/upp/trunk@9264 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
afca7630b7
commit
bd727f2c83
3 changed files with 67 additions and 0 deletions
|
|
@ -405,6 +405,8 @@ private:
|
|||
void Duplicate();
|
||||
void MoveUp();
|
||||
void MoveDown();
|
||||
void DnDInsert(int line, PasteClip& d);
|
||||
void Drag();
|
||||
void SortItems();
|
||||
void SelectAll();
|
||||
|
||||
|
|
@ -437,6 +439,8 @@ private:
|
|||
void NextLayout();
|
||||
void MoveLayoutUp();
|
||||
void MoveLayoutDown();
|
||||
void DnDInsertLayout(int line, PasteClip& d);
|
||||
void DragLayout();
|
||||
void LayoutMenu(Bar& bar);
|
||||
|
||||
void EditBar(Bar& bar);
|
||||
|
|
|
|||
|
|
@ -1251,6 +1251,41 @@ void LayDes::MoveDown()
|
|||
ReloadItems();
|
||||
}
|
||||
|
||||
void LayDes::DnDInsert(int line, PasteClip& d)
|
||||
{
|
||||
if(GetInternalPtr<ArrayCtrl>(d, "layout-item") == &item && item.IsCursor() &&
|
||||
!IsNull(currentlayout) && cursor.GetCount() && d.Accept()) {
|
||||
SaveState();
|
||||
LayoutData& l = CurrentLayout();
|
||||
Buffer<bool> sel(l.item.GetCount(), false);
|
||||
int n = l.item.GetCount();
|
||||
l.item.InsertN(n, n);
|
||||
for(int i = 0; i < cursor.GetCount(); i++)
|
||||
sel[cursor[i]] = true;
|
||||
cursor.Clear();
|
||||
int j = n;
|
||||
for(int i = 0; i < line; i++)
|
||||
if(!sel[i])
|
||||
l.item.Swap(j++, i);
|
||||
for(int i = 0; i < n; i++)
|
||||
if(sel[i]) {
|
||||
cursor.Add(j - n);
|
||||
l.item.Swap(j++, i);
|
||||
}
|
||||
for(int i = line; i < n; i++)
|
||||
if(!sel[i])
|
||||
l.item.Swap(j++, i);
|
||||
l.item.Remove(0, n);
|
||||
ReloadItems();
|
||||
}
|
||||
}
|
||||
|
||||
void LayDes::Drag()
|
||||
{
|
||||
item.DoDragAndDrop(InternalClip(item, "layout-item"), item.GetDragSample(), DND_MOVE);
|
||||
}
|
||||
|
||||
|
||||
bool RectLess(const Rect& a, const Rect& b)
|
||||
{
|
||||
int d = min(a.bottom, b.bottom) - max(a.top, b.top);
|
||||
|
|
@ -1469,6 +1504,28 @@ void LayDes::MoveLayoutDown()
|
|||
}
|
||||
}
|
||||
|
||||
void LayDes::DnDInsertLayout(int line, PasteClip& d)
|
||||
{
|
||||
if(GetInternalPtr<ArrayCtrl>(d, "layout") == &list && list.IsCursor() &&
|
||||
line >= 0 && line <= layout.GetCount() && d.Accept()) {
|
||||
if(!IsNull(search)) {
|
||||
search <<= Null;
|
||||
SyncLayoutList();
|
||||
}
|
||||
int c = list.GetKey();
|
||||
layout.Move(c, line);
|
||||
if(c <= line)
|
||||
line--;
|
||||
SyncLayoutList();
|
||||
GoTo(line);
|
||||
}
|
||||
}
|
||||
|
||||
void LayDes::DragLayout()
|
||||
{
|
||||
list.DoDragAndDrop(InternalClip(list, "layout"), list.GetDragSample(), DND_MOVE);
|
||||
}
|
||||
|
||||
void LayDes::LayoutMenu(Bar& bar)
|
||||
{
|
||||
bool iscursor = list.IsCursor();
|
||||
|
|
|
|||
|
|
@ -322,6 +322,9 @@ LayDes::LayDes()
|
|||
item.NoWantFocus();
|
||||
item.WhenBar = THISBACK(MoveBar);
|
||||
|
||||
item.WhenDrag = THISBACK(Drag);
|
||||
item.WhenDropInsert = THISBACK(DnDInsert);
|
||||
|
||||
SetFrame(toolbar);
|
||||
AddFrame(InsetFrame());
|
||||
AddFrame(sb);
|
||||
|
|
@ -336,6 +339,9 @@ LayDes::LayDes()
|
|||
list.WhenLeftDouble = THISBACK(RenameLayout);
|
||||
list.NoWantFocus();
|
||||
|
||||
list.WhenDrag = THISBACK(DragLayout);
|
||||
list.WhenDropInsert = THISBACK(DnDInsertLayout);
|
||||
|
||||
search.NullText("Search (Ctrl+F)");
|
||||
search <<= THISBACK(Search);
|
||||
search.SetFilter(CharFilterToUpper);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue