private void DrawRow(int i, HousingItem housingItem, int childIndex = -1) { ImGui.Text($"{housingItem.X:N3}"); ImGui.NextColumn(); ImGui.Text($"{housingItem.Y:N3}"); ImGui.NextColumn(); ImGui.Text($"{housingItem.Z:N3}"); ImGui.NextColumn(); ImGui.Text($"{housingItem.Rotate:N3}"); ImGui.NextColumn(); string uniqueID = childIndex == -1 ? i.ToString() : i.ToString() + "_" + childIndex.ToString(); if (Config.BDTH) { if (ImGui.Button(_localizer.Localize("Set") + "##" + uniqueID)) { BDTHSet(i, housingItem); } ImGui.NextColumn(); } if (Config.Grouping) { var index = Config.GroupingList.IndexOf(i); var buttonText = housingItem.children.Count == 0 ? (index == -1 ? "Add" : "Del") : "Disband"; if (childIndex == -1 && ImGui.Button(_localizer.Localize(buttonText) + "##Group_" + uniqueID)) { if (buttonText == "Add") { Config.GroupingList.Add(i); } else if (buttonText == "Del") { Config.GroupingList.RemoveAt(index); } else if (buttonText == "Disband") { for (int j = 0; j < housingItem.children.Count; j++) { Config.HousingItemList.Add(housingItem.children[j]); } housingItem.children.Clear(); Config.Save(); } } ImGui.NextColumn(); } if (Config.SingleExport) { if (ImGui.Button(_localizer.Localize("Export") + "##Single_" + uniqueID)) { List <HousingItem> tempList = new List <HousingItem>(); tempList.Add(housingItem); string str = JsonConvert.SerializeObject(tempList); Win32Clipboard.CopyTextToClipboard(str); Plugin.Log(String.Format(_localizer.Localize("Exported {0} items to your clipboard."), tempList.Count)); } ImGui.NextColumn(); } }
private void DrawItemList() { // name, x, t, z, r, set int columns = 6; ImGui.Columns(columns, "ItemList", true); ImGui.Separator(); ImGui.Text(_localizer.Localize("Name")); ImGui.NextColumn(); ImGui.Text(_localizer.Localize("X")); ImGui.NextColumn(); ImGui.Text(_localizer.Localize("Y")); ImGui.NextColumn(); ImGui.Text(_localizer.Localize("Z")); ImGui.NextColumn(); ImGui.Text(_localizer.Localize("Rotate")); ImGui.NextColumn(); ImGui.Text(_localizer.Localize("Set")); ImGui.NextColumn(); ImGui.Separator(); for (int i = 0; i < Config.HousingItemList.Count(); i++) { var housingItem = Config.HousingItemList[i]; var displayName = housingItem.Name; if (i == Config.SelectedItemIndex) { displayName = '\ue06f' + displayName; } ImGui.Text(displayName); ImGui.NextColumn(); ImGui.Text($"{housingItem.X:N3}"); ImGui.NextColumn(); ImGui.Text($"{housingItem.Y:N3}"); ImGui.NextColumn(); ImGui.Text($"{housingItem.Z:N3}"); ImGui.NextColumn(); ImGui.Text($"{housingItem.Rotate:N3}"); ImGui.NextColumn(); if (ImGui.Button(_localizer.Localize("Set") + "##" + i.ToString())) { Config.SelectedItemIndex = i; Config.PlaceX = housingItem.X; Config.PlaceY = housingItem.Y; Config.PlaceZ = housingItem.Z; Config.PlaceRotate = housingItem.Rotate; Config.ForceMove = true; Config.Save(); } ImGui.NextColumn(); ImGui.Separator(); } ImGui.Columns(1); if (ImGui.Button(_localizer.Localize("Clear"))) { Config.HousingItemList.Clear(); Config.Save(); } ImGui.SameLine(); if (ImGui.Button(_localizer.Localize("Sort"))) { Config.SelectedItemIndex = -1; Config.HousingItemList.Sort((x, y) => { if (x.ItemKey.CompareTo(y.ItemKey) != 0) { return(x.ItemKey.CompareTo(y.ItemKey)); } if (x.X.CompareTo(y.X) != 0) { return(x.X.CompareTo(y.X)); } if (x.Y.CompareTo(y.Y) != 0) { return(x.Y.CompareTo(y.Y)); } if (x.Z.CompareTo(y.Z) != 0) { return(x.Z.CompareTo(y.Z)); } if (x.Rotate.CompareTo(y.Rotate) != 0) { return(x.Rotate.CompareTo(y.Rotate)); } return(0); }); Config.Save(); } ImGui.SameLine(); if (ImGui.Button(_localizer.Localize("Copy"))) { try { string str = _localizer.Localize("Only for purchasing, please copy config file for the whole preset.\n"); for (int i = 0; i < Config.HousingItemList.Count(); i++) { var housingItem = Config.HousingItemList[i]; str += $"item#{housingItem.ItemKey} {housingItem.Name}\n"; } Win32Clipboard.CopyTextToClipboard(str); } catch (Exception e) { Plugin.Log($"Error while exporting all items: {e}"); } } }
private void DrawGeneralSettings() { ImGui.TextUnformatted(_localizer.Localize("Language:")); if (Plugin.Config.ShowTooltips && ImGui.IsItemHovered()) { ImGui.SetTooltip(_localizer.Localize("Change the UI Language.")); } ImGui.SameLine(); ImGui.SetNextItemWidth(200); if (ImGui.Combo("##hideLangSetting", ref _selectedLanguage, _languageList, _languageList.Length)) { Config.UILanguage = _languageList[_selectedLanguage]; _localizer.Language = Config.UILanguage; Config.Location = _localizer.Localize("Lavender Beds"); Config.Save(); } ImGui.SameLine(ImGui.GetColumnWidth() - 80); ImGui.TextUnformatted(_localizer.Localize("Tooltips")); ImGui.AlignTextToFramePadding(); ImGui.SameLine(); if (ImGui.Checkbox("##hideTooltipsOnOff", ref Config.ShowTooltips)) { Config.Save(); } if (ImGui.Checkbox(_localizer.Localize("BDTH"), ref Config.BDTH)) { Config.Save(); } if (Config.ShowTooltips && ImGui.IsItemHovered()) { ImGui.SetTooltip(_localizer.Localize("BDTH integrate: leave the position set to BDTH.")); } ImGui.SameLine(); if (ImGui.Checkbox(_localizer.Localize("Single Export"), ref Config.SingleExport)) { Config.Save(); } if (Config.ShowTooltips && ImGui.IsItemHovered()) { ImGui.SetTooltip(_localizer.Localize("Add Export button to the single furnitures.")); } if (ImGui.Checkbox(_localizer.Localize("Draw on screen"), ref Config.DrawScreen)) { Config.Save(); } if (Config.ShowTooltips && ImGui.IsItemHovered()) { ImGui.SetTooltip(_localizer.Localize("Draw items on screen.")); } if (Config.DrawScreen) { ImGui.SameLine(); if (ImGui.Button(_localizer.Localize("Undo") + "##Undo")) { if (Config.HiddenScreenItemHistory != null && Config.HiddenScreenItemHistory.Count > 0) { var lastIndex = Config.HiddenScreenItemHistory.Last(); if (lastIndex < Config.HousingItemList.Count && lastIndex >= 0) { Config.HiddenScreenItemHistory.RemoveAt(Config.HiddenScreenItemHistory.Count - 1); Config.Save(); } } } if (Config.ShowTooltips && ImGui.IsItemHovered()) { ImGui.SetTooltip(_localizer.Localize("Undo the on-screen setting.")); } ImGui.TextUnformatted(_localizer.Localize("Drawing Distance:")); if (Config.ShowTooltips && ImGui.IsItemHovered()) { ImGui.SetTooltip(_localizer.Localize("Only draw items within this distance to your character. (0 for unlimited)")); } if (ImGui.DragFloat("##DrawDistance", ref Config.DrawDistance, 0.1f, 0, 52)) { Config.DrawDistance = Math.Max(0, Config.DrawDistance); Config.Save(); } } ImGui.Text("X:"); ImGui.SameLine(); ImGui.SetNextItemWidth(100); if (ImGui.InputFloat("##placeX", ref Config.PlaceX, 0.01f, 0.1f)) { if (Config.SelectedItemIndex >= 0 && Config.SelectedItemIndex < Config.HousingItemList.Count) { Config.HousingItemList[Config.SelectedItemIndex].X = Config.PlaceX; if (Config.HousingItemList[Config.SelectedItemIndex].children.Count > 0) { Config.HousingItemList[Config.SelectedItemIndex].ReCalcChildrenPos(); } } Config.Save(); } ImGui.SameLine(); ImGui.SetNextItemWidth(100); ImGui.Text("Y:"); ImGui.SameLine(); ImGui.SetNextItemWidth(100); if (ImGui.InputFloat("##placeY", ref Config.PlaceY, 0.01f, 0.1f)) { if (Config.SelectedItemIndex >= 0 && Config.SelectedItemIndex < Config.HousingItemList.Count) { Config.HousingItemList[Config.SelectedItemIndex].Y = Config.PlaceY; if (Config.HousingItemList[Config.SelectedItemIndex].children.Count > 0) { Config.HousingItemList[Config.SelectedItemIndex].ReCalcChildrenPos(); } } Config.Save(); } ImGui.SameLine(); ImGui.SetNextItemWidth(100); ImGui.Text("Z:"); ImGui.SameLine(); ImGui.SetNextItemWidth(100); if (ImGui.InputFloat("##placeZ", ref Config.PlaceZ, 0.01f, 0.1f)) { if (Config.SelectedItemIndex >= 0 && Config.SelectedItemIndex < Config.HousingItemList.Count) { Config.HousingItemList[Config.SelectedItemIndex].Z = Config.PlaceZ; if (Config.HousingItemList[Config.SelectedItemIndex].children.Count > 0) { Config.HousingItemList[Config.SelectedItemIndex].ReCalcChildrenPos(); } } Config.HousingItemList[Config.SelectedItemIndex].Z = Config.PlaceZ; Config.Save(); } ImGui.SameLine(); ImGui.SetNextItemWidth(100); ImGui.Text(_localizer.Localize("Rotate:")); ImGui.SameLine(); ImGui.SetNextItemWidth(100); float rotateDegree = Config.PlaceRotate / (float)Math.PI * 180; if (ImGui.InputFloat("##placeRotate", ref rotateDegree, 1f, 5f)) { rotateDegree = (rotateDegree + 180 + 360) % 360 - 180; Config.PlaceRotate = rotateDegree / 180 * (float)Math.PI; if (Config.SelectedItemIndex >= 0 && Config.SelectedItemIndex < Config.HousingItemList.Count) { Config.HousingItemList[Config.SelectedItemIndex].Rotate = Config.PlaceRotate; if (Config.HousingItemList[Config.SelectedItemIndex].children.Count > 0) { Config.HousingItemList[Config.SelectedItemIndex].ReCalcChildrenPos(); } } Config.Save(); } if (ImGui.Button(_localizer.Localize("Cloud Export"))) { Config.UploadItems = Config.HousingItemList; CanUpload = true; Config.Tags.Clear(); Config.UploadName = ""; Config.Save(); } ImGui.SameLine(); if (ImGui.Button(_localizer.Localize("Cloud Import"))) { Task <string> strTask = HttpPost.GetMap(Config.DefaultCloudUri); strTask.ContinueWith((t) => { try { Config.CloudMap = JsonConvert.DeserializeObject <List <CloudMap> >(t.Result); Config.Save(); CanImport = true; } catch (Exception e) { Plugin.LogError($"Error Importing from cloud: {e.Message}"); } }); } if (ImGui.Button(_localizer.Localize("Clear"))) { Config.HousingItemList.Clear(); Config.Save(); } ImGui.SameLine(); if (!Config.Grouping && ImGui.Button(_localizer.Localize("Sort"))) { Config.SelectedItemIndex = -1; Config.HousingItemList.Sort((x, y) => { if (x.ItemKey.CompareTo(y.ItemKey) != 0) { return(x.ItemKey.CompareTo(y.ItemKey)); } if (x.X.CompareTo(y.X) != 0) { return(x.X.CompareTo(y.X)); } if (x.Y.CompareTo(y.Y) != 0) { return(x.Y.CompareTo(y.Y)); } if (x.Z.CompareTo(y.Z) != 0) { return(x.Z.CompareTo(y.Z)); } if (x.Rotate.CompareTo(y.Rotate) != 0) { return(x.Rotate.CompareTo(y.Rotate)); } return(0); }); Config.Save(); } ImGui.SameLine(); if (ImGui.Button(_localizer.Localize("Copy"))) { try { string str = _localizer.Localize("Only for purchasing, please use Export/Import for the whole preset.\n"); var itemList = new List <string>(); foreach (var housingItem in Config.HousingItemList) { itemList.Add($"item#{housingItem.ItemKey}\t{housingItem.Name}"); } var itemSet = new HashSet <string>(itemList); foreach (string itemName in itemSet) { str += $"{itemName}\t{itemList.Count(x => x == itemName)}\n"; } Win32Clipboard.CopyTextToClipboard(str); Plugin.Log(String.Format(_localizer.Localize("Copied {0} items to your clipboard."), Config.HousingItemList.Count)); } catch (Exception e) { Plugin.LogError($"Error while exporting all items: {e.Message}"); } } ImGui.SameLine(); if (ImGui.Button(_localizer.Localize("Export"))) { try { string str = JsonConvert.SerializeObject(Config.HousingItemList); Win32Clipboard.CopyTextToClipboard(str); Plugin.Log(String.Format(_localizer.Localize("Exported {0} items to your clipboard."), Config.HousingItemList.Count)); } catch (Exception e) { Plugin.LogError($"Error while exporting items: {e.Message}"); } } ImGui.SameLine(); if (ImGui.Button(_localizer.Localize("Import"))) { string str = ImGui.GetClipboardText(); try { Config.HousingItemList = JsonConvert.DeserializeObject <List <HousingItem> >(str); foreach (var item in Config.HousingItemList) { try { item.Name = Plugin.Interface.Data.GetExcelSheet <Item>().GetRow(item.ItemKey).Name; } catch (Exception e) { Plugin.LogError($"Error while translating item#{item.ItemKey}: {e.Message}"); } } Config.ResetRecord(); Plugin.Log(String.Format(_localizer.Localize("Imported {0} items from your clipboard."), Config.HousingItemList.Count)); } catch (Exception e) { Plugin.LogError($"Error while importing items: {e.Message}"); LoadChocoboSave(str); } } ImGui.SameLine(ImGui.GetColumnWidth() - 80); if (ImGui.Button(_localizer.Localize(Config.Grouping ? "Grouping" : "Group"))) { if (Config.Grouping) { if (Config.GroupingList.Count > 1) { var baseItem = Config.HousingItemList[Config.GroupingList[0]]; var childrenList = Config.GroupingList.GetRange(1, Config.GroupingList.Count - 1); childrenList.Sort(); for (int i = childrenList.Count - 1; i >= 0; i--) { var index = childrenList[i]; var housingItem = Config.HousingItemList[index]; housingItem.CalcRelativeTo(baseItem); baseItem.children.Add(housingItem); Config.HousingItemList.RemoveAt(index); } } Config.GroupingList.Clear(); Config.Grouping = false; } else { Config.GroupingList.Clear(); Config.Grouping = true; } Config.Save(); } }