public bool OnAccept(CloneObjectParameters parameters) { // Do the cloning string originalName = mFileData.GetNameForCloning(); string potentialNewNodeName = parameters.TransformParameter(originalName); if (potentialNewNodeName.Length <= 1) { MessageBox.Show("You must enter a name longer than 1 character for the clone!"); return(false); } if (potentialNewNodeName.Equals(originalName)) { MessageBox.Show("You must enter a new unique name for the clone!"); return(false); } HashSet <string> dependencies = ModuleDataManager.GetInstance().PreviewCloneDependencies(mFileData, parameters); HashSet <string> savedUnwantedItems = mPreviewCallback != null?mPreviewCallback.GetSavedUnwantedItems() : null; mPreviewCallback = new PreviewCloneFileCallback(mViewer, mFileData, parameters); mPreviewCallback.SetUnwantedItems(savedUnwantedItems); PreviewCloneDialog dialog = new PreviewCloneDialog("Creating " + potentialNewNodeName, dependencies, mPreviewCallback); DialogResult result = dialog.ShowDialog(); if (result != DialogResult.OK) { return(false); } return(true); }
private void CheckStringKeyExists(JToken token, string tokenName) { if (token == null) { ////AddError("The string for " + tokenName + " does not exist! Please add localization support"); return; } string key = token.ToString(); Regex matcher = new Regex(@"i18n\(([^)]+)\)"); Match locMatch = matcher.Match(key); if (locMatch.Success) { key = locMatch.Groups[1].Value; if (!ModuleDataManager.GetInstance().HasLocalizationKey(key)) { AddError("Localization Key Not Found! " + key + " is not in en.json"); } } else { if (key.Length > 0) { AddError("The string for " + tokenName + " is '" + key + "', which is not a valid localization key. Please add localization support"); } } }
private void addNewAliasToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode selectedNode = treeView.SelectedNode; string manifestEntryType = "aliases"; if (selectedNode.Parent != null) { manifestEntryType = selectedNode.Text; selectedNode = selectedNode.Parent; } string moduleName = selectedNode.Text; Module selectedMod = ModuleDataManager.GetInstance().GetMod(moduleName); if (selectedMod != null) { string initialDirectory; if (!mLastModuleLocations.TryGetValue(moduleName, out initialDirectory)) { initialDirectory = System.IO.Path.GetFullPath(selectedMod.Path); } else { initialDirectory = System.IO.Path.GetFullPath(initialDirectory); } selectJsonFileDialog.InitialDirectory = initialDirectory; selectJsonFileDialog.Tag = new NewAliasParameters(selectedMod, manifestEntryType); selectJsonFileDialog.ShowDialog(this); } }
private void InitializeDefenseItemsListView() { defenseItemsListView.BeginUpdate(); defenseItemsListView.Items.Clear(); defenseImagePaths = new Dictionary <string, string>(); object[] data = ModuleDataManager.GetInstance().FilterJsonByTerm(defenseItemsListView, "entity_data.stonehearth:combat:armor_data"); defenseJsonFiles = (Dictionary <string, JsonFileData>)data[0]; Dictionary <string, string> modNames = (Dictionary <string, string>)data[1]; ImageList imageList = new ImageList(); // populate listView int index = 0; foreach (KeyValuePair <string, JsonFileData> entry in defenseJsonFiles) { JsonFileData jsonFileData = entry.Value; JObject json = jsonFileData.Json; ListViewItem item = new ListViewItem(entry.Key); JToken token = json.SelectToken("entity_data.stonehearth:combat:armor_data.base_damage_reduction"); string damageReduction = token == null ? "" : token.ToString(); item.SubItems.Add(damageReduction); JToken iLevelToken = json.SelectToken("components.stonehearth:equipment_piece.ilevel"); string iLevel = iLevelToken == null ? "none" : iLevelToken.ToString(); item.SubItems.Add(iLevel); string modName = modNames[entry.Key]; item.SubItems.Add(modName); this.addImages(jsonFileData, defenseImagePaths, imageList, item, entry, ref index); defenseItemsListView.Items.Add(item); } defenseItemsListView.SmallImageList = imageList; defenseItemsListView.EndUpdate(); }
private string GetAliasOrFlatName() { ModuleFile moduleFile = GetModuleFile(); string flatPath = Path.Replace(ModuleDataManager.GetInstance().ModsDirectoryPath, ""); return((moduleFile != null) ? moduleFile.FullAlias : flatPath); }
private void aliasContextMenuDuplicate_Click(object sender, EventArgs e) { TreeNode selectedNode = treeView.SelectedNode; FileData selectedFileData = ModuleDataManager.GetInstance().GetSelectedFileData(treeView.SelectedNode); if (selectedFileData == null) { return; } IModuleFileData moduleFile = selectedFileData as IModuleFileData; if (moduleFile == null) { return; // Don't know how to clone something not module file data } string name = moduleFile.GetModuleFile() != null?moduleFile.GetModuleFile().FullAlias : selectedFileData.FileName; CloneAliasCallback callback = new CloneAliasCallback(this, selectedFileData); CloneDialog dialog = new CloneDialog(name, selectedFileData.GetNameForCloning()); dialog.SetCallback(callback); dialog.ShowDialog(); }
private void aliasContextMenuDuplicate_Click(object sender, EventArgs e) { TreeNode selectedNode = treeView.SelectedNode; FileData selectedFileData = ModuleDataManager.GetInstance().GetSelectedFileData(treeView.SelectedNode); if (selectedFileData == null) { return; } IModuleFileData moduleFile = selectedFileData as IModuleFileData; if (moduleFile == null) { return; // Don't know how to clone something not module file data } // Get the correct type from any descendant nodes (including grandchildren) string manifestEntryType = selectedNode.FullPath.Split('\\')[1]; string sourceModName = selectedNode.FullPath.Split('\\')[0]; ModuleFile sourceModule = moduleFile.GetModuleFile(); string uri = sourceModule != null ? sourceModule.FullAlias : selectedFileData.FileName; CloneAliasCallback callback = new CloneAliasCallback(this, selectedFileData, manifestEntryType); CloneDialog dialog = new CloneDialog(uri, selectedFileData.GetNameForCloning(), sourceModName); dialog.SetCallback(callback); dialog.ShowDialog(); }
public void Reload() { filePreviewTabs.TabPages.Clear(); effectsEditorTreeView.Nodes.Clear(); cubemittersTreeView.Nodes.Clear(); ModuleDataManager.GetInstance().PopulateTreeView(effectsEditorTreeView, "effects", "/data/effects"); ModuleDataManager.GetInstance().PopulateTreeView(cubemittersTreeView, "cubemitters", "/data/horde/particles"); ModuleDataManager.GetInstance().PopulateTreeView(lightsTreeView, "", "/data/horde/animatedlights"); ModuleDataManager.GetInstance().PopulateTreeView(skySettingsTreeView, "sky_settings", ""); TreeView treeView = GetTreeView(treeViewTabControl.SelectedIndex); // If we are making a new file, select it in the treeview if (mNewFilePath != null) { TreeNode[] matchingNodes = GetAllNodes(treeView) .Where(r => r.Tag != null && r.Tag.ToString() == mNewFilePath) .ToArray(); if (matchingNodes.Length > 0) { treeView.SelectedNode = matchingNodes.First(); mSelectedNode = treeView.SelectedNode; mNewFilePath = null; } } else if (mSelectedNode != null) { treeView.SelectedNode = mSelectedNode; } }
public void Reload() { // Reload the manifest tab. Initialize(); if (searchBox.Text == "error" && !ModuleDataManager.GetInstance().HasErrors) { searchBox.Text = ""; } searchButton.PerformClick(); if (Properties.Settings.Default.LastSelectedManifestPath != null) { FileData file = ModuleDataManager.GetInstance().GetSelectedFileData(Properties.Settings.Default.LastSelectedManifestPath); if (file != null && file.TreeNode != null) { treeView.SelectedNode = file.TreeNode; } } else { SetSelectedFileData(null); } if (searchBox.Text == "") { searchBox.BackColor = SystemColors.Window; } }
public void TryLoad() { IModuleFileData fileData = null; // only load Json if (mType == FileType.JSON) { fileData = new JsonFileData(ResolvedPath); } else if (mType == FileType.LUA) { fileData = new LuaFileData(ResolvedPath); } if (fileData != null) { fileData.SetModuleFile(this); mFileData = fileData as FileData; mFileData.Load(); if (mAlias == "ui:stockpile:filters") { foreach (JToken filter in (mFileData as JsonFileData).Json.SelectTokens("stockpile.*.categories.*.filter")) { ModuleDataManager.GetInstance().StockpileFilters.Add(filter.ToString()); } } foreach (KeyValuePair <string, FileData> data in mReferencesCache) { mFileData.ReferencedByFileData[data.Key] = data.Value; } } }
public ModuleFile GetModuleFile(string fullAlias) { int indexOfColon = fullAlias.IndexOf(':'); string module = fullAlias.Substring(0, indexOfColon); string alias = fullAlias.Substring(indexOfColon + 1); Module mod = ModuleDataManager.GetInstance().GetMod(module); if (mod == null) { return(null); } ModuleFile result; result = mod.GetModuleFile("aliases", alias); if (result != null) { return(result); } result = mod.GetModuleFile("components", alias); if (result != null) { return(result); } result = mod.GetModuleFile("controllers", alias); if (result != null) { return(result); } return(null); }
private void textBox_MouseMove(object sender, MouseEventArgs e) { int charIndex = textBox.GetCharIndexFromPosition(e.Location); int line = textBox.GetLineFromCharIndex(charIndex); if (textBox.Lines.Length <= line) { return; } if (mI18nTooltipLine == line) { return; } i18nTooltip.Hide(textBox); mI18nTooltipLine = line; string lineString = textBox.Lines[line]; Regex matcher = new Regex(@"i18n\(([^)]+)\)"); Match locMatch = matcher.Match(lineString); if (locMatch.Success) { mI18nLocKey = locMatch.Groups[1].Value; string translated = ModuleDataManager.GetInstance().LocalizeString(mI18nLocKey); translated = JsonHelper.WordWrap(translated, 100); i18nTooltip.Show(translated, textBox, e.Location); } else { i18nTooltip.Hide(textBox); mI18nLocKey = null; } }
private bool CanAddFineVersion(FileData file) { JsonFileData jsonFileData = file as JsonFileData; if (jsonFileData == null) { return(false); // Don't know how to clone something not jsonFileData } ModuleFile moduleFile = jsonFileData.GetModuleFile(); if (moduleFile == null || moduleFile.IsFineVersion || jsonFileData.JsonType != JSONTYPE.ENTITY) { return(false); // can only make fine version of a module file } string fineFullAlias = moduleFile.FullAlias + ":fine"; if (ModuleDataManager.GetInstance().GetModuleFile(fineFullAlias) != null) { return(false); // fine already exists } return(true); }
protected Dictionary <string, FileData> GetDependencies() { Dictionary <string, FileData> dependencies = new Dictionary <string, FileData>(); foreach (ModuleFile dependency in LinkedAliases) { string alias = dependency.Module.Name + ":" + dependency.Alias; if (!dependencies.ContainsKey(alias)) { dependencies.Add(alias, dependency.FileData); } } foreach (KeyValuePair <string, FileData> file in LinkedFileData) { string filePathWithoutBase = ModuleDataManager.GetInstance().TryReplaceModsDirectory(file.Key, "", ""); filePathWithoutBase = ModuleDataManager.GetInstance().TryReplaceSteamUploadsDirectory(filePathWithoutBase, "", ""); if (!dependencies.ContainsKey(filePathWithoutBase)) { dependencies.Add(filePathWithoutBase, file.Value); } } return(dependencies); }
private void aliasContextMenu_Opening(object sender, CancelEventArgs e) { TreeNode node = treeView.SelectedNode; aliasContextMenu.Visible = true; FileData file = ModuleDataManager.GetInstance().GetSelectedFileData(treeView.SelectedNode); if (file != null) { addIconicVersionToolStripMenuItem.Visible = CanAddEntityForm(file, "iconic"); addGhostToolStripMenuItem.Visible = !CanAddEntityForm(file, "iconic") && CanAddEntityForm(file, "ghost"); removeFromManifestToolStripMenuItem.Visible = GetModuleFile(file) != null; aliasContextDuplicate.Visible = true; copyFullAliasToolStripMenuItem.Visible = true; addNewAliasToolStripMenuItem.Visible = false; } else { foreach (ToolStripItem item in aliasContextMenu.Items) { item.Visible = false; } addNewAliasToolStripMenuItem.Visible = true; } }
private void searchButton_Click(object sender, EventArgs e) { string searchTerm = searchBox.Text; searchBox.BackColor = Color.Gold; ModuleDataManager.GetInstance().FilterAliasTree(treeView, searchTerm); }
public bool OnAccept(string inputMessage) { string key = mLocKey; string[] split = key.Split(':'); string modName = "stonehearth"; if (split.Length > 1) { modName = split[0]; key = split[1]; } Module mod = ModuleDataManager.GetInstance().GetMod(modName); if (mod == null) { MessageBox.Show("Could not change loc key. There is no mod named " + modName); return(true); } JValue token = mod.EnglishLocalizationJson.SelectToken(key) as JValue; if (token == null) { // No such localization key. Try to add it. string[] tokenSplit = key.Split('.'); JObject parent = mod.EnglishLocalizationJson; for (int i = 0; i < tokenSplit.Length - 1; ++i) { if (parent == null) { break; } if (parent[tokenSplit[i]] == null) { parent[tokenSplit[i]] = new JObject(); } parent = parent[tokenSplit[i]] as JObject; } if (parent == null) { MessageBox.Show("Could not insert localization token " + mLocKey); return(true); } parent.Add(tokenSplit[tokenSplit.Length - 1], inputMessage); } else { token.Value = inputMessage; } mod.WriteEnglishLocalizationToFile(); return(true); }
private void toolStripStatusLabel1_DoubleClick(object sender, EventArgs e) { if (ModuleDataManager.GetInstance().HasErrors) { ModuleDataManager.GetInstance().FilterAliasTree(treeView, "error"); searchButton.PerformClick(); } }
private string GetAliasOrFlatName() { ModuleFile moduleFile = GetModuleFile(); string flatPath = ModuleDataManager.GetInstance().TryReplaceModsDirectory(Path, "", ""); flatPath = ModuleDataManager.GetInstance().TryReplaceSteamUploadsDirectory(flatPath, "", ""); return((moduleFile != null) ? moduleFile.FullAlias : flatPath); }
/// <summary> /// /// </summary> /// <param name="newPath"></param> /// <param name="oldName"></param> /// <param name="newFileName"></param> /// <param name="alreadyCloned"></param> /// <param name="execute">whether to actual execute the clone. otherwise, this is just a preview</param> /// <returns></returns> public virtual bool Clone(string newPath, CloneObjectParameters parameters, HashSet <string> alreadyCloned, bool execute) { // Ensure directory exists string directory = System.IO.Path.GetDirectoryName(newPath); alreadyCloned.Add(newPath); if (execute) { System.IO.Directory.CreateDirectory(directory); } // Figure out what dependency files need to exist foreach (KeyValuePair <string, FileData> dependencyKV in GetDependencies()) { string dependencyName = dependencyKV.Key; FileData dependencyFile = dependencyKV.Value; if (dependencyFile != null && ShouldCloneDependency(dependencyName, parameters)) { // We want to clone this dependency IModuleFileData modFileData = dependencyFile as IModuleFileData; if (modFileData != null && modFileData.GetModuleFile() != null) { // This dependency is an alias. Clone the alias. ModuleFile linkedAlias = modFileData.GetModuleFile(); string aliasNewName = parameters.TransformAlias(dependencyName); if (!alreadyCloned.Contains(aliasNewName)) { alreadyCloned.Add(aliasNewName); linkedAlias.Clone(parameters, alreadyCloned, execute); } } else { // This dependency is just a FileData, clone the fileData. string transformedDependencyName = parameters.TransformModPath(dependencyName); string newDependencyPath = ModuleDataManager.GetInstance().GetMod(parameters.TargetModule).ParentDirectory + parameters.TransformParameter(transformedDependencyName); if (!alreadyCloned.Contains(newDependencyPath)) { alreadyCloned.Add(newDependencyPath); dependencyFile.Clone(newDependencyPath, parameters, alreadyCloned, execute); } } } } if (execute) { string flatFileData = ResolveLocalizedStrings(parameters, FlatFileData); string newFlatFile = parameters.TransformParameter(flatFileData); using (StreamWriter wr = new StreamWriter(newPath, false, new UTF8Encoding(false))) { wr.Write(newFlatFile); } } return(true); }
public ErrorFileList(ManifestView owner) { mOwner = owner; InitializeComponent(); foreach (FileData file in ModuleDataManager.GetInstance().GetErrorFiles()) { listBox.Items.Add(file); } }
public bool OnAccept(HashSet <string> unwantedItems) { if (ModuleDataManager.GetInstance().ExecuteClone(mFileData, mParameters, unwantedItems)) { mViewer.Reload(); } return(true); }
// Not really killable entities per se. More like stuff with attributes. private void InitializeKillableEntitiesListView() { killableEntitiesListView.BeginUpdate(); killableEntitiesListView.Items.Clear(); InitializeKillableEntitiesColumns(); object[] data = ModuleDataManager.GetInstance().GetJsonsOfType(killableEntitiesListView, JSONTYPE.MONSTER_TUNING); killableEntitiesJsonFiles = (Dictionary <string, JsonFileData>)data[0]; foreach (KeyValuePair <string, JsonFileData> entry in killableEntitiesJsonFiles) { JsonFileData jsonFileData = entry.Value; JObject json = jsonFileData.Json; ListViewItem item = new ListViewItem(entry.Key); List <ListViewItem.ListViewSubItem> subItems = new List <ListViewItem.ListViewSubItem>(); populateWithDefaultValue <ListViewItem.ListViewSubItem>( subItems, new ListViewItem.ListViewSubItem(), killableEntitiesListView.Columns.Count); JToken estimatedDifficulty = json["estimated_difficulty"]; JObject jAttributes = json.SelectToken("attributes") as JObject; if (jAttributes != null) { foreach (JProperty attribute in jAttributes.Properties()) { string attributeName = attribute.Name; if (killableEntitiesListView.Columns.IndexOfKey(attributeName) == -1) { continue; } JValue jValue = attribute.Value as JValue; if (jValue != null) { int i = killableEntitiesListView.Columns.IndexOfKey(attributeName); subItems[i - 1] = new ListViewItem.ListViewSubItem(item, jValue.ToString()); } } int estimatedDifficultyIndex = killableEntitiesListView.Columns.IndexOfKey("difficulty"); if (estimatedDifficulty != null) { subItems[estimatedDifficultyIndex - 1] = new ListViewItem.ListViewSubItem(item, estimatedDifficulty.ToString()); } item.SubItems.AddRange(subItems.ToArray()); killableEntitiesListView.Items.Add(item); } // Make sure to resize column after adding all the items, otherwise when reloading the column size won't be updated int index = killableEntitiesListView.Columns.IndexOfKey("alias"); killableEntitiesListView.AutoResizeColumn(index, ColumnHeaderAutoResizeStyle.ColumnContent); } killableEntitiesListView.EndUpdate(); }
public ModuleDataManager(string modsDirectoryPath) { if (sInstance != null) { sInstance.Dispose(); sInstance = null; } mModsDirectoryPath = JsonHelper.NormalizeSystemPath(modsDirectoryPath); sInstance = this; }
public override void AddError(string error) { base.AddError(error); switch (mJsonType) { case JSONTYPE.ENCOUNTER: return; } ModuleDataManager.GetInstance().AddErrorFile(this); }
public void Initialize() { // Initialize cef mEffectsChromeBrowser = EffectsChromeBrowser.GetInstance(); mEffectsChromeBrowser.InitBrowser(this.effectsBrowserPanel); ModuleDataManager.GetInstance().PopulateTreeView(effectsEditorTreeView, "effects", "/data/effects"); ModuleDataManager.GetInstance().PopulateTreeView(cubemittersTreeView, "cubemitters", "/data/horde/particles"); ModuleDataManager.GetInstance().PopulateTreeView(lightsTreeView, "", "/data/horde/animatedlights"); ModuleDataManager.GetInstance().PopulateTreeView(skySettingsTreeView, "sky_settings", ""); }
public bool OnAccept(HashSet <string> unwantedItems) { if (ModuleDataManager.GetInstance().ExecuteClone(mFileData, mParameters, unwantedItems)) { newFilePath = mParameters.TransformParameter(mFileData.Path); mViewer.SetNewFilePath(newFilePath); mViewer.Reload(); } return(true); }
public bool TrySetFlatFileData(string newData) { string newFlatFileData; if (TryChangeFlatFileData(newData, out newFlatFileData)) { mFlatFileData = newFlatFileData; ModuleDataManager.GetInstance().ModifiedFiles.Add(this); return(true); } return(false); }
private void treeView_AfterSelect(object sender, TreeViewEventArgs e) { FileData file = ModuleDataManager.GetInstance().GetSelectedFileData(treeView.SelectedNode); SetSelectedFileData(file); if (treeView.SelectedNode != null) { Properties.Settings.Default.LastSelectedManifestPath = treeView.SelectedNode.FullPath; Properties.Settings.Default.Save(); } treeView.Focus(); }
public void UpdateNetWorthData() { mItemCount = 0; mMaxNetWorth = 0; mNetWorthValues = new Dictionary <int, List <JsonFileData> >(); foreach (Module mod in ModuleDataManager.GetInstance().GetAllModules()) { foreach (ModuleFile file in mod.GetAliases()) { JsonFileData data = file.FileData as JsonFileData; if (data == null) { continue; } int netWorth = data.NetWorth; if (netWorth <= 0) { continue; } string imageFile = FindImageForFile(data); if (string.IsNullOrEmpty(imageFile)) { Console.WriteLine("file " + data.FileName + " has no icon!"); continue; } if (netWorth > mMaxNetWorth) { mMaxNetWorth = netWorth; } List <JsonFileData> list; if (!mNetWorthValues.TryGetValue(netWorth, out list)) { list = new List <JsonFileData>(); mNetWorthValues[netWorth] = list; } list.Add(data); if (list.Count > mItemCount) { mItemCount = list.Count; } } } canvas.Refresh(); }