From c1e6959f459e5bf84efb318587f12dc5911a5a33 Mon Sep 17 00:00:00 2001 From: cxl Date: Sat, 25 May 2013 11:37:08 +0000 Subject: [PATCH] ide: Duplicate layout (thanks Sender Ghost) git-svn-id: svn://ultimatepp.org/upp/trunk@6095 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/ide/LayDes/LayDes.h | 1 + uppsrc/ide/LayDes/laydes.cpp | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/uppsrc/ide/LayDes/LayDes.h b/uppsrc/ide/LayDes/LayDes.h index d9751c0ee..0d4ea2415 100644 --- a/uppsrc/ide/LayDes/LayDes.h +++ b/uppsrc/ide/LayDes/LayDes.h @@ -407,6 +407,7 @@ private: void ShowSelection(bool s); void AddLayout(); + void DuplicateLayout(); void RenameLayout(); void RemoveLayout(); void PrevLayout(); diff --git a/uppsrc/ide/LayDes/laydes.cpp b/uppsrc/ide/LayDes/laydes.cpp index dd080b2b3..74d69b802 100644 --- a/uppsrc/ide/LayDes/laydes.cpp +++ b/uppsrc/ide/LayDes/laydes.cpp @@ -1316,6 +1316,31 @@ void LayDes::AddLayout() LayoutCursor(); } +void LayDes::DuplicateLayout() +{ + if(currentlayout < 0) + return; + LayoutData& c = CurrentLayout(); + String name = c.name; + for(;;) { + if(!EditText(name, "Duplicate layout", "Layout", CharFilterCid)) + return; + CParser p(name); + if(p.IsId()) + break; + Exclamation("Invalid name!"); + } + String data = c.Save(0); + CParser p(data); + int next = currentlayout + 1; + LayoutData& d = layout.Insert(next); + d.Read(p); + d.name = name; + SyncLayoutList(); + layoutlist.SetCursor(next); + LayoutCursor(); +} + void LayDes::RenameLayout() { if(currentlayout < 0) @@ -1365,13 +1390,15 @@ void LayDes::MoveLayoutDown() void LayDes::LayoutMenu(Bar& bar) { + bool iscursor = layoutlist.IsCursor(); bar.Add("Add new layout..", THISBACK(AddLayout)); - bar.Add("Rename layout..", THISBACK(RenameLayout)); - bar.Add("Remove layout..", THISBACK(RemoveLayout)); + bar.Add(iscursor, "Duplicate layout..", THISBACK(DuplicateLayout)); + bar.Add(iscursor, "Rename layout..", THISBACK(RenameLayout)); + bar.Add(iscursor, "Remove layout..", THISBACK(RemoveLayout)); bar.Separator(); - bar.Add(layoutlist.IsCursor() && layoutlist.GetCursor() > 0, + bar.Add(iscursor && layoutlist.GetCursor() > 0, AK_MOVELAYOUTUP, LayImg::MoveUp(), THISBACK(MoveLayoutUp)); - bar.Add(layoutlist.IsCursor() && layoutlist.GetCursor() < layoutlist.GetCount() - 1, + bar.Add(iscursor && layoutlist.GetCursor() < layoutlist.GetCount() - 1, AK_MOVELAYOUTDOWN, LayImg::MoveDown(), THISBACK(MoveLayoutDown)); }