diff --git a/RoleplayersToolbox/Tools/Housing/Bookmark.cs b/RoleplayersToolbox/Tools/Housing/Bookmark.cs index 3d9fca2..33e587e 100755 --- a/RoleplayersToolbox/Tools/Housing/Bookmark.cs +++ b/RoleplayersToolbox/Tools/Housing/Bookmark.cs @@ -21,5 +21,13 @@ namespace RoleplayersToolbox.Tools.Housing { Plot = this.Plot, }; } + + internal bool AnyZero() { + return this.Name == string.Empty + || this.WorldId == 0 + || this.Area == 0 + || this.Ward == 0 + || this.Plot == 0; + } } } diff --git a/RoleplayersToolbox/Tools/Housing/BookmarksUi.cs b/RoleplayersToolbox/Tools/Housing/BookmarksUi.cs index 2b9821d..4a6c68a 100755 --- a/RoleplayersToolbox/Tools/Housing/BookmarksUi.cs +++ b/RoleplayersToolbox/Tools/Housing/BookmarksUi.cs @@ -10,6 +10,7 @@ namespace RoleplayersToolbox.Tools.Housing { private HousingTool Tool { get; } private HousingConfig Config { get; } internal (Bookmark editing, int index)? Editing; + private int _dragging = -1; internal bool ShouldDraw; @@ -37,6 +38,7 @@ namespace RoleplayersToolbox.Tools.Housing { var toDelete = -1; + (int src, int dst)? drag = null; if (ImGui.BeginChild("bookmark-list", new Vector2(-1, -1))) { for (var i = 0; i < this.Config.Bookmarks.Count; i++) { var bookmark = this.Config.Bookmarks[i]; @@ -85,12 +87,40 @@ namespace RoleplayersToolbox.Tools.Housing { ImGui.TreePop(); } + if (ImGui.IsItemActive() || this._dragging == i) { + this._dragging = i; + var step = 0; + if (ImGui.GetIO().MouseDelta.Y < 0 && ImGui.GetMousePos().Y < ImGui.GetItemRectMin().Y) { + step = -1; + } + + if (ImGui.GetIO().MouseDelta.Y > 0 && ImGui.GetMousePos().Y > ImGui.GetItemRectMax().Y) { + step = 1; + } + + if (step != 0) { + drag = (i, i + step); + } + } + ImGui.Separator(); } ImGui.EndChild(); } + if (!ImGui.IsMouseDown(ImGuiMouseButton.Left) && this._dragging != -1) { + this._dragging = -1; + this.Plugin.SaveConfig(); + } + + if (drag != null && drag.Value.dst < this.Config.Bookmarks.Count && drag.Value.dst >= 0) { + this._dragging = drag.Value.dst; + var temp = this.Config.Bookmarks[drag.Value.src]; + this.Config.Bookmarks[drag.Value.src] = this.Config.Bookmarks[drag.Value.dst]; + this.Config.Bookmarks[drag.Value.dst] = temp; + } + if (toDelete > -1) { this.Config.Bookmarks.RemoveAt(toDelete); this.Plugin.SaveConfig(); @@ -157,7 +187,7 @@ namespace RoleplayersToolbox.Tools.Housing { bookmark.Plot = (uint) Math.Max(1, Math.Min(60, plot)); } - if (ImGui.Button("Save")) { + if (ImGui.Button("Save") && !bookmark.AnyZero()) { if (index < 0) { this.Config.Bookmarks.Add(bookmark); } else if (index < this.Config.Bookmarks.Count) {