feat: add tab context menu

This commit is contained in:
Anna 2022-01-14 16:34:06 -05:00
parent 879aeef05c
commit 1f03d10a22
Signed by: anna
GPG Key ID: 0B391D8F06FCD9E0

View File

@ -79,7 +79,7 @@ internal sealed class ChatLog : IUiComponent {
}
Tab? activeTab = null;
if (currentTab > -1) {
if (currentTab > -1 && currentTab < this.Ui.Plugin.Config.Tabs.Count - 1) {
activeTab = this.Ui.Plugin.Config.Tabs[currentTab];
}
@ -238,7 +238,10 @@ internal sealed class ChatLog : IUiComponent {
var tab = this.Ui.Plugin.Config.Tabs[tabI];
var unread = tabI == this._lastTab || !tab.DisplayUnread || tab.Unread == 0 ? "" : $" ({tab.Unread})";
if (!ImGui.BeginTabItem($"{tab.Name}{unread}###log-tab-{tabI}")) {
var draw = ImGui.BeginTabItem($"{tab.Name}{unread}###log-tab-{tabI}");
this.DrawTabContextMenu(tab, tabI);
if (!draw) {
continue;
}
@ -260,7 +263,14 @@ internal sealed class ChatLog : IUiComponent {
private int DrawTabSidebar() {
var currentTab = -1;
ImGui.Columns(2);
if (!ImGui.BeginTable("tabs-table", 2, ImGuiTableFlags.BordersInnerV | ImGuiTableFlags.SizingStretchProp | ImGuiTableFlags.Resizable)) {
return -1;
}
ImGui.TableSetupColumn("tabs", ImGuiTableColumnFlags.None, 1);
ImGui.TableSetupColumn("chat", ImGuiTableColumnFlags.None, 4);
ImGui.TableNextColumn();
var switchedTab = false;
var childHeight = GetRemainingHeightForMessageLog();
@ -269,7 +279,10 @@ internal sealed class ChatLog : IUiComponent {
var tab = this.Ui.Plugin.Config.Tabs[tabI];
var unread = tabI == this._lastTab || !tab.DisplayUnread || tab.Unread == 0 ? "" : $" ({tab.Unread})";
if (!ImGui.Selectable($"{tab.Name}{unread}###log-tab-{tabI}", this._lastTab == tabI)) {
var clicked = ImGui.Selectable($"{tab.Name}{unread}###log-tab-{tabI}", this._lastTab == tabI);
this.DrawTabContextMenu(tab, tabI);
if (!clicked) {
continue;
}
@ -281,7 +294,7 @@ internal sealed class ChatLog : IUiComponent {
ImGui.EndChild();
ImGui.NextColumn();
ImGui.TableNextColumn();
if (currentTab == -1 && this._lastTab < this.Ui.Plugin.Config.Tabs.Count) {
currentTab = this._lastTab;
@ -292,11 +305,61 @@ internal sealed class ChatLog : IUiComponent {
this.DrawMessageLog(this.Ui.Plugin.Config.Tabs[currentTab], childHeight, switchedTab);
}
ImGui.Columns();
ImGui.EndTable();
return currentTab;
}
private void DrawTabContextMenu(Tab tab, int i) {
if (!ImGui.BeginPopupContextItem()) {
return;
}
var tabs = this.Ui.Plugin.Config.Tabs;
var anyChanged = false;
ImGui.PushID($"tab-context-menu-{i}");
ImGui.SetNextItemWidth(250f);
if (ImGui.InputText("##tab-name", ref tab.Name, 128)) {
anyChanged = true;
}
if (ImGuiUtil.IconButton(FontAwesomeIcon.TrashAlt, tooltip: "Delete tab")) {
tabs.RemoveAt(i);
anyChanged = true;
}
ImGui.SameLine();
var (leftIcon, leftTooltip) = this.Ui.Plugin.Config.SidebarTabView
? (FontAwesomeIcon.ArrowUp, "Move up")
: ((FontAwesomeIcon) 61536, "Move left");
if (ImGuiUtil.IconButton(leftIcon, tooltip: leftTooltip) && i > 0) {
(tabs[i - 1], tabs[i]) = (tabs[i], tabs[i - 1]);
ImGui.CloseCurrentPopup();
anyChanged = true;
}
ImGui.SameLine();
var (rightIcon, rightTooltip) = this.Ui.Plugin.Config.SidebarTabView
? (FontAwesomeIcon.ArrowDown, "Move down")
: (FontAwesomeIcon.ArrowRight, "Move right");
if (ImGuiUtil.IconButton(rightIcon, tooltip: rightTooltip) && i < tabs.Count - 1) {
(tabs[i + 1], tabs[i]) = (tabs[i], tabs[i + 1]);
ImGui.CloseCurrentPopup();
anyChanged = true;
}
if (anyChanged) {
this.Ui.Plugin.SaveConfig();
}
ImGui.PopID();
ImGui.EndPopup();
}
private unsafe int Callback(ImGuiInputTextCallbackData* data) {
var ptr = new ImGuiInputTextCallbackDataPtr(data);