(c0e610a99) Ugly temporary workaround to OpenFileDialog crashing on some Linux systems. If instantiating the dialog fails, a message box pops up where the user can enter the path to the file manually.
This commit is contained in:
@@ -965,34 +965,38 @@ namespace Barotrauma
|
||||
{
|
||||
OnClicked = (btn, userdata) =>
|
||||
{
|
||||
OpenFileDialog ofd = new OpenFileDialog()
|
||||
try
|
||||
{
|
||||
InitialDirectory = Path.GetFullPath(SteamManager.WorkshopItemStagingFolder),
|
||||
Filter = TextManager.Get("WorkshopItemPreviewImage")+"|*.png",
|
||||
Title = TextManager.Get("WorkshopItemPreviewImageDialogTitle")
|
||||
};
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
OpenFileDialog ofd = new OpenFileDialog()
|
||||
{
|
||||
Multiselect = true,
|
||||
InitialDirectory = Path.GetFullPath(SteamManager.WorkshopItemStagingFolder),
|
||||
Filter = TextManager.Get("WorkshopItemPreviewImage") + "|*.png",
|
||||
Title = TextManager.Get("WorkshopItemPreviewImageDialogTitle")
|
||||
};
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
OnPreviewImageSelected(previewIcon, ofd.FileName);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
string previewImagePath = Path.GetFullPath(Path.Combine(SteamManager.WorkshopItemStagingFolder, SteamManager.PreviewImageName));
|
||||
if (new FileInfo(ofd.FileName).Length > 1024 * 1024)
|
||||
{
|
||||
new GUIMessageBox(TextManager.Get("Error"), TextManager.Get("WorkshopItemPreviewImageTooLarge"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (ofd.FileName != previewImagePath)
|
||||
{
|
||||
File.Copy(ofd.FileName, previewImagePath, overwrite: true);
|
||||
}
|
||||
//use a custom prompt if OpenFileDialog fails (Linux/Mac)
|
||||
var msgBox = new GUIMessageBox(TextManager.Get("WorkshopItemPreviewImageDialogTitle"), "", relativeSize: new Vector2(0.4f, 0.2f),
|
||||
buttons: new string[] { TextManager.Get("Cancel"), TextManager.Get("OK") });
|
||||
|
||||
if (itemPreviewSprites.ContainsKey(previewImagePath))
|
||||
var pathBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.5f), msgBox.Content.RectTransform, Anchor.Center) { MinSize = new Point(0,25) });
|
||||
|
||||
msgBox.Buttons[0].OnClicked += msgBox.Close;
|
||||
msgBox.Buttons[1].OnClicked += msgBox.Close;
|
||||
msgBox.Buttons[1].OnClicked += (btn2, userdata2) =>
|
||||
{
|
||||
itemPreviewSprites[previewImagePath].Remove();
|
||||
}
|
||||
var newPreviewImage = new Sprite(previewImagePath, sourceRectangle: null);
|
||||
previewIcon.Sprite = newPreviewImage;
|
||||
itemPreviewSprites[previewImagePath] = newPreviewImage;
|
||||
itemEditor.PreviewImage = previewImagePath;
|
||||
if (File.Exists(pathBox.Text))
|
||||
{
|
||||
OnPreviewImageSelected(previewIcon, pathBox.Text);
|
||||
};
|
||||
return true;
|
||||
};
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -1072,40 +1076,40 @@ namespace Barotrauma
|
||||
{
|
||||
OnClicked = (btn, userdata) =>
|
||||
{
|
||||
OpenFileDialog ofd = new OpenFileDialog()
|
||||
try
|
||||
{
|
||||
InitialDirectory = Path.GetFullPath(SteamManager.WorkshopItemStagingFolder),
|
||||
Title = "Select the files you want to add to the Steam Workshop item",
|
||||
};
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
foreach (string file in ofd.FileNames)
|
||||
OpenFileDialog ofd = new OpenFileDialog()
|
||||
{
|
||||
string filePathRelativeToStagingFolder = UpdaterUtil.GetRelativePath(file, Path.Combine(Environment.CurrentDirectory, SteamManager.WorkshopItemStagingFolder));
|
||||
string filePathRelativeToBaseFolder = UpdaterUtil.GetRelativePath(file, Environment.CurrentDirectory);
|
||||
//file is not inside the staging folder
|
||||
if (filePathRelativeToStagingFolder.StartsWith(".."))
|
||||
{
|
||||
//submarines can be included in the content package directly
|
||||
string basePath = Path.GetDirectoryName(filePathRelativeToBaseFolder.Replace("..", ""));
|
||||
if (basePath == "Submarines")
|
||||
{
|
||||
string destinationPath = Path.Combine(SteamManager.WorkshopItemStagingFolder, "Submarines", Path.GetFileName(file));
|
||||
File.Copy(file, destinationPath);
|
||||
itemContentPackage.AddFile(filePathRelativeToBaseFolder, ContentType.Submarine);
|
||||
}
|
||||
else
|
||||
{
|
||||
itemContentPackage.AddFile(filePathRelativeToBaseFolder, ContentType.None);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
itemContentPackage.AddFile(filePathRelativeToStagingFolder, ContentType.None);
|
||||
}
|
||||
InitialDirectory = Path.GetFullPath(SteamManager.WorkshopItemStagingFolder),
|
||||
Title = TextManager.Get("workshopitemaddfiles"),
|
||||
};
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
OnAddFilesSelected(ofd.FileNames);
|
||||
}
|
||||
RefreshCreateItemFileList();
|
||||
}
|
||||
catch
|
||||
{
|
||||
//use a custom prompt if OpenFileDialog fails (Linux/Mac)
|
||||
var msgBox = new GUIMessageBox(TextManager.Get("workshopitemaddfiles"), "", relativeSize: new Vector2(0.4f, 0.2f),
|
||||
buttons: new string[] { TextManager.Get("Cancel"), TextManager.Get("OK") });
|
||||
|
||||
var pathBox = new GUITextBox(new RectTransform(new Vector2(1.0f, 0.5f), msgBox.Content.RectTransform, Anchor.Center) { MinSize = new Point(0, 25) });
|
||||
|
||||
msgBox.Buttons[0].OnClicked += msgBox.Close;
|
||||
msgBox.Buttons[1].OnClicked += msgBox.Close;
|
||||
msgBox.Buttons[1].OnClicked += (btn2, userdata2) =>
|
||||
{
|
||||
if (string.IsNullOrEmpty(pathBox?.Text)) { return true; }
|
||||
string[] filePaths = pathBox.Text.Split(',');
|
||||
if (File.Exists(pathBox.Text))
|
||||
{
|
||||
OnAddFilesSelected(filePaths);
|
||||
};
|
||||
return true;
|
||||
};
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@@ -1167,7 +1171,7 @@ namespace Barotrauma
|
||||
}
|
||||
};
|
||||
}
|
||||
new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), bottomButtonContainer.RectTransform, Anchor.CenterRight),
|
||||
var publishBtn = new GUIButton(new RectTransform(new Vector2(0.3f, 1.0f), bottomButtonContainer.RectTransform, Anchor.CenterRight),
|
||||
TextManager.Get(itemEditor.Id > 0 ? "WorkshopItemUpdate" : "WorkshopItemPublish"), style: "GUIButtonLarge")
|
||||
{
|
||||
IgnoreLayoutGroups = true,
|
||||
@@ -1195,7 +1199,67 @@ namespace Barotrauma
|
||||
return true;
|
||||
}
|
||||
};
|
||||
publishBtn.TextBlock.AutoScale = true;
|
||||
}
|
||||
|
||||
private void OnPreviewImageSelected(GUIImage previewImageElement, string filePath)
|
||||
{
|
||||
string previewImagePath = Path.GetFullPath(Path.Combine(SteamManager.WorkshopItemStagingFolder, SteamManager.PreviewImageName));
|
||||
if (new FileInfo(filePath).Length > 1024 * 1024)
|
||||
{
|
||||
new GUIMessageBox(TextManager.Get("Error"), TextManager.Get("WorkshopItemPreviewImageTooLarge"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (filePath != previewImagePath)
|
||||
{
|
||||
File.Copy(filePath, previewImagePath, overwrite: true);
|
||||
}
|
||||
|
||||
if (itemPreviewSprites.ContainsKey(previewImagePath))
|
||||
{
|
||||
itemPreviewSprites[previewImagePath].Remove();
|
||||
}
|
||||
var newPreviewImage = new Sprite(previewImagePath, sourceRectangle: null);
|
||||
previewImageElement.Sprite = newPreviewImage;
|
||||
itemPreviewSprites[previewImagePath] = newPreviewImage;
|
||||
itemEditor.PreviewImage = previewImagePath;
|
||||
}
|
||||
|
||||
private void OnAddFilesSelected(string[] fileNames)
|
||||
{
|
||||
if (fileNames == null) { return; }
|
||||
for(int i = 0; i < fileNames.Length; i++)
|
||||
{
|
||||
string file = fileNames[i];
|
||||
if (string.IsNullOrEmpty(file)) { continue; }
|
||||
file = file.Trim();
|
||||
if (!File.Exists(file)) { continue; }
|
||||
|
||||
string filePathRelativeToStagingFolder = UpdaterUtil.GetRelativePath(file, Path.Combine(Environment.CurrentDirectory, SteamManager.WorkshopItemStagingFolder));
|
||||
string filePathRelativeToBaseFolder = UpdaterUtil.GetRelativePath(file, Environment.CurrentDirectory);
|
||||
//file is not inside the staging folder
|
||||
if (filePathRelativeToStagingFolder.StartsWith(".."))
|
||||
{
|
||||
//submarines can be included in the content package directly
|
||||
string basePath = Path.GetDirectoryName(filePathRelativeToBaseFolder.Replace("..", ""));
|
||||
if (basePath == "Submarines")
|
||||
{
|
||||
string destinationPath = Path.Combine(SteamManager.WorkshopItemStagingFolder, "Submarines", Path.GetFileName(file));
|
||||
File.Copy(file, destinationPath);
|
||||
itemContentPackage.AddFile(filePathRelativeToBaseFolder, ContentType.Submarine);
|
||||
}
|
||||
else
|
||||
{
|
||||
itemContentPackage.AddFile(filePathRelativeToBaseFolder, ContentType.None);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
itemContentPackage.AddFile(filePathRelativeToStagingFolder, ContentType.None);
|
||||
}
|
||||
}
|
||||
RefreshCreateItemFileList();
|
||||
}
|
||||
|
||||
private void RefreshCreateItemFileList()
|
||||
|
||||
Reference in New Issue
Block a user