|
@@ -12,12 +12,20 @@ namespace ProjectExporter
|
|
|
private VisualElement _rootElement;
|
|
|
private VisualElement _contentContainer;
|
|
|
private Dictionary<string, AssetModel> _assetTrees;
|
|
|
- private string _currentTab = "Scenes";
|
|
|
+ private string _currentTab = "General"; // Default to General tab
|
|
|
+
|
|
|
+ // Checkbox states for the General tab
|
|
|
+ private bool _exportScenes = true;
|
|
|
+ private bool _exportPrefabs = true;
|
|
|
+ private bool _exportScriptableObjects = true;
|
|
|
+ private bool _exportMetaFiles = true;
|
|
|
+ private bool _exportSettings = true;
|
|
|
|
|
|
[MenuItem("Tools/Project Exporter")]
|
|
|
public static void ShowWindow()
|
|
|
{
|
|
|
- ProjectExporterWindow wnd = GetWindow<ProjectExporterWindow>(true, "Project Exporter");
|
|
|
+ var wnd = GetWindow<ProjectExporterWindow>();
|
|
|
+ wnd.titleContent = new GUIContent("Project Exporter", EditorGUIUtility.IconContent("d_Profiler.GlobalIllumination").image);
|
|
|
wnd.minSize = new Vector2(400, 300);
|
|
|
}
|
|
|
|
|
@@ -26,11 +34,8 @@ namespace ProjectExporter
|
|
|
_controller = new ProjectExporterController();
|
|
|
_assetTrees = new Dictionary<string, AssetModel>();
|
|
|
_rootElement = rootVisualElement;
|
|
|
-
|
|
|
- // Build the UI frame without loading asset data initially
|
|
|
- BuildUI();
|
|
|
|
|
|
- // Trigger the first content refresh
|
|
|
+ BuildUI();
|
|
|
RefreshContent(_currentTab);
|
|
|
}
|
|
|
|
|
@@ -39,6 +44,7 @@ namespace ProjectExporter
|
|
|
_rootElement.Clear();
|
|
|
|
|
|
var tabContainer = new VisualElement { style = { flexDirection = FlexDirection.Row } };
|
|
|
+ tabContainer.Add(ProjectExporterUI.CreateTab("General")); // New General tab
|
|
|
tabContainer.Add(ProjectExporterUI.CreateTab("Scenes"));
|
|
|
tabContainer.Add(ProjectExporterUI.CreateTab("Prefabs"));
|
|
|
tabContainer.Add(ProjectExporterUI.CreateTab("Scriptable Objects"));
|
|
@@ -46,23 +52,34 @@ namespace ProjectExporter
|
|
|
tabContainer.Add(ProjectExporterUI.CreateTab("Settings"));
|
|
|
_rootElement.Add(tabContainer);
|
|
|
|
|
|
- // Create a scrollable container for the main content
|
|
|
var scrollView = new ScrollView(ScrollViewMode.Vertical);
|
|
|
_rootElement.Add(scrollView);
|
|
|
|
|
|
_contentContainer = ProjectExporterUI.CreateMainContainer();
|
|
|
scrollView.Add(_contentContainer);
|
|
|
|
|
|
- var generateButton = ProjectExporterUI.CreateGenerateButton();
|
|
|
+ var generateButton = ProjectExporterUI.CreateGenerateButton(_currentTab == "General");
|
|
|
_rootElement.Add(generateButton);
|
|
|
- generateButton.clicked += () => _controller.ExportAssets(_assetTrees[_currentTab], _currentTab);
|
|
|
+
|
|
|
+ // The button's action will depend on the current tab
|
|
|
+ generateButton.clicked += () => {
|
|
|
+ if (_currentTab == "General")
|
|
|
+ {
|
|
|
+ PerformBulkExport();
|
|
|
+ }
|
|
|
+ else if (_assetTrees.ContainsKey(_currentTab))
|
|
|
+ {
|
|
|
+ _controller.ExportAssets(_assetTrees[_currentTab], _currentTab);
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
var tabs = tabContainer.Query<Button>().ToList();
|
|
|
- tabs[0].clicked += () => RefreshContent("Scenes");
|
|
|
- tabs[1].clicked += () => RefreshContent("Prefabs");
|
|
|
- tabs[2].clicked += () => RefreshContent("Scriptable Objects");
|
|
|
- tabs[3].clicked += () => RefreshContent("Meta Files");
|
|
|
- tabs[4].clicked += () => RefreshContent("Settings");
|
|
|
+ tabs[0].clicked += () => RefreshContent("General");
|
|
|
+ tabs[1].clicked += () => RefreshContent("Scenes");
|
|
|
+ tabs[2].clicked += () => RefreshContent("Prefabs");
|
|
|
+ tabs[3].clicked += () => RefreshContent("Scriptable Objects");
|
|
|
+ tabs[4].clicked += () => RefreshContent("Meta Files");
|
|
|
+ tabs[5].clicked += () => RefreshContent("Settings");
|
|
|
}
|
|
|
|
|
|
private void RefreshContent(string tabName)
|
|
@@ -70,35 +87,15 @@ namespace ProjectExporter
|
|
|
_currentTab = tabName;
|
|
|
_contentContainer.Clear();
|
|
|
|
|
|
- // Load data on demand if it hasn't been loaded yet
|
|
|
+ if (tabName == "General")
|
|
|
+ {
|
|
|
+ DrawGeneralTab();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
if (!_assetTrees.ContainsKey(tabName))
|
|
|
{
|
|
|
- EditorUtility.DisplayProgressBar("Loading...", $"Fetching {tabName}...", 0.5f);
|
|
|
- try
|
|
|
- {
|
|
|
- switch (tabName)
|
|
|
- {
|
|
|
- case "Scenes":
|
|
|
- _assetTrees[tabName] = _controller.GetAssets("t:Scene");
|
|
|
- break;
|
|
|
- case "Prefabs":
|
|
|
- _assetTrees[tabName] = _controller.GetAssets("t:Prefab");
|
|
|
- break;
|
|
|
- case "Scriptable Objects":
|
|
|
- _assetTrees[tabName] = _controller.GetAssets("t:ScriptableObject");
|
|
|
- break;
|
|
|
- case "Meta Files":
|
|
|
- _assetTrees[tabName] = _controller.GetAllMetaFiles();
|
|
|
- break;
|
|
|
- case "Settings":
|
|
|
- _assetTrees[tabName] = _controller.GetProjectSettingsFiles();
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- finally
|
|
|
- {
|
|
|
- EditorUtility.ClearProgressBar();
|
|
|
- }
|
|
|
+ LoadAssetTree(tabName);
|
|
|
}
|
|
|
|
|
|
var rootModel = _assetTrees[tabName];
|
|
@@ -111,6 +108,80 @@ namespace ProjectExporter
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void DrawGeneralTab()
|
|
|
+ {
|
|
|
+ var title = new Label("Select Export Types") { style = { unityFontStyleAndWeight = FontStyle.Bold } };
|
|
|
+ _contentContainer.Add(title);
|
|
|
+
|
|
|
+ var scenesToggle = ProjectExporterUI.CreateToggle("Export Scenes", _exportScenes, evt => _exportScenes = evt.newValue);
|
|
|
+ var prefabsToggle = ProjectExporterUI.CreateToggle("Export Prefabs", _exportPrefabs, evt => _exportPrefabs = evt.newValue);
|
|
|
+ var soToggle = ProjectExporterUI.CreateToggle("Export Scriptable Objects", _exportScriptableObjects, evt => _exportScriptableObjects = evt.newValue);
|
|
|
+ var metaToggle = ProjectExporterUI.CreateToggle("Export Meta Files", _exportMetaFiles, evt => _exportMetaFiles = evt.newValue);
|
|
|
+ var settingsToggle = ProjectExporterUI.CreateToggle("Export Settings", _exportSettings, evt => _exportSettings = evt.newValue);
|
|
|
+
|
|
|
+ _contentContainer.Add(scenesToggle);
|
|
|
+ _contentContainer.Add(prefabsToggle);
|
|
|
+ _contentContainer.Add(soToggle);
|
|
|
+ _contentContainer.Add(metaToggle);
|
|
|
+ _contentContainer.Add(settingsToggle);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void PerformBulkExport()
|
|
|
+ {
|
|
|
+ if (_exportScenes) ExportAllOfType("Scenes");
|
|
|
+ if (_exportPrefabs) ExportAllOfType("Prefabs");
|
|
|
+ if (_exportScriptableObjects) ExportAllOfType("Scriptable Objects");
|
|
|
+ if (_exportMetaFiles) ExportAllOfType("Meta Files");
|
|
|
+ if (_exportSettings) ExportAllOfType("Settings");
|
|
|
+
|
|
|
+ EditorUtility.DisplayDialog("Bulk Export", "Bulk export process finished.", "OK");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ExportAllOfType(string type)
|
|
|
+ {
|
|
|
+ if (!_assetTrees.ContainsKey(type))
|
|
|
+ {
|
|
|
+ LoadAssetTree(type);
|
|
|
+ }
|
|
|
+
|
|
|
+ var rootModel = _assetTrees[type];
|
|
|
+ if (rootModel != null)
|
|
|
+ {
|
|
|
+ SetChildrenSelection(rootModel, true); // Select all assets
|
|
|
+ _controller.ExportAssets(rootModel, type);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void LoadAssetTree(string tabName)
|
|
|
+ {
|
|
|
+ EditorUtility.DisplayProgressBar("Loading...", $"Fetching {tabName}...", 0.5f);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ switch (tabName)
|
|
|
+ {
|
|
|
+ case "Scenes":
|
|
|
+ _assetTrees[tabName] = _controller.GetAssets("t:Scene");
|
|
|
+ break;
|
|
|
+ case "Prefabs":
|
|
|
+ _assetTrees[tabName] = _controller.GetAssets("t:Prefab");
|
|
|
+ break;
|
|
|
+ case "Scriptable Objects":
|
|
|
+ _assetTrees[tabName] = _controller.GetAssets("t:ScriptableObject");
|
|
|
+ break;
|
|
|
+ case "Meta Files":
|
|
|
+ _assetTrees[tabName] = _controller.GetAllMetaFiles();
|
|
|
+ break;
|
|
|
+ case "Settings":
|
|
|
+ _assetTrees[tabName] = _controller.GetProjectSettingsFiles();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ EditorUtility.ClearProgressBar();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private VisualElement CreateAssetView(AssetModel model, int indentLevel)
|
|
|
{
|
|
|
const int indentWidth = 20;
|